mirror of
https://github.com/JonasunderscoreJones/api.jonasjones.dev.git
synced 2025-10-23 12:09:19 +02:00
Initial commit (by create-cloudflare CLI)
This commit is contained in:
commit
58a42872a0
1745 changed files with 741893 additions and 0 deletions
116
node_modules/prebuild-install/CHANGELOG.md
generated
vendored
Normal file
116
node_modules/prebuild-install/CHANGELOG.md
generated
vendored
Normal file
|
@ -0,0 +1,116 @@
|
|||
# Changelog
|
||||
|
||||
## [7.1.1] - 2022-06-07
|
||||
|
||||
### Changed
|
||||
|
||||
- Replace use of npmlog dependency with console.error ([#182](https://github.com/prebuild/prebuild-install/issues/182)) ([`4e2284c`](https://github.com/prebuild/prebuild-install/commit/4e2284c)) (Lovell Fuller).
|
||||
|
||||
- Ensure script output can be captured by tests ([#181](https://github.com/prebuild/prebuild-install/issues/181)) ([`d1853cb`](https://github.com/prebuild/prebuild-install/commit/d1853cb)) (Lovell Fuller).
|
||||
|
||||
## [7.1.0] - 2022-04-20
|
||||
|
||||
### Changed
|
||||
|
||||
- Allow setting libc to glibc on non-glibc platform ([#176](https://github.com/prebuild/prebuild-install/issues/176)) ([`f729abb`](https://github.com/prebuild/prebuild-install/commit/f729abb)) (Joona Heinikoski).
|
||||
|
||||
## [7.0.1] - 2022-01-28
|
||||
|
||||
### Changed
|
||||
|
||||
- Upgrade to the latest version of `detect-libc` ([#166](https://github.com/prebuild/prebuild-install/issues/166)) ([`f71c6b9`](https://github.com/prebuild/prebuild-install/commit/f71c6b9)) (Lovell Fuller).
|
||||
|
||||
## [7.0.0] - 2021-11-12
|
||||
|
||||
### Changed
|
||||
|
||||
- **Breaking:** bump `node-abi` so that Electron 14+ gets correct ABI ([#161](https://github.com/prebuild/prebuild-install/issues/161)) ([`477f347`](https://github.com/prebuild/prebuild-install/commit/477f347)) (csett86). Drops support of Node.js < 10.
|
||||
- Bump `simple-get` ([`7468c14`](https://github.com/prebuild/prebuild-install/commit/7468c14)) (Vincent Weevers).
|
||||
|
||||
## [6.1.4] - 2021-08-11
|
||||
|
||||
### Fixed
|
||||
|
||||
- Move auth token to header instead of query param ([#160](https://github.com/prebuild/prebuild-install/issues/160)) ([`b3fad76`](https://github.com/prebuild/prebuild-install/commit/b3fad76)) (nicolai-nordic)
|
||||
- Remove `_` prefix as it isn't allowed by npm config ([#153](https://github.com/prebuild/prebuild-install/issues/153)) ([`a964e5b`](https://github.com/prebuild/prebuild-install/commit/a964e5b)) (Tom Boothman)
|
||||
- Make `rc.path` absolute ([#158](https://github.com/prebuild/prebuild-install/issues/158)) ([`57bcc06`](https://github.com/prebuild/prebuild-install/commit/57bcc06)) (George Waters).
|
||||
|
||||
## [6.1.3] - 2021-06-03
|
||||
|
||||
### Changed
|
||||
|
||||
- Inline no longer maintained `noop-logger` ([#155](https://github.com/prebuild/prebuild-install/issues/155)) ([`e08d75a`](https://github.com/prebuild/prebuild-install/commit/e08d75a)) (Alexandru Dima)
|
||||
- Point users towards `prebuildify` in README ([#150](https://github.com/prebuild/prebuild-install/issues/150)) ([`5ee1a2f`](https://github.com/prebuild/prebuild-install/commit/5ee1a2f)) (Vincent Weevers)
|
||||
|
||||
## [6.1.2] - 2021-04-24
|
||||
|
||||
### Fixed
|
||||
|
||||
- Support URL-safe strings in scoped packages ([#148](https://github.com/prebuild/prebuild-install/issues/148)) ([`db36c7a`](https://github.com/prebuild/prebuild-install/commit/db36c7a)) (Marco)
|
||||
|
||||
## [6.1.1] - 2021-04-04
|
||||
|
||||
### Fixed
|
||||
|
||||
- Support `force` & `buildFromSource` options in yarn ([#140](https://github.com/prebuild/prebuild-install/issues/140)) ([`8cb1ced`](https://github.com/prebuild/prebuild-install/commit/8cb1ced)) (João Moreno)
|
||||
- Bump `node-abi` to prevent dedupe (closes [#135](https://github.com/prebuild/prebuild-install/issues/135)) ([`2950fb2`](https://github.com/prebuild/prebuild-install/commit/2950fb2)) (Vincent Weevers)
|
||||
|
||||
## [6.1.0] - 2021-04-03
|
||||
|
||||
### Added
|
||||
|
||||
- Restore local prebuilds feature ([#137](https://github.com/prebuild/prebuild-install/issues/137)) ([`dc4e5ea`](https://github.com/prebuild/prebuild-install/commit/dc4e5ea)) (Wes Roberts). Previously removed in [#81](https://github.com/prebuild/prebuild-install/issues/81) / [`a069253`](https://github.com/prebuild/prebuild-install/commit/a06925378d38ca821bfa93aa4c1fdedc253b2420).
|
||||
|
||||
## [6.0.1] - 2021-02-14
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixes empty `--tag-prefix` ([#143](https://github.com/prebuild/prebuild-install/issues/143)) ([**@mathiask88**](https://github.com/mathiask88))
|
||||
|
||||
## [6.0.0] - 2020-10-23
|
||||
|
||||
### Changed
|
||||
|
||||
- **Breaking:** don't skip downloads in standalone mode ([`b6f3b36`](https://github.com/prebuild/prebuild-install/commit/b6f3b36)) ([**@vweevers**](https://github.com/vweevers))
|
||||
|
||||
### Added
|
||||
|
||||
- Document cross platform options ([`e5c9a5a`](https://github.com/prebuild/prebuild-install/commit/e5c9a5a)) ([**@fishbone1**](https://github.com/fishbone1))
|
||||
|
||||
### Removed
|
||||
|
||||
- **Breaking:** remove `--compile` and `--prebuild` options ([`94f2492`](https://github.com/prebuild/prebuild-install/commit/94f2492)) ([**@vweevers**](https://github.com/vweevers))
|
||||
|
||||
### Fixed
|
||||
|
||||
- Support npm 7 ([`8acccac`](https://github.com/prebuild/prebuild-install/commit/8acccac), [`08eaf6d`](https://github.com/prebuild/prebuild-install/commit/08eaf6d), [`22175b8`](https://github.com/prebuild/prebuild-install/commit/22175b8)) ([**@vweevers**](https://github.com/vweevers))
|
||||
|
||||
## [5.3.6] - 2020-10-20
|
||||
|
||||
### Changed
|
||||
|
||||
- Replace `mkdirp` dependency with `mkdirp-classic` ([**@ralphtheninja**](https://github.com/ralphtheninja))
|
||||
|
||||
[7.1.1]: https://github.com/prebuild/prebuild-install/releases/tag/v7.1.1
|
||||
|
||||
[7.1.0]: https://github.com/prebuild/prebuild-install/releases/tag/v7.1.0
|
||||
|
||||
[7.0.1]: https://github.com/prebuild/prebuild-install/releases/tag/v7.0.1
|
||||
|
||||
[7.0.0]: https://github.com/prebuild/prebuild-install/releases/tag/v7.0.0
|
||||
|
||||
[6.1.4]: https://github.com/prebuild/prebuild-install/releases/tag/v6.1.4
|
||||
|
||||
[6.1.3]: https://github.com/prebuild/prebuild-install/releases/tag/v6.1.3
|
||||
|
||||
[6.1.2]: https://github.com/prebuild/prebuild-install/releases/tag/v6.1.2
|
||||
|
||||
[6.1.1]: https://github.com/prebuild/prebuild-install/releases/tag/v6.1.1
|
||||
|
||||
[6.1.0]: https://github.com/prebuild/prebuild-install/releases/tag/v6.1.0
|
||||
|
||||
[6.0.1]: https://github.com/prebuild/prebuild-install/releases/tag/v6.0.1
|
||||
|
||||
[6.0.0]: https://github.com/prebuild/prebuild-install/releases/tag/v6.0.0
|
||||
|
||||
[5.3.6]: https://github.com/prebuild/prebuild-install/releases/tag/v5.3.6
|
6
node_modules/prebuild-install/CONTRIBUTING.md
generated
vendored
Normal file
6
node_modules/prebuild-install/CONTRIBUTING.md
generated
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
# Contributing to prebuild
|
||||
|
||||
- no commits direct to master
|
||||
- all commits as pull requests (one or several per PR)
|
||||
- each commit solves one identifiable problem
|
||||
- never merge one's own PRs, another contributor does this
|
21
node_modules/prebuild-install/LICENSE
generated
vendored
Normal file
21
node_modules/prebuild-install/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Mathias Buus
|
||||
|
||||
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.
|
163
node_modules/prebuild-install/README.md
generated
vendored
Normal file
163
node_modules/prebuild-install/README.md
generated
vendored
Normal file
|
@ -0,0 +1,163 @@
|
|||
# prebuild-install
|
||||
|
||||
> **A command line tool to easily install prebuilt binaries for multiple versions of Node.js & Electron on a specific platform.**
|
||||
> By default it downloads prebuilt binaries from a GitHub release.
|
||||
|
||||
[](https://www.npmjs.com/package/prebuild-install)
|
||||

|
||||
[](https://github.com/prebuild/prebuild-install/actions/workflows/test.yml)
|
||||
[](https://standardjs.com)
|
||||
[](https://common-changelog.org)
|
||||
|
||||
## Note
|
||||
|
||||
**Instead of [`prebuild`](https://github.com/prebuild/prebuild) paired with [`prebuild-install`](https://github.com/prebuild/prebuild-install), we recommend [`prebuildify`](https://github.com/prebuild/prebuildify) paired with [`node-gyp-build`](https://github.com/prebuild/node-gyp-build).**
|
||||
|
||||
With `prebuildify`, all prebuilt binaries are shipped inside the package that is published to npm, which means there's no need for a separate download step like you find in `prebuild`. The irony of this approach is that it is faster to download all prebuilt binaries for every platform when they are bundled than it is to download a single prebuilt binary as an install script.
|
||||
|
||||
Upsides:
|
||||
|
||||
1. No extra download step, making it more reliable and faster to install.
|
||||
2. Supports changing runtime versions locally and using the same install between Node.js and Electron. Reinstalling or rebuilding is not necessary, as all prebuilt binaries are in the npm tarball and the correct one is simply picked on runtime.
|
||||
3. The `node-gyp-build` runtime dependency is dependency-free and will remain so out of principle, because introducing dependencies would negate the shorter install time.
|
||||
4. Prebuilt binaries work even if npm install scripts are disabled.
|
||||
5. The npm package checksum covers prebuilt binaries too.
|
||||
|
||||
Downsides:
|
||||
|
||||
1. The installed npm package is larger on disk. Using [Node-API](https://nodejs.org/api/n-api.html) alleviates this because Node-API binaries are runtime-agnostic and forward-compatible.
|
||||
2. Publishing is mildly more complicated, because `npm publish` must be done after compiling and fetching prebuilt binaries (typically in CI).
|
||||
|
||||
## Usage
|
||||
|
||||
Use [`prebuild`](https://github.com/prebuild/prebuild) to create and upload prebuilt binaries. Then change your package.json install script to:
|
||||
|
||||
```json
|
||||
{
|
||||
"scripts": {
|
||||
"install": "prebuild-install || node-gyp rebuild"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
When a consumer then installs your package with npm thus triggering the above install script, `prebuild-install` will download a suitable prebuilt binary, or exit with a non-zero exit code if there is none, which triggers `node-gyp rebuild` in order to build from source.
|
||||
|
||||
Options (see below) can be passed to `prebuild-install` like so:
|
||||
|
||||
```json
|
||||
{
|
||||
"scripts": {
|
||||
"install": "prebuild-install -r napi || node-gyp rebuild"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Help
|
||||
|
||||
```
|
||||
prebuild-install [options]
|
||||
|
||||
--download -d [url] (download prebuilds, no url means github)
|
||||
--target -t version (version to install for)
|
||||
--runtime -r runtime (Node runtime [node, napi or electron] to build or install for, default is node)
|
||||
--path -p path (make a prebuild-install here)
|
||||
--token -T gh-token (github token for private repos)
|
||||
--arch arch (target CPU architecture, see Node OS module docs, default is current arch)
|
||||
--platform platform (target platform, see Node OS module docs, default is current platform)
|
||||
--tag-prefix <prefix> (github tag prefix, default is "v")
|
||||
--build-from-source (skip prebuild download)
|
||||
--verbose (log verbosely)
|
||||
--libc (use provided libc rather than system default)
|
||||
--debug (set Debug or Release configuration)
|
||||
--version (print prebuild-install version and exit)
|
||||
```
|
||||
|
||||
When `prebuild-install` is run via an `npm` script, options `--build-from-source`, `--debug`, `--download`, `--target`, `--runtime`, `--arch` `--platform` and `--libc` may be passed through via arguments given to the `npm` command.
|
||||
|
||||
Alternatively you can set environment variables `npm_config_build_from_source=true`, `npm_config_platform`, `npm_config_arch`, `npm_config_target` `npm_config_runtime` and `npm_config_libc`.
|
||||
|
||||
### Libc
|
||||
|
||||
On non-glibc Linux platforms, the Libc name is appended to platform name. For example, musl-based environments are called `linuxmusl`. If `--libc=glibc` is passed as option, glibc is discarded and platform is called as just `linux`. This can be used for example to build cross-platform packages on Alpine Linux.
|
||||
|
||||
### Private Repositories
|
||||
|
||||
`prebuild-install` supports downloading prebuilds from private GitHub repositories using the `-T <github-token>`:
|
||||
|
||||
```
|
||||
$ prebuild-install -T <github-token>
|
||||
```
|
||||
|
||||
If you don't want to use the token on cli you can put it in `~/.prebuild-installrc`:
|
||||
|
||||
```
|
||||
token=<github-token>
|
||||
```
|
||||
|
||||
Alternatively you can specify it in the `prebuild-install_token` environment variable.
|
||||
|
||||
Note that using a GitHub token uses the API to resolve the correct release meaning that you are subject to the ([GitHub Rate Limit](https://developer.github.com/v3/rate_limit/)).
|
||||
|
||||
### Create GitHub Token
|
||||
|
||||
To create a token:
|
||||
|
||||
- Go to [this page](https://github.com/settings/tokens)
|
||||
- Click the `Generate new token` button
|
||||
- Give the token a name and click the `Generate token` button, see below
|
||||
|
||||

|
||||
|
||||
The default scopes should be fine.
|
||||
|
||||
### Custom binaries
|
||||
|
||||
The end user can override binary download location through environment variables in their .npmrc file.
|
||||
The variable needs to meet the mask `% your package name %_binary_host` or `% your package name %_binary_host_mirror`. For example:
|
||||
|
||||
```
|
||||
leveldown_binary_host=http://overriden-host.com/overriden-path
|
||||
```
|
||||
|
||||
Note that the package version subpath and file name will still be appended.
|
||||
So if you are installing `leveldown@1.2.3` the resulting url will be:
|
||||
|
||||
```
|
||||
http://overriden-host.com/overriden-path/v1.2.3/leveldown-v1.2.3-node-v57-win32-x64.tar.gz
|
||||
```
|
||||
|
||||
#### Local prebuilds
|
||||
|
||||
If you want to use prebuilds from your local filesystem, you can use the `% your package name %_local_prebuilds` .npmrc variable to set a path to the folder containing prebuilds. For example:
|
||||
|
||||
```
|
||||
leveldown_local_prebuilds=/path/to/prebuilds
|
||||
```
|
||||
|
||||
This option will look directly in that folder for bundles created with `prebuild`, for example:
|
||||
|
||||
```
|
||||
/path/to/prebuilds/leveldown-v1.2.3-node-v57-win32-x64.tar.gz
|
||||
```
|
||||
|
||||
Non-absolute paths resolve relative to the directory of the package invoking prebuild-install, e.g. for nested dependencies.
|
||||
|
||||
### Cache
|
||||
|
||||
All prebuilt binaries are cached to minimize traffic. So first `prebuild-install` picks binaries from the cache and if no binary could be found, it will be downloaded. Depending on the environment, the cache folder is determined in the following order:
|
||||
|
||||
- `${npm_config_cache}/_prebuilds`
|
||||
- `${APP_DATA}/npm-cache/_prebuilds`
|
||||
- `${HOME}/.npm/_prebuilds`
|
||||
|
||||
## Install
|
||||
|
||||
With [npm](https://npmjs.org) do:
|
||||
|
||||
```
|
||||
npm install prebuild-install
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
[MIT](./LICENSE)
|
44
node_modules/prebuild-install/asset.js
generated
vendored
Normal file
44
node_modules/prebuild-install/asset.js
generated
vendored
Normal file
|
@ -0,0 +1,44 @@
|
|||
const get = require('simple-get')
|
||||
const util = require('./util')
|
||||
const proxy = require('./proxy')
|
||||
|
||||
function findAssetId (opts, cb) {
|
||||
const downloadUrl = util.getDownloadUrl(opts)
|
||||
const apiUrl = util.getApiUrl(opts)
|
||||
const log = opts.log || util.noopLogger
|
||||
|
||||
log.http('request', 'GET ' + apiUrl)
|
||||
const reqOpts = proxy({
|
||||
url: apiUrl,
|
||||
json: true,
|
||||
headers: {
|
||||
'User-Agent': 'simple-get',
|
||||
Authorization: 'token ' + opts.token
|
||||
}
|
||||
}, opts)
|
||||
|
||||
const req = get.concat(reqOpts, function (err, res, data) {
|
||||
if (err) return cb(err)
|
||||
log.http(res.statusCode, apiUrl)
|
||||
if (res.statusCode !== 200) return cb(err)
|
||||
|
||||
// Find asset id in release
|
||||
for (const release of data) {
|
||||
if (release.tag_name === opts['tag-prefix'] + opts.pkg.version) {
|
||||
for (const asset of release.assets) {
|
||||
if (asset.browser_download_url === downloadUrl) {
|
||||
return cb(null, asset.id)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cb(new Error('Could not find GitHub release for version'))
|
||||
})
|
||||
|
||||
req.setTimeout(30 * 1000, function () {
|
||||
req.abort()
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = findAssetId
|
78
node_modules/prebuild-install/bin.js
generated
vendored
Executable file
78
node_modules/prebuild-install/bin.js
generated
vendored
Executable file
|
@ -0,0 +1,78 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
const path = require('path')
|
||||
const fs = require('fs')
|
||||
const napi = require('napi-build-utils')
|
||||
|
||||
const pkg = require(path.resolve('package.json'))
|
||||
const rc = require('./rc')(pkg)
|
||||
const log = require('./log')(rc, process.env)
|
||||
const download = require('./download')
|
||||
const asset = require('./asset')
|
||||
const util = require('./util')
|
||||
|
||||
const prebuildClientVersion = require('./package.json').version
|
||||
if (rc.version) {
|
||||
console.log(prebuildClientVersion)
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
if (rc.path) process.chdir(rc.path)
|
||||
|
||||
if (rc.runtime === 'electron' && rc.target[0] === '4' && rc.abi === '64') {
|
||||
log.error(`Electron version ${rc.target} found - skipping prebuild-install work due to known ABI issue`)
|
||||
log.error('More information about this issue can be found at https://github.com/lgeiger/node-abi/issues/54')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
if (!fs.existsSync('package.json')) {
|
||||
log.error('setup', 'No package.json found. Aborting...')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
if (rc.help) {
|
||||
console.error(fs.readFileSync(path.join(__dirname, 'help.txt'), 'utf-8'))
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
log.info('begin', 'Prebuild-install version', prebuildClientVersion)
|
||||
|
||||
const opts = Object.assign({}, rc, { pkg: pkg, log: log })
|
||||
|
||||
if (napi.isNapiRuntime(rc.runtime)) napi.logUnsupportedVersion(rc.target, log)
|
||||
|
||||
const origin = util.packageOrigin(process.env, pkg)
|
||||
|
||||
if (opts.force) {
|
||||
log.warn('install', 'prebuilt binaries enforced with --force!')
|
||||
log.warn('install', 'prebuilt binaries may be out of date!')
|
||||
} else if (origin && origin.length > 4 && origin.substr(0, 4) === 'git+') {
|
||||
log.info('install', 'installing from git repository, skipping download.')
|
||||
process.exit(1)
|
||||
} else if (opts.buildFromSource) {
|
||||
log.info('install', '--build-from-source specified, not attempting download.')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
const startDownload = function (downloadUrl) {
|
||||
download(downloadUrl, opts, function (err) {
|
||||
if (err) {
|
||||
log.warn('install', err.message)
|
||||
return process.exit(1)
|
||||
}
|
||||
log.info('install', 'Successfully installed prebuilt binary!')
|
||||
})
|
||||
}
|
||||
|
||||
if (opts.token) {
|
||||
asset(opts, function (err, assetId) {
|
||||
if (err) {
|
||||
log.warn('install', err.message)
|
||||
return process.exit(1)
|
||||
}
|
||||
|
||||
startDownload(util.getAssetUrl(opts, assetId))
|
||||
})
|
||||
} else {
|
||||
startDownload(util.getDownloadUrl(opts))
|
||||
}
|
142
node_modules/prebuild-install/download.js
generated
vendored
Normal file
142
node_modules/prebuild-install/download.js
generated
vendored
Normal file
|
@ -0,0 +1,142 @@
|
|||
const path = require('path')
|
||||
const fs = require('fs')
|
||||
const get = require('simple-get')
|
||||
const pump = require('pump')
|
||||
const tfs = require('tar-fs')
|
||||
const zlib = require('zlib')
|
||||
const util = require('./util')
|
||||
const error = require('./error')
|
||||
const proxy = require('./proxy')
|
||||
const mkdirp = require('mkdirp-classic')
|
||||
|
||||
function downloadPrebuild (downloadUrl, opts, cb) {
|
||||
let cachedPrebuild = util.cachedPrebuild(downloadUrl)
|
||||
const localPrebuild = util.localPrebuild(downloadUrl, opts)
|
||||
const tempFile = util.tempFile(cachedPrebuild)
|
||||
const log = opts.log || util.noopLogger
|
||||
|
||||
if (opts.nolocal) return download()
|
||||
|
||||
log.info('looking for local prebuild @', localPrebuild)
|
||||
fs.access(localPrebuild, fs.R_OK | fs.W_OK, function (err) {
|
||||
if (err && err.code === 'ENOENT') {
|
||||
return download()
|
||||
}
|
||||
|
||||
log.info('found local prebuild')
|
||||
cachedPrebuild = localPrebuild
|
||||
unpack()
|
||||
})
|
||||
|
||||
function download () {
|
||||
ensureNpmCacheDir(function (err) {
|
||||
if (err) return onerror(err)
|
||||
|
||||
log.info('looking for cached prebuild @', cachedPrebuild)
|
||||
fs.access(cachedPrebuild, fs.R_OK | fs.W_OK, function (err) {
|
||||
if (!(err && err.code === 'ENOENT')) {
|
||||
log.info('found cached prebuild')
|
||||
return unpack()
|
||||
}
|
||||
|
||||
log.http('request', 'GET ' + downloadUrl)
|
||||
const reqOpts = proxy({ url: downloadUrl }, opts)
|
||||
|
||||
if (opts.token) {
|
||||
reqOpts.headers = {
|
||||
'User-Agent': 'simple-get',
|
||||
Accept: 'application/octet-stream',
|
||||
Authorization: 'token ' + opts.token
|
||||
}
|
||||
}
|
||||
|
||||
const req = get(reqOpts, function (err, res) {
|
||||
if (err) return onerror(err)
|
||||
log.http(res.statusCode, downloadUrl)
|
||||
if (res.statusCode !== 200) return onerror()
|
||||
mkdirp(util.prebuildCache(), function () {
|
||||
log.info('downloading to @', tempFile)
|
||||
pump(res, fs.createWriteStream(tempFile), function (err) {
|
||||
if (err) return onerror(err)
|
||||
fs.rename(tempFile, cachedPrebuild, function (err) {
|
||||
if (err) return cb(err)
|
||||
log.info('renaming to @', cachedPrebuild)
|
||||
unpack()
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
req.setTimeout(30 * 1000, function () {
|
||||
req.abort()
|
||||
})
|
||||
})
|
||||
|
||||
function onerror (err) {
|
||||
fs.unlink(tempFile, function () {
|
||||
cb(err || error.noPrebuilts(opts))
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function unpack () {
|
||||
let binaryName
|
||||
|
||||
const updateName = opts.updateName || function (entry) {
|
||||
if (/\.node$/i.test(entry.name)) binaryName = entry.name
|
||||
}
|
||||
|
||||
log.info('unpacking @', cachedPrebuild)
|
||||
|
||||
const options = {
|
||||
readable: true,
|
||||
writable: true,
|
||||
hardlinkAsFilesFallback: true
|
||||
}
|
||||
const extract = tfs.extract(opts.path, options).on('entry', updateName)
|
||||
|
||||
pump(fs.createReadStream(cachedPrebuild), zlib.createGunzip(), extract,
|
||||
function (err) {
|
||||
if (err) return cb(err)
|
||||
|
||||
let resolved
|
||||
if (binaryName) {
|
||||
try {
|
||||
resolved = path.resolve(opts.path || '.', binaryName)
|
||||
} catch (err) {
|
||||
return cb(err)
|
||||
}
|
||||
log.info('unpack', 'resolved to ' + resolved)
|
||||
|
||||
if (opts.runtime === 'node' && opts.platform === process.platform && opts.abi === process.versions.modules && opts.arch === process.arch) {
|
||||
try {
|
||||
require(resolved)
|
||||
} catch (err) {
|
||||
return cb(err)
|
||||
}
|
||||
log.info('unpack', 'required ' + resolved + ' successfully')
|
||||
}
|
||||
}
|
||||
|
||||
cb(null, resolved)
|
||||
})
|
||||
}
|
||||
|
||||
function ensureNpmCacheDir (cb) {
|
||||
const cacheFolder = util.npmCache()
|
||||
fs.access(cacheFolder, fs.R_OK | fs.W_OK, function (err) {
|
||||
if (err && err.code === 'ENOENT') {
|
||||
return makeNpmCacheDir()
|
||||
}
|
||||
cb(err)
|
||||
})
|
||||
|
||||
function makeNpmCacheDir () {
|
||||
log.info('npm cache directory missing, creating it...')
|
||||
mkdirp(cacheFolder, cb)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = downloadPrebuild
|
14
node_modules/prebuild-install/error.js
generated
vendored
Normal file
14
node_modules/prebuild-install/error.js
generated
vendored
Normal file
|
@ -0,0 +1,14 @@
|
|||
exports.noPrebuilts = function (opts) {
|
||||
return new Error([
|
||||
'No prebuilt binaries found',
|
||||
'(target=' + opts.target,
|
||||
'runtime=' + opts.runtime,
|
||||
'arch=' + opts.arch,
|
||||
'libc=' + opts.libc,
|
||||
'platform=' + opts.platform + ')'
|
||||
].join(' '))
|
||||
}
|
||||
|
||||
exports.invalidArchive = function () {
|
||||
return new Error('Missing .node file in archive')
|
||||
}
|
16
node_modules/prebuild-install/help.txt
generated
vendored
Normal file
16
node_modules/prebuild-install/help.txt
generated
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
prebuild-install [options]
|
||||
|
||||
--download -d [url] (download prebuilds, no url means github)
|
||||
--target -t version (version to install for)
|
||||
--runtime -r runtime (Node runtime [node or electron] to build or install for, default is node)
|
||||
--path -p path (make a prebuild-install here)
|
||||
--token -T gh-token (github token for private repos)
|
||||
--arch arch (target CPU architecture, see Node OS module docs, default is current arch)
|
||||
--platform platform (target platform, see Node OS module docs, default is current platform)
|
||||
--tag-prefix <prefix> (github tag prefix, default is "v")
|
||||
--force (always use prebuilt binaries when available)
|
||||
--build-from-source (skip prebuild download)
|
||||
--verbose (log verbosely)
|
||||
--libc (use provided libc rather than system default)
|
||||
--debug (set Debug or Release configuration)
|
||||
--version (print prebuild-install version and exit)
|
1
node_modules/prebuild-install/index.js
generated
vendored
Normal file
1
node_modules/prebuild-install/index.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
exports.download = require('./download')
|
33
node_modules/prebuild-install/log.js
generated
vendored
Normal file
33
node_modules/prebuild-install/log.js
generated
vendored
Normal file
|
@ -0,0 +1,33 @@
|
|||
const levels = {
|
||||
silent: 0,
|
||||
error: 1,
|
||||
warn: 2,
|
||||
notice: 3,
|
||||
http: 4,
|
||||
timing: 5,
|
||||
info: 6,
|
||||
verbose: 7,
|
||||
silly: 8
|
||||
}
|
||||
|
||||
module.exports = function (rc, env) {
|
||||
const level = rc.verbose
|
||||
? 'verbose'
|
||||
: env.npm_config_loglevel || 'notice'
|
||||
|
||||
const logAtLevel = function (messageLevel) {
|
||||
return function (...args) {
|
||||
if (levels[messageLevel] <= levels[level]) {
|
||||
console.error(`prebuild-install ${messageLevel} ${args.join(' ')}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
error: logAtLevel('error'),
|
||||
warn: logAtLevel('warn'),
|
||||
http: logAtLevel('http'),
|
||||
info: logAtLevel('info'),
|
||||
level
|
||||
}
|
||||
}
|
67
node_modules/prebuild-install/package.json
generated
vendored
Normal file
67
node_modules/prebuild-install/package.json
generated
vendored
Normal file
|
@ -0,0 +1,67 @@
|
|||
{
|
||||
"name": "prebuild-install",
|
||||
"version": "7.1.1",
|
||||
"description": "A command line tool to easily install prebuilt binaries for multiple version of node/iojs on a specific platform",
|
||||
"scripts": {
|
||||
"test": "standard && hallmark && tape test/*-test.js",
|
||||
"hallmark": "hallmark --fix"
|
||||
},
|
||||
"keywords": [
|
||||
"prebuilt",
|
||||
"binaries",
|
||||
"native",
|
||||
"addon",
|
||||
"module",
|
||||
"c",
|
||||
"c++",
|
||||
"bindings",
|
||||
"devops",
|
||||
"napi"
|
||||
],
|
||||
"dependencies": {
|
||||
"detect-libc": "^2.0.0",
|
||||
"expand-template": "^2.0.3",
|
||||
"github-from-package": "0.0.0",
|
||||
"minimist": "^1.2.3",
|
||||
"mkdirp-classic": "^0.5.3",
|
||||
"napi-build-utils": "^1.0.1",
|
||||
"node-abi": "^3.3.0",
|
||||
"pump": "^3.0.0",
|
||||
"rc": "^1.2.7",
|
||||
"simple-get": "^4.0.0",
|
||||
"tar-fs": "^2.0.0",
|
||||
"tunnel-agent": "^0.6.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"a-native-module": "^1.0.0",
|
||||
"hallmark": "^4.0.0",
|
||||
"nock": "^10.0.6",
|
||||
"rimraf": "^2.5.2",
|
||||
"standard": "^16.0.4",
|
||||
"tape": "^5.3.1",
|
||||
"tempy": "0.2.1"
|
||||
},
|
||||
"bin": "./bin.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/prebuild/prebuild-install.git"
|
||||
},
|
||||
"author": "Mathias Buus (@mafintosh)",
|
||||
"contributors": [
|
||||
"Julian Gruber <julian@juliangruber.com> (https://github.com/juliangruber)",
|
||||
"Brett Lawson <brett19@gmail.com> (https://github.com/brett19)",
|
||||
"Pieter Hintjens <ph@imatix.com> (https://github.com/hintjens)",
|
||||
"Lars-Magnus Skog <ralphtheninja@riseup.net> (https://github.com/ralphtheninja)",
|
||||
"Jesús Leganés Combarro <piranna@gmail.com> (https://github.com/piranna)",
|
||||
"Mathias Küsel <mathiask@hotmail.de> (https://github.com/mathiask88)",
|
||||
"Lukas Geiger <lukas.geiger94@gmail.com> (https://github.com/lgeiger)"
|
||||
],
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/prebuild/prebuild-install/issues"
|
||||
},
|
||||
"homepage": "https://github.com/prebuild/prebuild-install",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
}
|
35
node_modules/prebuild-install/proxy.js
generated
vendored
Normal file
35
node_modules/prebuild-install/proxy.js
generated
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
const url = require('url')
|
||||
const tunnel = require('tunnel-agent')
|
||||
const util = require('./util')
|
||||
|
||||
function applyProxy (reqOpts, opts) {
|
||||
const log = opts.log || util.noopLogger
|
||||
|
||||
const proxy = opts['https-proxy'] || opts.proxy
|
||||
|
||||
if (proxy) {
|
||||
// eslint-disable-next-line node/no-deprecated-api
|
||||
const parsedDownloadUrl = url.parse(reqOpts.url)
|
||||
// eslint-disable-next-line node/no-deprecated-api
|
||||
const parsedProxy = url.parse(proxy)
|
||||
const uriProtocol = (parsedDownloadUrl.protocol === 'https:' ? 'https' : 'http')
|
||||
const proxyProtocol = (parsedProxy.protocol === 'https:' ? 'Https' : 'Http')
|
||||
const tunnelFnName = [uriProtocol, proxyProtocol].join('Over')
|
||||
reqOpts.agent = tunnel[tunnelFnName]({
|
||||
proxy: {
|
||||
host: parsedProxy.hostname,
|
||||
port: +parsedProxy.port,
|
||||
proxyAuth: parsedProxy.auth
|
||||
}
|
||||
})
|
||||
log.http('request', 'Proxy setup detected (Host: ' +
|
||||
parsedProxy.hostname + ', Port: ' +
|
||||
parsedProxy.port + ', Authentication: ' +
|
||||
(parsedProxy.auth ? 'Yes' : 'No') + ')' +
|
||||
' Tunneling with ' + tunnelFnName)
|
||||
}
|
||||
|
||||
return reqOpts
|
||||
}
|
||||
|
||||
module.exports = applyProxy
|
64
node_modules/prebuild-install/rc.js
generated
vendored
Normal file
64
node_modules/prebuild-install/rc.js
generated
vendored
Normal file
|
@ -0,0 +1,64 @@
|
|||
const path = require('path')
|
||||
const minimist = require('minimist')
|
||||
const getAbi = require('node-abi').getAbi
|
||||
const detectLibc = require('detect-libc')
|
||||
const napi = require('napi-build-utils')
|
||||
|
||||
const env = process.env
|
||||
|
||||
const libc = env.LIBC || process.env.npm_config_libc ||
|
||||
(detectLibc.isNonGlibcLinuxSync() && detectLibc.familySync()) || ''
|
||||
|
||||
// Get the configuration
|
||||
module.exports = function (pkg) {
|
||||
const pkgConf = pkg.config || {}
|
||||
const buildFromSource = env.npm_config_build_from_source
|
||||
|
||||
const rc = require('rc')('prebuild-install', {
|
||||
target: pkgConf.target || env.npm_config_target || process.versions.node,
|
||||
runtime: pkgConf.runtime || env.npm_config_runtime || 'node',
|
||||
arch: pkgConf.arch || env.npm_config_arch || process.arch,
|
||||
libc: libc,
|
||||
platform: env.npm_config_platform || process.platform,
|
||||
debug: env.npm_config_debug === 'true',
|
||||
force: false,
|
||||
verbose: env.npm_config_verbose === 'true',
|
||||
buildFromSource: buildFromSource === pkg.name || buildFromSource === 'true',
|
||||
path: '.',
|
||||
proxy: env.npm_config_proxy || env.http_proxy || env.HTTP_PROXY,
|
||||
'https-proxy': env.npm_config_https_proxy || env.https_proxy || env.HTTPS_PROXY,
|
||||
'local-address': env.npm_config_local_address,
|
||||
'local-prebuilds': 'prebuilds',
|
||||
'tag-prefix': 'v',
|
||||
download: env.npm_config_download
|
||||
}, minimist(process.argv, {
|
||||
alias: {
|
||||
target: 't',
|
||||
runtime: 'r',
|
||||
help: 'h',
|
||||
arch: 'a',
|
||||
path: 'p',
|
||||
version: 'v',
|
||||
download: 'd',
|
||||
buildFromSource: 'build-from-source',
|
||||
token: 'T'
|
||||
}
|
||||
}))
|
||||
|
||||
rc.path = path.resolve(rc.path === true ? '.' : rc.path || '.')
|
||||
|
||||
if (napi.isNapiRuntime(rc.runtime) && rc.target === process.versions.node) {
|
||||
rc.target = napi.getBestNapiBuildVersion()
|
||||
}
|
||||
|
||||
rc.abi = napi.isNapiRuntime(rc.runtime) ? rc.target : getAbi(rc.target, rc.runtime)
|
||||
|
||||
rc.libc = rc.platform !== 'linux' || rc.libc === detectLibc.GLIBC ? '' : rc.libc
|
||||
|
||||
return rc
|
||||
}
|
||||
|
||||
// Print the configuration values when executed standalone for testing purposses
|
||||
if (!module.parent) {
|
||||
console.log(JSON.stringify(module.exports({}), null, 2))
|
||||
}
|
143
node_modules/prebuild-install/util.js
generated
vendored
Normal file
143
node_modules/prebuild-install/util.js
generated
vendored
Normal file
|
@ -0,0 +1,143 @@
|
|||
const path = require('path')
|
||||
const github = require('github-from-package')
|
||||
const home = require('os').homedir
|
||||
const crypto = require('crypto')
|
||||
const expandTemplate = require('expand-template')()
|
||||
|
||||
function getDownloadUrl (opts) {
|
||||
const pkgName = opts.pkg.name.replace(/^@[a-zA-Z0-9_\-.~]+\//, '')
|
||||
return expandTemplate(urlTemplate(opts), {
|
||||
name: pkgName,
|
||||
package_name: pkgName,
|
||||
version: opts.pkg.version,
|
||||
major: opts.pkg.version.split('.')[0],
|
||||
minor: opts.pkg.version.split('.')[1],
|
||||
patch: opts.pkg.version.split('.')[2],
|
||||
prerelease: opts.pkg.version.split('-')[1],
|
||||
build: opts.pkg.version.split('+')[1],
|
||||
abi: opts.abi || process.versions.modules,
|
||||
node_abi: process.versions.modules,
|
||||
runtime: opts.runtime || 'node',
|
||||
platform: opts.platform,
|
||||
arch: opts.arch,
|
||||
libc: opts.libc || '',
|
||||
configuration: (opts.debug ? 'Debug' : 'Release'),
|
||||
module_name: opts.pkg.binary && opts.pkg.binary.module_name,
|
||||
tag_prefix: opts['tag-prefix']
|
||||
})
|
||||
}
|
||||
|
||||
function getApiUrl (opts) {
|
||||
return github(opts.pkg).replace('github.com', 'api.github.com/repos') + '/releases'
|
||||
}
|
||||
|
||||
function getAssetUrl (opts, assetId) {
|
||||
return getApiUrl(opts) + '/assets/' + assetId
|
||||
}
|
||||
|
||||
function urlTemplate (opts) {
|
||||
if (typeof opts.download === 'string') {
|
||||
return opts.download
|
||||
}
|
||||
|
||||
const packageName = '{name}-v{version}-{runtime}-v{abi}-{platform}{libc}-{arch}.tar.gz'
|
||||
const hostMirrorUrl = getHostMirrorUrl(opts)
|
||||
|
||||
if (hostMirrorUrl) {
|
||||
return hostMirrorUrl + '/{tag_prefix}{version}/' + packageName
|
||||
}
|
||||
|
||||
if (opts.pkg.binary && opts.pkg.binary.host) {
|
||||
return [
|
||||
opts.pkg.binary.host,
|
||||
opts.pkg.binary.remote_path,
|
||||
opts.pkg.binary.package_name || packageName
|
||||
].map(function (path) {
|
||||
return trimSlashes(path)
|
||||
}).filter(Boolean).join('/')
|
||||
}
|
||||
|
||||
return github(opts.pkg) + '/releases/download/{tag_prefix}{version}/' + packageName
|
||||
}
|
||||
|
||||
function getEnvPrefix (pkgName) {
|
||||
return 'npm_config_' + (pkgName || '').replace(/[^a-zA-Z0-9]/g, '_').replace(/^_/, '')
|
||||
}
|
||||
|
||||
function getHostMirrorUrl (opts) {
|
||||
const propName = getEnvPrefix(opts.pkg.name) + '_binary_host'
|
||||
return process.env[propName] || process.env[propName + '_mirror']
|
||||
}
|
||||
|
||||
function trimSlashes (str) {
|
||||
if (str) return str.replace(/^\.\/|^\/|\/$/g, '')
|
||||
}
|
||||
|
||||
function cachedPrebuild (url) {
|
||||
const digest = crypto.createHash('md5').update(url).digest('hex').slice(0, 6)
|
||||
return path.join(prebuildCache(), digest + '-' + path.basename(url).replace(/[^a-zA-Z0-9.]+/g, '-'))
|
||||
}
|
||||
|
||||
function npmCache () {
|
||||
const env = process.env
|
||||
return env.npm_config_cache || (env.APPDATA ? path.join(env.APPDATA, 'npm-cache') : path.join(home(), '.npm'))
|
||||
}
|
||||
|
||||
function prebuildCache () {
|
||||
return path.join(npmCache(), '_prebuilds')
|
||||
}
|
||||
|
||||
function tempFile (cached) {
|
||||
return cached + '.' + process.pid + '-' + Math.random().toString(16).slice(2) + '.tmp'
|
||||
}
|
||||
|
||||
function packageOrigin (env, pkg) {
|
||||
// npm <= 6: metadata is stored on disk in node_modules
|
||||
if (pkg._from) {
|
||||
return pkg._from
|
||||
}
|
||||
|
||||
// npm 7: metadata is exposed to environment by arborist
|
||||
if (env.npm_package_from) {
|
||||
// NOTE: seems undefined atm (npm 7.0.2)
|
||||
return env.npm_package_from
|
||||
}
|
||||
|
||||
if (env.npm_package_resolved) {
|
||||
// NOTE: not sure about the difference with _from, but it's all we have
|
||||
return env.npm_package_resolved
|
||||
}
|
||||
}
|
||||
|
||||
function localPrebuild (url, opts) {
|
||||
const propName = getEnvPrefix(opts.pkg.name) + '_local_prebuilds'
|
||||
const prefix = process.env[propName] || opts['local-prebuilds'] || 'prebuilds'
|
||||
return path.join(prefix, path.basename(url))
|
||||
}
|
||||
|
||||
const noopLogger = {
|
||||
http: function () {},
|
||||
silly: function () {},
|
||||
debug: function () {},
|
||||
info: function () {},
|
||||
warn: function () {},
|
||||
error: function () {},
|
||||
critical: function () {},
|
||||
alert: function () {},
|
||||
emergency: function () {},
|
||||
notice: function () {},
|
||||
verbose: function () {},
|
||||
fatal: function () {}
|
||||
}
|
||||
|
||||
exports.getDownloadUrl = getDownloadUrl
|
||||
exports.getApiUrl = getApiUrl
|
||||
exports.getAssetUrl = getAssetUrl
|
||||
exports.urlTemplate = urlTemplate
|
||||
exports.cachedPrebuild = cachedPrebuild
|
||||
exports.localPrebuild = localPrebuild
|
||||
exports.prebuildCache = prebuildCache
|
||||
exports.npmCache = npmCache
|
||||
exports.tempFile = tempFile
|
||||
exports.packageOrigin = packageOrigin
|
||||
exports.noopLogger = noopLogger
|
Loading…
Add table
Add a link
Reference in a new issue