• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict'
2var fs = require('fs')
3var path = require('path')
4var test = require('tap').test
5var Tacks = require('tacks')
6var File = Tacks.File
7var Dir = Tacks.Dir
8var common = require('../common-tap.js')
9var npm = require('../../lib/npm.js')
10var tar = require('tar')
11var mkdirp = require('mkdirp')
12var testdir = common.pkg
13var packed = path.join(testdir, 'packed')
14
15var fixture = new Tacks(
16  Dir({
17    'package.json': File({
18      name: 'bundled-transitive-deps',
19      version: '1.0.0',
20      dependencies: {
21        'a': '1.0.0',
22        '@c/d': '1.0.0'
23      },
24      bundleDependencies: [
25        'a',
26        '@c/d'
27      ]
28    }),
29    node_modules: Dir({
30      'a': Dir({
31        'package.json': File({
32          name: 'a',
33          version: '1.0.0',
34          dependencies: {
35            'b': '1.0.0'
36          }
37        })
38      }),
39      'b': Dir({
40        'package.json': File({
41          name: 'b',
42          version: '1.0.0'
43        })
44      }),
45      '@c/d': Dir({
46        'package.json': File({
47          name: '@c/d',
48          version: '1.0.0'
49        }),
50        'node_modules': Dir({
51          'e': Dir({
52            'package.json': File({
53              name: 'e',
54              version: '1.0.0'
55            })
56          })
57        })
58      })
59    })
60  })
61)
62
63function setup () {
64  cleanup()
65  fixture.create(testdir)
66}
67
68function cleanup () {
69  fixture.remove(testdir)
70}
71
72test('setup', function (t) {
73  setup()
74  npm.load({}, t.end)
75})
76
77function exists (t, filename) {
78  t.doesNotThrow(filename + ' exists', function () {
79    fs.statSync(filename)
80  })
81}
82
83test('bundled-transitive-deps', function (t) {
84  common.npm(['pack'], {cwd: testdir}, thenCheckPack)
85  function thenCheckPack (err, code, stdout, stderr) {
86    if (err) throw err
87    var tarball = stdout.trim()
88    t.comment(stderr.trim())
89    t.is(code, 0, 'pack successful')
90    mkdirp.sync(packed)
91    tar.extract({
92      file: path.join(testdir, tarball),
93      cwd: packed,
94      strip: 1,
95      sync: true
96    })
97    var transitivePackedDep = path.join(packed, 'node_modules', 'b')
98    exists(t, transitivePackedDep)
99    var nestedScopedDep = path.join(packed, 'node_modules', '@c', 'd', 'node_modules', 'e')
100    exists(t, nestedScopedDep)
101    t.end()
102  }
103})
104
105test('cleanup', function (t) {
106  cleanup()
107  t.end()
108})
109