Compare commits
135 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
55e3676294 | ||
|
|
cbeb36fdb1 | ||
|
|
15954de18f | ||
|
|
1d34a38003 | ||
|
|
8693022acf | ||
|
|
c7b685622a | ||
|
|
56800c1fe2 | ||
|
|
d7ef3f3a99 | ||
|
|
e9dd7a4420 | ||
|
|
f5a3783aa2 | ||
|
|
208182ae37 | ||
|
|
f7d13fceb9 | ||
|
|
360b5ee4b9 | ||
|
|
6f5455c37d | ||
|
|
4e2f1656df | ||
|
|
5348e90423 | ||
|
|
a740f7e935 | ||
|
|
590bebf249 | ||
|
|
9650af1f95 | ||
|
|
ced56a7226 | ||
|
|
a988073222 | ||
|
|
88408e5833 | ||
|
|
27a89ad786 | ||
|
|
d5f44e7aeb | ||
|
|
52f10712cb | ||
|
|
51fc21c221 | ||
|
|
46b61e173e | ||
|
|
06d54462fa | ||
|
|
21a36873cf | ||
|
|
4d2a782ca7 | ||
|
|
feb7bba5df | ||
|
|
30fd5a24e7 | ||
|
|
4f4dea335c | ||
|
|
caecee358e | ||
|
|
79fc4adbf9 | ||
|
|
4fe29d7392 | ||
|
|
2b94f96e3e | ||
|
|
ab8370c244 | ||
|
|
61eda586c3 | ||
|
|
b34850c645 | ||
|
|
f0718670ec | ||
|
|
ce9997b52f | ||
|
|
8cb387e3de | ||
|
|
4d0876f6b0 | ||
|
|
34cf82b848 | ||
|
|
8cc88cd3ac | ||
|
|
c94b5af098 | ||
|
|
d992c49843 | ||
|
|
8a80768baa | ||
|
|
8b941d4dfd | ||
|
|
d5de9f3f0d | ||
|
|
2d9c41ae6b | ||
|
|
5560eecdc1 | ||
|
|
58530b3799 | ||
|
|
026e98aa42 | ||
|
|
c2e2293f44 | ||
|
|
08fe1b6e43 | ||
|
|
46d77cfa2d | ||
|
|
8feda109a1 | ||
|
|
7e9ca065e6 | ||
|
|
7acf8aea7c | ||
|
|
30fab2fa31 | ||
|
|
cbdf3e43f1 | ||
|
|
507713a63b | ||
|
|
c512c446c5 | ||
|
|
3067c9e15c | ||
|
|
85ed07244a | ||
|
|
13550b50b0 | ||
|
|
bf3210f533 | ||
|
|
6411f389b7 | ||
|
|
dec54c038c | ||
|
|
e109cd1639 | ||
|
|
ac2b74d9d0 | ||
|
|
d82f4d33b7 | ||
|
|
d926d1c554 | ||
|
|
8b797ba126 | ||
|
|
1b11953688 | ||
|
|
36bc3f778b | ||
|
|
c61b317dea | ||
|
|
22cdfa345a | ||
|
|
d4aeb9335d | ||
|
|
46569f991f | ||
|
|
83761c7e8e | ||
|
|
f0a1d2598a | ||
|
|
c902408157 | ||
|
|
6b705fa3a4 | ||
|
|
0e98be578d | ||
|
|
c07603c1c4 | ||
|
|
9cd6e9c0ea | ||
|
|
5bf921b386 | ||
|
|
beedcea439 | ||
|
|
6cb111a771 | ||
|
|
6a4387c9c9 | ||
|
|
132aa0f637 | ||
|
|
7dbb54bce3 | ||
|
|
7f1289bf4a | ||
|
|
88d475f304 | ||
|
|
98f4b8018b | ||
|
|
2f6a78549b | ||
|
|
9cd727829f | ||
|
|
f0fcdb07a3 | ||
|
|
5ead79aef9 | ||
|
|
72da43cf1b | ||
|
|
9eb0d21b0d | ||
|
|
2db75722ce | ||
|
|
68d0f64f6f | ||
|
|
d1cfc165c7 | ||
|
|
5f12f937cb | ||
|
|
2d77fa2c79 | ||
|
|
f6b13bc7e9 | ||
|
|
116c918fd3 | ||
|
|
fbbcae9aa5 | ||
|
|
7bd2b1ca10 | ||
|
|
61d14d1bee | ||
|
|
6a75638ec3 | ||
|
|
ff38b6c4a6 | ||
|
|
e67ce7f439 | ||
|
|
a83118880c | ||
|
|
a28158a63f | ||
|
|
30030e85c0 | ||
|
|
79fa1f9f98 | ||
|
|
06fd39b8b7 | ||
|
|
f278ec6d47 | ||
|
|
5a3f4c1c24 | ||
|
|
602bf4ea71 | ||
|
|
5148cf0f38 | ||
|
|
12febc42d8 | ||
|
|
de8a121ebd | ||
|
|
a2b49385e8 | ||
|
|
ea7cddff4f | ||
|
|
9acdb7d7f4 | ||
|
|
6d08b4f153 | ||
|
|
925751a406 | ||
|
|
d3ccc660f4 | ||
|
|
4d5fbad9c9 |
144
.all-contributorsrc
Normal file
144
.all-contributorsrc
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
{
|
||||||
|
"projectName": "add-and-commit",
|
||||||
|
"projectOwner": "EndBug",
|
||||||
|
"repoType": "github",
|
||||||
|
"repoHost": "https://github.com",
|
||||||
|
"files": [
|
||||||
|
"README.md"
|
||||||
|
],
|
||||||
|
"imageSize": 100,
|
||||||
|
"commit": true,
|
||||||
|
"commitConvention": "angular",
|
||||||
|
"contributors": [
|
||||||
|
{
|
||||||
|
"login": "EndBug",
|
||||||
|
"name": "Federico Grandi",
|
||||||
|
"avatar_url": "https://avatars1.githubusercontent.com/u/26386270?v=4",
|
||||||
|
"profile": "https://github.com/EndBug",
|
||||||
|
"contributions": [
|
||||||
|
"code",
|
||||||
|
"doc"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "jactor-rises",
|
||||||
|
"name": "Tor Egil Jacobsen",
|
||||||
|
"avatar_url": "https://avatars3.githubusercontent.com/u/14565088?v=4",
|
||||||
|
"profile": "https://github.com/jactor-rises",
|
||||||
|
"contributions": [
|
||||||
|
"code"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "yelizariev",
|
||||||
|
"name": "Ivan Yelizariev",
|
||||||
|
"avatar_url": "https://avatars0.githubusercontent.com/u/186131?v=4",
|
||||||
|
"profile": "https://twitter.com/yelizariev",
|
||||||
|
"contributions": [
|
||||||
|
"ideas"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "jhhughes",
|
||||||
|
"name": "jhhughes",
|
||||||
|
"avatar_url": "https://avatars2.githubusercontent.com/u/13724293?v=4",
|
||||||
|
"profile": "https://github.com/jhhughes",
|
||||||
|
"contributions": [
|
||||||
|
"bug"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "DmitrijOkeanij",
|
||||||
|
"name": "Дмитрий Океаний",
|
||||||
|
"avatar_url": "https://avatars3.githubusercontent.com/u/10674646?v=4",
|
||||||
|
"profile": "https://sunengine.site",
|
||||||
|
"contributions": [
|
||||||
|
"ideas"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "brahma-dev",
|
||||||
|
"name": "Brahma Dev",
|
||||||
|
"avatar_url": "https://avatars3.githubusercontent.com/u/1793295?v=4",
|
||||||
|
"profile": "https://github.com/brahma-dev",
|
||||||
|
"contributions": [
|
||||||
|
"bug"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "felixlapalma",
|
||||||
|
"name": "Felix Rojo Lapalma",
|
||||||
|
"avatar_url": "https://avatars2.githubusercontent.com/u/38389683?v=4",
|
||||||
|
"profile": "https://github.com/felixlapalma",
|
||||||
|
"contributions": [
|
||||||
|
"bug"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "RobinWijnant",
|
||||||
|
"name": "Robin Wijnant",
|
||||||
|
"avatar_url": "https://avatars3.githubusercontent.com/u/33033209?v=4",
|
||||||
|
"profile": "http://robinwijnant.me",
|
||||||
|
"contributions": [
|
||||||
|
"bug",
|
||||||
|
"code"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "onilton",
|
||||||
|
"name": "Onilton Maciel",
|
||||||
|
"avatar_url": "https://avatars2.githubusercontent.com/u/725676?v=4",
|
||||||
|
"profile": "https://github.com/onilton",
|
||||||
|
"contributions": [
|
||||||
|
"ideas"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "jsoref",
|
||||||
|
"name": "Josh Soref",
|
||||||
|
"avatar_url": "https://avatars0.githubusercontent.com/u/2119212?v=4",
|
||||||
|
"profile": "https://github.com/jsoref",
|
||||||
|
"contributions": [
|
||||||
|
"doc"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "ToMe25",
|
||||||
|
"name": "ToMe25",
|
||||||
|
"avatar_url": "https://avatars1.githubusercontent.com/u/38815969?v=4",
|
||||||
|
"profile": "https://github.com/ToMe25",
|
||||||
|
"contributions": [
|
||||||
|
"code",
|
||||||
|
"ideas"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "JonasJacobsUserspace",
|
||||||
|
"name": "JonasJacobsUserspace",
|
||||||
|
"avatar_url": "https://avatars0.githubusercontent.com/u/59708720?v=4",
|
||||||
|
"profile": "https://github.com/JonasJacobsUserspace",
|
||||||
|
"contributions": [
|
||||||
|
"bug"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "pvogt09",
|
||||||
|
"name": "pvogt09",
|
||||||
|
"avatar_url": "https://avatars3.githubusercontent.com/u/50047961?v=4",
|
||||||
|
"profile": "https://github.com/pvogt09",
|
||||||
|
"contributions": [
|
||||||
|
"code"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "connorjclark",
|
||||||
|
"name": "Connor Clark",
|
||||||
|
"avatar_url": "https://avatars1.githubusercontent.com/u/4071474?v=4",
|
||||||
|
"profile": "http://hoten.cc",
|
||||||
|
"contributions": [
|
||||||
|
"ideas"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"contributorsPerLine": 7
|
||||||
|
}
|
||||||
@@ -36,7 +36,8 @@
|
|||||||
"new-cap": 0,
|
"new-cap": 0,
|
||||||
"no-caller": 2,
|
"no-caller": 2,
|
||||||
"no-undef": 2,
|
"no-undef": 2,
|
||||||
"no-unused-vars": 1,
|
"no-unused-vars": 0,
|
||||||
|
"@typescript-eslint/no-unused-vars": "warn",
|
||||||
"no-empty": [
|
"no-empty": [
|
||||||
"error",
|
"error",
|
||||||
{
|
{
|
||||||
|
|||||||
33
.github/workflows/build.yml
vendored
33
.github/workflows/build.yml
vendored
@@ -1,34 +1,37 @@
|
|||||||
name: Build
|
name: Build
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches-ignore:
|
paths:
|
||||||
- dist
|
- src/**
|
||||||
|
- .github/workflows/build.yml
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build compiled JS version
|
name: Build compiled JS version
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- uses: actions/checkout@v2
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Set up Node.js
|
- uses: actions/setup-node@v1
|
||||||
uses: actions/setup-node@v1
|
|
||||||
with:
|
with:
|
||||||
node-version: 12.x
|
node-version: 12.x
|
||||||
|
|
||||||
- name: Install dependencies
|
- run: npm install
|
||||||
run: npm install
|
|
||||||
|
|
||||||
- name: Compile TypeScript into compressed JavaScript
|
- run: npm run build
|
||||||
run: npm run build
|
|
||||||
|
|
||||||
- name: Commit changes
|
- uses: EndBug/add-and-commit@v4
|
||||||
uses: EndBug/add-and-commit@v2
|
|
||||||
with:
|
with:
|
||||||
|
message: '[auto] build: update compiled version'
|
||||||
|
add: lib
|
||||||
force: true
|
force: true
|
||||||
message: "[auto] Update compiled version"
|
env:
|
||||||
path: lib
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
pattern: "*.js"
|
|
||||||
|
- uses: EndBug/add-and-commit@v4
|
||||||
|
with:
|
||||||
|
message: '[auto] build: update input typings'
|
||||||
|
add: src/inputs.ts
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|||||||
29
.github/workflows/docs.yml
vendored
Normal file
29
.github/workflows/docs.yml
vendored
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
name: Docs
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- .all-contributorsrc
|
||||||
|
- .github/workflows/docs.yml
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
contributors:
|
||||||
|
name: Update contributors badge
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: 12.x
|
||||||
|
|
||||||
|
- run: npm install
|
||||||
|
|
||||||
|
- run: npm run all-contributors-badge
|
||||||
|
|
||||||
|
- uses: EndBug/add-and-commit@v4.0.0
|
||||||
|
with:
|
||||||
|
message: "[auto] docs: update contributors badge"
|
||||||
|
add: README.md
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
21
.github/workflows/stale.yml
vendored
Normal file
21
.github/workflows/stale.yml
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
name: 'Handle stale issues and PRs'
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 0 * * *'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
stale:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/stale@v3
|
||||||
|
with:
|
||||||
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
stale-issue-message: 'This issue is being marked as "stale" because it has been open 20 days with no activity. Remove the "stale" label or comment, otherwise this will be closed in 5 days.'
|
||||||
|
stale-issue-label: stale
|
||||||
|
exempt-issue-labels: pinned
|
||||||
|
stale-pr-message: 'This PR is being marked as "stale" because it has been open 20 days with no activity. Remove the "stale" label or comment, otherwise this will be closed in 5 days.'
|
||||||
|
stale-pr-label: stale
|
||||||
|
exempt-pr-labels: pinned
|
||||||
|
days-before-stale: 20
|
||||||
|
days-before-close: 5
|
||||||
4
.github/workflows/versioning.yml
vendored
4
.github/workflows/versioning.yml
vendored
@@ -2,13 +2,13 @@ name: Keep the versions up-to-date
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
release:
|
release:
|
||||||
types: [published]
|
types: [published, edited]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
actions-tagger:
|
actions-tagger:
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: Actions-R-Us/actions-tagger@latest
|
- uses: Actions-R-Us/actions-tagger@v1
|
||||||
with:
|
with:
|
||||||
publish_latest: true
|
publish_latest: true
|
||||||
env:
|
env:
|
||||||
|
|||||||
131
CHANGELOG.md
Normal file
131
CHANGELOG.md
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
# Changelog
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [5.0.0] - 2020-09-27
|
||||||
|
### Changed:
|
||||||
|
- **[BREAKING]** Action parameters: multiple action parameters have been changed, refer to the docs for better info
|
||||||
|
- The code is now entirely in TypeScript (PR #57)
|
||||||
|
|
||||||
|
### Fixed:
|
||||||
|
- Improved input checks
|
||||||
|
- Logs are now displayed on Windows too
|
||||||
|
- Remove unnecessary steps
|
||||||
|
- Remove unused dependencies
|
||||||
|
|
||||||
|
## [4.4.0] - 2020-07-31
|
||||||
|
### Added:
|
||||||
|
- Pull requests: the action can now work in runs triggered by pull request events (issue #48)
|
||||||
|
|
||||||
|
## [4.3.0] - 2020-07-29
|
||||||
|
### Addded:
|
||||||
|
- `signoff` parameter: lets you use the `--signoff` argument for the `git commit` command (PR #46)
|
||||||
|
|
||||||
|
## [4.2.1] - 2020-07-10
|
||||||
|
### Fixed:
|
||||||
|
- OS-support: the action now properly works on Windows instances (issue #33)
|
||||||
|
|
||||||
|
## [4.2.0] - 2020-05-17
|
||||||
|
### Added:
|
||||||
|
- Tagging: you can now create and update lightweight tags (PR #30)
|
||||||
|
|
||||||
|
## [4.1.0] - 2020-05-01
|
||||||
|
### Added:
|
||||||
|
- `ref` parameter: lets you choose the branch to run the action on, the default is the one that triggered the workflow (issue #29)
|
||||||
|
|
||||||
|
## [4.0.3] - 2020-05-01
|
||||||
|
### Fixed:
|
||||||
|
- Logs: `git diff` won't display logs anymore, to avoid buffer problems (issue #27)
|
||||||
|
- Logs: additional info will be logged along with the command outputs
|
||||||
|
- Logs: added groups to improve readability
|
||||||
|
|
||||||
|
## [4.0.2] - 2020-04-19
|
||||||
|
### Fixed:
|
||||||
|
- Error handling: failures are now easier to read (issue #25)
|
||||||
|
|
||||||
|
## [4.0.1] - 2020-03-20
|
||||||
|
### Fixed:
|
||||||
|
- Scheduled events: the action can be used in action runs triggered by a scheduled events
|
||||||
|
- Warnings: there won't be warnings when both `author_name` and `author_email` are set
|
||||||
|
|
||||||
|
## [4.0.0] - 2020-03-03
|
||||||
|
### Removed:
|
||||||
|
- **[BREAKING]** `path` parameter: see 'Changed' section for more info
|
||||||
|
- **[BREAKING]** `pattern` parameter: see 'Changed' section for more info
|
||||||
|
|
||||||
|
### Changed:
|
||||||
|
- The action now uses `git add` and `git rm` commands, you can choose their arguemnts directly by using the `add` and `remove` parameters
|
||||||
|
- **[BREAKING]** Error handling: the action won't stop if one of your git commands fails (e.g. if one of your pathspecs doesn't match any file)
|
||||||
|
|
||||||
|
## [3.1.0] - 2020-02-21
|
||||||
|
### Added:
|
||||||
|
- `remove` parameter: lets you delete files directly from the action
|
||||||
|
|
||||||
|
## [3.0.0] - 2020-01-24
|
||||||
|
### Added:
|
||||||
|
- The action can now run in multiple subsequent jobs in the same workflow
|
||||||
|
|
||||||
|
### Removed:
|
||||||
|
- **[BREAKING]** [`actions/checkout@v1`](https://github.com/actions/checkout/tree/v1) support is being dropped in favor of [`actions/checkout@v2`](https://github.com/actions/checkout/releases/tag/v2)
|
||||||
|
|
||||||
|
## [2.3.2] - 2019-12-29
|
||||||
|
### Added:
|
||||||
|
- `cwd` parameter: lets you set the Current Working Directory
|
||||||
|
|
||||||
|
## [2.3.1] - 2019-12-20
|
||||||
|
### Added:
|
||||||
|
- Short tags: from now on, there will be short major tags available (`v2`, `v3`, ...)
|
||||||
|
|
||||||
|
## [2.3.0] - 2019-12-14
|
||||||
|
### Changed:
|
||||||
|
- TypeScript rewrite: the action will run faster because, unlike with Docker, no build process is needed
|
||||||
|
|
||||||
|
### Added:
|
||||||
|
- OS support: the action can now run in non-Linux environments too
|
||||||
|
|
||||||
|
## [2.2.0] - 2019-12-14
|
||||||
|
### Added:
|
||||||
|
- The action can automatically fetch the commit author to use
|
||||||
|
- You can manually provide the author using the `author_name` and `author_email` parameters
|
||||||
|
|
||||||
|
## [2.1.1] - 2019-12-07
|
||||||
|
### Fixed:
|
||||||
|
- The action can now be used multiple times in the same workflow
|
||||||
|
|
||||||
|
## [2.1.0] - 2019-09-19
|
||||||
|
### Added:
|
||||||
|
- `force` parameter: uses `--force` when running `git add`
|
||||||
|
|
||||||
|
## [2.0.0] - 2019-09-18
|
||||||
|
### Changed:
|
||||||
|
- **[BREAKING]** The action now uses a `find` command
|
||||||
|
|
||||||
|
## [1.0.0] - 2019-09-17
|
||||||
|
First release
|
||||||
|
|
||||||
|
#
|
||||||
|
[Unreleased]: https://github.com/EndBug/add-and-commit/compare/v5.0.0...HEAD
|
||||||
|
[1.0.0]: https://github.com/EndBug/add-and-commit/tree/v1.0.0
|
||||||
|
[2.0.0]: https://github.com/EndBug/add-and-commit/compare/v1.0.0...v2.0.0
|
||||||
|
[2.1.0]: https://github.com/EndBug/add-and-commit/compare/v2.0.0...v2.1.0
|
||||||
|
[2.1.1]: https://github.com/EndBug/add-and-commit/compare/v2.1.0...v2.1.1
|
||||||
|
[2.2.0]: https://github.com/EndBug/add-and-commit/compare/v2.1.1...v2.2.0
|
||||||
|
[2.3.0]: https://github.com/EndBug/add-and-commit/compare/v2.2.0...v2.3.0
|
||||||
|
[2.3.1]: https://github.com/EndBug/add-and-commit/compare/v2.3.0...v2.3.1
|
||||||
|
[2.3.2]: https://github.com/EndBug/add-and-commit/compare/v2.3.1...v2.3.2
|
||||||
|
[3.0.0]: https://github.com/EndBug/add-and-commit/compare/v2.3.2...v3.0.0
|
||||||
|
[3.1.0]: https://github.com/EndBug/add-and-commit/compare/v3.0.0...v3.1.0
|
||||||
|
[4.0.0]: https://github.com/EndBug/add-and-commit/compare/v3.1.0...v4.0.0
|
||||||
|
[4.0.1]: https://github.com/EndBug/add-and-commit/compare/v4.0.0...v4.0.1
|
||||||
|
[4.0.2]: https://github.com/EndBug/add-and-commit/compare/v4.0.1...v4.0.2
|
||||||
|
[4.0.3]: https://github.com/EndBug/add-and-commit/compare/v4.0.2...v4.0.3
|
||||||
|
[4.1.0]: https://github.com/EndBug/add-and-commit/compare/v4.0.3...v4.1.0
|
||||||
|
[4.2.0]: https://github.com/EndBug/add-and-commit/compare/v4.1.0...v4.2.0
|
||||||
|
[4.2.1]: https://github.com/EndBug/add-and-commit/compare/v4.2.0...v4.2.1
|
||||||
|
[4.3.0]: https://github.com/EndBug/add-and-commit/compare/v4.2.1...v4.3.0
|
||||||
|
[4.4.0]: https://github.com/EndBug/add-and-commit/compare/v4.3.0...v4.4.0
|
||||||
|
[5.0.0]: https://github.com/EndBug/add-and-commit/compare/v4.4.0...v5.0.0
|
||||||
135
README.md
135
README.md
@@ -1,66 +1,82 @@
|
|||||||
# Add & Commit
|
# Add & Commit
|
||||||
|
<a href="https://github.com/search?o=desc&q=EndBug%2Fadd-and-commit+path%3A.github%2Fworkflows+language%3AYAML&s=&type=Code" target="_blank" title="Public workflows that use this action."><img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fapi-git-master.endbug.vercel.app%2Fapi%2Fgithub-actions%2Fused-by%3Faction%3DEndBug%2Fadd-and-commit%26badge%3Dtrue" alt="Public workflows that use this action."></a>
|
||||||
|
[](#contributors-)
|
||||||
|
|
||||||
You can use this GitHub Action to commit changes made in your workflow run directly to your repo: for example, you use it to lint your code, update documentation, commit updated builds and so on...
|
You can use this GitHub Action to commit changes made in your workflow run directly to your repo: for example, you use it to lint your code, update documentation, commit updated builds, etc....
|
||||||
|
|
||||||
This is **heavily** inspired by [git-auto-commit-action](https://github.com/stefanzweifel/git-auto-commit-action) (by [Stefan Zweifel](https://github.com/stefanzweifel)): that action automatically detects changed files and commits them. While this is useful for most situations, this doesn't commit untracked files and can sometimes commit unintended changes (such as `package-lock.json` or similar, that may have happened during previous steps).
|
This is **heavily** inspired by [git-auto-commit-action](https://github.com/stefanzweifel/git-auto-commit-action) (by [Stefan Zweifel](https://github.com/stefanzweifel)): that action automatically detects changed files and commits them. While this is useful for most situations, this doesn't commit untracked files and can sometimes commit unintended changes (such as `package-lock.json` or similar, that may have happened during previous steps).
|
||||||
This action lets you choose the path that you want to use when adding & committing changes, so that it works as you would normally do using `git` on your machine.
|
This action lets you choose the path that you want to use when adding & committing changes so that it works as you would normally do using `git` on your machine.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Add a step like this to your workflow:
|
Add a step like this to your workflow:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Commit changes # This is the step name that will be displayed in your runs
|
- uses: EndBug/add-and-commit@v5 # You can change this to use a specific version
|
||||||
uses: EndBug/add-and-commit@v2 # You can change this to use a specific version
|
with:
|
||||||
with: # See more info about inputs below
|
# The arguments for the `git add` command (see the paragraph below for more info)
|
||||||
|
# Default: '.'
|
||||||
|
add: 'src'
|
||||||
|
|
||||||
|
# The name of the user that will be displayed as the author of the commit
|
||||||
|
# Default: author of the commit that triggered the run
|
||||||
author_name: Your Name
|
author_name: Your Name
|
||||||
|
|
||||||
|
# The email of the user that will be displayed as the author of the commit
|
||||||
|
# Default: author of the commit that triggered the run
|
||||||
author_email: mail@example.com
|
author_email: mail@example.com
|
||||||
cwd: "."
|
|
||||||
message: "Your commit message"
|
# Name of the branch to use, if different from the one that triggered the workflow
|
||||||
path: "."
|
# Default: the branch that triggered the run
|
||||||
pattern: "*.js"
|
branch: some-branch
|
||||||
force: false
|
|
||||||
|
# The local path to the directory where your repository is located. You should use actions/checkout first to set it up
|
||||||
|
# Default: '.'
|
||||||
|
cwd: './path/to/the/repo'
|
||||||
|
|
||||||
|
# The message for the commit
|
||||||
|
# Default: 'Commit from GitHub Actions'
|
||||||
|
message: 'Your commit message'
|
||||||
|
|
||||||
|
# The arguments for the `git rm` command (see the paragraph below for more info)
|
||||||
|
# Default: ''
|
||||||
|
remove: "./dir/old_file.js"
|
||||||
|
|
||||||
|
# Whether to use the --signoff option on `git commit` (only `true` and `false` are accepted)
|
||||||
|
# Default: false
|
||||||
|
signoff: true
|
||||||
|
|
||||||
|
# Arguments for the git tag command (the tag name always needs to be the first word not preceded by an hyphen)
|
||||||
|
# Default: ''
|
||||||
|
tag: "v1.0.0 --force"
|
||||||
|
|
||||||
env:
|
env:
|
||||||
|
# This is necessary in order to push a commit to the repo
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Leave this line unchanged
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Leave this line unchanged
|
||||||
```
|
```
|
||||||
|
|
||||||
### Inputs:
|
|
||||||
|
|
||||||
- `author_name` : the name of the user that will be displayed as the author of the commit, defaults to the author of the commit that triggered the run
|
|
||||||
- `author_email` : the email of the user that will be displayed as the author of the commit, defaults to the author of the commit that triggered the run
|
|
||||||
- `cwd` : the working directory in which your repository is located, defaults to `.`
|
|
||||||
- `message` : the message for the commit
|
|
||||||
- `path` : the path(s) to stage files from
|
|
||||||
- `pattern` : the pattern that matches file names
|
|
||||||
- `force` : whether to use the force option on git add, in order to bypass eventual gitignores
|
|
||||||
|
|
||||||
### Environment variables:
|
### Environment variables:
|
||||||
|
|
||||||
The only `env` variable required is the token for the action to run: GitHub generates one automatically, but you need to pass it through `env` to make it available to actions. You can find more about `GITHUB_TOKEN` [here](https://help.github.com/en/articles/virtual-environments-for-github-actions#github_token-secret).
|
The only `env` variable required is the token for the action to run: GitHub generates one automatically, but you need to pass it through `env` to make it available to actions. You can find more about `GITHUB_TOKEN` [here](https://help.github.com/en/articles/virtual-environments-for-github-actions#github_token-secret).
|
||||||
With that said, you can just copy the example line and don't worry about it. If you do want to use a different token you can pass that in, but I wouldn't see any possible advantage in doing so.
|
That said, you can just copy the example line and not worry about it. If you do want to use a different token you can pass that in, but I wouldn't see any possible advantage in doing so.
|
||||||
|
|
||||||
|
### Adding files:
|
||||||
|
|
||||||
|
The action adds files using a regular `git add` command, so you can put every kind of argument in the `add` option. For example, if you want to force-add a file: `./path/to/file.txt --force`.
|
||||||
|
The script will not stop if one of the git commands fails. E.g.: if your command shows a "fatal: pathspec 'yourFile' did not match any files" error the action will go on.
|
||||||
|
|
||||||
### Deleting files:
|
### Deleting files:
|
||||||
|
|
||||||
This action only **adds** files so in order to commit a file deletion you need to stage that separately: for that, you can run `git rm` in a previous step. Here's a quick example:
|
You can delete files with the `remove` option: that runs a `git rm` command that will stage the files in the given path for removal. As with the `add` argument, you can use every option `git rm` allows (e.g. add `--force` to ignore `.gitignore` rules).
|
||||||
|
The script will not stop if one of the git commands fails. E.g.: if your command shows a "fatal: pathspec 'yourFile' did not match any files" error the action will go on.
|
||||||
|
|
||||||
```yaml
|
### Tagging:
|
||||||
- run: git rm delete_me.txt
|
|
||||||
|
|
||||||
- uses: EndBug/add-and-commit@v2
|
You can use the `tag` option to enter the arguments for a `git add` command. In order for the action to isolate the tag name from the rest of the arguments, it should be the first word not preceded by an hyphen (e.g. `-a tag-name -m "some other stuff"` is ok).
|
||||||
with:
|
|
||||||
author_name: Your Name
|
|
||||||
author_email: mail@example.com
|
|
||||||
message: "Remove file"
|
|
||||||
path: "."
|
|
||||||
pattern: "*.js" # The path is not important, the file will get removed anyway: that means you can still use the action as usual
|
|
||||||
force: true
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Example:
|
### Examples:
|
||||||
|
|
||||||
You want to lint your JavaScript files, located in the `src` folder, with ESLint so that fixable changes are done without your intervention. You can use a workflow like this:
|
Do you want to lint your JavaScript files, located in the `src` folder, with ESLint, so that fixable changes are done without your intervention? You can use a workflow like this:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
name: Lint source code
|
name: Lint source code
|
||||||
@@ -86,13 +102,12 @@ jobs:
|
|||||||
run: eslint "src/**" --fix
|
run: eslint "src/**" --fix
|
||||||
|
|
||||||
- name: Commit changes
|
- name: Commit changes
|
||||||
uses: EndBug/add-and-commit@v2
|
uses: EndBug/add-and-commit@v5
|
||||||
with:
|
with:
|
||||||
author_name: Your Name
|
author_name: Your Name
|
||||||
author_email: mail@example.com
|
author_email: mail@example.com
|
||||||
message: "Your commit message"
|
message: "Your commit message"
|
||||||
path: "."
|
add: "*.js"
|
||||||
pattern: "*.js"
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
```
|
```
|
||||||
@@ -118,17 +133,49 @@ jobs:
|
|||||||
- run: echo "123" > ./pathToRepo/file.txt
|
- run: echo "123" > ./pathToRepo/file.txt
|
||||||
|
|
||||||
# ...and then use the action as you would normally do, but providing the path to the repo
|
# ...and then use the action as you would normally do, but providing the path to the repo
|
||||||
- uses: EndBug/add-and-commit@v2
|
- uses: EndBug/add-and-commit@v5
|
||||||
with:
|
with:
|
||||||
message: "Add the very useful text file"
|
message: "Add the very useful text file"
|
||||||
path: "."
|
add: "*.txt --force"
|
||||||
pattern: "*.txt"
|
|
||||||
cwd: "./pathToRepo/"
|
cwd: "./pathToRepo/"
|
||||||
force: true
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Contributors ✨
|
||||||
|
|
||||||
|
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
||||||
|
|
||||||
|
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||||
|
<!-- prettier-ignore-start -->
|
||||||
|
<!-- markdownlint-disable -->
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td align="center"><a href="https://github.com/EndBug"><img src="https://avatars1.githubusercontent.com/u/26386270?v=4" width="100px;" alt=""/><br /><sub><b>Federico Grandi</b></sub></a><br /><a href="https://github.com/EndBug/add-and-commit/commits?author=EndBug" title="Code">💻</a> <a href="https://github.com/EndBug/add-and-commit/commits?author=EndBug" title="Documentation">📖</a></td>
|
||||||
|
<td align="center"><a href="https://github.com/jactor-rises"><img src="https://avatars3.githubusercontent.com/u/14565088?v=4" width="100px;" alt=""/><br /><sub><b>Tor Egil Jacobsen</b></sub></a><br /><a href="https://github.com/EndBug/add-and-commit/commits?author=jactor-rises" title="Code">💻</a></td>
|
||||||
|
<td align="center"><a href="https://twitter.com/yelizariev"><img src="https://avatars0.githubusercontent.com/u/186131?v=4" width="100px;" alt=""/><br /><sub><b>Ivan Yelizariev</b></sub></a><br /><a href="#ideas-yelizariev" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||||
|
<td align="center"><a href="https://github.com/jhhughes"><img src="https://avatars2.githubusercontent.com/u/13724293?v=4" width="100px;" alt=""/><br /><sub><b>jhhughes</b></sub></a><br /><a href="https://github.com/EndBug/add-and-commit/issues?q=author%3Ajhhughes" title="Bug reports">🐛</a></td>
|
||||||
|
<td align="center"><a href="https://sunengine.site"><img src="https://avatars3.githubusercontent.com/u/10674646?v=4" width="100px;" alt=""/><br /><sub><b>Дмитрий Океаний</b></sub></a><br /><a href="#ideas-DmitrijOkeanij" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||||
|
<td align="center"><a href="https://github.com/brahma-dev"><img src="https://avatars3.githubusercontent.com/u/1793295?v=4" width="100px;" alt=""/><br /><sub><b>Brahma Dev</b></sub></a><br /><a href="https://github.com/EndBug/add-and-commit/issues?q=author%3Abrahma-dev" title="Bug reports">🐛</a></td>
|
||||||
|
<td align="center"><a href="https://github.com/felixlapalma"><img src="https://avatars2.githubusercontent.com/u/38389683?v=4" width="100px;" alt=""/><br /><sub><b>Felix Rojo Lapalma</b></sub></a><br /><a href="https://github.com/EndBug/add-and-commit/issues?q=author%3Afelixlapalma" title="Bug reports">🐛</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center"><a href="http://robinwijnant.me"><img src="https://avatars3.githubusercontent.com/u/33033209?v=4" width="100px;" alt=""/><br /><sub><b>Robin Wijnant</b></sub></a><br /><a href="https://github.com/EndBug/add-and-commit/issues?q=author%3ARobinWijnant" title="Bug reports">🐛</a> <a href="https://github.com/EndBug/add-and-commit/commits?author=RobinWijnant" title="Code">💻</a></td>
|
||||||
|
<td align="center"><a href="https://github.com/onilton"><img src="https://avatars2.githubusercontent.com/u/725676?v=4" width="100px;" alt=""/><br /><sub><b>Onilton Maciel</b></sub></a><br /><a href="#ideas-onilton" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||||
|
<td align="center"><a href="https://github.com/jsoref"><img src="https://avatars0.githubusercontent.com/u/2119212?v=4" width="100px;" alt=""/><br /><sub><b>Josh Soref</b></sub></a><br /><a href="https://github.com/EndBug/add-and-commit/commits?author=jsoref" title="Documentation">📖</a></td>
|
||||||
|
<td align="center"><a href="https://github.com/ToMe25"><img src="https://avatars1.githubusercontent.com/u/38815969?v=4" width="100px;" alt=""/><br /><sub><b>ToMe25</b></sub></a><br /><a href="https://github.com/EndBug/add-and-commit/commits?author=ToMe25" title="Code">💻</a> <a href="#ideas-ToMe25" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||||
|
<td align="center"><a href="https://github.com/JonasJacobsUserspace"><img src="https://avatars0.githubusercontent.com/u/59708720?v=4" width="100px;" alt=""/><br /><sub><b>JonasJacobsUserspace</b></sub></a><br /><a href="https://github.com/EndBug/add-and-commit/issues?q=author%3AJonasJacobsUserspace" title="Bug reports">🐛</a></td>
|
||||||
|
<td align="center"><a href="https://github.com/pvogt09"><img src="https://avatars3.githubusercontent.com/u/50047961?v=4" width="100px;" alt=""/><br /><sub><b>pvogt09</b></sub></a><br /><a href="https://github.com/EndBug/add-and-commit/commits?author=pvogt09" title="Code">💻</a></td>
|
||||||
|
<td align="center"><a href="http://hoten.cc"><img src="https://avatars1.githubusercontent.com/u/4071474?v=4" width="100px;" alt=""/><br /><sub><b>Connor Clark</b></sub></a><br /><a href="#ideas-connorjclark" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<!-- markdownlint-enable -->
|
||||||
|
<!-- prettier-ignore-end -->
|
||||||
|
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||||
|
|
||||||
|
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
This action is distributed under the MIT license, check the [license](LICENSE) for more info.
|
This action is distributed under the MIT license, check the [license](LICENSE) for more info.
|
||||||
|
|||||||
28
action.yml
28
action.yml
@@ -2,36 +2,40 @@ name: Add & Commit
|
|||||||
description: Add & commit files from a path directly from GitHub Actions
|
description: Add & commit files from a path directly from GitHub Actions
|
||||||
|
|
||||||
inputs:
|
inputs:
|
||||||
|
add:
|
||||||
|
description: Arguments for the git add command
|
||||||
|
required: false
|
||||||
|
default: '.'
|
||||||
author_name:
|
author_name:
|
||||||
description: The name of the user that will be displayed as the author of the commit
|
description: The name of the user that will be displayed as the author of the commit
|
||||||
required: false
|
required: false
|
||||||
author_email:
|
author_email:
|
||||||
description: The email of the user that will be displayed as the author of the commit
|
description: The email of the user that will be displayed as the author of the commit
|
||||||
required: false
|
required: false
|
||||||
|
branch:
|
||||||
|
description: Name of the branch to use, if different from the one that triggered the workflow
|
||||||
|
required: false
|
||||||
cwd:
|
cwd:
|
||||||
description: The directory where your repository is located. You should use actions/checkout first to set it up
|
description: The directory where your repository is located. You should use actions/checkout first to set it up
|
||||||
required: false
|
required: false
|
||||||
default: "."
|
default: '.'
|
||||||
force:
|
|
||||||
description: Whether to use the force option on git add, in order to bypass eventual gitignores
|
|
||||||
required: false
|
|
||||||
default: "false"
|
|
||||||
message:
|
message:
|
||||||
description: The message for the commit
|
description: The message for the commit
|
||||||
required: false
|
required: false
|
||||||
default: Commit from GitHub Actions
|
default: Commit from GitHub Actions
|
||||||
path:
|
remove:
|
||||||
description: The path to stage files from
|
description: Arguments for the git rm command
|
||||||
required: false
|
required: false
|
||||||
default: "."
|
signoff:
|
||||||
pattern:
|
description: Whether to use the --signoff option on git commit
|
||||||
description: The pattern that mathces file names
|
required: false
|
||||||
|
tag:
|
||||||
|
description: Arguments for the git tag command (the tag name always needs to be the first word not preceded by a hyphen)
|
||||||
required: false
|
required: false
|
||||||
default: "*.*"
|
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: node12
|
using: node12
|
||||||
main: lib/main.js
|
main: lib/index.js
|
||||||
|
|
||||||
branding:
|
branding:
|
||||||
icon: git-commit
|
icon: git-commit
|
||||||
|
|||||||
1
lib/index.js
Normal file
1
lib/index.js
Normal file
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
"use strict";var __importStar=this&&this.__importStar||function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b};Object.defineProperty(exports,"__esModule",{value:!0});const core=__importStar(require("@actions/core")),shell=__importStar(require("shelljs")),path=__importStar(require("path"));try{checkInputs(),shell.exec(path.join(__dirname,"../src/entrypoint.sh"))}catch(a){core.setFailed(a)}function checkInputs(){const a=process.env.GITHUB_EVENT_PATH;if(a){const{author:b}=require(a).head_commit;process.env.INPUT_AUTHOR_NAME||(process.env.INPUT_AUTHOR_NAME=b.name),process.env.INPUT_AUTHOR_EMAIL||(process.env.INPUT_AUTHOR_EMAIL=b.email)}else core.warning("No event path available, unable to fetch author info."),process.env.INPUT_AUTHOR_NAME||(process.env.INPUT_AUTHOR_NAME="Add & Commit Action"),process.env.INPUT_AUTHOR_EMAIL||(process.env.INPUT_AUTHOR_EMAIL="actions@github.com");core.info(`Using '${process.env.INPUT_AUTHOR_NAME} <${process.env.INPUT_AUTHOR_EMAIL}>' as author.`)}
|
|
||||||
15
node_modules/.bin/shjs
generated
vendored
15
node_modules/.bin/shjs
generated
vendored
@@ -1,15 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
||||||
|
|
||||||
case `uname` in
|
|
||||||
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if [ -x "$basedir/node" ]; then
|
|
||||||
"$basedir/node" "$basedir/../shelljs/bin/shjs" "$@"
|
|
||||||
ret=$?
|
|
||||||
else
|
|
||||||
node "$basedir/../shelljs/bin/shjs" "$@"
|
|
||||||
ret=$?
|
|
||||||
fi
|
|
||||||
exit $ret
|
|
||||||
7
node_modules/.bin/shjs.cmd
generated
vendored
7
node_modules/.bin/shjs.cmd
generated
vendored
@@ -1,7 +0,0 @@
|
|||||||
@IF EXIST "%~dp0\node.exe" (
|
|
||||||
"%~dp0\node.exe" "%~dp0\..\shelljs\bin\shjs" %*
|
|
||||||
) ELSE (
|
|
||||||
@SETLOCAL
|
|
||||||
@SET PATHEXT=%PATHEXT:;.JS;=;%
|
|
||||||
node "%~dp0\..\shelljs\bin\shjs" %*
|
|
||||||
)
|
|
||||||
140
node_modules/@actions/core/README.md
generated
vendored
140
node_modules/@actions/core/README.md
generated
vendored
@@ -1,140 +0,0 @@
|
|||||||
# `@actions/core`
|
|
||||||
|
|
||||||
> Core functions for setting results, logging, registering secrets and exporting variables across actions
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
### Import the package
|
|
||||||
|
|
||||||
```js
|
|
||||||
// javascript
|
|
||||||
const core = require('@actions/core');
|
|
||||||
|
|
||||||
// typescript
|
|
||||||
import * as core from '@actions/core';
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Inputs/Outputs
|
|
||||||
|
|
||||||
Action inputs can be read with `getInput`. Outputs can be set with `setOutput` which makes them available to be mapped into inputs of other actions to ensure they are decoupled.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const myInput = core.getInput('inputName', { required: true });
|
|
||||||
|
|
||||||
core.setOutput('outputKey', 'outputVal');
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Exporting variables
|
|
||||||
|
|
||||||
Since each step runs in a separate process, you can use `exportVariable` to add it to this step and future steps environment blocks.
|
|
||||||
|
|
||||||
```js
|
|
||||||
core.exportVariable('envVar', 'Val');
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Setting a secret
|
|
||||||
|
|
||||||
Setting a secret registers the secret with the runner to ensure it is masked in logs.
|
|
||||||
|
|
||||||
```js
|
|
||||||
core.setSecret('myPassword');
|
|
||||||
```
|
|
||||||
|
|
||||||
#### PATH Manipulation
|
|
||||||
|
|
||||||
To make a tool's path available in the path for the remainder of the job (without altering the machine or containers state), use `addPath`. The runner will prepend the path given to the jobs PATH.
|
|
||||||
|
|
||||||
```js
|
|
||||||
core.addPath('/path/to/mytool');
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Exit codes
|
|
||||||
|
|
||||||
You should use this library to set the failing exit code for your action. If status is not set and the script runs to completion, that will lead to a success.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const core = require('@actions/core');
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Do stuff
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
// setFailed logs the message and sets a failing exit code
|
|
||||||
core.setFailed(`Action failed with error ${err}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
Note that `setNeutral` is not yet implemented in actions V2 but equivalent functionality is being planned.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Logging
|
|
||||||
|
|
||||||
Finally, this library provides some utilities for logging. Note that debug logging is hidden from the logs by default. This behavior can be toggled by enabling the [Step Debug Logs](../../docs/action-debugging.md#step-debug-logs).
|
|
||||||
|
|
||||||
```js
|
|
||||||
const core = require('@actions/core');
|
|
||||||
|
|
||||||
const myInput = core.getInput('input');
|
|
||||||
try {
|
|
||||||
core.debug('Inside try block');
|
|
||||||
|
|
||||||
if (!myInput) {
|
|
||||||
core.warning('myInput was not set');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do stuff
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
core.error(`Error ${err}, action may still succeed though`);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
This library can also wrap chunks of output in foldable groups.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const core = require('@actions/core')
|
|
||||||
|
|
||||||
// Manually wrap output
|
|
||||||
core.startGroup('Do some function')
|
|
||||||
doSomeFunction()
|
|
||||||
core.endGroup()
|
|
||||||
|
|
||||||
// Wrap an asynchronous function call
|
|
||||||
const result = await core.group('Do something async', async () => {
|
|
||||||
const response = await doSomeHTTPRequest()
|
|
||||||
return response
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Action state
|
|
||||||
|
|
||||||
You can use this library to save state and get state for sharing information between a given wrapper action:
|
|
||||||
|
|
||||||
**action.yml**
|
|
||||||
```yaml
|
|
||||||
name: 'Wrapper action sample'
|
|
||||||
inputs:
|
|
||||||
name:
|
|
||||||
default: 'GitHub'
|
|
||||||
runs:
|
|
||||||
using: 'node12'
|
|
||||||
main: 'main.js'
|
|
||||||
post: 'cleanup.js'
|
|
||||||
```
|
|
||||||
|
|
||||||
In action's `main.js`:
|
|
||||||
|
|
||||||
```js
|
|
||||||
const core = require('@actions/core');
|
|
||||||
|
|
||||||
core.saveState("pidToKill", 12345);
|
|
||||||
```
|
|
||||||
|
|
||||||
In action's `cleanup.js`:
|
|
||||||
```js
|
|
||||||
const core = require('@actions/core');
|
|
||||||
|
|
||||||
var pid = core.getState("pidToKill");
|
|
||||||
|
|
||||||
process.kill(pid);
|
|
||||||
```
|
|
||||||
16
node_modules/@actions/core/lib/command.d.ts
generated
vendored
16
node_modules/@actions/core/lib/command.d.ts
generated
vendored
@@ -1,16 +0,0 @@
|
|||||||
interface CommandProperties {
|
|
||||||
[key: string]: string;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Commands
|
|
||||||
*
|
|
||||||
* Command Format:
|
|
||||||
* ##[name key=value;key=value]message
|
|
||||||
*
|
|
||||||
* Examples:
|
|
||||||
* ##[warning]This is the user warning message
|
|
||||||
* ##[set-secret name=mypassword]definitelyNotAPassword!
|
|
||||||
*/
|
|
||||||
export declare function issueCommand(command: string, properties: CommandProperties, message: string): void;
|
|
||||||
export declare function issue(name: string, message?: string): void;
|
|
||||||
export {};
|
|
||||||
66
node_modules/@actions/core/lib/command.js
generated
vendored
66
node_modules/@actions/core/lib/command.js
generated
vendored
@@ -1,66 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
const os = require("os");
|
|
||||||
/**
|
|
||||||
* Commands
|
|
||||||
*
|
|
||||||
* Command Format:
|
|
||||||
* ##[name key=value;key=value]message
|
|
||||||
*
|
|
||||||
* Examples:
|
|
||||||
* ##[warning]This is the user warning message
|
|
||||||
* ##[set-secret name=mypassword]definitelyNotAPassword!
|
|
||||||
*/
|
|
||||||
function issueCommand(command, properties, message) {
|
|
||||||
const cmd = new Command(command, properties, message);
|
|
||||||
process.stdout.write(cmd.toString() + os.EOL);
|
|
||||||
}
|
|
||||||
exports.issueCommand = issueCommand;
|
|
||||||
function issue(name, message = '') {
|
|
||||||
issueCommand(name, {}, message);
|
|
||||||
}
|
|
||||||
exports.issue = issue;
|
|
||||||
const CMD_STRING = '::';
|
|
||||||
class Command {
|
|
||||||
constructor(command, properties, message) {
|
|
||||||
if (!command) {
|
|
||||||
command = 'missing.command';
|
|
||||||
}
|
|
||||||
this.command = command;
|
|
||||||
this.properties = properties;
|
|
||||||
this.message = message;
|
|
||||||
}
|
|
||||||
toString() {
|
|
||||||
let cmdStr = CMD_STRING + this.command;
|
|
||||||
if (this.properties && Object.keys(this.properties).length > 0) {
|
|
||||||
cmdStr += ' ';
|
|
||||||
for (const key in this.properties) {
|
|
||||||
if (this.properties.hasOwnProperty(key)) {
|
|
||||||
const val = this.properties[key];
|
|
||||||
if (val) {
|
|
||||||
// safely append the val - avoid blowing up when attempting to
|
|
||||||
// call .replace() if message is not a string for some reason
|
|
||||||
cmdStr += `${key}=${escape(`${val || ''}`)},`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cmdStr += CMD_STRING;
|
|
||||||
// safely append the message - avoid blowing up when attempting to
|
|
||||||
// call .replace() if message is not a string for some reason
|
|
||||||
const message = `${this.message || ''}`;
|
|
||||||
cmdStr += escapeData(message);
|
|
||||||
return cmdStr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function escapeData(s) {
|
|
||||||
return s.replace(/\r/g, '%0D').replace(/\n/g, '%0A');
|
|
||||||
}
|
|
||||||
function escape(s) {
|
|
||||||
return s
|
|
||||||
.replace(/\r/g, '%0D')
|
|
||||||
.replace(/\n/g, '%0A')
|
|
||||||
.replace(/]/g, '%5D')
|
|
||||||
.replace(/;/g, '%3B');
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=command.js.map
|
|
||||||
1
node_modules/@actions/core/lib/command.js.map
generated
vendored
1
node_modules/@actions/core/lib/command.js.map
generated
vendored
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":";;AAAA,yBAAwB;AAQxB;;;;;;;;;GASG;AACH,SAAgB,YAAY,CAC1B,OAAe,EACf,UAA6B,EAC7B,OAAe;IAEf,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AAC/C,CAAC;AAPD,oCAOC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,UAAkB,EAAE;IACtD,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACjC,CAAC;AAFD,sBAEC;AAED,MAAM,UAAU,GAAG,IAAI,CAAA;AAEvB,MAAM,OAAO;IAKX,YAAY,OAAe,EAAE,UAA6B,EAAE,OAAe;QACzE,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,iBAAiB,CAAA;SAC5B;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,QAAQ;QACN,IAAI,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAA;QAEtC,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9D,MAAM,IAAI,GAAG,CAAA;YACb,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;oBAChC,IAAI,GAAG,EAAE;wBACP,8DAA8D;wBAC9D,6DAA6D;wBAC7D,MAAM,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,CAAA;qBAC9C;iBACF;aACF;SACF;QAED,MAAM,IAAI,UAAU,CAAA;QAEpB,kEAAkE;QAClE,6DAA6D;QAC7D,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAA;QACvC,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,CAAA;QAE7B,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AACtD,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,OAAO,CAAC;SACL,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACzB,CAAC"}
|
|
||||||
112
node_modules/@actions/core/lib/core.d.ts
generated
vendored
112
node_modules/@actions/core/lib/core.d.ts
generated
vendored
@@ -1,112 +0,0 @@
|
|||||||
/**
|
|
||||||
* Interface for getInput options
|
|
||||||
*/
|
|
||||||
export interface InputOptions {
|
|
||||||
/** Optional. Whether the input is required. If required and not present, will throw. Defaults to false */
|
|
||||||
required?: boolean;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* The code to exit an action
|
|
||||||
*/
|
|
||||||
export declare enum ExitCode {
|
|
||||||
/**
|
|
||||||
* A code indicating that the action was successful
|
|
||||||
*/
|
|
||||||
Success = 0,
|
|
||||||
/**
|
|
||||||
* A code indicating that the action was a failure
|
|
||||||
*/
|
|
||||||
Failure = 1
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Sets env variable for this action and future actions in the job
|
|
||||||
* @param name the name of the variable to set
|
|
||||||
* @param val the value of the variable
|
|
||||||
*/
|
|
||||||
export declare function exportVariable(name: string, val: string): void;
|
|
||||||
/**
|
|
||||||
* Registers a secret which will get masked from logs
|
|
||||||
* @param secret value of the secret
|
|
||||||
*/
|
|
||||||
export declare function setSecret(secret: string): void;
|
|
||||||
/**
|
|
||||||
* Prepends inputPath to the PATH (for this action and future actions)
|
|
||||||
* @param inputPath
|
|
||||||
*/
|
|
||||||
export declare function addPath(inputPath: string): void;
|
|
||||||
/**
|
|
||||||
* Gets the value of an input. The value is also trimmed.
|
|
||||||
*
|
|
||||||
* @param name name of the input to get
|
|
||||||
* @param options optional. See InputOptions.
|
|
||||||
* @returns string
|
|
||||||
*/
|
|
||||||
export declare function getInput(name: string, options?: InputOptions): string;
|
|
||||||
/**
|
|
||||||
* Sets the value of an output.
|
|
||||||
*
|
|
||||||
* @param name name of the output to set
|
|
||||||
* @param value value to store
|
|
||||||
*/
|
|
||||||
export declare function setOutput(name: string, value: string): void;
|
|
||||||
/**
|
|
||||||
* Sets the action status to failed.
|
|
||||||
* When the action exits it will be with an exit code of 1
|
|
||||||
* @param message add error issue message
|
|
||||||
*/
|
|
||||||
export declare function setFailed(message: string): void;
|
|
||||||
/**
|
|
||||||
* Writes debug message to user log
|
|
||||||
* @param message debug message
|
|
||||||
*/
|
|
||||||
export declare function debug(message: string): void;
|
|
||||||
/**
|
|
||||||
* Adds an error issue
|
|
||||||
* @param message error issue message
|
|
||||||
*/
|
|
||||||
export declare function error(message: string): void;
|
|
||||||
/**
|
|
||||||
* Adds an warning issue
|
|
||||||
* @param message warning issue message
|
|
||||||
*/
|
|
||||||
export declare function warning(message: string): void;
|
|
||||||
/**
|
|
||||||
* Writes info to log with console.log.
|
|
||||||
* @param message info message
|
|
||||||
*/
|
|
||||||
export declare function info(message: string): void;
|
|
||||||
/**
|
|
||||||
* Begin an output group.
|
|
||||||
*
|
|
||||||
* Output until the next `groupEnd` will be foldable in this group
|
|
||||||
*
|
|
||||||
* @param name The name of the output group
|
|
||||||
*/
|
|
||||||
export declare function startGroup(name: string): void;
|
|
||||||
/**
|
|
||||||
* End an output group.
|
|
||||||
*/
|
|
||||||
export declare function endGroup(): void;
|
|
||||||
/**
|
|
||||||
* Wrap an asynchronous function call in a group.
|
|
||||||
*
|
|
||||||
* Returns the same type as the function itself.
|
|
||||||
*
|
|
||||||
* @param name The name of the group
|
|
||||||
* @param fn The function to wrap in the group
|
|
||||||
*/
|
|
||||||
export declare function group<T>(name: string, fn: () => Promise<T>): Promise<T>;
|
|
||||||
/**
|
|
||||||
* Saves state for current action, the state can only be retrieved by this action's post job execution.
|
|
||||||
*
|
|
||||||
* @param name name of the state to store
|
|
||||||
* @param value value to store
|
|
||||||
*/
|
|
||||||
export declare function saveState(name: string, value: string): void;
|
|
||||||
/**
|
|
||||||
* Gets the value of an state set by this action's main execution.
|
|
||||||
*
|
|
||||||
* @param name name of the state to get
|
|
||||||
* @returns string
|
|
||||||
*/
|
|
||||||
export declare function getState(name: string): string;
|
|
||||||
195
node_modules/@actions/core/lib/core.js
generated
vendored
195
node_modules/@actions/core/lib/core.js
generated
vendored
@@ -1,195 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
|
||||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
||||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
||||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
||||||
});
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
const command_1 = require("./command");
|
|
||||||
const os = require("os");
|
|
||||||
const path = require("path");
|
|
||||||
/**
|
|
||||||
* The code to exit an action
|
|
||||||
*/
|
|
||||||
var ExitCode;
|
|
||||||
(function (ExitCode) {
|
|
||||||
/**
|
|
||||||
* A code indicating that the action was successful
|
|
||||||
*/
|
|
||||||
ExitCode[ExitCode["Success"] = 0] = "Success";
|
|
||||||
/**
|
|
||||||
* A code indicating that the action was a failure
|
|
||||||
*/
|
|
||||||
ExitCode[ExitCode["Failure"] = 1] = "Failure";
|
|
||||||
})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
// Variables
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
/**
|
|
||||||
* Sets env variable for this action and future actions in the job
|
|
||||||
* @param name the name of the variable to set
|
|
||||||
* @param val the value of the variable
|
|
||||||
*/
|
|
||||||
function exportVariable(name, val) {
|
|
||||||
process.env[name] = val;
|
|
||||||
command_1.issueCommand('set-env', { name }, val);
|
|
||||||
}
|
|
||||||
exports.exportVariable = exportVariable;
|
|
||||||
/**
|
|
||||||
* Registers a secret which will get masked from logs
|
|
||||||
* @param secret value of the secret
|
|
||||||
*/
|
|
||||||
function setSecret(secret) {
|
|
||||||
command_1.issueCommand('add-mask', {}, secret);
|
|
||||||
}
|
|
||||||
exports.setSecret = setSecret;
|
|
||||||
/**
|
|
||||||
* Prepends inputPath to the PATH (for this action and future actions)
|
|
||||||
* @param inputPath
|
|
||||||
*/
|
|
||||||
function addPath(inputPath) {
|
|
||||||
command_1.issueCommand('add-path', {}, inputPath);
|
|
||||||
process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
|
|
||||||
}
|
|
||||||
exports.addPath = addPath;
|
|
||||||
/**
|
|
||||||
* Gets the value of an input. The value is also trimmed.
|
|
||||||
*
|
|
||||||
* @param name name of the input to get
|
|
||||||
* @param options optional. See InputOptions.
|
|
||||||
* @returns string
|
|
||||||
*/
|
|
||||||
function getInput(name, options) {
|
|
||||||
const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
|
|
||||||
if (options && options.required && !val) {
|
|
||||||
throw new Error(`Input required and not supplied: ${name}`);
|
|
||||||
}
|
|
||||||
return val.trim();
|
|
||||||
}
|
|
||||||
exports.getInput = getInput;
|
|
||||||
/**
|
|
||||||
* Sets the value of an output.
|
|
||||||
*
|
|
||||||
* @param name name of the output to set
|
|
||||||
* @param value value to store
|
|
||||||
*/
|
|
||||||
function setOutput(name, value) {
|
|
||||||
command_1.issueCommand('set-output', { name }, value);
|
|
||||||
}
|
|
||||||
exports.setOutput = setOutput;
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
// Results
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
/**
|
|
||||||
* Sets the action status to failed.
|
|
||||||
* When the action exits it will be with an exit code of 1
|
|
||||||
* @param message add error issue message
|
|
||||||
*/
|
|
||||||
function setFailed(message) {
|
|
||||||
process.exitCode = ExitCode.Failure;
|
|
||||||
error(message);
|
|
||||||
}
|
|
||||||
exports.setFailed = setFailed;
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
// Logging Commands
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
/**
|
|
||||||
* Writes debug message to user log
|
|
||||||
* @param message debug message
|
|
||||||
*/
|
|
||||||
function debug(message) {
|
|
||||||
command_1.issueCommand('debug', {}, message);
|
|
||||||
}
|
|
||||||
exports.debug = debug;
|
|
||||||
/**
|
|
||||||
* Adds an error issue
|
|
||||||
* @param message error issue message
|
|
||||||
*/
|
|
||||||
function error(message) {
|
|
||||||
command_1.issue('error', message);
|
|
||||||
}
|
|
||||||
exports.error = error;
|
|
||||||
/**
|
|
||||||
* Adds an warning issue
|
|
||||||
* @param message warning issue message
|
|
||||||
*/
|
|
||||||
function warning(message) {
|
|
||||||
command_1.issue('warning', message);
|
|
||||||
}
|
|
||||||
exports.warning = warning;
|
|
||||||
/**
|
|
||||||
* Writes info to log with console.log.
|
|
||||||
* @param message info message
|
|
||||||
*/
|
|
||||||
function info(message) {
|
|
||||||
process.stdout.write(message + os.EOL);
|
|
||||||
}
|
|
||||||
exports.info = info;
|
|
||||||
/**
|
|
||||||
* Begin an output group.
|
|
||||||
*
|
|
||||||
* Output until the next `groupEnd` will be foldable in this group
|
|
||||||
*
|
|
||||||
* @param name The name of the output group
|
|
||||||
*/
|
|
||||||
function startGroup(name) {
|
|
||||||
command_1.issue('group', name);
|
|
||||||
}
|
|
||||||
exports.startGroup = startGroup;
|
|
||||||
/**
|
|
||||||
* End an output group.
|
|
||||||
*/
|
|
||||||
function endGroup() {
|
|
||||||
command_1.issue('endgroup');
|
|
||||||
}
|
|
||||||
exports.endGroup = endGroup;
|
|
||||||
/**
|
|
||||||
* Wrap an asynchronous function call in a group.
|
|
||||||
*
|
|
||||||
* Returns the same type as the function itself.
|
|
||||||
*
|
|
||||||
* @param name The name of the group
|
|
||||||
* @param fn The function to wrap in the group
|
|
||||||
*/
|
|
||||||
function group(name, fn) {
|
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
|
||||||
startGroup(name);
|
|
||||||
let result;
|
|
||||||
try {
|
|
||||||
result = yield fn();
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
endGroup();
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
exports.group = group;
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
// Wrapper action state
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
/**
|
|
||||||
* Saves state for current action, the state can only be retrieved by this action's post job execution.
|
|
||||||
*
|
|
||||||
* @param name name of the state to store
|
|
||||||
* @param value value to store
|
|
||||||
*/
|
|
||||||
function saveState(name, value) {
|
|
||||||
command_1.issueCommand('save-state', { name }, value);
|
|
||||||
}
|
|
||||||
exports.saveState = saveState;
|
|
||||||
/**
|
|
||||||
* Gets the value of an state set by this action's main execution.
|
|
||||||
*
|
|
||||||
* @param name name of the state to get
|
|
||||||
* @returns string
|
|
||||||
*/
|
|
||||||
function getState(name) {
|
|
||||||
return process.env[`STATE_${name}`] || '';
|
|
||||||
}
|
|
||||||
exports.getState = getState;
|
|
||||||
//# sourceMappingURL=core.js.map
|
|
||||||
1
node_modules/@actions/core/lib/core.js.map
generated
vendored
1
node_modules/@actions/core/lib/core.js.map
generated
vendored
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,uCAA6C;AAE7C,yBAAwB;AACxB,6BAA4B;AAU5B;;GAEG;AACH,IAAY,QAUX;AAVD,WAAY,QAAQ;IAClB;;OAEG;IACH,6CAAW,CAAA;IAEX;;OAEG;IACH,6CAAW,CAAA;AACb,CAAC,EAVW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAUnB;AAED,yEAAyE;AACzE,YAAY;AACZ,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,GAAW;IACtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;IACvB,sBAAY,CAAC,SAAS,EAAE,EAAC,IAAI,EAAC,EAAE,GAAG,CAAC,CAAA;AACtC,CAAC;AAHD,wCAGC;AAED;;;GAGG;AACH,SAAgB,SAAS,CAAC,MAAc;IACtC,sBAAY,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;AACtC,CAAC;AAFD,8BAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,SAAiB;IACvC,sBAAY,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;IACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;AAC7E,CAAC;AAHD,0BAGC;AAED;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,IAAY,EAAE,OAAsB;IAC3D,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;IACrE,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE;QACvC,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAA;KAC5D;IAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;AACnB,CAAC;AARD,4BAQC;AAED;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,IAAY,EAAE,KAAa;IACnD,sBAAY,CAAC,YAAY,EAAE,EAAC,IAAI,EAAC,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAFD,8BAEC;AAED,yEAAyE;AACzE,UAAU;AACV,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAA;IACnC,KAAK,CAAC,OAAO,CAAC,CAAA;AAChB,CAAC;AAHD,8BAGC;AAED,yEAAyE;AACzE,mBAAmB;AACnB,yEAAyE;AAEzE;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,sBAAY,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACpC,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,eAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AACzB,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,OAAe;IACrC,eAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAC3B,CAAC;AAFD,0BAEC;AAED;;;GAGG;AACH,SAAgB,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AACxC,CAAC;AAFD,oBAEC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,IAAY;IACrC,eAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AACtB,CAAC;AAFD,gCAEC;AAED;;GAEG;AACH,SAAgB,QAAQ;IACtB,eAAK,CAAC,UAAU,CAAC,CAAA;AACnB,CAAC;AAFD,4BAEC;AAED;;;;;;;GAOG;AACH,SAAsB,KAAK,CAAI,IAAY,EAAE,EAAoB;;QAC/D,UAAU,CAAC,IAAI,CAAC,CAAA;QAEhB,IAAI,MAAS,CAAA;QAEb,IAAI;YACF,MAAM,GAAG,MAAM,EAAE,EAAE,CAAA;SACpB;gBAAS;YACR,QAAQ,EAAE,CAAA;SACX;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CAAA;AAZD,sBAYC;AAED,yEAAyE;AACzE,uBAAuB;AACvB,yEAAyE;AAEzE;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,IAAY,EAAE,KAAa;IACnD,sBAAY,CAAC,YAAY,EAAE,EAAC,IAAI,EAAC,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAFD,8BAEC;AAED;;;;;GAKG;AACH,SAAgB,QAAQ,CAAC,IAAY;IACnC,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;AAC3C,CAAC;AAFD,4BAEC"}
|
|
||||||
67
node_modules/@actions/core/package.json
generated
vendored
67
node_modules/@actions/core/package.json
generated
vendored
@@ -1,67 +0,0 @@
|
|||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"@actions/core@1.2.0",
|
|
||||||
"c:\\EndBug\\GitHub\\add-and-commit"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "@actions/core@1.2.0",
|
|
||||||
"_id": "@actions/core@1.2.0",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha512-ZKdyhlSlyz38S6YFfPnyNgCDZuAF2T0Qv5eHflNWytPS8Qjvz39bZFMry9Bb/dpSnqWcNeav5yM2CTYpJeY+Dw==",
|
|
||||||
"_location": "/@actions/core",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "@actions/core@1.2.0",
|
|
||||||
"name": "@actions/core",
|
|
||||||
"escapedName": "@actions%2fcore",
|
|
||||||
"scope": "@actions",
|
|
||||||
"rawSpec": "1.2.0",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "1.2.0"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/@actions/core/-/core-1.2.0.tgz",
|
|
||||||
"_spec": "1.2.0",
|
|
||||||
"_where": "c:\\EndBug\\GitHub\\add-and-commit",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/actions/toolkit/issues"
|
|
||||||
},
|
|
||||||
"description": "Actions core lib",
|
|
||||||
"devDependencies": {
|
|
||||||
"@types/node": "^12.0.2"
|
|
||||||
},
|
|
||||||
"directories": {
|
|
||||||
"lib": "lib",
|
|
||||||
"test": "__tests__"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"lib"
|
|
||||||
],
|
|
||||||
"homepage": "https://github.com/actions/toolkit/tree/master/packages/core",
|
|
||||||
"keywords": [
|
|
||||||
"github",
|
|
||||||
"actions",
|
|
||||||
"core"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"main": "lib/core.js",
|
|
||||||
"name": "@actions/core",
|
|
||||||
"publishConfig": {
|
|
||||||
"access": "public"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/actions/toolkit.git",
|
|
||||||
"directory": "packages/core"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "echo \"Error: run tests from root\" && exit 1",
|
|
||||||
"tsc": "tsc"
|
|
||||||
},
|
|
||||||
"version": "1.2.0"
|
|
||||||
}
|
|
||||||
5
node_modules/balanced-match/.npmignore
generated
vendored
5
node_modules/balanced-match/.npmignore
generated
vendored
@@ -1,5 +0,0 @@
|
|||||||
test
|
|
||||||
.gitignore
|
|
||||||
.travis.yml
|
|
||||||
Makefile
|
|
||||||
example.js
|
|
||||||
21
node_modules/balanced-match/LICENSE.md
generated
vendored
21
node_modules/balanced-match/LICENSE.md
generated
vendored
@@ -1,21 +0,0 @@
|
|||||||
(MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
91
node_modules/balanced-match/README.md
generated
vendored
91
node_modules/balanced-match/README.md
generated
vendored
@@ -1,91 +0,0 @@
|
|||||||
# balanced-match
|
|
||||||
|
|
||||||
Match balanced string pairs, like `{` and `}` or `<b>` and `</b>`. Supports regular expressions as well!
|
|
||||||
|
|
||||||
[](http://travis-ci.org/juliangruber/balanced-match)
|
|
||||||
[](https://www.npmjs.org/package/balanced-match)
|
|
||||||
|
|
||||||
[](https://ci.testling.com/juliangruber/balanced-match)
|
|
||||||
|
|
||||||
## Example
|
|
||||||
|
|
||||||
Get the first matching pair of braces:
|
|
||||||
|
|
||||||
```js
|
|
||||||
var balanced = require('balanced-match');
|
|
||||||
|
|
||||||
console.log(balanced('{', '}', 'pre{in{nested}}post'));
|
|
||||||
console.log(balanced('{', '}', 'pre{first}between{second}post'));
|
|
||||||
console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre { in{nest} } post'));
|
|
||||||
```
|
|
||||||
|
|
||||||
The matches are:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ node example.js
|
|
||||||
{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' }
|
|
||||||
{ start: 3,
|
|
||||||
end: 9,
|
|
||||||
pre: 'pre',
|
|
||||||
body: 'first',
|
|
||||||
post: 'between{second}post' }
|
|
||||||
{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' }
|
|
||||||
```
|
|
||||||
|
|
||||||
## API
|
|
||||||
|
|
||||||
### var m = balanced(a, b, str)
|
|
||||||
|
|
||||||
For the first non-nested matching pair of `a` and `b` in `str`, return an
|
|
||||||
object with those keys:
|
|
||||||
|
|
||||||
* **start** the index of the first match of `a`
|
|
||||||
* **end** the index of the matching `b`
|
|
||||||
* **pre** the preamble, `a` and `b` not included
|
|
||||||
* **body** the match, `a` and `b` not included
|
|
||||||
* **post** the postscript, `a` and `b` not included
|
|
||||||
|
|
||||||
If there's no match, `undefined` will be returned.
|
|
||||||
|
|
||||||
If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`.
|
|
||||||
|
|
||||||
### var r = balanced.range(a, b, str)
|
|
||||||
|
|
||||||
For the first non-nested matching pair of `a` and `b` in `str`, return an
|
|
||||||
array with indexes: `[ <a index>, <b index> ]`.
|
|
||||||
|
|
||||||
If there's no match, `undefined` will be returned.
|
|
||||||
|
|
||||||
If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`.
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
With [npm](https://npmjs.org) do:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install balanced-match
|
|
||||||
```
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
(MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
59
node_modules/balanced-match/index.js
generated
vendored
59
node_modules/balanced-match/index.js
generated
vendored
@@ -1,59 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
module.exports = balanced;
|
|
||||||
function balanced(a, b, str) {
|
|
||||||
if (a instanceof RegExp) a = maybeMatch(a, str);
|
|
||||||
if (b instanceof RegExp) b = maybeMatch(b, str);
|
|
||||||
|
|
||||||
var r = range(a, b, str);
|
|
||||||
|
|
||||||
return r && {
|
|
||||||
start: r[0],
|
|
||||||
end: r[1],
|
|
||||||
pre: str.slice(0, r[0]),
|
|
||||||
body: str.slice(r[0] + a.length, r[1]),
|
|
||||||
post: str.slice(r[1] + b.length)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function maybeMatch(reg, str) {
|
|
||||||
var m = str.match(reg);
|
|
||||||
return m ? m[0] : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
balanced.range = range;
|
|
||||||
function range(a, b, str) {
|
|
||||||
var begs, beg, left, right, result;
|
|
||||||
var ai = str.indexOf(a);
|
|
||||||
var bi = str.indexOf(b, ai + 1);
|
|
||||||
var i = ai;
|
|
||||||
|
|
||||||
if (ai >= 0 && bi > 0) {
|
|
||||||
begs = [];
|
|
||||||
left = str.length;
|
|
||||||
|
|
||||||
while (i >= 0 && !result) {
|
|
||||||
if (i == ai) {
|
|
||||||
begs.push(i);
|
|
||||||
ai = str.indexOf(a, i + 1);
|
|
||||||
} else if (begs.length == 1) {
|
|
||||||
result = [ begs.pop(), bi ];
|
|
||||||
} else {
|
|
||||||
beg = begs.pop();
|
|
||||||
if (beg < left) {
|
|
||||||
left = beg;
|
|
||||||
right = bi;
|
|
||||||
}
|
|
||||||
|
|
||||||
bi = str.indexOf(b, i + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
i = ai < bi && ai >= 0 ? ai : bi;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (begs.length) {
|
|
||||||
result = [ left, right ];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
80
node_modules/balanced-match/package.json
generated
vendored
80
node_modules/balanced-match/package.json
generated
vendored
@@ -1,80 +0,0 @@
|
|||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"balanced-match@1.0.0",
|
|
||||||
"c:\\EndBug\\GitHub\\add-and-commit"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "balanced-match@1.0.0",
|
|
||||||
"_id": "balanced-match@1.0.0",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
|
||||||
"_location": "/balanced-match",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "balanced-match@1.0.0",
|
|
||||||
"name": "balanced-match",
|
|
||||||
"escapedName": "balanced-match",
|
|
||||||
"rawSpec": "1.0.0",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "1.0.0"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/brace-expansion"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
|
||||||
"_spec": "1.0.0",
|
|
||||||
"_where": "c:\\EndBug\\GitHub\\add-and-commit",
|
|
||||||
"author": {
|
|
||||||
"name": "Julian Gruber",
|
|
||||||
"email": "mail@juliangruber.com",
|
|
||||||
"url": "http://juliangruber.com"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/juliangruber/balanced-match/issues"
|
|
||||||
},
|
|
||||||
"dependencies": {},
|
|
||||||
"description": "Match balanced character pairs, like \"{\" and \"}\"",
|
|
||||||
"devDependencies": {
|
|
||||||
"matcha": "^0.7.0",
|
|
||||||
"tape": "^4.6.0"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/juliangruber/balanced-match",
|
|
||||||
"keywords": [
|
|
||||||
"match",
|
|
||||||
"regexp",
|
|
||||||
"test",
|
|
||||||
"balanced",
|
|
||||||
"parse"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"main": "index.js",
|
|
||||||
"name": "balanced-match",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git://github.com/juliangruber/balanced-match.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"bench": "make bench",
|
|
||||||
"test": "make test"
|
|
||||||
},
|
|
||||||
"testling": {
|
|
||||||
"files": "test/*.js",
|
|
||||||
"browsers": [
|
|
||||||
"ie/8..latest",
|
|
||||||
"firefox/20..latest",
|
|
||||||
"firefox/nightly",
|
|
||||||
"chrome/25..latest",
|
|
||||||
"chrome/canary",
|
|
||||||
"opera/12..latest",
|
|
||||||
"opera/next",
|
|
||||||
"safari/5.1..latest",
|
|
||||||
"ipad/6.0..latest",
|
|
||||||
"iphone/6.0..latest",
|
|
||||||
"android-browser/4.2..latest"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"version": "1.0.0"
|
|
||||||
}
|
|
||||||
21
node_modules/brace-expansion/LICENSE
generated
vendored
21
node_modules/brace-expansion/LICENSE
generated
vendored
@@ -1,21 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
129
node_modules/brace-expansion/README.md
generated
vendored
129
node_modules/brace-expansion/README.md
generated
vendored
@@ -1,129 +0,0 @@
|
|||||||
# brace-expansion
|
|
||||||
|
|
||||||
[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html),
|
|
||||||
as known from sh/bash, in JavaScript.
|
|
||||||
|
|
||||||
[](http://travis-ci.org/juliangruber/brace-expansion)
|
|
||||||
[](https://www.npmjs.org/package/brace-expansion)
|
|
||||||
[](https://greenkeeper.io/)
|
|
||||||
|
|
||||||
[](https://ci.testling.com/juliangruber/brace-expansion)
|
|
||||||
|
|
||||||
## Example
|
|
||||||
|
|
||||||
```js
|
|
||||||
var expand = require('brace-expansion');
|
|
||||||
|
|
||||||
expand('file-{a,b,c}.jpg')
|
|
||||||
// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
|
|
||||||
|
|
||||||
expand('-v{,,}')
|
|
||||||
// => ['-v', '-v', '-v']
|
|
||||||
|
|
||||||
expand('file{0..2}.jpg')
|
|
||||||
// => ['file0.jpg', 'file1.jpg', 'file2.jpg']
|
|
||||||
|
|
||||||
expand('file-{a..c}.jpg')
|
|
||||||
// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
|
|
||||||
|
|
||||||
expand('file{2..0}.jpg')
|
|
||||||
// => ['file2.jpg', 'file1.jpg', 'file0.jpg']
|
|
||||||
|
|
||||||
expand('file{0..4..2}.jpg')
|
|
||||||
// => ['file0.jpg', 'file2.jpg', 'file4.jpg']
|
|
||||||
|
|
||||||
expand('file-{a..e..2}.jpg')
|
|
||||||
// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg']
|
|
||||||
|
|
||||||
expand('file{00..10..5}.jpg')
|
|
||||||
// => ['file00.jpg', 'file05.jpg', 'file10.jpg']
|
|
||||||
|
|
||||||
expand('{{A..C},{a..c}}')
|
|
||||||
// => ['A', 'B', 'C', 'a', 'b', 'c']
|
|
||||||
|
|
||||||
expand('ppp{,config,oe{,conf}}')
|
|
||||||
// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf']
|
|
||||||
```
|
|
||||||
|
|
||||||
## API
|
|
||||||
|
|
||||||
```js
|
|
||||||
var expand = require('brace-expansion');
|
|
||||||
```
|
|
||||||
|
|
||||||
### var expanded = expand(str)
|
|
||||||
|
|
||||||
Return an array of all possible and valid expansions of `str`. If none are
|
|
||||||
found, `[str]` is returned.
|
|
||||||
|
|
||||||
Valid expansions are:
|
|
||||||
|
|
||||||
```js
|
|
||||||
/^(.*,)+(.+)?$/
|
|
||||||
// {a,b,...}
|
|
||||||
```
|
|
||||||
|
|
||||||
A comma separated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`.
|
|
||||||
|
|
||||||
```js
|
|
||||||
/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
|
|
||||||
// {x..y[..incr]}
|
|
||||||
```
|
|
||||||
|
|
||||||
A numeric sequence from `x` to `y` inclusive, with optional increment.
|
|
||||||
If `x` or `y` start with a leading `0`, all the numbers will be padded
|
|
||||||
to have equal length. Negative numbers and backwards iteration work too.
|
|
||||||
|
|
||||||
```js
|
|
||||||
/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
|
|
||||||
// {x..y[..incr]}
|
|
||||||
```
|
|
||||||
|
|
||||||
An alphabetic sequence from `x` to `y` inclusive, with optional increment.
|
|
||||||
`x` and `y` must be exactly one character, and if given, `incr` must be a
|
|
||||||
number.
|
|
||||||
|
|
||||||
For compatibility reasons, the string `${` is not eligible for brace expansion.
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
With [npm](https://npmjs.org) do:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install brace-expansion
|
|
||||||
```
|
|
||||||
|
|
||||||
## Contributors
|
|
||||||
|
|
||||||
- [Julian Gruber](https://github.com/juliangruber)
|
|
||||||
- [Isaac Z. Schlueter](https://github.com/isaacs)
|
|
||||||
|
|
||||||
## Sponsors
|
|
||||||
|
|
||||||
This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)!
|
|
||||||
|
|
||||||
Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)!
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
(MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
201
node_modules/brace-expansion/index.js
generated
vendored
201
node_modules/brace-expansion/index.js
generated
vendored
@@ -1,201 +0,0 @@
|
|||||||
var concatMap = require('concat-map');
|
|
||||||
var balanced = require('balanced-match');
|
|
||||||
|
|
||||||
module.exports = expandTop;
|
|
||||||
|
|
||||||
var escSlash = '\0SLASH'+Math.random()+'\0';
|
|
||||||
var escOpen = '\0OPEN'+Math.random()+'\0';
|
|
||||||
var escClose = '\0CLOSE'+Math.random()+'\0';
|
|
||||||
var escComma = '\0COMMA'+Math.random()+'\0';
|
|
||||||
var escPeriod = '\0PERIOD'+Math.random()+'\0';
|
|
||||||
|
|
||||||
function numeric(str) {
|
|
||||||
return parseInt(str, 10) == str
|
|
||||||
? parseInt(str, 10)
|
|
||||||
: str.charCodeAt(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
function escapeBraces(str) {
|
|
||||||
return str.split('\\\\').join(escSlash)
|
|
||||||
.split('\\{').join(escOpen)
|
|
||||||
.split('\\}').join(escClose)
|
|
||||||
.split('\\,').join(escComma)
|
|
||||||
.split('\\.').join(escPeriod);
|
|
||||||
}
|
|
||||||
|
|
||||||
function unescapeBraces(str) {
|
|
||||||
return str.split(escSlash).join('\\')
|
|
||||||
.split(escOpen).join('{')
|
|
||||||
.split(escClose).join('}')
|
|
||||||
.split(escComma).join(',')
|
|
||||||
.split(escPeriod).join('.');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Basically just str.split(","), but handling cases
|
|
||||||
// where we have nested braced sections, which should be
|
|
||||||
// treated as individual members, like {a,{b,c},d}
|
|
||||||
function parseCommaParts(str) {
|
|
||||||
if (!str)
|
|
||||||
return [''];
|
|
||||||
|
|
||||||
var parts = [];
|
|
||||||
var m = balanced('{', '}', str);
|
|
||||||
|
|
||||||
if (!m)
|
|
||||||
return str.split(',');
|
|
||||||
|
|
||||||
var pre = m.pre;
|
|
||||||
var body = m.body;
|
|
||||||
var post = m.post;
|
|
||||||
var p = pre.split(',');
|
|
||||||
|
|
||||||
p[p.length-1] += '{' + body + '}';
|
|
||||||
var postParts = parseCommaParts(post);
|
|
||||||
if (post.length) {
|
|
||||||
p[p.length-1] += postParts.shift();
|
|
||||||
p.push.apply(p, postParts);
|
|
||||||
}
|
|
||||||
|
|
||||||
parts.push.apply(parts, p);
|
|
||||||
|
|
||||||
return parts;
|
|
||||||
}
|
|
||||||
|
|
||||||
function expandTop(str) {
|
|
||||||
if (!str)
|
|
||||||
return [];
|
|
||||||
|
|
||||||
// I don't know why Bash 4.3 does this, but it does.
|
|
||||||
// Anything starting with {} will have the first two bytes preserved
|
|
||||||
// but *only* at the top level, so {},a}b will not expand to anything,
|
|
||||||
// but a{},b}c will be expanded to [a}c,abc].
|
|
||||||
// One could argue that this is a bug in Bash, but since the goal of
|
|
||||||
// this module is to match Bash's rules, we escape a leading {}
|
|
||||||
if (str.substr(0, 2) === '{}') {
|
|
||||||
str = '\\{\\}' + str.substr(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
return expand(escapeBraces(str), true).map(unescapeBraces);
|
|
||||||
}
|
|
||||||
|
|
||||||
function identity(e) {
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
|
|
||||||
function embrace(str) {
|
|
||||||
return '{' + str + '}';
|
|
||||||
}
|
|
||||||
function isPadded(el) {
|
|
||||||
return /^-?0\d/.test(el);
|
|
||||||
}
|
|
||||||
|
|
||||||
function lte(i, y) {
|
|
||||||
return i <= y;
|
|
||||||
}
|
|
||||||
function gte(i, y) {
|
|
||||||
return i >= y;
|
|
||||||
}
|
|
||||||
|
|
||||||
function expand(str, isTop) {
|
|
||||||
var expansions = [];
|
|
||||||
|
|
||||||
var m = balanced('{', '}', str);
|
|
||||||
if (!m || /\$$/.test(m.pre)) return [str];
|
|
||||||
|
|
||||||
var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
|
|
||||||
var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
|
|
||||||
var isSequence = isNumericSequence || isAlphaSequence;
|
|
||||||
var isOptions = m.body.indexOf(',') >= 0;
|
|
||||||
if (!isSequence && !isOptions) {
|
|
||||||
// {a},b}
|
|
||||||
if (m.post.match(/,.*\}/)) {
|
|
||||||
str = m.pre + '{' + m.body + escClose + m.post;
|
|
||||||
return expand(str);
|
|
||||||
}
|
|
||||||
return [str];
|
|
||||||
}
|
|
||||||
|
|
||||||
var n;
|
|
||||||
if (isSequence) {
|
|
||||||
n = m.body.split(/\.\./);
|
|
||||||
} else {
|
|
||||||
n = parseCommaParts(m.body);
|
|
||||||
if (n.length === 1) {
|
|
||||||
// x{{a,b}}y ==> x{a}y x{b}y
|
|
||||||
n = expand(n[0], false).map(embrace);
|
|
||||||
if (n.length === 1) {
|
|
||||||
var post = m.post.length
|
|
||||||
? expand(m.post, false)
|
|
||||||
: [''];
|
|
||||||
return post.map(function(p) {
|
|
||||||
return m.pre + n[0] + p;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// at this point, n is the parts, and we know it's not a comma set
|
|
||||||
// with a single entry.
|
|
||||||
|
|
||||||
// no need to expand pre, since it is guaranteed to be free of brace-sets
|
|
||||||
var pre = m.pre;
|
|
||||||
var post = m.post.length
|
|
||||||
? expand(m.post, false)
|
|
||||||
: [''];
|
|
||||||
|
|
||||||
var N;
|
|
||||||
|
|
||||||
if (isSequence) {
|
|
||||||
var x = numeric(n[0]);
|
|
||||||
var y = numeric(n[1]);
|
|
||||||
var width = Math.max(n[0].length, n[1].length)
|
|
||||||
var incr = n.length == 3
|
|
||||||
? Math.abs(numeric(n[2]))
|
|
||||||
: 1;
|
|
||||||
var test = lte;
|
|
||||||
var reverse = y < x;
|
|
||||||
if (reverse) {
|
|
||||||
incr *= -1;
|
|
||||||
test = gte;
|
|
||||||
}
|
|
||||||
var pad = n.some(isPadded);
|
|
||||||
|
|
||||||
N = [];
|
|
||||||
|
|
||||||
for (var i = x; test(i, y); i += incr) {
|
|
||||||
var c;
|
|
||||||
if (isAlphaSequence) {
|
|
||||||
c = String.fromCharCode(i);
|
|
||||||
if (c === '\\')
|
|
||||||
c = '';
|
|
||||||
} else {
|
|
||||||
c = String(i);
|
|
||||||
if (pad) {
|
|
||||||
var need = width - c.length;
|
|
||||||
if (need > 0) {
|
|
||||||
var z = new Array(need + 1).join('0');
|
|
||||||
if (i < 0)
|
|
||||||
c = '-' + z + c.slice(1);
|
|
||||||
else
|
|
||||||
c = z + c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
N.push(c);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
N = concatMap(n, function(el) { return expand(el, false) });
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var j = 0; j < N.length; j++) {
|
|
||||||
for (var k = 0; k < post.length; k++) {
|
|
||||||
var expansion = pre + N[j] + post[k];
|
|
||||||
if (!isTop || isSequence || expansion)
|
|
||||||
expansions.push(expansion);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return expansions;
|
|
||||||
}
|
|
||||||
|
|
||||||
78
node_modules/brace-expansion/package.json
generated
vendored
78
node_modules/brace-expansion/package.json
generated
vendored
@@ -1,78 +0,0 @@
|
|||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"brace-expansion@1.1.11",
|
|
||||||
"c:\\EndBug\\GitHub\\add-and-commit"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "brace-expansion@1.1.11",
|
|
||||||
"_id": "brace-expansion@1.1.11",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
|
||||||
"_location": "/brace-expansion",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "brace-expansion@1.1.11",
|
|
||||||
"name": "brace-expansion",
|
|
||||||
"escapedName": "brace-expansion",
|
|
||||||
"rawSpec": "1.1.11",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "1.1.11"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/minimatch"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
|
||||||
"_spec": "1.1.11",
|
|
||||||
"_where": "c:\\EndBug\\GitHub\\add-and-commit",
|
|
||||||
"author": {
|
|
||||||
"name": "Julian Gruber",
|
|
||||||
"email": "mail@juliangruber.com",
|
|
||||||
"url": "http://juliangruber.com"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/juliangruber/brace-expansion/issues"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"balanced-match": "^1.0.0",
|
|
||||||
"concat-map": "0.0.1"
|
|
||||||
},
|
|
||||||
"description": "Brace expansion as known from sh/bash",
|
|
||||||
"devDependencies": {
|
|
||||||
"matcha": "^0.7.0",
|
|
||||||
"tape": "^4.6.0"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/juliangruber/brace-expansion",
|
|
||||||
"keywords": [],
|
|
||||||
"license": "MIT",
|
|
||||||
"main": "index.js",
|
|
||||||
"name": "brace-expansion",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git://github.com/juliangruber/brace-expansion.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"bench": "matcha test/perf/bench.js",
|
|
||||||
"gentest": "bash test/generate.sh",
|
|
||||||
"test": "tape test/*.js"
|
|
||||||
},
|
|
||||||
"testling": {
|
|
||||||
"files": "test/*.js",
|
|
||||||
"browsers": [
|
|
||||||
"ie/8..latest",
|
|
||||||
"firefox/20..latest",
|
|
||||||
"firefox/nightly",
|
|
||||||
"chrome/25..latest",
|
|
||||||
"chrome/canary",
|
|
||||||
"opera/12..latest",
|
|
||||||
"opera/next",
|
|
||||||
"safari/5.1..latest",
|
|
||||||
"ipad/6.0..latest",
|
|
||||||
"iphone/6.0..latest",
|
|
||||||
"android-browser/4.2..latest"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"version": "1.1.11"
|
|
||||||
}
|
|
||||||
4
node_modules/concat-map/.travis.yml
generated
vendored
4
node_modules/concat-map/.travis.yml
generated
vendored
@@ -1,4 +0,0 @@
|
|||||||
language: node_js
|
|
||||||
node_js:
|
|
||||||
- 0.4
|
|
||||||
- 0.6
|
|
||||||
18
node_modules/concat-map/LICENSE
generated
vendored
18
node_modules/concat-map/LICENSE
generated
vendored
@@ -1,18 +0,0 @@
|
|||||||
This software is released under the MIT license:
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
62
node_modules/concat-map/README.markdown
generated
vendored
62
node_modules/concat-map/README.markdown
generated
vendored
@@ -1,62 +0,0 @@
|
|||||||
concat-map
|
|
||||||
==========
|
|
||||||
|
|
||||||
Concatenative mapdashery.
|
|
||||||
|
|
||||||
[](http://ci.testling.com/substack/node-concat-map)
|
|
||||||
|
|
||||||
[](http://travis-ci.org/substack/node-concat-map)
|
|
||||||
|
|
||||||
example
|
|
||||||
=======
|
|
||||||
|
|
||||||
``` js
|
|
||||||
var concatMap = require('concat-map');
|
|
||||||
var xs = [ 1, 2, 3, 4, 5, 6 ];
|
|
||||||
var ys = concatMap(xs, function (x) {
|
|
||||||
return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
|
|
||||||
});
|
|
||||||
console.dir(ys);
|
|
||||||
```
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
```
|
|
||||||
[ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]
|
|
||||||
```
|
|
||||||
|
|
||||||
methods
|
|
||||||
=======
|
|
||||||
|
|
||||||
``` js
|
|
||||||
var concatMap = require('concat-map')
|
|
||||||
```
|
|
||||||
|
|
||||||
concatMap(xs, fn)
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
Return an array of concatenated elements by calling `fn(x, i)` for each element
|
|
||||||
`x` and each index `i` in the array `xs`.
|
|
||||||
|
|
||||||
When `fn(x, i)` returns an array, its result will be concatenated with the
|
|
||||||
result array. If `fn(x, i)` returns anything else, that value will be pushed
|
|
||||||
onto the end of the result array.
|
|
||||||
|
|
||||||
install
|
|
||||||
=======
|
|
||||||
|
|
||||||
With [npm](http://npmjs.org) do:
|
|
||||||
|
|
||||||
```
|
|
||||||
npm install concat-map
|
|
||||||
```
|
|
||||||
|
|
||||||
license
|
|
||||||
=======
|
|
||||||
|
|
||||||
MIT
|
|
||||||
|
|
||||||
notes
|
|
||||||
=====
|
|
||||||
|
|
||||||
This module was written while sitting high above the ground in a tree.
|
|
||||||
6
node_modules/concat-map/example/map.js
generated
vendored
6
node_modules/concat-map/example/map.js
generated
vendored
@@ -1,6 +0,0 @@
|
|||||||
var concatMap = require('../');
|
|
||||||
var xs = [ 1, 2, 3, 4, 5, 6 ];
|
|
||||||
var ys = concatMap(xs, function (x) {
|
|
||||||
return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
|
|
||||||
});
|
|
||||||
console.dir(ys);
|
|
||||||
13
node_modules/concat-map/index.js
generated
vendored
13
node_modules/concat-map/index.js
generated
vendored
@@ -1,13 +0,0 @@
|
|||||||
module.exports = function (xs, fn) {
|
|
||||||
var res = [];
|
|
||||||
for (var i = 0; i < xs.length; i++) {
|
|
||||||
var x = fn(xs[i], i);
|
|
||||||
if (isArray(x)) res.push.apply(res, x);
|
|
||||||
else res.push(x);
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
};
|
|
||||||
|
|
||||||
var isArray = Array.isArray || function (xs) {
|
|
||||||
return Object.prototype.toString.call(xs) === '[object Array]';
|
|
||||||
};
|
|
||||||
91
node_modules/concat-map/package.json
generated
vendored
91
node_modules/concat-map/package.json
generated
vendored
@@ -1,91 +0,0 @@
|
|||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"concat-map@0.0.1",
|
|
||||||
"c:\\EndBug\\GitHub\\add-and-commit"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "concat-map@0.0.1",
|
|
||||||
"_id": "concat-map@0.0.1",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
|
||||||
"_location": "/concat-map",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "concat-map@0.0.1",
|
|
||||||
"name": "concat-map",
|
|
||||||
"escapedName": "concat-map",
|
|
||||||
"rawSpec": "0.0.1",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "0.0.1"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/brace-expansion"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
|
||||||
"_spec": "0.0.1",
|
|
||||||
"_where": "c:\\EndBug\\GitHub\\add-and-commit",
|
|
||||||
"author": {
|
|
||||||
"name": "James Halliday",
|
|
||||||
"email": "mail@substack.net",
|
|
||||||
"url": "http://substack.net"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/substack/node-concat-map/issues"
|
|
||||||
},
|
|
||||||
"description": "concatenative mapdashery",
|
|
||||||
"devDependencies": {
|
|
||||||
"tape": "~2.4.0"
|
|
||||||
},
|
|
||||||
"directories": {
|
|
||||||
"example": "example",
|
|
||||||
"test": "test"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/substack/node-concat-map#readme",
|
|
||||||
"keywords": [
|
|
||||||
"concat",
|
|
||||||
"concatMap",
|
|
||||||
"map",
|
|
||||||
"functional",
|
|
||||||
"higher-order"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"main": "index.js",
|
|
||||||
"name": "concat-map",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git://github.com/substack/node-concat-map.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "tape test/*.js"
|
|
||||||
},
|
|
||||||
"testling": {
|
|
||||||
"files": "test/*.js",
|
|
||||||
"browsers": {
|
|
||||||
"ie": [
|
|
||||||
6,
|
|
||||||
7,
|
|
||||||
8,
|
|
||||||
9
|
|
||||||
],
|
|
||||||
"ff": [
|
|
||||||
3.5,
|
|
||||||
10,
|
|
||||||
15
|
|
||||||
],
|
|
||||||
"chrome": [
|
|
||||||
10,
|
|
||||||
22
|
|
||||||
],
|
|
||||||
"safari": [
|
|
||||||
5.1
|
|
||||||
],
|
|
||||||
"opera": [
|
|
||||||
12
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"version": "0.0.1"
|
|
||||||
}
|
|
||||||
39
node_modules/concat-map/test/map.js
generated
vendored
39
node_modules/concat-map/test/map.js
generated
vendored
@@ -1,39 +0,0 @@
|
|||||||
var concatMap = require('../');
|
|
||||||
var test = require('tape');
|
|
||||||
|
|
||||||
test('empty or not', function (t) {
|
|
||||||
var xs = [ 1, 2, 3, 4, 5, 6 ];
|
|
||||||
var ixes = [];
|
|
||||||
var ys = concatMap(xs, function (x, ix) {
|
|
||||||
ixes.push(ix);
|
|
||||||
return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
|
|
||||||
});
|
|
||||||
t.same(ys, [ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]);
|
|
||||||
t.same(ixes, [ 0, 1, 2, 3, 4, 5 ]);
|
|
||||||
t.end();
|
|
||||||
});
|
|
||||||
|
|
||||||
test('always something', function (t) {
|
|
||||||
var xs = [ 'a', 'b', 'c', 'd' ];
|
|
||||||
var ys = concatMap(xs, function (x) {
|
|
||||||
return x === 'b' ? [ 'B', 'B', 'B' ] : [ x ];
|
|
||||||
});
|
|
||||||
t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]);
|
|
||||||
t.end();
|
|
||||||
});
|
|
||||||
|
|
||||||
test('scalars', function (t) {
|
|
||||||
var xs = [ 'a', 'b', 'c', 'd' ];
|
|
||||||
var ys = concatMap(xs, function (x) {
|
|
||||||
return x === 'b' ? [ 'B', 'B', 'B' ] : x;
|
|
||||||
});
|
|
||||||
t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]);
|
|
||||||
t.end();
|
|
||||||
});
|
|
||||||
|
|
||||||
test('undefs', function (t) {
|
|
||||||
var xs = [ 'a', 'b', 'c', 'd' ];
|
|
||||||
var ys = concatMap(xs, function () {});
|
|
||||||
t.same(ys, [ undefined, undefined, undefined, undefined ]);
|
|
||||||
t.end();
|
|
||||||
});
|
|
||||||
43
node_modules/fs.realpath/LICENSE
generated
vendored
43
node_modules/fs.realpath/LICENSE
generated
vendored
@@ -1,43 +0,0 @@
|
|||||||
The ISC License
|
|
||||||
|
|
||||||
Copyright (c) Isaac Z. Schlueter and Contributors
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
||||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
|
|
||||||
----
|
|
||||||
|
|
||||||
This library bundles a version of the `fs.realpath` and `fs.realpathSync`
|
|
||||||
methods from Node.js v0.10 under the terms of the Node.js MIT license.
|
|
||||||
|
|
||||||
Node's license follows, also included at the header of `old.js` which contains
|
|
||||||
the licensed code:
|
|
||||||
|
|
||||||
Copyright Joyent, Inc. and other Node contributors.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
copy of this software and associated documentation files (the "Software"),
|
|
||||||
to deal in the Software without restriction, including without limitation
|
|
||||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
DEALINGS IN THE SOFTWARE.
|
|
||||||
33
node_modules/fs.realpath/README.md
generated
vendored
33
node_modules/fs.realpath/README.md
generated
vendored
@@ -1,33 +0,0 @@
|
|||||||
# fs.realpath
|
|
||||||
|
|
||||||
A backwards-compatible fs.realpath for Node v6 and above
|
|
||||||
|
|
||||||
In Node v6, the JavaScript implementation of fs.realpath was replaced
|
|
||||||
with a faster (but less resilient) native implementation. That raises
|
|
||||||
new and platform-specific errors and cannot handle long or excessively
|
|
||||||
symlink-looping paths.
|
|
||||||
|
|
||||||
This module handles those cases by detecting the new errors and
|
|
||||||
falling back to the JavaScript implementation. On versions of Node
|
|
||||||
prior to v6, it has no effect.
|
|
||||||
|
|
||||||
## USAGE
|
|
||||||
|
|
||||||
```js
|
|
||||||
var rp = require('fs.realpath')
|
|
||||||
|
|
||||||
// async version
|
|
||||||
rp.realpath(someLongAndLoopingPath, function (er, real) {
|
|
||||||
// the ELOOP was handled, but it was a bit slower
|
|
||||||
})
|
|
||||||
|
|
||||||
// sync version
|
|
||||||
var real = rp.realpathSync(someLongAndLoopingPath)
|
|
||||||
|
|
||||||
// monkeypatch at your own risk!
|
|
||||||
// This replaces the fs.realpath/fs.realpathSync builtins
|
|
||||||
rp.monkeypatch()
|
|
||||||
|
|
||||||
// un-do the monkeypatching
|
|
||||||
rp.unmonkeypatch()
|
|
||||||
```
|
|
||||||
66
node_modules/fs.realpath/index.js
generated
vendored
66
node_modules/fs.realpath/index.js
generated
vendored
@@ -1,66 +0,0 @@
|
|||||||
module.exports = realpath
|
|
||||||
realpath.realpath = realpath
|
|
||||||
realpath.sync = realpathSync
|
|
||||||
realpath.realpathSync = realpathSync
|
|
||||||
realpath.monkeypatch = monkeypatch
|
|
||||||
realpath.unmonkeypatch = unmonkeypatch
|
|
||||||
|
|
||||||
var fs = require('fs')
|
|
||||||
var origRealpath = fs.realpath
|
|
||||||
var origRealpathSync = fs.realpathSync
|
|
||||||
|
|
||||||
var version = process.version
|
|
||||||
var ok = /^v[0-5]\./.test(version)
|
|
||||||
var old = require('./old.js')
|
|
||||||
|
|
||||||
function newError (er) {
|
|
||||||
return er && er.syscall === 'realpath' && (
|
|
||||||
er.code === 'ELOOP' ||
|
|
||||||
er.code === 'ENOMEM' ||
|
|
||||||
er.code === 'ENAMETOOLONG'
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
function realpath (p, cache, cb) {
|
|
||||||
if (ok) {
|
|
||||||
return origRealpath(p, cache, cb)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof cache === 'function') {
|
|
||||||
cb = cache
|
|
||||||
cache = null
|
|
||||||
}
|
|
||||||
origRealpath(p, cache, function (er, result) {
|
|
||||||
if (newError(er)) {
|
|
||||||
old.realpath(p, cache, cb)
|
|
||||||
} else {
|
|
||||||
cb(er, result)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function realpathSync (p, cache) {
|
|
||||||
if (ok) {
|
|
||||||
return origRealpathSync(p, cache)
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
return origRealpathSync(p, cache)
|
|
||||||
} catch (er) {
|
|
||||||
if (newError(er)) {
|
|
||||||
return old.realpathSync(p, cache)
|
|
||||||
} else {
|
|
||||||
throw er
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function monkeypatch () {
|
|
||||||
fs.realpath = realpath
|
|
||||||
fs.realpathSync = realpathSync
|
|
||||||
}
|
|
||||||
|
|
||||||
function unmonkeypatch () {
|
|
||||||
fs.realpath = origRealpath
|
|
||||||
fs.realpathSync = origRealpathSync
|
|
||||||
}
|
|
||||||
303
node_modules/fs.realpath/old.js
generated
vendored
303
node_modules/fs.realpath/old.js
generated
vendored
@@ -1,303 +0,0 @@
|
|||||||
// Copyright Joyent, Inc. and other Node contributors.
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
// copy of this software and associated documentation files (the
|
|
||||||
// "Software"), to deal in the Software without restriction, including
|
|
||||||
// without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
||||||
// persons to whom the Software is furnished to do so, subject to the
|
|
||||||
// following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included
|
|
||||||
// in all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
||||||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
||||||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
||||||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
||||||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
var pathModule = require('path');
|
|
||||||
var isWindows = process.platform === 'win32';
|
|
||||||
var fs = require('fs');
|
|
||||||
|
|
||||||
// JavaScript implementation of realpath, ported from node pre-v6
|
|
||||||
|
|
||||||
var DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG);
|
|
||||||
|
|
||||||
function rethrow() {
|
|
||||||
// Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and
|
|
||||||
// is fairly slow to generate.
|
|
||||||
var callback;
|
|
||||||
if (DEBUG) {
|
|
||||||
var backtrace = new Error;
|
|
||||||
callback = debugCallback;
|
|
||||||
} else
|
|
||||||
callback = missingCallback;
|
|
||||||
|
|
||||||
return callback;
|
|
||||||
|
|
||||||
function debugCallback(err) {
|
|
||||||
if (err) {
|
|
||||||
backtrace.message = err.message;
|
|
||||||
err = backtrace;
|
|
||||||
missingCallback(err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function missingCallback(err) {
|
|
||||||
if (err) {
|
|
||||||
if (process.throwDeprecation)
|
|
||||||
throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs
|
|
||||||
else if (!process.noDeprecation) {
|
|
||||||
var msg = 'fs: missing callback ' + (err.stack || err.message);
|
|
||||||
if (process.traceDeprecation)
|
|
||||||
console.trace(msg);
|
|
||||||
else
|
|
||||||
console.error(msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function maybeCallback(cb) {
|
|
||||||
return typeof cb === 'function' ? cb : rethrow();
|
|
||||||
}
|
|
||||||
|
|
||||||
var normalize = pathModule.normalize;
|
|
||||||
|
|
||||||
// Regexp that finds the next partion of a (partial) path
|
|
||||||
// result is [base_with_slash, base], e.g. ['somedir/', 'somedir']
|
|
||||||
if (isWindows) {
|
|
||||||
var nextPartRe = /(.*?)(?:[\/\\]+|$)/g;
|
|
||||||
} else {
|
|
||||||
var nextPartRe = /(.*?)(?:[\/]+|$)/g;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Regex to find the device root, including trailing slash. E.g. 'c:\\'.
|
|
||||||
if (isWindows) {
|
|
||||||
var splitRootRe = /^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/;
|
|
||||||
} else {
|
|
||||||
var splitRootRe = /^[\/]*/;
|
|
||||||
}
|
|
||||||
|
|
||||||
exports.realpathSync = function realpathSync(p, cache) {
|
|
||||||
// make p is absolute
|
|
||||||
p = pathModule.resolve(p);
|
|
||||||
|
|
||||||
if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {
|
|
||||||
return cache[p];
|
|
||||||
}
|
|
||||||
|
|
||||||
var original = p,
|
|
||||||
seenLinks = {},
|
|
||||||
knownHard = {};
|
|
||||||
|
|
||||||
// current character position in p
|
|
||||||
var pos;
|
|
||||||
// the partial path so far, including a trailing slash if any
|
|
||||||
var current;
|
|
||||||
// the partial path without a trailing slash (except when pointing at a root)
|
|
||||||
var base;
|
|
||||||
// the partial path scanned in the previous round, with slash
|
|
||||||
var previous;
|
|
||||||
|
|
||||||
start();
|
|
||||||
|
|
||||||
function start() {
|
|
||||||
// Skip over roots
|
|
||||||
var m = splitRootRe.exec(p);
|
|
||||||
pos = m[0].length;
|
|
||||||
current = m[0];
|
|
||||||
base = m[0];
|
|
||||||
previous = '';
|
|
||||||
|
|
||||||
// On windows, check that the root exists. On unix there is no need.
|
|
||||||
if (isWindows && !knownHard[base]) {
|
|
||||||
fs.lstatSync(base);
|
|
||||||
knownHard[base] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// walk down the path, swapping out linked pathparts for their real
|
|
||||||
// values
|
|
||||||
// NB: p.length changes.
|
|
||||||
while (pos < p.length) {
|
|
||||||
// find the next part
|
|
||||||
nextPartRe.lastIndex = pos;
|
|
||||||
var result = nextPartRe.exec(p);
|
|
||||||
previous = current;
|
|
||||||
current += result[0];
|
|
||||||
base = previous + result[1];
|
|
||||||
pos = nextPartRe.lastIndex;
|
|
||||||
|
|
||||||
// continue if not a symlink
|
|
||||||
if (knownHard[base] || (cache && cache[base] === base)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var resolvedLink;
|
|
||||||
if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {
|
|
||||||
// some known symbolic link. no need to stat again.
|
|
||||||
resolvedLink = cache[base];
|
|
||||||
} else {
|
|
||||||
var stat = fs.lstatSync(base);
|
|
||||||
if (!stat.isSymbolicLink()) {
|
|
||||||
knownHard[base] = true;
|
|
||||||
if (cache) cache[base] = base;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// read the link if it wasn't read before
|
|
||||||
// dev/ino always return 0 on windows, so skip the check.
|
|
||||||
var linkTarget = null;
|
|
||||||
if (!isWindows) {
|
|
||||||
var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);
|
|
||||||
if (seenLinks.hasOwnProperty(id)) {
|
|
||||||
linkTarget = seenLinks[id];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (linkTarget === null) {
|
|
||||||
fs.statSync(base);
|
|
||||||
linkTarget = fs.readlinkSync(base);
|
|
||||||
}
|
|
||||||
resolvedLink = pathModule.resolve(previous, linkTarget);
|
|
||||||
// track this, if given a cache.
|
|
||||||
if (cache) cache[base] = resolvedLink;
|
|
||||||
if (!isWindows) seenLinks[id] = linkTarget;
|
|
||||||
}
|
|
||||||
|
|
||||||
// resolve the link, then start over
|
|
||||||
p = pathModule.resolve(resolvedLink, p.slice(pos));
|
|
||||||
start();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cache) cache[original] = p;
|
|
||||||
|
|
||||||
return p;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
exports.realpath = function realpath(p, cache, cb) {
|
|
||||||
if (typeof cb !== 'function') {
|
|
||||||
cb = maybeCallback(cache);
|
|
||||||
cache = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// make p is absolute
|
|
||||||
p = pathModule.resolve(p);
|
|
||||||
|
|
||||||
if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {
|
|
||||||
return process.nextTick(cb.bind(null, null, cache[p]));
|
|
||||||
}
|
|
||||||
|
|
||||||
var original = p,
|
|
||||||
seenLinks = {},
|
|
||||||
knownHard = {};
|
|
||||||
|
|
||||||
// current character position in p
|
|
||||||
var pos;
|
|
||||||
// the partial path so far, including a trailing slash if any
|
|
||||||
var current;
|
|
||||||
// the partial path without a trailing slash (except when pointing at a root)
|
|
||||||
var base;
|
|
||||||
// the partial path scanned in the previous round, with slash
|
|
||||||
var previous;
|
|
||||||
|
|
||||||
start();
|
|
||||||
|
|
||||||
function start() {
|
|
||||||
// Skip over roots
|
|
||||||
var m = splitRootRe.exec(p);
|
|
||||||
pos = m[0].length;
|
|
||||||
current = m[0];
|
|
||||||
base = m[0];
|
|
||||||
previous = '';
|
|
||||||
|
|
||||||
// On windows, check that the root exists. On unix there is no need.
|
|
||||||
if (isWindows && !knownHard[base]) {
|
|
||||||
fs.lstat(base, function(err) {
|
|
||||||
if (err) return cb(err);
|
|
||||||
knownHard[base] = true;
|
|
||||||
LOOP();
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
process.nextTick(LOOP);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// walk down the path, swapping out linked pathparts for their real
|
|
||||||
// values
|
|
||||||
function LOOP() {
|
|
||||||
// stop if scanned past end of path
|
|
||||||
if (pos >= p.length) {
|
|
||||||
if (cache) cache[original] = p;
|
|
||||||
return cb(null, p);
|
|
||||||
}
|
|
||||||
|
|
||||||
// find the next part
|
|
||||||
nextPartRe.lastIndex = pos;
|
|
||||||
var result = nextPartRe.exec(p);
|
|
||||||
previous = current;
|
|
||||||
current += result[0];
|
|
||||||
base = previous + result[1];
|
|
||||||
pos = nextPartRe.lastIndex;
|
|
||||||
|
|
||||||
// continue if not a symlink
|
|
||||||
if (knownHard[base] || (cache && cache[base] === base)) {
|
|
||||||
return process.nextTick(LOOP);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {
|
|
||||||
// known symbolic link. no need to stat again.
|
|
||||||
return gotResolvedLink(cache[base]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return fs.lstat(base, gotStat);
|
|
||||||
}
|
|
||||||
|
|
||||||
function gotStat(err, stat) {
|
|
||||||
if (err) return cb(err);
|
|
||||||
|
|
||||||
// if not a symlink, skip to the next path part
|
|
||||||
if (!stat.isSymbolicLink()) {
|
|
||||||
knownHard[base] = true;
|
|
||||||
if (cache) cache[base] = base;
|
|
||||||
return process.nextTick(LOOP);
|
|
||||||
}
|
|
||||||
|
|
||||||
// stat & read the link if not read before
|
|
||||||
// call gotTarget as soon as the link target is known
|
|
||||||
// dev/ino always return 0 on windows, so skip the check.
|
|
||||||
if (!isWindows) {
|
|
||||||
var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);
|
|
||||||
if (seenLinks.hasOwnProperty(id)) {
|
|
||||||
return gotTarget(null, seenLinks[id], base);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fs.stat(base, function(err) {
|
|
||||||
if (err) return cb(err);
|
|
||||||
|
|
||||||
fs.readlink(base, function(err, target) {
|
|
||||||
if (!isWindows) seenLinks[id] = target;
|
|
||||||
gotTarget(err, target);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function gotTarget(err, target, base) {
|
|
||||||
if (err) return cb(err);
|
|
||||||
|
|
||||||
var resolvedLink = pathModule.resolve(previous, target);
|
|
||||||
if (cache) cache[base] = resolvedLink;
|
|
||||||
gotResolvedLink(resolvedLink);
|
|
||||||
}
|
|
||||||
|
|
||||||
function gotResolvedLink(resolvedLink) {
|
|
||||||
// resolve the link, then start over
|
|
||||||
p = pathModule.resolve(resolvedLink, p.slice(pos));
|
|
||||||
start();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
63
node_modules/fs.realpath/package.json
generated
vendored
63
node_modules/fs.realpath/package.json
generated
vendored
@@ -1,63 +0,0 @@
|
|||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"fs.realpath@1.0.0",
|
|
||||||
"c:\\EndBug\\GitHub\\add-and-commit"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "fs.realpath@1.0.0",
|
|
||||||
"_id": "fs.realpath@1.0.0",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
|
|
||||||
"_location": "/fs.realpath",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "fs.realpath@1.0.0",
|
|
||||||
"name": "fs.realpath",
|
|
||||||
"escapedName": "fs.realpath",
|
|
||||||
"rawSpec": "1.0.0",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "1.0.0"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/@typescript-eslint/typescript-estree/glob",
|
|
||||||
"/glob"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
|
||||||
"_spec": "1.0.0",
|
|
||||||
"_where": "c:\\EndBug\\GitHub\\add-and-commit",
|
|
||||||
"author": {
|
|
||||||
"name": "Isaac Z. Schlueter",
|
|
||||||
"email": "i@izs.me",
|
|
||||||
"url": "http://blog.izs.me/"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/isaacs/fs.realpath/issues"
|
|
||||||
},
|
|
||||||
"dependencies": {},
|
|
||||||
"description": "Use node's fs.realpath, but fall back to the JS implementation if the native one fails",
|
|
||||||
"devDependencies": {},
|
|
||||||
"files": [
|
|
||||||
"old.js",
|
|
||||||
"index.js"
|
|
||||||
],
|
|
||||||
"homepage": "https://github.com/isaacs/fs.realpath#readme",
|
|
||||||
"keywords": [
|
|
||||||
"realpath",
|
|
||||||
"fs",
|
|
||||||
"polyfill"
|
|
||||||
],
|
|
||||||
"license": "ISC",
|
|
||||||
"main": "index.js",
|
|
||||||
"name": "fs.realpath",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/isaacs/fs.realpath.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "tap test/*.js --cov"
|
|
||||||
},
|
|
||||||
"version": "1.0.0"
|
|
||||||
}
|
|
||||||
21
node_modules/glob/LICENSE
generated
vendored
21
node_modules/glob/LICENSE
generated
vendored
@@ -1,21 +0,0 @@
|
|||||||
The ISC License
|
|
||||||
|
|
||||||
Copyright (c) Isaac Z. Schlueter and Contributors
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
||||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
|
|
||||||
## Glob Logo
|
|
||||||
|
|
||||||
Glob's logo created by Tanya Brassie <http://tanyabrassie.com/>, licensed
|
|
||||||
under a Creative Commons Attribution-ShareAlike 4.0 International License
|
|
||||||
https://creativecommons.org/licenses/by-sa/4.0/
|
|
||||||
373
node_modules/glob/README.md
generated
vendored
373
node_modules/glob/README.md
generated
vendored
@@ -1,373 +0,0 @@
|
|||||||
# Glob
|
|
||||||
|
|
||||||
Match files using the patterns the shell uses, like stars and stuff.
|
|
||||||
|
|
||||||
[](https://travis-ci.org/isaacs/node-glob/) [](https://ci.appveyor.com/project/isaacs/node-glob) [](https://coveralls.io/github/isaacs/node-glob?branch=master)
|
|
||||||
|
|
||||||
This is a glob implementation in JavaScript. It uses the `minimatch`
|
|
||||||
library to do its matching.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
Install with npm
|
|
||||||
|
|
||||||
```
|
|
||||||
npm i glob
|
|
||||||
```
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var glob = require("glob")
|
|
||||||
|
|
||||||
// options is optional
|
|
||||||
glob("**/*.js", options, function (er, files) {
|
|
||||||
// files is an array of filenames.
|
|
||||||
// If the `nonull` option is set, and nothing
|
|
||||||
// was found, then files is ["**/*.js"]
|
|
||||||
// er is an error object or null.
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
## Glob Primer
|
|
||||||
|
|
||||||
"Globs" are the patterns you type when you do stuff like `ls *.js` on
|
|
||||||
the command line, or put `build/*` in a `.gitignore` file.
|
|
||||||
|
|
||||||
Before parsing the path part patterns, braced sections are expanded
|
|
||||||
into a set. Braced sections start with `{` and end with `}`, with any
|
|
||||||
number of comma-delimited sections within. Braced sections may contain
|
|
||||||
slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`.
|
|
||||||
|
|
||||||
The following characters have special magic meaning when used in a
|
|
||||||
path portion:
|
|
||||||
|
|
||||||
* `*` Matches 0 or more characters in a single path portion
|
|
||||||
* `?` Matches 1 character
|
|
||||||
* `[...]` Matches a range of characters, similar to a RegExp range.
|
|
||||||
If the first character of the range is `!` or `^` then it matches
|
|
||||||
any character not in the range.
|
|
||||||
* `!(pattern|pattern|pattern)` Matches anything that does not match
|
|
||||||
any of the patterns provided.
|
|
||||||
* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the
|
|
||||||
patterns provided.
|
|
||||||
* `+(pattern|pattern|pattern)` Matches one or more occurrences of the
|
|
||||||
patterns provided.
|
|
||||||
* `*(a|b|c)` Matches zero or more occurrences of the patterns provided
|
|
||||||
* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns
|
|
||||||
provided
|
|
||||||
* `**` If a "globstar" is alone in a path portion, then it matches
|
|
||||||
zero or more directories and subdirectories searching for matches.
|
|
||||||
It does not crawl symlinked directories.
|
|
||||||
|
|
||||||
### Dots
|
|
||||||
|
|
||||||
If a file or directory path portion has a `.` as the first character,
|
|
||||||
then it will not match any glob pattern unless that pattern's
|
|
||||||
corresponding path part also has a `.` as its first character.
|
|
||||||
|
|
||||||
For example, the pattern `a/.*/c` would match the file at `a/.b/c`.
|
|
||||||
However the pattern `a/*/c` would not, because `*` does not start with
|
|
||||||
a dot character.
|
|
||||||
|
|
||||||
You can make glob treat dots as normal characters by setting
|
|
||||||
`dot:true` in the options.
|
|
||||||
|
|
||||||
### Basename Matching
|
|
||||||
|
|
||||||
If you set `matchBase:true` in the options, and the pattern has no
|
|
||||||
slashes in it, then it will seek for any file anywhere in the tree
|
|
||||||
with a matching basename. For example, `*.js` would match
|
|
||||||
`test/simple/basic.js`.
|
|
||||||
|
|
||||||
### Empty Sets
|
|
||||||
|
|
||||||
If no matching files are found, then an empty array is returned. This
|
|
||||||
differs from the shell, where the pattern itself is returned. For
|
|
||||||
example:
|
|
||||||
|
|
||||||
$ echo a*s*d*f
|
|
||||||
a*s*d*f
|
|
||||||
|
|
||||||
To get the bash-style behavior, set the `nonull:true` in the options.
|
|
||||||
|
|
||||||
### See Also:
|
|
||||||
|
|
||||||
* `man sh`
|
|
||||||
* `man bash` (Search for "Pattern Matching")
|
|
||||||
* `man 3 fnmatch`
|
|
||||||
* `man 5 gitignore`
|
|
||||||
* [minimatch documentation](https://github.com/isaacs/minimatch)
|
|
||||||
|
|
||||||
## glob.hasMagic(pattern, [options])
|
|
||||||
|
|
||||||
Returns `true` if there are any special characters in the pattern, and
|
|
||||||
`false` otherwise.
|
|
||||||
|
|
||||||
Note that the options affect the results. If `noext:true` is set in
|
|
||||||
the options object, then `+(a|b)` will not be considered a magic
|
|
||||||
pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}`
|
|
||||||
then that is considered magical, unless `nobrace:true` is set in the
|
|
||||||
options.
|
|
||||||
|
|
||||||
## glob(pattern, [options], cb)
|
|
||||||
|
|
||||||
* `pattern` `{String}` Pattern to be matched
|
|
||||||
* `options` `{Object}`
|
|
||||||
* `cb` `{Function}`
|
|
||||||
* `err` `{Error | null}`
|
|
||||||
* `matches` `{Array<String>}` filenames found matching the pattern
|
|
||||||
|
|
||||||
Perform an asynchronous glob search.
|
|
||||||
|
|
||||||
## glob.sync(pattern, [options])
|
|
||||||
|
|
||||||
* `pattern` `{String}` Pattern to be matched
|
|
||||||
* `options` `{Object}`
|
|
||||||
* return: `{Array<String>}` filenames found matching the pattern
|
|
||||||
|
|
||||||
Perform a synchronous glob search.
|
|
||||||
|
|
||||||
## Class: glob.Glob
|
|
||||||
|
|
||||||
Create a Glob object by instantiating the `glob.Glob` class.
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var Glob = require("glob").Glob
|
|
||||||
var mg = new Glob(pattern, options, cb)
|
|
||||||
```
|
|
||||||
|
|
||||||
It's an EventEmitter, and starts walking the filesystem to find matches
|
|
||||||
immediately.
|
|
||||||
|
|
||||||
### new glob.Glob(pattern, [options], [cb])
|
|
||||||
|
|
||||||
* `pattern` `{String}` pattern to search for
|
|
||||||
* `options` `{Object}`
|
|
||||||
* `cb` `{Function}` Called when an error occurs, or matches are found
|
|
||||||
* `err` `{Error | null}`
|
|
||||||
* `matches` `{Array<String>}` filenames found matching the pattern
|
|
||||||
|
|
||||||
Note that if the `sync` flag is set in the options, then matches will
|
|
||||||
be immediately available on the `g.found` member.
|
|
||||||
|
|
||||||
### Properties
|
|
||||||
|
|
||||||
* `minimatch` The minimatch object that the glob uses.
|
|
||||||
* `options` The options object passed in.
|
|
||||||
* `aborted` Boolean which is set to true when calling `abort()`. There
|
|
||||||
is no way at this time to continue a glob search after aborting, but
|
|
||||||
you can re-use the statCache to avoid having to duplicate syscalls.
|
|
||||||
* `cache` Convenience object. Each field has the following possible
|
|
||||||
values:
|
|
||||||
* `false` - Path does not exist
|
|
||||||
* `true` - Path exists
|
|
||||||
* `'FILE'` - Path exists, and is not a directory
|
|
||||||
* `'DIR'` - Path exists, and is a directory
|
|
||||||
* `[file, entries, ...]` - Path exists, is a directory, and the
|
|
||||||
array value is the results of `fs.readdir`
|
|
||||||
* `statCache` Cache of `fs.stat` results, to prevent statting the same
|
|
||||||
path multiple times.
|
|
||||||
* `symlinks` A record of which paths are symbolic links, which is
|
|
||||||
relevant in resolving `**` patterns.
|
|
||||||
* `realpathCache` An optional object which is passed to `fs.realpath`
|
|
||||||
to minimize unnecessary syscalls. It is stored on the instantiated
|
|
||||||
Glob object, and may be re-used.
|
|
||||||
|
|
||||||
### Events
|
|
||||||
|
|
||||||
* `end` When the matching is finished, this is emitted with all the
|
|
||||||
matches found. If the `nonull` option is set, and no match was found,
|
|
||||||
then the `matches` list contains the original pattern. The matches
|
|
||||||
are sorted, unless the `nosort` flag is set.
|
|
||||||
* `match` Every time a match is found, this is emitted with the specific
|
|
||||||
thing that matched. It is not deduplicated or resolved to a realpath.
|
|
||||||
* `error` Emitted when an unexpected error is encountered, or whenever
|
|
||||||
any fs error occurs if `options.strict` is set.
|
|
||||||
* `abort` When `abort()` is called, this event is raised.
|
|
||||||
|
|
||||||
### Methods
|
|
||||||
|
|
||||||
* `pause` Temporarily stop the search
|
|
||||||
* `resume` Resume the search
|
|
||||||
* `abort` Stop the search forever
|
|
||||||
|
|
||||||
### Options
|
|
||||||
|
|
||||||
All the options that can be passed to Minimatch can also be passed to
|
|
||||||
Glob to change pattern matching behavior. Also, some have been added,
|
|
||||||
or have glob-specific ramifications.
|
|
||||||
|
|
||||||
All options are false by default, unless otherwise noted.
|
|
||||||
|
|
||||||
All options are added to the Glob object, as well.
|
|
||||||
|
|
||||||
If you are running many `glob` operations, you can pass a Glob object
|
|
||||||
as the `options` argument to a subsequent operation to shortcut some
|
|
||||||
`stat` and `readdir` calls. At the very least, you may pass in shared
|
|
||||||
`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that
|
|
||||||
parallel glob operations will be sped up by sharing information about
|
|
||||||
the filesystem.
|
|
||||||
|
|
||||||
* `cwd` The current working directory in which to search. Defaults
|
|
||||||
to `process.cwd()`.
|
|
||||||
* `root` The place where patterns starting with `/` will be mounted
|
|
||||||
onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix
|
|
||||||
systems, and `C:\` or some such on Windows.)
|
|
||||||
* `dot` Include `.dot` files in normal matches and `globstar` matches.
|
|
||||||
Note that an explicit dot in a portion of the pattern will always
|
|
||||||
match dot files.
|
|
||||||
* `nomount` By default, a pattern starting with a forward-slash will be
|
|
||||||
"mounted" onto the root setting, so that a valid filesystem path is
|
|
||||||
returned. Set this flag to disable that behavior.
|
|
||||||
* `mark` Add a `/` character to directory matches. Note that this
|
|
||||||
requires additional stat calls.
|
|
||||||
* `nosort` Don't sort the results.
|
|
||||||
* `stat` Set to true to stat *all* results. This reduces performance
|
|
||||||
somewhat, and is completely unnecessary, unless `readdir` is presumed
|
|
||||||
to be an untrustworthy indicator of file existence.
|
|
||||||
* `silent` When an unusual error is encountered when attempting to
|
|
||||||
read a directory, a warning will be printed to stderr. Set the
|
|
||||||
`silent` option to true to suppress these warnings.
|
|
||||||
* `strict` When an unusual error is encountered when attempting to
|
|
||||||
read a directory, the process will just continue on in search of
|
|
||||||
other matches. Set the `strict` option to raise an error in these
|
|
||||||
cases.
|
|
||||||
* `cache` See `cache` property above. Pass in a previously generated
|
|
||||||
cache object to save some fs calls.
|
|
||||||
* `statCache` A cache of results of filesystem information, to prevent
|
|
||||||
unnecessary stat calls. While it should not normally be necessary
|
|
||||||
to set this, you may pass the statCache from one glob() call to the
|
|
||||||
options object of another, if you know that the filesystem will not
|
|
||||||
change between calls. (See "Race Conditions" below.)
|
|
||||||
* `symlinks` A cache of known symbolic links. You may pass in a
|
|
||||||
previously generated `symlinks` object to save `lstat` calls when
|
|
||||||
resolving `**` matches.
|
|
||||||
* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead.
|
|
||||||
* `nounique` In some cases, brace-expanded patterns can result in the
|
|
||||||
same file showing up multiple times in the result set. By default,
|
|
||||||
this implementation prevents duplicates in the result set. Set this
|
|
||||||
flag to disable that behavior.
|
|
||||||
* `nonull` Set to never return an empty set, instead returning a set
|
|
||||||
containing the pattern itself. This is the default in glob(3).
|
|
||||||
* `debug` Set to enable debug logging in minimatch and glob.
|
|
||||||
* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets.
|
|
||||||
* `noglobstar` Do not match `**` against multiple filenames. (Ie,
|
|
||||||
treat it as a normal `*` instead.)
|
|
||||||
* `noext` Do not match `+(a|b)` "extglob" patterns.
|
|
||||||
* `nocase` Perform a case-insensitive match. Note: on
|
|
||||||
case-insensitive filesystems, non-magic patterns will match by
|
|
||||||
default, since `stat` and `readdir` will not raise errors.
|
|
||||||
* `matchBase` Perform a basename-only match if the pattern does not
|
|
||||||
contain any slash characters. That is, `*.js` would be treated as
|
|
||||||
equivalent to `**/*.js`, matching all js files in all directories.
|
|
||||||
* `nodir` Do not match directories, only files. (Note: to match
|
|
||||||
*only* directories, simply put a `/` at the end of the pattern.)
|
|
||||||
* `ignore` Add a pattern or an array of glob patterns to exclude matches.
|
|
||||||
Note: `ignore` patterns are *always* in `dot:true` mode, regardless
|
|
||||||
of any other settings.
|
|
||||||
* `follow` Follow symlinked directories when expanding `**` patterns.
|
|
||||||
Note that this can result in a lot of duplicate references in the
|
|
||||||
presence of cyclic links.
|
|
||||||
* `realpath` Set to true to call `fs.realpath` on all of the results.
|
|
||||||
In the case of a symlink that cannot be resolved, the full absolute
|
|
||||||
path to the matched entry is returned (though it will usually be a
|
|
||||||
broken symlink)
|
|
||||||
* `absolute` Set to true to always receive absolute paths for matched
|
|
||||||
files. Unlike `realpath`, this also affects the values returned in
|
|
||||||
the `match` event.
|
|
||||||
|
|
||||||
## Comparisons to other fnmatch/glob implementations
|
|
||||||
|
|
||||||
While strict compliance with the existing standards is a worthwhile
|
|
||||||
goal, some discrepancies exist between node-glob and other
|
|
||||||
implementations, and are intentional.
|
|
||||||
|
|
||||||
The double-star character `**` is supported by default, unless the
|
|
||||||
`noglobstar` flag is set. This is supported in the manner of bsdglob
|
|
||||||
and bash 4.3, where `**` only has special significance if it is the only
|
|
||||||
thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but
|
|
||||||
`a/**b` will not.
|
|
||||||
|
|
||||||
Note that symlinked directories are not crawled as part of a `**`,
|
|
||||||
though their contents may match against subsequent portions of the
|
|
||||||
pattern. This prevents infinite loops and duplicates and the like.
|
|
||||||
|
|
||||||
If an escaped pattern has no matches, and the `nonull` flag is set,
|
|
||||||
then glob returns the pattern as-provided, rather than
|
|
||||||
interpreting the character escapes. For example,
|
|
||||||
`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
|
|
||||||
`"*a?"`. This is akin to setting the `nullglob` option in bash, except
|
|
||||||
that it does not resolve escaped pattern characters.
|
|
||||||
|
|
||||||
If brace expansion is not disabled, then it is performed before any
|
|
||||||
other interpretation of the glob pattern. Thus, a pattern like
|
|
||||||
`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
|
|
||||||
**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
|
|
||||||
checked for validity. Since those two are valid, matching proceeds.
|
|
||||||
|
|
||||||
### Comments and Negation
|
|
||||||
|
|
||||||
Previously, this module let you mark a pattern as a "comment" if it
|
|
||||||
started with a `#` character, or a "negated" pattern if it started
|
|
||||||
with a `!` character.
|
|
||||||
|
|
||||||
These options were deprecated in version 5, and removed in version 6.
|
|
||||||
|
|
||||||
To specify things that should not match, use the `ignore` option.
|
|
||||||
|
|
||||||
## Windows
|
|
||||||
|
|
||||||
**Please only use forward-slashes in glob expressions.**
|
|
||||||
|
|
||||||
Though windows uses either `/` or `\` as its path separator, only `/`
|
|
||||||
characters are used by this glob implementation. You must use
|
|
||||||
forward-slashes **only** in glob expressions. Back-slashes will always
|
|
||||||
be interpreted as escape characters, not path separators.
|
|
||||||
|
|
||||||
Results from absolute patterns such as `/foo/*` are mounted onto the
|
|
||||||
root setting using `path.join`. On windows, this will by default result
|
|
||||||
in `/foo/*` matching `C:\foo\bar.txt`.
|
|
||||||
|
|
||||||
## Race Conditions
|
|
||||||
|
|
||||||
Glob searching, by its very nature, is susceptible to race conditions,
|
|
||||||
since it relies on directory walking and such.
|
|
||||||
|
|
||||||
As a result, it is possible that a file that exists when glob looks for
|
|
||||||
it may have been deleted or modified by the time it returns the result.
|
|
||||||
|
|
||||||
As part of its internal implementation, this program caches all stat
|
|
||||||
and readdir calls that it makes, in order to cut down on system
|
|
||||||
overhead. However, this also makes it even more susceptible to races,
|
|
||||||
especially if the cache or statCache objects are reused between glob
|
|
||||||
calls.
|
|
||||||
|
|
||||||
Users are thus advised not to use a glob result as a guarantee of
|
|
||||||
filesystem state in the face of rapid changes. For the vast majority
|
|
||||||
of operations, this is never a problem.
|
|
||||||
|
|
||||||
## Glob Logo
|
|
||||||
Glob's logo was created by [Tanya Brassie](http://tanyabrassie.com/). Logo files can be found [here](https://github.com/isaacs/node-glob/tree/master/logo).
|
|
||||||
|
|
||||||
The logo is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/).
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
|
|
||||||
Any change to behavior (including bugfixes) must come with a test.
|
|
||||||
|
|
||||||
Patches that fail tests or reduce performance will be rejected.
|
|
||||||
|
|
||||||
```
|
|
||||||
# to run tests
|
|
||||||
npm test
|
|
||||||
|
|
||||||
# to re-generate test fixtures
|
|
||||||
npm run test-regen
|
|
||||||
|
|
||||||
# to benchmark against bash/zsh
|
|
||||||
npm run bench
|
|
||||||
|
|
||||||
# to profile javascript
|
|
||||||
npm run prof
|
|
||||||
```
|
|
||||||
67
node_modules/glob/changelog.md
generated
vendored
67
node_modules/glob/changelog.md
generated
vendored
@@ -1,67 +0,0 @@
|
|||||||
## 7.0
|
|
||||||
|
|
||||||
- Raise error if `options.cwd` is specified, and not a directory
|
|
||||||
|
|
||||||
## 6.0
|
|
||||||
|
|
||||||
- Remove comment and negation pattern support
|
|
||||||
- Ignore patterns are always in `dot:true` mode
|
|
||||||
|
|
||||||
## 5.0
|
|
||||||
|
|
||||||
- Deprecate comment and negation patterns
|
|
||||||
- Fix regression in `mark` and `nodir` options from making all cache
|
|
||||||
keys absolute path.
|
|
||||||
- Abort if `fs.readdir` returns an error that's unexpected
|
|
||||||
- Don't emit `match` events for ignored items
|
|
||||||
- Treat ENOTSUP like ENOTDIR in readdir
|
|
||||||
|
|
||||||
## 4.5
|
|
||||||
|
|
||||||
- Add `options.follow` to always follow directory symlinks in globstar
|
|
||||||
- Add `options.realpath` to call `fs.realpath` on all results
|
|
||||||
- Always cache based on absolute path
|
|
||||||
|
|
||||||
## 4.4
|
|
||||||
|
|
||||||
- Add `options.ignore`
|
|
||||||
- Fix handling of broken symlinks
|
|
||||||
|
|
||||||
## 4.3
|
|
||||||
|
|
||||||
- Bump minimatch to 2.x
|
|
||||||
- Pass all tests on Windows
|
|
||||||
|
|
||||||
## 4.2
|
|
||||||
|
|
||||||
- Add `glob.hasMagic` function
|
|
||||||
- Add `options.nodir` flag
|
|
||||||
|
|
||||||
## 4.1
|
|
||||||
|
|
||||||
- Refactor sync and async implementations for performance
|
|
||||||
- Throw if callback provided to sync glob function
|
|
||||||
- Treat symbolic links in globstar results the same as Bash 4.3
|
|
||||||
|
|
||||||
## 4.0
|
|
||||||
|
|
||||||
- Use `^` for dependency versions (bumped major because this breaks
|
|
||||||
older npm versions)
|
|
||||||
- Ensure callbacks are only ever called once
|
|
||||||
- switch to ISC license
|
|
||||||
|
|
||||||
## 3.x
|
|
||||||
|
|
||||||
- Rewrite in JavaScript
|
|
||||||
- Add support for setting root, cwd, and windows support
|
|
||||||
- Cache many fs calls
|
|
||||||
- Add globstar support
|
|
||||||
- emit match events
|
|
||||||
|
|
||||||
## 2.x
|
|
||||||
|
|
||||||
- Use `glob.h` and `fnmatch.h` from NetBSD
|
|
||||||
|
|
||||||
## 1.x
|
|
||||||
|
|
||||||
- `glob.h` static binding.
|
|
||||||
240
node_modules/glob/common.js
generated
vendored
240
node_modules/glob/common.js
generated
vendored
@@ -1,240 +0,0 @@
|
|||||||
exports.alphasort = alphasort
|
|
||||||
exports.alphasorti = alphasorti
|
|
||||||
exports.setopts = setopts
|
|
||||||
exports.ownProp = ownProp
|
|
||||||
exports.makeAbs = makeAbs
|
|
||||||
exports.finish = finish
|
|
||||||
exports.mark = mark
|
|
||||||
exports.isIgnored = isIgnored
|
|
||||||
exports.childrenIgnored = childrenIgnored
|
|
||||||
|
|
||||||
function ownProp (obj, field) {
|
|
||||||
return Object.prototype.hasOwnProperty.call(obj, field)
|
|
||||||
}
|
|
||||||
|
|
||||||
var path = require("path")
|
|
||||||
var minimatch = require("minimatch")
|
|
||||||
var isAbsolute = require("path-is-absolute")
|
|
||||||
var Minimatch = minimatch.Minimatch
|
|
||||||
|
|
||||||
function alphasorti (a, b) {
|
|
||||||
return a.toLowerCase().localeCompare(b.toLowerCase())
|
|
||||||
}
|
|
||||||
|
|
||||||
function alphasort (a, b) {
|
|
||||||
return a.localeCompare(b)
|
|
||||||
}
|
|
||||||
|
|
||||||
function setupIgnores (self, options) {
|
|
||||||
self.ignore = options.ignore || []
|
|
||||||
|
|
||||||
if (!Array.isArray(self.ignore))
|
|
||||||
self.ignore = [self.ignore]
|
|
||||||
|
|
||||||
if (self.ignore.length) {
|
|
||||||
self.ignore = self.ignore.map(ignoreMap)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ignore patterns are always in dot:true mode.
|
|
||||||
function ignoreMap (pattern) {
|
|
||||||
var gmatcher = null
|
|
||||||
if (pattern.slice(-3) === '/**') {
|
|
||||||
var gpattern = pattern.replace(/(\/\*\*)+$/, '')
|
|
||||||
gmatcher = new Minimatch(gpattern, { dot: true })
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
matcher: new Minimatch(pattern, { dot: true }),
|
|
||||||
gmatcher: gmatcher
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function setopts (self, pattern, options) {
|
|
||||||
if (!options)
|
|
||||||
options = {}
|
|
||||||
|
|
||||||
// base-matching: just use globstar for that.
|
|
||||||
if (options.matchBase && -1 === pattern.indexOf("/")) {
|
|
||||||
if (options.noglobstar) {
|
|
||||||
throw new Error("base matching requires globstar")
|
|
||||||
}
|
|
||||||
pattern = "**/" + pattern
|
|
||||||
}
|
|
||||||
|
|
||||||
self.silent = !!options.silent
|
|
||||||
self.pattern = pattern
|
|
||||||
self.strict = options.strict !== false
|
|
||||||
self.realpath = !!options.realpath
|
|
||||||
self.realpathCache = options.realpathCache || Object.create(null)
|
|
||||||
self.follow = !!options.follow
|
|
||||||
self.dot = !!options.dot
|
|
||||||
self.mark = !!options.mark
|
|
||||||
self.nodir = !!options.nodir
|
|
||||||
if (self.nodir)
|
|
||||||
self.mark = true
|
|
||||||
self.sync = !!options.sync
|
|
||||||
self.nounique = !!options.nounique
|
|
||||||
self.nonull = !!options.nonull
|
|
||||||
self.nosort = !!options.nosort
|
|
||||||
self.nocase = !!options.nocase
|
|
||||||
self.stat = !!options.stat
|
|
||||||
self.noprocess = !!options.noprocess
|
|
||||||
self.absolute = !!options.absolute
|
|
||||||
|
|
||||||
self.maxLength = options.maxLength || Infinity
|
|
||||||
self.cache = options.cache || Object.create(null)
|
|
||||||
self.statCache = options.statCache || Object.create(null)
|
|
||||||
self.symlinks = options.symlinks || Object.create(null)
|
|
||||||
|
|
||||||
setupIgnores(self, options)
|
|
||||||
|
|
||||||
self.changedCwd = false
|
|
||||||
var cwd = process.cwd()
|
|
||||||
if (!ownProp(options, "cwd"))
|
|
||||||
self.cwd = cwd
|
|
||||||
else {
|
|
||||||
self.cwd = path.resolve(options.cwd)
|
|
||||||
self.changedCwd = self.cwd !== cwd
|
|
||||||
}
|
|
||||||
|
|
||||||
self.root = options.root || path.resolve(self.cwd, "/")
|
|
||||||
self.root = path.resolve(self.root)
|
|
||||||
if (process.platform === "win32")
|
|
||||||
self.root = self.root.replace(/\\/g, "/")
|
|
||||||
|
|
||||||
// TODO: is an absolute `cwd` supposed to be resolved against `root`?
|
|
||||||
// e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test')
|
|
||||||
self.cwdAbs = isAbsolute(self.cwd) ? self.cwd : makeAbs(self, self.cwd)
|
|
||||||
if (process.platform === "win32")
|
|
||||||
self.cwdAbs = self.cwdAbs.replace(/\\/g, "/")
|
|
||||||
self.nomount = !!options.nomount
|
|
||||||
|
|
||||||
// disable comments and negation in Minimatch.
|
|
||||||
// Note that they are not supported in Glob itself anyway.
|
|
||||||
options.nonegate = true
|
|
||||||
options.nocomment = true
|
|
||||||
|
|
||||||
self.minimatch = new Minimatch(pattern, options)
|
|
||||||
self.options = self.minimatch.options
|
|
||||||
}
|
|
||||||
|
|
||||||
function finish (self) {
|
|
||||||
var nou = self.nounique
|
|
||||||
var all = nou ? [] : Object.create(null)
|
|
||||||
|
|
||||||
for (var i = 0, l = self.matches.length; i < l; i ++) {
|
|
||||||
var matches = self.matches[i]
|
|
||||||
if (!matches || Object.keys(matches).length === 0) {
|
|
||||||
if (self.nonull) {
|
|
||||||
// do like the shell, and spit out the literal glob
|
|
||||||
var literal = self.minimatch.globSet[i]
|
|
||||||
if (nou)
|
|
||||||
all.push(literal)
|
|
||||||
else
|
|
||||||
all[literal] = true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// had matches
|
|
||||||
var m = Object.keys(matches)
|
|
||||||
if (nou)
|
|
||||||
all.push.apply(all, m)
|
|
||||||
else
|
|
||||||
m.forEach(function (m) {
|
|
||||||
all[m] = true
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!nou)
|
|
||||||
all = Object.keys(all)
|
|
||||||
|
|
||||||
if (!self.nosort)
|
|
||||||
all = all.sort(self.nocase ? alphasorti : alphasort)
|
|
||||||
|
|
||||||
// at *some* point we statted all of these
|
|
||||||
if (self.mark) {
|
|
||||||
for (var i = 0; i < all.length; i++) {
|
|
||||||
all[i] = self._mark(all[i])
|
|
||||||
}
|
|
||||||
if (self.nodir) {
|
|
||||||
all = all.filter(function (e) {
|
|
||||||
var notDir = !(/\/$/.test(e))
|
|
||||||
var c = self.cache[e] || self.cache[makeAbs(self, e)]
|
|
||||||
if (notDir && c)
|
|
||||||
notDir = c !== 'DIR' && !Array.isArray(c)
|
|
||||||
return notDir
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (self.ignore.length)
|
|
||||||
all = all.filter(function(m) {
|
|
||||||
return !isIgnored(self, m)
|
|
||||||
})
|
|
||||||
|
|
||||||
self.found = all
|
|
||||||
}
|
|
||||||
|
|
||||||
function mark (self, p) {
|
|
||||||
var abs = makeAbs(self, p)
|
|
||||||
var c = self.cache[abs]
|
|
||||||
var m = p
|
|
||||||
if (c) {
|
|
||||||
var isDir = c === 'DIR' || Array.isArray(c)
|
|
||||||
var slash = p.slice(-1) === '/'
|
|
||||||
|
|
||||||
if (isDir && !slash)
|
|
||||||
m += '/'
|
|
||||||
else if (!isDir && slash)
|
|
||||||
m = m.slice(0, -1)
|
|
||||||
|
|
||||||
if (m !== p) {
|
|
||||||
var mabs = makeAbs(self, m)
|
|
||||||
self.statCache[mabs] = self.statCache[abs]
|
|
||||||
self.cache[mabs] = self.cache[abs]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
// lotta situps...
|
|
||||||
function makeAbs (self, f) {
|
|
||||||
var abs = f
|
|
||||||
if (f.charAt(0) === '/') {
|
|
||||||
abs = path.join(self.root, f)
|
|
||||||
} else if (isAbsolute(f) || f === '') {
|
|
||||||
abs = f
|
|
||||||
} else if (self.changedCwd) {
|
|
||||||
abs = path.resolve(self.cwd, f)
|
|
||||||
} else {
|
|
||||||
abs = path.resolve(f)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (process.platform === 'win32')
|
|
||||||
abs = abs.replace(/\\/g, '/')
|
|
||||||
|
|
||||||
return abs
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Return true, if pattern ends with globstar '**', for the accompanying parent directory.
|
|
||||||
// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents
|
|
||||||
function isIgnored (self, path) {
|
|
||||||
if (!self.ignore.length)
|
|
||||||
return false
|
|
||||||
|
|
||||||
return self.ignore.some(function(item) {
|
|
||||||
return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function childrenIgnored (self, path) {
|
|
||||||
if (!self.ignore.length)
|
|
||||||
return false
|
|
||||||
|
|
||||||
return self.ignore.some(function(item) {
|
|
||||||
return !!(item.gmatcher && item.gmatcher.match(path))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
790
node_modules/glob/glob.js
generated
vendored
790
node_modules/glob/glob.js
generated
vendored
@@ -1,790 +0,0 @@
|
|||||||
// Approach:
|
|
||||||
//
|
|
||||||
// 1. Get the minimatch set
|
|
||||||
// 2. For each pattern in the set, PROCESS(pattern, false)
|
|
||||||
// 3. Store matches per-set, then uniq them
|
|
||||||
//
|
|
||||||
// PROCESS(pattern, inGlobStar)
|
|
||||||
// Get the first [n] items from pattern that are all strings
|
|
||||||
// Join these together. This is PREFIX.
|
|
||||||
// If there is no more remaining, then stat(PREFIX) and
|
|
||||||
// add to matches if it succeeds. END.
|
|
||||||
//
|
|
||||||
// If inGlobStar and PREFIX is symlink and points to dir
|
|
||||||
// set ENTRIES = []
|
|
||||||
// else readdir(PREFIX) as ENTRIES
|
|
||||||
// If fail, END
|
|
||||||
//
|
|
||||||
// with ENTRIES
|
|
||||||
// If pattern[n] is GLOBSTAR
|
|
||||||
// // handle the case where the globstar match is empty
|
|
||||||
// // by pruning it out, and testing the resulting pattern
|
|
||||||
// PROCESS(pattern[0..n] + pattern[n+1 .. $], false)
|
|
||||||
// // handle other cases.
|
|
||||||
// for ENTRY in ENTRIES (not dotfiles)
|
|
||||||
// // attach globstar + tail onto the entry
|
|
||||||
// // Mark that this entry is a globstar match
|
|
||||||
// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true)
|
|
||||||
//
|
|
||||||
// else // not globstar
|
|
||||||
// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
|
|
||||||
// Test ENTRY against pattern[n]
|
|
||||||
// If fails, continue
|
|
||||||
// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
|
|
||||||
//
|
|
||||||
// Caveat:
|
|
||||||
// Cache all stats and readdirs results to minimize syscall. Since all
|
|
||||||
// we ever care about is existence and directory-ness, we can just keep
|
|
||||||
// `true` for files, and [children,...] for directories, or `false` for
|
|
||||||
// things that don't exist.
|
|
||||||
|
|
||||||
module.exports = glob
|
|
||||||
|
|
||||||
var fs = require('fs')
|
|
||||||
var rp = require('fs.realpath')
|
|
||||||
var minimatch = require('minimatch')
|
|
||||||
var Minimatch = minimatch.Minimatch
|
|
||||||
var inherits = require('inherits')
|
|
||||||
var EE = require('events').EventEmitter
|
|
||||||
var path = require('path')
|
|
||||||
var assert = require('assert')
|
|
||||||
var isAbsolute = require('path-is-absolute')
|
|
||||||
var globSync = require('./sync.js')
|
|
||||||
var common = require('./common.js')
|
|
||||||
var alphasort = common.alphasort
|
|
||||||
var alphasorti = common.alphasorti
|
|
||||||
var setopts = common.setopts
|
|
||||||
var ownProp = common.ownProp
|
|
||||||
var inflight = require('inflight')
|
|
||||||
var util = require('util')
|
|
||||||
var childrenIgnored = common.childrenIgnored
|
|
||||||
var isIgnored = common.isIgnored
|
|
||||||
|
|
||||||
var once = require('once')
|
|
||||||
|
|
||||||
function glob (pattern, options, cb) {
|
|
||||||
if (typeof options === 'function') cb = options, options = {}
|
|
||||||
if (!options) options = {}
|
|
||||||
|
|
||||||
if (options.sync) {
|
|
||||||
if (cb)
|
|
||||||
throw new TypeError('callback provided to sync glob')
|
|
||||||
return globSync(pattern, options)
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Glob(pattern, options, cb)
|
|
||||||
}
|
|
||||||
|
|
||||||
glob.sync = globSync
|
|
||||||
var GlobSync = glob.GlobSync = globSync.GlobSync
|
|
||||||
|
|
||||||
// old api surface
|
|
||||||
glob.glob = glob
|
|
||||||
|
|
||||||
function extend (origin, add) {
|
|
||||||
if (add === null || typeof add !== 'object') {
|
|
||||||
return origin
|
|
||||||
}
|
|
||||||
|
|
||||||
var keys = Object.keys(add)
|
|
||||||
var i = keys.length
|
|
||||||
while (i--) {
|
|
||||||
origin[keys[i]] = add[keys[i]]
|
|
||||||
}
|
|
||||||
return origin
|
|
||||||
}
|
|
||||||
|
|
||||||
glob.hasMagic = function (pattern, options_) {
|
|
||||||
var options = extend({}, options_)
|
|
||||||
options.noprocess = true
|
|
||||||
|
|
||||||
var g = new Glob(pattern, options)
|
|
||||||
var set = g.minimatch.set
|
|
||||||
|
|
||||||
if (!pattern)
|
|
||||||
return false
|
|
||||||
|
|
||||||
if (set.length > 1)
|
|
||||||
return true
|
|
||||||
|
|
||||||
for (var j = 0; j < set[0].length; j++) {
|
|
||||||
if (typeof set[0][j] !== 'string')
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
glob.Glob = Glob
|
|
||||||
inherits(Glob, EE)
|
|
||||||
function Glob (pattern, options, cb) {
|
|
||||||
if (typeof options === 'function') {
|
|
||||||
cb = options
|
|
||||||
options = null
|
|
||||||
}
|
|
||||||
|
|
||||||
if (options && options.sync) {
|
|
||||||
if (cb)
|
|
||||||
throw new TypeError('callback provided to sync glob')
|
|
||||||
return new GlobSync(pattern, options)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(this instanceof Glob))
|
|
||||||
return new Glob(pattern, options, cb)
|
|
||||||
|
|
||||||
setopts(this, pattern, options)
|
|
||||||
this._didRealPath = false
|
|
||||||
|
|
||||||
// process each pattern in the minimatch set
|
|
||||||
var n = this.minimatch.set.length
|
|
||||||
|
|
||||||
// The matches are stored as {<filename>: true,...} so that
|
|
||||||
// duplicates are automagically pruned.
|
|
||||||
// Later, we do an Object.keys() on these.
|
|
||||||
// Keep them as a list so we can fill in when nonull is set.
|
|
||||||
this.matches = new Array(n)
|
|
||||||
|
|
||||||
if (typeof cb === 'function') {
|
|
||||||
cb = once(cb)
|
|
||||||
this.on('error', cb)
|
|
||||||
this.on('end', function (matches) {
|
|
||||||
cb(null, matches)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var self = this
|
|
||||||
this._processing = 0
|
|
||||||
|
|
||||||
this._emitQueue = []
|
|
||||||
this._processQueue = []
|
|
||||||
this.paused = false
|
|
||||||
|
|
||||||
if (this.noprocess)
|
|
||||||
return this
|
|
||||||
|
|
||||||
if (n === 0)
|
|
||||||
return done()
|
|
||||||
|
|
||||||
var sync = true
|
|
||||||
for (var i = 0; i < n; i ++) {
|
|
||||||
this._process(this.minimatch.set[i], i, false, done)
|
|
||||||
}
|
|
||||||
sync = false
|
|
||||||
|
|
||||||
function done () {
|
|
||||||
--self._processing
|
|
||||||
if (self._processing <= 0) {
|
|
||||||
if (sync) {
|
|
||||||
process.nextTick(function () {
|
|
||||||
self._finish()
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
self._finish()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype._finish = function () {
|
|
||||||
assert(this instanceof Glob)
|
|
||||||
if (this.aborted)
|
|
||||||
return
|
|
||||||
|
|
||||||
if (this.realpath && !this._didRealpath)
|
|
||||||
return this._realpath()
|
|
||||||
|
|
||||||
common.finish(this)
|
|
||||||
this.emit('end', this.found)
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype._realpath = function () {
|
|
||||||
if (this._didRealpath)
|
|
||||||
return
|
|
||||||
|
|
||||||
this._didRealpath = true
|
|
||||||
|
|
||||||
var n = this.matches.length
|
|
||||||
if (n === 0)
|
|
||||||
return this._finish()
|
|
||||||
|
|
||||||
var self = this
|
|
||||||
for (var i = 0; i < this.matches.length; i++)
|
|
||||||
this._realpathSet(i, next)
|
|
||||||
|
|
||||||
function next () {
|
|
||||||
if (--n === 0)
|
|
||||||
self._finish()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype._realpathSet = function (index, cb) {
|
|
||||||
var matchset = this.matches[index]
|
|
||||||
if (!matchset)
|
|
||||||
return cb()
|
|
||||||
|
|
||||||
var found = Object.keys(matchset)
|
|
||||||
var self = this
|
|
||||||
var n = found.length
|
|
||||||
|
|
||||||
if (n === 0)
|
|
||||||
return cb()
|
|
||||||
|
|
||||||
var set = this.matches[index] = Object.create(null)
|
|
||||||
found.forEach(function (p, i) {
|
|
||||||
// If there's a problem with the stat, then it means that
|
|
||||||
// one or more of the links in the realpath couldn't be
|
|
||||||
// resolved. just return the abs value in that case.
|
|
||||||
p = self._makeAbs(p)
|
|
||||||
rp.realpath(p, self.realpathCache, function (er, real) {
|
|
||||||
if (!er)
|
|
||||||
set[real] = true
|
|
||||||
else if (er.syscall === 'stat')
|
|
||||||
set[p] = true
|
|
||||||
else
|
|
||||||
self.emit('error', er) // srsly wtf right here
|
|
||||||
|
|
||||||
if (--n === 0) {
|
|
||||||
self.matches[index] = set
|
|
||||||
cb()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype._mark = function (p) {
|
|
||||||
return common.mark(this, p)
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype._makeAbs = function (f) {
|
|
||||||
return common.makeAbs(this, f)
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype.abort = function () {
|
|
||||||
this.aborted = true
|
|
||||||
this.emit('abort')
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype.pause = function () {
|
|
||||||
if (!this.paused) {
|
|
||||||
this.paused = true
|
|
||||||
this.emit('pause')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype.resume = function () {
|
|
||||||
if (this.paused) {
|
|
||||||
this.emit('resume')
|
|
||||||
this.paused = false
|
|
||||||
if (this._emitQueue.length) {
|
|
||||||
var eq = this._emitQueue.slice(0)
|
|
||||||
this._emitQueue.length = 0
|
|
||||||
for (var i = 0; i < eq.length; i ++) {
|
|
||||||
var e = eq[i]
|
|
||||||
this._emitMatch(e[0], e[1])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (this._processQueue.length) {
|
|
||||||
var pq = this._processQueue.slice(0)
|
|
||||||
this._processQueue.length = 0
|
|
||||||
for (var i = 0; i < pq.length; i ++) {
|
|
||||||
var p = pq[i]
|
|
||||||
this._processing--
|
|
||||||
this._process(p[0], p[1], p[2], p[3])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype._process = function (pattern, index, inGlobStar, cb) {
|
|
||||||
assert(this instanceof Glob)
|
|
||||||
assert(typeof cb === 'function')
|
|
||||||
|
|
||||||
if (this.aborted)
|
|
||||||
return
|
|
||||||
|
|
||||||
this._processing++
|
|
||||||
if (this.paused) {
|
|
||||||
this._processQueue.push([pattern, index, inGlobStar, cb])
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//console.error('PROCESS %d', this._processing, pattern)
|
|
||||||
|
|
||||||
// Get the first [n] parts of pattern that are all strings.
|
|
||||||
var n = 0
|
|
||||||
while (typeof pattern[n] === 'string') {
|
|
||||||
n ++
|
|
||||||
}
|
|
||||||
// now n is the index of the first one that is *not* a string.
|
|
||||||
|
|
||||||
// see if there's anything else
|
|
||||||
var prefix
|
|
||||||
switch (n) {
|
|
||||||
// if not, then this is rather simple
|
|
||||||
case pattern.length:
|
|
||||||
this._processSimple(pattern.join('/'), index, cb)
|
|
||||||
return
|
|
||||||
|
|
||||||
case 0:
|
|
||||||
// pattern *starts* with some non-trivial item.
|
|
||||||
// going to readdir(cwd), but not include the prefix in matches.
|
|
||||||
prefix = null
|
|
||||||
break
|
|
||||||
|
|
||||||
default:
|
|
||||||
// pattern has some string bits in the front.
|
|
||||||
// whatever it starts with, whether that's 'absolute' like /foo/bar,
|
|
||||||
// or 'relative' like '../baz'
|
|
||||||
prefix = pattern.slice(0, n).join('/')
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
var remain = pattern.slice(n)
|
|
||||||
|
|
||||||
// get the list of entries.
|
|
||||||
var read
|
|
||||||
if (prefix === null)
|
|
||||||
read = '.'
|
|
||||||
else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
|
|
||||||
if (!prefix || !isAbsolute(prefix))
|
|
||||||
prefix = '/' + prefix
|
|
||||||
read = prefix
|
|
||||||
} else
|
|
||||||
read = prefix
|
|
||||||
|
|
||||||
var abs = this._makeAbs(read)
|
|
||||||
|
|
||||||
//if ignored, skip _processing
|
|
||||||
if (childrenIgnored(this, read))
|
|
||||||
return cb()
|
|
||||||
|
|
||||||
var isGlobStar = remain[0] === minimatch.GLOBSTAR
|
|
||||||
if (isGlobStar)
|
|
||||||
this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb)
|
|
||||||
else
|
|
||||||
this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb)
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) {
|
|
||||||
var self = this
|
|
||||||
this._readdir(abs, inGlobStar, function (er, entries) {
|
|
||||||
return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
|
|
||||||
|
|
||||||
// if the abs isn't a dir, then nothing can match!
|
|
||||||
if (!entries)
|
|
||||||
return cb()
|
|
||||||
|
|
||||||
// It will only match dot entries if it starts with a dot, or if
|
|
||||||
// dot is set. Stuff like @(.foo|.bar) isn't allowed.
|
|
||||||
var pn = remain[0]
|
|
||||||
var negate = !!this.minimatch.negate
|
|
||||||
var rawGlob = pn._glob
|
|
||||||
var dotOk = this.dot || rawGlob.charAt(0) === '.'
|
|
||||||
|
|
||||||
var matchedEntries = []
|
|
||||||
for (var i = 0; i < entries.length; i++) {
|
|
||||||
var e = entries[i]
|
|
||||||
if (e.charAt(0) !== '.' || dotOk) {
|
|
||||||
var m
|
|
||||||
if (negate && !prefix) {
|
|
||||||
m = !e.match(pn)
|
|
||||||
} else {
|
|
||||||
m = e.match(pn)
|
|
||||||
}
|
|
||||||
if (m)
|
|
||||||
matchedEntries.push(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries)
|
|
||||||
|
|
||||||
var len = matchedEntries.length
|
|
||||||
// If there are no matched entries, then nothing matches.
|
|
||||||
if (len === 0)
|
|
||||||
return cb()
|
|
||||||
|
|
||||||
// if this is the last remaining pattern bit, then no need for
|
|
||||||
// an additional stat *unless* the user has specified mark or
|
|
||||||
// stat explicitly. We know they exist, since readdir returned
|
|
||||||
// them.
|
|
||||||
|
|
||||||
if (remain.length === 1 && !this.mark && !this.stat) {
|
|
||||||
if (!this.matches[index])
|
|
||||||
this.matches[index] = Object.create(null)
|
|
||||||
|
|
||||||
for (var i = 0; i < len; i ++) {
|
|
||||||
var e = matchedEntries[i]
|
|
||||||
if (prefix) {
|
|
||||||
if (prefix !== '/')
|
|
||||||
e = prefix + '/' + e
|
|
||||||
else
|
|
||||||
e = prefix + e
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e.charAt(0) === '/' && !this.nomount) {
|
|
||||||
e = path.join(this.root, e)
|
|
||||||
}
|
|
||||||
this._emitMatch(index, e)
|
|
||||||
}
|
|
||||||
// This was the last one, and no stats were needed
|
|
||||||
return cb()
|
|
||||||
}
|
|
||||||
|
|
||||||
// now test all matched entries as stand-ins for that part
|
|
||||||
// of the pattern.
|
|
||||||
remain.shift()
|
|
||||||
for (var i = 0; i < len; i ++) {
|
|
||||||
var e = matchedEntries[i]
|
|
||||||
var newPattern
|
|
||||||
if (prefix) {
|
|
||||||
if (prefix !== '/')
|
|
||||||
e = prefix + '/' + e
|
|
||||||
else
|
|
||||||
e = prefix + e
|
|
||||||
}
|
|
||||||
this._process([e].concat(remain), index, inGlobStar, cb)
|
|
||||||
}
|
|
||||||
cb()
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype._emitMatch = function (index, e) {
|
|
||||||
if (this.aborted)
|
|
||||||
return
|
|
||||||
|
|
||||||
if (isIgnored(this, e))
|
|
||||||
return
|
|
||||||
|
|
||||||
if (this.paused) {
|
|
||||||
this._emitQueue.push([index, e])
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var abs = isAbsolute(e) ? e : this._makeAbs(e)
|
|
||||||
|
|
||||||
if (this.mark)
|
|
||||||
e = this._mark(e)
|
|
||||||
|
|
||||||
if (this.absolute)
|
|
||||||
e = abs
|
|
||||||
|
|
||||||
if (this.matches[index][e])
|
|
||||||
return
|
|
||||||
|
|
||||||
if (this.nodir) {
|
|
||||||
var c = this.cache[abs]
|
|
||||||
if (c === 'DIR' || Array.isArray(c))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this.matches[index][e] = true
|
|
||||||
|
|
||||||
var st = this.statCache[abs]
|
|
||||||
if (st)
|
|
||||||
this.emit('stat', e, st)
|
|
||||||
|
|
||||||
this.emit('match', e)
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype._readdirInGlobStar = function (abs, cb) {
|
|
||||||
if (this.aborted)
|
|
||||||
return
|
|
||||||
|
|
||||||
// follow all symlinked directories forever
|
|
||||||
// just proceed as if this is a non-globstar situation
|
|
||||||
if (this.follow)
|
|
||||||
return this._readdir(abs, false, cb)
|
|
||||||
|
|
||||||
var lstatkey = 'lstat\0' + abs
|
|
||||||
var self = this
|
|
||||||
var lstatcb = inflight(lstatkey, lstatcb_)
|
|
||||||
|
|
||||||
if (lstatcb)
|
|
||||||
fs.lstat(abs, lstatcb)
|
|
||||||
|
|
||||||
function lstatcb_ (er, lstat) {
|
|
||||||
if (er && er.code === 'ENOENT')
|
|
||||||
return cb()
|
|
||||||
|
|
||||||
var isSym = lstat && lstat.isSymbolicLink()
|
|
||||||
self.symlinks[abs] = isSym
|
|
||||||
|
|
||||||
// If it's not a symlink or a dir, then it's definitely a regular file.
|
|
||||||
// don't bother doing a readdir in that case.
|
|
||||||
if (!isSym && lstat && !lstat.isDirectory()) {
|
|
||||||
self.cache[abs] = 'FILE'
|
|
||||||
cb()
|
|
||||||
} else
|
|
||||||
self._readdir(abs, false, cb)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype._readdir = function (abs, inGlobStar, cb) {
|
|
||||||
if (this.aborted)
|
|
||||||
return
|
|
||||||
|
|
||||||
cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb)
|
|
||||||
if (!cb)
|
|
||||||
return
|
|
||||||
|
|
||||||
//console.error('RD %j %j', +inGlobStar, abs)
|
|
||||||
if (inGlobStar && !ownProp(this.symlinks, abs))
|
|
||||||
return this._readdirInGlobStar(abs, cb)
|
|
||||||
|
|
||||||
if (ownProp(this.cache, abs)) {
|
|
||||||
var c = this.cache[abs]
|
|
||||||
if (!c || c === 'FILE')
|
|
||||||
return cb()
|
|
||||||
|
|
||||||
if (Array.isArray(c))
|
|
||||||
return cb(null, c)
|
|
||||||
}
|
|
||||||
|
|
||||||
var self = this
|
|
||||||
fs.readdir(abs, readdirCb(this, abs, cb))
|
|
||||||
}
|
|
||||||
|
|
||||||
function readdirCb (self, abs, cb) {
|
|
||||||
return function (er, entries) {
|
|
||||||
if (er)
|
|
||||||
self._readdirError(abs, er, cb)
|
|
||||||
else
|
|
||||||
self._readdirEntries(abs, entries, cb)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype._readdirEntries = function (abs, entries, cb) {
|
|
||||||
if (this.aborted)
|
|
||||||
return
|
|
||||||
|
|
||||||
// if we haven't asked to stat everything, then just
|
|
||||||
// assume that everything in there exists, so we can avoid
|
|
||||||
// having to stat it a second time.
|
|
||||||
if (!this.mark && !this.stat) {
|
|
||||||
for (var i = 0; i < entries.length; i ++) {
|
|
||||||
var e = entries[i]
|
|
||||||
if (abs === '/')
|
|
||||||
e = abs + e
|
|
||||||
else
|
|
||||||
e = abs + '/' + e
|
|
||||||
this.cache[e] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.cache[abs] = entries
|
|
||||||
return cb(null, entries)
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype._readdirError = function (f, er, cb) {
|
|
||||||
if (this.aborted)
|
|
||||||
return
|
|
||||||
|
|
||||||
// handle errors, and cache the information
|
|
||||||
switch (er.code) {
|
|
||||||
case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205
|
|
||||||
case 'ENOTDIR': // totally normal. means it *does* exist.
|
|
||||||
var abs = this._makeAbs(f)
|
|
||||||
this.cache[abs] = 'FILE'
|
|
||||||
if (abs === this.cwdAbs) {
|
|
||||||
var error = new Error(er.code + ' invalid cwd ' + this.cwd)
|
|
||||||
error.path = this.cwd
|
|
||||||
error.code = er.code
|
|
||||||
this.emit('error', error)
|
|
||||||
this.abort()
|
|
||||||
}
|
|
||||||
break
|
|
||||||
|
|
||||||
case 'ENOENT': // not terribly unusual
|
|
||||||
case 'ELOOP':
|
|
||||||
case 'ENAMETOOLONG':
|
|
||||||
case 'UNKNOWN':
|
|
||||||
this.cache[this._makeAbs(f)] = false
|
|
||||||
break
|
|
||||||
|
|
||||||
default: // some unusual error. Treat as failure.
|
|
||||||
this.cache[this._makeAbs(f)] = false
|
|
||||||
if (this.strict) {
|
|
||||||
this.emit('error', er)
|
|
||||||
// If the error is handled, then we abort
|
|
||||||
// if not, we threw out of here
|
|
||||||
this.abort()
|
|
||||||
}
|
|
||||||
if (!this.silent)
|
|
||||||
console.error('glob error', er)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
return cb()
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) {
|
|
||||||
var self = this
|
|
||||||
this._readdir(abs, inGlobStar, function (er, entries) {
|
|
||||||
self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
|
|
||||||
//console.error('pgs2', prefix, remain[0], entries)
|
|
||||||
|
|
||||||
// no entries means not a dir, so it can never have matches
|
|
||||||
// foo.txt/** doesn't match foo.txt
|
|
||||||
if (!entries)
|
|
||||||
return cb()
|
|
||||||
|
|
||||||
// test without the globstar, and with every child both below
|
|
||||||
// and replacing the globstar.
|
|
||||||
var remainWithoutGlobStar = remain.slice(1)
|
|
||||||
var gspref = prefix ? [ prefix ] : []
|
|
||||||
var noGlobStar = gspref.concat(remainWithoutGlobStar)
|
|
||||||
|
|
||||||
// the noGlobStar pattern exits the inGlobStar state
|
|
||||||
this._process(noGlobStar, index, false, cb)
|
|
||||||
|
|
||||||
var isSym = this.symlinks[abs]
|
|
||||||
var len = entries.length
|
|
||||||
|
|
||||||
// If it's a symlink, and we're in a globstar, then stop
|
|
||||||
if (isSym && inGlobStar)
|
|
||||||
return cb()
|
|
||||||
|
|
||||||
for (var i = 0; i < len; i++) {
|
|
||||||
var e = entries[i]
|
|
||||||
if (e.charAt(0) === '.' && !this.dot)
|
|
||||||
continue
|
|
||||||
|
|
||||||
// these two cases enter the inGlobStar state
|
|
||||||
var instead = gspref.concat(entries[i], remainWithoutGlobStar)
|
|
||||||
this._process(instead, index, true, cb)
|
|
||||||
|
|
||||||
var below = gspref.concat(entries[i], remain)
|
|
||||||
this._process(below, index, true, cb)
|
|
||||||
}
|
|
||||||
|
|
||||||
cb()
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype._processSimple = function (prefix, index, cb) {
|
|
||||||
// XXX review this. Shouldn't it be doing the mounting etc
|
|
||||||
// before doing stat? kinda weird?
|
|
||||||
var self = this
|
|
||||||
this._stat(prefix, function (er, exists) {
|
|
||||||
self._processSimple2(prefix, index, er, exists, cb)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) {
|
|
||||||
|
|
||||||
//console.error('ps2', prefix, exists)
|
|
||||||
|
|
||||||
if (!this.matches[index])
|
|
||||||
this.matches[index] = Object.create(null)
|
|
||||||
|
|
||||||
// If it doesn't exist, then just mark the lack of results
|
|
||||||
if (!exists)
|
|
||||||
return cb()
|
|
||||||
|
|
||||||
if (prefix && isAbsolute(prefix) && !this.nomount) {
|
|
||||||
var trail = /[\/\\]$/.test(prefix)
|
|
||||||
if (prefix.charAt(0) === '/') {
|
|
||||||
prefix = path.join(this.root, prefix)
|
|
||||||
} else {
|
|
||||||
prefix = path.resolve(this.root, prefix)
|
|
||||||
if (trail)
|
|
||||||
prefix += '/'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (process.platform === 'win32')
|
|
||||||
prefix = prefix.replace(/\\/g, '/')
|
|
||||||
|
|
||||||
// Mark this as a match
|
|
||||||
this._emitMatch(index, prefix)
|
|
||||||
cb()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns either 'DIR', 'FILE', or false
|
|
||||||
Glob.prototype._stat = function (f, cb) {
|
|
||||||
var abs = this._makeAbs(f)
|
|
||||||
var needDir = f.slice(-1) === '/'
|
|
||||||
|
|
||||||
if (f.length > this.maxLength)
|
|
||||||
return cb()
|
|
||||||
|
|
||||||
if (!this.stat && ownProp(this.cache, abs)) {
|
|
||||||
var c = this.cache[abs]
|
|
||||||
|
|
||||||
if (Array.isArray(c))
|
|
||||||
c = 'DIR'
|
|
||||||
|
|
||||||
// It exists, but maybe not how we need it
|
|
||||||
if (!needDir || c === 'DIR')
|
|
||||||
return cb(null, c)
|
|
||||||
|
|
||||||
if (needDir && c === 'FILE')
|
|
||||||
return cb()
|
|
||||||
|
|
||||||
// otherwise we have to stat, because maybe c=true
|
|
||||||
// if we know it exists, but not what it is.
|
|
||||||
}
|
|
||||||
|
|
||||||
var exists
|
|
||||||
var stat = this.statCache[abs]
|
|
||||||
if (stat !== undefined) {
|
|
||||||
if (stat === false)
|
|
||||||
return cb(null, stat)
|
|
||||||
else {
|
|
||||||
var type = stat.isDirectory() ? 'DIR' : 'FILE'
|
|
||||||
if (needDir && type === 'FILE')
|
|
||||||
return cb()
|
|
||||||
else
|
|
||||||
return cb(null, type, stat)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var self = this
|
|
||||||
var statcb = inflight('stat\0' + abs, lstatcb_)
|
|
||||||
if (statcb)
|
|
||||||
fs.lstat(abs, statcb)
|
|
||||||
|
|
||||||
function lstatcb_ (er, lstat) {
|
|
||||||
if (lstat && lstat.isSymbolicLink()) {
|
|
||||||
// If it's a symlink, then treat it as the target, unless
|
|
||||||
// the target does not exist, then treat it as a file.
|
|
||||||
return fs.stat(abs, function (er, stat) {
|
|
||||||
if (er)
|
|
||||||
self._stat2(f, abs, null, lstat, cb)
|
|
||||||
else
|
|
||||||
self._stat2(f, abs, er, stat, cb)
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
self._stat2(f, abs, er, lstat, cb)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Glob.prototype._stat2 = function (f, abs, er, stat, cb) {
|
|
||||||
if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) {
|
|
||||||
this.statCache[abs] = false
|
|
||||||
return cb()
|
|
||||||
}
|
|
||||||
|
|
||||||
var needDir = f.slice(-1) === '/'
|
|
||||||
this.statCache[abs] = stat
|
|
||||||
|
|
||||||
if (abs.slice(-1) === '/' && stat && !stat.isDirectory())
|
|
||||||
return cb(null, false, stat)
|
|
||||||
|
|
||||||
var c = true
|
|
||||||
if (stat)
|
|
||||||
c = stat.isDirectory() ? 'DIR' : 'FILE'
|
|
||||||
this.cache[abs] = this.cache[abs] || c
|
|
||||||
|
|
||||||
if (needDir && c === 'FILE')
|
|
||||||
return cb()
|
|
||||||
|
|
||||||
return cb(null, c, stat)
|
|
||||||
}
|
|
||||||
80
node_modules/glob/package.json
generated
vendored
80
node_modules/glob/package.json
generated
vendored
@@ -1,80 +0,0 @@
|
|||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"glob@7.1.4",
|
|
||||||
"c:\\EndBug\\GitHub\\add-and-commit"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "glob@7.1.4",
|
|
||||||
"_id": "glob@7.1.4",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
|
|
||||||
"_location": "/glob",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "glob@7.1.4",
|
|
||||||
"name": "glob",
|
|
||||||
"escapedName": "glob",
|
|
||||||
"rawSpec": "7.1.4",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "7.1.4"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/rimraf",
|
|
||||||
"/shelljs"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
|
|
||||||
"_spec": "7.1.4",
|
|
||||||
"_where": "c:\\EndBug\\GitHub\\add-and-commit",
|
|
||||||
"author": {
|
|
||||||
"name": "Isaac Z. Schlueter",
|
|
||||||
"email": "i@izs.me",
|
|
||||||
"url": "http://blog.izs.me/"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/isaacs/node-glob/issues"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"fs.realpath": "^1.0.0",
|
|
||||||
"inflight": "^1.0.4",
|
|
||||||
"inherits": "2",
|
|
||||||
"minimatch": "^3.0.4",
|
|
||||||
"once": "^1.3.0",
|
|
||||||
"path-is-absolute": "^1.0.0"
|
|
||||||
},
|
|
||||||
"description": "a little globber",
|
|
||||||
"devDependencies": {
|
|
||||||
"mkdirp": "0",
|
|
||||||
"rimraf": "^2.2.8",
|
|
||||||
"tap": "^12.0.1",
|
|
||||||
"tick": "0.0.6"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "*"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"glob.js",
|
|
||||||
"sync.js",
|
|
||||||
"common.js"
|
|
||||||
],
|
|
||||||
"homepage": "https://github.com/isaacs/node-glob#readme",
|
|
||||||
"license": "ISC",
|
|
||||||
"main": "glob.js",
|
|
||||||
"name": "glob",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git://github.com/isaacs/node-glob.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"bench": "bash benchmark.sh",
|
|
||||||
"benchclean": "node benchclean.js",
|
|
||||||
"prepublish": "npm run benchclean",
|
|
||||||
"prof": "bash prof.sh && cat profile.txt",
|
|
||||||
"profclean": "rm -f v8.log profile.txt",
|
|
||||||
"test": "tap test/*.js --cov",
|
|
||||||
"test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js"
|
|
||||||
},
|
|
||||||
"version": "7.1.4"
|
|
||||||
}
|
|
||||||
486
node_modules/glob/sync.js
generated
vendored
486
node_modules/glob/sync.js
generated
vendored
@@ -1,486 +0,0 @@
|
|||||||
module.exports = globSync
|
|
||||||
globSync.GlobSync = GlobSync
|
|
||||||
|
|
||||||
var fs = require('fs')
|
|
||||||
var rp = require('fs.realpath')
|
|
||||||
var minimatch = require('minimatch')
|
|
||||||
var Minimatch = minimatch.Minimatch
|
|
||||||
var Glob = require('./glob.js').Glob
|
|
||||||
var util = require('util')
|
|
||||||
var path = require('path')
|
|
||||||
var assert = require('assert')
|
|
||||||
var isAbsolute = require('path-is-absolute')
|
|
||||||
var common = require('./common.js')
|
|
||||||
var alphasort = common.alphasort
|
|
||||||
var alphasorti = common.alphasorti
|
|
||||||
var setopts = common.setopts
|
|
||||||
var ownProp = common.ownProp
|
|
||||||
var childrenIgnored = common.childrenIgnored
|
|
||||||
var isIgnored = common.isIgnored
|
|
||||||
|
|
||||||
function globSync (pattern, options) {
|
|
||||||
if (typeof options === 'function' || arguments.length === 3)
|
|
||||||
throw new TypeError('callback provided to sync glob\n'+
|
|
||||||
'See: https://github.com/isaacs/node-glob/issues/167')
|
|
||||||
|
|
||||||
return new GlobSync(pattern, options).found
|
|
||||||
}
|
|
||||||
|
|
||||||
function GlobSync (pattern, options) {
|
|
||||||
if (!pattern)
|
|
||||||
throw new Error('must provide pattern')
|
|
||||||
|
|
||||||
if (typeof options === 'function' || arguments.length === 3)
|
|
||||||
throw new TypeError('callback provided to sync glob\n'+
|
|
||||||
'See: https://github.com/isaacs/node-glob/issues/167')
|
|
||||||
|
|
||||||
if (!(this instanceof GlobSync))
|
|
||||||
return new GlobSync(pattern, options)
|
|
||||||
|
|
||||||
setopts(this, pattern, options)
|
|
||||||
|
|
||||||
if (this.noprocess)
|
|
||||||
return this
|
|
||||||
|
|
||||||
var n = this.minimatch.set.length
|
|
||||||
this.matches = new Array(n)
|
|
||||||
for (var i = 0; i < n; i ++) {
|
|
||||||
this._process(this.minimatch.set[i], i, false)
|
|
||||||
}
|
|
||||||
this._finish()
|
|
||||||
}
|
|
||||||
|
|
||||||
GlobSync.prototype._finish = function () {
|
|
||||||
assert(this instanceof GlobSync)
|
|
||||||
if (this.realpath) {
|
|
||||||
var self = this
|
|
||||||
this.matches.forEach(function (matchset, index) {
|
|
||||||
var set = self.matches[index] = Object.create(null)
|
|
||||||
for (var p in matchset) {
|
|
||||||
try {
|
|
||||||
p = self._makeAbs(p)
|
|
||||||
var real = rp.realpathSync(p, self.realpathCache)
|
|
||||||
set[real] = true
|
|
||||||
} catch (er) {
|
|
||||||
if (er.syscall === 'stat')
|
|
||||||
set[self._makeAbs(p)] = true
|
|
||||||
else
|
|
||||||
throw er
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
common.finish(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
GlobSync.prototype._process = function (pattern, index, inGlobStar) {
|
|
||||||
assert(this instanceof GlobSync)
|
|
||||||
|
|
||||||
// Get the first [n] parts of pattern that are all strings.
|
|
||||||
var n = 0
|
|
||||||
while (typeof pattern[n] === 'string') {
|
|
||||||
n ++
|
|
||||||
}
|
|
||||||
// now n is the index of the first one that is *not* a string.
|
|
||||||
|
|
||||||
// See if there's anything else
|
|
||||||
var prefix
|
|
||||||
switch (n) {
|
|
||||||
// if not, then this is rather simple
|
|
||||||
case pattern.length:
|
|
||||||
this._processSimple(pattern.join('/'), index)
|
|
||||||
return
|
|
||||||
|
|
||||||
case 0:
|
|
||||||
// pattern *starts* with some non-trivial item.
|
|
||||||
// going to readdir(cwd), but not include the prefix in matches.
|
|
||||||
prefix = null
|
|
||||||
break
|
|
||||||
|
|
||||||
default:
|
|
||||||
// pattern has some string bits in the front.
|
|
||||||
// whatever it starts with, whether that's 'absolute' like /foo/bar,
|
|
||||||
// or 'relative' like '../baz'
|
|
||||||
prefix = pattern.slice(0, n).join('/')
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
var remain = pattern.slice(n)
|
|
||||||
|
|
||||||
// get the list of entries.
|
|
||||||
var read
|
|
||||||
if (prefix === null)
|
|
||||||
read = '.'
|
|
||||||
else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
|
|
||||||
if (!prefix || !isAbsolute(prefix))
|
|
||||||
prefix = '/' + prefix
|
|
||||||
read = prefix
|
|
||||||
} else
|
|
||||||
read = prefix
|
|
||||||
|
|
||||||
var abs = this._makeAbs(read)
|
|
||||||
|
|
||||||
//if ignored, skip processing
|
|
||||||
if (childrenIgnored(this, read))
|
|
||||||
return
|
|
||||||
|
|
||||||
var isGlobStar = remain[0] === minimatch.GLOBSTAR
|
|
||||||
if (isGlobStar)
|
|
||||||
this._processGlobStar(prefix, read, abs, remain, index, inGlobStar)
|
|
||||||
else
|
|
||||||
this._processReaddir(prefix, read, abs, remain, index, inGlobStar)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) {
|
|
||||||
var entries = this._readdir(abs, inGlobStar)
|
|
||||||
|
|
||||||
// if the abs isn't a dir, then nothing can match!
|
|
||||||
if (!entries)
|
|
||||||
return
|
|
||||||
|
|
||||||
// It will only match dot entries if it starts with a dot, or if
|
|
||||||
// dot is set. Stuff like @(.foo|.bar) isn't allowed.
|
|
||||||
var pn = remain[0]
|
|
||||||
var negate = !!this.minimatch.negate
|
|
||||||
var rawGlob = pn._glob
|
|
||||||
var dotOk = this.dot || rawGlob.charAt(0) === '.'
|
|
||||||
|
|
||||||
var matchedEntries = []
|
|
||||||
for (var i = 0; i < entries.length; i++) {
|
|
||||||
var e = entries[i]
|
|
||||||
if (e.charAt(0) !== '.' || dotOk) {
|
|
||||||
var m
|
|
||||||
if (negate && !prefix) {
|
|
||||||
m = !e.match(pn)
|
|
||||||
} else {
|
|
||||||
m = e.match(pn)
|
|
||||||
}
|
|
||||||
if (m)
|
|
||||||
matchedEntries.push(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var len = matchedEntries.length
|
|
||||||
// If there are no matched entries, then nothing matches.
|
|
||||||
if (len === 0)
|
|
||||||
return
|
|
||||||
|
|
||||||
// if this is the last remaining pattern bit, then no need for
|
|
||||||
// an additional stat *unless* the user has specified mark or
|
|
||||||
// stat explicitly. We know they exist, since readdir returned
|
|
||||||
// them.
|
|
||||||
|
|
||||||
if (remain.length === 1 && !this.mark && !this.stat) {
|
|
||||||
if (!this.matches[index])
|
|
||||||
this.matches[index] = Object.create(null)
|
|
||||||
|
|
||||||
for (var i = 0; i < len; i ++) {
|
|
||||||
var e = matchedEntries[i]
|
|
||||||
if (prefix) {
|
|
||||||
if (prefix.slice(-1) !== '/')
|
|
||||||
e = prefix + '/' + e
|
|
||||||
else
|
|
||||||
e = prefix + e
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e.charAt(0) === '/' && !this.nomount) {
|
|
||||||
e = path.join(this.root, e)
|
|
||||||
}
|
|
||||||
this._emitMatch(index, e)
|
|
||||||
}
|
|
||||||
// This was the last one, and no stats were needed
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// now test all matched entries as stand-ins for that part
|
|
||||||
// of the pattern.
|
|
||||||
remain.shift()
|
|
||||||
for (var i = 0; i < len; i ++) {
|
|
||||||
var e = matchedEntries[i]
|
|
||||||
var newPattern
|
|
||||||
if (prefix)
|
|
||||||
newPattern = [prefix, e]
|
|
||||||
else
|
|
||||||
newPattern = [e]
|
|
||||||
this._process(newPattern.concat(remain), index, inGlobStar)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
GlobSync.prototype._emitMatch = function (index, e) {
|
|
||||||
if (isIgnored(this, e))
|
|
||||||
return
|
|
||||||
|
|
||||||
var abs = this._makeAbs(e)
|
|
||||||
|
|
||||||
if (this.mark)
|
|
||||||
e = this._mark(e)
|
|
||||||
|
|
||||||
if (this.absolute) {
|
|
||||||
e = abs
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.matches[index][e])
|
|
||||||
return
|
|
||||||
|
|
||||||
if (this.nodir) {
|
|
||||||
var c = this.cache[abs]
|
|
||||||
if (c === 'DIR' || Array.isArray(c))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this.matches[index][e] = true
|
|
||||||
|
|
||||||
if (this.stat)
|
|
||||||
this._stat(e)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
GlobSync.prototype._readdirInGlobStar = function (abs) {
|
|
||||||
// follow all symlinked directories forever
|
|
||||||
// just proceed as if this is a non-globstar situation
|
|
||||||
if (this.follow)
|
|
||||||
return this._readdir(abs, false)
|
|
||||||
|
|
||||||
var entries
|
|
||||||
var lstat
|
|
||||||
var stat
|
|
||||||
try {
|
|
||||||
lstat = fs.lstatSync(abs)
|
|
||||||
} catch (er) {
|
|
||||||
if (er.code === 'ENOENT') {
|
|
||||||
// lstat failed, doesn't exist
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var isSym = lstat && lstat.isSymbolicLink()
|
|
||||||
this.symlinks[abs] = isSym
|
|
||||||
|
|
||||||
// If it's not a symlink or a dir, then it's definitely a regular file.
|
|
||||||
// don't bother doing a readdir in that case.
|
|
||||||
if (!isSym && lstat && !lstat.isDirectory())
|
|
||||||
this.cache[abs] = 'FILE'
|
|
||||||
else
|
|
||||||
entries = this._readdir(abs, false)
|
|
||||||
|
|
||||||
return entries
|
|
||||||
}
|
|
||||||
|
|
||||||
GlobSync.prototype._readdir = function (abs, inGlobStar) {
|
|
||||||
var entries
|
|
||||||
|
|
||||||
if (inGlobStar && !ownProp(this.symlinks, abs))
|
|
||||||
return this._readdirInGlobStar(abs)
|
|
||||||
|
|
||||||
if (ownProp(this.cache, abs)) {
|
|
||||||
var c = this.cache[abs]
|
|
||||||
if (!c || c === 'FILE')
|
|
||||||
return null
|
|
||||||
|
|
||||||
if (Array.isArray(c))
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
return this._readdirEntries(abs, fs.readdirSync(abs))
|
|
||||||
} catch (er) {
|
|
||||||
this._readdirError(abs, er)
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
GlobSync.prototype._readdirEntries = function (abs, entries) {
|
|
||||||
// if we haven't asked to stat everything, then just
|
|
||||||
// assume that everything in there exists, so we can avoid
|
|
||||||
// having to stat it a second time.
|
|
||||||
if (!this.mark && !this.stat) {
|
|
||||||
for (var i = 0; i < entries.length; i ++) {
|
|
||||||
var e = entries[i]
|
|
||||||
if (abs === '/')
|
|
||||||
e = abs + e
|
|
||||||
else
|
|
||||||
e = abs + '/' + e
|
|
||||||
this.cache[e] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.cache[abs] = entries
|
|
||||||
|
|
||||||
// mark and cache dir-ness
|
|
||||||
return entries
|
|
||||||
}
|
|
||||||
|
|
||||||
GlobSync.prototype._readdirError = function (f, er) {
|
|
||||||
// handle errors, and cache the information
|
|
||||||
switch (er.code) {
|
|
||||||
case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205
|
|
||||||
case 'ENOTDIR': // totally normal. means it *does* exist.
|
|
||||||
var abs = this._makeAbs(f)
|
|
||||||
this.cache[abs] = 'FILE'
|
|
||||||
if (abs === this.cwdAbs) {
|
|
||||||
var error = new Error(er.code + ' invalid cwd ' + this.cwd)
|
|
||||||
error.path = this.cwd
|
|
||||||
error.code = er.code
|
|
||||||
throw error
|
|
||||||
}
|
|
||||||
break
|
|
||||||
|
|
||||||
case 'ENOENT': // not terribly unusual
|
|
||||||
case 'ELOOP':
|
|
||||||
case 'ENAMETOOLONG':
|
|
||||||
case 'UNKNOWN':
|
|
||||||
this.cache[this._makeAbs(f)] = false
|
|
||||||
break
|
|
||||||
|
|
||||||
default: // some unusual error. Treat as failure.
|
|
||||||
this.cache[this._makeAbs(f)] = false
|
|
||||||
if (this.strict)
|
|
||||||
throw er
|
|
||||||
if (!this.silent)
|
|
||||||
console.error('glob error', er)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) {
|
|
||||||
|
|
||||||
var entries = this._readdir(abs, inGlobStar)
|
|
||||||
|
|
||||||
// no entries means not a dir, so it can never have matches
|
|
||||||
// foo.txt/** doesn't match foo.txt
|
|
||||||
if (!entries)
|
|
||||||
return
|
|
||||||
|
|
||||||
// test without the globstar, and with every child both below
|
|
||||||
// and replacing the globstar.
|
|
||||||
var remainWithoutGlobStar = remain.slice(1)
|
|
||||||
var gspref = prefix ? [ prefix ] : []
|
|
||||||
var noGlobStar = gspref.concat(remainWithoutGlobStar)
|
|
||||||
|
|
||||||
// the noGlobStar pattern exits the inGlobStar state
|
|
||||||
this._process(noGlobStar, index, false)
|
|
||||||
|
|
||||||
var len = entries.length
|
|
||||||
var isSym = this.symlinks[abs]
|
|
||||||
|
|
||||||
// If it's a symlink, and we're in a globstar, then stop
|
|
||||||
if (isSym && inGlobStar)
|
|
||||||
return
|
|
||||||
|
|
||||||
for (var i = 0; i < len; i++) {
|
|
||||||
var e = entries[i]
|
|
||||||
if (e.charAt(0) === '.' && !this.dot)
|
|
||||||
continue
|
|
||||||
|
|
||||||
// these two cases enter the inGlobStar state
|
|
||||||
var instead = gspref.concat(entries[i], remainWithoutGlobStar)
|
|
||||||
this._process(instead, index, true)
|
|
||||||
|
|
||||||
var below = gspref.concat(entries[i], remain)
|
|
||||||
this._process(below, index, true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
GlobSync.prototype._processSimple = function (prefix, index) {
|
|
||||||
// XXX review this. Shouldn't it be doing the mounting etc
|
|
||||||
// before doing stat? kinda weird?
|
|
||||||
var exists = this._stat(prefix)
|
|
||||||
|
|
||||||
if (!this.matches[index])
|
|
||||||
this.matches[index] = Object.create(null)
|
|
||||||
|
|
||||||
// If it doesn't exist, then just mark the lack of results
|
|
||||||
if (!exists)
|
|
||||||
return
|
|
||||||
|
|
||||||
if (prefix && isAbsolute(prefix) && !this.nomount) {
|
|
||||||
var trail = /[\/\\]$/.test(prefix)
|
|
||||||
if (prefix.charAt(0) === '/') {
|
|
||||||
prefix = path.join(this.root, prefix)
|
|
||||||
} else {
|
|
||||||
prefix = path.resolve(this.root, prefix)
|
|
||||||
if (trail)
|
|
||||||
prefix += '/'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (process.platform === 'win32')
|
|
||||||
prefix = prefix.replace(/\\/g, '/')
|
|
||||||
|
|
||||||
// Mark this as a match
|
|
||||||
this._emitMatch(index, prefix)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns either 'DIR', 'FILE', or false
|
|
||||||
GlobSync.prototype._stat = function (f) {
|
|
||||||
var abs = this._makeAbs(f)
|
|
||||||
var needDir = f.slice(-1) === '/'
|
|
||||||
|
|
||||||
if (f.length > this.maxLength)
|
|
||||||
return false
|
|
||||||
|
|
||||||
if (!this.stat && ownProp(this.cache, abs)) {
|
|
||||||
var c = this.cache[abs]
|
|
||||||
|
|
||||||
if (Array.isArray(c))
|
|
||||||
c = 'DIR'
|
|
||||||
|
|
||||||
// It exists, but maybe not how we need it
|
|
||||||
if (!needDir || c === 'DIR')
|
|
||||||
return c
|
|
||||||
|
|
||||||
if (needDir && c === 'FILE')
|
|
||||||
return false
|
|
||||||
|
|
||||||
// otherwise we have to stat, because maybe c=true
|
|
||||||
// if we know it exists, but not what it is.
|
|
||||||
}
|
|
||||||
|
|
||||||
var exists
|
|
||||||
var stat = this.statCache[abs]
|
|
||||||
if (!stat) {
|
|
||||||
var lstat
|
|
||||||
try {
|
|
||||||
lstat = fs.lstatSync(abs)
|
|
||||||
} catch (er) {
|
|
||||||
if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) {
|
|
||||||
this.statCache[abs] = false
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lstat && lstat.isSymbolicLink()) {
|
|
||||||
try {
|
|
||||||
stat = fs.statSync(abs)
|
|
||||||
} catch (er) {
|
|
||||||
stat = lstat
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
stat = lstat
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.statCache[abs] = stat
|
|
||||||
|
|
||||||
var c = true
|
|
||||||
if (stat)
|
|
||||||
c = stat.isDirectory() ? 'DIR' : 'FILE'
|
|
||||||
|
|
||||||
this.cache[abs] = this.cache[abs] || c
|
|
||||||
|
|
||||||
if (needDir && c === 'FILE')
|
|
||||||
return false
|
|
||||||
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
|
|
||||||
GlobSync.prototype._mark = function (p) {
|
|
||||||
return common.mark(this, p)
|
|
||||||
}
|
|
||||||
|
|
||||||
GlobSync.prototype._makeAbs = function (f) {
|
|
||||||
return common.makeAbs(this, f)
|
|
||||||
}
|
|
||||||
15
node_modules/inflight/LICENSE
generated
vendored
15
node_modules/inflight/LICENSE
generated
vendored
@@ -1,15 +0,0 @@
|
|||||||
The ISC License
|
|
||||||
|
|
||||||
Copyright (c) Isaac Z. Schlueter
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
||||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
37
node_modules/inflight/README.md
generated
vendored
37
node_modules/inflight/README.md
generated
vendored
@@ -1,37 +0,0 @@
|
|||||||
# inflight
|
|
||||||
|
|
||||||
Add callbacks to requests in flight to avoid async duplication
|
|
||||||
|
|
||||||
## USAGE
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var inflight = require('inflight')
|
|
||||||
|
|
||||||
// some request that does some stuff
|
|
||||||
function req(key, callback) {
|
|
||||||
// key is any random string. like a url or filename or whatever.
|
|
||||||
//
|
|
||||||
// will return either a falsey value, indicating that the
|
|
||||||
// request for this key is already in flight, or a new callback
|
|
||||||
// which when called will call all callbacks passed to inflightk
|
|
||||||
// with the same key
|
|
||||||
callback = inflight(key, callback)
|
|
||||||
|
|
||||||
// If we got a falsey value back, then there's already a req going
|
|
||||||
if (!callback) return
|
|
||||||
|
|
||||||
// this is where you'd fetch the url or whatever
|
|
||||||
// callback is also once()-ified, so it can safely be assigned
|
|
||||||
// to multiple events etc. First call wins.
|
|
||||||
setTimeout(function() {
|
|
||||||
callback(null, key)
|
|
||||||
}, 100)
|
|
||||||
}
|
|
||||||
|
|
||||||
// only assigns a single setTimeout
|
|
||||||
// when it dings, all cbs get called
|
|
||||||
req('foo', cb1)
|
|
||||||
req('foo', cb2)
|
|
||||||
req('foo', cb3)
|
|
||||||
req('foo', cb4)
|
|
||||||
```
|
|
||||||
54
node_modules/inflight/inflight.js
generated
vendored
54
node_modules/inflight/inflight.js
generated
vendored
@@ -1,54 +0,0 @@
|
|||||||
var wrappy = require('wrappy')
|
|
||||||
var reqs = Object.create(null)
|
|
||||||
var once = require('once')
|
|
||||||
|
|
||||||
module.exports = wrappy(inflight)
|
|
||||||
|
|
||||||
function inflight (key, cb) {
|
|
||||||
if (reqs[key]) {
|
|
||||||
reqs[key].push(cb)
|
|
||||||
return null
|
|
||||||
} else {
|
|
||||||
reqs[key] = [cb]
|
|
||||||
return makeres(key)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function makeres (key) {
|
|
||||||
return once(function RES () {
|
|
||||||
var cbs = reqs[key]
|
|
||||||
var len = cbs.length
|
|
||||||
var args = slice(arguments)
|
|
||||||
|
|
||||||
// XXX It's somewhat ambiguous whether a new callback added in this
|
|
||||||
// pass should be queued for later execution if something in the
|
|
||||||
// list of callbacks throws, or if it should just be discarded.
|
|
||||||
// However, it's such an edge case that it hardly matters, and either
|
|
||||||
// choice is likely as surprising as the other.
|
|
||||||
// As it happens, we do go ahead and schedule it for later execution.
|
|
||||||
try {
|
|
||||||
for (var i = 0; i < len; i++) {
|
|
||||||
cbs[i].apply(null, args)
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
if (cbs.length > len) {
|
|
||||||
// added more in the interim.
|
|
||||||
// de-zalgo, just in case, but don't call again.
|
|
||||||
cbs.splice(0, len)
|
|
||||||
process.nextTick(function () {
|
|
||||||
RES.apply(null, args)
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
delete reqs[key]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function slice (args) {
|
|
||||||
var length = args.length
|
|
||||||
var array = []
|
|
||||||
|
|
||||||
for (var i = 0; i < length; i++) array[i] = args[i]
|
|
||||||
return array
|
|
||||||
}
|
|
||||||
62
node_modules/inflight/package.json
generated
vendored
62
node_modules/inflight/package.json
generated
vendored
@@ -1,62 +0,0 @@
|
|||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"inflight@1.0.6",
|
|
||||||
"c:\\EndBug\\GitHub\\add-and-commit"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "inflight@1.0.6",
|
|
||||||
"_id": "inflight@1.0.6",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
|
||||||
"_location": "/inflight",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "inflight@1.0.6",
|
|
||||||
"name": "inflight",
|
|
||||||
"escapedName": "inflight",
|
|
||||||
"rawSpec": "1.0.6",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "1.0.6"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/@typescript-eslint/typescript-estree/glob",
|
|
||||||
"/glob"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
|
||||||
"_spec": "1.0.6",
|
|
||||||
"_where": "c:\\EndBug\\GitHub\\add-and-commit",
|
|
||||||
"author": {
|
|
||||||
"name": "Isaac Z. Schlueter",
|
|
||||||
"email": "i@izs.me",
|
|
||||||
"url": "http://blog.izs.me/"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/isaacs/inflight/issues"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"once": "^1.3.0",
|
|
||||||
"wrappy": "1"
|
|
||||||
},
|
|
||||||
"description": "Add callbacks to requests in flight to avoid async duplication",
|
|
||||||
"devDependencies": {
|
|
||||||
"tap": "^7.1.2"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"inflight.js"
|
|
||||||
],
|
|
||||||
"homepage": "https://github.com/isaacs/inflight",
|
|
||||||
"license": "ISC",
|
|
||||||
"main": "inflight.js",
|
|
||||||
"name": "inflight",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/npm/inflight.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "tap test.js --100"
|
|
||||||
},
|
|
||||||
"version": "1.0.6"
|
|
||||||
}
|
|
||||||
16
node_modules/inherits/LICENSE
generated
vendored
16
node_modules/inherits/LICENSE
generated
vendored
@@ -1,16 +0,0 @@
|
|||||||
The ISC License
|
|
||||||
|
|
||||||
Copyright (c) Isaac Z. Schlueter
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
||||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
||||||
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
||||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
||||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
|
|
||||||
42
node_modules/inherits/README.md
generated
vendored
42
node_modules/inherits/README.md
generated
vendored
@@ -1,42 +0,0 @@
|
|||||||
Browser-friendly inheritance fully compatible with standard node.js
|
|
||||||
[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).
|
|
||||||
|
|
||||||
This package exports standard `inherits` from node.js `util` module in
|
|
||||||
node environment, but also provides alternative browser-friendly
|
|
||||||
implementation through [browser
|
|
||||||
field](https://gist.github.com/shtylman/4339901). Alternative
|
|
||||||
implementation is a literal copy of standard one located in standalone
|
|
||||||
module to avoid requiring of `util`. It also has a shim for old
|
|
||||||
browsers with no `Object.create` support.
|
|
||||||
|
|
||||||
While keeping you sure you are using standard `inherits`
|
|
||||||
implementation in node.js environment, it allows bundlers such as
|
|
||||||
[browserify](https://github.com/substack/node-browserify) to not
|
|
||||||
include full `util` package to your client code if all you need is
|
|
||||||
just `inherits` function. It worth, because browser shim for `util`
|
|
||||||
package is large and `inherits` is often the single function you need
|
|
||||||
from it.
|
|
||||||
|
|
||||||
It's recommended to use this package instead of
|
|
||||||
`require('util').inherits` for any code that has chances to be used
|
|
||||||
not only in node.js but in browser too.
|
|
||||||
|
|
||||||
## usage
|
|
||||||
|
|
||||||
```js
|
|
||||||
var inherits = require('inherits');
|
|
||||||
// then use exactly as the standard one
|
|
||||||
```
|
|
||||||
|
|
||||||
## note on version ~1.0
|
|
||||||
|
|
||||||
Version ~1.0 had completely different motivation and is not compatible
|
|
||||||
neither with 2.0 nor with standard node.js `inherits`.
|
|
||||||
|
|
||||||
If you are using version ~1.0 and planning to switch to ~2.0, be
|
|
||||||
careful:
|
|
||||||
|
|
||||||
* new version uses `super_` instead of `super` for referencing
|
|
||||||
superclass
|
|
||||||
* new version overwrites current prototype while old one preserves any
|
|
||||||
existing fields on it
|
|
||||||
9
node_modules/inherits/inherits.js
generated
vendored
9
node_modules/inherits/inherits.js
generated
vendored
@@ -1,9 +0,0 @@
|
|||||||
try {
|
|
||||||
var util = require('util');
|
|
||||||
/* istanbul ignore next */
|
|
||||||
if (typeof util.inherits !== 'function') throw '';
|
|
||||||
module.exports = util.inherits;
|
|
||||||
} catch (e) {
|
|
||||||
/* istanbul ignore next */
|
|
||||||
module.exports = require('./inherits_browser.js');
|
|
||||||
}
|
|
||||||
27
node_modules/inherits/inherits_browser.js
generated
vendored
27
node_modules/inherits/inherits_browser.js
generated
vendored
@@ -1,27 +0,0 @@
|
|||||||
if (typeof Object.create === 'function') {
|
|
||||||
// implementation from standard node.js 'util' module
|
|
||||||
module.exports = function inherits(ctor, superCtor) {
|
|
||||||
if (superCtor) {
|
|
||||||
ctor.super_ = superCtor
|
|
||||||
ctor.prototype = Object.create(superCtor.prototype, {
|
|
||||||
constructor: {
|
|
||||||
value: ctor,
|
|
||||||
enumerable: false,
|
|
||||||
writable: true,
|
|
||||||
configurable: true
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
// old school shim for old browsers
|
|
||||||
module.exports = function inherits(ctor, superCtor) {
|
|
||||||
if (superCtor) {
|
|
||||||
ctor.super_ = superCtor
|
|
||||||
var TempCtor = function () {}
|
|
||||||
TempCtor.prototype = superCtor.prototype
|
|
||||||
ctor.prototype = new TempCtor()
|
|
||||||
ctor.prototype.constructor = ctor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
65
node_modules/inherits/package.json
generated
vendored
65
node_modules/inherits/package.json
generated
vendored
@@ -1,65 +0,0 @@
|
|||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"inherits@2.0.4",
|
|
||||||
"c:\\EndBug\\GitHub\\add-and-commit"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "inherits@2.0.4",
|
|
||||||
"_id": "inherits@2.0.4",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
|
||||||
"_location": "/inherits",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "inherits@2.0.4",
|
|
||||||
"name": "inherits",
|
|
||||||
"escapedName": "inherits",
|
|
||||||
"rawSpec": "2.0.4",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "2.0.4"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/@typescript-eslint/typescript-estree/glob",
|
|
||||||
"/glob"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
|
||||||
"_spec": "2.0.4",
|
|
||||||
"_where": "c:\\EndBug\\GitHub\\add-and-commit",
|
|
||||||
"browser": "./inherits_browser.js",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/isaacs/inherits/issues"
|
|
||||||
},
|
|
||||||
"description": "Browser-friendly inheritance fully compatible with standard node.js inherits()",
|
|
||||||
"devDependencies": {
|
|
||||||
"tap": "^14.2.4"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"inherits.js",
|
|
||||||
"inherits_browser.js"
|
|
||||||
],
|
|
||||||
"homepage": "https://github.com/isaacs/inherits#readme",
|
|
||||||
"keywords": [
|
|
||||||
"inheritance",
|
|
||||||
"class",
|
|
||||||
"klass",
|
|
||||||
"oop",
|
|
||||||
"object-oriented",
|
|
||||||
"inherits",
|
|
||||||
"browser",
|
|
||||||
"browserify"
|
|
||||||
],
|
|
||||||
"license": "ISC",
|
|
||||||
"main": "./inherits.js",
|
|
||||||
"name": "inherits",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git://github.com/isaacs/inherits.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "tap"
|
|
||||||
},
|
|
||||||
"version": "2.0.4"
|
|
||||||
}
|
|
||||||
115
node_modules/interpret/CHANGELOG
generated
vendored
115
node_modules/interpret/CHANGELOG
generated
vendored
@@ -1,115 +0,0 @@
|
|||||||
v1.0.3:
|
|
||||||
date: 2017-04-18
|
|
||||||
changes:
|
|
||||||
- fix buble support
|
|
||||||
v1.0.2:
|
|
||||||
date: 2017-03-29
|
|
||||||
changes:
|
|
||||||
- add support for coffeescript (now with no hyphen)
|
|
||||||
v1.0.1:
|
|
||||||
date: 2016-05-01
|
|
||||||
changes:
|
|
||||||
- add support for buble
|
|
||||||
v1.0.0:
|
|
||||||
date: 2015-11-18
|
|
||||||
changes:
|
|
||||||
- add support for babel-register
|
|
||||||
- go stable!
|
|
||||||
v0.6.6:
|
|
||||||
date: 2015-09-21
|
|
||||||
changes:
|
|
||||||
- add support for ts-node (formerly typescript-node)
|
|
||||||
v0.6.5:
|
|
||||||
date: 2015-07-22
|
|
||||||
changes:
|
|
||||||
- add support for typescript 1.5 via typescript-node
|
|
||||||
v0.6.4:
|
|
||||||
date: 2015-07-07
|
|
||||||
changes:
|
|
||||||
- add support for earlgrey
|
|
||||||
v0.6.3:
|
|
||||||
date: 2015-07-03
|
|
||||||
changes:
|
|
||||||
- prefer babel/core to babel
|
|
||||||
v0.6.2:
|
|
||||||
date: 2015-05-20
|
|
||||||
changes:
|
|
||||||
- update module list for iced coffee-script
|
|
||||||
v0.6.1:
|
|
||||||
date: 2015-05-20
|
|
||||||
changes:
|
|
||||||
- Fix toml loader.
|
|
||||||
v0.6.0:
|
|
||||||
date: 2015-05-19
|
|
||||||
changes:
|
|
||||||
- Combine fallbacks and loaders into `extensions`.
|
|
||||||
- Provide implementation guidance.
|
|
||||||
v0.5.1:
|
|
||||||
date: 2015-03-01
|
|
||||||
changes:
|
|
||||||
- Add support for CirruScript.
|
|
||||||
v0.5.0:
|
|
||||||
date: 2015-02-27
|
|
||||||
changes:
|
|
||||||
- Refactor es6 support via Babel (formerly 6to5)
|
|
||||||
v0.4.3:
|
|
||||||
date: 2015-02-09
|
|
||||||
changes:
|
|
||||||
- Switch support from typescript-require to typescript-register.
|
|
||||||
v0.4.2:
|
|
||||||
date: 2015-01-16
|
|
||||||
changes:
|
|
||||||
- Add support for wisp.
|
|
||||||
v0.4.1:
|
|
||||||
date: 2015-01-10
|
|
||||||
changes:
|
|
||||||
- Add support for 6to5 (es6)
|
|
||||||
v0.4.0:
|
|
||||||
date: 2014-01-09
|
|
||||||
changes:
|
|
||||||
- Add support for fallback (legacy) modules
|
|
||||||
- Add support for module configurations
|
|
||||||
v0.3.10:
|
|
||||||
date: 2014-12-17
|
|
||||||
changes:
|
|
||||||
- Add support for json5.
|
|
||||||
v0.3.9:
|
|
||||||
date: 2014-12-08
|
|
||||||
changes:
|
|
||||||
- Add support for literate iced coffee.
|
|
||||||
v0.3.8:
|
|
||||||
date: 2014-11-20
|
|
||||||
changes:
|
|
||||||
- Add support for [cjsx](https://github.com/jsdf/coffee-react).
|
|
||||||
v0.3.7:
|
|
||||||
date: 2014-09-08
|
|
||||||
changes:
|
|
||||||
- Add support for [TypeScript](http://www.typescriptlang.org/).
|
|
||||||
v0.3.6:
|
|
||||||
date: 2014-08-25
|
|
||||||
changes:
|
|
||||||
- Add support for coffee.md.
|
|
||||||
v0.3.5:
|
|
||||||
date: 2014-07-03
|
|
||||||
changes:
|
|
||||||
- Add support for jsx.
|
|
||||||
v0.3.4:
|
|
||||||
date: 2014-06-27
|
|
||||||
changes:
|
|
||||||
- Make .js first jsVariant entry.
|
|
||||||
v0.3.3:
|
|
||||||
date: 2014-06-02
|
|
||||||
changes:
|
|
||||||
- Fix casing on livescript dependency.
|
|
||||||
v0.3.0:
|
|
||||||
date: 2014-04-20
|
|
||||||
changes:
|
|
||||||
- Simplify loading of coffee-script and iced-coffee-script.
|
|
||||||
v0.2.0:
|
|
||||||
date: 2014-04-20
|
|
||||||
changes:
|
|
||||||
- Move module loading into rechoir.
|
|
||||||
v0.1.0:
|
|
||||||
date: 2014-04-20
|
|
||||||
changes:
|
|
||||||
- Initial public release.
|
|
||||||
22
node_modules/interpret/LICENSE
generated
vendored
22
node_modules/interpret/LICENSE
generated
vendored
@@ -1,22 +0,0 @@
|
|||||||
Copyright (c) 2014-2018 Tyler Kellen <tyler@sleekcode.net>, Blaine Bublitz <blaine.bublitz@gmail.com>, and Eric Schoffstall <yo@contra.io>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person
|
|
||||||
obtaining a copy of this software and associated documentation
|
|
||||||
files (the "Software"), to deal in the Software without
|
|
||||||
restriction, including without limitation the rights to use,
|
|
||||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the
|
|
||||||
Software is furnished to do so, subject to the following
|
|
||||||
conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
||||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
||||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
||||||
OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
184
node_modules/interpret/README.md
generated
vendored
184
node_modules/interpret/README.md
generated
vendored
@@ -1,184 +0,0 @@
|
|||||||
<p align="center">
|
|
||||||
<a href="http://gulpjs.com">
|
|
||||||
<img height="257" width="114" src="https://raw.githubusercontent.com/gulpjs/artwork/master/gulp-2x.png">
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
# interpret
|
|
||||||
|
|
||||||
[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Travis Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
|
|
||||||
|
|
||||||
A dictionary of file extensions and associated module loaders.
|
|
||||||
|
|
||||||
## What is it
|
|
||||||
This is used by [Liftoff](http://github.com/tkellen/node-liftoff) to automatically require dependencies for configuration files, and by [rechoir](http://github.com/tkellen/node-rechoir) for registering module loaders.
|
|
||||||
|
|
||||||
## API
|
|
||||||
|
|
||||||
### extensions
|
|
||||||
Map file types to modules which provide a [require.extensions] loader.
|
|
||||||
|
|
||||||
```js
|
|
||||||
{
|
|
||||||
'.babel.js': [
|
|
||||||
{
|
|
||||||
module: '@babel/register',
|
|
||||||
register: function(hook) {
|
|
||||||
// register on .js extension due to https://github.com/joyent/node/blob/v0.12.0/lib/module.js#L353
|
|
||||||
// which only captures the final extension (.babel.js -> .js)
|
|
||||||
hook({ extensions: '.js' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
module: 'babel-register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.js' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
module: 'babel-core/register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.js' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
module: 'babel/register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.js' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'.babel.ts': [
|
|
||||||
{
|
|
||||||
module: '@babel/register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.ts' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'.buble.js': 'buble/register',
|
|
||||||
'.cirru': 'cirru-script/lib/register',
|
|
||||||
'.cjsx': 'node-cjsx/register',
|
|
||||||
'.co': 'coco',
|
|
||||||
'.coffee': ['coffeescript/register', 'coffee-script/register', 'coffeescript', 'coffee-script'],
|
|
||||||
'.coffee.md': ['coffeescript/register', 'coffee-script/register', 'coffeescript', 'coffee-script'],
|
|
||||||
'.csv': 'require-csv',
|
|
||||||
'.eg': 'earlgrey/register',
|
|
||||||
'.esm.js': {
|
|
||||||
module: 'esm',
|
|
||||||
register: function(hook) {
|
|
||||||
// register on .js extension due to https://github.com/joyent/node/blob/v0.12.0/lib/module.js#L353
|
|
||||||
// which only captures the final extension (.babel.js -> .js)
|
|
||||||
var esmLoader = hook(module);
|
|
||||||
require.extensions['.js'] = esmLoader('module')._extensions['.js'];
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'.iced': ['iced-coffee-script/register', 'iced-coffee-script'],
|
|
||||||
'.iced.md': 'iced-coffee-script/register',
|
|
||||||
'.ini': 'require-ini',
|
|
||||||
'.js': null,
|
|
||||||
'.json': null,
|
|
||||||
'.json5': 'json5/lib/require',
|
|
||||||
'.jsx': [
|
|
||||||
{
|
|
||||||
module: '@babel/register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.jsx' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
module: 'babel-register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.jsx' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
module: 'babel-core/register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.jsx' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
module: 'babel/register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.jsx' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
module: 'node-jsx',
|
|
||||||
register: function(hook) {
|
|
||||||
hook.install({ extension: '.jsx', harmony: true });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'.litcoffee': ['coffeescript/register', 'coffee-script/register', 'coffeescript', 'coffee-script'],
|
|
||||||
'.liticed': 'iced-coffee-script/register',
|
|
||||||
'.ls': ['livescript', 'LiveScript'],
|
|
||||||
'.node': null,
|
|
||||||
'.toml': {
|
|
||||||
module: 'toml-require',
|
|
||||||
register: function(hook) {
|
|
||||||
hook.install();
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'.ts': [
|
|
||||||
'ts-node/register',
|
|
||||||
'typescript-node/register',
|
|
||||||
'typescript-register',
|
|
||||||
'typescript-require',
|
|
||||||
{
|
|
||||||
module: '@babel/register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.ts' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'.tsx': [
|
|
||||||
'ts-node/register',
|
|
||||||
'typescript-node/register',
|
|
||||||
{
|
|
||||||
module: '@babel/register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.tsx' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'.wisp': 'wisp/engine/node',
|
|
||||||
'.xml': 'require-xml',
|
|
||||||
'.yaml': 'require-yaml',
|
|
||||||
'.yml': 'require-yaml',
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### jsVariants
|
|
||||||
Same as above, but only include the extensions which are javascript variants.
|
|
||||||
|
|
||||||
## How to use it
|
|
||||||
|
|
||||||
Consumers should use the exported `extensions` or `jsVariants` object to determine which module should be loaded for a given extension. If a matching extension is found, consumers should do the following:
|
|
||||||
|
|
||||||
1. If the value is null, do nothing.
|
|
||||||
|
|
||||||
2. If the value is a string, try to require it.
|
|
||||||
|
|
||||||
3. If the value is an object, try to require the `module` property. If successful, the `register` property (a function) should be called with the module passed as the first argument.
|
|
||||||
|
|
||||||
4. If the value is an array, iterate over it, attempting step #2 or #3 until one of the attempts does not throw.
|
|
||||||
|
|
||||||
[require.extensions]: http://nodejs.org/api/globals.html#globals_require_extensions
|
|
||||||
|
|
||||||
[downloads-image]: http://img.shields.io/npm/dm/interpret.svg
|
|
||||||
[npm-url]: https://www.npmjs.com/package/interpret
|
|
||||||
[npm-image]: http://img.shields.io/npm/v/interpret.svg
|
|
||||||
|
|
||||||
[travis-url]: https://travis-ci.org/gulpjs/interpret
|
|
||||||
[travis-image]: http://img.shields.io/travis/gulpjs/interpret.svg?label=travis-ci
|
|
||||||
|
|
||||||
[appveyor-url]: https://ci.appveyor.com/project/gulpjs/interpret
|
|
||||||
[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/interpret.svg?label=appveyor
|
|
||||||
|
|
||||||
[coveralls-url]: https://coveralls.io/r/gulpjs/interpret
|
|
||||||
[coveralls-image]: http://img.shields.io/coveralls/gulpjs/interpret/master.svg
|
|
||||||
|
|
||||||
[gitter-url]: https://gitter.im/gulpjs/gulp
|
|
||||||
[gitter-image]: https://badges.gitter.im/gulpjs/gulp.svg
|
|
||||||
160
node_modules/interpret/index.js
generated
vendored
160
node_modules/interpret/index.js
generated
vendored
@@ -1,160 +0,0 @@
|
|||||||
var extensions = {
|
|
||||||
'.babel.js': [
|
|
||||||
{
|
|
||||||
module: '@babel/register',
|
|
||||||
register: function(hook) {
|
|
||||||
// register on .js extension due to https://github.com/joyent/node/blob/v0.12.0/lib/module.js#L353
|
|
||||||
// which only captures the final extension (.babel.js -> .js)
|
|
||||||
hook({ extensions: '.js' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
module: 'babel-register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.js' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
module: 'babel-core/register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.js' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
module: 'babel/register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.js' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'.babel.ts': [
|
|
||||||
{
|
|
||||||
module: '@babel/register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.ts' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'.buble.js': 'buble/register',
|
|
||||||
'.cirru': 'cirru-script/lib/register',
|
|
||||||
'.cjsx': 'node-cjsx/register',
|
|
||||||
'.co': 'coco',
|
|
||||||
'.coffee': ['coffeescript/register', 'coffee-script/register', 'coffeescript', 'coffee-script'],
|
|
||||||
'.coffee.md': ['coffeescript/register', 'coffee-script/register', 'coffeescript', 'coffee-script'],
|
|
||||||
'.csv': 'require-csv',
|
|
||||||
'.eg': 'earlgrey/register',
|
|
||||||
'.esm.js': {
|
|
||||||
module: 'esm',
|
|
||||||
register: function(hook) {
|
|
||||||
// register on .js extension due to https://github.com/joyent/node/blob/v0.12.0/lib/module.js#L353
|
|
||||||
// which only captures the final extension (.babel.js -> .js)
|
|
||||||
var esmLoader = hook(module);
|
|
||||||
require.extensions['.js'] = esmLoader('module')._extensions['.js'];
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'.iced': ['iced-coffee-script/register', 'iced-coffee-script'],
|
|
||||||
'.iced.md': 'iced-coffee-script/register',
|
|
||||||
'.ini': 'require-ini',
|
|
||||||
'.js': null,
|
|
||||||
'.json': null,
|
|
||||||
'.json5': 'json5/lib/require',
|
|
||||||
'.jsx': [
|
|
||||||
{
|
|
||||||
module: '@babel/register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.jsx' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
module: 'babel-register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.jsx' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
module: 'babel-core/register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.jsx' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
module: 'babel/register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.jsx' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
module: 'node-jsx',
|
|
||||||
register: function(hook) {
|
|
||||||
hook.install({ extension: '.jsx', harmony: true });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'.litcoffee': ['coffeescript/register', 'coffee-script/register', 'coffeescript', 'coffee-script'],
|
|
||||||
'.liticed': 'iced-coffee-script/register',
|
|
||||||
'.ls': ['livescript', 'LiveScript'],
|
|
||||||
'.node': null,
|
|
||||||
'.toml': {
|
|
||||||
module: 'toml-require',
|
|
||||||
register: function(hook) {
|
|
||||||
hook.install();
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'.ts': [
|
|
||||||
'ts-node/register',
|
|
||||||
'typescript-node/register',
|
|
||||||
'typescript-register',
|
|
||||||
'typescript-require',
|
|
||||||
{
|
|
||||||
module: '@babel/register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.ts' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'.tsx': [
|
|
||||||
'ts-node/register',
|
|
||||||
'typescript-node/register',
|
|
||||||
{
|
|
||||||
module: '@babel/register',
|
|
||||||
register: function(hook) {
|
|
||||||
hook({ extensions: '.tsx' });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'.wisp': 'wisp/engine/node',
|
|
||||||
'.xml': 'require-xml',
|
|
||||||
'.yaml': 'require-yaml',
|
|
||||||
'.yml': 'require-yaml',
|
|
||||||
};
|
|
||||||
|
|
||||||
var jsVariantExtensions = [
|
|
||||||
'.js',
|
|
||||||
'.babel.js',
|
|
||||||
'.babel.ts',
|
|
||||||
'.buble.js',
|
|
||||||
'.cirru',
|
|
||||||
'.cjsx',
|
|
||||||
'.co',
|
|
||||||
'.coffee',
|
|
||||||
'.coffee.md',
|
|
||||||
'.eg',
|
|
||||||
'.esm.js',
|
|
||||||
'.iced',
|
|
||||||
'.iced.md',
|
|
||||||
'.jsx',
|
|
||||||
'.litcoffee',
|
|
||||||
'.liticed',
|
|
||||||
'.ls',
|
|
||||||
'.ts',
|
|
||||||
'.tsx',
|
|
||||||
'.wisp',
|
|
||||||
];
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
extensions: extensions,
|
|
||||||
jsVariants: jsVariantExtensions.reduce(function(result, ext) {
|
|
||||||
result[ext] = extensions[ext];
|
|
||||||
return result;
|
|
||||||
}, {}),
|
|
||||||
};
|
|
||||||
119
node_modules/interpret/package.json
generated
vendored
119
node_modules/interpret/package.json
generated
vendored
@@ -1,119 +0,0 @@
|
|||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"interpret@1.2.0",
|
|
||||||
"c:\\EndBug\\GitHub\\add-and-commit"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "interpret@1.2.0",
|
|
||||||
"_id": "interpret@1.2.0",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
|
|
||||||
"_location": "/interpret",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "interpret@1.2.0",
|
|
||||||
"name": "interpret",
|
|
||||||
"escapedName": "interpret",
|
|
||||||
"rawSpec": "1.2.0",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "1.2.0"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/shelljs"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
|
|
||||||
"_spec": "1.2.0",
|
|
||||||
"_where": "c:\\EndBug\\GitHub\\add-and-commit",
|
|
||||||
"author": {
|
|
||||||
"name": "Gulp Team",
|
|
||||||
"email": "team@gulpjs.com",
|
|
||||||
"url": "http://gulpjs.com/"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/gulpjs/interpret/issues"
|
|
||||||
},
|
|
||||||
"contributors": [
|
|
||||||
{
|
|
||||||
"name": "Blaine Bublitz",
|
|
||||||
"email": "blaine.bublitz@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Tyler Kellen",
|
|
||||||
"email": "tyler@sleekcode.net",
|
|
||||||
"url": "http://goingslowly.com/"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"dependencies": {},
|
|
||||||
"description": "A dictionary of file extensions and associated module loaders.",
|
|
||||||
"devDependencies": {
|
|
||||||
"eslint": "^2.13.0",
|
|
||||||
"eslint-config-gulp": "^3.0.1",
|
|
||||||
"expect": "^1.20.2",
|
|
||||||
"istanbul": "^0.4.3",
|
|
||||||
"istanbul-coveralls": "^1.0.3",
|
|
||||||
"mocha": "^3.5.3",
|
|
||||||
"parse-node-version": "^1.0.0",
|
|
||||||
"rechoir": "^0.6.2",
|
|
||||||
"shelljs": "0.7.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 0.10"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"LICENSE",
|
|
||||||
"index.js"
|
|
||||||
],
|
|
||||||
"homepage": "https://github.com/gulpjs/interpret#readme",
|
|
||||||
"keywords": [
|
|
||||||
"cirru-script",
|
|
||||||
"cjsx",
|
|
||||||
"co",
|
|
||||||
"coco",
|
|
||||||
"coffee",
|
|
||||||
"coffee-script",
|
|
||||||
"coffee.md",
|
|
||||||
"coffeescript",
|
|
||||||
"csv",
|
|
||||||
"earlgrey",
|
|
||||||
"es",
|
|
||||||
"es6",
|
|
||||||
"iced",
|
|
||||||
"iced.md",
|
|
||||||
"iced-coffee-script",
|
|
||||||
"ini",
|
|
||||||
"js",
|
|
||||||
"json",
|
|
||||||
"json5",
|
|
||||||
"jsx",
|
|
||||||
"react",
|
|
||||||
"litcoffee",
|
|
||||||
"liticed",
|
|
||||||
"ls",
|
|
||||||
"livescript",
|
|
||||||
"toml",
|
|
||||||
"ts",
|
|
||||||
"typescript",
|
|
||||||
"wisp",
|
|
||||||
"xml",
|
|
||||||
"yaml",
|
|
||||||
"yml"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"main": "index.js",
|
|
||||||
"name": "interpret",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/gulpjs/interpret.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"cover": "istanbul cover _mocha --report lcovonly",
|
|
||||||
"coveralls": "npm run cover && istanbul-coveralls",
|
|
||||||
"lint": "eslint .",
|
|
||||||
"pretest": "rm -rf tmp/ && npm run lint",
|
|
||||||
"test": "mocha --async-only"
|
|
||||||
},
|
|
||||||
"version": "1.2.0"
|
|
||||||
}
|
|
||||||
15
node_modules/minimatch/LICENSE
generated
vendored
15
node_modules/minimatch/LICENSE
generated
vendored
@@ -1,15 +0,0 @@
|
|||||||
The ISC License
|
|
||||||
|
|
||||||
Copyright (c) Isaac Z. Schlueter and Contributors
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
||||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
209
node_modules/minimatch/README.md
generated
vendored
209
node_modules/minimatch/README.md
generated
vendored
@@ -1,209 +0,0 @@
|
|||||||
# minimatch
|
|
||||||
|
|
||||||
A minimal matching utility.
|
|
||||||
|
|
||||||
[](http://travis-ci.org/isaacs/minimatch)
|
|
||||||
|
|
||||||
|
|
||||||
This is the matching library used internally by npm.
|
|
||||||
|
|
||||||
It works by converting glob expressions into JavaScript `RegExp`
|
|
||||||
objects.
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var minimatch = require("minimatch")
|
|
||||||
|
|
||||||
minimatch("bar.foo", "*.foo") // true!
|
|
||||||
minimatch("bar.foo", "*.bar") // false!
|
|
||||||
minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy!
|
|
||||||
```
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
Supports these glob features:
|
|
||||||
|
|
||||||
* Brace Expansion
|
|
||||||
* Extended glob matching
|
|
||||||
* "Globstar" `**` matching
|
|
||||||
|
|
||||||
See:
|
|
||||||
|
|
||||||
* `man sh`
|
|
||||||
* `man bash`
|
|
||||||
* `man 3 fnmatch`
|
|
||||||
* `man 5 gitignore`
|
|
||||||
|
|
||||||
## Minimatch Class
|
|
||||||
|
|
||||||
Create a minimatch object by instantiating the `minimatch.Minimatch` class.
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var Minimatch = require("minimatch").Minimatch
|
|
||||||
var mm = new Minimatch(pattern, options)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Properties
|
|
||||||
|
|
||||||
* `pattern` The original pattern the minimatch object represents.
|
|
||||||
* `options` The options supplied to the constructor.
|
|
||||||
* `set` A 2-dimensional array of regexp or string expressions.
|
|
||||||
Each row in the
|
|
||||||
array corresponds to a brace-expanded pattern. Each item in the row
|
|
||||||
corresponds to a single path-part. For example, the pattern
|
|
||||||
`{a,b/c}/d` would expand to a set of patterns like:
|
|
||||||
|
|
||||||
[ [ a, d ]
|
|
||||||
, [ b, c, d ] ]
|
|
||||||
|
|
||||||
If a portion of the pattern doesn't have any "magic" in it
|
|
||||||
(that is, it's something like `"foo"` rather than `fo*o?`), then it
|
|
||||||
will be left as a string rather than converted to a regular
|
|
||||||
expression.
|
|
||||||
|
|
||||||
* `regexp` Created by the `makeRe` method. A single regular expression
|
|
||||||
expressing the entire pattern. This is useful in cases where you wish
|
|
||||||
to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.
|
|
||||||
* `negate` True if the pattern is negated.
|
|
||||||
* `comment` True if the pattern is a comment.
|
|
||||||
* `empty` True if the pattern is `""`.
|
|
||||||
|
|
||||||
### Methods
|
|
||||||
|
|
||||||
* `makeRe` Generate the `regexp` member if necessary, and return it.
|
|
||||||
Will return `false` if the pattern is invalid.
|
|
||||||
* `match(fname)` Return true if the filename matches the pattern, or
|
|
||||||
false otherwise.
|
|
||||||
* `matchOne(fileArray, patternArray, partial)` Take a `/`-split
|
|
||||||
filename, and match it against a single row in the `regExpSet`. This
|
|
||||||
method is mainly for internal use, but is exposed so that it can be
|
|
||||||
used by a glob-walker that needs to avoid excessive filesystem calls.
|
|
||||||
|
|
||||||
All other methods are internal, and will be called as necessary.
|
|
||||||
|
|
||||||
### minimatch(path, pattern, options)
|
|
||||||
|
|
||||||
Main export. Tests a path against the pattern using the options.
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var isJS = minimatch(file, "*.js", { matchBase: true })
|
|
||||||
```
|
|
||||||
|
|
||||||
### minimatch.filter(pattern, options)
|
|
||||||
|
|
||||||
Returns a function that tests its
|
|
||||||
supplied argument, suitable for use with `Array.filter`. Example:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true}))
|
|
||||||
```
|
|
||||||
|
|
||||||
### minimatch.match(list, pattern, options)
|
|
||||||
|
|
||||||
Match against the list of
|
|
||||||
files, in the style of fnmatch or glob. If nothing is matched, and
|
|
||||||
options.nonull is set, then return a list containing the pattern itself.
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var javascripts = minimatch.match(fileList, "*.js", {matchBase: true}))
|
|
||||||
```
|
|
||||||
|
|
||||||
### minimatch.makeRe(pattern, options)
|
|
||||||
|
|
||||||
Make a regular expression object from the pattern.
|
|
||||||
|
|
||||||
## Options
|
|
||||||
|
|
||||||
All options are `false` by default.
|
|
||||||
|
|
||||||
### debug
|
|
||||||
|
|
||||||
Dump a ton of stuff to stderr.
|
|
||||||
|
|
||||||
### nobrace
|
|
||||||
|
|
||||||
Do not expand `{a,b}` and `{1..3}` brace sets.
|
|
||||||
|
|
||||||
### noglobstar
|
|
||||||
|
|
||||||
Disable `**` matching against multiple folder names.
|
|
||||||
|
|
||||||
### dot
|
|
||||||
|
|
||||||
Allow patterns to match filenames starting with a period, even if
|
|
||||||
the pattern does not explicitly have a period in that spot.
|
|
||||||
|
|
||||||
Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`
|
|
||||||
is set.
|
|
||||||
|
|
||||||
### noext
|
|
||||||
|
|
||||||
Disable "extglob" style patterns like `+(a|b)`.
|
|
||||||
|
|
||||||
### nocase
|
|
||||||
|
|
||||||
Perform a case-insensitive match.
|
|
||||||
|
|
||||||
### nonull
|
|
||||||
|
|
||||||
When a match is not found by `minimatch.match`, return a list containing
|
|
||||||
the pattern itself if this option is set. When not set, an empty list
|
|
||||||
is returned if there are no matches.
|
|
||||||
|
|
||||||
### matchBase
|
|
||||||
|
|
||||||
If set, then patterns without slashes will be matched
|
|
||||||
against the basename of the path if it contains slashes. For example,
|
|
||||||
`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.
|
|
||||||
|
|
||||||
### nocomment
|
|
||||||
|
|
||||||
Suppress the behavior of treating `#` at the start of a pattern as a
|
|
||||||
comment.
|
|
||||||
|
|
||||||
### nonegate
|
|
||||||
|
|
||||||
Suppress the behavior of treating a leading `!` character as negation.
|
|
||||||
|
|
||||||
### flipNegate
|
|
||||||
|
|
||||||
Returns from negate expressions the same as if they were not negated.
|
|
||||||
(Ie, true on a hit, false on a miss.)
|
|
||||||
|
|
||||||
|
|
||||||
## Comparisons to other fnmatch/glob implementations
|
|
||||||
|
|
||||||
While strict compliance with the existing standards is a worthwhile
|
|
||||||
goal, some discrepancies exist between minimatch and other
|
|
||||||
implementations, and are intentional.
|
|
||||||
|
|
||||||
If the pattern starts with a `!` character, then it is negated. Set the
|
|
||||||
`nonegate` flag to suppress this behavior, and treat leading `!`
|
|
||||||
characters normally. This is perhaps relevant if you wish to start the
|
|
||||||
pattern with a negative extglob pattern like `!(a|B)`. Multiple `!`
|
|
||||||
characters at the start of a pattern will negate the pattern multiple
|
|
||||||
times.
|
|
||||||
|
|
||||||
If a pattern starts with `#`, then it is treated as a comment, and
|
|
||||||
will not match anything. Use `\#` to match a literal `#` at the
|
|
||||||
start of a line, or set the `nocomment` flag to suppress this behavior.
|
|
||||||
|
|
||||||
The double-star character `**` is supported by default, unless the
|
|
||||||
`noglobstar` flag is set. This is supported in the manner of bsdglob
|
|
||||||
and bash 4.1, where `**` only has special significance if it is the only
|
|
||||||
thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but
|
|
||||||
`a/**b` will not.
|
|
||||||
|
|
||||||
If an escaped pattern has no matches, and the `nonull` flag is set,
|
|
||||||
then minimatch.match returns the pattern as-provided, rather than
|
|
||||||
interpreting the character escapes. For example,
|
|
||||||
`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
|
|
||||||
`"*a?"`. This is akin to setting the `nullglob` option in bash, except
|
|
||||||
that it does not resolve escaped pattern characters.
|
|
||||||
|
|
||||||
If brace expansion is not disabled, then it is performed before any
|
|
||||||
other interpretation of the glob pattern. Thus, a pattern like
|
|
||||||
`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
|
|
||||||
**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
|
|
||||||
checked for validity. Since those two are valid, matching proceeds.
|
|
||||||
923
node_modules/minimatch/minimatch.js
generated
vendored
923
node_modules/minimatch/minimatch.js
generated
vendored
@@ -1,923 +0,0 @@
|
|||||||
module.exports = minimatch
|
|
||||||
minimatch.Minimatch = Minimatch
|
|
||||||
|
|
||||||
var path = { sep: '/' }
|
|
||||||
try {
|
|
||||||
path = require('path')
|
|
||||||
} catch (er) {}
|
|
||||||
|
|
||||||
var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}
|
|
||||||
var expand = require('brace-expansion')
|
|
||||||
|
|
||||||
var plTypes = {
|
|
||||||
'!': { open: '(?:(?!(?:', close: '))[^/]*?)'},
|
|
||||||
'?': { open: '(?:', close: ')?' },
|
|
||||||
'+': { open: '(?:', close: ')+' },
|
|
||||||
'*': { open: '(?:', close: ')*' },
|
|
||||||
'@': { open: '(?:', close: ')' }
|
|
||||||
}
|
|
||||||
|
|
||||||
// any single thing other than /
|
|
||||||
// don't need to escape / when using new RegExp()
|
|
||||||
var qmark = '[^/]'
|
|
||||||
|
|
||||||
// * => any number of characters
|
|
||||||
var star = qmark + '*?'
|
|
||||||
|
|
||||||
// ** when dots are allowed. Anything goes, except .. and .
|
|
||||||
// not (^ or / followed by one or two dots followed by $ or /),
|
|
||||||
// followed by anything, any number of times.
|
|
||||||
var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?'
|
|
||||||
|
|
||||||
// not a ^ or / followed by a dot,
|
|
||||||
// followed by anything, any number of times.
|
|
||||||
var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?'
|
|
||||||
|
|
||||||
// characters that need to be escaped in RegExp.
|
|
||||||
var reSpecials = charSet('().*{}+?[]^$\\!')
|
|
||||||
|
|
||||||
// "abc" -> { a:true, b:true, c:true }
|
|
||||||
function charSet (s) {
|
|
||||||
return s.split('').reduce(function (set, c) {
|
|
||||||
set[c] = true
|
|
||||||
return set
|
|
||||||
}, {})
|
|
||||||
}
|
|
||||||
|
|
||||||
// normalizes slashes.
|
|
||||||
var slashSplit = /\/+/
|
|
||||||
|
|
||||||
minimatch.filter = filter
|
|
||||||
function filter (pattern, options) {
|
|
||||||
options = options || {}
|
|
||||||
return function (p, i, list) {
|
|
||||||
return minimatch(p, pattern, options)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function ext (a, b) {
|
|
||||||
a = a || {}
|
|
||||||
b = b || {}
|
|
||||||
var t = {}
|
|
||||||
Object.keys(b).forEach(function (k) {
|
|
||||||
t[k] = b[k]
|
|
||||||
})
|
|
||||||
Object.keys(a).forEach(function (k) {
|
|
||||||
t[k] = a[k]
|
|
||||||
})
|
|
||||||
return t
|
|
||||||
}
|
|
||||||
|
|
||||||
minimatch.defaults = function (def) {
|
|
||||||
if (!def || !Object.keys(def).length) return minimatch
|
|
||||||
|
|
||||||
var orig = minimatch
|
|
||||||
|
|
||||||
var m = function minimatch (p, pattern, options) {
|
|
||||||
return orig.minimatch(p, pattern, ext(def, options))
|
|
||||||
}
|
|
||||||
|
|
||||||
m.Minimatch = function Minimatch (pattern, options) {
|
|
||||||
return new orig.Minimatch(pattern, ext(def, options))
|
|
||||||
}
|
|
||||||
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
Minimatch.defaults = function (def) {
|
|
||||||
if (!def || !Object.keys(def).length) return Minimatch
|
|
||||||
return minimatch.defaults(def).Minimatch
|
|
||||||
}
|
|
||||||
|
|
||||||
function minimatch (p, pattern, options) {
|
|
||||||
if (typeof pattern !== 'string') {
|
|
||||||
throw new TypeError('glob pattern string required')
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!options) options = {}
|
|
||||||
|
|
||||||
// shortcut: comments match nothing.
|
|
||||||
if (!options.nocomment && pattern.charAt(0) === '#') {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// "" only matches ""
|
|
||||||
if (pattern.trim() === '') return p === ''
|
|
||||||
|
|
||||||
return new Minimatch(pattern, options).match(p)
|
|
||||||
}
|
|
||||||
|
|
||||||
function Minimatch (pattern, options) {
|
|
||||||
if (!(this instanceof Minimatch)) {
|
|
||||||
return new Minimatch(pattern, options)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof pattern !== 'string') {
|
|
||||||
throw new TypeError('glob pattern string required')
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!options) options = {}
|
|
||||||
pattern = pattern.trim()
|
|
||||||
|
|
||||||
// windows support: need to use /, not \
|
|
||||||
if (path.sep !== '/') {
|
|
||||||
pattern = pattern.split(path.sep).join('/')
|
|
||||||
}
|
|
||||||
|
|
||||||
this.options = options
|
|
||||||
this.set = []
|
|
||||||
this.pattern = pattern
|
|
||||||
this.regexp = null
|
|
||||||
this.negate = false
|
|
||||||
this.comment = false
|
|
||||||
this.empty = false
|
|
||||||
|
|
||||||
// make the set of regexps etc.
|
|
||||||
this.make()
|
|
||||||
}
|
|
||||||
|
|
||||||
Minimatch.prototype.debug = function () {}
|
|
||||||
|
|
||||||
Minimatch.prototype.make = make
|
|
||||||
function make () {
|
|
||||||
// don't do it more than once.
|
|
||||||
if (this._made) return
|
|
||||||
|
|
||||||
var pattern = this.pattern
|
|
||||||
var options = this.options
|
|
||||||
|
|
||||||
// empty patterns and comments match nothing.
|
|
||||||
if (!options.nocomment && pattern.charAt(0) === '#') {
|
|
||||||
this.comment = true
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (!pattern) {
|
|
||||||
this.empty = true
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// step 1: figure out negation, etc.
|
|
||||||
this.parseNegate()
|
|
||||||
|
|
||||||
// step 2: expand braces
|
|
||||||
var set = this.globSet = this.braceExpand()
|
|
||||||
|
|
||||||
if (options.debug) this.debug = console.error
|
|
||||||
|
|
||||||
this.debug(this.pattern, set)
|
|
||||||
|
|
||||||
// step 3: now we have a set, so turn each one into a series of path-portion
|
|
||||||
// matching patterns.
|
|
||||||
// These will be regexps, except in the case of "**", which is
|
|
||||||
// set to the GLOBSTAR object for globstar behavior,
|
|
||||||
// and will not contain any / characters
|
|
||||||
set = this.globParts = set.map(function (s) {
|
|
||||||
return s.split(slashSplit)
|
|
||||||
})
|
|
||||||
|
|
||||||
this.debug(this.pattern, set)
|
|
||||||
|
|
||||||
// glob --> regexps
|
|
||||||
set = set.map(function (s, si, set) {
|
|
||||||
return s.map(this.parse, this)
|
|
||||||
}, this)
|
|
||||||
|
|
||||||
this.debug(this.pattern, set)
|
|
||||||
|
|
||||||
// filter out everything that didn't compile properly.
|
|
||||||
set = set.filter(function (s) {
|
|
||||||
return s.indexOf(false) === -1
|
|
||||||
})
|
|
||||||
|
|
||||||
this.debug(this.pattern, set)
|
|
||||||
|
|
||||||
this.set = set
|
|
||||||
}
|
|
||||||
|
|
||||||
Minimatch.prototype.parseNegate = parseNegate
|
|
||||||
function parseNegate () {
|
|
||||||
var pattern = this.pattern
|
|
||||||
var negate = false
|
|
||||||
var options = this.options
|
|
||||||
var negateOffset = 0
|
|
||||||
|
|
||||||
if (options.nonegate) return
|
|
||||||
|
|
||||||
for (var i = 0, l = pattern.length
|
|
||||||
; i < l && pattern.charAt(i) === '!'
|
|
||||||
; i++) {
|
|
||||||
negate = !negate
|
|
||||||
negateOffset++
|
|
||||||
}
|
|
||||||
|
|
||||||
if (negateOffset) this.pattern = pattern.substr(negateOffset)
|
|
||||||
this.negate = negate
|
|
||||||
}
|
|
||||||
|
|
||||||
// Brace expansion:
|
|
||||||
// a{b,c}d -> abd acd
|
|
||||||
// a{b,}c -> abc ac
|
|
||||||
// a{0..3}d -> a0d a1d a2d a3d
|
|
||||||
// a{b,c{d,e}f}g -> abg acdfg acefg
|
|
||||||
// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg
|
|
||||||
//
|
|
||||||
// Invalid sets are not expanded.
|
|
||||||
// a{2..}b -> a{2..}b
|
|
||||||
// a{b}c -> a{b}c
|
|
||||||
minimatch.braceExpand = function (pattern, options) {
|
|
||||||
return braceExpand(pattern, options)
|
|
||||||
}
|
|
||||||
|
|
||||||
Minimatch.prototype.braceExpand = braceExpand
|
|
||||||
|
|
||||||
function braceExpand (pattern, options) {
|
|
||||||
if (!options) {
|
|
||||||
if (this instanceof Minimatch) {
|
|
||||||
options = this.options
|
|
||||||
} else {
|
|
||||||
options = {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pattern = typeof pattern === 'undefined'
|
|
||||||
? this.pattern : pattern
|
|
||||||
|
|
||||||
if (typeof pattern === 'undefined') {
|
|
||||||
throw new TypeError('undefined pattern')
|
|
||||||
}
|
|
||||||
|
|
||||||
if (options.nobrace ||
|
|
||||||
!pattern.match(/\{.*\}/)) {
|
|
||||||
// shortcut. no need to expand.
|
|
||||||
return [pattern]
|
|
||||||
}
|
|
||||||
|
|
||||||
return expand(pattern)
|
|
||||||
}
|
|
||||||
|
|
||||||
// parse a component of the expanded set.
|
|
||||||
// At this point, no pattern may contain "/" in it
|
|
||||||
// so we're going to return a 2d array, where each entry is the full
|
|
||||||
// pattern, split on '/', and then turned into a regular expression.
|
|
||||||
// A regexp is made at the end which joins each array with an
|
|
||||||
// escaped /, and another full one which joins each regexp with |.
|
|
||||||
//
|
|
||||||
// Following the lead of Bash 4.1, note that "**" only has special meaning
|
|
||||||
// when it is the *only* thing in a path portion. Otherwise, any series
|
|
||||||
// of * is equivalent to a single *. Globstar behavior is enabled by
|
|
||||||
// default, and can be disabled by setting options.noglobstar.
|
|
||||||
Minimatch.prototype.parse = parse
|
|
||||||
var SUBPARSE = {}
|
|
||||||
function parse (pattern, isSub) {
|
|
||||||
if (pattern.length > 1024 * 64) {
|
|
||||||
throw new TypeError('pattern is too long')
|
|
||||||
}
|
|
||||||
|
|
||||||
var options = this.options
|
|
||||||
|
|
||||||
// shortcuts
|
|
||||||
if (!options.noglobstar && pattern === '**') return GLOBSTAR
|
|
||||||
if (pattern === '') return ''
|
|
||||||
|
|
||||||
var re = ''
|
|
||||||
var hasMagic = !!options.nocase
|
|
||||||
var escaping = false
|
|
||||||
// ? => one single character
|
|
||||||
var patternListStack = []
|
|
||||||
var negativeLists = []
|
|
||||||
var stateChar
|
|
||||||
var inClass = false
|
|
||||||
var reClassStart = -1
|
|
||||||
var classStart = -1
|
|
||||||
// . and .. never match anything that doesn't start with .,
|
|
||||||
// even when options.dot is set.
|
|
||||||
var patternStart = pattern.charAt(0) === '.' ? '' // anything
|
|
||||||
// not (start or / followed by . or .. followed by / or end)
|
|
||||||
: options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))'
|
|
||||||
: '(?!\\.)'
|
|
||||||
var self = this
|
|
||||||
|
|
||||||
function clearStateChar () {
|
|
||||||
if (stateChar) {
|
|
||||||
// we had some state-tracking character
|
|
||||||
// that wasn't consumed by this pass.
|
|
||||||
switch (stateChar) {
|
|
||||||
case '*':
|
|
||||||
re += star
|
|
||||||
hasMagic = true
|
|
||||||
break
|
|
||||||
case '?':
|
|
||||||
re += qmark
|
|
||||||
hasMagic = true
|
|
||||||
break
|
|
||||||
default:
|
|
||||||
re += '\\' + stateChar
|
|
||||||
break
|
|
||||||
}
|
|
||||||
self.debug('clearStateChar %j %j', stateChar, re)
|
|
||||||
stateChar = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = 0, len = pattern.length, c
|
|
||||||
; (i < len) && (c = pattern.charAt(i))
|
|
||||||
; i++) {
|
|
||||||
this.debug('%s\t%s %s %j', pattern, i, re, c)
|
|
||||||
|
|
||||||
// skip over any that are escaped.
|
|
||||||
if (escaping && reSpecials[c]) {
|
|
||||||
re += '\\' + c
|
|
||||||
escaping = false
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (c) {
|
|
||||||
case '/':
|
|
||||||
// completely not allowed, even escaped.
|
|
||||||
// Should already be path-split by now.
|
|
||||||
return false
|
|
||||||
|
|
||||||
case '\\':
|
|
||||||
clearStateChar()
|
|
||||||
escaping = true
|
|
||||||
continue
|
|
||||||
|
|
||||||
// the various stateChar values
|
|
||||||
// for the "extglob" stuff.
|
|
||||||
case '?':
|
|
||||||
case '*':
|
|
||||||
case '+':
|
|
||||||
case '@':
|
|
||||||
case '!':
|
|
||||||
this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c)
|
|
||||||
|
|
||||||
// all of those are literals inside a class, except that
|
|
||||||
// the glob [!a] means [^a] in regexp
|
|
||||||
if (inClass) {
|
|
||||||
this.debug(' in class')
|
|
||||||
if (c === '!' && i === classStart + 1) c = '^'
|
|
||||||
re += c
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// if we already have a stateChar, then it means
|
|
||||||
// that there was something like ** or +? in there.
|
|
||||||
// Handle the stateChar, then proceed with this one.
|
|
||||||
self.debug('call clearStateChar %j', stateChar)
|
|
||||||
clearStateChar()
|
|
||||||
stateChar = c
|
|
||||||
// if extglob is disabled, then +(asdf|foo) isn't a thing.
|
|
||||||
// just clear the statechar *now*, rather than even diving into
|
|
||||||
// the patternList stuff.
|
|
||||||
if (options.noext) clearStateChar()
|
|
||||||
continue
|
|
||||||
|
|
||||||
case '(':
|
|
||||||
if (inClass) {
|
|
||||||
re += '('
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!stateChar) {
|
|
||||||
re += '\\('
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
patternListStack.push({
|
|
||||||
type: stateChar,
|
|
||||||
start: i - 1,
|
|
||||||
reStart: re.length,
|
|
||||||
open: plTypes[stateChar].open,
|
|
||||||
close: plTypes[stateChar].close
|
|
||||||
})
|
|
||||||
// negation is (?:(?!js)[^/]*)
|
|
||||||
re += stateChar === '!' ? '(?:(?!(?:' : '(?:'
|
|
||||||
this.debug('plType %j %j', stateChar, re)
|
|
||||||
stateChar = false
|
|
||||||
continue
|
|
||||||
|
|
||||||
case ')':
|
|
||||||
if (inClass || !patternListStack.length) {
|
|
||||||
re += '\\)'
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
clearStateChar()
|
|
||||||
hasMagic = true
|
|
||||||
var pl = patternListStack.pop()
|
|
||||||
// negation is (?:(?!js)[^/]*)
|
|
||||||
// The others are (?:<pattern>)<type>
|
|
||||||
re += pl.close
|
|
||||||
if (pl.type === '!') {
|
|
||||||
negativeLists.push(pl)
|
|
||||||
}
|
|
||||||
pl.reEnd = re.length
|
|
||||||
continue
|
|
||||||
|
|
||||||
case '|':
|
|
||||||
if (inClass || !patternListStack.length || escaping) {
|
|
||||||
re += '\\|'
|
|
||||||
escaping = false
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
clearStateChar()
|
|
||||||
re += '|'
|
|
||||||
continue
|
|
||||||
|
|
||||||
// these are mostly the same in regexp and glob
|
|
||||||
case '[':
|
|
||||||
// swallow any state-tracking char before the [
|
|
||||||
clearStateChar()
|
|
||||||
|
|
||||||
if (inClass) {
|
|
||||||
re += '\\' + c
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
inClass = true
|
|
||||||
classStart = i
|
|
||||||
reClassStart = re.length
|
|
||||||
re += c
|
|
||||||
continue
|
|
||||||
|
|
||||||
case ']':
|
|
||||||
// a right bracket shall lose its special
|
|
||||||
// meaning and represent itself in
|
|
||||||
// a bracket expression if it occurs
|
|
||||||
// first in the list. -- POSIX.2 2.8.3.2
|
|
||||||
if (i === classStart + 1 || !inClass) {
|
|
||||||
re += '\\' + c
|
|
||||||
escaping = false
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// handle the case where we left a class open.
|
|
||||||
// "[z-a]" is valid, equivalent to "\[z-a\]"
|
|
||||||
if (inClass) {
|
|
||||||
// split where the last [ was, make sure we don't have
|
|
||||||
// an invalid re. if so, re-walk the contents of the
|
|
||||||
// would-be class to re-translate any characters that
|
|
||||||
// were passed through as-is
|
|
||||||
// TODO: It would probably be faster to determine this
|
|
||||||
// without a try/catch and a new RegExp, but it's tricky
|
|
||||||
// to do safely. For now, this is safe and works.
|
|
||||||
var cs = pattern.substring(classStart + 1, i)
|
|
||||||
try {
|
|
||||||
RegExp('[' + cs + ']')
|
|
||||||
} catch (er) {
|
|
||||||
// not a valid class!
|
|
||||||
var sp = this.parse(cs, SUBPARSE)
|
|
||||||
re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'
|
|
||||||
hasMagic = hasMagic || sp[1]
|
|
||||||
inClass = false
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// finish up the class.
|
|
||||||
hasMagic = true
|
|
||||||
inClass = false
|
|
||||||
re += c
|
|
||||||
continue
|
|
||||||
|
|
||||||
default:
|
|
||||||
// swallow any state char that wasn't consumed
|
|
||||||
clearStateChar()
|
|
||||||
|
|
||||||
if (escaping) {
|
|
||||||
// no need
|
|
||||||
escaping = false
|
|
||||||
} else if (reSpecials[c]
|
|
||||||
&& !(c === '^' && inClass)) {
|
|
||||||
re += '\\'
|
|
||||||
}
|
|
||||||
|
|
||||||
re += c
|
|
||||||
|
|
||||||
} // switch
|
|
||||||
} // for
|
|
||||||
|
|
||||||
// handle the case where we left a class open.
|
|
||||||
// "[abc" is valid, equivalent to "\[abc"
|
|
||||||
if (inClass) {
|
|
||||||
// split where the last [ was, and escape it
|
|
||||||
// this is a huge pita. We now have to re-walk
|
|
||||||
// the contents of the would-be class to re-translate
|
|
||||||
// any characters that were passed through as-is
|
|
||||||
cs = pattern.substr(classStart + 1)
|
|
||||||
sp = this.parse(cs, SUBPARSE)
|
|
||||||
re = re.substr(0, reClassStart) + '\\[' + sp[0]
|
|
||||||
hasMagic = hasMagic || sp[1]
|
|
||||||
}
|
|
||||||
|
|
||||||
// handle the case where we had a +( thing at the *end*
|
|
||||||
// of the pattern.
|
|
||||||
// each pattern list stack adds 3 chars, and we need to go through
|
|
||||||
// and escape any | chars that were passed through as-is for the regexp.
|
|
||||||
// Go through and escape them, taking care not to double-escape any
|
|
||||||
// | chars that were already escaped.
|
|
||||||
for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {
|
|
||||||
var tail = re.slice(pl.reStart + pl.open.length)
|
|
||||||
this.debug('setting tail', re, pl)
|
|
||||||
// maybe some even number of \, then maybe 1 \, followed by a |
|
|
||||||
tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) {
|
|
||||||
if (!$2) {
|
|
||||||
// the | isn't already escaped, so escape it.
|
|
||||||
$2 = '\\'
|
|
||||||
}
|
|
||||||
|
|
||||||
// need to escape all those slashes *again*, without escaping the
|
|
||||||
// one that we need for escaping the | character. As it works out,
|
|
||||||
// escaping an even number of slashes can be done by simply repeating
|
|
||||||
// it exactly after itself. That's why this trick works.
|
|
||||||
//
|
|
||||||
// I am sorry that you have to see this.
|
|
||||||
return $1 + $1 + $2 + '|'
|
|
||||||
})
|
|
||||||
|
|
||||||
this.debug('tail=%j\n %s', tail, tail, pl, re)
|
|
||||||
var t = pl.type === '*' ? star
|
|
||||||
: pl.type === '?' ? qmark
|
|
||||||
: '\\' + pl.type
|
|
||||||
|
|
||||||
hasMagic = true
|
|
||||||
re = re.slice(0, pl.reStart) + t + '\\(' + tail
|
|
||||||
}
|
|
||||||
|
|
||||||
// handle trailing things that only matter at the very end.
|
|
||||||
clearStateChar()
|
|
||||||
if (escaping) {
|
|
||||||
// trailing \\
|
|
||||||
re += '\\\\'
|
|
||||||
}
|
|
||||||
|
|
||||||
// only need to apply the nodot start if the re starts with
|
|
||||||
// something that could conceivably capture a dot
|
|
||||||
var addPatternStart = false
|
|
||||||
switch (re.charAt(0)) {
|
|
||||||
case '.':
|
|
||||||
case '[':
|
|
||||||
case '(': addPatternStart = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hack to work around lack of negative lookbehind in JS
|
|
||||||
// A pattern like: *.!(x).!(y|z) needs to ensure that a name
|
|
||||||
// like 'a.xyz.yz' doesn't match. So, the first negative
|
|
||||||
// lookahead, has to look ALL the way ahead, to the end of
|
|
||||||
// the pattern.
|
|
||||||
for (var n = negativeLists.length - 1; n > -1; n--) {
|
|
||||||
var nl = negativeLists[n]
|
|
||||||
|
|
||||||
var nlBefore = re.slice(0, nl.reStart)
|
|
||||||
var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)
|
|
||||||
var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)
|
|
||||||
var nlAfter = re.slice(nl.reEnd)
|
|
||||||
|
|
||||||
nlLast += nlAfter
|
|
||||||
|
|
||||||
// Handle nested stuff like *(*.js|!(*.json)), where open parens
|
|
||||||
// mean that we should *not* include the ) in the bit that is considered
|
|
||||||
// "after" the negated section.
|
|
||||||
var openParensBefore = nlBefore.split('(').length - 1
|
|
||||||
var cleanAfter = nlAfter
|
|
||||||
for (i = 0; i < openParensBefore; i++) {
|
|
||||||
cleanAfter = cleanAfter.replace(/\)[+*?]?/, '')
|
|
||||||
}
|
|
||||||
nlAfter = cleanAfter
|
|
||||||
|
|
||||||
var dollar = ''
|
|
||||||
if (nlAfter === '' && isSub !== SUBPARSE) {
|
|
||||||
dollar = '$'
|
|
||||||
}
|
|
||||||
var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast
|
|
||||||
re = newRe
|
|
||||||
}
|
|
||||||
|
|
||||||
// if the re is not "" at this point, then we need to make sure
|
|
||||||
// it doesn't match against an empty path part.
|
|
||||||
// Otherwise a/* will match a/, which it should not.
|
|
||||||
if (re !== '' && hasMagic) {
|
|
||||||
re = '(?=.)' + re
|
|
||||||
}
|
|
||||||
|
|
||||||
if (addPatternStart) {
|
|
||||||
re = patternStart + re
|
|
||||||
}
|
|
||||||
|
|
||||||
// parsing just a piece of a larger pattern.
|
|
||||||
if (isSub === SUBPARSE) {
|
|
||||||
return [re, hasMagic]
|
|
||||||
}
|
|
||||||
|
|
||||||
// skip the regexp for non-magical patterns
|
|
||||||
// unescape anything in it, though, so that it'll be
|
|
||||||
// an exact match against a file etc.
|
|
||||||
if (!hasMagic) {
|
|
||||||
return globUnescape(pattern)
|
|
||||||
}
|
|
||||||
|
|
||||||
var flags = options.nocase ? 'i' : ''
|
|
||||||
try {
|
|
||||||
var regExp = new RegExp('^' + re + '$', flags)
|
|
||||||
} catch (er) {
|
|
||||||
// If it was an invalid regular expression, then it can't match
|
|
||||||
// anything. This trick looks for a character after the end of
|
|
||||||
// the string, which is of course impossible, except in multi-line
|
|
||||||
// mode, but it's not a /m regex.
|
|
||||||
return new RegExp('$.')
|
|
||||||
}
|
|
||||||
|
|
||||||
regExp._glob = pattern
|
|
||||||
regExp._src = re
|
|
||||||
|
|
||||||
return regExp
|
|
||||||
}
|
|
||||||
|
|
||||||
minimatch.makeRe = function (pattern, options) {
|
|
||||||
return new Minimatch(pattern, options || {}).makeRe()
|
|
||||||
}
|
|
||||||
|
|
||||||
Minimatch.prototype.makeRe = makeRe
|
|
||||||
function makeRe () {
|
|
||||||
if (this.regexp || this.regexp === false) return this.regexp
|
|
||||||
|
|
||||||
// at this point, this.set is a 2d array of partial
|
|
||||||
// pattern strings, or "**".
|
|
||||||
//
|
|
||||||
// It's better to use .match(). This function shouldn't
|
|
||||||
// be used, really, but it's pretty convenient sometimes,
|
|
||||||
// when you just want to work with a regex.
|
|
||||||
var set = this.set
|
|
||||||
|
|
||||||
if (!set.length) {
|
|
||||||
this.regexp = false
|
|
||||||
return this.regexp
|
|
||||||
}
|
|
||||||
var options = this.options
|
|
||||||
|
|
||||||
var twoStar = options.noglobstar ? star
|
|
||||||
: options.dot ? twoStarDot
|
|
||||||
: twoStarNoDot
|
|
||||||
var flags = options.nocase ? 'i' : ''
|
|
||||||
|
|
||||||
var re = set.map(function (pattern) {
|
|
||||||
return pattern.map(function (p) {
|
|
||||||
return (p === GLOBSTAR) ? twoStar
|
|
||||||
: (typeof p === 'string') ? regExpEscape(p)
|
|
||||||
: p._src
|
|
||||||
}).join('\\\/')
|
|
||||||
}).join('|')
|
|
||||||
|
|
||||||
// must match entire pattern
|
|
||||||
// ending in a * or ** will make it less strict.
|
|
||||||
re = '^(?:' + re + ')$'
|
|
||||||
|
|
||||||
// can match anything, as long as it's not this.
|
|
||||||
if (this.negate) re = '^(?!' + re + ').*$'
|
|
||||||
|
|
||||||
try {
|
|
||||||
this.regexp = new RegExp(re, flags)
|
|
||||||
} catch (ex) {
|
|
||||||
this.regexp = false
|
|
||||||
}
|
|
||||||
return this.regexp
|
|
||||||
}
|
|
||||||
|
|
||||||
minimatch.match = function (list, pattern, options) {
|
|
||||||
options = options || {}
|
|
||||||
var mm = new Minimatch(pattern, options)
|
|
||||||
list = list.filter(function (f) {
|
|
||||||
return mm.match(f)
|
|
||||||
})
|
|
||||||
if (mm.options.nonull && !list.length) {
|
|
||||||
list.push(pattern)
|
|
||||||
}
|
|
||||||
return list
|
|
||||||
}
|
|
||||||
|
|
||||||
Minimatch.prototype.match = match
|
|
||||||
function match (f, partial) {
|
|
||||||
this.debug('match', f, this.pattern)
|
|
||||||
// short-circuit in the case of busted things.
|
|
||||||
// comments, etc.
|
|
||||||
if (this.comment) return false
|
|
||||||
if (this.empty) return f === ''
|
|
||||||
|
|
||||||
if (f === '/' && partial) return true
|
|
||||||
|
|
||||||
var options = this.options
|
|
||||||
|
|
||||||
// windows: need to use /, not \
|
|
||||||
if (path.sep !== '/') {
|
|
||||||
f = f.split(path.sep).join('/')
|
|
||||||
}
|
|
||||||
|
|
||||||
// treat the test path as a set of pathparts.
|
|
||||||
f = f.split(slashSplit)
|
|
||||||
this.debug(this.pattern, 'split', f)
|
|
||||||
|
|
||||||
// just ONE of the pattern sets in this.set needs to match
|
|
||||||
// in order for it to be valid. If negating, then just one
|
|
||||||
// match means that we have failed.
|
|
||||||
// Either way, return on the first hit.
|
|
||||||
|
|
||||||
var set = this.set
|
|
||||||
this.debug(this.pattern, 'set', set)
|
|
||||||
|
|
||||||
// Find the basename of the path by looking for the last non-empty segment
|
|
||||||
var filename
|
|
||||||
var i
|
|
||||||
for (i = f.length - 1; i >= 0; i--) {
|
|
||||||
filename = f[i]
|
|
||||||
if (filename) break
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < set.length; i++) {
|
|
||||||
var pattern = set[i]
|
|
||||||
var file = f
|
|
||||||
if (options.matchBase && pattern.length === 1) {
|
|
||||||
file = [filename]
|
|
||||||
}
|
|
||||||
var hit = this.matchOne(file, pattern, partial)
|
|
||||||
if (hit) {
|
|
||||||
if (options.flipNegate) return true
|
|
||||||
return !this.negate
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// didn't get any hits. this is success if it's a negative
|
|
||||||
// pattern, failure otherwise.
|
|
||||||
if (options.flipNegate) return false
|
|
||||||
return this.negate
|
|
||||||
}
|
|
||||||
|
|
||||||
// set partial to true to test if, for example,
|
|
||||||
// "/a/b" matches the start of "/*/b/*/d"
|
|
||||||
// Partial means, if you run out of file before you run
|
|
||||||
// out of pattern, then that's fine, as long as all
|
|
||||||
// the parts match.
|
|
||||||
Minimatch.prototype.matchOne = function (file, pattern, partial) {
|
|
||||||
var options = this.options
|
|
||||||
|
|
||||||
this.debug('matchOne',
|
|
||||||
{ 'this': this, file: file, pattern: pattern })
|
|
||||||
|
|
||||||
this.debug('matchOne', file.length, pattern.length)
|
|
||||||
|
|
||||||
for (var fi = 0,
|
|
||||||
pi = 0,
|
|
||||||
fl = file.length,
|
|
||||||
pl = pattern.length
|
|
||||||
; (fi < fl) && (pi < pl)
|
|
||||||
; fi++, pi++) {
|
|
||||||
this.debug('matchOne loop')
|
|
||||||
var p = pattern[pi]
|
|
||||||
var f = file[fi]
|
|
||||||
|
|
||||||
this.debug(pattern, p, f)
|
|
||||||
|
|
||||||
// should be impossible.
|
|
||||||
// some invalid regexp stuff in the set.
|
|
||||||
if (p === false) return false
|
|
||||||
|
|
||||||
if (p === GLOBSTAR) {
|
|
||||||
this.debug('GLOBSTAR', [pattern, p, f])
|
|
||||||
|
|
||||||
// "**"
|
|
||||||
// a/**/b/**/c would match the following:
|
|
||||||
// a/b/x/y/z/c
|
|
||||||
// a/x/y/z/b/c
|
|
||||||
// a/b/x/b/x/c
|
|
||||||
// a/b/c
|
|
||||||
// To do this, take the rest of the pattern after
|
|
||||||
// the **, and see if it would match the file remainder.
|
|
||||||
// If so, return success.
|
|
||||||
// If not, the ** "swallows" a segment, and try again.
|
|
||||||
// This is recursively awful.
|
|
||||||
//
|
|
||||||
// a/**/b/**/c matching a/b/x/y/z/c
|
|
||||||
// - a matches a
|
|
||||||
// - doublestar
|
|
||||||
// - matchOne(b/x/y/z/c, b/**/c)
|
|
||||||
// - b matches b
|
|
||||||
// - doublestar
|
|
||||||
// - matchOne(x/y/z/c, c) -> no
|
|
||||||
// - matchOne(y/z/c, c) -> no
|
|
||||||
// - matchOne(z/c, c) -> no
|
|
||||||
// - matchOne(c, c) yes, hit
|
|
||||||
var fr = fi
|
|
||||||
var pr = pi + 1
|
|
||||||
if (pr === pl) {
|
|
||||||
this.debug('** at the end')
|
|
||||||
// a ** at the end will just swallow the rest.
|
|
||||||
// We have found a match.
|
|
||||||
// however, it will not swallow /.x, unless
|
|
||||||
// options.dot is set.
|
|
||||||
// . and .. are *never* matched by **, for explosively
|
|
||||||
// exponential reasons.
|
|
||||||
for (; fi < fl; fi++) {
|
|
||||||
if (file[fi] === '.' || file[fi] === '..' ||
|
|
||||||
(!options.dot && file[fi].charAt(0) === '.')) return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// ok, let's see if we can swallow whatever we can.
|
|
||||||
while (fr < fl) {
|
|
||||||
var swallowee = file[fr]
|
|
||||||
|
|
||||||
this.debug('\nglobstar while', file, fr, pattern, pr, swallowee)
|
|
||||||
|
|
||||||
// XXX remove this slice. Just pass the start index.
|
|
||||||
if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
|
|
||||||
this.debug('globstar found match!', fr, fl, swallowee)
|
|
||||||
// found a match.
|
|
||||||
return true
|
|
||||||
} else {
|
|
||||||
// can't swallow "." or ".." ever.
|
|
||||||
// can only swallow ".foo" when explicitly asked.
|
|
||||||
if (swallowee === '.' || swallowee === '..' ||
|
|
||||||
(!options.dot && swallowee.charAt(0) === '.')) {
|
|
||||||
this.debug('dot detected!', file, fr, pattern, pr)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
// ** swallows a segment, and continue.
|
|
||||||
this.debug('globstar swallow a segment, and continue')
|
|
||||||
fr++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// no match was found.
|
|
||||||
// However, in partial mode, we can't say this is necessarily over.
|
|
||||||
// If there's more *pattern* left, then
|
|
||||||
if (partial) {
|
|
||||||
// ran out of file
|
|
||||||
this.debug('\n>>> no match, partial?', file, fr, pattern, pr)
|
|
||||||
if (fr === fl) return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// something other than **
|
|
||||||
// non-magic patterns just have to match exactly
|
|
||||||
// patterns with magic have been turned into regexps.
|
|
||||||
var hit
|
|
||||||
if (typeof p === 'string') {
|
|
||||||
if (options.nocase) {
|
|
||||||
hit = f.toLowerCase() === p.toLowerCase()
|
|
||||||
} else {
|
|
||||||
hit = f === p
|
|
||||||
}
|
|
||||||
this.debug('string match', p, f, hit)
|
|
||||||
} else {
|
|
||||||
hit = f.match(p)
|
|
||||||
this.debug('pattern match', p, f, hit)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!hit) return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Note: ending in / means that we'll get a final ""
|
|
||||||
// at the end of the pattern. This can only match a
|
|
||||||
// corresponding "" at the end of the file.
|
|
||||||
// If the file ends in /, then it can only match a
|
|
||||||
// a pattern that ends in /, unless the pattern just
|
|
||||||
// doesn't have any more for it. But, a/b/ should *not*
|
|
||||||
// match "a/b/*", even though "" matches against the
|
|
||||||
// [^/]*? pattern, except in partial mode, where it might
|
|
||||||
// simply not be reached yet.
|
|
||||||
// However, a/b/ should still satisfy a/*
|
|
||||||
|
|
||||||
// now either we fell off the end of the pattern, or we're done.
|
|
||||||
if (fi === fl && pi === pl) {
|
|
||||||
// ran out of pattern and filename at the same time.
|
|
||||||
// an exact hit!
|
|
||||||
return true
|
|
||||||
} else if (fi === fl) {
|
|
||||||
// ran out of file, but still had pattern left.
|
|
||||||
// this is ok if we're doing the match as part of
|
|
||||||
// a glob fs traversal.
|
|
||||||
return partial
|
|
||||||
} else if (pi === pl) {
|
|
||||||
// ran out of pattern, still have file left.
|
|
||||||
// this is only acceptable if we're on the very last
|
|
||||||
// empty segment of a file with a trailing slash.
|
|
||||||
// a/* should match a/b/
|
|
||||||
var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')
|
|
||||||
return emptyFileEnd
|
|
||||||
}
|
|
||||||
|
|
||||||
// should be unreachable.
|
|
||||||
throw new Error('wtf?')
|
|
||||||
}
|
|
||||||
|
|
||||||
// replace stuff like \* with *
|
|
||||||
function globUnescape (s) {
|
|
||||||
return s.replace(/\\(.)/g, '$1')
|
|
||||||
}
|
|
||||||
|
|
||||||
function regExpEscape (s) {
|
|
||||||
return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&')
|
|
||||||
}
|
|
||||||
68
node_modules/minimatch/package.json
generated
vendored
68
node_modules/minimatch/package.json
generated
vendored
@@ -1,68 +0,0 @@
|
|||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"minimatch@3.0.4",
|
|
||||||
"c:\\EndBug\\GitHub\\add-and-commit"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "minimatch@3.0.4",
|
|
||||||
"_id": "minimatch@3.0.4",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
|
||||||
"_location": "/minimatch",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "minimatch@3.0.4",
|
|
||||||
"name": "minimatch",
|
|
||||||
"escapedName": "minimatch",
|
|
||||||
"rawSpec": "3.0.4",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "3.0.4"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/@typescript-eslint/typescript-estree/glob",
|
|
||||||
"/eslint",
|
|
||||||
"/glob"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
|
||||||
"_spec": "3.0.4",
|
|
||||||
"_where": "c:\\EndBug\\GitHub\\add-and-commit",
|
|
||||||
"author": {
|
|
||||||
"name": "Isaac Z. Schlueter",
|
|
||||||
"email": "i@izs.me",
|
|
||||||
"url": "http://blog.izs.me"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/isaacs/minimatch/issues"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"brace-expansion": "^1.1.7"
|
|
||||||
},
|
|
||||||
"description": "a glob matcher in javascript",
|
|
||||||
"devDependencies": {
|
|
||||||
"tap": "^10.3.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "*"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"minimatch.js"
|
|
||||||
],
|
|
||||||
"homepage": "https://github.com/isaacs/minimatch#readme",
|
|
||||||
"license": "ISC",
|
|
||||||
"main": "minimatch.js",
|
|
||||||
"name": "minimatch",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git://github.com/isaacs/minimatch.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"postpublish": "git push origin --all; git push origin --tags",
|
|
||||||
"postversion": "npm publish",
|
|
||||||
"preversion": "npm test",
|
|
||||||
"test": "tap test/*.js --cov"
|
|
||||||
},
|
|
||||||
"version": "3.0.4"
|
|
||||||
}
|
|
||||||
15
node_modules/once/LICENSE
generated
vendored
15
node_modules/once/LICENSE
generated
vendored
@@ -1,15 +0,0 @@
|
|||||||
The ISC License
|
|
||||||
|
|
||||||
Copyright (c) Isaac Z. Schlueter and Contributors
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
||||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
79
node_modules/once/README.md
generated
vendored
79
node_modules/once/README.md
generated
vendored
@@ -1,79 +0,0 @@
|
|||||||
# once
|
|
||||||
|
|
||||||
Only call a function once.
|
|
||||||
|
|
||||||
## usage
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var once = require('once')
|
|
||||||
|
|
||||||
function load (file, cb) {
|
|
||||||
cb = once(cb)
|
|
||||||
loader.load('file')
|
|
||||||
loader.once('load', cb)
|
|
||||||
loader.once('error', cb)
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Or add to the Function.prototype in a responsible way:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
// only has to be done once
|
|
||||||
require('once').proto()
|
|
||||||
|
|
||||||
function load (file, cb) {
|
|
||||||
cb = cb.once()
|
|
||||||
loader.load('file')
|
|
||||||
loader.once('load', cb)
|
|
||||||
loader.once('error', cb)
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Ironically, the prototype feature makes this module twice as
|
|
||||||
complicated as necessary.
|
|
||||||
|
|
||||||
To check whether you function has been called, use `fn.called`. Once the
|
|
||||||
function is called for the first time the return value of the original
|
|
||||||
function is saved in `fn.value` and subsequent calls will continue to
|
|
||||||
return this value.
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var once = require('once')
|
|
||||||
|
|
||||||
function load (cb) {
|
|
||||||
cb = once(cb)
|
|
||||||
var stream = createStream()
|
|
||||||
stream.once('data', cb)
|
|
||||||
stream.once('end', function () {
|
|
||||||
if (!cb.called) cb(new Error('not found'))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## `once.strict(func)`
|
|
||||||
|
|
||||||
Throw an error if the function is called twice.
|
|
||||||
|
|
||||||
Some functions are expected to be called only once. Using `once` for them would
|
|
||||||
potentially hide logical errors.
|
|
||||||
|
|
||||||
In the example below, the `greet` function has to call the callback only once:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
function greet (name, cb) {
|
|
||||||
// return is missing from the if statement
|
|
||||||
// when no name is passed, the callback is called twice
|
|
||||||
if (!name) cb('Hello anonymous')
|
|
||||||
cb('Hello ' + name)
|
|
||||||
}
|
|
||||||
|
|
||||||
function log (msg) {
|
|
||||||
console.log(msg)
|
|
||||||
}
|
|
||||||
|
|
||||||
// this will print 'Hello anonymous' but the logical error will be missed
|
|
||||||
greet(null, once(msg))
|
|
||||||
|
|
||||||
// once.strict will print 'Hello anonymous' and throw an error when the callback will be called the second time
|
|
||||||
greet(null, once.strict(msg))
|
|
||||||
```
|
|
||||||
42
node_modules/once/once.js
generated
vendored
42
node_modules/once/once.js
generated
vendored
@@ -1,42 +0,0 @@
|
|||||||
var wrappy = require('wrappy')
|
|
||||||
module.exports = wrappy(once)
|
|
||||||
module.exports.strict = wrappy(onceStrict)
|
|
||||||
|
|
||||||
once.proto = once(function () {
|
|
||||||
Object.defineProperty(Function.prototype, 'once', {
|
|
||||||
value: function () {
|
|
||||||
return once(this)
|
|
||||||
},
|
|
||||||
configurable: true
|
|
||||||
})
|
|
||||||
|
|
||||||
Object.defineProperty(Function.prototype, 'onceStrict', {
|
|
||||||
value: function () {
|
|
||||||
return onceStrict(this)
|
|
||||||
},
|
|
||||||
configurable: true
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
function once (fn) {
|
|
||||||
var f = function () {
|
|
||||||
if (f.called) return f.value
|
|
||||||
f.called = true
|
|
||||||
return f.value = fn.apply(this, arguments)
|
|
||||||
}
|
|
||||||
f.called = false
|
|
||||||
return f
|
|
||||||
}
|
|
||||||
|
|
||||||
function onceStrict (fn) {
|
|
||||||
var f = function () {
|
|
||||||
if (f.called)
|
|
||||||
throw new Error(f.onceError)
|
|
||||||
f.called = true
|
|
||||||
return f.value = fn.apply(this, arguments)
|
|
||||||
}
|
|
||||||
var name = fn.name || 'Function wrapped with `once`'
|
|
||||||
f.onceError = name + " shouldn't be called more than once"
|
|
||||||
f.called = false
|
|
||||||
return f
|
|
||||||
}
|
|
||||||
71
node_modules/once/package.json
generated
vendored
71
node_modules/once/package.json
generated
vendored
@@ -1,71 +0,0 @@
|
|||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"once@1.4.0",
|
|
||||||
"c:\\EndBug\\GitHub\\add-and-commit"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "once@1.4.0",
|
|
||||||
"_id": "once@1.4.0",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
|
||||||
"_location": "/once",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "once@1.4.0",
|
|
||||||
"name": "once",
|
|
||||||
"escapedName": "once",
|
|
||||||
"rawSpec": "1.4.0",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "1.4.0"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/@typescript-eslint/typescript-estree/glob",
|
|
||||||
"/glob",
|
|
||||||
"/inflight"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
|
||||||
"_spec": "1.4.0",
|
|
||||||
"_where": "c:\\EndBug\\GitHub\\add-and-commit",
|
|
||||||
"author": {
|
|
||||||
"name": "Isaac Z. Schlueter",
|
|
||||||
"email": "i@izs.me",
|
|
||||||
"url": "http://blog.izs.me/"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/isaacs/once/issues"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"wrappy": "1"
|
|
||||||
},
|
|
||||||
"description": "Run a function exactly one time",
|
|
||||||
"devDependencies": {
|
|
||||||
"tap": "^7.0.1"
|
|
||||||
},
|
|
||||||
"directories": {
|
|
||||||
"test": "test"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"once.js"
|
|
||||||
],
|
|
||||||
"homepage": "https://github.com/isaacs/once#readme",
|
|
||||||
"keywords": [
|
|
||||||
"once",
|
|
||||||
"function",
|
|
||||||
"one",
|
|
||||||
"single"
|
|
||||||
],
|
|
||||||
"license": "ISC",
|
|
||||||
"main": "once.js",
|
|
||||||
"name": "once",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git://github.com/isaacs/once.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "tap test/*.js"
|
|
||||||
},
|
|
||||||
"version": "1.4.0"
|
|
||||||
}
|
|
||||||
20
node_modules/path-is-absolute/index.js
generated
vendored
20
node_modules/path-is-absolute/index.js
generated
vendored
@@ -1,20 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
function posix(path) {
|
|
||||||
return path.charAt(0) === '/';
|
|
||||||
}
|
|
||||||
|
|
||||||
function win32(path) {
|
|
||||||
// https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56
|
|
||||||
var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/;
|
|
||||||
var result = splitDeviceRe.exec(path);
|
|
||||||
var device = result[1] || '';
|
|
||||||
var isUnc = Boolean(device && device.charAt(1) !== ':');
|
|
||||||
|
|
||||||
// UNC paths are always absolute
|
|
||||||
return Boolean(result[2] || isUnc);
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = process.platform === 'win32' ? win32 : posix;
|
|
||||||
module.exports.posix = posix;
|
|
||||||
module.exports.win32 = win32;
|
|
||||||
21
node_modules/path-is-absolute/license
generated
vendored
21
node_modules/path-is-absolute/license
generated
vendored
@@ -1,21 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
79
node_modules/path-is-absolute/package.json
generated
vendored
79
node_modules/path-is-absolute/package.json
generated
vendored
@@ -1,79 +0,0 @@
|
|||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"path-is-absolute@1.0.1",
|
|
||||||
"c:\\EndBug\\GitHub\\add-and-commit"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "path-is-absolute@1.0.1",
|
|
||||||
"_id": "path-is-absolute@1.0.1",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
|
|
||||||
"_location": "/path-is-absolute",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "path-is-absolute@1.0.1",
|
|
||||||
"name": "path-is-absolute",
|
|
||||||
"escapedName": "path-is-absolute",
|
|
||||||
"rawSpec": "1.0.1",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "1.0.1"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/@typescript-eslint/typescript-estree/glob",
|
|
||||||
"/glob"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
|
||||||
"_spec": "1.0.1",
|
|
||||||
"_where": "c:\\EndBug\\GitHub\\add-and-commit",
|
|
||||||
"author": {
|
|
||||||
"name": "Sindre Sorhus",
|
|
||||||
"email": "sindresorhus@gmail.com",
|
|
||||||
"url": "sindresorhus.com"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/sindresorhus/path-is-absolute/issues"
|
|
||||||
},
|
|
||||||
"description": "Node.js 0.12 path.isAbsolute() ponyfill",
|
|
||||||
"devDependencies": {
|
|
||||||
"xo": "^0.16.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"index.js"
|
|
||||||
],
|
|
||||||
"homepage": "https://github.com/sindresorhus/path-is-absolute#readme",
|
|
||||||
"keywords": [
|
|
||||||
"path",
|
|
||||||
"paths",
|
|
||||||
"file",
|
|
||||||
"dir",
|
|
||||||
"absolute",
|
|
||||||
"isabsolute",
|
|
||||||
"is-absolute",
|
|
||||||
"built-in",
|
|
||||||
"util",
|
|
||||||
"utils",
|
|
||||||
"core",
|
|
||||||
"ponyfill",
|
|
||||||
"polyfill",
|
|
||||||
"shim",
|
|
||||||
"is",
|
|
||||||
"detect",
|
|
||||||
"check"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"name": "path-is-absolute",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/sindresorhus/path-is-absolute.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "xo && node test.js"
|
|
||||||
},
|
|
||||||
"version": "1.0.1"
|
|
||||||
}
|
|
||||||
59
node_modules/path-is-absolute/readme.md
generated
vendored
59
node_modules/path-is-absolute/readme.md
generated
vendored
@@ -1,59 +0,0 @@
|
|||||||
# path-is-absolute [](https://travis-ci.org/sindresorhus/path-is-absolute)
|
|
||||||
|
|
||||||
> Node.js 0.12 [`path.isAbsolute()`](http://nodejs.org/api/path.html#path_path_isabsolute_path) [ponyfill](https://ponyfill.com)
|
|
||||||
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
```
|
|
||||||
$ npm install --save path-is-absolute
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```js
|
|
||||||
const pathIsAbsolute = require('path-is-absolute');
|
|
||||||
|
|
||||||
// Running on Linux
|
|
||||||
pathIsAbsolute('/home/foo');
|
|
||||||
//=> true
|
|
||||||
pathIsAbsolute('C:/Users/foo');
|
|
||||||
//=> false
|
|
||||||
|
|
||||||
// Running on Windows
|
|
||||||
pathIsAbsolute('C:/Users/foo');
|
|
||||||
//=> true
|
|
||||||
pathIsAbsolute('/home/foo');
|
|
||||||
//=> false
|
|
||||||
|
|
||||||
// Running on any OS
|
|
||||||
pathIsAbsolute.posix('/home/foo');
|
|
||||||
//=> true
|
|
||||||
pathIsAbsolute.posix('C:/Users/foo');
|
|
||||||
//=> false
|
|
||||||
pathIsAbsolute.win32('C:/Users/foo');
|
|
||||||
//=> true
|
|
||||||
pathIsAbsolute.win32('/home/foo');
|
|
||||||
//=> false
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## API
|
|
||||||
|
|
||||||
See the [`path.isAbsolute()` docs](http://nodejs.org/api/path.html#path_path_isabsolute_path).
|
|
||||||
|
|
||||||
### pathIsAbsolute(path)
|
|
||||||
|
|
||||||
### pathIsAbsolute.posix(path)
|
|
||||||
|
|
||||||
POSIX specific version.
|
|
||||||
|
|
||||||
### pathIsAbsolute.win32(path)
|
|
||||||
|
|
||||||
Windows specific version.
|
|
||||||
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT © [Sindre Sorhus](https://sindresorhus.com)
|
|
||||||
9
node_modules/path-parse/.travis.yml
generated
vendored
9
node_modules/path-parse/.travis.yml
generated
vendored
@@ -1,9 +0,0 @@
|
|||||||
language: node_js
|
|
||||||
node_js:
|
|
||||||
- "0.12"
|
|
||||||
- "0.11"
|
|
||||||
- "0.10"
|
|
||||||
- "0.10.12"
|
|
||||||
- "0.8"
|
|
||||||
- "0.6"
|
|
||||||
- "iojs"
|
|
||||||
21
node_modules/path-parse/LICENSE
generated
vendored
21
node_modules/path-parse/LICENSE
generated
vendored
@@ -1,21 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2015 Javier Blanco
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
42
node_modules/path-parse/README.md
generated
vendored
42
node_modules/path-parse/README.md
generated
vendored
@@ -1,42 +0,0 @@
|
|||||||
# path-parse [](https://travis-ci.org/jbgutierrez/path-parse)
|
|
||||||
|
|
||||||
> Node.js [`path.parse(pathString)`](https://nodejs.org/api/path.html#path_path_parse_pathstring) [ponyfill](https://ponyfill.com).
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
```
|
|
||||||
$ npm install --save path-parse
|
|
||||||
```
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```js
|
|
||||||
var pathParse = require('path-parse');
|
|
||||||
|
|
||||||
pathParse('/home/user/dir/file.txt');
|
|
||||||
//=> {
|
|
||||||
// root : "/",
|
|
||||||
// dir : "/home/user/dir",
|
|
||||||
// base : "file.txt",
|
|
||||||
// ext : ".txt",
|
|
||||||
// name : "file"
|
|
||||||
// }
|
|
||||||
```
|
|
||||||
|
|
||||||
## API
|
|
||||||
|
|
||||||
See [`path.parse(pathString)`](https://nodejs.org/api/path.html#path_path_parse_pathstring) docs.
|
|
||||||
|
|
||||||
### pathParse(path)
|
|
||||||
|
|
||||||
### pathParse.posix(path)
|
|
||||||
|
|
||||||
The Posix specific version.
|
|
||||||
|
|
||||||
### pathParse.win32(path)
|
|
||||||
|
|
||||||
The Windows specific version.
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT © [Javier Blanco](http://jbgutierrez.info)
|
|
||||||
93
node_modules/path-parse/index.js
generated
vendored
93
node_modules/path-parse/index.js
generated
vendored
@@ -1,93 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
var isWindows = process.platform === 'win32';
|
|
||||||
|
|
||||||
// Regex to split a windows path into three parts: [*, device, slash,
|
|
||||||
// tail] windows-only
|
|
||||||
var splitDeviceRe =
|
|
||||||
/^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/;
|
|
||||||
|
|
||||||
// Regex to split the tail part of the above into [*, dir, basename, ext]
|
|
||||||
var splitTailRe =
|
|
||||||
/^([\s\S]*?)((?:\.{1,2}|[^\\\/]+?|)(\.[^.\/\\]*|))(?:[\\\/]*)$/;
|
|
||||||
|
|
||||||
var win32 = {};
|
|
||||||
|
|
||||||
// Function to split a filename into [root, dir, basename, ext]
|
|
||||||
function win32SplitPath(filename) {
|
|
||||||
// Separate device+slash from tail
|
|
||||||
var result = splitDeviceRe.exec(filename),
|
|
||||||
device = (result[1] || '') + (result[2] || ''),
|
|
||||||
tail = result[3] || '';
|
|
||||||
// Split the tail into dir, basename and extension
|
|
||||||
var result2 = splitTailRe.exec(tail),
|
|
||||||
dir = result2[1],
|
|
||||||
basename = result2[2],
|
|
||||||
ext = result2[3];
|
|
||||||
return [device, dir, basename, ext];
|
|
||||||
}
|
|
||||||
|
|
||||||
win32.parse = function(pathString) {
|
|
||||||
if (typeof pathString !== 'string') {
|
|
||||||
throw new TypeError(
|
|
||||||
"Parameter 'pathString' must be a string, not " + typeof pathString
|
|
||||||
);
|
|
||||||
}
|
|
||||||
var allParts = win32SplitPath(pathString);
|
|
||||||
if (!allParts || allParts.length !== 4) {
|
|
||||||
throw new TypeError("Invalid path '" + pathString + "'");
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
root: allParts[0],
|
|
||||||
dir: allParts[0] + allParts[1].slice(0, -1),
|
|
||||||
base: allParts[2],
|
|
||||||
ext: allParts[3],
|
|
||||||
name: allParts[2].slice(0, allParts[2].length - allParts[3].length)
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Split a filename into [root, dir, basename, ext], unix version
|
|
||||||
// 'root' is just a slash, or nothing.
|
|
||||||
var splitPathRe =
|
|
||||||
/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
|
|
||||||
var posix = {};
|
|
||||||
|
|
||||||
|
|
||||||
function posixSplitPath(filename) {
|
|
||||||
return splitPathRe.exec(filename).slice(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
posix.parse = function(pathString) {
|
|
||||||
if (typeof pathString !== 'string') {
|
|
||||||
throw new TypeError(
|
|
||||||
"Parameter 'pathString' must be a string, not " + typeof pathString
|
|
||||||
);
|
|
||||||
}
|
|
||||||
var allParts = posixSplitPath(pathString);
|
|
||||||
if (!allParts || allParts.length !== 4) {
|
|
||||||
throw new TypeError("Invalid path '" + pathString + "'");
|
|
||||||
}
|
|
||||||
allParts[1] = allParts[1] || '';
|
|
||||||
allParts[2] = allParts[2] || '';
|
|
||||||
allParts[3] = allParts[3] || '';
|
|
||||||
|
|
||||||
return {
|
|
||||||
root: allParts[0],
|
|
||||||
dir: allParts[0] + allParts[1].slice(0, -1),
|
|
||||||
base: allParts[2],
|
|
||||||
ext: allParts[3],
|
|
||||||
name: allParts[2].slice(0, allParts[2].length - allParts[3].length)
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
if (isWindows)
|
|
||||||
module.exports = win32.parse;
|
|
||||||
else /* posix */
|
|
||||||
module.exports = posix.parse;
|
|
||||||
|
|
||||||
module.exports.posix = posix.parse;
|
|
||||||
module.exports.win32 = win32.parse;
|
|
||||||
64
node_modules/path-parse/package.json
generated
vendored
64
node_modules/path-parse/package.json
generated
vendored
@@ -1,64 +0,0 @@
|
|||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"path-parse@1.0.6",
|
|
||||||
"c:\\EndBug\\GitHub\\add-and-commit"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "path-parse@1.0.6",
|
|
||||||
"_id": "path-parse@1.0.6",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
|
|
||||||
"_location": "/path-parse",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "path-parse@1.0.6",
|
|
||||||
"name": "path-parse",
|
|
||||||
"escapedName": "path-parse",
|
|
||||||
"rawSpec": "1.0.6",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "1.0.6"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/resolve"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
|
|
||||||
"_spec": "1.0.6",
|
|
||||||
"_where": "c:\\EndBug\\GitHub\\add-and-commit",
|
|
||||||
"author": {
|
|
||||||
"name": "Javier Blanco",
|
|
||||||
"email": "http://jbgutierrez.info"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/jbgutierrez/path-parse/issues"
|
|
||||||
},
|
|
||||||
"description": "Node.js path.parse() ponyfill",
|
|
||||||
"homepage": "https://github.com/jbgutierrez/path-parse#readme",
|
|
||||||
"keywords": [
|
|
||||||
"path",
|
|
||||||
"paths",
|
|
||||||
"file",
|
|
||||||
"dir",
|
|
||||||
"parse",
|
|
||||||
"built-in",
|
|
||||||
"util",
|
|
||||||
"utils",
|
|
||||||
"core",
|
|
||||||
"ponyfill",
|
|
||||||
"polyfill",
|
|
||||||
"shim"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"main": "index.js",
|
|
||||||
"name": "path-parse",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/jbgutierrez/path-parse.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "node test.js"
|
|
||||||
},
|
|
||||||
"version": "1.0.6"
|
|
||||||
}
|
|
||||||
77
node_modules/path-parse/test.js
generated
vendored
77
node_modules/path-parse/test.js
generated
vendored
@@ -1,77 +0,0 @@
|
|||||||
var assert = require('assert');
|
|
||||||
var pathParse = require('./index');
|
|
||||||
|
|
||||||
var winParseTests = [
|
|
||||||
[{ root: 'C:\\', dir: 'C:\\path\\dir', base: 'index.html', ext: '.html', name: 'index' }, 'C:\\path\\dir\\index.html'],
|
|
||||||
[{ root: 'C:\\', dir: 'C:\\another_path\\DIR\\1\\2\\33', base: 'index', ext: '', name: 'index' }, 'C:\\another_path\\DIR\\1\\2\\33\\index'],
|
|
||||||
[{ root: '', dir: 'another_path\\DIR with spaces\\1\\2\\33', base: 'index', ext: '', name: 'index' }, 'another_path\\DIR with spaces\\1\\2\\33\\index'],
|
|
||||||
[{ root: '\\', dir: '\\foo', base: 'C:', ext: '', name: 'C:' }, '\\foo\\C:'],
|
|
||||||
[{ root: '', dir: '', base: 'file', ext: '', name: 'file' }, 'file'],
|
|
||||||
[{ root: '', dir: '.', base: 'file', ext: '', name: 'file' }, '.\\file'],
|
|
||||||
|
|
||||||
// unc
|
|
||||||
[{ root: '\\\\server\\share\\', dir: '\\\\server\\share\\', base: 'file_path', ext: '', name: 'file_path' }, '\\\\server\\share\\file_path'],
|
|
||||||
[{ root: '\\\\server two\\shared folder\\', dir: '\\\\server two\\shared folder\\', base: 'file path.zip', ext: '.zip', name: 'file path' }, '\\\\server two\\shared folder\\file path.zip'],
|
|
||||||
[{ root: '\\\\teela\\admin$\\', dir: '\\\\teela\\admin$\\', base: 'system32', ext: '', name: 'system32' }, '\\\\teela\\admin$\\system32'],
|
|
||||||
[{ root: '\\\\?\\UNC\\', dir: '\\\\?\\UNC\\server', base: 'share', ext: '', name: 'share' }, '\\\\?\\UNC\\server\\share']
|
|
||||||
];
|
|
||||||
|
|
||||||
var winSpecialCaseFormatTests = [
|
|
||||||
[{dir: 'some\\dir'}, 'some\\dir\\'],
|
|
||||||
[{base: 'index.html'}, 'index.html'],
|
|
||||||
[{}, '']
|
|
||||||
];
|
|
||||||
|
|
||||||
var unixParseTests = [
|
|
||||||
[{ root: '/', dir: '/home/user/dir', base: 'file.txt', ext: '.txt', name: 'file' }, '/home/user/dir/file.txt'],
|
|
||||||
[{ root: '/', dir: '/home/user/a dir', base: 'another File.zip', ext: '.zip', name: 'another File' }, '/home/user/a dir/another File.zip'],
|
|
||||||
[{ root: '/', dir: '/home/user/a dir/', base: 'another&File.', ext: '.', name: 'another&File' }, '/home/user/a dir//another&File.'],
|
|
||||||
[{ root: '/', dir: '/home/user/a$$$dir/', base: 'another File.zip', ext: '.zip', name: 'another File' }, '/home/user/a$$$dir//another File.zip'],
|
|
||||||
[{ root: '', dir: 'user/dir', base: 'another File.zip', ext: '.zip', name: 'another File' }, 'user/dir/another File.zip'],
|
|
||||||
[{ root: '', dir: '', base: 'file', ext: '', name: 'file' }, 'file'],
|
|
||||||
[{ root: '', dir: '', base: '.\\file', ext: '', name: '.\\file' }, '.\\file'],
|
|
||||||
[{ root: '', dir: '.', base: 'file', ext: '', name: 'file' }, './file'],
|
|
||||||
[{ root: '', dir: '', base: 'C:\\foo', ext: '', name: 'C:\\foo' }, 'C:\\foo']
|
|
||||||
];
|
|
||||||
|
|
||||||
var unixSpecialCaseFormatTests = [
|
|
||||||
[{dir: 'some/dir'}, 'some/dir/'],
|
|
||||||
[{base: 'index.html'}, 'index.html'],
|
|
||||||
[{}, '']
|
|
||||||
];
|
|
||||||
|
|
||||||
var errors = [
|
|
||||||
{input: null, message: /Parameter 'pathString' must be a string, not/},
|
|
||||||
{input: {}, message: /Parameter 'pathString' must be a string, not object/},
|
|
||||||
{input: true, message: /Parameter 'pathString' must be a string, not boolean/},
|
|
||||||
{input: 1, message: /Parameter 'pathString' must be a string, not number/},
|
|
||||||
{input: undefined, message: /Parameter 'pathString' must be a string, not undefined/},
|
|
||||||
];
|
|
||||||
|
|
||||||
checkParseFormat(pathParse.win32, winParseTests);
|
|
||||||
checkParseFormat(pathParse.posix, unixParseTests);
|
|
||||||
checkErrors(pathParse.win32);
|
|
||||||
checkErrors(pathParse.posix);
|
|
||||||
|
|
||||||
function checkErrors(parse) {
|
|
||||||
errors.forEach(function(errorCase) {
|
|
||||||
try {
|
|
||||||
parse(errorCase.input);
|
|
||||||
} catch(err) {
|
|
||||||
assert.ok(err instanceof TypeError);
|
|
||||||
assert.ok(
|
|
||||||
errorCase.message.test(err.message),
|
|
||||||
'expected ' + errorCase.message + ' to match ' + err.message
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert.fail('should have thrown');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkParseFormat(parse, testCases) {
|
|
||||||
testCases.forEach(function(testCase) {
|
|
||||||
assert.deepEqual(parse(testCase[1]), testCase[0]);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
1
node_modules/rechoir/.npmignore
generated
vendored
1
node_modules/rechoir/.npmignore
generated
vendored
@@ -1 +0,0 @@
|
|||||||
test
|
|
||||||
24
node_modules/rechoir/.travis.yml
generated
vendored
24
node_modules/rechoir/.travis.yml
generated
vendored
@@ -1,24 +0,0 @@
|
|||||||
sudo: false
|
|
||||||
language: node_js
|
|
||||||
node_js:
|
|
||||||
- "0.10"
|
|
||||||
- "0.12"
|
|
||||||
env:
|
|
||||||
global:
|
|
||||||
- REMOVE_DEPS=""
|
|
||||||
matrix:
|
|
||||||
- "CUSTOM_DEPS=coffee-script@~1.3"
|
|
||||||
- "CUSTOM_DEPS=coffee-script@~1.5"
|
|
||||||
- "CUSTOM_DEPS=coffee-script@~1.7"
|
|
||||||
- "CUSTOM_DEPS=coffee-script@latest"
|
|
||||||
- "CUSTOM_DEPS=iced-coffee-script@1.6.3-j"
|
|
||||||
- "CUSTOM_DEPS=iced-coffee-script@latest"
|
|
||||||
- "CUSTOM_DEPS=LiveScript@1.3.1 REMOVE_DEPS=livescript"
|
|
||||||
- "CUSTOM_DEPS=typescript-require REMOVE_DEPS=typescript-register"
|
|
||||||
matrix:
|
|
||||||
fast_finish: true
|
|
||||||
before_install:
|
|
||||||
- "npm install -g npm" # needs the newest version of npm
|
|
||||||
before_script:
|
|
||||||
- "[ \"${REMOVE_DEPS}\" == \"\" ] || npm rm $REMOVE_DEPS"
|
|
||||||
- "npm install $CUSTOM_DEPS" # install a specific version of dependencies
|
|
||||||
38
node_modules/rechoir/CHANGELOG
generated
vendored
38
node_modules/rechoir/CHANGELOG
generated
vendored
@@ -1,38 +0,0 @@
|
|||||||
v0.6.2:
|
|
||||||
date: 2015-07-22
|
|
||||||
changes:
|
|
||||||
- Return `undefined` when an unknown extension is provided to prepare and
|
|
||||||
the `nothrow` option is specified.
|
|
||||||
v0.6.1:
|
|
||||||
date: 2015-05-22
|
|
||||||
changes:
|
|
||||||
- Add option for not throwing.
|
|
||||||
v0.6.0:
|
|
||||||
date: 2015-05-20
|
|
||||||
changes:
|
|
||||||
- Include module name when prepare is successful.
|
|
||||||
v0.5.0:
|
|
||||||
date: 2015-05-20
|
|
||||||
changes:
|
|
||||||
- Overhaul to support interpret 0.6.0.
|
|
||||||
v0.3.0:
|
|
||||||
date: 2015-01-10
|
|
||||||
changes:
|
|
||||||
- Breaking: `load` method removed.
|
|
||||||
- Improved extension recognition.
|
|
||||||
- No longer fails upon dots in filenames.
|
|
||||||
- Support confuration objects.
|
|
||||||
- Support and test ES6.
|
|
||||||
- Support legacy module loading.
|
|
||||||
v0.2.2:
|
|
||||||
date: 2014-12-17
|
|
||||||
changes:
|
|
||||||
- Expose interpret.
|
|
||||||
v0.2.0:
|
|
||||||
date: 2014-04-20
|
|
||||||
changes:
|
|
||||||
- Simplify loading of coffee-script and iced-coffee-script.
|
|
||||||
v0.1.0:
|
|
||||||
date: 2014-04-20
|
|
||||||
changes:
|
|
||||||
- Initial public release.
|
|
||||||
22
node_modules/rechoir/LICENSE
generated
vendored
22
node_modules/rechoir/LICENSE
generated
vendored
@@ -1,22 +0,0 @@
|
|||||||
Copyright (c) 2015 Tyler Kellen
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person
|
|
||||||
obtaining a copy of this software and associated documentation
|
|
||||||
files (the "Software"), to deal in the Software without
|
|
||||||
restriction, including without limitation the rights to use,
|
|
||||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the
|
|
||||||
Software is furnished to do so, subject to the following
|
|
||||||
conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
||||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
||||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
||||||
OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
42
node_modules/rechoir/README.md
generated
vendored
42
node_modules/rechoir/README.md
generated
vendored
@@ -1,42 +0,0 @@
|
|||||||
# rechoir [](http://travis-ci.org/tkellen/js-rechoir)
|
|
||||||
> Require any supported file as a node module.
|
|
||||||
|
|
||||||
[](https://nodei.co/npm/rechoir/)
|
|
||||||
|
|
||||||
## What is it?
|
|
||||||
This module, in conjunction with [interpret]-like objects can register any file type the npm ecosystem has a module loader for. This library is a dependency of [Liftoff].
|
|
||||||
|
|
||||||
## API
|
|
||||||
|
|
||||||
### prepare(config, filepath, requireFrom)
|
|
||||||
Look for a module loader associated with the provided file and attempt require it. If necessary, run any setup required to inject it into [require.extensions](http://nodejs.org/api/globals.html#globals_require_extensions).
|
|
||||||
|
|
||||||
`config` An [interpret]-like configuration object.
|
|
||||||
|
|
||||||
`filepath` A file whose type you'd like to register a module loader for.
|
|
||||||
|
|
||||||
`requireFrom` An optional path to start searching for the module required to load the requested file. Defaults to the directory of `filepath`.
|
|
||||||
|
|
||||||
If calling this method is successful (aka: it doesn't throw), you can now require files of the type you requested natively.
|
|
||||||
|
|
||||||
An error with a `failures` property will be thrown if the module loader(s) configured for a given extension cannot be registered.
|
|
||||||
|
|
||||||
If a loader is already registered, this will simply return `true`.
|
|
||||||
|
|
||||||
**Note:** While rechoir will automatically load and register transpilers like `coffee-script`, you must provide a local installation. The transpilers are **not** bundled with this module.
|
|
||||||
|
|
||||||
#### Usage
|
|
||||||
```js
|
|
||||||
const config = require('interpret').extensions;
|
|
||||||
const rechoir = require('rechoir');
|
|
||||||
rechoir.prepare(config, './test/fixtures/test.coffee');
|
|
||||||
rechoir.prepare(config, './test/fixtures/test.csv');
|
|
||||||
rechoir.prepare(config, './test/fixtures/test.toml');
|
|
||||||
|
|
||||||
console.log(require('./test/fixtures/test.coffee'));
|
|
||||||
console.log(require('./test/fixtures/test.csv'));
|
|
||||||
console.log(require('./test/fixtures/test.toml'));
|
|
||||||
```
|
|
||||||
|
|
||||||
[interpret]: http://github.com/tkellen/js-interpret
|
|
||||||
[Liftoff]: http://github.com/tkellen/js-liftoff
|
|
||||||
59
node_modules/rechoir/index.js
generated
vendored
59
node_modules/rechoir/index.js
generated
vendored
@@ -1,59 +0,0 @@
|
|||||||
const path = require('path');
|
|
||||||
|
|
||||||
const extension = require('./lib/extension');
|
|
||||||
const normalize = require('./lib/normalize');
|
|
||||||
const register = require('./lib/register');
|
|
||||||
|
|
||||||
exports.prepare = function (extensions, filepath, cwd, nothrow) {
|
|
||||||
var option, attempt;
|
|
||||||
var attempts = [];
|
|
||||||
var err;
|
|
||||||
var onlyErrors = false;
|
|
||||||
var ext = extension(filepath);
|
|
||||||
if (Object.keys(require.extensions).indexOf(ext) !== -1) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
var config = normalize(extensions[ext]);
|
|
||||||
if (!config) {
|
|
||||||
if (nothrow) {
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
throw new Error('No module loader found for "'+ext+'".');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!cwd) {
|
|
||||||
cwd = path.dirname(path.resolve(filepath));
|
|
||||||
}
|
|
||||||
if (!Array.isArray(config)) {
|
|
||||||
config = [config];
|
|
||||||
}
|
|
||||||
for (var i in config) {
|
|
||||||
option = config[i];
|
|
||||||
attempt = register(cwd, option.module, option.register);
|
|
||||||
error = (attempt instanceof Error) ? attempt : null;
|
|
||||||
if (error) {
|
|
||||||
attempt = null;
|
|
||||||
}
|
|
||||||
attempts.push({
|
|
||||||
moduleName: option.module,
|
|
||||||
module: attempt,
|
|
||||||
error: error
|
|
||||||
});
|
|
||||||
if (!error) {
|
|
||||||
onlyErrors = false;
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
onlyErrors = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (onlyErrors) {
|
|
||||||
err = new Error('Unable to use specified module loaders for "'+ext+'".');
|
|
||||||
err.failures = attempts;
|
|
||||||
if (nothrow) {
|
|
||||||
return err;
|
|
||||||
} else {
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return attempts;
|
|
||||||
};
|
|
||||||
11
node_modules/rechoir/lib/extension.js
generated
vendored
11
node_modules/rechoir/lib/extension.js
generated
vendored
@@ -1,11 +0,0 @@
|
|||||||
const path = require('path');
|
|
||||||
|
|
||||||
const EXTRE = /^[.]?[^.]+([.].*)$/;
|
|
||||||
|
|
||||||
module.exports = function (input) {
|
|
||||||
var extension = EXTRE.exec(path.basename(input));
|
|
||||||
if (!extension) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
return extension[1];
|
|
||||||
};
|
|
||||||
15
node_modules/rechoir/lib/normalize.js
generated
vendored
15
node_modules/rechoir/lib/normalize.js
generated
vendored
@@ -1,15 +0,0 @@
|
|||||||
function normalizer (config) {
|
|
||||||
if (typeof config === 'string') {
|
|
||||||
return {
|
|
||||||
module: config
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return config;
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = function (config) {
|
|
||||||
if (Array.isArray(config)) {
|
|
||||||
return config.map(normalizer);
|
|
||||||
}
|
|
||||||
return normalizer(config);
|
|
||||||
};
|
|
||||||
15
node_modules/rechoir/lib/register.js
generated
vendored
15
node_modules/rechoir/lib/register.js
generated
vendored
@@ -1,15 +0,0 @@
|
|||||||
const path = require('path');
|
|
||||||
const resolve = require('resolve');
|
|
||||||
|
|
||||||
module.exports = function (cwd, moduleName, register) {
|
|
||||||
try {
|
|
||||||
var modulePath = resolve.sync(moduleName, {basedir: cwd});
|
|
||||||
var result = require(modulePath);
|
|
||||||
if (typeof register === 'function') {
|
|
||||||
register(result);
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
result = e;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
116
node_modules/rechoir/package.json
generated
vendored
116
node_modules/rechoir/package.json
generated
vendored
@@ -1,116 +0,0 @@
|
|||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"rechoir@0.6.2",
|
|
||||||
"c:\\EndBug\\GitHub\\add-and-commit"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "rechoir@0.6.2",
|
|
||||||
"_id": "rechoir@0.6.2",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
|
|
||||||
"_location": "/rechoir",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "rechoir@0.6.2",
|
|
||||||
"name": "rechoir",
|
|
||||||
"escapedName": "rechoir",
|
|
||||||
"rawSpec": "0.6.2",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "0.6.2"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/shelljs"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
|
|
||||||
"_spec": "0.6.2",
|
|
||||||
"_where": "c:\\EndBug\\GitHub\\add-and-commit",
|
|
||||||
"author": {
|
|
||||||
"name": "Tyler Kellen",
|
|
||||||
"url": "http://goingslowly.com/"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/tkellen/node-rechoir/issues"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"resolve": "^1.1.6"
|
|
||||||
},
|
|
||||||
"description": "Require any supported file as a node module.",
|
|
||||||
"devDependencies": {
|
|
||||||
"babel": "^5.4.3",
|
|
||||||
"chai": "^2.3.0",
|
|
||||||
"coco": "^0.9.1",
|
|
||||||
"coffee-script": "^1.9.2",
|
|
||||||
"earlgrey": "0.0.9",
|
|
||||||
"iced-coffee-script": "^1.8.0-d",
|
|
||||||
"interpret": "^0.6.1",
|
|
||||||
"json5": "^0.4.0",
|
|
||||||
"livescript": "^1.4.0",
|
|
||||||
"mocha": "^2.2.5",
|
|
||||||
"node-jsx": "^0.13.3",
|
|
||||||
"require-csv": "0.0.1",
|
|
||||||
"require-ini": "0.0.1",
|
|
||||||
"require-uncached": "^1.0.2",
|
|
||||||
"require-xml": "0.0.1",
|
|
||||||
"require-yaml": "0.0.1",
|
|
||||||
"rimraf": "^2.3.4",
|
|
||||||
"semver": "^4.3.4",
|
|
||||||
"sinon": "^1.14.1",
|
|
||||||
"toml-require": "^1.0.1",
|
|
||||||
"typescript-register": "^1.1.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 0.10"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/tkellen/node-rechoir",
|
|
||||||
"keywords": [
|
|
||||||
"require",
|
|
||||||
"cjsx",
|
|
||||||
"co",
|
|
||||||
"coco",
|
|
||||||
"coffee-script",
|
|
||||||
"coffee",
|
|
||||||
"coffee.md",
|
|
||||||
"csv",
|
|
||||||
"earlgrey",
|
|
||||||
"es",
|
|
||||||
"es6",
|
|
||||||
"iced",
|
|
||||||
"iced.md",
|
|
||||||
"iced-coffee-script",
|
|
||||||
"ini",
|
|
||||||
"js",
|
|
||||||
"json",
|
|
||||||
"json5",
|
|
||||||
"jsx",
|
|
||||||
"react",
|
|
||||||
"litcoffee",
|
|
||||||
"liticed",
|
|
||||||
"ls",
|
|
||||||
"livescript",
|
|
||||||
"toml",
|
|
||||||
"ts",
|
|
||||||
"typescript",
|
|
||||||
"xml",
|
|
||||||
"yaml",
|
|
||||||
"yml"
|
|
||||||
],
|
|
||||||
"licenses": [
|
|
||||||
{
|
|
||||||
"type": "MIT",
|
|
||||||
"url": "https://github.com/tkellen/node-rechoir/blob/master/LICENSE"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"main": "index.js",
|
|
||||||
"name": "rechoir",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git://github.com/tkellen/node-rechoir.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "mocha -R spec test/index.js"
|
|
||||||
},
|
|
||||||
"version": "0.6.2"
|
|
||||||
}
|
|
||||||
1
node_modules/resolve/.eslintignore
generated
vendored
1
node_modules/resolve/.eslintignore
generated
vendored
@@ -1 +0,0 @@
|
|||||||
node_modules
|
|
||||||
39
node_modules/resolve/.eslintrc
generated
vendored
39
node_modules/resolve/.eslintrc
generated
vendored
@@ -1,39 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": "@ljharb",
|
|
||||||
"root": true,
|
|
||||||
"rules": {
|
|
||||||
"array-bracket-newline": 0,
|
|
||||||
"array-element-newline": 0,
|
|
||||||
"indent": [2, 4],
|
|
||||||
"strict": 0,
|
|
||||||
"complexity": 0,
|
|
||||||
"consistent-return": 0,
|
|
||||||
"curly": 0,
|
|
||||||
"dot-notation": [2, { "allowKeywords": true }],
|
|
||||||
"func-name-matching": 0,
|
|
||||||
"func-style": 0,
|
|
||||||
"global-require": 0,
|
|
||||||
"id-length": [2, { "min": 1, "max": 30 }],
|
|
||||||
"max-lines-per-function": 0,
|
|
||||||
"max-nested-callbacks": 0,
|
|
||||||
"max-params": 0,
|
|
||||||
"max-statements-per-line": [2, { "max": 2 }],
|
|
||||||
"max-statements": 0,
|
|
||||||
"no-magic-numbers": 0,
|
|
||||||
"no-console": 0,
|
|
||||||
"no-shadow": 0,
|
|
||||||
"no-unused-vars": [2, { "vars": "all", "args": "none" }],
|
|
||||||
"no-use-before-define": 0,
|
|
||||||
"object-curly-newline": 0,
|
|
||||||
"operator-linebreak": [2, "before"],
|
|
||||||
"sort-keys": 0,
|
|
||||||
},
|
|
||||||
"overrides": [
|
|
||||||
{
|
|
||||||
"files": "test/resolver/nested_symlinks/mylib/*.js",
|
|
||||||
"rules": {
|
|
||||||
"no-throw-literal": 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}
|
|
||||||
8
node_modules/resolve/.travis.yml
generated
vendored
8
node_modules/resolve/.travis.yml
generated
vendored
@@ -1,8 +0,0 @@
|
|||||||
version: ~> 1.0
|
|
||||||
language: node_js
|
|
||||||
os:
|
|
||||||
- linux
|
|
||||||
import:
|
|
||||||
- ljharb/travis-ci:node/all.yml
|
|
||||||
- ljharb/travis-ci:node/pretest.yml
|
|
||||||
- ljharb/travis-ci:node/posttest.yml
|
|
||||||
21
node_modules/resolve/LICENSE
generated
vendored
21
node_modules/resolve/LICENSE
generated
vendored
@@ -1,21 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2012 James Halliday
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
53
node_modules/resolve/appveyor.yml
generated
vendored
53
node_modules/resolve/appveyor.yml
generated
vendored
@@ -1,53 +0,0 @@
|
|||||||
version: 1.0.{build}
|
|
||||||
skip_branch_with_pr: true
|
|
||||||
build: off
|
|
||||||
|
|
||||||
environment:
|
|
||||||
matrix:
|
|
||||||
- nodejs_version: "12"
|
|
||||||
- nodejs_version: "11"
|
|
||||||
- nodejs_version: "10"
|
|
||||||
- nodejs_version: "9"
|
|
||||||
- nodejs_version: "8"
|
|
||||||
- nodejs_version: "7"
|
|
||||||
- nodejs_version: "6"
|
|
||||||
- nodejs_version: "5"
|
|
||||||
- nodejs_version: "4"
|
|
||||||
- nodejs_version: "3"
|
|
||||||
- nodejs_version: "2"
|
|
||||||
- nodejs_version: "1"
|
|
||||||
- nodejs_version: "0.12"
|
|
||||||
- nodejs_version: "0.10"
|
|
||||||
- nodejs_version: "0.8"
|
|
||||||
- nodejs_version: "0.6"
|
|
||||||
matrix:
|
|
||||||
# fast_finish: true
|
|
||||||
allow_failures:
|
|
||||||
- nodejs_version: "0.8"
|
|
||||||
- nodejs_version: "0.6"
|
|
||||||
|
|
||||||
platform:
|
|
||||||
- x86
|
|
||||||
- x64
|
|
||||||
|
|
||||||
# Install scripts. (runs after repo cloning)
|
|
||||||
install:
|
|
||||||
# Fix symlinks in working copy (see https://github.com/appveyor/ci/issues/650#issuecomment-186592582) / https://github.com/charleskorn/batect/commit/d08986802ec43086902958c4ee7e57ff3e71dbef
|
|
||||||
- git config core.symlinks true
|
|
||||||
- git reset --hard
|
|
||||||
# Get the latest stable version of Node.js or io.js
|
|
||||||
- ps: Install-Product node $env:nodejs_version $env:platform
|
|
||||||
- IF %nodejs_version% EQU 0.6 npm config set strict-ssl false && npm -g install npm@1.3
|
|
||||||
- IF %nodejs_version% EQU 0.8 npm config set strict-ssl false && npm -g install npm@1.4.28 && npm install -g npm@4.5
|
|
||||||
- set PATH=%APPDATA%\npm;%PATH%
|
|
||||||
#- IF %nodejs_version% NEQ 0.6 AND %nodejs_version% NEQ 0.8 npm -g install npm
|
|
||||||
# install modules
|
|
||||||
- npm install
|
|
||||||
|
|
||||||
# Post-install test scripts.
|
|
||||||
test_script:
|
|
||||||
# Output useful info for debugging.
|
|
||||||
- node --version
|
|
||||||
- npm --version
|
|
||||||
# run tests
|
|
||||||
- npm run tests-only
|
|
||||||
5
node_modules/resolve/example/async.js
generated
vendored
5
node_modules/resolve/example/async.js
generated
vendored
@@ -1,5 +0,0 @@
|
|||||||
var resolve = require('../');
|
|
||||||
resolve('tap', { basedir: __dirname }, function (err, res) {
|
|
||||||
if (err) console.error(err);
|
|
||||||
else console.log(res);
|
|
||||||
});
|
|
||||||
3
node_modules/resolve/example/sync.js
generated
vendored
3
node_modules/resolve/example/sync.js
generated
vendored
@@ -1,3 +0,0 @@
|
|||||||
var resolve = require('../');
|
|
||||||
var res = resolve.sync('tap', { basedir: __dirname });
|
|
||||||
console.log(res);
|
|
||||||
7
node_modules/resolve/index.js
generated
vendored
7
node_modules/resolve/index.js
generated
vendored
@@ -1,7 +0,0 @@
|
|||||||
var async = require('./lib/async');
|
|
||||||
async.core = require('./lib/core');
|
|
||||||
async.isCore = require('./lib/is-core');
|
|
||||||
async.sync = require('./lib/sync');
|
|
||||||
|
|
||||||
exports = async;
|
|
||||||
module.exports = async;
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user