mirror of
https://github.com/bower/bower.git
synced 2026-04-24 03:00:19 -04:00
Compare commits
78 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f18330b248 | ||
|
|
a1b5d93f13 | ||
|
|
74baec8a60 | ||
|
|
771c7d0ac8 | ||
|
|
50e98031e5 | ||
|
|
41126ec03e | ||
|
|
bb563b01c2 | ||
|
|
c94f3f6422 | ||
|
|
ab589e46e9 | ||
|
|
341c3772f0 | ||
|
|
9734497faf | ||
|
|
87cc6a3c6c | ||
|
|
2a47ba1a1d | ||
|
|
26212e7a67 | ||
|
|
7af181f276 | ||
|
|
975f6216e5 | ||
|
|
d8747d794e | ||
|
|
8630604e82 | ||
|
|
8f604adf26 | ||
|
|
34b4644ca3 | ||
|
|
3f01228db4 | ||
|
|
f5dbab0eac | ||
|
|
26031df67c | ||
|
|
1226186126 | ||
|
|
752d6d42d7 | ||
|
|
587f08844b | ||
|
|
6afb7b19ef | ||
|
|
6798f961f7 | ||
|
|
f1685ec484 | ||
|
|
6682e312ac | ||
|
|
b123fed19b | ||
|
|
f6443b675a | ||
|
|
199e46c94a | ||
|
|
d3455643d2 | ||
|
|
95d5a35f70 | ||
|
|
7c922f577a | ||
|
|
7ae3808b44 | ||
|
|
f7b21d38a8 | ||
|
|
807eada63f | ||
|
|
c1abde9269 | ||
|
|
f82a541679 | ||
|
|
ce59f15cc9 | ||
|
|
845995fccd | ||
|
|
ebd99ad866 | ||
|
|
26a37942de | ||
|
|
390dec6d7f | ||
|
|
234ee9149d | ||
|
|
bcb1911268 | ||
|
|
c18aa260f3 | ||
|
|
9d5f7b7f61 | ||
|
|
71661c6460 | ||
|
|
67590f7728 | ||
|
|
4e68c23c87 | ||
|
|
fcc02c4200 | ||
|
|
d24e7be811 | ||
|
|
746fd3a669 | ||
|
|
031c7731a4 | ||
|
|
fa62654b9c | ||
|
|
fd2d448b7e | ||
|
|
997fb2b298 | ||
|
|
9c9f332ea0 | ||
|
|
1861fa4355 | ||
|
|
79a539ffb4 | ||
|
|
0608b26364 | ||
|
|
15e5b9709d | ||
|
|
67741b4bfe | ||
|
|
45c6bfa86f | ||
|
|
4f68fc7daa | ||
|
|
206046b271 | ||
|
|
43894f5149 | ||
|
|
6390815c5f | ||
|
|
e8b94ecbd0 | ||
|
|
51feb8f925 | ||
|
|
1c15deadc0 | ||
|
|
2aa1f27367 | ||
|
|
275601601a | ||
|
|
c22c09546e | ||
|
|
6bc778df32 |
@@ -1,46 +0,0 @@
|
||||
# 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"
|
||||
6
.eslintignore
Normal file
6
.eslintignore
Normal file
@@ -0,0 +1,6 @@
|
||||
node_modules
|
||||
test/assets
|
||||
test/reports
|
||||
test/sample
|
||||
test/tmp
|
||||
packages/bower-logger/test
|
||||
@@ -19,7 +19,6 @@
|
||||
"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
Normal file
3
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
open_collective: bower
|
||||
62
.github/workflows/nodejs.yml
vendored
Normal file
62
.github/workflows/nodejs.yml
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
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
1
.gitignore
vendored
@@ -13,3 +13,4 @@
|
||||
/test/sample
|
||||
!/test/sample/bower.json
|
||||
/npm-shrinkwrap.json
|
||||
package-lock.json
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
**/node_modules/**
|
||||
**/test/assets/**
|
||||
**/bower_components/**
|
||||
test/sample
|
||||
|
||||
43
.travis.yml
43
.travis.yml
@@ -1,43 +0,0 @@
|
||||
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
|
||||
@@ -1,5 +1,9 @@
|
||||
# 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)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Contributing to Bower
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
<a name="bugs"></a>
|
||||
## 🐛 [Bug reports](https://github.com/bower/bower/wiki/Report-a-Bug)
|
||||
@@ -16,12 +16,6 @@ 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),
|
||||
@@ -29,12 +23,9 @@ 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),
|
||||
[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.
|
||||
|
||||
[Stack Overflow](http://stackoverflow.com/questions/tagged/bower), or in serious cases
|
||||
send an e-mail to team@bower.io
|
||||
|
||||
* Please **do not** derail or troll issues. Keep the discussion on topic and
|
||||
respect the opinions of others.
|
||||
|
||||
|
||||
283
Gruntfile.js
283
Gruntfile.js
@@ -1,283 +0,0 @@
|
||||
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
127
README.md
@@ -1,14 +1,10 @@
|
||||
# Bower - A package manager for the web
|
||||
|
||||
[](https://github.com/bower/bower/actions?query=branch%3Amaster)
|
||||
[](#backers)
|
||||
[](#sponsors)
|
||||
|
||||
> ..psst! While Bower is maintained, we recommend [yarn](https://yarnpkg.com/) and [webpack](https://webpack.js.org/) for new front-end projects!
|
||||
|
||||
[](https://travis-ci.org/bower/bower)
|
||||
[](https://ci.appveyor.com/project/bower/bower)
|
||||
[](https://coveralls.io/r/bower/bower?branch=master)
|
||||
[](https://discord.gg/0fFM7QF0KpZRh2cY)
|
||||
> ..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!
|
||||
|
||||
<img align="right" height="300" src="http://bower.io/img/bower-logo.png">
|
||||
|
||||
@@ -101,9 +97,11 @@ Bower can be configured using JSON in a `.bowerrc` file. Read over available opt
|
||||
|
||||
## Support
|
||||
|
||||
* [Discord chat](https://discord.gg/0fFM7QF0KpZRh2cY)
|
||||
You can ask questions on following channels in order:
|
||||
|
||||
* [StackOverflow](http://stackoverflow.com/questions/tagged/bower)
|
||||
* [Mailinglist](http://groups.google.com/group/twitter-bower) - twitter-bower@googlegroups.com
|
||||
* [Issue Tracker](https://github.com/bower/bower/issues)
|
||||
* team@bower.io
|
||||
|
||||
## Contributing
|
||||
|
||||
@@ -155,42 +153,93 @@ 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/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>
|
||||
<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>
|
||||
|
||||
|
||||
## License
|
||||
|
||||
3
SECURITY.md
Normal file
3
SECURITY.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# Security Policy
|
||||
|
||||
For critical security issues, please send an e-mail to team@bower.io instead of filing issue here.
|
||||
@@ -17,9 +17,9 @@ function lookup(logger, name, config) {
|
||||
return !entry
|
||||
? null
|
||||
: {
|
||||
name: name,
|
||||
url: entry.url
|
||||
};
|
||||
name: name,
|
||||
url: entry.url
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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 wheter use cached version of contents new one.
|
||||
// So resolver can decide whether use cached version of contents new one.
|
||||
if (typeof resolver.fetch !== 'function') {
|
||||
throw createError(
|
||||
'Resolver does not implement the "fetch" method.'
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -130,8 +130,8 @@ function extractGz(archive, dst) {
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
function isSymlink(entry) {
|
||||
return entry.type === 'SymbolicLink';
|
||||
function isSymlink(_, entry) {
|
||||
return entry.type === 'symlink';
|
||||
}
|
||||
|
||||
function filterSymlinks(entry) {
|
||||
|
||||
@@ -24,11 +24,10 @@ You can however run a command with sudo using "--allow-root" option';
|
||||
var cli = require('./cli');
|
||||
renderer = cli.getRenderer('', false, config);
|
||||
renderer.error(
|
||||
createError('Cannot be run with sudo', 'ESUDO', {
|
||||
createError('Please do not run with sudo', 'ESUDO', {
|
||||
details: errorMsg
|
||||
})
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
56
package.json
56
package.json
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"private": true,
|
||||
"name": "bower",
|
||||
"version": "1.8.0",
|
||||
"version": "1.8.12",
|
||||
"description": "The browser package manager",
|
||||
"author": "Twitter",
|
||||
"license": "MIT",
|
||||
@@ -17,16 +18,11 @@
|
||||
"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.1",
|
||||
"decompress-zip": "^0.2.2",
|
||||
"destroy": "^1.0.3",
|
||||
"findup-sync": "^0.3.0",
|
||||
"fs-write-stream-atomic": "1.0.8",
|
||||
@@ -35,7 +31,7 @@
|
||||
"github": "^0.2.3",
|
||||
"glob": "^4.3.2",
|
||||
"graceful-fs": "^4.1.3",
|
||||
"handlebars": "^4.0.5",
|
||||
"handlebars": "^4.5.3",
|
||||
"inquirer": "0.10.0",
|
||||
"is-root": "^1.0.0",
|
||||
"junk": "^1.0.0",
|
||||
@@ -68,44 +64,46 @@
|
||||
"devDependencies": {
|
||||
"arr-diff": "^2.0.0",
|
||||
"chai": "^3.5.0",
|
||||
"coveralls": "^2.11.9",
|
||||
"eslint": "^4.18.2",
|
||||
"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",
|
||||
"istanbul": "^0.4.3",
|
||||
"lint-staged": "^7.0.0",
|
||||
"load-grunt-tasks": "^3.5.0",
|
||||
"mocha": "^2.5.3",
|
||||
"lint-staged": "^9.5.0",
|
||||
"mocha": "^3.5.3",
|
||||
"multiline": "^1.0.2",
|
||||
"nock": "^9.2.3",
|
||||
"nock": "^11.7.0",
|
||||
"nock-legacy": "npm:nock@9.2.3",
|
||||
"node-uuid": "^1.4.7",
|
||||
"prettier": "^1.11.1",
|
||||
"prettier": "^1.19.1",
|
||||
"proxyquire": "^1.7.9",
|
||||
"spawn-sync": "1.0.15",
|
||||
"wrench": "^1.5.8"
|
||||
},
|
||||
"scripts": {
|
||||
"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",
|
||||
"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",
|
||||
"format": "prettier --write --single-quote --tab-width 4 '**/*.js'",
|
||||
"precommit": "lint-staged && npm test"
|
||||
"precommit": "lint-staged"
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.js": [
|
||||
"prettier --single-quote --tab-width 4",
|
||||
"git add"
|
||||
"prettier --single-quote --tab-width 4"
|
||||
]
|
||||
},
|
||||
"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"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
{
|
||||
"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
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
sudo: false
|
||||
language: node_js
|
||||
node_js:
|
||||
- '5'
|
||||
- '4'
|
||||
- '0.12'
|
||||
- '0.10'
|
||||
script:
|
||||
- grunt travis
|
||||
@@ -1,5 +1,13 @@
|
||||
# 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://
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
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');
|
||||
};
|
||||
@@ -1,4 +1,4 @@
|
||||
# bower-config [](http://travis-ci.org/bower/config)[](https://coveralls.io/github/bower/config?branch=master)
|
||||
# bower-config
|
||||
|
||||
> The Bower config (`.bowerrc`) reader and writer.
|
||||
|
||||
|
||||
@@ -33,9 +33,7 @@ function doEnvReplaceStr(f) {
|
||||
esc = esc.length && esc.length % 2;
|
||||
if (esc) return orig;
|
||||
if (undefined === process.env[name]) {
|
||||
throw new Error(
|
||||
'Environment variable used in .bowerrc is not defined: ' + orig
|
||||
);
|
||||
return '${' + name + '}';
|
||||
}
|
||||
|
||||
return process.env[name];
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
var path = require('path');
|
||||
var fs = require('graceful-fs');
|
||||
var optimist = require('optimist');
|
||||
var optimist = require('../vendor/optimist');
|
||||
var osenv = require('osenv');
|
||||
var object = require('mout/object');
|
||||
var string = require('mout/string');
|
||||
|
||||
358
packages/bower-config/lib/vendor/optimist.js
vendored
Normal file
358
packages/bower-config/lib/vendor/optimist.js
vendored
Normal file
@@ -0,0 +1,358 @@
|
||||
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;
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "bower-config",
|
||||
"version": "1.4.0",
|
||||
"version": "1.4.3",
|
||||
"description": "The Bower config reader and writer.",
|
||||
"author": "Twitter",
|
||||
"license": "MIT",
|
||||
@@ -12,32 +12,23 @@
|
||||
},
|
||||
"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"
|
||||
"untildify": "^2.1.0",
|
||||
"wordwrap": "^0.0.3"
|
||||
},
|
||||
"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": "~1.12.0",
|
||||
"mocha": "^3.5.3",
|
||||
"node-uuid": "^1.4.3",
|
||||
"q": "^1.2.0",
|
||||
"rimraf": "^2.3.2"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "grunt test"
|
||||
"test": "mocha test"
|
||||
},
|
||||
"files": [
|
||||
"lib"
|
||||
|
||||
10
packages/bower-config/test/cli.js
Executable file
10
packages/bower-config/test/cli.js
Executable file
@@ -0,0 +1,10 @@
|
||||
#!/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);
|
||||
@@ -177,18 +177,25 @@ describe('NPM Config on package.json', function() {
|
||||
assert.equal(process.env.HTTPS_PROXY, 'http://HTTPS_PROXY');
|
||||
assert.equal(process.env.NO_PROXY, 'google.com');
|
||||
|
||||
assert.equal(process.env.http_proxy, undefined);
|
||||
assert.equal(process.env.https_proxy, undefined);
|
||||
assert.equal(process.env.no_proxy, undefined);
|
||||
// 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);
|
||||
}
|
||||
});
|
||||
|
||||
it('restores env variables', function() {
|
||||
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';
|
||||
process.env.HTTP_PROXY = 'a';
|
||||
process.env.HTTPS_PROXY = 'b';
|
||||
process.env.NO_PROXY = 'c';
|
||||
|
||||
var config = require('../lib/Config')
|
||||
.create('test/assets/env-variables')
|
||||
@@ -199,9 +206,16 @@ describe('NPM Config on package.json', function() {
|
||||
assert.equal(process.env.HTTPS_PROXY, 'b');
|
||||
assert.equal(process.env.NO_PROXY, 'c');
|
||||
|
||||
assert.equal(process.env.http_proxy, 'd');
|
||||
assert.equal(process.env.https_proxy, 'e');
|
||||
assert.equal(process.env.no_proxy, 'f');
|
||||
// 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');
|
||||
}
|
||||
});
|
||||
|
||||
it('restores env variables if they are undefined', function() {
|
||||
@@ -241,7 +255,7 @@ describe('Allow ${ENV} variables in .bowerrc', function() {
|
||||
'test/assets/env-variables-values'
|
||||
);
|
||||
assert.equal('a', config.storage.packages);
|
||||
assert.equal('/tmp/b', config.tmp);
|
||||
assert.equal(path.resolve('/tmp/b'), config.tmp);
|
||||
assert.equal('username:password', config.storage.registry.search[0]);
|
||||
assert.equal('${_myshellvar}', config.scripts.postinstall);
|
||||
});
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
{
|
||||
"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
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
language: node_js
|
||||
node_js:
|
||||
- "0.10"
|
||||
- "0.8"
|
||||
@@ -1,4 +1,4 @@
|
||||
# endpoint-parser [](http://travis-ci.org/bower/endpoint-parser)
|
||||
# bower-endpoint-parser
|
||||
|
||||
Little module that helps with endpoints parsing.
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"expect.js": "~0.2.0",
|
||||
"mocha": "~1.12.0",
|
||||
"mocha": "^3.5.3",
|
||||
"mout": "~0.9.0"
|
||||
},
|
||||
"scripts": {
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
{
|
||||
"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
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
sudo: false
|
||||
language: node_js
|
||||
node_js:
|
||||
- '5'
|
||||
- '4'
|
||||
- '0.12'
|
||||
- '0.10'
|
||||
|
||||
script:
|
||||
- grunt travis
|
||||
@@ -1,3 +1,15 @@
|
||||
# 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
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
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']);
|
||||
};
|
||||
@@ -1,4 +1,4 @@
|
||||
# bower-json [](http://travis-ci.org/bower/json) [](https://coveralls.io/github/bower/json?branch=master)
|
||||
# bower-json
|
||||
|
||||
Read `bower.json` files with semantics, normalisation, defaults and validation.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
var extName = require('ext-name');
|
||||
var extName = require('../vendor/ext-name');
|
||||
|
||||
function isAsset(filename) {
|
||||
var info = extName(filename);
|
||||
|
||||
19
packages/bower-json/lib/vendor/ext-name.js
vendored
Normal file
19
packages/bower-json/lib/vendor/ext-name.js
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
'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]]
|
||||
};
|
||||
};
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "bower-json",
|
||||
"version": "0.8.1",
|
||||
"version": "0.8.4",
|
||||
"description": "Read bower.json files with semantics, normalisation, defaults and validation",
|
||||
"author": "Twitter",
|
||||
"license": "MIT",
|
||||
@@ -10,29 +10,21 @@
|
||||
"node": ">=0.10.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"deep-extend": "^0.4.0",
|
||||
"ext-name": "^3.0.0",
|
||||
"deep-extend": "^0.5.1",
|
||||
"ends-with": "^0.2.0",
|
||||
"ext-list": "^2.0.0",
|
||||
"sort-keys-length": "^1.0.0",
|
||||
"graceful-fs": "^4.1.3",
|
||||
"intersect": "^1.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"coveralls": "^2.11.2",
|
||||
"expect.js": "^0.3.1",
|
||||
"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": "*",
|
||||
"mocha": "^3.5.3",
|
||||
"request": "^2.64.0",
|
||||
"underscore.string": "^3.0.3"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "grunt test"
|
||||
"test": "mocha"
|
||||
},
|
||||
"files": [
|
||||
"lib"
|
||||
|
||||
@@ -162,7 +162,9 @@ describe('.read', function() {
|
||||
return done(err);
|
||||
}
|
||||
|
||||
expect(file).to.equal(__dirname + '/pkg-bower-json/bower.json');
|
||||
expect(file).to.equal(
|
||||
path.resolve(__dirname + '/pkg-bower-json/bower.json')
|
||||
);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
{
|
||||
"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
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
sudo: false
|
||||
language: node_js
|
||||
node_js:
|
||||
- 'iojs'
|
||||
- '0.12'
|
||||
- '0.10'
|
||||
@@ -1,4 +1,4 @@
|
||||
# bower-logger [](http://travis-ci.org/bower/logger)
|
||||
# bower-logger
|
||||
|
||||
The logger used in the various architecture components of Bower.
|
||||
|
||||
|
||||
@@ -16,12 +16,12 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"expect.js": "~0.2.0",
|
||||
"mocha": "~1.12.0"
|
||||
"mocha": "^3.5.3"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "mocha -R spec"
|
||||
},
|
||||
"files": [
|
||||
"lib"
|
||||
"lib"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
{
|
||||
"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
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
sudo: false
|
||||
language: node_js
|
||||
node_js:
|
||||
- 'iojs'
|
||||
- '0.12'
|
||||
- '0.10'
|
||||
@@ -1,42 +0,0 @@
|
||||
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']);
|
||||
};
|
||||
@@ -1,4 +1,4 @@
|
||||
# bower-registry-client [](https://travis-ci.org/bower/registry-client)
|
||||
# bower-registry-client
|
||||
|
||||
> Provides easy interaction with the Bower registry
|
||||
|
||||
|
||||
@@ -21,16 +21,11 @@
|
||||
"devDependencies": {
|
||||
"bower-config": "^1.1.2",
|
||||
"expect.js": "~0.2.0",
|
||||
"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"
|
||||
"mocha": "^3.5.3",
|
||||
"nock": "9.2.3"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "grunt test"
|
||||
"test": "mocha"
|
||||
},
|
||||
"files": [
|
||||
"lib",
|
||||
|
||||
@@ -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('calling the lookup instance method without argument', function() {
|
||||
describe.skip('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:443')
|
||||
nock('https://registry.bower.io')
|
||||
.get('/packages')
|
||||
.reply(200, []);
|
||||
|
||||
@@ -660,6 +660,9 @@ describe('RegistryClient', function() {
|
||||
}
|
||||
]);
|
||||
|
||||
this.pkg = 'jquery';
|
||||
this.pkgUrl = 'git://github.com/bar/foo.git';
|
||||
|
||||
this.registry = new RegistryClient(
|
||||
Config.read(process.cwd(), {
|
||||
strictSsl: false,
|
||||
|
||||
@@ -3,7 +3,7 @@ var expect = require('expect.js');
|
||||
|
||||
describe('Cache', function() {
|
||||
beforeEach(function() {
|
||||
this.cache = new Cache();
|
||||
this.cache = new Cache(__dirname);
|
||||
});
|
||||
|
||||
describe('Constructor', function() {
|
||||
|
||||
129
publish.js
Normal file
129
publish.js
Normal file
@@ -0,0 +1,129 @@
|
||||
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')
|
||||
@@ -1,7 +1,7 @@
|
||||
var expect = require('expect.js');
|
||||
var path = require('path');
|
||||
var helpers = require('../helpers');
|
||||
var nock = require('nock');
|
||||
var nock = require('../util/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(done) {
|
||||
it('recognizes proxy option in config', function() {
|
||||
this.timeout(10000);
|
||||
|
||||
tempDir.prepare({
|
||||
@@ -708,8 +708,10 @@ describe('bower install', function() {
|
||||
cwd: tempDir.path
|
||||
});
|
||||
|
||||
nock('http://dummy.local')
|
||||
.get('http://github.com/yahoo/pure/archive/v0.6.0.tar.gz')
|
||||
nock('http://dummy.local/')
|
||||
.get(function(uri) {
|
||||
return true;
|
||||
})
|
||||
.reply(500);
|
||||
|
||||
return helpers
|
||||
@@ -720,7 +722,6 @@ describe('bower install', function() {
|
||||
])
|
||||
.fail(function(error) {
|
||||
expect(error.message).to.equal('Status code of 500');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -268,8 +268,7 @@ 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'),
|
||||
@@ -316,8 +315,7 @@ 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'),
|
||||
@@ -364,8 +362,7 @@ 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'),
|
||||
@@ -410,8 +407,7 @@ 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'),
|
||||
|
||||
@@ -88,9 +88,10 @@ 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) {
|
||||
@@ -158,8 +159,7 @@ 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
|
||||
|
||||
@@ -179,11 +179,10 @@ 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);
|
||||
@@ -202,11 +201,10 @@ 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(
|
||||
@@ -244,8 +242,7 @@ 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);
|
||||
@@ -269,8 +266,7 @@ 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);
|
||||
|
||||
@@ -146,7 +146,7 @@ describe('GitFsResolver', function() {
|
||||
var dir = path.join(testPackage, 'new-dir');
|
||||
|
||||
fs.writeFileSync(file, 'foo');
|
||||
fs.mkdir(dir);
|
||||
fs.mkdirSync(dir);
|
||||
|
||||
function cleanup(err) {
|
||||
fs.unlinkSync(file);
|
||||
@@ -213,8 +213,7 @@ 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);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
var path = require('path');
|
||||
var nock = require('nock');
|
||||
var nock = require('../../util/nock');
|
||||
var fs = require('../../../lib/util/fs');
|
||||
var expect = require('expect.js');
|
||||
var Logger = require('bower-logger');
|
||||
|
||||
@@ -975,14 +975,13 @@ 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;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
var expect = require('expect.js');
|
||||
var path = require('path');
|
||||
var fs = require('../../../lib/util/fs');
|
||||
var nock = require('nock');
|
||||
var nock = require('../../util/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');
|
||||
|
||||
@@ -15,13 +15,13 @@ var proxyquire = require('proxyquire')
|
||||
.noPreserveCache();
|
||||
var spawnSync = require('spawn-sync');
|
||||
var config = require('../lib/config');
|
||||
var nock = require('nock');
|
||||
var nock = require('./util/nock');
|
||||
var semver = require('semver');
|
||||
|
||||
// For better promise errors
|
||||
Q.longStackSupport = true;
|
||||
|
||||
// Those are needed for Travis or not configured git environment
|
||||
// Those are needed for testing or not configured git environment
|
||||
var env = {
|
||||
GIT_AUTHOR_DATE: 'Sun Apr 7 22:13:13 2013 +0000',
|
||||
GIT_AUTHOR_NAME: 'André Cruz',
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
var expect = require('expect.js');
|
||||
var helpers = require('../helpers');
|
||||
var nock = require('nock');
|
||||
var nock = require('../util/nock');
|
||||
var path = require('path');
|
||||
var Q = require('q');
|
||||
|
||||
@@ -13,42 +13,30 @@ 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));
|
||||
|
||||
download(
|
||||
return download(
|
||||
opts.sourceUrl || 'http://bower.io/package.tar.gz',
|
||||
opts.destinationPath || destination,
|
||||
opts.downloadOpts
|
||||
)
|
||||
.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);
|
||||
}
|
||||
).then(
|
||||
function(result) {
|
||||
if (opts.expect) {
|
||||
opts.expect(result);
|
||||
} else {
|
||||
throw new Error('Error expected. Got successful response.');
|
||||
}
|
||||
)
|
||||
.done();
|
||||
|
||||
return deferred.promise;
|
||||
},
|
||||
function(error) {
|
||||
if (opts.expectError) {
|
||||
opts.expectError(error);
|
||||
} else {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
it('download file to directory', function() {
|
||||
@@ -112,8 +100,7 @@ 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);
|
||||
@@ -134,8 +121,7 @@ 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);
|
||||
@@ -156,8 +142,7 @@ 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);
|
||||
@@ -180,9 +165,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');
|
||||
@@ -208,11 +193,13 @@ 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(
|
||||
|
||||
4
test/util/nock.js
Normal file
4
test/util/nock.js
Normal file
@@ -0,0 +1,4 @@
|
||||
var NODE_MAJOR_VERSION = process.versions.node.split('.')[0];
|
||||
|
||||
module.exports =
|
||||
NODE_MAJOR_VERSION >= 12 ? require('nock') : require('nock-legacy');
|
||||
Reference in New Issue
Block a user