mirror of
https://github.com/bower/bower.git
synced 2026-04-24 03:00:19 -04:00
Compare commits
66 Commits
travis-mod
...
1.8.14
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d765b2bb88 | ||
|
|
ca23b460b3 | ||
|
|
7f26c5b856 | ||
|
|
4b5722f2bd | ||
|
|
557c1cd7f1 | ||
|
|
74560b7308 | ||
|
|
2905791817 | ||
|
|
dfdda3fda3 | ||
|
|
fa36814f64 | ||
|
|
f19bc34f84 | ||
|
|
eb8659ea32 | ||
|
|
537b9b4558 | ||
|
|
372fefbf1c | ||
|
|
f6ced09f76 | ||
|
|
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 |
8
.github/workflows/nodejs.yml
vendored
8
.github/workflows/nodejs.yml
vendored
@@ -15,7 +15,7 @@ jobs:
|
||||
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]
|
||||
node-version: [6.x, 8.x, 10.x, 12.x, 14.x]
|
||||
os: [ubuntu-latest, macOS-latest, windows-latest]
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
@@ -29,13 +29,13 @@ jobs:
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
- name: install
|
||||
run: yarn
|
||||
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: lint
|
||||
run: npm run lint
|
||||
- name: bower tests
|
||||
run: npm test
|
||||
env:
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -13,3 +13,4 @@
|
||||
/test/sample
|
||||
!/test/sample/bower.json
|
||||
/npm-shrinkwrap.json
|
||||
package-lock.json
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
237
README.md
237
README.md
@@ -97,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
|
||||
|
||||
@@ -121,108 +123,137 @@ git config --global core.autocrlf input
|
||||
|
||||
Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/bower#backer)]
|
||||
|
||||
<a href="https://opencollective.com/bower/backer/0/website" target="_blank"><img src="https://opencollective.com/bower/backer/0/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/1/website" target="_blank"><img src="https://opencollective.com/bower/backer/1/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/2/website" target="_blank"><img src="https://opencollective.com/bower/backer/2/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/3/website" target="_blank"><img src="https://opencollective.com/bower/backer/3/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/4/website" target="_blank"><img src="https://opencollective.com/bower/backer/4/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/5/website" target="_blank"><img src="https://opencollective.com/bower/backer/5/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/6/website" target="_blank"><img src="https://opencollective.com/bower/backer/6/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/7/website" target="_blank"><img src="https://opencollective.com/bower/backer/7/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/8/website" target="_blank"><img src="https://opencollective.com/bower/backer/8/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/9/website" target="_blank"><img src="https://opencollective.com/bower/backer/9/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/10/website" target="_blank"><img src="https://opencollective.com/bower/backer/10/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/11/website" target="_blank"><img src="https://opencollective.com/bower/backer/11/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/12/website" target="_blank"><img src="https://opencollective.com/bower/backer/12/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/13/website" target="_blank"><img src="https://opencollective.com/bower/backer/13/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/14/website" target="_blank"><img src="https://opencollective.com/bower/backer/14/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/15/website" target="_blank"><img src="https://opencollective.com/bower/backer/15/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/16/website" target="_blank"><img src="https://opencollective.com/bower/backer/16/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/17/website" target="_blank"><img src="https://opencollective.com/bower/backer/17/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/18/website" target="_blank"><img src="https://opencollective.com/bower/backer/18/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/19/website" target="_blank"><img src="https://opencollective.com/bower/backer/19/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/20/website" target="_blank"><img src="https://opencollective.com/bower/backer/20/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/21/website" target="_blank"><img src="https://opencollective.com/bower/backer/21/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/22/website" target="_blank"><img src="https://opencollective.com/bower/backer/22/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/23/website" target="_blank"><img src="https://opencollective.com/bower/backer/23/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/24/website" target="_blank"><img src="https://opencollective.com/bower/backer/24/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/25/website" target="_blank"><img src="https://opencollective.com/bower/backer/25/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/backer/26/website" target="_blank"><img src="https://opencollective.com/bower/backer/26/avatar.svg"></a>
|
||||
<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/tiers/sponsors/1/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/1/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/2/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/2/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/3/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/3/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/4/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/4/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/5/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/5/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/6/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/6/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/7/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/7/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/8/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/8/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/9/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/9/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/10/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/10/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/11/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/11/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/12/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/12/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/13/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/13/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/14/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/14/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/15/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/15/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/16/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/16/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/17/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/17/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/18/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/18/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/19/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/19/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/20/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/20/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/21/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/21/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/22/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/22/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/23/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/23/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/24/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/24/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/25/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/25/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/26/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/26/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/27/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/27/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/28/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/28/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/29/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/29/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/30/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/30/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/31/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/31/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/32/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/32/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/33/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/33/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/34/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/34/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/35/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/35/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/36/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/36/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/37/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/37/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/38/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/38/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/39/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/39/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/40/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/40/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/41/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/41/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/42/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/42/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/43/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/43/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/44/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/44/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/45/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/45/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/46/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/46/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/47/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/47/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/48/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/48/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/49/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/49/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/50/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/50/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/51/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/51/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/52/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/52/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/53/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/53/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/54/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/54/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/55/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/55/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/56/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/56/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/57/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/57/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/58/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/58/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/59/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/59/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/60/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/60/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/61/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/61/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/62/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/62/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/63/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/63/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/64/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/64/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/65/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/65/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/66/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/66/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/67/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/67/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/68/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/68/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/69/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/69/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/70/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/70/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/71/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/71/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/72/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/72/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/73/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/73/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/74/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/74/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/75/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/75/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/76/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/76/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/77/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/77/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/78/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/78/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/79/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/79/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/80/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/80/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/81/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/81/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/82/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/82/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/83/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/83/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/84/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/84/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/85/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/85/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/86/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/86/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/87/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/87/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/88/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/88/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/89/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/89/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/90/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/90/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/91/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/91/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/92/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/92/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/93/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/93/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/94/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/94/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/95/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/95/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/96/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/96/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/97/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/97/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/98/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/98/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/99/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/99/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/100/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/100/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/101/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/101/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/102/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/102/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/103/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/103/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/104/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/104/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/105/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/105/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/106/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/106/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/107/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/107/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/108/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/108/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/109/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/109/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/110/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/110/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/111/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/111/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/112/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/112/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/113/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/113/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/114/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/114/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/115/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/115/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/116/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/116/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/117/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/117/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/118/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/118/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/119/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/119/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/120/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/120/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/121/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/121/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/122/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/122/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/123/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/123/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/124/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/124/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/125/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/125/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/126/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/126/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/127/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/127/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/128/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/128/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/129/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/129/avatar.svg'></a>
|
||||
<a href='https://opencollective.com/bower/tiers/sponsors/130/website' target='_blank'><img src='https://opencollective.com/bower/tiers/sponsors/130/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/sponsor/30/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/30/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/31/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/31/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/32/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/32/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/33/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/33/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/34/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/34/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/35/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/35/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/36/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/36/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/37/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/37/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/38/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/38/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/39/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/39/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/40/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/40/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/41/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/41/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/42/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/42/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/43/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/43/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/44/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/44/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/45/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/45/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/46/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/46/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/47/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/47/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/48/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/48/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/49/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/49/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/50/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/50/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/51/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/51/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/52/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/52/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/53/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/53/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/54/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/54/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/55/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/55/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/56/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/56/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/57/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/57/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/58/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/58/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/59/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/59/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/bower/sponsor/60/website" target="_blank"><img src="https://opencollective.com/bower/sponsor/60/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.
|
||||
@@ -1,9 +1,9 @@
|
||||
var semver = require('semver');
|
||||
var which = require('which');
|
||||
var which = require('../util/which');
|
||||
var fs = require('../util/fs');
|
||||
var path = require('path');
|
||||
var Q = require('q');
|
||||
var execFile = require('child_process').execFile;
|
||||
var execFile = require('../util/childProcess').execFile;
|
||||
var defaultConfig = require('../config');
|
||||
var createError = require('../util/createError');
|
||||
|
||||
@@ -105,10 +105,10 @@ var driver = {
|
||||
err.code = 'ENOGIT';
|
||||
throw err;
|
||||
})
|
||||
.then(function() {
|
||||
.then(function(gitPath) {
|
||||
return Q.nfcall(
|
||||
execFile,
|
||||
'git',
|
||||
gitPath,
|
||||
['status', '--porcelain'],
|
||||
{ env: process.env, cwd: cwd }
|
||||
);
|
||||
|
||||
@@ -537,7 +537,7 @@ Manager.prototype._parseDependencies = function(decEndpoint, pkgMeta) {
|
||||
var compatible;
|
||||
var childDecEndpoint = endpointParser.json2decomposed(key, value);
|
||||
|
||||
// Check if this depdendency should be skipped.
|
||||
// Check if this dependency should be skipped.
|
||||
if (
|
||||
mout.array.contains(
|
||||
this._config.ignoredDependencies,
|
||||
|
||||
@@ -602,7 +602,7 @@ Project.prototype._analyse = function() {
|
||||
var isSaved =
|
||||
jsonCopy.dependencies[key] || jsonCopy.devDependencies[key];
|
||||
|
||||
// The _direct propery is saved by the manager when .newly is specified
|
||||
// The _direct property is saved by the manager when .newly is specified
|
||||
// It may happen pkgMeta is undefined if package is uninstalled
|
||||
if (!isSaved && pkgMeta && pkgMeta._direct) {
|
||||
decEndpoint.extraneous = true;
|
||||
|
||||
@@ -29,10 +29,8 @@ function GitHubResolver(decEndpoint, config, logger) {
|
||||
this._source += '.git';
|
||||
}
|
||||
|
||||
// Use https:// rather than git:// if on a proxy
|
||||
if (this._config.proxy || this._config.httpsProxy) {
|
||||
this._source = this._source.replace('git://', 'https://');
|
||||
}
|
||||
// Use https:// rather than git:// (PR #2611)
|
||||
this._source = this._source.replace('git://', 'https://');
|
||||
|
||||
// Enable shallow clones for GitHub repos
|
||||
this._shallowClone = function() {
|
||||
|
||||
@@ -3,7 +3,7 @@ var path = require('path');
|
||||
var Q = require('q');
|
||||
var rimraf = require('../../util/rimraf');
|
||||
var mkdirp = require('mkdirp');
|
||||
var which = require('which');
|
||||
var which = require('../../util/which');
|
||||
var LRU = require('lru-cache');
|
||||
var mout = require('mout');
|
||||
var Resolver = require('./Resolver');
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
var util = require('util');
|
||||
var Q = require('q');
|
||||
var which = require('which');
|
||||
var which = require('../../util/which');
|
||||
var LRU = require('lru-cache');
|
||||
var mout = require('mout');
|
||||
var Resolver = require('./Resolver');
|
||||
|
||||
@@ -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.'
|
||||
|
||||
21
lib/util/childProcess.js
Normal file
21
lib/util/childProcess.js
Normal file
@@ -0,0 +1,21 @@
|
||||
var childProcess = require('child_process');
|
||||
var which = require('./which');
|
||||
|
||||
function execFile(cmd, args, opt, cb) {
|
||||
try {
|
||||
cmd = which.sync(cmd);
|
||||
} catch (e) {
|
||||
cb(e);
|
||||
}
|
||||
return childProcess.execFile(cmd, args, opt, cb);
|
||||
}
|
||||
|
||||
function spawn(cmd, args, opt) {
|
||||
cmd = which.sync(cmd);
|
||||
return childProcess.spawn(cmd, args, opt);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
execFile: execFile,
|
||||
spawn: spawn
|
||||
};
|
||||
@@ -1,8 +1,8 @@
|
||||
var cp = require('child_process');
|
||||
var cp = require('./childProcess');
|
||||
var path = require('path');
|
||||
var Q = require('q');
|
||||
var mout = require('mout');
|
||||
var which = require('which');
|
||||
var which = require('./which');
|
||||
var PThrottler = require('p-throttler');
|
||||
var createError = require('./createError');
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
51
lib/util/which.js
Normal file
51
lib/util/which.js
Normal file
@@ -0,0 +1,51 @@
|
||||
var join = require('path').join;
|
||||
var execFileSync = require('child_process').execFileSync;
|
||||
var cache = {};
|
||||
var originalWhich = require('which');
|
||||
|
||||
var isWin = process.platform === 'win32';
|
||||
|
||||
function which(name, opt, cb) {
|
||||
if (typeof opt === 'function') {
|
||||
cb = opt;
|
||||
opt = {};
|
||||
}
|
||||
|
||||
if (isWin) {
|
||||
var result = whichSync(name);
|
||||
if (result) {
|
||||
cb(null, result);
|
||||
} else {
|
||||
cb(new Error('Could not find ' + name + ' in PATH'));
|
||||
}
|
||||
} else {
|
||||
originalWhich(name, opt, cb);
|
||||
}
|
||||
}
|
||||
|
||||
function whichSync(name, opt) {
|
||||
if (name in cache) {
|
||||
return cache[name];
|
||||
}
|
||||
if (isWin) {
|
||||
var WHERE_PATH = join(process.env.WINDIR, 'System32', 'where.exe');
|
||||
var stdout = execFileSync(WHERE_PATH, ['$PATH:' + name], {
|
||||
stdio: ['pipe', 'pipe', 'ignore']
|
||||
}).toString();
|
||||
var matches = stdout.split('\r\n');
|
||||
if (matches.length === 0) {
|
||||
throw new Error('Could not find ' + name + ' in PATH');
|
||||
}
|
||||
var result = matches[0].trim();
|
||||
cache[name] = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
var result = originalWhich.sync(name, opt);
|
||||
cache[name] = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
which.sync = whichSync;
|
||||
|
||||
module.exports = which;
|
||||
29
package.json
29
package.json
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"private": true,
|
||||
"name": "bower",
|
||||
"version": "1.8.8",
|
||||
"version": "1.8.14",
|
||||
"description": "The browser package manager",
|
||||
"author": "Twitter",
|
||||
"license": "MIT",
|
||||
@@ -17,14 +18,9 @@
|
||||
"dependencies": {
|
||||
"abbrev": "^1.0.5",
|
||||
"archy": "1.0.0",
|
||||
"bower-config": "^1.4.1",
|
||||
"bower-endpoint-parser": "^0.2.2",
|
||||
"bower-json": "^0.8.1",
|
||||
"bower-logger": "^0.2.2",
|
||||
"bower-registry-client": "^1.0.0",
|
||||
"cardinal": "0.4.4",
|
||||
"chalk": "^1.0.0",
|
||||
"chmodr": "^1.0.2",
|
||||
"chmodr": "1.0.2",
|
||||
"configstore": "^2.0.0",
|
||||
"decompress-zip": "^0.2.2",
|
||||
"destroy": "^1.0.3",
|
||||
@@ -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,14 +64,12 @@
|
||||
"devDependencies": {
|
||||
"arr-diff": "^2.0.0",
|
||||
"chai": "^3.5.0",
|
||||
"coveralls": "^2.11.9",
|
||||
"eslint": "^2.0.0",
|
||||
"eslint": "^4.18.2",
|
||||
"expect.js": "^0.3.1",
|
||||
"husky": "^0.14.3",
|
||||
"in-publish": "^2.0.0",
|
||||
"istanbul": "^0.4.3",
|
||||
"lint-staged": "^9.5.0",
|
||||
"mocha": "^2.5.3",
|
||||
"mocha": "^3.5.3",
|
||||
"multiline": "^1.0.2",
|
||||
"nock": "^11.7.0",
|
||||
"nock-legacy": "npm:nock@9.2.3",
|
||||
@@ -100,5 +94,16 @@
|
||||
"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,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://
|
||||
|
||||
@@ -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,16 +12,17 @@
|
||||
},
|
||||
"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": {
|
||||
"expect.js": "^0.3.1",
|
||||
"glob": "^4.5.3",
|
||||
"mkdirp": "^0.5.0",
|
||||
"mocha": "^2.5.3",
|
||||
"mocha": "^3.5.3",
|
||||
"node-uuid": "^1.4.3",
|
||||
"q": "^1.2.0",
|
||||
"rimraf": "^2.3.2"
|
||||
|
||||
10
packages/bower-config/test/cli.js
Normal file
10
packages/bower-config/test/cli.js
Normal 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);
|
||||
@@ -16,7 +16,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"expect.js": "~0.2.0",
|
||||
"mocha": "^2.5.3",
|
||||
"mocha": "^3.5.3",
|
||||
"mout": "~0.9.0"
|
||||
},
|
||||
"scripts": {
|
||||
|
||||
@@ -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,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,14 +10,16 @@
|
||||
"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": {
|
||||
"expect.js": "^0.3.1",
|
||||
"mocha": "^2.5.3",
|
||||
"mocha": "^3.5.3",
|
||||
"request": "^2.64.0",
|
||||
"underscore.string": "^3.0.3"
|
||||
},
|
||||
|
||||
@@ -162,7 +162,9 @@ describe('.read', function() {
|
||||
return done(err);
|
||||
}
|
||||
|
||||
expect(file).to.equal(path.resolve(__dirname + '/pkg-bower-json/bower.json'));
|
||||
expect(file).to.equal(
|
||||
path.resolve(__dirname + '/pkg-bower-json/bower.json')
|
||||
);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"expect.js": "~0.2.0",
|
||||
"mocha": "^2.5.3"
|
||||
"mocha": "^3.5.3"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "mocha -R spec"
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"devDependencies": {
|
||||
"bower-config": "^1.1.2",
|
||||
"expect.js": "~0.2.0",
|
||||
"mocha": "^2.5.3",
|
||||
"mocha": "^3.5.3",
|
||||
"nock": "9.2.3"
|
||||
},
|
||||
"scripts": {
|
||||
|
||||
128
publish.js
128
publish.js
@@ -1,29 +1,14 @@
|
||||
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 inquirer = require('inquirer');
|
||||
|
||||
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) {
|
||||
console.log('You need to use at npm@3.5 to publish bower.');
|
||||
console.log(
|
||||
'It is because npm 2.x produces too long paths that Windows does not handle and newer npm drops lib/node_modules'
|
||||
);
|
||||
console.log('Please upgrade it: npm install -g npm@3');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (
|
||||
childProcess
|
||||
.execSync('git rev-parse --abbrev-ref HEAD')
|
||||
@@ -35,17 +20,10 @@ if (
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (process.env.SKIP_TESTS !== '1') {
|
||||
console.log('Reinstalling dependencies...');
|
||||
childProcess.execSync('rm -rf node_modules && yarn', {
|
||||
stdio: [0, 1, 2]
|
||||
});
|
||||
var dir = path.join(tmp.dirSync().name, 'package');
|
||||
|
||||
console.log('Running test suite...');
|
||||
childProcess.execSync('yarn test', { stdio: [0, 1, 2] });
|
||||
}
|
||||
|
||||
var dir = tmp.dirSync().name;
|
||||
console.log('\nInstalling production bundle in:');
|
||||
console.log(dir + '\n');
|
||||
|
||||
wrench.copyDirSyncRecursive(__dirname, dir, {
|
||||
forceDelete: true,
|
||||
@@ -54,6 +32,18 @@ wrench.copyDirSyncRecursive(__dirname, dir, {
|
||||
}
|
||||
});
|
||||
|
||||
delete jsonPackage.scripts;
|
||||
delete jsonPackage.private;
|
||||
jsonPackage.workspaces.forEach(function(name) {
|
||||
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,
|
||||
@@ -61,14 +51,22 @@ childProcess.execSync('yarn --production', {
|
||||
});
|
||||
|
||||
delete jsonPackage.dependencies;
|
||||
delete jsonPackage.resolutions;
|
||||
delete jsonPackage['lint-staged'];
|
||||
delete jsonPackage.devDependencies;
|
||||
delete jsonPackage.scripts;
|
||||
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(
|
||||
@@ -77,6 +75,13 @@ wrench.copyDirSyncRecursive(
|
||||
);
|
||||
wrench.rmdirSyncRecursive(path.resolve(dir, 'node_modules'));
|
||||
|
||||
glob.sync(path.join(dir, '**', 'package.json')).forEach(function(file) {
|
||||
console.log(file);
|
||||
var 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(
|
||||
@@ -106,61 +111,18 @@ if (installedDiff.length > 0) {
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log('\nBower production bundle installed in:');
|
||||
console.log(dir + '\n');
|
||||
var tgzName = 'bower-' + jsonPackage.version + '.tgz';
|
||||
|
||||
var questions = [
|
||||
{
|
||||
type: 'confirm',
|
||||
name: 'review',
|
||||
message: 'Did you review all the changes with "git diff"?',
|
||||
default: false
|
||||
},
|
||||
{
|
||||
type: 'confirm',
|
||||
name: 'tests',
|
||||
message: 'Are you sure all tests are passing on CI?',
|
||||
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.tests || !answers.publish) {
|
||||
console.log('Please publish bower after you fix this issue');
|
||||
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log(
|
||||
'\nPlease remember to tag this release, and add a release with changelog on Github!'
|
||||
);
|
||||
console.log(
|
||||
'\nAlso, please remember to test published Bower one more time!'
|
||||
);
|
||||
console.log(
|
||||
'\nYou can promote this bower release with "npm dist-tag add bower@' +
|
||||
jsonPackage.version +
|
||||
' latest'
|
||||
);
|
||||
console.log('\nPublishing Bower...');
|
||||
|
||||
childProcess.execSync('npm publish --tag beta', {
|
||||
cwd: dir,
|
||||
stdio: [0, 1, 2]
|
||||
});
|
||||
|
||||
done();
|
||||
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');
|
||||
|
||||
@@ -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({
|
||||
@@ -722,7 +722,6 @@ describe('bower install', function() {
|
||||
])
|
||||
.fail(function(error) {
|
||||
expect(error.message).to.equal('Status code of 500');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -205,13 +205,13 @@ describe('resolverFactory', function() {
|
||||
gitHub = {
|
||||
// git:
|
||||
'git://github.com/user/project':
|
||||
'git://github.com/user/project.git',
|
||||
'https://github.com/user/project.git',
|
||||
'git://github.com/user/project/':
|
||||
'git://github.com/user/project.git',
|
||||
'https://github.com/user/project.git',
|
||||
'git://github.com/user/project.git':
|
||||
'git://github.com/user/project.git',
|
||||
'https://github.com/user/project.git',
|
||||
'git://github.com/user/project.git/':
|
||||
'git://github.com/user/project.git',
|
||||
'https://github.com/user/project.git',
|
||||
|
||||
// git@:
|
||||
'git@github.com:user/project': 'git@github.com:user/project.git',
|
||||
|
||||
@@ -37,19 +37,19 @@ describe('GitHub', function() {
|
||||
it('should ensure .git in the source', function() {
|
||||
var resolver;
|
||||
|
||||
resolver = create('git://github.com/twitter/bower');
|
||||
resolver = create('https://github.com/twitter/bower');
|
||||
expect(resolver.getSource()).to.equal(
|
||||
'git://github.com/twitter/bower.git'
|
||||
'https://github.com/twitter/bower.git'
|
||||
);
|
||||
|
||||
resolver = create('git://github.com/twitter/bower.git');
|
||||
resolver = create('https://github.com/twitter/bower.git');
|
||||
expect(resolver.getSource()).to.equal(
|
||||
'git://github.com/twitter/bower.git'
|
||||
'https://github.com/twitter/bower.git'
|
||||
);
|
||||
|
||||
resolver = create('git://github.com/twitter/bower.git/');
|
||||
resolver = create('https://github.com/twitter/bower.git/');
|
||||
expect(resolver.getSource()).to.equal(
|
||||
'git://github.com/twitter/bower.git'
|
||||
'https://github.com/twitter/bower.git'
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -66,7 +66,7 @@ describe('GitHub', function() {
|
||||
);
|
||||
|
||||
resolver = create({
|
||||
source: 'git://github.com/IndigoUnited/js-events-emitter.git',
|
||||
source: 'https://github.com/IndigoUnited/js-events-emitter.git',
|
||||
target: '0.1.0'
|
||||
});
|
||||
|
||||
@@ -106,7 +106,7 @@ describe('GitHub', function() {
|
||||
});
|
||||
|
||||
resolver = create({
|
||||
source: 'git://github.com/IndigoUnited/js-events-emitter.git',
|
||||
source: 'https://github.com/IndigoUnited/js-events-emitter.git',
|
||||
target: '0.1.0'
|
||||
});
|
||||
|
||||
@@ -142,7 +142,7 @@ describe('GitHub', function() {
|
||||
});
|
||||
|
||||
resolver = create({
|
||||
source: 'git://github.com/IndigoUnited/js-events-emitter.git',
|
||||
source: 'https://github.com/IndigoUnited/js-events-emitter.git',
|
||||
target: '0.1.0'
|
||||
});
|
||||
|
||||
@@ -163,7 +163,7 @@ describe('GitHub', function() {
|
||||
|
||||
it('should fallback to the GitRemoteResolver mechanism if resolution is not a tag', function(next) {
|
||||
var resolver = create({
|
||||
source: 'git://github.com/foo/bar.git',
|
||||
source: 'https://github.com/foo/bar.git',
|
||||
target: '2af02ac6ddeaac1c2f4bead8d6287ce54269c039'
|
||||
});
|
||||
var originalCheckout = GitRemoteResolver.prototype._checkout;
|
||||
|
||||
Reference in New Issue
Block a user