pkg-fetch: migrate to TypeScript (#139)
This commit is contained in:
parent
f7a75173f9
commit
6dd43cfafd
30
.eslintrc
30
.eslintrc
@ -1,13 +1,20 @@
|
||||
{
|
||||
"extends": ["airbnb-base", "prettier"],
|
||||
"parser": "@babel/eslint-parser",
|
||||
"parserOptions": {
|
||||
"sourceType": "module"
|
||||
"extends": [
|
||||
"airbnb-base",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"prettier"
|
||||
],
|
||||
"parser": "@typescript-eslint/parser",
|
||||
"settings": {
|
||||
"import/resolver": {
|
||||
"typescript": {}
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
"wrap-iife": "off",
|
||||
"max-classes-per-file": "off",
|
||||
"no-bitwise": "off",
|
||||
"no-continue": "off",
|
||||
"no-nested-ternary": "off",
|
||||
"class-methods-use-this": "off",
|
||||
"no-await-in-loop": "off",
|
||||
"no-constant-condition": "off",
|
||||
@ -15,6 +22,17 @@
|
||||
"consistent-return": "off",
|
||||
"no-restricted-syntax": "off",
|
||||
"import/prefer-default-export": "off",
|
||||
"camelcase": "off"
|
||||
"camelcase": "off",
|
||||
"@typescript-eslint/explicit-module-boundary-types": "off",
|
||||
"import/extensions": [
|
||||
"error",
|
||||
"ignorePackages",
|
||||
{
|
||||
"js": "never",
|
||||
"jsx": "never",
|
||||
"ts": "never",
|
||||
"tsx": "never"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@ -6,3 +6,4 @@
|
||||
|
||||
# logs
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
@ -8,8 +8,10 @@ import { log } from './log';
|
||||
import patchesJson from '../patches/patches.json';
|
||||
import { tempPath } from './temp-path';
|
||||
import thresholds from './thresholds';
|
||||
import { getMajor } from './get-major';
|
||||
|
||||
let buildPath: string;
|
||||
|
||||
let buildPath;
|
||||
if (process.env.GITHUB_USERNAME) {
|
||||
buildPath = path.join(__dirname, '..', 'precompile');
|
||||
} else {
|
||||
@ -20,8 +22,9 @@ const nodePath = path.join(buildPath, 'node');
|
||||
const patchesPath = path.resolve(__dirname, '../patches');
|
||||
const nodeRepo = 'https://github.com/nodejs/node';
|
||||
|
||||
async function gitClone(nodeVersion) {
|
||||
async function gitClone(nodeVersion: string) {
|
||||
log.info('Cloning Node.js repository from GitHub...');
|
||||
|
||||
const args = [
|
||||
'clone',
|
||||
'-b',
|
||||
@ -36,22 +39,38 @@ async function gitClone(nodeVersion) {
|
||||
];
|
||||
const promise = spawn('git', args, { cwd: buildPath });
|
||||
progress(promise, thresholds('clone'));
|
||||
|
||||
await promise;
|
||||
}
|
||||
|
||||
async function gitResetHard(nodeVersion) {
|
||||
async function gitResetHard(nodeVersion: string) {
|
||||
log.info(`Checking out ${nodeVersion}`);
|
||||
const patches = patchesJson[nodeVersion];
|
||||
const commit = patches.commit || nodeVersion;
|
||||
|
||||
const patches = patchesJson[nodeVersion as keyof typeof patchesJson] as
|
||||
| string[]
|
||||
| { commit?: string };
|
||||
|
||||
const commit =
|
||||
'commit' in patches && patches.commit ? patches.commit : nodeVersion;
|
||||
const args = ['--work-tree', '.', 'reset', '--hard', commit];
|
||||
|
||||
await spawn('git', args, { cwd: nodePath });
|
||||
}
|
||||
|
||||
async function applyPatches(nodeVersion) {
|
||||
async function applyPatches(nodeVersion: string) {
|
||||
log.info('Applying patches');
|
||||
let patches = patchesJson[nodeVersion];
|
||||
patches = patches.patches || patches;
|
||||
if (patches.sameAs) patches = patchesJson[patches.sameAs];
|
||||
|
||||
const storedPatches = patchesJson[nodeVersion as keyof typeof patchesJson] as
|
||||
| string[]
|
||||
| { patches: string[] }
|
||||
| { sameAs: string };
|
||||
const storedPatch =
|
||||
'patches' in storedPatches ? storedPatches.patches : storedPatches;
|
||||
const patches =
|
||||
'sameAs' in storedPatch
|
||||
? patchesJson[storedPatch.sameAs as keyof typeof patchesJson]
|
||||
: storedPatch;
|
||||
|
||||
for (const patch of patches) {
|
||||
const patchPath = path.join(patchesPath, patch);
|
||||
const args = ['-p1', '-i', patchPath];
|
||||
@ -59,21 +78,29 @@ async function applyPatches(nodeVersion) {
|
||||
}
|
||||
}
|
||||
|
||||
async function compileOnWindows(nodeVersion, targetArch) {
|
||||
async function compileOnWindows(nodeVersion: string, targetArch: string) {
|
||||
const args = [];
|
||||
args.push('/c', 'vcbuild.bat', targetArch, 'noetw');
|
||||
const major = nodeVersion.match(/^v?(\d+)/)[1] | 0;
|
||||
if (major <= 10) args.push('nosign', 'noperfctr');
|
||||
const major = getMajor(nodeVersion);
|
||||
|
||||
if (major <= 10) {
|
||||
args.push('nosign', 'noperfctr');
|
||||
}
|
||||
|
||||
const promise = spawn('cmd', args, { cwd: nodePath });
|
||||
progress(promise, thresholds('vcbuild', nodeVersion));
|
||||
await promise;
|
||||
if (major <= 10) return path.join(nodePath, 'Release/node.exe');
|
||||
|
||||
if (major <= 10) {
|
||||
return path.join(nodePath, 'Release/node.exe');
|
||||
}
|
||||
|
||||
return path.join(nodePath, 'out/Release/node.exe');
|
||||
}
|
||||
|
||||
const { MAKE_JOB_COUNT = os.cpus().length } = process.env;
|
||||
|
||||
async function compileOnUnix(nodeVersion, targetArch) {
|
||||
async function compileOnUnix(nodeVersion: string, targetArch: string) {
|
||||
const args = [];
|
||||
const cpu = {
|
||||
x86: 'ia32',
|
||||
@ -84,36 +111,61 @@ async function compileOnUnix(nodeVersion, targetArch) {
|
||||
ppc64: 'ppc64',
|
||||
s390x: 's390x',
|
||||
}[targetArch];
|
||||
args.push('--dest-cpu', cpu);
|
||||
|
||||
if (cpu) {
|
||||
args.push('--dest-cpu', cpu);
|
||||
}
|
||||
|
||||
// first of all v8_inspector introduces the use
|
||||
// of `prime_rehash_policy` symbol that requires
|
||||
// GLIBCXX_3.4.18 on some systems
|
||||
// also we don't support any kind of debugging
|
||||
// against packaged apps, hence v8_inspector is useless
|
||||
const major = nodeVersion.match(/^v?(\d+)/)[1] | 0;
|
||||
if (major >= 6) args.push('--without-inspector');
|
||||
const major = getMajor(nodeVersion);
|
||||
|
||||
if (major >= 6) {
|
||||
args.push('--without-inspector');
|
||||
}
|
||||
|
||||
// https://github.com/mhart/alpine-node/blob/base-7.4.0/Dockerfile#L33
|
||||
if (hostPlatform === 'alpine') args.push('--without-snapshot');
|
||||
if (hostPlatform === 'alpine') {
|
||||
args.push('--without-snapshot');
|
||||
}
|
||||
|
||||
// TODO same for windows?
|
||||
await spawn('./configure', args, { cwd: nodePath });
|
||||
const make = hostPlatform === 'freebsd' ? 'gmake' : 'make';
|
||||
const promise = spawn(make, ['-j', MAKE_JOB_COUNT], { cwd: nodePath });
|
||||
const promise = spawn(make, ['-j', String(MAKE_JOB_COUNT)], {
|
||||
cwd: nodePath,
|
||||
});
|
||||
progress(promise, thresholds('make', nodeVersion));
|
||||
await promise;
|
||||
const output = path.join(nodePath, 'out/Release/node');
|
||||
|
||||
// https://github.com/mhart/alpine-node/blob/base-7.4.0/Dockerfile#L36
|
||||
if (hostPlatform === 'alpine') await spawn('paxctl', ['-cm', output]);
|
||||
if (hostPlatform === 'alpine') {
|
||||
await spawn('paxctl', ['-cm', output]);
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
async function compile(nodeVersion, targetArch) {
|
||||
async function compile(nodeVersion: string, targetArch: string) {
|
||||
log.info('Compiling Node.js from sources...');
|
||||
const win = hostPlatform === 'win';
|
||||
if (win) return compileOnWindows(nodeVersion, targetArch);
|
||||
|
||||
if (win) {
|
||||
return compileOnWindows(nodeVersion, targetArch);
|
||||
}
|
||||
|
||||
return compileOnUnix(nodeVersion, targetArch);
|
||||
}
|
||||
|
||||
export default async function build(nodeVersion, targetArch, local) {
|
||||
export default async function build(
|
||||
nodeVersion: string,
|
||||
targetArch: string,
|
||||
local: string
|
||||
) {
|
||||
await remove(buildPath);
|
||||
await mkdirp(buildPath);
|
||||
await gitClone(nodeVersion);
|
||||
@ -1,6 +1,6 @@
|
||||
import { chmod, stat } from 'fs-extra';
|
||||
|
||||
export async function plusx(file) {
|
||||
export async function plusx(file: string) {
|
||||
const s = await stat(file);
|
||||
const newMode = s.mode | 64 | 8 | 1;
|
||||
if (s.mode === newMode) return;
|
||||
@ -6,80 +6,118 @@ import path from 'path';
|
||||
import { GitHub } from './github';
|
||||
import { moveFile } from './copy-file';
|
||||
|
||||
function uniqueName(name, names) {
|
||||
if (names.indexOf(name) < 0) return name;
|
||||
function uniqueName(name: string, names: string[]) {
|
||||
if (names.indexOf(name) < 0) {
|
||||
return name;
|
||||
}
|
||||
|
||||
let newName;
|
||||
let counter = 0;
|
||||
|
||||
while (true) {
|
||||
newName = `${name}-new-${counter}`;
|
||||
if (names.indexOf(newName) < 0) return newName;
|
||||
|
||||
if (names.indexOf(newName) < 0) {
|
||||
return newName;
|
||||
}
|
||||
|
||||
counter += 1;
|
||||
}
|
||||
}
|
||||
|
||||
interface Remote {
|
||||
tag: string;
|
||||
name: string;
|
||||
}
|
||||
|
||||
interface CloudOptions {
|
||||
owner: string;
|
||||
repo: string;
|
||||
}
|
||||
|
||||
interface NodeCompilation {
|
||||
local: string;
|
||||
remote: Remote;
|
||||
}
|
||||
|
||||
export class Cloud {
|
||||
constructor({ owner, repo }) {
|
||||
private gh: GitHub;
|
||||
|
||||
constructor({ owner, repo }: CloudOptions) {
|
||||
this.gh = new GitHub({ owner, repo });
|
||||
}
|
||||
|
||||
async _findRelease(tag) {
|
||||
private async findRelease(tag: string) {
|
||||
let release = await this.gh.getRelease(tag);
|
||||
|
||||
if (!release) release = await this.gh.getReleaseDraft(tag);
|
||||
if (!release) release = await this.gh.createRelease(tag);
|
||||
|
||||
return release;
|
||||
}
|
||||
|
||||
async alreadyUploaded(remote) {
|
||||
const release = await this._findRelease(remote.tag);
|
||||
async alreadyUploaded(remote: Remote) {
|
||||
const release = await this.findRelease(remote.tag);
|
||||
|
||||
return release.assets.some(({ name }) => {
|
||||
assert(name);
|
||||
return remote.name === name;
|
||||
});
|
||||
}
|
||||
|
||||
async upload(local, remote) {
|
||||
const release = await this._findRelease(remote.tag);
|
||||
async upload(local: string, remote: Remote) {
|
||||
const release = await this.findRelease(remote.tag);
|
||||
const names = release.assets.map(({ name }) => {
|
||||
assert(name);
|
||||
return name;
|
||||
});
|
||||
const name = uniqueName(remote.name, names);
|
||||
|
||||
await this.gh.uploadAsset(local, release, name);
|
||||
}
|
||||
|
||||
async uploadMany(items) {
|
||||
async uploadMany(items: NodeCompilation[]) {
|
||||
for (const item of items) {
|
||||
const { local, remote } = item;
|
||||
await this.upload(local, remote);
|
||||
}
|
||||
}
|
||||
|
||||
async download(remote, local) {
|
||||
async download(remote: Remote, local: string) {
|
||||
const { tag } = remote;
|
||||
const tempFile = `${local}.downloading`;
|
||||
await mkdirp(path.dirname(tempFile));
|
||||
const short = path.basename(local);
|
||||
const ok = await this.gh.tryDirectly(tag, remote.name, tempFile, short);
|
||||
|
||||
if (!ok) {
|
||||
let release = await this.gh.getRelease(tag);
|
||||
|
||||
if (!release) release = await this.gh.getReleaseDraft(tag);
|
||||
if (!release) return false;
|
||||
|
||||
const assets = release.assets.filter(({ name }) => {
|
||||
assert(name);
|
||||
return name === remote.name;
|
||||
});
|
||||
if (!assets.length) return false;
|
||||
|
||||
if (!assets.length) {
|
||||
return false;
|
||||
}
|
||||
|
||||
assert(assets.length === 1);
|
||||
const asset = assets[0];
|
||||
await this.gh.downloadUrl(asset.url, tempFile, short);
|
||||
}
|
||||
|
||||
await remove(local);
|
||||
await moveFile(tempFile, local);
|
||||
await remove(tempFile);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
async downloadMany(items) {
|
||||
async downloadMany(items: NodeCompilation[]) {
|
||||
for (const item of items) {
|
||||
const { remote, local } = item;
|
||||
await this.download(remote, local);
|
||||
@ -1,9 +0,0 @@
|
||||
import fs from 'fs-extra';
|
||||
|
||||
export function copyFile(src, dest) {
|
||||
return fs.copy(src, dest);
|
||||
}
|
||||
|
||||
export function moveFile(src, dest) {
|
||||
return fs.move(src, dest);
|
||||
}
|
||||
9
lib/copy-file.ts
Normal file
9
lib/copy-file.ts
Normal file
@ -0,0 +1,9 @@
|
||||
import fs from 'fs-extra';
|
||||
|
||||
export function copyFile(src: string, dest: string) {
|
||||
return fs.copy(src, dest);
|
||||
}
|
||||
|
||||
export function moveFile(src: string, dest: string) {
|
||||
return fs.move(src, dest);
|
||||
}
|
||||
4
lib/get-major.ts
Normal file
4
lib/get-major.ts
Normal file
@ -0,0 +1,4 @@
|
||||
export function getMajor(nodeVersion: string) {
|
||||
const [, version] = nodeVersion.match(/^v?(\d+)/) || ['', 0];
|
||||
return Number(version) | 0;
|
||||
}
|
||||
@ -1,17 +1,37 @@
|
||||
/* eslint-disable camelcase */
|
||||
|
||||
import { RestEndpointMethodTypes } from '@octokit/plugin-rest-endpoint-methods';
|
||||
import assert from 'assert';
|
||||
import fs from 'fs';
|
||||
import progress from 'request-progress';
|
||||
import request from 'request';
|
||||
import { log, wasReported } from './log';
|
||||
|
||||
type GithubRelease = RestEndpointMethodTypes['repos']['getRelease']['response']['data'];
|
||||
|
||||
interface GitHubOptions {
|
||||
owner: string;
|
||||
repo: string;
|
||||
}
|
||||
|
||||
export class GitHub {
|
||||
constructor({ owner, repo }) {
|
||||
private owner: string;
|
||||
|
||||
private repo: string;
|
||||
|
||||
private request: request.RequestAPI<
|
||||
request.Request,
|
||||
request.CoreOptions,
|
||||
request.RequiredUriUrl
|
||||
>;
|
||||
|
||||
constructor({ owner, repo }: GitHubOptions) {
|
||||
this.owner = owner;
|
||||
this.repo = repo;
|
||||
|
||||
const { GITHUB_USERNAME, GITHUB_PASSWORD } = process.env;
|
||||
const auth = { user: GITHUB_USERNAME, pass: GITHUB_PASSWORD };
|
||||
|
||||
this.request = request.defaults({
|
||||
auth: auth.user ? auth : undefined,
|
||||
headers: {
|
||||
@ -21,41 +41,66 @@ export class GitHub {
|
||||
});
|
||||
}
|
||||
|
||||
getRelease(tag) {
|
||||
return new Promise((resolve, reject) => {
|
||||
getRelease(tag: string) {
|
||||
return new Promise<GithubRelease | undefined>((resolve, reject) => {
|
||||
const url = `https://api.github.com/repos/${this.owner}/${this.repo}/releases/tags/${tag}`;
|
||||
this.request(url, (error, response, body) => {
|
||||
if (error) return reject(wasReported(error.message));
|
||||
|
||||
this.request(url, (error, _, body) => {
|
||||
if (error) {
|
||||
return reject(wasReported(error.message));
|
||||
}
|
||||
|
||||
const release = JSON.parse(body);
|
||||
const { message } = release;
|
||||
if (message === 'Not Found') return resolve(undefined);
|
||||
if (message) return reject(wasReported(message));
|
||||
|
||||
if (message === 'Not Found') {
|
||||
return resolve(undefined);
|
||||
}
|
||||
|
||||
if (message) {
|
||||
return reject(wasReported(message));
|
||||
}
|
||||
|
||||
resolve(release);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
getReleaseDraft(tag) {
|
||||
return new Promise((resolve, reject) => {
|
||||
getReleaseDraft(tag: string) {
|
||||
return new Promise<GithubRelease | undefined>((resolve, reject) => {
|
||||
const url = `https://api.github.com/repos/${this.owner}/${this.repo}/releases`;
|
||||
this.request(url, (error, response, body) => {
|
||||
if (error) return reject(wasReported(error.message));
|
||||
|
||||
this.request(url, (error, _, body) => {
|
||||
if (error) {
|
||||
return reject(wasReported(error.message));
|
||||
}
|
||||
|
||||
// here we use `get release by tag` endpoint
|
||||
// because draft releases are really `untagged`.
|
||||
// seems that `get release by tag` is for non-drafts.
|
||||
// hence listing all releases and looking through them
|
||||
const releases = JSON.parse(body);
|
||||
if (releases.message) return reject(wasReported(releases.message));
|
||||
const releases = JSON.parse(body) as
|
||||
| GithubRelease[]
|
||||
| { message: string };
|
||||
|
||||
if ('message' in releases) {
|
||||
return reject(wasReported(releases.message));
|
||||
}
|
||||
|
||||
const found = releases.filter(({ tag_name }) => tag_name === tag); // eslint-disable-line camelcase
|
||||
assert(found.length <= 1);
|
||||
if (!found.length) return resolve(undefined);
|
||||
|
||||
if (!found.length) {
|
||||
return resolve(undefined);
|
||||
}
|
||||
|
||||
resolve(found[0]);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
createRelease(tag) {
|
||||
return new Promise((resolve, reject) => {
|
||||
createRelease(tag: string) {
|
||||
return new Promise<GithubRelease>((resolve, reject) => {
|
||||
const form = JSON.stringify({
|
||||
tag_name: tag,
|
||||
target_commitish: 'master', // TODO maybe git rev-parse HEAD
|
||||
@ -64,8 +109,11 @@ export class GitHub {
|
||||
prerelease: true,
|
||||
});
|
||||
const url = `https://api.github.com/repos/${this.owner}/${this.repo}/releases`;
|
||||
this.request.post(url, { form }, (error, response, body) => {
|
||||
if (error) return reject(wasReported(error.message));
|
||||
|
||||
this.request.post(url, { form }, (error, _, body) => {
|
||||
if (error) {
|
||||
return reject(wasReported(error.message));
|
||||
}
|
||||
const release = JSON.parse(body);
|
||||
if (release.message) return reject(wasReported(release.message));
|
||||
resolve(release);
|
||||
@ -73,8 +121,9 @@ export class GitHub {
|
||||
});
|
||||
}
|
||||
|
||||
uploadAsset(file, release, name) {
|
||||
uploadAsset(file: string, release: GithubRelease, name: string) {
|
||||
assert(!/[\\/]/.test(name));
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
fs.stat(file, (error, stat) => {
|
||||
if (error) return reject(error);
|
||||
@ -91,7 +140,7 @@ export class GitHub {
|
||||
headers,
|
||||
timeout: 30 * 60 * 1000,
|
||||
},
|
||||
(error2, response, body) => {
|
||||
(error2, _, body) => {
|
||||
if (error2) return reject(wasReported(error2.message));
|
||||
const asset = JSON.parse(body);
|
||||
const { errors } = asset;
|
||||
@ -100,18 +149,21 @@ export class GitHub {
|
||||
resolve(asset);
|
||||
}
|
||||
);
|
||||
|
||||
rs.pipe(req);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
downloadUrl(url, file, short) {
|
||||
downloadUrl(url: string, file: string, short: string) {
|
||||
log.enableProgress(short);
|
||||
log.showProgress(0);
|
||||
return new Promise((resolve, reject) => {
|
||||
|
||||
return new Promise<request.Response>((resolve, reject) => {
|
||||
const headers = { Accept: 'application/octet-stream' };
|
||||
const ws = fs.createWriteStream(file);
|
||||
let result;
|
||||
let result: request.Response;
|
||||
|
||||
const req = progress(
|
||||
this.request.get(
|
||||
url,
|
||||
@ -132,19 +184,25 @@ export class GitHub {
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
req.on('progress', (state) => {
|
||||
let p;
|
||||
|
||||
if (state.size && state.size.transferred && state.size.total) {
|
||||
p = state.size.transferred / state.size.total;
|
||||
} else {
|
||||
p = state.percentage;
|
||||
}
|
||||
|
||||
log.showProgress(p * 100);
|
||||
});
|
||||
|
||||
req.pipe(ws);
|
||||
|
||||
ws.on('close', () => {
|
||||
log.showProgress(100);
|
||||
log.disableProgress();
|
||||
|
||||
resolve(result);
|
||||
}).on('error', (error) => {
|
||||
log.disableProgress();
|
||||
@ -153,7 +211,7 @@ export class GitHub {
|
||||
});
|
||||
}
|
||||
|
||||
async tryDirectly(tag, name, file, short) {
|
||||
async tryDirectly(tag: string, name: string, file: string, short: string) {
|
||||
try {
|
||||
const url = `https://github.com/${this.owner}/${this.repo}/releases/download/${tag}/${name}`;
|
||||
await this.downloadUrl(url, file, short);
|
||||
@ -1,4 +1,4 @@
|
||||
import { exists } from 'fs-extra';
|
||||
import { stat } from 'fs-extra';
|
||||
import path from 'path';
|
||||
import semver from 'semver';
|
||||
import {
|
||||
@ -20,18 +20,39 @@ import { version } from '../package.json';
|
||||
|
||||
const cloud = new Cloud({ owner: 'zeit', repo: 'pkg-fetch' });
|
||||
|
||||
export async function need(opts = {}) {
|
||||
async function exists(file: string) {
|
||||
try {
|
||||
await stat(file);
|
||||
return true;
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
interface NeedOptions {
|
||||
forceFetch?: boolean;
|
||||
forceBuild?: boolean;
|
||||
dryRun?: boolean;
|
||||
nodeRange: string;
|
||||
platform: string;
|
||||
arch: string;
|
||||
}
|
||||
|
||||
export async function need(opts: NeedOptions) {
|
||||
// eslint-disable-line complexity
|
||||
const { forceFetch, forceBuild, dryRun } = opts;
|
||||
let { nodeRange, platform, arch } = opts;
|
||||
const { forceFetch, forceBuild, dryRun } = opts || {};
|
||||
let { nodeRange, platform, arch } = opts || {};
|
||||
|
||||
if (!nodeRange) throw wasReported('nodeRange not specified');
|
||||
if (!platform) throw wasReported('platform not specified');
|
||||
if (!arch) throw wasReported('arch not specified');
|
||||
|
||||
nodeRange = abiToNodeRange(nodeRange); // 'm48' -> 'node6'
|
||||
|
||||
if (!isValidNodeRange(nodeRange)) {
|
||||
throw wasReported("nodeRange must start with 'node'");
|
||||
}
|
||||
|
||||
if (nodeRange !== 'latest') {
|
||||
nodeRange = `v${nodeRange.slice(4)}`; // 'node6' -> 'v6' for semver
|
||||
}
|
||||
@ -43,10 +64,12 @@ export async function need(opts = {}) {
|
||||
const versions = Object.keys(patchesJson)
|
||||
.filter((nv) => semver.satisfies(nv, nodeRange) || nodeRange === 'latest')
|
||||
.sort((nv1, nv2) => (semver.gt(nv1, nv2) ? 1 : -1));
|
||||
|
||||
return versions.pop();
|
||||
}
|
||||
|
||||
const nodeVersion = satisfyingNodeVersion();
|
||||
|
||||
if (!nodeVersion) {
|
||||
throw wasReported(
|
||||
`No available node version satisfies '${opts.nodeRange}'`
|
||||
@ -70,47 +93,59 @@ export async function need(opts = {}) {
|
||||
const remote = remotePlace({ arch, nodeVersion, platform, version });
|
||||
|
||||
let fetchFailed;
|
||||
|
||||
if (!forceBuild) {
|
||||
if (await exists(fetched)) {
|
||||
if (dryRun) return 'exists';
|
||||
return fetched;
|
||||
return dryRun ? 'exists' : fetched;
|
||||
}
|
||||
}
|
||||
|
||||
if (!forceFetch) {
|
||||
if (await exists(built)) {
|
||||
if (dryRun) return 'exists';
|
||||
if (forceBuild) log.info('Reusing base binaries built locally:', built);
|
||||
|
||||
return built;
|
||||
}
|
||||
}
|
||||
|
||||
if (!forceBuild) {
|
||||
if (dryRun) return 'fetched';
|
||||
if (await cloud.download(remote, fetched)) return fetched;
|
||||
|
||||
fetchFailed = true;
|
||||
}
|
||||
|
||||
if (!dryRun && fetchFailed) {
|
||||
log.info('Not found in GitHub releases:', JSON.stringify(remote));
|
||||
}
|
||||
|
||||
if (!dryRun) {
|
||||
log.info('Building base binary from source:', path.basename(built));
|
||||
}
|
||||
|
||||
if (hostPlatform !== platform) {
|
||||
throw wasReported(
|
||||
`Not able to build for '${opts.platform}' here, only for '${hostPlatform}'`
|
||||
);
|
||||
}
|
||||
|
||||
if (hostArch !== arch) {
|
||||
throw wasReported(
|
||||
`Not able to build for '${opts.arch}' here, only for '${hostArch}'`
|
||||
);
|
||||
}
|
||||
|
||||
if (knownArchs.indexOf(arch) < 0) {
|
||||
throw wasReported(
|
||||
`Unknown arch '${opts.arch}'. Specify ${knownArchs.join(', ')}`
|
||||
);
|
||||
}
|
||||
|
||||
if (dryRun) return 'built';
|
||||
if (dryRun) {
|
||||
return 'built';
|
||||
}
|
||||
|
||||
await build(nodeVersion, arch, built);
|
||||
return built;
|
||||
}
|
||||
79
lib/log.js
79
lib/log.js
@ -1,79 +0,0 @@
|
||||
/* eslint-disable no-underscore-dangle, no-console */
|
||||
|
||||
import Progress from 'progress';
|
||||
import assert from 'assert';
|
||||
import chalk from 'chalk';
|
||||
|
||||
class Log {
|
||||
_lines(lines) {
|
||||
if (lines === undefined) return;
|
||||
if (!Array.isArray(lines)) {
|
||||
console.log(` ${lines}`);
|
||||
return;
|
||||
}
|
||||
for (const line of lines) {
|
||||
console.log(` ${line}`);
|
||||
}
|
||||
}
|
||||
|
||||
debug(text, lines) {
|
||||
if (!this.debugMode) return;
|
||||
console.log(`> ${chalk.green('[debug]')} ${text}`);
|
||||
this._lines(lines);
|
||||
}
|
||||
|
||||
info(text, lines) {
|
||||
console.log(`> ${text}`);
|
||||
this._lines(lines);
|
||||
}
|
||||
|
||||
warn(text, lines) {
|
||||
console.log(`> ${chalk.blue('Warning')} ${text}`);
|
||||
this._lines(lines);
|
||||
}
|
||||
|
||||
error(text, lines) {
|
||||
if (text.stack) text = text.stack;
|
||||
console.log(`> ${chalk.red('Error!')} ${text}`);
|
||||
this._lines(lines);
|
||||
}
|
||||
|
||||
enableProgress(text) {
|
||||
assert(!this.bar);
|
||||
text += ' '.repeat(28 - text.length);
|
||||
this.bar = new Progress(` ${text} [:bar] :percent`, {
|
||||
stream: process.stdout,
|
||||
width: 20,
|
||||
complete: '=',
|
||||
incomplete: ' ',
|
||||
total: 100,
|
||||
});
|
||||
}
|
||||
|
||||
showProgress(percentage) {
|
||||
if (!this.bar) return;
|
||||
this.bar.update(percentage / 100);
|
||||
}
|
||||
|
||||
disableProgress() {
|
||||
if (!this.bar) return;
|
||||
// avoid empty line
|
||||
if (!this.bar.complete) {
|
||||
this.bar.terminate();
|
||||
}
|
||||
delete this.bar;
|
||||
}
|
||||
}
|
||||
|
||||
export const log = new Log();
|
||||
|
||||
export function wasReported(error, lines) {
|
||||
if (error === undefined) {
|
||||
error = new Error('No message');
|
||||
} else if (typeof error === 'string') {
|
||||
log.error(error, lines);
|
||||
error = new Error(error);
|
||||
}
|
||||
error.wasReported = true;
|
||||
return error;
|
||||
}
|
||||
104
lib/log.ts
Normal file
104
lib/log.ts
Normal file
@ -0,0 +1,104 @@
|
||||
/* eslint-disable no-underscore-dangle, no-console */
|
||||
|
||||
import Progress from 'progress';
|
||||
import assert from 'assert';
|
||||
import chalk from 'chalk';
|
||||
|
||||
class Log {
|
||||
debugMode = false;
|
||||
|
||||
private bar?: Progress;
|
||||
|
||||
private lines(lines?: string[] | string) {
|
||||
if (lines === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Array.isArray(lines)) {
|
||||
console.log(` ${lines}`);
|
||||
return;
|
||||
}
|
||||
|
||||
for (const line of lines) {
|
||||
console.log(` ${line}`);
|
||||
}
|
||||
}
|
||||
|
||||
debug(text: string, lines?: string[] | string) {
|
||||
if (!this.debugMode) {
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`> ${chalk.green('[debug]')} ${text}`);
|
||||
this.lines(lines);
|
||||
}
|
||||
|
||||
info(text: string, lines?: string[] | string) {
|
||||
console.log(`> ${text}`);
|
||||
this.lines(lines);
|
||||
}
|
||||
|
||||
warn(text: string, lines?: string[] | string) {
|
||||
console.log(`> ${chalk.blue('Warning')} ${text}`);
|
||||
this.lines(lines);
|
||||
}
|
||||
|
||||
error(text: Error | string, lines?: string[] | string) {
|
||||
const message = text instanceof Error ? text.stack : text;
|
||||
console.log(`> ${chalk.red('Error!')} ${message}`);
|
||||
this.lines(lines);
|
||||
}
|
||||
|
||||
enableProgress(text: string) {
|
||||
assert(!this.bar);
|
||||
|
||||
text += ' '.repeat(28 - text.length);
|
||||
this.bar = new Progress(` ${text} [:bar] :percent`, {
|
||||
stream: process.stdout,
|
||||
width: 20,
|
||||
complete: '=',
|
||||
incomplete: ' ',
|
||||
total: 100,
|
||||
});
|
||||
}
|
||||
|
||||
showProgress(percentage: number) {
|
||||
if (!this.bar) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.bar.update(percentage / 100);
|
||||
}
|
||||
|
||||
disableProgress() {
|
||||
if (!this.bar) {
|
||||
return;
|
||||
}
|
||||
|
||||
// avoid empty line
|
||||
if (!this.bar.complete) {
|
||||
this.bar.terminate();
|
||||
}
|
||||
|
||||
delete this.bar;
|
||||
}
|
||||
}
|
||||
|
||||
export const log = new Log();
|
||||
|
||||
class ReportedError extends Error {
|
||||
name = 'ReportedError';
|
||||
|
||||
wasReported = true;
|
||||
}
|
||||
|
||||
export function wasReported(error?: string, lines?: string[] | string | string) {
|
||||
let reportedError = new ReportedError('No message');
|
||||
|
||||
if (typeof error === 'string') {
|
||||
log.error(error, lines);
|
||||
reportedError = new ReportedError(error);
|
||||
}
|
||||
|
||||
return reportedError;
|
||||
}
|
||||
@ -11,22 +11,38 @@ const IGNORE_TAG = Boolean(process.env.PKG_IGNORE_TAG);
|
||||
|
||||
const cachePath = PKG_CACHE_PATH || path.join(os.homedir(), '.pkg-cache');
|
||||
|
||||
function tagFromVersion(version) {
|
||||
function tagFromVersion(version: string) {
|
||||
const mj = major(version);
|
||||
const mn = minor(version);
|
||||
|
||||
return `v${mj}.${mn}`;
|
||||
}
|
||||
|
||||
export function localPlace(opts) {
|
||||
interface PlaceOptions {
|
||||
version: string;
|
||||
nodeVersion: string;
|
||||
platform: string;
|
||||
arch: string;
|
||||
}
|
||||
|
||||
interface LocalPlaceOptions extends PlaceOptions {
|
||||
from: string;
|
||||
}
|
||||
|
||||
export function localPlace(opts: LocalPlaceOptions) {
|
||||
const p = placesJson.localPlace;
|
||||
const { version } = opts;
|
||||
const atHome = IGNORE_TAG
|
||||
? path.join(cachePath, p)
|
||||
: path.join(cachePath, tagFromVersion(version), p);
|
||||
|
||||
return expand(path.resolve(atHome), opts);
|
||||
}
|
||||
|
||||
export function remotePlace(opts) {
|
||||
interface RemotePlaceOptions extends PlaceOptions {
|
||||
tag?: string;
|
||||
}
|
||||
export function remotePlace(opts: RemotePlaceOptions) {
|
||||
const p = placesJson.remotePlace;
|
||||
const { version } = opts;
|
||||
const tag = tagFromVersion(version);
|
||||
@ -2,32 +2,50 @@ import byline from 'byline';
|
||||
import chip from 'child_process';
|
||||
import fs from 'fs';
|
||||
import { log } from './log';
|
||||
import getThresholds from './thresholds';
|
||||
|
||||
const MAX_LINES = 20;
|
||||
const DEBUG_THRESHOLDS = false;
|
||||
|
||||
function errorLines(lines) {
|
||||
type OutputLine = [number, string];
|
||||
|
||||
function errorLines(lines: OutputLine[]) {
|
||||
return lines
|
||||
.slice(-MAX_LINES)
|
||||
.map((line) => line[1])
|
||||
.join('\n');
|
||||
}
|
||||
|
||||
export function spawn(cmd, args, opts) {
|
||||
const child = chip.spawn(cmd, args, opts);
|
||||
const stdout = byline(child.stdout);
|
||||
const stderr = byline(child.stderr);
|
||||
const lines = [];
|
||||
class ObservablePromise extends Promise<void> {
|
||||
thresholds?: ReturnType<typeof getThresholds>;
|
||||
|
||||
let onData = (data) => {
|
||||
child!: chip.ChildProcess;
|
||||
|
||||
lines: OutputLine[] = [];
|
||||
}
|
||||
|
||||
export function spawn(cmd: string, args: (string)[], opts: chip.SpawnOptions = {}) {
|
||||
const child = chip.spawn(cmd, args, opts);
|
||||
const stdout = child.stdout && byline(child.stdout);
|
||||
const stderr = child.stderr && byline(child.stderr);
|
||||
const lines: OutputLine[] = [];
|
||||
|
||||
let onData = (data: string) => {
|
||||
const time = new Date().getTime();
|
||||
lines.push([time, data.toString()]); // TODO chalk stdout/stderr?
|
||||
const { thresholds } = this; // eslint-disable-line no-invalid-this
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
const { thresholds } = this as ObservablePromise;
|
||||
|
||||
if (thresholds) {
|
||||
for (const key in thresholds) {
|
||||
if (data.indexOf(key) >= 0) {
|
||||
const p = thresholds[key];
|
||||
log.showProgress(p);
|
||||
const p = thresholds[key as keyof typeof thresholds];
|
||||
|
||||
if (p !== undefined) {
|
||||
log.showProgress(p);
|
||||
}
|
||||
|
||||
if (DEBUG_THRESHOLDS) {
|
||||
lines.push([time, '************']);
|
||||
lines.push([time, `${p}: ${key}`]);
|
||||
@ -38,7 +56,7 @@ export function spawn(cmd, args, opts) {
|
||||
}
|
||||
};
|
||||
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
const promise = new ObservablePromise((resolve, reject) => {
|
||||
child.on('error', (error) => {
|
||||
// eslint-disable-next-line no-console
|
||||
console.error(errorLines(lines)); // dont use `log` here
|
||||
@ -55,19 +73,26 @@ export function spawn(cmd, args, opts) {
|
||||
});
|
||||
|
||||
onData = onData.bind(promise);
|
||||
|
||||
if (stdout) stdout.on('data', onData);
|
||||
if (stderr) stderr.on('data', onData);
|
||||
|
||||
promise.child = child;
|
||||
promise.lines = lines;
|
||||
|
||||
return promise;
|
||||
}
|
||||
|
||||
export function progress(promise, thresholds) {
|
||||
export function progress(
|
||||
promise: ObservablePromise,
|
||||
thresholds: ReturnType<typeof getThresholds>
|
||||
) {
|
||||
promise.thresholds = thresholds;
|
||||
const { child, lines } = promise;
|
||||
log.enableProgress(promise.child.spawnfile);
|
||||
|
||||
log.enableProgress(child.spawnfile);
|
||||
log.showProgress(0);
|
||||
|
||||
const start = new Date().getTime();
|
||||
child.on('close', () => {
|
||||
if (DEBUG_THRESHOLDS) {
|
||||
@ -78,8 +103,10 @@ export function progress(promise, thresholds) {
|
||||
`${((100 * (line[0] - start)) / (finish - start)) | 0}: ${line[1]}`
|
||||
)
|
||||
.join('\n');
|
||||
|
||||
fs.writeFileSync(`${child.spawnfile}.debug`, content);
|
||||
}
|
||||
|
||||
log.showProgress(100);
|
||||
log.disableProgress();
|
||||
});
|
||||
@ -5,7 +5,7 @@ function getHostAbi() {
|
||||
return `m${process.versions.modules}`;
|
||||
}
|
||||
|
||||
export function abiToNodeRange(abi) {
|
||||
export function abiToNodeRange(abi: string) {
|
||||
if (/^m?14/.test(abi)) return 'node0.12';
|
||||
if (/^m?46/.test(abi)) return 'node4';
|
||||
if (/^m?47/.test(abi)) return 'node5';
|
||||
@ -21,13 +21,13 @@ export function abiToNodeRange(abi) {
|
||||
return abi;
|
||||
}
|
||||
|
||||
export function isValidNodeRange(nodeRange) {
|
||||
export function isValidNodeRange(nodeRange: string) {
|
||||
if (nodeRange === 'latest') return true;
|
||||
if (!/^node/.test(nodeRange)) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
export function toFancyPlatform(platform) {
|
||||
export function toFancyPlatform(platform: string) {
|
||||
if (platform === 'darwin') return 'macos';
|
||||
if (platform === 'lin') return 'linux';
|
||||
if (platform === 'mac') return 'macos';
|
||||
@ -39,10 +39,18 @@ export function toFancyPlatform(platform) {
|
||||
|
||||
function detectAlpine() {
|
||||
const { platform } = process;
|
||||
if (platform !== 'linux') return false;
|
||||
|
||||
if (platform !== 'linux') {
|
||||
return false;
|
||||
}
|
||||
|
||||
// https://github.com/sass/node-sass/issues/1589#issuecomment-265292579
|
||||
const ldd = spawnSync('ldd').stderr.toString();
|
||||
if (/\bmusl\b/.test(ldd)) return true;
|
||||
|
||||
if (/\bmusl\b/.test(ldd)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
const lddNode = spawnSync('ldd', [process.execPath]).stdout.toString();
|
||||
return /\bmusl\b/.test(lddNode);
|
||||
}
|
||||
@ -51,7 +59,11 @@ const isAlpine = detectAlpine();
|
||||
|
||||
function getHostPlatform() {
|
||||
const { platform } = process;
|
||||
if (isAlpine) return 'alpine';
|
||||
|
||||
if (isAlpine) {
|
||||
return 'alpine';
|
||||
}
|
||||
|
||||
return toFancyPlatform(platform);
|
||||
}
|
||||
|
||||
@ -59,7 +71,7 @@ function getKnownPlatforms() {
|
||||
return ['alpine', 'freebsd', 'linux', 'macos', 'win'];
|
||||
}
|
||||
|
||||
export function toFancyArch(arch) {
|
||||
export function toFancyArch(arch: string) {
|
||||
if (arch === 'ia32') return 'x86';
|
||||
if (arch === 'x86_64') return 'x64';
|
||||
return arch;
|
||||
@ -67,34 +79,54 @@ export function toFancyArch(arch) {
|
||||
|
||||
function getArmUnameArch() {
|
||||
const uname = spawnSync('uname', ['-a']);
|
||||
if (uname.error) return '';
|
||||
|
||||
if (uname.error) {
|
||||
return '';
|
||||
}
|
||||
|
||||
let unameOut = uname.stdout && uname.stdout.toString();
|
||||
unameOut = (unameOut || '').toLowerCase();
|
||||
|
||||
if (unameOut.includes('aarch64')) return 'arm64';
|
||||
if (unameOut.includes('arm64')) return 'arm64';
|
||||
if (unameOut.includes('armv7')) return 'armv7';
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
function getArmHostArch() {
|
||||
const cpu = fs.readFileSync('/proc/cpuinfo', 'utf8');
|
||||
if (cpu.indexOf('vfpv3') >= 0) return 'armv7';
|
||||
|
||||
if (cpu.indexOf('vfpv3') >= 0) {
|
||||
return 'armv7';
|
||||
}
|
||||
|
||||
let name = cpu.split('model name')[1];
|
||||
|
||||
if (name) [, name] = name.split(':');
|
||||
if (name) [name] = name.split('\n');
|
||||
if (name && name.indexOf('ARMv7') >= 0) return 'armv7';
|
||||
|
||||
return 'armv6';
|
||||
}
|
||||
|
||||
function getHostArch() {
|
||||
const { arch } = process;
|
||||
if (arch === 'arm') return getArmUnameArch() || getArmHostArch();
|
||||
|
||||
if (arch === 'arm') {
|
||||
return getArmUnameArch() || getArmHostArch();
|
||||
}
|
||||
|
||||
return toFancyArch(arch);
|
||||
}
|
||||
|
||||
function getTargetArchs() {
|
||||
const arch = getHostArch();
|
||||
if (arch === 'x64') return ['x64', 'x86'];
|
||||
|
||||
if (arch === 'x64') {
|
||||
return ['x64', 'x86'];
|
||||
}
|
||||
|
||||
return [arch];
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import uniqueTempDir from 'unique-temp-dir';
|
||||
|
||||
export function tempPath(...args) {
|
||||
export function tempPath(...args: Parameters<typeof uniqueTempDir>) {
|
||||
return uniqueTempDir(...args);
|
||||
}
|
||||
@ -3,7 +3,7 @@
|
||||
|
||||
import assert from 'assert';
|
||||
|
||||
export default function thresholds(cmd, nodeVersion) {
|
||||
export default function thresholds(cmd: string, nodeVersion = '') {
|
||||
if (cmd === 'clone') {
|
||||
return {
|
||||
'ving objects: 0%': 0,
|
||||
9
lib/tsconfig.json
Normal file
9
lib/tsconfig.json
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"extends": "../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"rootDir": ".",
|
||||
"outDir": "../lib-es5"
|
||||
},
|
||||
"include": ["**/*", "../typings/**/*"],
|
||||
"references": [{ "path": "../" }]
|
||||
}
|
||||
@ -7,21 +7,31 @@ import build from './build';
|
||||
import patchesJson from '../patches/patches.json';
|
||||
import { verify } from './verify';
|
||||
import { version } from '../package.json';
|
||||
import { getMajor } from './get-major';
|
||||
|
||||
const cloud = new Cloud({ owner: 'zeit', repo: 'pkg-fetch' });
|
||||
|
||||
export function dontBuild(nodeVersion, targetPlatform, targetArch) {
|
||||
export function dontBuild(
|
||||
nodeVersion: string,
|
||||
targetPlatform: string,
|
||||
targetArch: string
|
||||
) {
|
||||
// binaries are not provided for x86 anymore
|
||||
if (targetPlatform !== 'win' && targetArch === 'x86') return true;
|
||||
if (targetPlatform !== 'win' && targetArch === 'x86') {
|
||||
return true;
|
||||
}
|
||||
|
||||
// https://support.apple.com/en-us/HT201948
|
||||
// don't disable macos-x86 because it is not possible
|
||||
// to cross-compile for x86 from macos otherwise
|
||||
const major = nodeVersion.match(/^v?(\d+)/)[1] | 0;
|
||||
const major = getMajor(nodeVersion);
|
||||
|
||||
// node 0.12 does not compile on arm
|
||||
if (/^arm/.test(targetArch) && major === 0) return true;
|
||||
if (targetPlatform === 'freebsd' && major < 4) return true;
|
||||
if (targetPlatform === 'alpine' && (targetArch !== 'x64' || major < 6))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -31,7 +41,7 @@ export async function main() {
|
||||
}
|
||||
|
||||
for (const nodeVersion in patchesJson) {
|
||||
if (!patchesJson[nodeVersion]) {
|
||||
if (!patchesJson[nodeVersion as keyof typeof patchesJson]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -93,7 +93,7 @@ const script = `
|
||||
console.log('ok');
|
||||
`;
|
||||
|
||||
export async function verify(local) {
|
||||
export async function verify(local: string) {
|
||||
await plusx(local);
|
||||
await spawn(local, ['-e', script], {
|
||||
env: { PKG_EXECPATH: 'PKG_INVOKE_NODEJS' },
|
||||
28
package.json
28
package.json
@ -32,14 +32,15 @@
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.9.2",
|
||||
"byline": "^5.0.0",
|
||||
"chalk": "^3.0.0",
|
||||
"chalk": "^4.1.0",
|
||||
"expand-template": "^2.0.3",
|
||||
"fs-extra": "^8.1.0",
|
||||
"fs-extra": "^9.1.0",
|
||||
"isomorphic-fetch": "^3.0.0",
|
||||
"minimist": "^1.2.5",
|
||||
"progress": "^2.0.3",
|
||||
"request": "^2.88.0",
|
||||
"request": "^2.88.2",
|
||||
"request-progress": "^3.0.0",
|
||||
"semver": "^6.3.0",
|
||||
"semver": "^7.3.5",
|
||||
"unique-temp-dir": "^1.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
@ -50,18 +51,33 @@
|
||||
"@babel/plugin-transform-runtime": "^7.13.10",
|
||||
"@babel/preset-env": "^7.13.12",
|
||||
"@babel/register": "^7.13.8",
|
||||
"@octokit/core": "^3.3.1",
|
||||
"@octokit/plugin-rest-endpoint-methods": "^5.0.0",
|
||||
"@types/byline": "^4.2.32",
|
||||
"@types/fs-extra": "^9.0.9",
|
||||
"@types/isomorphic-fetch": "^0.0.35",
|
||||
"@types/minimist": "^1.2.1",
|
||||
"@types/node": "^14.14.37",
|
||||
"@types/progress": "^2.0.3",
|
||||
"@types/request": "^2.48.5",
|
||||
"@types/semver": "^7.3.4",
|
||||
"@typescript-eslint/eslint-plugin": "^4.19.0",
|
||||
"@typescript-eslint/parser": "^4.19.0",
|
||||
"ava": "^2.4.0",
|
||||
"babel-eslint": "^10.1.0",
|
||||
"eslint": "^7.22.0",
|
||||
"eslint-config-airbnb-base": "^14.2.1",
|
||||
"eslint-config-prettier": "^8.1.0",
|
||||
"eslint-import-resolver-typescript": "^2.4.0",
|
||||
"eslint-plugin-import": "^2.22.1",
|
||||
"lint-staged": ">=10",
|
||||
"prettier": "^2.2.1",
|
||||
"simple-git-hooks": ">=2.0.3"
|
||||
"rimraf": "^3.0.2",
|
||||
"simple-git-hooks": ">=2.0.3",
|
||||
"typescript": "^4.2.3"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "node test/rimraf-es5.js && babel lib --out-dir lib-es5",
|
||||
"build": "rimraf lib-es5 && tsc --build lib",
|
||||
"bin": "node lib-es5/bin.js",
|
||||
"lint": "eslint lib || true",
|
||||
"prepare": "npm run build",
|
||||
|
||||
@ -1,3 +0,0 @@
|
||||
const path = require('path');
|
||||
const remove = require('fs-extra').remove;
|
||||
remove(path.join(__dirname, '../lib-es5/*'));
|
||||
@ -34,9 +34,9 @@ for (const nodeVersion in newPatchesJson) {
|
||||
}
|
||||
}
|
||||
|
||||
require('../lib/log.js').log = new LogMock(actions);
|
||||
require('../lib-es5/log.js').log = new LogMock(actions);
|
||||
|
||||
require('../lib/spawn.js').spawn = (cmd, args, opts) => {
|
||||
require('../lib-es5/spawn.js').spawn = (cmd, args, opts) => {
|
||||
assert(opts);
|
||||
assert(opts.cwd);
|
||||
if (cmd === 'git' && args[0] === 'clone') {
|
||||
@ -60,13 +60,13 @@ require('../lib/spawn.js').spawn = (cmd, args, opts) => {
|
||||
actions.push([cmd, args.join(' '), JSON.stringify(opts)].join(' '));
|
||||
};
|
||||
|
||||
require('../lib/spawn.js').progress = () => {};
|
||||
require('../lib-es5/spawn.js').progress = () => {};
|
||||
|
||||
require('../lib/verify.js').verify = () => {
|
||||
require('../lib-es5/verify.js').verify = () => {
|
||||
actions.push('verify');
|
||||
};
|
||||
|
||||
require('../lib/copy-file.js').copyFile = (src, dest) => {
|
||||
require('../lib-es5/copy-file.js').copyFile = (src, dest) => {
|
||||
src = relative(src);
|
||||
const shortDest = `${path.basename(path.dirname(dest))}/${path.basename(
|
||||
dest
|
||||
@ -75,7 +75,7 @@ require('../lib/copy-file.js').copyFile = (src, dest) => {
|
||||
lastLocal = dest;
|
||||
};
|
||||
|
||||
require('../lib/github.js').GitHub = class {
|
||||
require('../lib-es5/github.js').GitHub = class {
|
||||
getRelease(tag) {
|
||||
actions.push(['getRelease', tag].join(' '));
|
||||
return undefined;
|
||||
@ -105,7 +105,7 @@ test('upload', async (t) => {
|
||||
|
||||
process.env.MAKE_JOB_COUNT = 1;
|
||||
// eslint-disable-next-line global-require
|
||||
const { main } = require('../lib/upload');
|
||||
const { main } = require('../lib-es5/upload');
|
||||
|
||||
await main();
|
||||
const mustBe = [
|
||||
|
||||
18
tsconfig.json
Normal file
18
tsconfig.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es5",
|
||||
"module": "commonjs",
|
||||
"allowJs": true,
|
||||
"declaration": true,
|
||||
"declarationMap": true,
|
||||
"sourceMap": true,
|
||||
"strict": true,
|
||||
"esModuleInterop": true,
|
||||
"incremental": true,
|
||||
"resolveJsonModule": true,
|
||||
"rootDir": ".",
|
||||
"outDir": ".",
|
||||
"composite": true
|
||||
},
|
||||
"files": ["package.json", "places.json", "patches/patches.json"]
|
||||
}
|
||||
1760
tsconfig.tsbuildinfo
Normal file
1760
tsconfig.tsbuildinfo
Normal file
File diff suppressed because it is too large
Load Diff
9
typings/expand-template.d.ts
vendored
Normal file
9
typings/expand-template.d.ts
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
declare module 'expand-template' {
|
||||
function expandTemplate(): (
|
||||
template: string,
|
||||
// eslint-disable-next-line @typescript-eslint/ban-types
|
||||
variables: object
|
||||
) => string;
|
||||
|
||||
export default expandTemplate;
|
||||
}
|
||||
7
typings/request-progress.d.ts
vendored
Normal file
7
typings/request-progress.d.ts
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
declare module 'request-progress' {
|
||||
import request from 'request';
|
||||
|
||||
function progress(req: request.Request): request.Request;
|
||||
|
||||
export default progress;
|
||||
}
|
||||
13
typings/unique-temp-dir.d.ts
vendored
Normal file
13
typings/unique-temp-dir.d.ts
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
declare module 'unique-temp-dir' {
|
||||
interface UniqueTempDirOptions {
|
||||
create?: boolean;
|
||||
length?: number;
|
||||
thunk?: boolean;
|
||||
}
|
||||
|
||||
function uniqueTempDir(
|
||||
options?: UniqueTempDirOptions
|
||||
): string;
|
||||
|
||||
export default uniqueTempDir;
|
||||
}
|
||||
377
yarn.lock
377
yarn.lock
@ -1248,6 +1248,87 @@
|
||||
"@nodelib/fs.scandir" "2.1.3"
|
||||
fastq "^1.6.0"
|
||||
|
||||
"@octokit/auth-token@^2.4.4":
|
||||
version "2.4.5"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.5.tgz#568ccfb8cb46f36441fac094ce34f7a875b197f3"
|
||||
integrity sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==
|
||||
dependencies:
|
||||
"@octokit/types" "^6.0.3"
|
||||
|
||||
"@octokit/core@^3.3.1":
|
||||
version "3.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.3.1.tgz#c6bb6ba171ad84a5f430853a98892cfe8f93d8cd"
|
||||
integrity sha512-Dc5NNQOYjgZU5S1goN6A/E500yXOfDUFRGQB8/2Tl16AcfvS3H9PudyOe3ZNE/MaVyHPIfC0htReHMJb1tMrvw==
|
||||
dependencies:
|
||||
"@octokit/auth-token" "^2.4.4"
|
||||
"@octokit/graphql" "^4.5.8"
|
||||
"@octokit/request" "^5.4.12"
|
||||
"@octokit/request-error" "^2.0.5"
|
||||
"@octokit/types" "^6.0.3"
|
||||
before-after-hook "^2.2.0"
|
||||
universal-user-agent "^6.0.0"
|
||||
|
||||
"@octokit/endpoint@^6.0.1":
|
||||
version "6.0.11"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.11.tgz#082adc2aebca6dcefa1fb383f5efb3ed081949d1"
|
||||
integrity sha512-fUIPpx+pZyoLW4GCs3yMnlj2LfoXTWDUVPTC4V3MUEKZm48W+XYpeWSZCv+vYF1ZABUm2CqnDVf1sFtIYrj7KQ==
|
||||
dependencies:
|
||||
"@octokit/types" "^6.0.3"
|
||||
is-plain-object "^5.0.0"
|
||||
universal-user-agent "^6.0.0"
|
||||
|
||||
"@octokit/graphql@^4.5.8":
|
||||
version "4.6.1"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.6.1.tgz#f975486a46c94b7dbe58a0ca751935edc7e32cc9"
|
||||
integrity sha512-2lYlvf4YTDgZCTXTW4+OX+9WTLFtEUc6hGm4qM1nlZjzxj+arizM4aHWzBVBCxY9glh7GIs0WEuiSgbVzv8cmA==
|
||||
dependencies:
|
||||
"@octokit/request" "^5.3.0"
|
||||
"@octokit/types" "^6.0.3"
|
||||
universal-user-agent "^6.0.0"
|
||||
|
||||
"@octokit/openapi-types@^6.0.0":
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-6.0.0.tgz#7da8d7d5a72d3282c1a3ff9f951c8133a707480d"
|
||||
integrity sha512-CnDdK7ivHkBtJYzWzZm7gEkanA7gKH6a09Eguz7flHw//GacPJLmkHA3f3N++MJmlxD1Fl+mB7B32EEpSCwztQ==
|
||||
|
||||
"@octokit/plugin-rest-endpoint-methods@^5.0.0":
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.0.0.tgz#cf2cdeb24ea829c31688216a5b165010b61f9a98"
|
||||
integrity sha512-Jc7CLNUueIshXT+HWt6T+M0sySPjF32mSFQAK7UfAg8qGeRI6OM1GSBxDLwbXjkqy2NVdnqCedJcP1nC785JYg==
|
||||
dependencies:
|
||||
"@octokit/types" "^6.13.0"
|
||||
deprecation "^2.3.1"
|
||||
|
||||
"@octokit/request-error@^2.0.0", "@octokit/request-error@^2.0.5":
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.5.tgz#72cc91edc870281ad583a42619256b380c600143"
|
||||
integrity sha512-T/2wcCFyM7SkXzNoyVNWjyVlUwBvW3igM3Btr/eKYiPmucXTtkxt2RBsf6gn3LTzaLSLTQtNmvg+dGsOxQrjZg==
|
||||
dependencies:
|
||||
"@octokit/types" "^6.0.3"
|
||||
deprecation "^2.0.0"
|
||||
once "^1.4.0"
|
||||
|
||||
"@octokit/request@^5.3.0", "@octokit/request@^5.4.12":
|
||||
version "5.4.14"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.14.tgz#ec5f96f78333bb2af390afa5ff66f114b063bc96"
|
||||
integrity sha512-VkmtacOIQp9daSnBmDI92xNIeLuSRDOIuplp/CJomkvzt7M18NXgG044Cx/LFKLgjKt9T2tZR6AtJayba9GTSA==
|
||||
dependencies:
|
||||
"@octokit/endpoint" "^6.0.1"
|
||||
"@octokit/request-error" "^2.0.0"
|
||||
"@octokit/types" "^6.7.1"
|
||||
deprecation "^2.0.0"
|
||||
is-plain-object "^5.0.0"
|
||||
node-fetch "^2.6.1"
|
||||
once "^1.4.0"
|
||||
universal-user-agent "^6.0.0"
|
||||
|
||||
"@octokit/types@^6.0.3", "@octokit/types@^6.13.0", "@octokit/types@^6.7.1":
|
||||
version "6.13.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.13.0.tgz#779e5b7566c8dde68f2f6273861dd2f0409480d0"
|
||||
integrity sha512-W2J9qlVIU11jMwKHUp5/rbVUeErqelCsO5vW5PKNb7wAXQVUz87Rc+imjlEvpvbH8yUb+KHmv8NEjVZdsdpyxA==
|
||||
dependencies:
|
||||
"@octokit/openapi-types" "^6.0.0"
|
||||
|
||||
"@sindresorhus/is@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
|
||||
@ -1260,6 +1341,18 @@
|
||||
dependencies:
|
||||
defer-to-connect "^1.0.1"
|
||||
|
||||
"@types/byline@^4.2.32":
|
||||
version "4.2.32"
|
||||
resolved "https://registry.yarnpkg.com/@types/byline/-/byline-4.2.32.tgz#9d35ec15968056118548412ee24c2c3026c997dc"
|
||||
integrity sha512-qtlm/J6XOO9p+Ep/ZB5+mCFEDhzWDDHWU4a1eReN7lkPZXW9rkloq2jcAhvKKmlO5tL2GSvKROb+PTsNVhBiyQ==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/caseless@*":
|
||||
version "0.12.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8"
|
||||
integrity sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==
|
||||
|
||||
"@types/color-name@^1.1.1":
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
|
||||
@ -1270,6 +1363,13 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
|
||||
integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
|
||||
|
||||
"@types/fs-extra@^9.0.9":
|
||||
version "9.0.9"
|
||||
resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.9.tgz#11ed43b3f3c6b3490f1ef9bd17f58da896e2d861"
|
||||
integrity sha512-5TqDycCl0oMzwzd1cIjSJWMKMvLCDVErle4ZTjU4EmHDURR/+yZghe6GDHMCpHtcVfq0x0gMoOM546/5TbYHrg==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/glob@^7.1.1":
|
||||
version "7.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575"
|
||||
@ -1279,6 +1379,16 @@
|
||||
"@types/minimatch" "*"
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/isomorphic-fetch@^0.0.35":
|
||||
version "0.0.35"
|
||||
resolved "https://registry.yarnpkg.com/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.35.tgz#c1c0d402daac324582b6186b91f8905340ea3361"
|
||||
integrity sha512-DaZNUvLDCAnCTjgwxgiL1eQdxIKEpNLOlTNtAgnZc50bG2copGhRrFN9/PxPBuJe+tZVLCbQ7ls0xveXVRPkvw==
|
||||
|
||||
"@types/json-schema@^7.0.3":
|
||||
version "7.0.7"
|
||||
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
|
||||
integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
|
||||
|
||||
"@types/json5@^0.0.29":
|
||||
version "0.0.29"
|
||||
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
|
||||
@ -1289,16 +1399,123 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
|
||||
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
|
||||
|
||||
"@types/minimist@^1.2.1":
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256"
|
||||
integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==
|
||||
|
||||
"@types/node@*":
|
||||
version "13.11.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.0.tgz#390ea202539c61c8fa6ba4428b57e05bc36dc47b"
|
||||
integrity sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ==
|
||||
|
||||
"@types/node@^14.14.37":
|
||||
version "14.14.37"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e"
|
||||
integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==
|
||||
|
||||
"@types/parse-json@^4.0.0":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
|
||||
integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
|
||||
|
||||
"@types/progress@^2.0.3":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/progress/-/progress-2.0.3.tgz#7ccbd9c6d4d601319126c469e73b5bb90dfc8ccc"
|
||||
integrity sha512-bPOsfCZ4tsTlKiBjBhKnM8jpY5nmIll166IPD58D92hR7G7kZDfx5iB9wGF4NfZrdKolebjeAr3GouYkSGoJ/A==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/request@^2.48.5":
|
||||
version "2.48.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.5.tgz#019b8536b402069f6d11bee1b2c03e7f232937a0"
|
||||
integrity sha512-/LO7xRVnL3DxJ1WkPGDQrp4VTV1reX9RkC85mJ+Qzykj2Bdw+mG15aAfDahc76HtknjzE16SX/Yddn6MxVbmGQ==
|
||||
dependencies:
|
||||
"@types/caseless" "*"
|
||||
"@types/node" "*"
|
||||
"@types/tough-cookie" "*"
|
||||
form-data "^2.5.0"
|
||||
|
||||
"@types/semver@^7.3.4":
|
||||
version "7.3.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb"
|
||||
integrity sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ==
|
||||
|
||||
"@types/tough-cookie@*":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.0.tgz#fef1904e4668b6e5ecee60c52cc6a078ffa6697d"
|
||||
integrity sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A==
|
||||
|
||||
"@typescript-eslint/eslint-plugin@^4.19.0":
|
||||
version "4.19.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.19.0.tgz#56f8da9ee118fe9763af34d6a526967234f6a7f0"
|
||||
integrity sha512-CRQNQ0mC2Pa7VLwKFbrGVTArfdVDdefS+gTw0oC98vSI98IX5A8EVH4BzJ2FOB0YlCmm8Im36Elad/Jgtvveaw==
|
||||
dependencies:
|
||||
"@typescript-eslint/experimental-utils" "4.19.0"
|
||||
"@typescript-eslint/scope-manager" "4.19.0"
|
||||
debug "^4.1.1"
|
||||
functional-red-black-tree "^1.0.1"
|
||||
lodash "^4.17.15"
|
||||
regexpp "^3.0.0"
|
||||
semver "^7.3.2"
|
||||
tsutils "^3.17.1"
|
||||
|
||||
"@typescript-eslint/experimental-utils@4.19.0":
|
||||
version "4.19.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.19.0.tgz#9ca379919906dc72cb0fcd817d6cb5aa2d2054c6"
|
||||
integrity sha512-9/23F1nnyzbHKuoTqFN1iXwN3bvOm/PRIXSBR3qFAYotK/0LveEOHr5JT1WZSzcD6BESl8kPOG3OoDRKO84bHA==
|
||||
dependencies:
|
||||
"@types/json-schema" "^7.0.3"
|
||||
"@typescript-eslint/scope-manager" "4.19.0"
|
||||
"@typescript-eslint/types" "4.19.0"
|
||||
"@typescript-eslint/typescript-estree" "4.19.0"
|
||||
eslint-scope "^5.0.0"
|
||||
eslint-utils "^2.0.0"
|
||||
|
||||
"@typescript-eslint/parser@^4.19.0":
|
||||
version "4.19.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.19.0.tgz#4ae77513b39f164f1751f21f348d2e6cb2d11128"
|
||||
integrity sha512-/uabZjo2ZZhm66rdAu21HA8nQebl3lAIDcybUoOxoI7VbZBYavLIwtOOmykKCJy+Xq6Vw6ugkiwn8Js7D6wieA==
|
||||
dependencies:
|
||||
"@typescript-eslint/scope-manager" "4.19.0"
|
||||
"@typescript-eslint/types" "4.19.0"
|
||||
"@typescript-eslint/typescript-estree" "4.19.0"
|
||||
debug "^4.1.1"
|
||||
|
||||
"@typescript-eslint/scope-manager@4.19.0":
|
||||
version "4.19.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.19.0.tgz#5e0b49eca4df7684205d957c9856f4e720717a4f"
|
||||
integrity sha512-GGy4Ba/hLXwJXygkXqMzduqOMc+Na6LrJTZXJWVhRrSuZeXmu8TAnniQVKgj8uTRKe4igO2ysYzH+Np879G75g==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "4.19.0"
|
||||
"@typescript-eslint/visitor-keys" "4.19.0"
|
||||
|
||||
"@typescript-eslint/types@4.19.0":
|
||||
version "4.19.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.19.0.tgz#5181d5d2afd02e5b8f149ebb37ffc8bd7b07a568"
|
||||
integrity sha512-A4iAlexVvd4IBsSTNxdvdepW0D4uR/fwxDrKUa+iEY9UWvGREu2ZyB8ylTENM1SH8F7bVC9ac9+si3LWNxcBuA==
|
||||
|
||||
"@typescript-eslint/typescript-estree@4.19.0":
|
||||
version "4.19.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.19.0.tgz#8a709ffa400284ab72df33376df085e2e2f61147"
|
||||
integrity sha512-3xqArJ/A62smaQYRv2ZFyTA+XxGGWmlDYrsfZG68zJeNbeqRScnhf81rUVa6QG4UgzHnXw5VnMT5cg75dQGDkA==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "4.19.0"
|
||||
"@typescript-eslint/visitor-keys" "4.19.0"
|
||||
debug "^4.1.1"
|
||||
globby "^11.0.1"
|
||||
is-glob "^4.0.1"
|
||||
semver "^7.3.2"
|
||||
tsutils "^3.17.1"
|
||||
|
||||
"@typescript-eslint/visitor-keys@4.19.0":
|
||||
version "4.19.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.19.0.tgz#cbea35109cbd9b26e597644556be4546465d8f7f"
|
||||
integrity sha512-aGPS6kz//j7XLSlgpzU2SeTqHPsmRYxFztj2vPuMMFJXZudpRSehE3WCV+BaxwZFvfAqMoSd86TEuM0PQ59E/A==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "4.19.0"
|
||||
eslint-visitor-keys "^2.0.0"
|
||||
|
||||
acorn-jsx@^5.3.1:
|
||||
version "5.3.1"
|
||||
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
|
||||
@ -1535,6 +1752,11 @@ asynckit@^0.4.0:
|
||||
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
||||
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
|
||||
|
||||
at-least-node@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
|
||||
integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
|
||||
|
||||
atob@^2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
|
||||
@ -1717,6 +1939,11 @@ bcrypt-pbkdf@^1.0.0:
|
||||
dependencies:
|
||||
tweetnacl "^0.14.3"
|
||||
|
||||
before-after-hook@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.0.tgz#09c40d92e936c64777aa385c4e9b904f8147eaf0"
|
||||
integrity sha512-jH6rKQIfroBbhEXVmI7XmXe3ix5S/PgJqpzdDPnR8JGLHWNYLsYZ6tK5iWOF/Ra3oqEX0NobXGlzbiylIzVphQ==
|
||||
|
||||
binary-extensions@^1.0.0:
|
||||
version "1.13.1"
|
||||
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
|
||||
@ -1897,14 +2124,6 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2:
|
||||
escape-string-regexp "^1.0.5"
|
||||
supports-color "^5.3.0"
|
||||
|
||||
chalk@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
|
||||
integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
|
||||
dependencies:
|
||||
ansi-styles "^4.1.0"
|
||||
supports-color "^7.1.0"
|
||||
|
||||
chalk@^4.0.0, chalk@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
|
||||
@ -2364,6 +2583,11 @@ delayed-stream@~1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
|
||||
|
||||
deprecation@^2.0.0, deprecation@^2.3.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919"
|
||||
integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
|
||||
|
||||
dir-glob@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
|
||||
@ -2557,6 +2781,17 @@ eslint-import-resolver-node@^0.3.4:
|
||||
debug "^2.6.9"
|
||||
resolve "^1.13.1"
|
||||
|
||||
eslint-import-resolver-typescript@^2.4.0:
|
||||
version "2.4.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.4.0.tgz#ec1e7063ebe807f0362a7320543aaed6fe1100e1"
|
||||
integrity sha512-useJKURidCcldRLCNKWemr1fFQL1SzB3G4a0li6lFGvlc5xGe1hY343bvG07cbpCzPuM/lK19FIJB3XGFSkplA==
|
||||
dependencies:
|
||||
debug "^4.1.1"
|
||||
glob "^7.1.6"
|
||||
is-glob "^4.0.1"
|
||||
resolve "^1.17.0"
|
||||
tsconfig-paths "^3.9.0"
|
||||
|
||||
eslint-module-utils@^2.6.0:
|
||||
version "2.6.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6"
|
||||
@ -2592,7 +2827,7 @@ eslint-scope@5.1.0:
|
||||
esrecurse "^4.1.0"
|
||||
estraverse "^4.1.1"
|
||||
|
||||
eslint-scope@^5.1.1:
|
||||
eslint-scope@^5.0.0, eslint-scope@^5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
|
||||
integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
|
||||
@ -2600,7 +2835,7 @@ eslint-scope@^5.1.1:
|
||||
esrecurse "^4.3.0"
|
||||
estraverse "^4.1.1"
|
||||
|
||||
eslint-utils@^2.1.0:
|
||||
eslint-utils@^2.0.0, eslint-utils@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
|
||||
integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
|
||||
@ -2842,6 +3077,18 @@ fast-glob@^3.0.3:
|
||||
micromatch "^4.0.2"
|
||||
picomatch "^2.2.1"
|
||||
|
||||
fast-glob@^3.1.1:
|
||||
version "3.2.5"
|
||||
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"
|
||||
integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==
|
||||
dependencies:
|
||||
"@nodelib/fs.stat" "^2.0.2"
|
||||
"@nodelib/fs.walk" "^1.2.3"
|
||||
glob-parent "^5.1.0"
|
||||
merge2 "^1.3.0"
|
||||
micromatch "^4.0.2"
|
||||
picomatch "^2.2.1"
|
||||
|
||||
fast-json-stable-stringify@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
|
||||
@ -2944,6 +3191,15 @@ forever-agent@~0.6.1:
|
||||
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
|
||||
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
|
||||
|
||||
form-data@^2.5.0:
|
||||
version "2.5.1"
|
||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4"
|
||||
integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==
|
||||
dependencies:
|
||||
asynckit "^0.4.0"
|
||||
combined-stream "^1.0.6"
|
||||
mime-types "^2.1.12"
|
||||
|
||||
form-data@~2.3.2:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
|
||||
@ -2960,14 +3216,15 @@ fragment-cache@^0.2.1:
|
||||
dependencies:
|
||||
map-cache "^0.2.2"
|
||||
|
||||
fs-extra@^8.1.0:
|
||||
version "8.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
|
||||
integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
|
||||
fs-extra@^9.1.0:
|
||||
version "9.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
|
||||
integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
|
||||
dependencies:
|
||||
at-least-node "^1.0.0"
|
||||
graceful-fs "^4.2.0"
|
||||
jsonfile "^4.0.0"
|
||||
universalify "^0.1.0"
|
||||
jsonfile "^6.0.1"
|
||||
universalify "^2.0.0"
|
||||
|
||||
fs-readdir-recursive@^1.1.0:
|
||||
version "1.1.0"
|
||||
@ -3081,7 +3338,7 @@ glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0:
|
||||
dependencies:
|
||||
is-glob "^4.0.1"
|
||||
|
||||
glob@^7.0.0, glob@^7.0.3, glob@^7.1.3:
|
||||
glob@^7.0.0, glob@^7.0.3, glob@^7.1.3, glob@^7.1.6:
|
||||
version "7.1.6"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
|
||||
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
|
||||
@ -3133,6 +3390,18 @@ globby@^10.0.1:
|
||||
merge2 "^1.2.3"
|
||||
slash "^3.0.0"
|
||||
|
||||
globby@^11.0.1:
|
||||
version "11.0.3"
|
||||
resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb"
|
||||
integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==
|
||||
dependencies:
|
||||
array-union "^2.1.0"
|
||||
dir-glob "^3.0.1"
|
||||
fast-glob "^3.1.1"
|
||||
ignore "^5.1.4"
|
||||
merge2 "^1.3.0"
|
||||
slash "^3.0.0"
|
||||
|
||||
globby@^6.1.0:
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
|
||||
@ -3294,6 +3563,11 @@ ignore@^5.1.1:
|
||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf"
|
||||
integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==
|
||||
|
||||
ignore@^5.1.4:
|
||||
version "5.1.8"
|
||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
|
||||
integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
|
||||
|
||||
import-fresh@^3.0.0:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
|
||||
@ -3618,6 +3892,11 @@ is-plain-object@^3.0.0:
|
||||
dependencies:
|
||||
isobject "^4.0.0"
|
||||
|
||||
is-plain-object@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
|
||||
integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
|
||||
|
||||
is-promise@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
|
||||
@ -3722,6 +4001,14 @@ isobject@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0"
|
||||
integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==
|
||||
|
||||
isomorphic-fetch@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4"
|
||||
integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==
|
||||
dependencies:
|
||||
node-fetch "^2.6.1"
|
||||
whatwg-fetch "^3.4.1"
|
||||
|
||||
isstream@~0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
||||
@ -3814,10 +4101,12 @@ json5@^2.1.2:
|
||||
dependencies:
|
||||
minimist "^1.2.5"
|
||||
|
||||
jsonfile@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
|
||||
integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
|
||||
jsonfile@^6.0.1:
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
|
||||
integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
|
||||
dependencies:
|
||||
universalify "^2.0.0"
|
||||
optionalDependencies:
|
||||
graceful-fs "^4.1.6"
|
||||
|
||||
@ -4289,6 +4578,11 @@ natural-compare@^1.4.0:
|
||||
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
|
||||
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
|
||||
|
||||
node-fetch@^2.6.1:
|
||||
version "2.6.1"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
|
||||
integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
|
||||
|
||||
node-modules-regexp@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
|
||||
@ -4970,7 +5264,7 @@ regexp.prototype.flags@^1.2.0:
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.17.0-next.1"
|
||||
|
||||
regexpp@^3.1.0:
|
||||
regexpp@^3.0.0, regexpp@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
|
||||
integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
|
||||
@ -5054,7 +5348,7 @@ request-progress@^3.0.0:
|
||||
dependencies:
|
||||
throttleit "^1.0.0"
|
||||
|
||||
request@^2.88.0:
|
||||
request@^2.88.2:
|
||||
version "2.88.2"
|
||||
resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
|
||||
integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
|
||||
@ -5235,7 +5529,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
|
||||
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
|
||||
|
||||
semver@^7.2.1:
|
||||
semver@^7.2.1, semver@^7.3.2, semver@^7.3.5:
|
||||
version "7.3.5"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
|
||||
integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
|
||||
@ -5746,11 +6040,23 @@ tsconfig-paths@^3.9.0:
|
||||
minimist "^1.2.0"
|
||||
strip-bom "^3.0.0"
|
||||
|
||||
tslib@^1.8.1:
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
|
||||
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
|
||||
|
||||
tslib@^1.9.0:
|
||||
version "1.11.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
|
||||
integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==
|
||||
|
||||
tsutils@^3.17.1:
|
||||
version "3.21.0"
|
||||
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
|
||||
integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
|
||||
dependencies:
|
||||
tslib "^1.8.1"
|
||||
|
||||
tunnel-agent@^0.6.0:
|
||||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
|
||||
@ -5802,6 +6108,11 @@ typedarray-to-buffer@^3.1.5:
|
||||
dependencies:
|
||||
is-typedarray "^1.0.0"
|
||||
|
||||
typescript@^4.2.3:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3"
|
||||
integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==
|
||||
|
||||
uid2@0.0.3:
|
||||
version "0.0.3"
|
||||
resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82"
|
||||
@ -5866,10 +6177,15 @@ unique-temp-dir@^1.0.0:
|
||||
os-tmpdir "^1.0.1"
|
||||
uid2 "0.0.3"
|
||||
|
||||
universalify@^0.1.0:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
|
||||
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
|
||||
universal-user-agent@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee"
|
||||
integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==
|
||||
|
||||
universalify@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
|
||||
integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
|
||||
|
||||
unset-value@^1.0.0:
|
||||
version "1.0.0"
|
||||
@ -5970,6 +6286,11 @@ well-known-symbols@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/well-known-symbols/-/well-known-symbols-2.0.0.tgz#e9c7c07dbd132b7b84212c8174391ec1f9871ba5"
|
||||
integrity sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==
|
||||
|
||||
whatwg-fetch@^3.4.1:
|
||||
version "3.6.2"
|
||||
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c"
|
||||
integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==
|
||||
|
||||
which-boxed-primitive@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user