passenger 5.1.5 → 5.1.6

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b67e8e2889ca5fa178f9bb22bb48aebc96ef534e
4
- data.tar.gz: 5d696b312ae76c5f3c78c3897bcc0cffd2c09775
3
+ metadata.gz: 4311bd603fba4a811f0b73e87bc6c4bcea81f3c7
4
+ data.tar.gz: 6c98efbb7f95813cefb4baf17e1be8b9d7b9c4e9
5
5
  SHA512:
6
- metadata.gz: 68c4a6e88acfc532412ac224b7b08d67b7ea4eae23533eb1b005e93d72758351b87e0e0b0d8b313d4afe947d71bd9b8123bd06a4e88c831fd57eb01b0226b337
7
- data.tar.gz: e8d51c09e2e00627356ad862ede43f209c064886fcc9e9f1ff23fe4f13ce4c10b3ede78bd43c6bbd5641b87c82803c1eb22118e3214d0133ce5451b768f9767b
6
+ metadata.gz: f4b1a51f5d6b745840a27fc0ea44476ffe4c91078d3e9f8f7cd6f0241e0113289dc69686632a836838fa30cb5c0d839f174871a2908707a08edc9b2b9d3bc5f2
7
+ data.tar.gz: 786dbaba625c413aa66423ff5837a4132e938355327addac070a063f4b01e3a609f138039715c6bad5769e2cc73b19c5adf3688038a859074b21a1fcfeaf0753
data/CHANGELOG CHANGED
@@ -1,3 +1,23 @@
1
+ Release 5.1.6
2
+ -------------------------------
3
+
4
+ * Fixes a typo that causes a looping crash when long security update information is sent by the server. In practice we will keep the messages shorter to avoid triggering this until there has been ample time to upgrade.
5
+ * Fixes unnecessary process respawn if it was detached and min_instances is set to 0. Closes GH-1735.
6
+ * Introduces APT packages for Debian 9 "Stretch", with Passenger built as dynamic module. Closes GH-1960.
7
+ * Changes APT packages for Ubuntu 17.04 "Zesty" from static to dynamic module.
8
+ * [Standalone] Now uses graceful shutdown for the Nginx engine under the hood (requested as part of GH-1598). Thanks to PikachuEXE for contributing this.
9
+ * [Standalone] Fixes a memory corruption issue in the builtin engine. The issue was introduced in 5.1.5 (settings handling refactoring).
10
+ * [Standalone] Cleanup the temp dir before aborting when startup cannot continue, e.g. when Passenger is already running. Closes GH-1953.
11
+ * Fixes WSGI crash with Python 3 and non-ASCII characters in headers or the URL. Closes GH-1935. Thanks to n4nn31355 for the assistance.
12
+ * [Nginx] The preferred Nginx version is now 1.12.1 (previously 1.10.3), except for the Phusion Nginx APT package, which is pinned at 1.10.3 until an 1.12.x compatible lua module becomes available.
13
+ * [Nginx] Fixes CVE-2017-7529, an integer overflow vulnerability in the Nginx range filter module. This is accomplished by upgrading to Nginx 1.12.1, or applying the patch (Phusion Nginx APT package).
14
+ * Updated libcurl version used in precompiled binaries (used for e.g. gem installs) to 7.54.1 (was: 7.54.0).
15
+ * Updated OpenSSL version used in precompiled binaries (used for e.g. gem installs) to 1.0.2l (was: 1.0.2k).
16
+ * Updated GeoIP version used in precompiled binaries (used for e.g. gem installs) to 1.6.11 (was: 1.6.9).
17
+ * Updated PCRE version used in precompiled binaries (used for e.g. gem installs) to 8.40 (was: 8.39).
18
+ * Adds support for building with MacPorts' OpenSSL. Closes GH-1959.
19
+
20
+
1
21
  Release 5.1.5
2
22
  -------------------------------
3
23
 
@@ -56,6 +56,8 @@ task 'test:install_deps' do
56
56
  bundle_args = ENV['BUNDLE_ARGS'].to_s
57
57
  end
58
58
 
59
+ yarn_args = ENV['YARN_ARGS'].to_s
60
+
59
61
  if !PlatformInfo.locate_ruby_tool('bundle') || bundler_too_old?
60
62
  sh "#{gem_install} bundler"
61
63
  end
@@ -64,7 +66,7 @@ task 'test:install_deps' do
64
66
  sh "bundle install #{bundle_args} --without="
65
67
  else
66
68
  if install_base_deps
67
- sh "bundle install #{bundle_args} --without doc"
69
+ sh "bundle install #{bundle_args} --without doc release"
68
70
  end
69
71
  if install_doctools
70
72
  sh "bundle install #{bundle_args} --without base"
@@ -91,7 +93,7 @@ task 'test:install_deps' do
91
93
  " BUNDLE_ARGS='#{bundle_args}'"
92
94
  end
93
95
  if boolean_option('NODE_MODULES', default)
94
- sh "npm install"
96
+ sh "yarn install #{yarn_args}"
95
97
  end
96
98
  end
97
99
 
@@ -7,6 +7,7 @@ export DEVDEPS_DEFAULT=no
7
7
  export DEPS_TARGET="$CACHE_DIR/bundle"
8
8
  export USE_CCACHE=true
9
9
  export COMPILE_CONCURRENCY=${COMPILE_CONCURRENCY:-2}
10
+ export YARN_ARGS="--cache-folder='$CACHE_DIR/yarn'"
10
11
  export CCACHE_DIR="$CACHE_DIR/ccache"
11
12
  export CCACHE_COMPRESS=1
12
13
  export CCACHE_COMPRESSLEVEL=3
@@ -28,11 +28,11 @@ run_exec docker run --rm $TTY_ARGS \
28
28
  -v "$CACHE_DIR:/passenger/.ci_cache" \
29
29
  -e "APP_UID=$(id -u)" \
30
30
  -e "APP_GID=$(id -g)" \
31
- -e "TRAP_DEBUG_CONSOLE=$TRAP_DEBUG_CONSOLE" \
31
+ -e "DEBUG_CONSOLE=$DEBUG_CONSOLE" \
32
32
  -e "TEST_RUBY_VERSION=$TEST_RUBY_VERSION" \
33
33
  -e "COMPILE_CONCURRENCY=$COMPILE_CONCURRENCY" \
34
34
  -e "SUDO=$SUDO" \
35
- phusion/passenger-ci-docker-env:1.0.0 \
35
+ phusion/passenger-ci-docker-env:1.0.1 \
36
36
  /sbin/my_init --skip-runit --skip-startup-files --quiet -- \
37
37
  /passenger/dev/ci/scripts/inituidgid \
38
38
  /sbin/setuser app \
@@ -41,6 +41,7 @@ header2 "Creating cache directories"
41
41
  run mkdir -p "$CACHE_DIR"
42
42
  run mkdir -p "$CACHE_DIR/bundle"
43
43
  run mkdir -p "$CACHE_DIR/ccache"
44
+ run mkdir -p "$CACHE_DIR/yarn"
44
45
  echo
45
46
 
46
47
  if [[ "$OS" = macos ]]; then
@@ -1,7 +1,7 @@
1
1
  #!/bin/bash
2
2
  set -e
3
3
 
4
- TEST_DYNAMIC_WITH_NGINX_VERSION=1.9.15
4
+ TEST_DYNAMIC_WITH_NGINX_VERSION=1.12.1
5
5
  NGINX_ADDON_DIR=$(./bin/passenger-config --nginx-addon-dir)
6
6
  echo "+ Nginx addon dir: $NGINX_ADDON_DIR"
7
7
  echo
@@ -6,7 +6,7 @@
6
6
  "version": "0.0.0",
7
7
  "description": "A fast and robust web server and application server for Ruby, Python and Node.js",
8
8
  "main": "index.js",
9
- "dependencies": {
9
+ "devDependencies": {
10
10
  "should": "^2.0.1",
11
11
  "sinon": "^1.7.3",
12
12
  "express": "^3.4.8",
@@ -77,7 +77,7 @@ Group::processUpperLimitsReached() const {
77
77
  */
78
78
  bool
79
79
  Group::allEnabledProcessesAreTotallyBusy() const {
80
- return nEnabledProcessesTotallyBusy == enabledCount;
80
+ return nEnabledProcessesTotallyBusy == enabledCount && enabledCount > 0;
81
81
  }
82
82
 
83
83
  /**
@@ -118,10 +118,16 @@ Controller::initialize() {
118
118
  if (requestConfigCache->singleAppMode) {
119
119
  boost::shared_ptr<Options> options = boost::make_shared<Options>();
120
120
  fillPoolOptionsFromConfigCaches(*options, requestConfigCache);
121
- options->appRoot = config["app_root"].asString();
122
- options->environment = config["environment"].asString();
123
- options->appType = config["app_type"].asString();
124
- options->startupFile = config["startup_file"].asString();
121
+
122
+ string appRoot = config["app_root"].asString();
123
+ string environment = config["environment"].asString();
124
+ string appType = config["app_type"].asString();
125
+ string startupFile = config["startup_file"].asString();
126
+
127
+ options->appRoot = appRoot;
128
+ options->environment = environment;
129
+ options->appType = appType;
130
+ options->startupFile = startupFile;
125
131
  *options = options->copyAndPersist();
126
132
  poolOptionsCache.insert(options->getAppGroupName(), options);
127
133
  }
@@ -475,8 +475,8 @@ public:
475
475
  string signature64 = responseJson["signature"].asString();
476
476
  string data64 = responseJson["data"].asString();
477
477
 
478
- signatureChars = (char *)malloc(signature64.length() + 1);
479
- dataChars = (char *)malloc(signature64.length() + 1);
478
+ signatureChars = (char *)malloc(modp_b64_decode_len(signature64.length()));
479
+ dataChars = (char *)malloc(modp_b64_decode_len(data64.length()));
480
480
  if (signatureChars == NULL || dataChars == NULL) {
481
481
  logUpdateFailResponse("out of memory", responseData);
482
482
  break;
@@ -1527,11 +1527,7 @@ initializeAgent(int argc, char **argv[], const char *processName,
1527
1527
  exit(1);
1528
1528
  }
1529
1529
 
1530
- // Make a copy of the arguments before changing process title.
1531
- origArgv = (char **) malloc(argc * sizeof(char *));
1532
- for (int i = 0; i < argc; i++) {
1533
- origArgv[i] = strdup((*argv)[i]);
1534
- }
1530
+ storeArgvCopy(argc, *argv);
1535
1531
 
1536
1532
  // Change process title.
1537
1533
  size_t totalArgLen = strlen((*argv)[0]);
@@ -1641,6 +1637,15 @@ initializeAgentOptions(const char *processName, VariantMap &options,
1641
1637
  }
1642
1638
  }
1643
1639
 
1640
+ void
1641
+ storeArgvCopy(int argc, char *argv[]) {
1642
+ // Make a copy of the arguments before changing process title.
1643
+ origArgv = (char **) malloc(argc * sizeof(char *));
1644
+ for (int i = 0; i < argc; i++) {
1645
+ origArgv[i] = strdup(argv[i]);
1646
+ }
1647
+ }
1648
+
1644
1649
  void
1645
1650
  shutdownAgent(VariantMap *agentOptions) {
1646
1651
  delete agentOptions;
@@ -46,6 +46,7 @@ VariantMap initializeAgent(int argc, char **argv[], const char *processName,
46
46
  int argStartIndex = 1);
47
47
  void initializeAgentOptions(const char *processName, VariantMap &options,
48
48
  PreinitializationFunc preinit = NULL);
49
+ void storeArgvCopy(int argc, char *argv[]);
49
50
  void installAgentAbortHandler();
50
51
  void installDiagnosticsDumper(DiagnosticsDumper func, void *userData);
51
52
 
@@ -24,7 +24,7 @@ ConfigKit is a configuration management system that lets you define configuratio
24
24
  - Deleting data
25
25
  - Fetching data
26
26
  - Default values
27
- - Dumping all data
27
+ - Inspecting all data
28
28
  * Putting it all together: synchronous version
29
29
  - SecurityChecker example: a configurable, low-level component
30
30
  - DnsQuerier example: a low-level component with post-configuration application operations
@@ -80,7 +80,7 @@
80
80
  #define PASSENGER_API_VERSION_MAJOR 0
81
81
  #define PASSENGER_API_VERSION_MINOR 3
82
82
  #define PASSENGER_DEFAULT_USER "nobody"
83
- #define PASSENGER_VERSION "5.1.5"
83
+ #define PASSENGER_VERSION "5.1.6"
84
84
  #define POOL_HELPER_THREAD_STACK_SIZE 262144
85
85
  #define PROCESS_SHUTDOWN_TIMEOUT 60
86
86
  #define PROCESS_SHUTDOWN_TIMEOUT_DISPLAY "1 minute"
@@ -273,7 +273,7 @@ bool Crypto::generateAndAppendNonce(string &nonce) {
273
273
  unsigned char rndChars[rndLen];
274
274
 
275
275
  if (generateRandomChars(rndChars, rndLen)) {
276
- char rndChars64[rndLen * 2];
276
+ char rndChars64[modp_b64_encode_len(rndLen)];
277
277
  modp_b64_encode(rndChars64, (const char *) rndChars, rndLen);
278
278
 
279
279
  nonce.append(rndChars64);
@@ -724,7 +724,7 @@ bool Crypto::generateAndAppendNonce(string &nonce) {
724
724
  return false;
725
725
  }
726
726
 
727
- char rndChars64[rndLen * 2];
727
+ char rndChars64[modp_b64_encode_len(rndLen)];
728
728
  modp_b64_encode(rndChars64, (const char *) rndChars, rndLen);
729
729
 
730
730
  nonce.append(rndChars64);
@@ -155,7 +155,7 @@ getFileType(const StaticString &filename, CachedFileStat *cstat, boost::mutex *c
155
155
 
156
156
  void
157
157
  createFile(const string &filename, const StaticString &contents, mode_t permissions, uid_t owner,
158
- gid_t group, bool overwrite)
158
+ gid_t group, bool overwrite, const char *callerFile, unsigned int callerLine)
159
159
  {
160
160
  FileDescriptor fd;
161
161
  int ret, e, options;
@@ -166,7 +166,8 @@ createFile(const string &filename, const StaticString &contents, mode_t permissi
166
166
  }
167
167
  do {
168
168
  fd.assign(open(filename.c_str(), options, permissions),
169
- __FILE__, __LINE__);
169
+ (callerFile == NULL) ? __FILE__ : callerFile,
170
+ (callerLine == 0) ? __LINE__ : callerLine);
170
171
  } while (fd == -1 && errno == EINTR);
171
172
  if (fd != -1) {
172
173
  FileGuard guard(filename);
@@ -1031,9 +1032,9 @@ runShellCommand(const StaticString &command) {
1031
1032
  }
1032
1033
 
1033
1034
  string
1034
- runCommandAndCaptureOutput(const char **command) {
1035
+ runCommandAndCaptureOutput(const char **command, int *status) {
1035
1036
  pid_t pid;
1036
- int e;
1037
+ int e, waitRet;
1037
1038
  Pipe p;
1038
1039
 
1039
1040
  p = createPipe(__FILE__, __LINE__);
@@ -1087,14 +1088,12 @@ runCommandAndCaptureOutput(const char **command) {
1087
1088
  result.append(buf, ret);
1088
1089
  }
1089
1090
  p[0].close();
1090
- syscalls::waitpid(pid, NULL, 0);
1091
1091
 
1092
- if (result.empty()) {
1093
- throw RuntimeException(string("The '") + command[1] +
1094
- "' command failed");
1095
- } else {
1096
- return result;
1092
+ waitRet = syscalls::waitpid(pid, NULL, 0);
1093
+ if (status != NULL) {
1094
+ *status = waitRet;
1097
1095
  }
1096
+ return result;
1098
1097
  }
1099
1098
  }
1100
1099
 
@@ -148,7 +148,8 @@ FileType getFileType(const StaticString &filename, CachedFileStat *cstat = 0,
148
148
  void createFile(const string &filename, const StaticString &contents,
149
149
  mode_t permissions = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH,
150
150
  uid_t owner = USER_NOT_GIVEN, gid_t group = GROUP_NOT_GIVEN,
151
- bool overwrite = true);
151
+ bool overwrite = true,
152
+ const char *callerFile = NULL, unsigned int callerLine = 0);
152
153
 
153
154
  /**
154
155
  * Returns a canonical version of the specified path. All symbolic links
@@ -343,12 +344,14 @@ void disableMallocDebugging();
343
344
  int runShellCommand(const StaticString &command);
344
345
 
345
346
  /**
346
- * Run a command and capture its stdout output.
347
+ * Run a command and capture its stdout output. This function
348
+ * does not care whether the command fails.
347
349
  *
348
- * @param command The argument to pass to execvp();
349
- * @throws SystemException.
350
+ * @param command The argument to pass to execvp().
351
+ * @param status The status of the child process will be stored here, if non-NULL.
352
+ * @throws SystemException
350
353
  */
351
- string runCommandAndCaptureOutput(const char **command);
354
+ string runCommandAndCaptureOutput(const char **command, int *status = NULL);
352
355
 
353
356
  /**
354
357
  * Async-signal safe way to fork().
@@ -107,7 +107,7 @@ public:
107
107
  while (queue.empty() && !timedOut) {
108
108
  posix_time::time_duration diff = deadline -
109
109
  posix_time::microsec_clock::local_time();
110
- if (diff.is_negative() < 0) {
110
+ if (diff.is_negative()) {
111
111
  timedOut = true;
112
112
  } else {
113
113
  timedOut = !added.timed_wait(l,
@@ -312,6 +312,9 @@ public:
312
312
  string psOutput = this->psOutput;
313
313
  if (psOutput.empty()) {
314
314
  psOutput = runCommandAndCaptureOutput(command);
315
+ if (psOutput.empty()) {
316
+ throw RuntimeException("The 'ps' command failed");
317
+ }
315
318
  }
316
319
  pidsArg.resize(0);
317
320
  fmtArg.resize(0);
@@ -123,7 +123,7 @@ if sys.version_info[0] >= 3:
123
123
  raise exc_info[0].with_traceback(exc_info[1], exc_info[2])
124
124
 
125
125
  def bytes_to_str(b):
126
- return b.decode()
126
+ return b.decode('latin-1')
127
127
 
128
128
  def str_to_bytes(s):
129
129
  return s.encode('latin-1')
@@ -31,10 +31,15 @@ module PhusionPassenger
31
31
 
32
32
  PACKAGE_NAME = 'passenger'
33
33
  # Run 'rake src/cxx_supportlib/Constants.h' after changing this number.
34
- VERSION_STRING = '5.1.5'
34
+ VERSION_STRING = '5.1.6'
35
35
 
36
- PREFERRED_NGINX_VERSION = '1.10.3'
37
- NGINX_SHA256_CHECKSUM = '75020f1364cac459cb733c4e1caed2d00376e40ea05588fb8793076a4c69dd90'
36
+ PREFERRED_NGINX_VERSION = '1.12.1'
37
+ NGINX_SHA256_CHECKSUM = '8793bf426485a30f91021b6b945a9fd8a84d87d17b566562c3797aba8fac76fb'
38
+
39
+ # Packaging may be locked to an older version due to the specific module configuration being
40
+ # incompatible with the version we prefer (latest stable).
41
+ PACKAGING_PREFERRED_NGINX_VERSION = '1.10.3'
42
+ PACKAGING_NGINX_SHA256_CHECKSUM = '75020f1364cac459cb733c4e1caed2d00376e40ea05588fb8793076a4c69dd90'
38
43
 
39
44
  PREFERRED_PCRE_VERSION = '8.39'
40
45
  PCRE_SHA256_CHECKSUM = 'ccdf7e788769838f8285b3ee672ed573358202305ee361cfec7a4a4fb005bbc7'
@@ -70,7 +70,6 @@ module PhusionPassenger
70
70
  'INSTALL.md',
71
71
  'NEWS',
72
72
  'package.json',
73
- 'npm-shrinkwrap.json',
74
73
  'passenger.gemspec',
75
74
  'build/**/*',
76
75
  'bin/*',
@@ -78,7 +77,8 @@ module PhusionPassenger
78
77
  'man/*',
79
78
  'dev/**/*',
80
79
  'src/**/*',
81
- 'resources/**/*'
80
+ 'resources/**/*',
81
+ 'resources/templates/error_renderer/.editorconfig'
82
82
  ]
83
83
 
84
84
  # Files that should be excluded from the gem or tarball. Overrides GLOB.
@@ -94,6 +94,7 @@ module PhusionPassenger
94
94
  '.project',
95
95
  'Gemfile',
96
96
  'Gemfile.lock',
97
+ 'yarn.lock',
97
98
  'Vagrantfile',
98
99
  'Jenkinsfile',
99
100
  'Passenger.sublime-project',
@@ -32,11 +32,14 @@ module PhusionPassenger
32
32
  if PlatformInfo.os_name_simple == "macosx"
33
33
  if File.exist?("/usr/include/openssl")
34
34
  ""
35
- else
36
35
  # OS X >= 10.11 El Capitan no longer include
37
- # OpenSSL development headers. Use the one from
38
- # Homebrew.
36
+ # OpenSSL development headers.
37
+ elsif File.exist?("/usr/local/opt/openssl/include")
38
+ # Use the one from Homebrew.
39
39
  "-I/usr/local/opt/openssl/include"
40
+ else
41
+ # Use the one from Macports.
42
+ "-I/opt/local/include"
40
43
  end
41
44
  else
42
45
  ""
@@ -48,8 +51,10 @@ module PhusionPassenger
48
51
  if PlatformInfo.os_name_simple == "macosx"
49
52
  if File.exist?("/usr/include/openssl")
50
53
  ""
51
- else
54
+ elsif File.exist?("/usr/local/opt/openssl/include")
52
55
  "-L/usr/local/opt/openssl/lib"
56
+ else
57
+ "-L/opt/local/lib"
53
58
  end
54
59
  else
55
60
  ""
@@ -68,6 +68,10 @@ module PhusionPassenger
68
68
  rescue SystemCallError, IOError
69
69
  pid = nil
70
70
  end
71
+ if @can_remove_working_dir
72
+ FileUtils.remove_entry_secure(@working_dir)
73
+ @can_remove_working_dir = false
74
+ end
71
75
  if pid
72
76
  abort "#{PROGRAM_NAME} Standalone is already running on PID #{pid}."
73
77
  else
@@ -54,6 +54,10 @@ module PhusionPassenger
54
54
  rescue SystemCallError, IOError
55
55
  pid = nil
56
56
  end
57
+ if @can_remove_working_dir
58
+ FileUtils.remove_entry_secure(@working_dir)
59
+ @can_remove_working_dir = false
60
+ end
57
61
  if pid
58
62
  abort "#{PROGRAM_NAME} Standalone is already running on PID #{pid}."
59
63
  else
@@ -154,6 +158,10 @@ module PhusionPassenger
154
158
  :start_command => "#{Shellwords.escape @nginx_binary} " +
155
159
  "-c #{Shellwords.escape nginx_config_path} " +
156
160
  "-p #{Shellwords.escape @working_dir}",
161
+ :stop_command => "#{Shellwords.escape @nginx_binary} " +
162
+ "-c #{Shellwords.escape nginx_config_path} " +
163
+ "-p #{Shellwords.escape @working_dir} " +
164
+ "-s quit",
157
165
  :ping_command => ping_spec,
158
166
  :pid_file => @options[:pid_file],
159
167
  :log_file => @options[:log_file],
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: passenger
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.5
4
+ version: 5.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Phusion - http://www.phusion.nl/
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-16 00:00:00.000000000 Z
11
+ date: 2017-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -237,7 +237,6 @@ files:
237
237
  - man/passenger-config.1
238
238
  - man/passenger-memory-stats.8
239
239
  - man/passenger-status.8
240
- - npm-shrinkwrap.json
241
240
  - package.json
242
241
  - passenger.gemspec
243
242
  - resources/mime.types
@@ -3739,7 +3738,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
3739
3738
  version: '0'
3740
3739
  requirements: []
3741
3740
  rubyforge_project: passenger
3742
- rubygems_version: 2.6.12
3741
+ rubygems_version: 2.6.11
3743
3742
  signing_key:
3744
3743
  specification_version: 4
3745
3744
  summary: A fast and robust web server and application server for Ruby, Python and
@@ -1,739 +0,0 @@
1
- {
2
- "name": "passenger",
3
- "version": "0.0.0",
4
- "dependencies": {
5
- "express": {
6
- "version": "3.21.2",
7
- "from": "express@^3.4.8",
8
- "resolved": "https://registry.npmjs.org/express/-/express-3.21.2.tgz",
9
- "dependencies": {
10
- "basic-auth": {
11
- "version": "1.0.3",
12
- "from": "basic-auth@~1.0.3",
13
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.3.tgz"
14
- },
15
- "connect": {
16
- "version": "2.30.2",
17
- "from": "connect@2.30.2",
18
- "resolved": "https://registry.npmjs.org/connect/-/connect-2.30.2.tgz",
19
- "dependencies": {
20
- "basic-auth-connect": {
21
- "version": "1.0.0",
22
- "from": "basic-auth-connect@1.0.0",
23
- "resolved": "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz"
24
- },
25
- "body-parser": {
26
- "version": "1.13.3",
27
- "from": "body-parser@~1.13.3",
28
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.13.3.tgz",
29
- "dependencies": {
30
- "iconv-lite": {
31
- "version": "0.4.11",
32
- "from": "iconv-lite@0.4.11",
33
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.11.tgz"
34
- },
35
- "on-finished": {
36
- "version": "2.3.0",
37
- "from": "on-finished@~2.3.0",
38
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
39
- "dependencies": {
40
- "ee-first": {
41
- "version": "1.1.1",
42
- "from": "ee-first@1.1.1",
43
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"
44
- }
45
- }
46
- },
47
- "raw-body": {
48
- "version": "2.1.4",
49
- "from": "raw-body@~2.1.2",
50
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.4.tgz",
51
- "dependencies": {
52
- "iconv-lite": {
53
- "version": "0.4.12",
54
- "from": "iconv-lite@0.4.12",
55
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.12.tgz"
56
- },
57
- "unpipe": {
58
- "version": "1.0.0",
59
- "from": "unpipe@1.0.0",
60
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
61
- }
62
- }
63
- }
64
- }
65
- },
66
- "bytes": {
67
- "version": "2.1.0",
68
- "from": "bytes@2.1.0",
69
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.1.0.tgz"
70
- },
71
- "cookie-parser": {
72
- "version": "1.3.5",
73
- "from": "cookie-parser@~1.3.5",
74
- "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.5.tgz"
75
- },
76
- "compression": {
77
- "version": "1.5.2",
78
- "from": "compression@~1.5.2",
79
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.5.2.tgz",
80
- "dependencies": {
81
- "accepts": {
82
- "version": "1.2.13",
83
- "from": "accepts@~1.2.12",
84
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz",
85
- "dependencies": {
86
- "mime-types": {
87
- "version": "2.1.7",
88
- "from": "mime-types@~2.1.4",
89
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.7.tgz",
90
- "dependencies": {
91
- "mime-db": {
92
- "version": "1.19.0",
93
- "from": "mime-db@~1.19.0",
94
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.19.0.tgz"
95
- }
96
- }
97
- },
98
- "negotiator": {
99
- "version": "0.5.3",
100
- "from": "negotiator@0.5.3",
101
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz"
102
- }
103
- }
104
- },
105
- "compressible": {
106
- "version": "2.0.6",
107
- "from": "compressible@~2.0.5",
108
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.6.tgz",
109
- "dependencies": {
110
- "mime-db": {
111
- "version": "1.20.0",
112
- "from": "mime-db@>= 1.19.0 < 2",
113
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.20.0.tgz"
114
- }
115
- }
116
- }
117
- }
118
- },
119
- "connect-timeout": {
120
- "version": "1.6.2",
121
- "from": "connect-timeout@~1.6.2",
122
- "resolved": "https://registry.npmjs.org/connect-timeout/-/connect-timeout-1.6.2.tgz",
123
- "dependencies": {
124
- "ms": {
125
- "version": "0.7.1",
126
- "from": "ms@0.7.1",
127
- "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz"
128
- }
129
- }
130
- },
131
- "csurf": {
132
- "version": "1.8.3",
133
- "from": "csurf@~1.8.3",
134
- "resolved": "https://registry.npmjs.org/csurf/-/csurf-1.8.3.tgz",
135
- "dependencies": {
136
- "csrf": {
137
- "version": "3.0.0",
138
- "from": "csrf@~3.0.0",
139
- "resolved": "https://registry.npmjs.org/csrf/-/csrf-3.0.0.tgz",
140
- "dependencies": {
141
- "base64-url": {
142
- "version": "1.2.1",
143
- "from": "base64-url@1.2.1",
144
- "resolved": "https://registry.npmjs.org/base64-url/-/base64-url-1.2.1.tgz"
145
- },
146
- "rndm": {
147
- "version": "1.1.1",
148
- "from": "rndm@~1.1.0",
149
- "resolved": "https://registry.npmjs.org/rndm/-/rndm-1.1.1.tgz"
150
- },
151
- "scmp": {
152
- "version": "1.0.0",
153
- "from": "scmp@1.0.0",
154
- "resolved": "https://registry.npmjs.org/scmp/-/scmp-1.0.0.tgz"
155
- },
156
- "uid-safe": {
157
- "version": "2.0.0",
158
- "from": "uid-safe@~2.0.0",
159
- "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.0.0.tgz"
160
- }
161
- }
162
- }
163
- }
164
- },
165
- "errorhandler": {
166
- "version": "1.4.2",
167
- "from": "errorhandler@~1.4.2",
168
- "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.4.2.tgz",
169
- "dependencies": {
170
- "accepts": {
171
- "version": "1.2.13",
172
- "from": "accepts@~1.2.12",
173
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz",
174
- "dependencies": {
175
- "mime-types": {
176
- "version": "2.1.7",
177
- "from": "mime-types@~2.1.4",
178
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.7.tgz",
179
- "dependencies": {
180
- "mime-db": {
181
- "version": "1.19.0",
182
- "from": "mime-db@~1.19.0",
183
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.19.0.tgz"
184
- }
185
- }
186
- },
187
- "negotiator": {
188
- "version": "0.5.3",
189
- "from": "negotiator@0.5.3",
190
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz"
191
- }
192
- }
193
- }
194
- }
195
- },
196
- "express-session": {
197
- "version": "1.11.3",
198
- "from": "express-session@~1.11.3",
199
- "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.11.3.tgz",
200
- "dependencies": {
201
- "crc": {
202
- "version": "3.3.0",
203
- "from": "crc@3.3.0",
204
- "resolved": "https://registry.npmjs.org/crc/-/crc-3.3.0.tgz"
205
- },
206
- "uid-safe": {
207
- "version": "2.0.0",
208
- "from": "uid-safe@~2.0.0",
209
- "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.0.0.tgz",
210
- "dependencies": {
211
- "base64-url": {
212
- "version": "1.2.1",
213
- "from": "base64-url@1.2.1",
214
- "resolved": "https://registry.npmjs.org/base64-url/-/base64-url-1.2.1.tgz"
215
- }
216
- }
217
- }
218
- }
219
- },
220
- "finalhandler": {
221
- "version": "0.4.0",
222
- "from": "finalhandler@0.4.0",
223
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.0.tgz",
224
- "dependencies": {
225
- "on-finished": {
226
- "version": "2.3.0",
227
- "from": "on-finished@~2.3.0",
228
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
229
- "dependencies": {
230
- "ee-first": {
231
- "version": "1.1.1",
232
- "from": "ee-first@1.1.1",
233
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"
234
- }
235
- }
236
- },
237
- "unpipe": {
238
- "version": "1.0.0",
239
- "from": "unpipe@~1.0.0",
240
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
241
- }
242
- }
243
- },
244
- "http-errors": {
245
- "version": "1.3.1",
246
- "from": "http-errors@~1.3.1",
247
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz",
248
- "dependencies": {
249
- "inherits": {
250
- "version": "2.0.1",
251
- "from": "inherits@~2.0.1",
252
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
253
- },
254
- "statuses": {
255
- "version": "1.2.1",
256
- "from": "statuses@1",
257
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz"
258
- }
259
- }
260
- },
261
- "method-override": {
262
- "version": "2.3.5",
263
- "from": "method-override@~2.3.5",
264
- "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.5.tgz"
265
- },
266
- "morgan": {
267
- "version": "1.6.1",
268
- "from": "morgan@~1.6.1",
269
- "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.6.1.tgz",
270
- "dependencies": {
271
- "on-finished": {
272
- "version": "2.3.0",
273
- "from": "on-finished@~2.3.0",
274
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
275
- "dependencies": {
276
- "ee-first": {
277
- "version": "1.1.1",
278
- "from": "ee-first@1.1.1",
279
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"
280
- }
281
- }
282
- }
283
- }
284
- },
285
- "multiparty": {
286
- "version": "3.3.2",
287
- "from": "multiparty@3.3.2",
288
- "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-3.3.2.tgz",
289
- "dependencies": {
290
- "readable-stream": {
291
- "version": "1.1.13",
292
- "from": "readable-stream@~1.1.9",
293
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
294
- "dependencies": {
295
- "core-util-is": {
296
- "version": "1.0.1",
297
- "from": "core-util-is@~1.0.0",
298
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
299
- },
300
- "isarray": {
301
- "version": "0.0.1",
302
- "from": "isarray@0.0.1",
303
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
304
- },
305
- "string_decoder": {
306
- "version": "0.10.31",
307
- "from": "string_decoder@~0.10.x",
308
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
309
- },
310
- "inherits": {
311
- "version": "2.0.1",
312
- "from": "inherits@~2.0.1",
313
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
314
- }
315
- }
316
- },
317
- "stream-counter": {
318
- "version": "0.2.0",
319
- "from": "stream-counter@~0.2.0",
320
- "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-0.2.0.tgz"
321
- }
322
- }
323
- },
324
- "on-headers": {
325
- "version": "1.0.1",
326
- "from": "on-headers@~1.0.0",
327
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz"
328
- },
329
- "pause": {
330
- "version": "0.1.0",
331
- "from": "pause@0.1.0",
332
- "resolved": "https://registry.npmjs.org/pause/-/pause-0.1.0.tgz"
333
- },
334
- "qs": {
335
- "version": "4.0.0",
336
- "from": "qs@4.0.0",
337
- "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz"
338
- },
339
- "response-time": {
340
- "version": "2.3.1",
341
- "from": "response-time@~2.3.1",
342
- "resolved": "https://registry.npmjs.org/response-time/-/response-time-2.3.1.tgz"
343
- },
344
- "serve-favicon": {
345
- "version": "2.3.0",
346
- "from": "serve-favicon@~2.3.0",
347
- "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.3.0.tgz",
348
- "dependencies": {
349
- "ms": {
350
- "version": "0.7.1",
351
- "from": "ms@0.7.1",
352
- "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz"
353
- }
354
- }
355
- },
356
- "serve-index": {
357
- "version": "1.7.2",
358
- "from": "serve-index@~1.7.2",
359
- "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.7.2.tgz",
360
- "dependencies": {
361
- "accepts": {
362
- "version": "1.2.13",
363
- "from": "accepts@~1.2.12",
364
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz",
365
- "dependencies": {
366
- "negotiator": {
367
- "version": "0.5.3",
368
- "from": "negotiator@0.5.3",
369
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz"
370
- }
371
- }
372
- },
373
- "batch": {
374
- "version": "0.5.2",
375
- "from": "batch@0.5.2",
376
- "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.2.tgz"
377
- },
378
- "mime-types": {
379
- "version": "2.1.7",
380
- "from": "mime-types@~2.1.4",
381
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.7.tgz",
382
- "dependencies": {
383
- "mime-db": {
384
- "version": "1.19.0",
385
- "from": "mime-db@~1.19.0",
386
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.19.0.tgz"
387
- }
388
- }
389
- }
390
- }
391
- },
392
- "serve-static": {
393
- "version": "1.10.0",
394
- "from": "serve-static@~1.10.0",
395
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.0.tgz"
396
- },
397
- "type-is": {
398
- "version": "1.6.9",
399
- "from": "type-is@~1.6.6",
400
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.9.tgz",
401
- "dependencies": {
402
- "media-typer": {
403
- "version": "0.3.0",
404
- "from": "media-typer@0.3.0",
405
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"
406
- },
407
- "mime-types": {
408
- "version": "2.1.7",
409
- "from": "mime-types@~2.1.7",
410
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.7.tgz",
411
- "dependencies": {
412
- "mime-db": {
413
- "version": "1.19.0",
414
- "from": "mime-db@~1.19.0",
415
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.19.0.tgz"
416
- }
417
- }
418
- }
419
- }
420
- },
421
- "vhost": {
422
- "version": "3.0.2",
423
- "from": "vhost@~3.0.1",
424
- "resolved": "https://registry.npmjs.org/vhost/-/vhost-3.0.2.tgz"
425
- }
426
- }
427
- },
428
- "content-disposition": {
429
- "version": "0.5.0",
430
- "from": "content-disposition@0.5.0",
431
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.0.tgz"
432
- },
433
- "content-type": {
434
- "version": "1.0.1",
435
- "from": "content-type@~1.0.1",
436
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.1.tgz"
437
- },
438
- "commander": {
439
- "version": "2.6.0",
440
- "from": "commander@2.6.0",
441
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz"
442
- },
443
- "cookie": {
444
- "version": "0.1.3",
445
- "from": "cookie@0.1.3",
446
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz"
447
- },
448
- "cookie-signature": {
449
- "version": "1.0.6",
450
- "from": "cookie-signature@1.0.6",
451
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"
452
- },
453
- "debug": {
454
- "version": "2.2.0",
455
- "from": "debug@~2.2.0",
456
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
457
- "dependencies": {
458
- "ms": {
459
- "version": "0.7.1",
460
- "from": "ms@0.7.1",
461
- "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz"
462
- }
463
- }
464
- },
465
- "depd": {
466
- "version": "1.0.1",
467
- "from": "depd@~1.0.1",
468
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz"
469
- },
470
- "escape-html": {
471
- "version": "1.0.2",
472
- "from": "escape-html@1.0.2",
473
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.2.tgz"
474
- },
475
- "etag": {
476
- "version": "1.7.0",
477
- "from": "etag@~1.7.0",
478
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz"
479
- },
480
- "fresh": {
481
- "version": "0.3.0",
482
- "from": "fresh@0.3.0",
483
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz"
484
- },
485
- "merge-descriptors": {
486
- "version": "1.0.0",
487
- "from": "merge-descriptors@1.0.0",
488
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.0.tgz"
489
- },
490
- "methods": {
491
- "version": "1.1.1",
492
- "from": "methods@~1.1.1",
493
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.1.tgz"
494
- },
495
- "mkdirp": {
496
- "version": "0.5.1",
497
- "from": "mkdirp@0.5.1",
498
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
499
- "dependencies": {
500
- "minimist": {
501
- "version": "0.0.8",
502
- "from": "minimist@0.0.8",
503
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
504
- }
505
- }
506
- },
507
- "parseurl": {
508
- "version": "1.3.0",
509
- "from": "parseurl@~1.3.0",
510
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.0.tgz"
511
- },
512
- "proxy-addr": {
513
- "version": "1.0.8",
514
- "from": "proxy-addr@~1.0.8",
515
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.8.tgz",
516
- "dependencies": {
517
- "forwarded": {
518
- "version": "0.1.0",
519
- "from": "forwarded@~0.1.0",
520
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz"
521
- },
522
- "ipaddr.js": {
523
- "version": "1.0.1",
524
- "from": "ipaddr.js@1.0.1",
525
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.0.1.tgz"
526
- }
527
- }
528
- },
529
- "range-parser": {
530
- "version": "1.0.3",
531
- "from": "range-parser@~1.0.2",
532
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz"
533
- },
534
- "send": {
535
- "version": "0.13.0",
536
- "from": "send@0.13.0",
537
- "resolved": "https://registry.npmjs.org/send/-/send-0.13.0.tgz",
538
- "dependencies": {
539
- "destroy": {
540
- "version": "1.0.3",
541
- "from": "destroy@1.0.3",
542
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz"
543
- },
544
- "http-errors": {
545
- "version": "1.3.1",
546
- "from": "http-errors@~1.3.1",
547
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz",
548
- "dependencies": {
549
- "inherits": {
550
- "version": "2.0.1",
551
- "from": "inherits@~2.0.1",
552
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
553
- }
554
- }
555
- },
556
- "mime": {
557
- "version": "1.3.4",
558
- "from": "mime@1.3.4",
559
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz"
560
- },
561
- "ms": {
562
- "version": "0.7.1",
563
- "from": "ms@0.7.1",
564
- "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz"
565
- },
566
- "on-finished": {
567
- "version": "2.3.0",
568
- "from": "on-finished@~2.3.0",
569
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
570
- "dependencies": {
571
- "ee-first": {
572
- "version": "1.1.1",
573
- "from": "ee-first@1.1.1",
574
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"
575
- }
576
- }
577
- },
578
- "statuses": {
579
- "version": "1.2.1",
580
- "from": "statuses@~1.2.1",
581
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz"
582
- }
583
- }
584
- },
585
- "utils-merge": {
586
- "version": "1.0.0",
587
- "from": "utils-merge@1.0.0",
588
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz"
589
- },
590
- "vary": {
591
- "version": "1.0.1",
592
- "from": "vary@~1.0.1",
593
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz"
594
- }
595
- }
596
- },
597
- "mocha": {
598
- "version": "1.21.5",
599
- "from": "mocha@^1.15.1",
600
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-1.21.5.tgz",
601
- "dependencies": {
602
- "commander": {
603
- "version": "2.3.0",
604
- "from": "commander@2.3.0",
605
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz"
606
- },
607
- "debug": {
608
- "version": "2.0.0",
609
- "from": "debug@2.0.0",
610
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.0.0.tgz",
611
- "dependencies": {
612
- "ms": {
613
- "version": "0.6.2",
614
- "from": "ms@0.6.2",
615
- "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz"
616
- }
617
- }
618
- },
619
- "diff": {
620
- "version": "1.0.8",
621
- "from": "diff@1.0.8",
622
- "resolved": "https://registry.npmjs.org/diff/-/diff-1.0.8.tgz"
623
- },
624
- "escape-string-regexp": {
625
- "version": "1.0.2",
626
- "from": "escape-string-regexp@1.0.2",
627
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz"
628
- },
629
- "glob": {
630
- "version": "3.2.3",
631
- "from": "glob@3.2.3",
632
- "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.3.tgz",
633
- "dependencies": {
634
- "minimatch": {
635
- "version": "0.2.14",
636
- "from": "minimatch@~0.2.11",
637
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
638
- "dependencies": {
639
- "lru-cache": {
640
- "version": "2.7.0",
641
- "from": "lru-cache@2",
642
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.0.tgz"
643
- },
644
- "sigmund": {
645
- "version": "1.0.1",
646
- "from": "sigmund@~1.0.0",
647
- "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz"
648
- }
649
- }
650
- },
651
- "graceful-fs": {
652
- "version": "2.0.3",
653
- "from": "graceful-fs@~2.0.0",
654
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz"
655
- },
656
- "inherits": {
657
- "version": "2.0.1",
658
- "from": "inherits@2",
659
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
660
- }
661
- }
662
- },
663
- "growl": {
664
- "version": "1.8.1",
665
- "from": "growl@1.8.1",
666
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.8.1.tgz"
667
- },
668
- "jade": {
669
- "version": "0.26.3",
670
- "from": "jade@0.26.3",
671
- "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz",
672
- "dependencies": {
673
- "commander": {
674
- "version": "0.6.1",
675
- "from": "commander@0.6.1",
676
- "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz"
677
- },
678
- "mkdirp": {
679
- "version": "0.3.0",
680
- "from": "mkdirp@0.3.0",
681
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz"
682
- }
683
- }
684
- },
685
- "mkdirp": {
686
- "version": "0.5.0",
687
- "from": "mkdirp@0.5.0",
688
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
689
- "dependencies": {
690
- "minimist": {
691
- "version": "0.0.8",
692
- "from": "minimist@0.0.8",
693
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
694
- }
695
- }
696
- }
697
- }
698
- },
699
- "should": {
700
- "version": "2.1.1",
701
- "from": "should@^2.0.1",
702
- "resolved": "https://registry.npmjs.org/should/-/should-2.1.1.tgz"
703
- },
704
- "sinon": {
705
- "version": "1.17.2",
706
- "from": "sinon@^1.7.3",
707
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.2.tgz",
708
- "dependencies": {
709
- "formatio": {
710
- "version": "1.1.1",
711
- "from": "formatio@1.1.1",
712
- "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz"
713
- },
714
- "util": {
715
- "version": "0.10.3",
716
- "from": "util@>=0.10.3 <1",
717
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
718
- "dependencies": {
719
- "inherits": {
720
- "version": "2.0.1",
721
- "from": "inherits@2.0.1",
722
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
723
- }
724
- }
725
- },
726
- "lolex": {
727
- "version": "1.3.2",
728
- "from": "lolex@1.3.2",
729
- "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz"
730
- },
731
- "samsam": {
732
- "version": "1.1.2",
733
- "from": "samsam@1.1.2",
734
- "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz"
735
- }
736
- }
737
- }
738
- }
739
- }