VimUnDo<,~PL04/Lg:=A4 /WWWWM G_vM = var path = require('path')0var getGraph = require('../graphquire').getGraph&function optionsFor(name, cachePath) { return {@ location: path.join(module.filename, '../fixtures/' + name),, cachePath: cachePath || "./node_modules" }}0exports['test basic'] = function(assert, done) {5_  /vM 3'# var options = optionsFor('pckg1')4 getGraph(options, function onGraph(error, graph) { assert.deepEqual(graph, { "name": "pckg1",$ "cachePath": "./node_modules",5 "location": options.location + '/package.json', "modules": { "pckg1": { "id": "pckg1", "path": "./index.js", "requirements": {1 "http!foo.org/a": "http!foo.org/a.js" } }, "http!foo.org/a.js": {$ "id": "http!foo.org/a.js",3 "path": "node_modules/http!foo.org/a.js",' "uri": "http://foo.org/a.js", "requirements": {4 "./nested/b": "http!foo.org/nested/b.js" } },% "http!foo.org/nested/b.js": {+ "id": "http!foo.org/nested/b.js",: "path": "node_modules/http!foo.org/nested/b.js",. "uri": "http://foo.org/nested/b.js", "requirements": {1 "http!bar.org/c": "http!bar.org/c.js" } }, "http!bar.org/c.js": {$ "id": "http!bar.org/c.js",3 "path": "node_modules/http!bar.org/c.js",' "uri": "http://bar.org/c.js", } }$ }, 'correct graph is generated') done() })5_ vM 5_  vM  var path, paths, extension# if (isAbsolute(uri)) return uri paths = uri.split('/')+ base = base ? base.split('/') : [ '.' ]# if (base.length > 1) base.pop()$ while ((path = paths.shift())) {2 if (path === '..' && base.length) base.pop(), else if (path !== '.') base.push(path) } return base.join('/') }5_ vM5_  vM0exports['test basic'] = function(assert, done) {5_  vM  5_  vM function isAbsolute()5_  vM function isAbsolute(uri)5_  vM function isAbsolute(uri) {}5_   vM function isAbsolute(uri) {}5_  vM   5_  vM  uri[]5_  vM  uri.charAt()5_  vM  uri.charAt(0)5_  vM  uri.charAt(0) ""5_  vM  uri.charAt(0) !== ''5_  vM function isAbsolute(uri) {uri.charAt(0) !== '.'  uri.charAt(0) !== '.'5_" vM 7function isAbsolute(uri) { return uri.charAt(0) !== '.'5_  vM >function isAbsolute(uri) { return uri && uri.charAt(0) !== '.'} }5_@vM5_/@vM2exports['test resolve'] = function(assert, done) {5_(@vMW 5_@vM` assert.equal()5_@vMb assert.equal('')5_@vMe assert.equal(resolve())5_@vMg assert.equal(resolve(''))5_@vMi assert.equal(resolve('./'))5_ @vMj! assert.equal(resolve('./'), '')5_! "@vMo# assert.equal(resolve('./'), './')5_ "!%@vMr' assert.equal(resolve('./'), './', '')5_!#"@vM 5_"$#@vM 5_#%$@vM assert.equal()5_$&%@vM assert.equal(resolve())5_%'&@vM assert.equal(resolve(''))5_&('@vM assert.equal(resolve('.'))5_')(@vM assert.equal(resolve('.'), '')5_(*)!@vM" assert.equal(resolve('.'), './')5_)+*$@vM& assert.equal(resolve('.'), './', '')5_*,+*@vM 5_+-,@vM assert.equal()5_,.-@vM assert.equal('')5_-/.@vM assert.equal(resolve())5_.0/@vM assert.equal(resolve(''))5_/10@vM assert.equal(resolve('./a'))5_021 @vM" assert.equal(resolve('./a'), '')5_132#@vM% assert.equal(resolve('./a'), './a')5_243@vM, assert.equal(resolve('./a'), './a -> ./a')5_354$@vM0 assert.equal(resolve('./a'), './a'./a -> ./a')5_485(@vM4 assert.equal(resolve('./a'), './a', ''./a -> ./a')5_59782v2M 5_8:92v2M3 assert.equal(resolve('./a'), './a', './a -> ./a')5_9<:2v2M3 assert.equal(resolve('./b'), './a', './a -> ./a')5_:=;<2v2M require("test").run(exports)5_<>=2v2M  require("test").run(exports)k5_=?>2v2M#4 assert.equal(resolve('./a/'), './a', './a -> ./a')5_>@?,2v2M.5 assert.equal(resolve('./a/b'), './a', './a -> ./a')5_?A@52v2M17 assert.equal(resolve('./a/b'), './a', './a/b -> ./a')5_@BA%2v2M;9 assert.equal(resolve('./a/b'), './a', './a/b -> ./a/b')5_ACB+2v2MG3 assert.equal(resolve('./a'), './a', './a -> ./a')5_BDC02v2MJ; assert.equal(resolve('./a/b'), './a/b', './a/b -> ./a/b')5_CED&2v2MM- assert.equal(resolve('.'), './', '. -> ./')5_DFE(2v2MP/ assert.equal(resolve('./'), './', './ -> ./')5_EGF)2v2M[ 5_FHG2v2M` assert.equal()5_GIH2v2Mb assert.equal(resolve())5_HJI2v2Mc assert.equal(resolve(''))5_IKJ2v2Me assert.equal(resolve('./a'))5_JLK2v2Mg" assert.equal(resolve('./a', ''))5_KML$2v2Mm% assert.equal(resolve('./a', './b'))5_LNM'2v2Mp) assert.equal(resolve('./a', './b'), '')5_MON+2v2Mr, assert.equal(resolve('./a', './b'), './a')5_NPO.2v2Ms0 assert.equal(resolve('./a', './b'), './a', '')5_OQP12v2Mw 3 assert.equal(resolve('./a', './b'), './a', './a')5_PRQ?vM  5_QSR ?vM @ assert.equal(resolve('./a', './b'), './a', './a @ ./b -> ./a')5_RTS)?vM A assert.equal(resolve('./a', '../b'), './a', './a @ ./b -> ./a')5_SUT7?vM B assert.equal(resolve('./a', '../b'), '../a', './a @ ./b -> ./a')5_TVUA?vM  C assert.equal(resolve('./a', '../b'), '../a', './a @ ../b -> ./a')5_UWV??vM C assert.equal(resolve('./a', '../b'), '../a', './a @ ../b -> ./b')5_VXWA?vM  D assert.equal(resolve('./a', '../b'), '../a', './a @ ../b -> ../b')5_WYX;?vM D assert.equal(resolve('./a', '../b'), '../a', './a @ ../b -> ../a')5_XZY8?vM @ assert.equal(resolve('./a', './b'), './a', './a @ ./b -> ./a')5_Y[Z3?vM = assert.equal(resolve('./a/b'), './a/b', './a/b @ -> ./a/b')5_Z\[-?vM 5 assert.equal(resolve('./a'), './a', './a @ -> ./a')5_[]\*?vM 1 assert.equal(resolve('./'), './', './ @ -> ./')5_\^](?vM / assert.equal(resolve('.'), './', '. @ -> ./')5_]_^(?vM  / assert.equal(resolve('.'), './', '. @ /> ./')5_^`_DvM!  5__a`DvM5_`ba#DvM!D assert.equal(resolve('./a', '../b'), '../a', './a @ ../b => ../a')5_acb.DvM!F assert.equal(resolve('./a', '../b/c'), '../a', './a @ ../b => ../a')5_bdc7DvM!H assert.equal(resolve('./a', '../b/c'), '../b/a', './a @ ../b => ../a')5_ced>DvM!H assert.equal(resolve('./a', '../b/c'), '../b/a', './a @ ../b => ../a')5_dfeGDvM !J assert.equal(resolve('./a', '../b/c'), '../b/a', './a @ ../b/c => ../a')5_eifHDvM !L assert.equal(resolve('./a', '../b/c'), '../b/a', './a @ ../b/c => ../c/a')5_fjgi:DvM6" !5_ikjDvM:" assert.equal()5_jlkDvM<" assert.equal(resolve())5_kmlDvM=" assert.equal(resolve(''))5_lnmDvMC" assert.equal(resolve('../b'))5_monDvMG" assert.equal(resolve('../b'))5_npo!DvMK"# assert.equal(resolve('../b'), '')5_oqp&DvMM"' assert.equal(resolve('../b'), '../b')5_prq)DvMO"+ assert.equal(resolve('../b'), '../b', '')5_qsr-DvMQ"/ assert.equal(resolve('../b'), '../b', '../b')5_rvs DvMj " var path, paths, extension5_swuv DvM" return base.join('/')5_vxwDvM" bas = base.join('/')5_wyxDvM# "5_xzyDvM# return base === ''5_y{zDvM# return base === '.'5_z|{DvM# return base === '.' ? ''5_{}|DvM# return base === '.' ? './'5_|~} DvM # var path, paths5_}~&DvM#0 if (path === '..' && base.length) base.pop()5_~.DvM#8 if (path === '..' && base.length) removed base.pop()5_DvM#* else if (path !== '.') base.push(path)5_0DvM.#: if (path === '..' && base.length) removed = base.pop()5_%DvMZ!$ !#5_ DvM^!$ assert.equal()5_ DvM`!$ assert.equal(resolve())5_ DvM`!$ assert.equal(resolve(''))5_ DvMg!$" assert.equal(resolve('../../a'))5_ #DvMk!$& assert.equal(resolve('../../a', ''))5_ (DvMn!$) assert.equal(resolve('../../a', './b'))5_ +DvMo!$- assert.equal(resolve('../../a', './b'), '')5_ 3DvMu!$4 assert.equal(resolve('../../a', './b'), '../../a')5_ 6DvM!$8 assert.equal(resolve('../../a', './b'), '../../a', '')5_ =DvM!$? assert.equal(resolve('../../a', './b'), '../../a', '../../a')5_ CDvM!$E assert.equal(resolve('../../a', './b'), '../../a', '../../a @ ./b')5_ KDvM!$L assert.equal(resolve('../../a', './b'), '../../a', '../../a @ ./b => ../')5_ DvMQ "%  "$5_!DvMU "% assert.equal()5_!DvMX "% assert.equal(resolve)5_!DvMY "% assert.equal(resolve()5_!DvMZ "% assert.equal(resolve('')5_! DvM_ "%! assert.equal(resolve('../../a')5_!#DvMa "%% assert.equal(resolve('../../a', '')5_!)DvMh "%* assert.equal(resolve('../../a', './b/c')5_!,DvMp "%. assert.equal(resolve('../../a', './b/c', '')5_!)DvM{! "%2 assert.equal(resolve('../../a', './b/c', '../a')5_#v#M& %5_ #v#M& else if ()5_#v#M& else if (path === '')5_#v#M& else if (path === '..')5_&#v#M&' else if (path === '..') base.push()5_#v#M"&% if (path !== '.') base.push(path)5_#v#M#+ else if (path === '..') base.push(path)5_ #v#M"*%* else if (path !== '.') base.push(path)5_ #v#M % var path, paths, removed5_ #v#M%% if (path !== '.') base.push(path)5_$#v#M+%0 if (path === '..' && base.length) base.pop()5_!2#v#M*!#& !#%5_"#v#M.!#& assert.equal()5_"#v#M/!#& assert.equal('')5_"#v#M2!#& assert.equal(resolve())5_"#v#M2!#& assert.equal(resolve(''))5_"#v#M7!#&! assert.equal(resolve('../../'))5_"#v#M=!#&% assert.equal(resolve('../../', ''))5_"!#v#MF!#&$ assert.equal(resolve('../..', ''))5_"*#v#MN!#&+ assert.equal(resolve('../..', './a/b/c'))5_"-#v#MR!#&/ assert.equal(resolve('../..', './a/b/c'), '')5_"0#v#MU!#&1 assert.equal(resolve('../..', './a/b/c'), './')5_"2""/v/M_!#&2 assert.equal(resolve('../..', './a/b/c'), './' )5_"3""/v/M`!#&4 assert.equal(resolve('../..', './a/b/c'), './', ''5_"2""/v/Me!#&M assert.equal(resolve('../..', './a/b/c'), './', ''../..', './a/b/c'), './''5_"<""/v/Mj!#&L assert.equal(resolve('../..', './a/b/c'), './', '../..', './a/b/c'), './''5_"G""/v/Mq!#&K assert.equal(resolve('../..', './a/b/c'), './', '../.. @ ./a/b/c'), './''5_"J""/v/Mv!#&J assert.equal(resolve('../..', './a/b/c'), './', '../.. @ ./a/b/c => ./''5_"I""/v/Mz!#&I assert.equal(resolve('../..', './a/b/c'), './', '../.. @ ./a/b/c => ./'5_!3!!1v1M "&3 assert.equal(resolve('../../a', './b/c'), '../a')5_!@!!1v1M "&O assert.equal(resolve('../../a', './b/c'), '../a', '../../a', './b/c'), '../a'5_!I!!1v1M "&N assert.equal(resolve('../../a', './b/c'), '../a', '../../a @ ./b/c'), '../a'5_!M!!1v1M/ "&M assert.equal(resolve('../../a', './b/c'), '../a', '../../a @ ./b/c => ../a'5_!"1vMT' &5_#1vMV' if ()5_#1vMY' if (path === '')5_#1vM\' if (path === '..')5_#1vM\' if (path === '..') {}5_$1vM^) (5_ %1vMa) if ()5_%1vMf) if (base.length)5_%1vMk* )5_&1vM* else base.push()5_&1vM* }5_&1vM* } else if ()5_&1vM* } else if (path "")5_&1vM* } else if (path !== '')5_&1vM* } else if (path !== '.')5_&1vM* } else if (path !== '.') {}5_'1vM, +5_(1vM, else base.push(part)5_(1vM, base.push()5_(1vM ,! if (base.length) base.pop()5_(1vM,+ if (base.length && base[]) base.pop()5_.(1vM,: if (base.length && base[base.length - 1]) base.pop()5_4(1vM,A if (base.length && base[base.length - 1] !== '') base.pop()5_5(1vM0,B if (base.length && base[base.length - 1] !== '.') base.pop()5_,vM),A if (path === '..' && base.length && last !== path) base.pop(), if (path !== '.') base.push(last = path) }5_0vM*1* }5_0vM+ *5_ 0vM+ if ()5_0vM+C if (base.length && base[base.length - 1] !== '..') base.pop()5_:0vMS+D if (base.length) && base[base.length - 1] !== '..') base.pop()5_90vM_,9 if (base.length) && base[base.length - 1] !== '..')5_;0vM`,< if (base.length) && base[base.length - 1] !== '..') {}5_0vMc, else base.push(path)5_ 0vMh, ibase.pop()5_0vMi, base.pop()5_0vMl, if (base.pop()5_0vMn, if (base.pop())5_0vMq, if (base.pop() === '')5_0vMr, if (base.pop() === '.')5_*0vMy,+ if (base.pop() === '.') base.push()5_0vM,; if (base.length) && base[base.length - 1] !== '..') {5_0vM2 if (base.)5_'0vM'), ')+5_(0vM'), assert.equal()5_(0vM'), assert.equal(resolve())5_(0vM'), assert.equal(resolve(''))5_(0vM"'), assert.equal(resolve('./b'))5_ (0vM&'), assert.equal(resolve('./'))5_  (0vM('),! assert.equal(resolve('./', ''))5_   ($0vM-'),% assert.equal(resolve('./', '../b'))5_   ('0vM2'),) assert.equal(resolve('./', '../b'), '')5_   (,0vM4'),- assert.equal(resolve('./', '../b'), '../b')5_  (/0vM5'),1 assert.equal(resolve('./', '../b'), '../b', '')5_ (20vM93'),3 assert.equal(resolve('./', '../b'), '../b', './')5_(+0vMk4'),B assert.equal(resolve('./', '../b'), '../b', './ @ ../b => ../b')5_0vMz,# return base === '.' ? './' : base5_#0vM,2 return base === '.' || base === '' ? './' : base5_00vM,5 return base === '.' || base === '../' ? './' : base5_.0vM,. return base === '.' || base === '../' ? base5_20vM5,3 return base === '.' || base === '../' ? base + ''5_40vM6,4 return base === '.' || base === '../' ? base + '/'5_&0vM7,; return base === '.' || base === '../' ? base + '/' : base5_(((AvM(+- (*,5_)((AvM(*.A assert.equal(resolve('./', '../b'), '../', './ @ ../b => ../b')5_)+((AvM(*.B assert.equal(resolve('./a', '../b'), '../', './ @ ../b => ../b')5_)2((AvM(*.C assert.equal(resolve('./a', '../b'), '../a', './ @ ../b => ../b')5_)A((AvM8(*.D assert.equal(resolve('./a', '../b'), '../a', './a @ ../b => ../b')5_)A((AvM)+/ )+.5_*((AvM)+/ assert.equal()5_*((AvM)+/ assert.equal(resolve())5_ *((AvM)+/ assert.equal(resolve(''))5_! *((AvM)+/ assert.equal(resolve('..'))5_ "!*((AvM)+/! assert.equal(resolve('..', ''))5_!#"*!((AvM)+/# assert.equal(resolve('..', '..'))5_"$#*$((AvM)+/' assert.equal(resolve('..', '..', ''))5_#%$*,((AvM)+/- assert.equal(resolve('..', '..', '../../'))5_$&%*/((AvM)+/1 assert.equal(resolve('..', '..', '../../'), '')5_%'&*!((AvM)+/- assert.equal(resolve('..', '..', '../../'))5_&('*.((AvM)+/. assert.equal(resolve('..', '..'), '../../'))5_')(*/((AvM!)+/0 assert.equal(resolve('..', '..'), '../../', ''5_(*)*@((AvM-9)+/@ assert.equal(resolve('..', '..'), '../../', '.. @ .. => ../..'5_)+*((AvMD0 /5_*,+))AvMF0 if ()5_+-, ))AvMZ0 if (base[])5_,.- ))AvMc0 if (base[])5_-/.))AvMj0 if (base[base.length])5_.0/))AvMk0 if (base[base.length][])5_/10))AvMn0 if (base[base.length][-1])5_021))AvMr0 if (base[base.length - 1][-1])5_132%))AvMv0' if (base[base.length - 1][-1] === '')5_243())AvMw0( if (base[base.length - 1][-1] === '.')5_3543))AvMz04 if (base[base.length - 1][-1] === '.') base.push()5_465))AvM|: return base === '.' || base === '..' ? base + '/' : base5_576((AvM:/ base = base.join('/')5_687((AvM;/ return base = base.join('/')5_798((AvM0 /5_8:9))AvM0 console.log()5_9;:))AvM0 console.log(base.join())5_:<;))AvM0 console.log(base.join(''))5_;=<vM<0 console.log(base.join('/'))5_<>=vM06 if (base[base.length - 1][-1] === '.') base.push('')5_=?>#vM=0; if (base[base.length - 1].substr() === '.') base.push('')5_>@?vM>8 console.log(base.join('/'), base[base.length - 1][-1])5_?A@*?vM?)+/A assert.equal(resolve('..', '..'), '../../', '.. @ .. => ../..')5_@BA**A*vM*,0 *,/5_ACB+*A*vM*,0B assert.equal(resolve('..', '..'), '../../', '.. @ .. => ../../')5_BDC+2*A*vM@*,0C assert.equal(resolve('../', '..'), '../../', '.. @ .. => ../../')5_CED+%*A*vM +-1 +-05_DFE, *A*vM +-1B assert.equal(resolve('..', '..'), '../../', '.. @ .. => ../../')5_EGF,7*A*vM A+-1C assert.equal(resolve('..', '../'), '../../', '.. @ .. => ../../')5_FHG,7*A*vM ,.2 ,.15_GIH-*A*vM ,.2B assert.equal(resolve('..', '..'), '../../', '.. @ .. => ../../')5_HJI-!*A*vM B,.2C assert.equal(resolve('../', '..'), '../../', '.. @ .. => ../../')5_IKJ-3*A*vM #,.2D assert.equal(resolve('../', '../'), '../../', '.. @ .. => ../../')5_JLK-9*A*vM $C,.2E assert.equal(resolve('../', '../'), '../../', '../ @ .. => ../../')5_KML-9*A*vM +-/3 -/25_LNM. *A*vM /-/3B assert.equal(resolve('..', '..'), '../../', '.. @ .. => ../../')5_MON.-*A*vM 4-/3D assert.equal(resolve('..', '../a'), '../../', '.. @ .. => ../../')5_NPO.5*A*vM 9-/3A assert.equal(resolve('..', '../a'), '../', '.. @ .. => ../../')5_OQP.A*A*vM =D-/3C assert.equal(resolve('..', '../a'), '../', '.. @ ../a => ../../')5_PRQ."*A*vM TE-/3@ assert.equal(resolve('..', '../a'), '../', '.. @ ../a => ../')5_QSR.9*A*vM [F-/3B assert.equal(resolve('..', '../a/b'), '../', '.. @ ../a => ../')5_RTS.:*A*vM u.04 .035_SUT/*A*vM y.04B assert.equal(resolve('..', '..'), '../../', '.. @ .. => ../../')5_TVU/**A*vM |.04A assert.equal(resolve('.', '..'), '../../', '.. @ .. => ../../')5_UWV/-*A*vM .04> assert.equal(resolve('.', '..'), '../', '.. @ .. => ../../')5_VW/;*A*vM G.04= assert.equal(resolve('.', '..'), '../', '. @ .. => ../../')5_0vM+ if (base.length) {5 if base[base.length - 1] !== '..') base.pop()6 if (base[base.length - 1] !== '..') base.pop()5_0vM, - if ()5_ 0vM- if (base[])5_0vM-" if (base[base.length - 1])5_!0vM-) if (base[base.length - 1] === '')5_'0vM-* if (base[base.length - 1] === '.')5_'0vM-5_0vM5_*0vM*-5 if (base[base.length - 1] === '.') base.pop()5_&1vM* else base.push(path)5_&1vM* ++! if (base.length) base.pop()5_&1vM* ++ else base.push(path)5_'1vM* + if ()5_ '1vM+ if (base.length )5_!!1v1M-&1 else if (path !== '.') base.push(last = path)5_$#v#M%I if (path === '..' && base.length && base.length !== 1 && ) base.pop()5_(#v#M%J if (path === '..' && base.length && (base.length !== 1 && ) base.pop()5_>#v#M%P if (path === '..' && base.length && (base.length !== 1 && base[]) base.pop()5_C#v#M%Q if (path === '..' && base.length && (base.length !== 1 && base[0]) base.pop()5_E#v#M%X if (path === '..' && base.length && (base.length !== 1 && base[0] !== '') base.pop()5_K#v#M(%Y if (path === '..' && base.length && (base.length !== 1 && base[0] !== '.') base.pop()5_N#v#M)%Z if (path === '..' && base.length && (base.length !== 1 && base[0] !== '.')) base.pop()5_#v#M% & if ()5_#v#M& if (base.length ==)5_#v#M\&%* else if (path !== '.') base.push(path)5_#v#M/%5 if (path !== '.' && base.length ) base.push(path)5_#v#M>%C if (path !== '.' && path === '..' base.length ) base.push(path)5_#v#M %% if (path === '..' && ) base.pop()5_#v#M%! if (path === '..') base.pop()5_#v#M%4 if (path !== '.' && base.length) base.push(path)5_DvM $ base.pop()5_stvu DvM "* if (isAbsolute(uri) || !base) return uri5_sutDvMu " base.pop()5_fhig;DvM!J assert.equal(resolve('./a', '../b'), '../a', './a @ ../b => ../a')5_gh8DvM !I assert.equal(resolve('./a', './b'), './a', './a @ ./b => ./a')5_:<;2v2M require("test").run(exports)b5_56873vM3 lassert.equal(resolve('./a'), './a', './a -> ./a')5_5763vM  }5_  vM var path, paths, extension% if (isAbsolute(uri)) return uri paths = uri.split('/')- base = base ? base.split('/') : [ '.' ]% if (base.length > 1) base.pop()& while ((path = paths.shift())) {4 if (path === '..' && base.length) base.pop(). else if (path !== '.') base.push(path) } return base.join('/') }5_  vM  var path, paths, extension5