Compare commits

..

1 Commits

Author SHA1 Message Date
Adam Stankiewicz
0a8a4f9029 Format with prettier 2018-03-28 19:10:16 +02:00
68 changed files with 3583 additions and 2515 deletions

46
.appveyor.yml Normal file
View File

@@ -0,0 +1,46 @@
# http://www.appveyor.com/docs/appveyor-yml
# Set build version format here instead of in the admin panel.
version: "{build}"
# Fix line endings in Windows. (runs before repo cloning)
init:
- git config --global core.autocrlf input
# Test against these versions of Node.js.
environment:
matrix:
- nodejs_version: "0.10"
- nodejs_version: "0.12"
- nodejs_version: "4"
- nodejs_version: "6"
- nodejs_version: "8"
- nodejs_version: "9"
# Finish on first failed build
matrix:
fast_finish: true
# Install node, display versions, install dependencies
install:
- ps: Install-Product node 8
- node --version && npm --version
- git --version && svn --version
- npm install -g yarn grunt
- yarn
- ps: Install-Product node $env:nodejs_version
# Post-install test scripts.
test_script:
- cmd: npm run ci
# Make clone much faster
shallow_clone: true
# Disable Visual Studio build and deploy
build: off
deploy: off
# Cache node modules, and refresh if package.json changes
cache:
- "%LOCALAPPDATA%\\Yarn"

View File

@@ -1,6 +0,0 @@
node_modules
test/assets
test/reports
test/sample
test/tmp
packages/bower-logger/test

View File

@@ -19,6 +19,7 @@
"comma-spacing": 2,
"quote-props": [2, "as-needed"],
"quotes": [2, "single", "avoid-escape"],
"indent": [2, 4],
"no-cond-assign": [ 2, "except-parens" ],
"no-debugger": 2,
"no-dupe-args": 2,

3
.github/FUNDING.yml vendored
View File

@@ -1,3 +0,0 @@
# These are supported funding model platforms
open_collective: bower

View File

@@ -1,62 +0,0 @@
name: build
on:
push:
branches:
- master
pull_request:
branches:
- '**'
jobs:
test:
name: Node v${{ matrix.node-version }} on ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
# https://github.com/actions/setup-node/issues/27
node-version: [0.10.x, 0.12.x, 4.x, 6.x, 8.x, 10.x, 12.x, 14.x]
os: [ubuntu-latest, macOS-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Set git config
shell: bash
run: |
git config --global core.autocrlf false
git config --global core.symlinks true
if: runner.os == 'Windows'
- uses: actions/checkout@v2
- name: install
run: yarn && (cd packages/bower-json && yarn link) && yarn link bower-json
- name: lint
run: npm run lint
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: bower tests
run: npm test
env:
CI: true
- name: bower-logger tests
run: (cd packages/bower-logger && npm install && npm test)
env:
CI: true
- name: bower-config tests
run: (cd packages/bower-config && npm install && npm test)
env:
CI: true
- name: bower-endpoint-parser tests
run: (cd packages/bower-endpoint-parser && npm install && npm test)
env:
CI: true
- name: bower-json tests
run: (cd packages/bower-json && npm install && npm test)
env:
CI: true
- name: bower-registry-client tests
run: (cd packages/bower-registry-client && npm install && npm test)
env:
CI: true

1
.gitignore vendored
View File

@@ -13,4 +13,3 @@
/test/sample
!/test/sample/bower.json
/npm-shrinkwrap.json
package-lock.json

View File

@@ -1,4 +1,2 @@
**/node_modules/**
**/test/assets/**
**/bower_components/**
test/sample

43
.travis.yml Normal file
View File

@@ -0,0 +1,43 @@
sudo: false
language: node_js
# Use node 8 for build
node_js:
- "8"
# Then test with specific node version
env:
- TEST_NODE_VERSION="0.10"
- TEST_NODE_VERSION="0.12"
- TEST_NODE_VERSION="4"
- TEST_NODE_VERSION="6"
- TEST_NODE_VERSION="8"
- TEST_NODE_VERSION="9"
before_install:
- node --version
- curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.5.1
- export PATH=$HOME/.yarn/bin:$PATH
cache:
yarn: true
install:
- yarn
- nvm install $TEST_NODE_VERSION
- npm install -g grunt
os:
- osx
- linux
matrix:
fast_finish: true
allow_failures:
- os: osx
script:
- nvm use $TEST_NODE_VERSION
- node --version && npm --version && git --version && svn --version | head -n 1
- grunt travis

View File

@@ -1,9 +1,5 @@
# Changelog
## Newer releases
Please see: https://github.com/bower/bower/releases
## 1.8.0 - 2016-11-07
- Download tar archives from GitHub when possible (#2263)

View File

@@ -1,6 +1,6 @@
# Contributing to Bower
Bower is a large community project with many different developers contributing at all levels to the project. There is more information about [contributing](https://github.com/bower/bower/wiki/Contributor-Guidelines) in the Wiki.
Bower is a large community project with many different developers contributing at all levels to the project. We're **actively** looking for more contributors right now. If you're interested in becoming a Bower maintainer or supporting in any way, please fill the following form: http://goo.gl/forms/P1ndzCNoiG. There is more information about [contributing](https://github.com/bower/bower/wiki/Contributor-Guidelines) in the Wiki.
<a name="bugs"></a>
## 🐛 [Bug reports](https://github.com/bower/bower/wiki/Report-a-Bug)
@@ -16,6 +16,12 @@ Bower is a large community project with many different developers contributing a
* Read [Architecture doc](https://github.com/bower/bower/wiki/Rewrite-architecture)
* Triage, close, fix and resolve [issues](https://github.com/bower/bower/issues)
## Team Meetings
We communicate through a channel on Discord https://discord.gg/0fFM7QF0KpZRh2cY
If you'd like to attend the meetings, please fill the [support form](http://goo.gl/forms/P1ndzCNoiG), and you'll get an invite.
## Using the issue tracker
The issue tracker is the preferred channel for [bug reports](#bugs),
@@ -23,9 +29,12 @@ The issue tracker is the preferred channel for [bug reports](#bugs),
requests](#pull-requests), but please respect the following restrictions:
* Please **do not** use the issue tracker for personal support requests. Use
[Stack Overflow](http://stackoverflow.com/questions/tagged/bower), or in serious cases
send an e-mail to team@bower.io
[Stack Overflow](http://stackoverflow.com/questions/tagged/bower),
[Discord Channel](https://discordapp.com/channels/119103197720739842/123728452816732160),
[Mailing List](http://groups.google.com/group/twitter-bower),
(twitter-bower@googlegroups.com), or
[#bower](http://webchat.freenode.net/?channels=bower) on Freenode.
* Please **do not** derail or troll issues. Keep the discussion on topic and
respect the opinions of others.

283
Gruntfile.js Normal file
View File

@@ -0,0 +1,283 @@
var tmp = require('tmp');
var childProcess = require('child_process');
var arraydiff = require('arr-diff');
var fs = require('fs');
var wrench = require('wrench');
var inquirer = require('inquirer');
var path = require('path');
module.exports = function(grunt) {
require('load-grunt-tasks')(grunt);
grunt.initConfig({
eslint: {
files: [
'Gruntfile.js',
'bin/*',
'lib/**/*.js',
'test/**/*.js',
'!test/assets/**/*',
'!test/reports/**/*',
'!test/sample/**/*',
'!test/tmp/**/*'
]
},
simplemocha: {
options: {
reporter: 'spec',
timeout: '15000'
},
full: {
src: ['test/test.js']
},
short: {
options: {
reporter: 'dot'
},
src: ['test/test.js']
}
},
exec: {
assets: {
command: 'node test/packages.js && node test/packages-svn.js'
},
'assets-force': {
command:
'node test/packages.js --force && node test/packages-svn.js --force'
},
cover: {
command:
'node node_modules/istanbul/lib/cli.js cover --dir ./test/reports node_modules/mocha/bin/_mocha -- --timeout 30000 -R dot test/test.js'
},
coveralls: {
command: 'npm run coveralls < test/reports/lcov.info',
exitCodes: [0, 1, 2, 3] // Alow for failure for coverage report
}
},
watch: {
files: ['<%= eslint.files %>'],
tasks: ['eslint', 'simplemocha:short']
}
});
grunt.registerTask('assets', ['exec:assets-force']);
grunt.registerTask('test', ['eslint', 'exec:assets', 'simplemocha:full']);
grunt.registerTask('cover', 'exec:cover');
grunt.registerTask('travis', [
'eslint',
'exec:assets',
'exec:cover',
'exec:coveralls'
]);
grunt.registerTask('default', 'test');
grunt.task.registerTask(
'publish',
'Perform final checks and publish Bower',
function() {
var npmVersion = JSON.parse(
childProcess.execSync('npm version --json').toString()
).npm.split('.');
var npmMajor = parseInt(npmVersion[0], 10);
var npmMinor = parseInt(npmVersion[1], 10);
var jsonPackage = require('./package');
if (npmMajor !== 3 || npmMinor < 5) {
grunt.log.writeln(
'You need to use at least npm@3.5 to publish bower.'
);
grunt.log.writeln(
'It is because npm 2.x produces too long paths that Windows does not handle.'
);
grunt.log.writeln('Please upgrade it: npm install -g npm');
process.exit(1);
}
var version = jsonPackage.version;
var changelog = fs.readFileSync('./CHANGELOG.md');
if (changelog.indexOf('## ' + version) === -1) {
grunt.log.writeln(
'Please add changelog.md entry for this bower version (' +
version +
')'
);
var lastRelease = childProcess
.execSync('git tag | tail -1')
.toString()
.trim();
grunt.log.writeln(
'Commits since last release (' + lastRelease + '): \n'
);
grunt.log.writeln(
childProcess
.execSync('git log --oneline ' + lastRelease + '..')
.toString()
);
process.exit(1);
}
if (
childProcess
.execSync('git rev-parse --abbrev-ref HEAD')
.toString()
.trim() !== 'master'
) {
grunt.log.writeln(
'You need to release bower from the "master" branch'
);
process.exit(1);
}
if (process.env.SKIP_TESTS !== '1') {
grunt.log.writeln('Reinstalling dependencies...');
childProcess.execSync('rm -rf node_modules && npm install', {
stdio: [0, 1, 2]
});
grunt.log.writeln('Running test suite...');
childProcess.execSync('grunt test', { stdio: [0, 1, 2] });
}
var dir = tmp.dirSync().name;
wrench.copyDirSyncRecursive(__dirname, dir, {
forceDelete: true,
include: function(path) {
return !path.match(/node_modules|\.git|test/);
}
});
grunt.log.writeln('Installing production dependencies...');
childProcess.execSync('npm install --production --silent', {
cwd: dir,
stdio: [0, 1, 2]
});
delete jsonPackage.dependencies;
delete jsonPackage.devDependencies;
delete jsonPackage.scripts;
fs.writeFileSync(
path.resolve(dir, 'package.json'),
JSON.stringify(jsonPackage, null, ' ') + '\n'
);
grunt.log.writeln('Moving node_modules to lib directory...');
wrench.copyDirSyncRecursive(
path.resolve(dir, 'node_modules'),
path.resolve(dir, 'lib', 'node_modules')
);
wrench.rmdirSyncRecursive(path.resolve(dir, 'node_modules'));
grunt.log.writeln('Testing bower on sample project...');
childProcess.execSync(
'cd test/sample && rm -rf bower_components && ' +
dir +
'/bin/bower install --force',
{ stdio: [0, 1, 2] }
);
var expectedPackages = (
'SHA-1 ace-builds almond angular angular-animate angular-bootstrap angular-charts angular-contenteditable ' +
'angular-deckgrid angular-fullscreen angular-gravatar angular-hotkeys angular-local-storage angular-marked ' +
'angular-moment angular-sanitize angular-touch angular-ui-router angular-ui-sortable ' +
'angulartics asEvented bootstrap coffee-script d3 es6-shim font-awesome howler jquery ' +
'jquery-ui jquery-waypoints js-beautify lodash lz-string marked moment ng-file-upload peerjs ' +
'requirejs restangular slimScroll slimScrollHorizontal venturocket-angular-slider'
).split(' ');
var installedPackages = fs.readdirSync(
'./test/sample/bower_components'
);
var installedDiff = arraydiff(expectedPackages, installedPackages);
if (installedDiff.length > 0) {
grunt.log.writeln(
'ERROR. Some packages were not installed by bower: '
);
grunt.log.writeln(installedDiff.join(', '));
process.exit(1);
}
grunt.log.writeln('\nBower production bundle installed in:');
grunt.log.writeln(dir + '\n');
var questions = [
{
type: 'confirm',
name: 'review',
message: 'Did you review all the changes with "git diff"?',
default: false
},
{
type: 'confirm',
name: 'changelog',
message:
'Are you sure the CHANGELOG.md contains all changes?',
default: false
},
{
type: 'confirm',
name: 'tests',
message:
'Are you sure all tests are passing on Travis and Appveyor?',
default: false
},
{
type: 'confirm',
name: 'publish',
message:
'Are you SURE you want to publish ' +
jsonPackage.name +
'@' +
jsonPackage.version +
'?',
default: false
}
];
var done = this.async();
inquirer.prompt(questions, function(answers) {
if (
!answers.review ||
!answers.changelog ||
!answers.tests ||
!answers.publish
) {
grunt.log.writeln(
'Please publish bower after you fix this issue'
);
process.exit(1);
}
grunt.log.writeln(
'\nPlease remember to tag this relese, and add a release on Github!'
);
grunt.log.writeln(
'\nAlso, please remember to test published Bower one more time!'
);
grunt.log.writeln('\nPublishing Bower...');
childProcess.execSync('npm publish --tag beta', {
cwd: dir,
stdio: [0, 1, 2]
});
done();
});
}
);
};

127
README.md
View File

@@ -1,10 +1,14 @@
# Bower - A package manager for the web
[![Build](https://github.com/bower/bower/workflows/build/badge.svg)](https://github.com/bower/bower/actions?query=branch%3Amaster)
[![Backers on Open Collective](https://opencollective.com/bower/backers/badge.svg)](#backers)
[![Sponsors on Open Collective](https://opencollective.com/bower/sponsors/badge.svg)](#sponsors)
> ..psst! While Bower is maintained, we recommend [yarn](https://yarnpkg.com/) and [webpack](https://webpack.js.org/) or [parcel](https://parceljs.org/) for new front-end projects!
> ..psst! While Bower is maintained, we recommend [yarn](https://yarnpkg.com/) and [webpack](https://webpack.js.org/) for new front-end projects!
[![Unix CI](https://img.shields.io/travis/bower/bower/master.svg?maxAge=2592000)](https://travis-ci.org/bower/bower)
[![Windows CI](https://img.shields.io/appveyor/ci/bower/bower/master.svg)](https://ci.appveyor.com/project/bower/bower)
[![Coverage Status](https://img.shields.io/coveralls/bower/bower.svg)](https://coveralls.io/r/bower/bower?branch=master)
[![Discord chat](https://img.shields.io/badge/discord-join%20chat%20%E2%86%92-brightgreen.svg?style=flat)](https://discord.gg/0fFM7QF0KpZRh2cY)
<img align="right" height="300" src="http://bower.io/img/bower-logo.png">
@@ -97,11 +101,9 @@ Bower can be configured using JSON in a `.bowerrc` file. Read over available opt
## Support
You can ask questions on following channels in order:
* [Discord chat](https://discord.gg/0fFM7QF0KpZRh2cY)
* [StackOverflow](http://stackoverflow.com/questions/tagged/bower)
* [Issue Tracker](https://github.com/bower/bower/issues)
* team@bower.io
* [Mailinglist](http://groups.google.com/group/twitter-bower) - twitter-bower@googlegroups.com
## Contributing
@@ -153,93 +155,42 @@ Support us with a monthly donation and help us continue our activities. [[Become
<a href="https://opencollective.com/bower/backer/27/website" target="_blank"><img src="https://opencollective.com/bower/backer/27/avatar.svg"></a>
<a href="https://opencollective.com/bower/backer/28/website" target="_blank"><img src="https://opencollective.com/bower/backer/28/avatar.svg"></a>
<a href="https://opencollective.com/bower/backer/29/website" target="_blank"><img src="https://opencollective.com/bower/backer/29/avatar.svg"></a>
<a href="https://opencollective.com/bower/backer/30/website" target="_blank"><img src="https://opencollective.com/bower/backer/30/avatar.svg"></a>
<a href="https://opencollective.com/bower/backer/31/website" target="_blank"><img src="https://opencollective.com/bower/backer/31/avatar.svg"></a>
<a href="https://opencollective.com/bower/backer/32/website" target="_blank"><img src="https://opencollective.com/bower/backer/32/avatar.svg"></a>
<a href="https://opencollective.com/bower/backer/33/website" target="_blank"><img src="https://opencollective.com/bower/backer/33/avatar.svg"></a>
<a href="https://opencollective.com/bower/backer/34/website" target="_blank"><img src="https://opencollective.com/bower/backer/34/avatar.svg"></a>
<a href="https://opencollective.com/bower/backer/35/website" target="_blank"><img src="https://opencollective.com/bower/backer/35/avatar.svg"></a>
<a href="https://opencollective.com/bower/backer/36/website" target="_blank"><img src="https://opencollective.com/bower/backer/36/avatar.svg"></a>
<a href="https://opencollective.com/bower/backer/37/website" target="_blank"><img src="https://opencollective.com/bower/backer/37/avatar.svg"></a>
<a href="https://opencollective.com/bower/backer/38/website" target="_blank"><img src="https://opencollective.com/bower/backer/38/avatar.svg"></a>
<a href="https://opencollective.com/bower/backer/39/website" target="_blank"><img src="https://opencollective.com/bower/backer/39/avatar.svg"></a>
<a href="https://opencollective.com/bower/backer/40/website" target="_blank"><img src="https://opencollective.com/bower/backer/40/avatar.svg"></a>
## Sponsors
Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/bower#sponsor)]
<a href="https://opencollective.com/bower/tiers/sponsors/0/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/0/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/1/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/1/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/2/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/2/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/3/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/3/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/4/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/4/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/5/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/5/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/6/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/6/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/7/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/7/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/8/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/8/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/9/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/9/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/10/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/10/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/11/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/11/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/12/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/12/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/13/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/13/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/14/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/14/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/15/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/15/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/16/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/16/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/17/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/17/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/18/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/18/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/19/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/19/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/20/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/20/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/21/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/21/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/22/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/22/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/23/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/23/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/24/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/24/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/25/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/25/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/26/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/26/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/27/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/27/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/28/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/28/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/29/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/29/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/30/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/30/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/31/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/31/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/32/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/32/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/33/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/33/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/34/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/34/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/35/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/35/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/36/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/36/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/37/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/37/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/38/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/38/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/39/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/39/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/40/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/40/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/41/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/41/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/42/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/42/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/43/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/43/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/44/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/44/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/45/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/45/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/46/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/46/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/47/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/47/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/48/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/48/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/49/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/49/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/50/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/50/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/51/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/51/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/52/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/52/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/53/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/53/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/54/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/54/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/55/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/55/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/56/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/56/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/57/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/57/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/58/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/58/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/59/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/59/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/60/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/60/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/61/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/61/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/62/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/62/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/63/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/63/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/64/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/64/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/65/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/65/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/66/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/66/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/67/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/67/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/68/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/68/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/69/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/69/avatar.svg"></a>
<a href="https://opencollective.com/bower/tiers/sponsors/70/website" target="_blank"><img src="https://opencollective.com/bower/tiers/sponsors/70/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/0/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/0/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/1/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/2/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/2/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/3/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/3/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/4/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/4/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/5/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/5/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/6/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/6/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/7/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/7/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/8/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/8/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/9/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/9/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/10/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/10/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/11/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/11/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/12/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/12/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/13/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/13/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/14/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/14/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/15/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/15/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/16/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/16/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/17/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/17/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/18/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/18/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/19/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/19/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/20/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/20/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/21/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/21/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/22/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/22/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/23/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/23/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/24/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/24/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/25/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/25/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/26/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/26/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/27/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/27/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/28/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/28/avatar.svg"></a>
<a href="https://opencollective.com/bower/sponsor/29/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/29/avatar.svg"></a>
## License

View File

@@ -1,3 +0,0 @@
# Security Policy
For critical security issues, please send an e-mail to team@bower.io instead of filing issue here.

View File

@@ -17,9 +17,9 @@ function lookup(logger, name, config) {
return !entry
? null
: {
name: name,
url: entry.url
};
name: name,
url: entry.url
};
}
);
}

View File

@@ -166,7 +166,7 @@ function pluginResolverFactory(resolverFactory, bower) {
})
.then(function() {
// We pass old _resolution (if hasNew has been called before contents).
// So resolver can decide whether use cached version of contents new one.
// So resolver can decide wheter use cached version of contents new one.
if (typeof resolver.fetch !== 'function') {
throw createError(
'Resolver does not implement the "fetch" method.'

View File

@@ -69,33 +69,33 @@ JsonRenderer.prototype.prompt = function(prompts) {
validator: !prompt.validate
? null
: function(value) {
var ret = prompt.validate(value);
var ret = prompt.validate(value);
if (typeof ret === 'string') {
throw ret;
}
if (typeof ret === 'string') {
throw ret;
}
return value;
}
return value;
}
};
// For now only "input", "confirm" and "password" are supported
switch (prompt.type) {
case 'input':
funcName = 'prompt';
break;
case 'confirm':
case 'password':
funcName = prompt.type;
break;
case 'checkbox':
funcName = 'prompt';
break;
default:
promise = promise.then(function() {
throw createError('Unknown prompt type', 'ENOTSUP');
});
return;
case 'input':
funcName = 'prompt';
break;
case 'confirm':
case 'password':
funcName = prompt.type;
break;
case 'checkbox':
funcName = 'prompt';
break;
default:
promise = promise.then(function() {
throw createError('Unknown prompt type', 'ENOTSUP');
});
return;
}
promise = promise.then(function() {

View File

@@ -130,8 +130,8 @@ function extractGz(archive, dst) {
return deferred.promise;
}
function isSymlink(_, entry) {
return entry.type === 'symlink';
function isSymlink(entry) {
return entry.type === 'SymbolicLink';
}
function filterSymlinks(entry) {

View File

@@ -24,10 +24,11 @@ You can however run a command with sudo using "--allow-root" option';
var cli = require('./cli');
renderer = cli.getRenderer('', false, config);
renderer.error(
createError('Please do not run with sudo', 'ESUDO', {
createError('Cannot be run with sudo', 'ESUDO', {
details: errorMsg
})
);
process.exit(1);
}
}

View File

@@ -1,7 +1,6 @@
{
"private": true,
"name": "bower",
"version": "1.8.12",
"version": "1.8.0",
"description": "The browser package manager",
"author": "Twitter",
"license": "MIT",
@@ -18,11 +17,16 @@
"dependencies": {
"abbrev": "^1.0.5",
"archy": "1.0.0",
"bower-config": "^1.4.1",
"bower-endpoint-parser": "^0.2.2",
"bower-json": "^0.8.1",
"bower-logger": "^0.2.2",
"bower-registry-client": "^1.0.0",
"cardinal": "0.4.4",
"chalk": "^1.0.0",
"chmodr": "1.0.2",
"chmodr": "^1.0.2",
"configstore": "^2.0.0",
"decompress-zip": "^0.2.2",
"decompress-zip": "^0.2.1",
"destroy": "^1.0.3",
"findup-sync": "^0.3.0",
"fs-write-stream-atomic": "1.0.8",
@@ -31,7 +35,7 @@
"github": "^0.2.3",
"glob": "^4.3.2",
"graceful-fs": "^4.1.3",
"handlebars": "^4.5.3",
"handlebars": "^4.0.5",
"inquirer": "0.10.0",
"is-root": "^1.0.0",
"junk": "^1.0.0",
@@ -64,46 +68,44 @@
"devDependencies": {
"arr-diff": "^2.0.0",
"chai": "^3.5.0",
"eslint": "^4.18.2",
"coveralls": "^2.11.9",
"expect.js": "^0.3.1",
"grunt": "^1.0.1",
"grunt-cli": "^1.1.0",
"grunt-contrib-watch": "^1.0.0",
"grunt-eslint": "^18.1.0",
"grunt-exec": "^0.4.7",
"grunt-simple-mocha": "^0.4.1",
"husky": "^0.14.3",
"in-publish": "^2.0.0",
"lint-staged": "^9.5.0",
"mocha": "^3.5.3",
"istanbul": "^0.4.3",
"lint-staged": "^7.0.0",
"load-grunt-tasks": "^3.5.0",
"mocha": "^2.5.3",
"multiline": "^1.0.2",
"nock": "^11.7.0",
"nock-legacy": "npm:nock@9.2.3",
"nock": "^9.2.3",
"node-uuid": "^1.4.7",
"prettier": "^1.19.1",
"prettier": "^1.11.1",
"proxyquire": "^1.7.9",
"spawn-sync": "1.0.15",
"wrench": "^1.5.8"
},
"scripts": {
"lint": "eslint .",
"test": "node test/packages.js && node test/packages-svn.js && mocha --timeout 15000 --reporter spec",
"prepublishOnly": "in-publish && echo 'You need to use \"node publish.js\" to publish bower' && false || not-in-publish",
"test": "grunt test",
"ci": "grunt travis",
"coveralls": "coveralls",
"prepublish": "in-publish && echo 'You need to use \"grunt publish\" to publish bower' && false || not-in-publish",
"format": "prettier --write --single-quote --tab-width 4 '**/*.js'",
"precommit": "lint-staged"
"precommit": "lint-staged && npm test"
},
"lint-staged": {
"*.js": [
"prettier --single-quote --tab-width 4"
"prettier --single-quote --tab-width 4",
"git add"
]
},
"files": [
"bin",
"lib"
],
"resolutions": {
"deep-extend": "0.5.1",
"minimist": "0.2.1"
},
"workspaces": [
"packages/bower-config",
"packages/bower-endpoint-parser",
"packages/bower-json",
"packages/bower-logger",
"packages/bower-registry-client"
]
}

View File

@@ -0,0 +1,61 @@
{
"predef": [
"console",
"describe",
"it",
"after",
"afterEach",
"before",
"beforeEach"
],
"indent": 4,
"node": true,
"devel": true,
"bitwise": false,
"curly": false,
"eqeqeq": true,
"forin": false,
"immed": true,
"latedef": false,
"newcap": true,
"noarg": true,
"noempty": false,
"nonew": true,
"plusplus": false,
"regexp": false,
"undef": true,
"unused": true,
"quotmark": "single",
"strict": false,
"trailing": true,
"asi": false,
"boss": true,
"debug": false,
"eqnull": true,
"es5": false,
"esnext": false,
"evil": false,
"expr": false,
"funcscope": false,
"globalstrict": false,
"iterator": false,
"lastsemic": false,
"laxbreak": true,
"laxcomma": false,
"loopfunc": true,
"multistr": false,
"onecase": true,
"regexdash": false,
"scripturl": false,
"smarttabs": false,
"shadow": false,
"sub": false,
"supernew": true,
"validthis": false,
"nomen": false,
"white": true
}

View File

@@ -0,0 +1,9 @@
sudo: false
language: node_js
node_js:
- '5'
- '4'
- '0.12'
- '0.10'
script:
- grunt travis

View File

@@ -1,13 +1,5 @@
# Changelog
## 1.4.2
- Prevent errors when expanded env variable does not exist
## 1.4.2
- Update minimist to 0.2.1 to fix security issue
## 1.4.0
- Change default shorthand resolver from git:// to https://

View File

@@ -0,0 +1,54 @@
module.exports = function(grunt) {
require('load-grunt-tasks')(grunt);
grunt.initConfig({
jshint: {
options: {
jshintrc: '.jshintrc'
},
files: [
'Gruntfile.js',
'bin/*',
'lib/**/*.js',
'test/**/*.js',
'!test/assets/**/*',
'!test/reports/**/*',
'!test/tmp/**/*'
]
},
simplemocha: {
options: {
reporter: 'spec',
timeout: '10000'
},
full: {
src: ['test/test.js']
},
short: {
options: {
reporter: 'dot'
},
src: ['test/test.js']
}
},
exec: {
cover: {
command:
'STRICT_REQUIRE=1 node node_modules/istanbul/lib/cli.js cover --dir ./test/reports node_modules/mocha/bin/_mocha -- --timeout 30000 -R dot test/test.js'
},
coveralls: {
command:
'node node_modules/.bin/coveralls < test/reports/lcov.info'
}
},
watch: {
files: ['<%= jshint.files %>'],
tasks: ['jshint', 'simplemocha:short']
}
});
grunt.registerTask('test', ['jshint', 'simplemocha:full']);
grunt.registerTask('cover', 'exec:cover');
grunt.registerTask('travis', ['jshint', 'exec:cover', 'exec:coveralls']);
grunt.registerTask('default', 'test');
};

View File

@@ -1,4 +1,4 @@
# bower-config
# bower-config [![Build Status](https://secure.travis-ci.org/bower/config.png?branch=master)](http://travis-ci.org/bower/config)[![Coverage Status](https://coveralls.io/repos/bower/config/badge.svg?branch=master&service=github)](https://coveralls.io/github/bower/config?branch=master)
> The Bower config (`.bowerrc`) reader and writer.

View File

@@ -33,7 +33,9 @@ function doEnvReplaceStr(f) {
esc = esc.length && esc.length % 2;
if (esc) return orig;
if (undefined === process.env[name]) {
return '${' + name + '}';
throw new Error(
'Environment variable used in .bowerrc is not defined: ' + orig
);
}
return process.env[name];

View File

@@ -1,6 +1,6 @@
var path = require('path');
var fs = require('graceful-fs');
var optimist = require('../vendor/optimist');
var optimist = require('optimist');
var osenv = require('osenv');
var object = require('mout/object');
var string = require('mout/string');

View File

@@ -1,358 +0,0 @@
var path = require('path');
var minimist = require('minimist');
var wordwrap = require('wordwrap');
/* Hack an instance of Argv with process.argv into Argv
so people can do
require('optimist')(['--beeble=1','-z','zizzle']).argv
to parse a list of args and
require('optimist').argv
to get a parsed version of process.argv.
*/
var inst = Argv(process.argv.slice(2));
Object.keys(inst).forEach(function(key) {
Argv[key] =
typeof inst[key] == 'function' ? inst[key].bind(inst) : inst[key];
});
var exports = (module.exports = Argv);
function Argv(processArgs, cwd) {
var self = {};
if (!cwd) cwd = process.cwd();
self.$0 = process.argv
.slice(0, 2)
.map(function(x) {
var b = rebase(cwd, x);
return x.match(/^\//) && b.length < x.length ? b : x;
})
.join(' ');
if (process.env._ != undefined && process.argv[1] == process.env._) {
self.$0 = process.env._.replace(
path.dirname(process.execPath) + '/',
''
);
}
var options = {
boolean: [],
string: [],
alias: {},
default: []
};
self.boolean = function(bools) {
options.boolean.push.apply(options.boolean, [].concat(bools));
return self;
};
self.string = function(strings) {
options.string.push.apply(options.string, [].concat(strings));
return self;
};
self.default = function(key, value) {
if (typeof key === 'object') {
Object.keys(key).forEach(function(k) {
self.default(k, key[k]);
});
} else {
options.default[key] = value;
}
return self;
};
self.alias = function(x, y) {
if (typeof x === 'object') {
Object.keys(x).forEach(function(key) {
self.alias(key, x[key]);
});
} else {
options.alias[x] = (options.alias[x] || []).concat(y);
}
return self;
};
var demanded = {};
self.demand = function(keys) {
if (typeof keys == 'number') {
if (!demanded._) demanded._ = 0;
demanded._ += keys;
} else if (Array.isArray(keys)) {
keys.forEach(function(key) {
self.demand(key);
});
} else {
demanded[keys] = true;
}
return self;
};
var usage;
self.usage = function(msg, opts) {
if (!opts && typeof msg === 'object') {
opts = msg;
msg = null;
}
usage = msg;
if (opts) self.options(opts);
return self;
};
function fail(msg) {
self.showHelp();
if (msg) console.error(msg);
process.exit(1);
}
var checks = [];
self.check = function(f) {
checks.push(f);
return self;
};
var descriptions = {};
self.describe = function(key, desc) {
if (typeof key === 'object') {
Object.keys(key).forEach(function(k) {
self.describe(k, key[k]);
});
} else {
descriptions[key] = desc;
}
return self;
};
self.parse = function(args) {
return parseArgs(args);
};
self.option = self.options = function(key, opt) {
if (typeof key === 'object') {
Object.keys(key).forEach(function(k) {
self.options(k, key[k]);
});
} else {
if (opt.alias) self.alias(key, opt.alias);
if (opt.demand) self.demand(key);
if (typeof opt.default !== 'undefined') {
self.default(key, opt.default);
}
if (opt.boolean || opt.type === 'boolean') {
self.boolean(key);
}
if (opt.string || opt.type === 'string') {
self.string(key);
}
var desc = opt.describe || opt.description || opt.desc;
if (desc) {
self.describe(key, desc);
}
}
return self;
};
var wrap = null;
self.wrap = function(cols) {
wrap = cols;
return self;
};
self.showHelp = function(fn) {
if (!fn) fn = console.error;
fn(self.help());
};
self.help = function() {
var keys = Object.keys(
Object.keys(descriptions)
.concat(Object.keys(demanded))
.concat(Object.keys(options.default))
.reduce(function(acc, key) {
if (key !== '_') acc[key] = true;
return acc;
}, {})
);
var help = keys.length ? ['Options:'] : [];
if (usage) {
help.unshift(usage.replace(/\$0/g, self.$0), '');
}
var switches = keys.reduce(function(acc, key) {
acc[key] = [key]
.concat(options.alias[key] || [])
.map(function(sw) {
return (sw.length > 1 ? '--' : '-') + sw;
})
.join(', ');
return acc;
}, {});
var switchlen = longest(
Object.keys(switches).map(function(s) {
return switches[s] || '';
})
);
var desclen = longest(
Object.keys(descriptions).map(function(d) {
return descriptions[d] || '';
})
);
keys.forEach(function(key) {
var kswitch = switches[key];
var desc = descriptions[key] || '';
if (wrap) {
desc = wordwrap(switchlen + 4, wrap)(desc).slice(switchlen + 4);
}
var spadding = new Array(
Math.max(switchlen - kswitch.length + 3, 0)
).join(' ');
var dpadding = new Array(
Math.max(desclen - desc.length + 1, 0)
).join(' ');
var type = null;
if (options.boolean[key]) type = '[boolean]';
if (options.string[key]) type = '[string]';
if (!wrap && dpadding.length > 0) {
desc += dpadding;
}
var prelude = ' ' + kswitch + spadding;
var extra = [
type,
demanded[key] ? '[required]' : null,
options.default[key] !== undefined
? '[default: ' + JSON.stringify(options.default[key]) + ']'
: null
]
.filter(Boolean)
.join(' ');
var body = [desc, extra].filter(Boolean).join(' ');
if (wrap) {
var dlines = desc.split('\n');
var dlen =
dlines.slice(-1)[0].length +
(dlines.length === 1 ? prelude.length : 0);
body =
desc +
(dlen + extra.length > wrap - 2
? '\n' +
new Array(wrap - extra.length + 1).join(' ') +
extra
: new Array(wrap - extra.length - dlen + 1).join(' ') +
extra);
}
help.push(prelude + body);
});
help.push('');
return help.join('\n');
};
Object.defineProperty(self, 'argv', {
get: function() {
return parseArgs(processArgs);
},
enumerable: true
});
function parseArgs(args) {
var argv = minimist(args, options);
argv.$0 = self.$0;
if (demanded._ && argv._.length < demanded._) {
fail(
'Not enough non-option arguments: got ' +
argv._.length +
', need at least ' +
demanded._
);
}
var missing = [];
Object.keys(demanded).forEach(function(key) {
if (!argv[key]) missing.push(key);
});
if (missing.length) {
fail('Missing required arguments: ' + missing.join(', '));
}
checks.forEach(function(f) {
try {
if (f(argv) === false) {
fail('Argument check failed: ' + f.toString());
}
} catch (err) {
fail(err);
}
});
return argv;
}
function longest(xs) {
return Math.max.apply(
null,
xs.map(function(x) {
return x.length;
})
);
}
return self;
}
// rebase an absolute path to a relative one with respect to a base directory
// exported for tests
exports.rebase = rebase;
function rebase(base, dir) {
var ds = path
.normalize(dir)
.split('/')
.slice(1);
var bs = path
.normalize(base)
.split('/')
.slice(1);
for (var i = 0; ds[i] && ds[i] == bs[i]; i++);
ds.splice(0, i);
bs.splice(0, i);
var p = path
.normalize(
bs
.map(function() {
return '..';
})
.concat(ds)
.join('/')
)
.replace(/\/$/, '')
.replace(/^$/, '.');
return p.match(/^[.\/]/) ? p : './' + p;
}

View File

@@ -1,6 +1,6 @@
{
"name": "bower-config",
"version": "1.4.3",
"version": "1.4.0",
"description": "The Bower config reader and writer.",
"author": "Twitter",
"license": "MIT",
@@ -12,23 +12,32 @@
},
"dependencies": {
"graceful-fs": "^4.1.3",
"minimist": "^0.2.1",
"mout": "^1.0.0",
"optimist": "^0.6.1",
"osenv": "^0.1.3",
"untildify": "^2.1.0",
"wordwrap": "^0.0.3"
"untildify": "^2.1.0"
},
"devDependencies": {
"coveralls": "^2.11.4",
"expect.js": "^0.3.1",
"glob": "^4.5.3",
"grunt": "^0.4.5",
"grunt-cli": "^0.1.13",
"grunt-contrib-jshint": "^0.10.0",
"grunt-contrib-watch": "^0.6.1",
"grunt-coveralls": "^1.0.0",
"grunt-exec": "^0.4.6",
"grunt-simple-mocha": "^0.4.0",
"istanbul": "^0.4.1",
"load-grunt-tasks": "^2.0.0",
"mkdirp": "^0.5.0",
"mocha": "^3.5.3",
"mocha": "~1.12.0",
"node-uuid": "^1.4.3",
"q": "^1.2.0",
"rimraf": "^2.3.2"
},
"scripts": {
"test": "mocha test"
"test": "grunt test"
},
"files": [
"lib"

View File

@@ -1,10 +0,0 @@
#!/usr/bin/env node
var path = require('path');
var bowerConfig = require('..');
var config = bowerConfig.read(path.join(__dirname + '/assets/env-variables'), {
foo: 'bar'
});
console.log(config);

View File

@@ -177,25 +177,18 @@ describe('NPM Config on package.json', function() {
assert.equal(process.env.HTTPS_PROXY, 'http://HTTPS_PROXY');
assert.equal(process.env.NO_PROXY, 'google.com');
// On windows env is case insensitive
if (process.platform === 'win32') {
assert.equal(process.env.http_proxy, 'http://HTTP_PROXY');
assert.equal(process.env.https_proxy, 'http://HTTPS_PROXY');
assert.equal(process.env.no_proxy, 'google.com');
} else {
assert.equal(process.env.http_proxy, undefined);
assert.equal(process.env.https_proxy, undefined);
assert.equal(process.env.no_proxy, undefined);
}
assert.equal(process.env.http_proxy, undefined);
assert.equal(process.env.https_proxy, undefined);
assert.equal(process.env.no_proxy, undefined);
});
it('restores env variables', function() {
process.env.http_proxy = 'd';
process.env.https_proxy = 'e';
process.env.no_proxy = 'f';
process.env.HTTP_PROXY = 'a';
process.env.HTTPS_PROXY = 'b';
process.env.NO_PROXY = 'c';
process.env.http_proxy = 'd';
process.env.https_proxy = 'e';
process.env.no_proxy = 'f';
var config = require('../lib/Config')
.create('test/assets/env-variables')
@@ -206,16 +199,9 @@ describe('NPM Config on package.json', function() {
assert.equal(process.env.HTTPS_PROXY, 'b');
assert.equal(process.env.NO_PROXY, 'c');
// On windows precedence for restoring is for capital case
if (process.platform === 'win32') {
assert.equal(process.env.http_proxy, 'a');
assert.equal(process.env.https_proxy, 'b');
assert.equal(process.env.no_proxy, 'c');
} else {
assert.equal(process.env.http_proxy, 'd');
assert.equal(process.env.https_proxy, 'e');
assert.equal(process.env.no_proxy, 'f');
}
assert.equal(process.env.http_proxy, 'd');
assert.equal(process.env.https_proxy, 'e');
assert.equal(process.env.no_proxy, 'f');
});
it('restores env variables if they are undefined', function() {
@@ -255,7 +241,7 @@ describe('Allow ${ENV} variables in .bowerrc', function() {
'test/assets/env-variables-values'
);
assert.equal('a', config.storage.packages);
assert.equal(path.resolve('/tmp/b'), config.tmp);
assert.equal('/tmp/b', config.tmp);
assert.equal('username:password', config.storage.registry.search[0]);
assert.equal('${_myshellvar}', config.scripts.postinstall);
});

View File

@@ -0,0 +1,61 @@
{
"predef": [
"console",
"describe",
"it",
"after",
"afterEach",
"before",
"beforeEach"
],
"indent": 4,
"node": true,
"devel": true,
"bitwise": false,
"curly": false,
"eqeqeq": true,
"forin": false,
"immed": true,
"latedef": false,
"newcap": true,
"noarg": true,
"noempty": false,
"nonew": true,
"plusplus": false,
"regexp": false,
"undef": true,
"unused": true,
"quotmark": "single",
"strict": false,
"trailing": true,
"camelcase": true,
"asi": false,
"boss": true,
"debug": false,
"eqnull": true,
"esnext": false,
"evil": false,
"expr": true,
"funcscope": false,
"globalstrict": false,
"iterator": false,
"lastsemic": false,
"laxbreak": true,
"laxcomma": false,
"loopfunc": true,
"multistr": false,
"onecase": true,
"regexdash": false,
"scripturl": false,
"smarttabs": false,
"shadow": false,
"sub": false,
"supernew": true,
"validthis": false,
"nomen": false,
"white": true
}

View File

@@ -0,0 +1,4 @@
language: node_js
node_js:
- "0.10"
- "0.8"

View File

@@ -1,4 +1,4 @@
# bower-endpoint-parser
# endpoint-parser [![Build Status](https://secure.travis-ci.org/bower/endpoint-parser.png?branch=master)](http://travis-ci.org/bower/endpoint-parser)
Little module that helps with endpoints parsing.

View File

@@ -16,7 +16,7 @@
},
"devDependencies": {
"expect.js": "~0.2.0",
"mocha": "^3.5.3",
"mocha": "~1.12.0",
"mout": "~0.9.0"
},
"scripts": {

View File

@@ -0,0 +1,48 @@
{
"indent": 4,
"node": true,
"devel": true,
"mocha": true,
"bitwise": false,
"curly": false,
"eqeqeq": true,
"forin": false,
"immed": true,
"latedef": false,
"newcap": true,
"noarg": true,
"noempty": false,
"nonew": true,
"plusplus": false,
"regexp": false,
"undef": true,
"unused": true,
"quotmark": "single",
"strict": false,
"camelcase": true,
"asi": false,
"boss": true,
"debug": false,
"eqnull": true,
"es5": false,
"esnext": false,
"evil": false,
"expr": false,
"funcscope": false,
"globalstrict": false,
"iterator": false,
"lastsemic": false,
"laxbreak": true,
"laxcomma": false,
"loopfunc": true,
"multistr": false,
"onecase": true,
"regexdash": false,
"scripturl": false,
"shadow": false,
"sub": false,
"supernew": true,
"validthis": false
}

View File

@@ -0,0 +1,10 @@
sudo: false
language: node_js
node_js:
- '5'
- '4'
- '0.12'
- '0.10'
script:
- grunt travis

View File

@@ -1,15 +1,3 @@
# 0.8.4
- Update deep-extend (security fix)
# 0.8.3
- Fix requires
# 0.8.2
- Drop dependency on meow (vendor ext-name)
# 0.8.1
- Revert strict name validations and allow @, spaces and slashes

View File

@@ -0,0 +1,57 @@
module.exports = function(grunt) {
require('load-grunt-tasks')(grunt);
// Project configuration.
grunt.initConfig({
jshint: {
files: [
'Gruntfile.js',
'lib/**/*.js',
'test/**/*.js',
'!test/reports/**/*'
],
options: {
jshintrc: '.jshintrc'
}
},
simplemocha: {
options: {
reporter: 'spec'
},
full: { src: ['test/test.js'] },
short: {
options: {
reporter: 'dot'
},
src: ['test/test.js']
},
build: {
options: {
reporter: 'tap'
},
src: ['test/test.js']
}
},
exec: {
cover: {
command:
'STRICT_REQUIRE=1 node node_modules/istanbul/lib/cli.js cover --dir ./test/reports node_modules/mocha/bin/_mocha -- --timeout 30000 -R dot test/test.js'
},
coveralls: {
command:
'node node_modules/.bin/coveralls < test/reports/lcov.info'
}
},
watch: {
files: ['<%= jshint.files %>'],
tasks: ['jshint', 'simplemocha:short']
}
});
// Default task.
grunt.registerTask('test', ['simplemocha:full']);
grunt.registerTask('default', ['jshint', 'test']);
grunt.registerTask('travis', ['jshint', 'exec:cover', 'exec:coveralls']);
};

View File

@@ -1,4 +1,4 @@
# bower-json
# bower-json [![Build Status](https://secure.travis-ci.org/bower/json.png?branch=master)](http://travis-ci.org/bower/json) [![Coverage Status](https://coveralls.io/repos/bower/json/badge.svg?branch=master&service=github)](https://coveralls.io/github/bower/json?branch=master)
Read `bower.json` files with semantics, normalisation, defaults and validation.

View File

@@ -1,4 +1,4 @@
var extName = require('../vendor/ext-name');
var extName = require('ext-name');
function isAsset(filename) {
var info = extName(filename);

View File

@@ -1,19 +0,0 @@
'use strict';
var endsWith = require('ends-with');
var extList = require('ext-list');
var sortKeysLength = require('sort-keys-length');
module.exports = function(str) {
var obj = sortKeysLength.desc(extList());
var ext = Object.keys(obj).filter(endsWith.bind(null, str));
if (!ext.length) {
return;
}
return {
ext: ext[0],
mime: obj[ext[0]]
};
};

View File

@@ -1,6 +1,6 @@
{
"name": "bower-json",
"version": "0.8.4",
"version": "0.8.1",
"description": "Read bower.json files with semantics, normalisation, defaults and validation",
"author": "Twitter",
"license": "MIT",
@@ -10,21 +10,29 @@
"node": ">=0.10.0"
},
"dependencies": {
"deep-extend": "^0.5.1",
"ends-with": "^0.2.0",
"ext-list": "^2.0.0",
"sort-keys-length": "^1.0.0",
"deep-extend": "^0.4.0",
"ext-name": "^3.0.0",
"graceful-fs": "^4.1.3",
"intersect": "^1.0.1"
},
"devDependencies": {
"coveralls": "^2.11.2",
"expect.js": "^0.3.1",
"mocha": "^3.5.3",
"grunt": "^0.4.4",
"grunt-cli": "^0.1.13",
"grunt-contrib-jshint": "^0.11.2",
"grunt-contrib-watch": "^0.6.1",
"grunt-coveralls": "^1.0.0",
"grunt-exec": "^0.4.6",
"grunt-simple-mocha": "^0.4.0",
"istanbul": "^0.3.5",
"load-grunt-tasks": "^3.3.0",
"mocha": "*",
"request": "^2.64.0",
"underscore.string": "^3.0.3"
},
"scripts": {
"test": "mocha"
"test": "grunt test"
},
"files": [
"lib"

View File

@@ -162,9 +162,7 @@ describe('.read', function() {
return done(err);
}
expect(file).to.equal(
path.resolve(__dirname + '/pkg-bower-json/bower.json')
);
expect(file).to.equal(__dirname + '/pkg-bower-json/bower.json');
done();
});
});

View File

@@ -0,0 +1,62 @@
{
"predef": [
"console",
"describe",
"it",
"after",
"afterEach",
"before",
"beforeEach"
],
"indent": 4,
"node": true,
"devel": true,
"bitwise": false,
"curly": false,
"eqeqeq": true,
"forin": false,
"immed": true,
"latedef": false,
"newcap": true,
"noarg": true,
"noempty": false,
"nonew": true,
"plusplus": false,
"regexp": false,
"undef": true,
"unused": true,
"quotmark": "single",
"strict": false,
"trailing": true,
"camelcase": true,
"asi": false,
"boss": true,
"debug": false,
"eqnull": true,
"es5": false,
"esnext": false,
"evil": false,
"expr": false,
"funcscope": false,
"globalstrict": false,
"iterator": false,
"lastsemic": false,
"laxbreak": true,
"laxcomma": false,
"loopfunc": true,
"multistr": false,
"onecase": true,
"regexdash": false,
"scripturl": false,
"smarttabs": false,
"shadow": false,
"sub": false,
"supernew": true,
"validthis": false,
"nomen": false,
"white": true
}

View File

@@ -0,0 +1,6 @@
sudo: false
language: node_js
node_js:
- 'iojs'
- '0.12'
- '0.10'

View File

@@ -1,4 +1,4 @@
# bower-logger
# bower-logger [![Build Status](https://secure.travis-ci.org/bower/logger.png?branch=master)](http://travis-ci.org/bower/logger)
The logger used in the various architecture components of Bower.

View File

@@ -16,12 +16,12 @@
},
"devDependencies": {
"expect.js": "~0.2.0",
"mocha": "^3.5.3"
"mocha": "~1.12.0"
},
"scripts": {
"test": "mocha -R spec"
},
"files": [
"lib"
"lib"
]
}

View File

@@ -0,0 +1,61 @@
{
"predef": [
"console",
"describe",
"it",
"after",
"afterEach",
"before",
"beforeEach"
],
"indent": 4,
"node": true,
"devel": true,
"bitwise": false,
"curly": false,
"eqeqeq": true,
"forin": false,
"immed": true,
"latedef": false,
"newcap": true,
"noarg": true,
"noempty": false,
"nonew": true,
"plusplus": false,
"regexp": false,
"undef": true,
"unused": "vars",
"quotmark": "single",
"strict": false,
"trailing": true,
"camelcase": true,
"asi": false,
"boss": true,
"debug": false,
"eqnull": true,
"esnext": false,
"evil": false,
"expr": true,
"funcscope": false,
"globalstrict": false,
"iterator": false,
"lastsemic": false,
"laxbreak": true,
"laxcomma": false,
"loopfunc": true,
"multistr": false,
"onecase": true,
"regexdash": false,
"scripturl": false,
"smarttabs": false,
"shadow": false,
"sub": false,
"supernew": true,
"validthis": false,
"nomen": false,
"white": true
}

View File

@@ -0,0 +1,6 @@
sudo: false
language: node_js
node_js:
- 'iojs'
- '0.12'
- '0.10'

View File

@@ -0,0 +1,42 @@
module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-simple-mocha');
grunt.initConfig({
jshint: {
files: ['Gruntfile.js', 'lib/**/*.js', 'test/**/*.js'],
options: {
jshintrc: '.jshintrc'
}
},
simplemocha: {
options: {
reporter: 'spec',
timeout: 20000
},
full: {
src: ['test/runner.js']
},
short: {
options: {
reporter: 'dot'
},
src: ['test/runner.js']
},
build: {
options: {
reporter: 'tap'
},
src: ['test/runner.js']
}
},
watch: {
files: ['<%= jshint.files %>'],
tasks: ['jshint', 'simplemocha:short']
}
});
grunt.registerTask('test', ['simplemocha:full']);
grunt.registerTask('default', ['jshint', 'test']);
};

View File

@@ -1,4 +1,4 @@
# bower-registry-client
# bower-registry-client [![Build Status](https://travis-ci.org/bower/registry-client.png?branch=master)](https://travis-ci.org/bower/registry-client)
> Provides easy interaction with the Bower registry

View File

@@ -21,11 +21,16 @@
"devDependencies": {
"bower-config": "^1.1.2",
"expect.js": "~0.2.0",
"mocha": "^3.5.3",
"nock": "9.2.3"
"grunt": "~0.4.1",
"grunt-cli": "^0.1.13",
"grunt-contrib-jshint": "~0.6.0",
"grunt-contrib-watch": "~0.5.0",
"grunt-simple-mocha": "~0.4.0",
"mocha": "~1.12.0",
"nock": "~0.22.0"
},
"scripts": {
"test": "mocha"
"test": "grunt test"
},
"files": [
"lib",

View File

@@ -2,9 +2,9 @@ var RegistryClient = require('../Client');
var fs = require('fs');
var expect = require('expect.js');
var md5 = require('../lib/util/md5');
var nock = require('nock');
var http = require('http');
var Config = require('bower-config');
var nock = require('nock');
describe('RegistryClient', function() {
beforeEach(function() {
@@ -213,12 +213,12 @@ describe('RegistryClient', function() {
expect(entry.url).to.eql(
'git://github.com/components/jquery.git'
);
next();
});
next();
});
});
describe.skip('calling the lookup instance method without argument', function() {
describe('calling the lookup instance method without argument', function() {
it('should return no result', function(next) {
this.timeout(10000);
this.registry.lookup('', function(err, entry) {
@@ -647,7 +647,7 @@ describe('RegistryClient', function() {
describe('calling the list instance method with two registries', function() {
beforeEach(function() {
nock('https://registry.bower.io')
nock('https://registry.bower.io:443')
.get('/packages')
.reply(200, []);
@@ -660,9 +660,6 @@ describe('RegistryClient', function() {
}
]);
this.pkg = 'jquery';
this.pkgUrl = 'git://github.com/bar/foo.git';
this.registry = new RegistryClient(
Config.read(process.cwd(), {
strictSsl: false,

View File

@@ -3,7 +3,7 @@ var expect = require('expect.js');
describe('Cache', function() {
beforeEach(function() {
this.cache = new Cache(__dirname);
this.cache = new Cache();
});
describe('Constructor', function() {

View File

@@ -1,129 +0,0 @@
var tmp = require('tmp');
var fs = require('fs');
var path = require('path');
var glob = require('glob');
var childProcess = require('child_process');
var arraydiff = require('arr-diff');
var wrench = require('wrench');
var jsonPackage = require('./package');
if (
childProcess
.execSync('git rev-parse --abbrev-ref HEAD')
.toString()
.trim() !== 'master'
) {
console.log('You need to release bower from the "master" branch');
process.exit(1);
}
var dir = path.join(tmp.dirSync().name, 'package');
console.log('\nInstalling production bundle in:');
console.log(dir + '\n');
wrench.copyDirSyncRecursive(__dirname, dir, {
forceDelete: true,
include: function(path) {
return !path.match(/node_modules|\.git|test/);
}
});
delete jsonPackage.scripts;
delete jsonPackage.private;
for (let name of jsonPackage.workspaces) {
jsonPackage.dependencies[name.split('/').reverse()[0]] = "file:./" + name
}
delete jsonPackage.workspaces;
fs.writeFileSync(
path.resolve(dir, 'package.json'),
JSON.stringify(jsonPackage, null, ' ') + '\n'
);
console.log('Installing production dependencies...');
childProcess.execSync('yarn --production', {
cwd: dir,
stdio: [0, 1, 2]
});
delete jsonPackage.dependencies;
delete jsonPackage.resolutions;
delete jsonPackage["lint-staged"];
delete jsonPackage.devDependencies;
delete jsonPackage.files;
fs.writeFileSync(
path.resolve(dir, 'package.json'),
JSON.stringify(jsonPackage, null, ' ') + '\n'
);
glob.sync(path.join(dir, '**', '.npmignore')).forEach(function (file) {
fs.rmSync(file)
});
fs.writeFileSync(path.resolve(dir, '.npmignore'), '');
console.log('Moving node_modules to lib directory...');
wrench.copyDirSyncRecursive(
path.resolve(dir, 'node_modules'),
path.resolve(dir, 'lib', 'node_modules')
);
wrench.rmdirSyncRecursive(path.resolve(dir, 'node_modules'));
glob.sync(path.join(dir, '**', 'package.json')).forEach(function (file) {
console.log(file);
const json = JSON.parse(fs.readFileSync(file));
delete json.files;
fs.writeFileSync(file, JSON.stringify(json, null, ' ') + '\n');
});
console.log('Testing bower on sample project...');
childProcess.execSync(
'cd test/sample && rm -rf bower_components && ' +
dir +
'/bin/bower install --force',
{ stdio: [0, 1, 2] }
);
var expectedPackages = (
'SHA-1 ace-builds almond angular angular-animate angular-bootstrap angular-charts angular-contenteditable ' +
'angular-deckgrid angular-fullscreen angular-gravatar angular-hotkeys angular-local-storage angular-marked ' +
'angular-moment angular-sanitize angular-touch angular-ui-router angular-ui-sortable ' +
'angulartics asEvented bootstrap coffee-script d3 es6-shim font-awesome howler jquery ' +
'jquery-ui jquery-waypoints js-beautify lodash lz-string marked moment ng-file-upload peerjs ' +
'requirejs restangular slimScroll slimScrollHorizontal venturocket-angular-slider'
).split(' ');
var installedPackages = fs.readdirSync('./test/sample/bower_components');
var installedDiff = arraydiff(expectedPackages, installedPackages);
if (installedDiff.length > 0) {
console.log('ERROR. Some packages were not installed by bower: ');
console.log(installedDiff.join(', '));
process.exit(1);
}
var tgzName = 'bower-' + jsonPackage.version + '.tgz'
childProcess.execSync('npm pack', {
cwd: dir,
stdio: [0, 1, 2]
});
fs.copyFileSync(path.join(dir, tgzName), path.join(__dirname, tgzName))
console.log('All done!')
console.log('You need to publish prerelease and release manually:')
console.log('')
console.log('- npm install -g ' + tgzName)
console.log('- npm publish ' + tgzName + ' --tag beta')
console.log('- npm dist-tag add bower@' + jsonPackage.version + ' latest')

View File

@@ -1,7 +1,7 @@
var expect = require('expect.js');
var path = require('path');
var helpers = require('../helpers');
var nock = require('../util/nock');
var nock = require('nock');
var rimraf = require('rimraf');
var fs = require('../../lib/util/fs');
var tar = require('tar-fs');
@@ -692,7 +692,7 @@ describe('bower install', function() {
});
});
it('recognizes proxy option in config', function() {
it('recognizes proxy option in config', function(done) {
this.timeout(10000);
tempDir.prepare({
@@ -708,10 +708,8 @@ describe('bower install', function() {
cwd: tempDir.path
});
nock('http://dummy.local/')
.get(function(uri) {
return true;
})
nock('http://dummy.local')
.get('http://github.com/yahoo/pure/archive/v0.6.0.tar.gz')
.reply(500);
return helpers
@@ -722,6 +720,7 @@ describe('bower install', function() {
])
.fail(function(error) {
expect(error.message).to.equal('Status code of 500');
done();
});
});

View File

@@ -268,7 +268,8 @@ describe('PackageRepository', function() {
return Q.resolve([tempPackage, json]);
};
copy.copyDir(testPackage, tempPackage, { ignore: ['.git'] })
copy
.copyDir(testPackage, tempPackage, { ignore: ['.git'] })
.then(function() {
fs.writeFileSync(
path.join(tempPackage, '.bower.json'),
@@ -315,7 +316,8 @@ describe('PackageRepository', function() {
return Q.resolve([tempPackage, json]);
};
copy.copyDir(testPackage, tempPackage, { ignore: ['.git'] })
copy
.copyDir(testPackage, tempPackage, { ignore: ['.git'] })
.then(function() {
fs.writeFileSync(
path.join(tempPackage, '.bower.json'),
@@ -362,7 +364,8 @@ describe('PackageRepository', function() {
return Q.resolve([tempPackage, json]);
};
copy.copyDir(testPackage, tempPackage, { ignore: ['.git'] })
copy
.copyDir(testPackage, tempPackage, { ignore: ['.git'] })
.then(function() {
fs.writeFileSync(
path.join(tempPackage, '.bower.json'),
@@ -407,7 +410,8 @@ describe('PackageRepository', function() {
return Q.resolve([tempPackage, json]);
};
copy.copyDir(testPackage, tempPackage, { ignore: ['.git'] })
copy
.copyDir(testPackage, tempPackage, { ignore: ['.git'] })
.then(function() {
fs.writeFileSync(
path.join(tempPackage, '.bower.json'),

View File

@@ -88,10 +88,9 @@ describe('ResolveCache', function() {
// Create a fresh copy of the test package into temp
rimraf.sync(tempPackage);
copy.copyDir(testPackage, tempPackage, { ignore: ['.git'] }).then(
next.bind(next, null),
next
);
copy
.copyDir(testPackage, tempPackage, { ignore: ['.git'] })
.then(next.bind(next, null), next);
});
it('should move the canonical dir to source-md5/version/ folder if package meta has a version', function(next) {
@@ -159,7 +158,8 @@ describe('ResolveCache', function() {
var pkgMeta = path.join(tempPackage, '.bower.json');
// Copy bower.json to .bower.json and add some props
copy.copyFile(path.join(tempPackage, 'component.json'), pkgMeta)
copy
.copyFile(path.join(tempPackage, 'component.json'), pkgMeta)
.then(function() {
return Q.nfcall(fs.readFile, pkgMeta).then(function(
contents

View File

@@ -179,10 +179,11 @@ describe('FsResolver', function() {
mkdirp.sync(tempSource);
resolver = create(tempSource);
copy.copyFile(
path.join(testPackage, 'foo'),
path.join(tempSource, 'foo')
)
copy
.copyFile(
path.join(testPackage, 'foo'),
path.join(tempSource, 'foo')
)
.then(resolver.resolve.bind(resolver))
.then(function(dir) {
expect(fs.existsSync(path.join(dir, 'index'))).to.be(true);
@@ -201,10 +202,11 @@ describe('FsResolver', function() {
mkdirp.sync(tempSource);
resolver = create(tempSource);
copy.copyFile(
path.join(testPackage, 'bower.json'),
path.join(tempSource, 'bower.json')
)
copy
.copyFile(
path.join(testPackage, 'bower.json'),
path.join(tempSource, 'bower.json')
)
.then(resolver.resolve.bind(resolver))
.then(function(dir) {
expect(fs.existsSync(path.join(dir, 'bower.json'))).to.be(
@@ -242,7 +244,8 @@ describe('FsResolver', function() {
tempSource = path.resolve(__dirname, '../../assets/package-a-copy');
resolver = create(tempSource);
copy.copyDir(testPackage, tempSource)
copy
.copyDir(testPackage, tempSource)
.then(function() {
// Change tempSource dir to 0777
fs.chmodSync(tempSource, 0777);
@@ -266,7 +269,8 @@ describe('FsResolver', function() {
tempSource = path.resolve(__dirname, '../../tmp/temp-source');
resolver = create(tempSource);
copy.copyFile(path.join(testPackage, 'foo'), tempSource)
copy
.copyFile(path.join(testPackage, 'foo'), tempSource)
.then(function() {
// Change tempSource dir to 0777
fs.chmodSync(tempSource, 0777);

View File

@@ -146,7 +146,7 @@ describe('GitFsResolver', function() {
var dir = path.join(testPackage, 'new-dir');
fs.writeFileSync(file, 'foo');
fs.mkdirSync(dir);
fs.mkdir(dir);
function cleanup(err) {
fs.unlinkSync(file);
@@ -213,7 +213,8 @@ describe('GitFsResolver', function() {
tempSource = path.resolve(__dirname, '../../assets/package-a-copy');
resolver = create({ source: tempSource, target: 'some-branch' });
copy.copyDir(testPackage, tempSource)
copy
.copyDir(testPackage, tempSource)
.then(function() {
// Change tempSource dir to 0777
fs.chmodSync(tempSource, 0777);

View File

@@ -1,5 +1,5 @@
var path = require('path');
var nock = require('../../util/nock');
var nock = require('nock');
var fs = require('../../../lib/util/fs');
var expect = require('expect.js');
var Logger = require('bower-logger');

View File

@@ -975,13 +975,14 @@ describe('GitResolver', function() {
var dst = path.join(tempDir, '.git');
// Copy .git folder to the tempDir
copy.copyDir(
path.resolve(__dirname, '../../assets/package-a/.git'),
dst,
copy
.copyDir(
path.resolve(__dirname, '../../assets/package-a/.git'),
dst,
{
mode: 0777
}
)
)
.then(function() {
resolver._tempDir = tempDir;

View File

@@ -1,7 +1,7 @@
var expect = require('expect.js');
var path = require('path');
var fs = require('../../../lib/util/fs');
var nock = require('../../util/nock');
var nock = require('nock');
var Q = require('q');
var rimraf = require('../../../lib/util/rimraf');
var mkdirp = require('mkdirp');
@@ -530,64 +530,64 @@ describe('UrlResolver', function() {
.replyWithFile(
200,
path.resolve(__dirname, '../../assets/package-zip.zip'),
{
'Content-Type': 'application/zip'
}
{
'Content-Type': 'application/zip'
}
)
.get('/package-zip2')
.replyWithFile(
200,
path.resolve(__dirname, '../../assets/package-zip.zip'),
{
'Content-Type': 'application/zip; charset=UTF-8'
}
{
'Content-Type': 'application/zip; charset=UTF-8'
}
)
.get('/package-zip3')
.replyWithFile(
200,
path.resolve(__dirname, '../../assets/package-zip.zip'),
{
'Content-Type': ' application/zip ; charset=UTF-8'
}
{
'Content-Type': ' application/zip ; charset=UTF-8'
}
)
.get('/package-zip4')
.replyWithFile(
200,
path.resolve(__dirname, '../../assets/package-zip.zip'),
{
'Content-Type': '"application/x-zip"' // Test with quotes
}
{
'Content-Type': '"application/x-zip"' // Test with quotes
}
)
.get('/package-tar')
.replyWithFile(
200,
path.resolve(__dirname, '../../assets/package-tar.tar.gz'),
{
'Content-Type': ' application/x-tgz ; charset=UTF-8'
}
{
'Content-Type': ' application/x-tgz ; charset=UTF-8'
}
)
.get('/package-tar.tar.gz')
.replyWithFile(
200,
path.resolve(__dirname, '../../assets/package-tar.tar.gz'),
{
'Content-Type': ' application/x-tgz ; charset=UTF-8'
}
{
'Content-Type': ' application/x-tgz ; charset=UTF-8'
}
)
.get('/package-tar2.tar.gz')
.replyWithFile(
200,
path.resolve(__dirname, '../../assets/package-tar.tar.gz'),
{
'Content-Type':
{
'Content-Type':
' application/octet-stream ; charset=UTF-8'
}
}
);
resolver = create('http://bower.io/package-zip');
@@ -698,10 +698,10 @@ describe('UrlResolver', function() {
.replyWithFile(
200,
path.resolve(__dirname, '../../assets/package-zip.zip'),
{
'Content-Disposition':
{
'Content-Disposition':
'attachment; filename="package-zip.zip"'
}
}
);
resolver = create('http://bower.io/package-zip');
@@ -857,9 +857,9 @@ describe('UrlResolver', function() {
.replyWithFile(
200,
path.resolve(__dirname, '../../assets/package-zip.zip'),
{
'Content-Disposition': header
}
{
'Content-Disposition': header
}
);
resolver = create('http://bower.io/package-zip');

View File

@@ -15,13 +15,13 @@ var proxyquire = require('proxyquire')
.noPreserveCache();
var spawnSync = require('spawn-sync');
var config = require('../lib/config');
var nock = require('./util/nock');
var nock = require('nock');
var semver = require('semver');
// For better promise errors
Q.longStackSupport = true;
// Those are needed for testing or not configured git environment
// Those are needed for Travis or not configured git environment
var env = {
GIT_AUTHOR_DATE: 'Sun Apr 7 22:13:13 2013 +0000',
GIT_AUTHOR_NAME: 'André Cruz',

View File

@@ -105,9 +105,9 @@ function createRelease(dir, release, files) {
cmd('git', ['checkout', 'master', '-f'], { cwd: dir })
// Attempt to delete branch, ignoring the error
.then(function() {
return cmd('git', ['branch', '-D', branch], {
cwd: dir
}).fail(function() {});
return cmd('git', ['branch', '-D', branch], { cwd: dir }).fail(
function() {}
);
})
// Checkout based on master
.then(

View File

@@ -1,6 +1,6 @@
var expect = require('expect.js');
var helpers = require('../helpers');
var nock = require('../util/nock');
var nock = require('nock');
var path = require('path');
var Q = require('q');
@@ -13,30 +13,42 @@ describe('download', function() {
destination = tempDir.getPath('package.tar.gz');
function downloadTest(opts) {
var deferred = Q.defer();
tempDir.prepare();
opts.response(nock('http://bower.io', opts.nockOpts));
return download(
download(
opts.sourceUrl || 'http://bower.io/package.tar.gz',
opts.destinationPath || destination,
opts.downloadOpts
).then(
function(result) {
if (opts.expect) {
opts.expect(result);
} else {
throw new Error('Error expected. Got successful response.');
)
.then(
function(result) {
if (opts.expect) {
opts.expect(result);
deferred.resolve();
} else {
deferred.reject(
new Error(
'Error expected. Got successful response.'
)
);
}
},
function(error) {
if (opts.expectError) {
opts.expectError(error);
deferred.resolve();
} else {
deferred.reject(error);
}
}
},
function(error) {
if (opts.expectError) {
opts.expectError(error);
} else {
throw error;
}
}
);
)
.done();
return deferred.promise;
}
it('download file to directory', function() {
@@ -100,7 +112,8 @@ describe('download', function() {
return downloadTest({
response: function(nock) {
// First connection + 5 retries
nock.get('/package.tar.gz')
nock
.get('/package.tar.gz')
.times(6)
.delayConnection(1000)
.replyWithFile(200, source);
@@ -121,7 +134,8 @@ describe('download', function() {
return downloadTest({
response: function(nock) {
// First connection + 5 retries
nock.get('/package.tar.gz')
nock
.get('/package.tar.gz')
.times(6)
.socketDelay(1000)
.replyWithFile(200, source);
@@ -142,7 +156,8 @@ describe('download', function() {
return downloadTest({
response: function(nock) {
// First connection + 5 retries
nock.get('/package.tar.gz')
nock
.get('/package.tar.gz')
.times(5)
.delayConnection(1000)
.replyWithFile(200, source);
@@ -165,9 +180,9 @@ describe('download', function() {
return downloadTest({
response: function(nock) {
// First connection + 5 retries
nock.get('/package.tar.gz').replyWithFile(200, source, {
'Content-Length': 5000
});
nock
.get('/package.tar.gz')
.replyWithFile(200, source, { 'Content-Length': 5000 });
},
expectError: function(e) {
expect(e.code).to.be('EINCOMPLETE');
@@ -193,13 +208,11 @@ describe('download', function() {
return downloadTest({
response: function(nock) {
nock.get('/' + sourceFilename).replyWithFile(
200,
sourceFile,
{
nock
.get('/' + sourceFilename)
.replyWithFile(200, sourceFile, {
'Content-Encoding': 'gzip'
}
);
});
},
expect: function() {
expect(fs.readFileSync(destinationPath, 'ascii')).to.be(

View File

@@ -1,4 +0,0 @@
var NODE_MAJOR_VERSION = process.versions.node.split('.')[0];
module.exports =
NODE_MAJOR_VERSION >= 12 ? require('nock') : require('nock-legacy');

4027
yarn.lock

File diff suppressed because it is too large Load Diff