From edee4f6eb99a2bcc740278e21bfbfcd7c3038864 Mon Sep 17 00:00:00 2001
From: prisis
Date: Fri, 19 Feb 2021 11:58:34 +0100
Subject: [PATCH 01/21] feat: reworking diff
---
.dependabot/config.yml | 22 -
.editorconfig | 3 +
.eslintrc.json | 11 +-
.github/dependabot.yml | 15 +
.github/renovate.json5 | 47 +
README.md | 4 +
__tests__/diff-match-patch.test.ts | 1114 ++
__tests__/fixture/settings-with-filters.yml | 7 +
__tests__/settings.test.ts | 69 +
__tests__/sync.test.ts | 628 +
action.yml | 6 +-
jest.config.js | 9 +-
package-lock.json | 10724 ------------------
package.json | 40 +-
src/diff/common-prefix.ts | 57 +
src/diff/common-suffix.ts | 60 +
src/diff/diff-chars-to-lines.ts | 41 +
src/diff/diff-common-overlap.ts | 76 +
src/diff/diff-lines-to-chars.ts | 109 +
src/diff/diff-lines-to-words.ts | 109 +
src/diff/diff-match-patch.ts | 1763 +++
src/diff/diff-text.ts | 40 +
src/diff/diff-x-index.ts | 68 +
src/diff/diff.ts | 85 +
src/diff/levenshtein.ts | 62 +
src/diff/match-alphabet.ts | 40 +
src/diff/patch-deep-object-copy.ts | 56 +
src/diff/patch-object.ts | 92 +
src/git-auth-helper.ts | 12 +-
src/git-command-manager.ts | 4 +-
src/git-source-provider.ts | 7 +-
src/github-action-cleanup.ts | 3 +-
src/github-action-context.ts | 2 +
src/github-manager.ts | 13 +-
src/interfaces.ts | 24 +-
src/main.ts | 34 +-
src/misc/generate-docs.ts | 11 +-
src/settings.ts | 91 +-
src/sync.ts | 144 +
39 files changed, 4856 insertions(+), 10846 deletions(-)
delete mode 100644 .dependabot/config.yml
create mode 100644 .github/dependabot.yml
create mode 100644 .github/renovate.json5
create mode 100644 __tests__/diff-match-patch.test.ts
create mode 100644 __tests__/fixture/settings-with-filters.yml
create mode 100644 __tests__/settings.test.ts
create mode 100644 __tests__/sync.test.ts
delete mode 100644 package-lock.json
create mode 100644 src/diff/common-prefix.ts
create mode 100644 src/diff/common-suffix.ts
create mode 100644 src/diff/diff-chars-to-lines.ts
create mode 100644 src/diff/diff-common-overlap.ts
create mode 100644 src/diff/diff-lines-to-chars.ts
create mode 100644 src/diff/diff-lines-to-words.ts
create mode 100644 src/diff/diff-match-patch.ts
create mode 100644 src/diff/diff-text.ts
create mode 100644 src/diff/diff-x-index.ts
create mode 100644 src/diff/diff.ts
create mode 100644 src/diff/levenshtein.ts
create mode 100644 src/diff/match-alphabet.ts
create mode 100644 src/diff/patch-deep-object-copy.ts
create mode 100644 src/diff/patch-object.ts
create mode 100644 src/sync.ts
diff --git a/.dependabot/config.yml b/.dependabot/config.yml
deleted file mode 100644
index ab2838fa..00000000
--- a/.dependabot/config.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-# https://dependabot.com/docs/config-file/
-
-version: 1
-
-update_configs:
- - package_manager: "javascript"
- directory: "/"
- update_schedule: "live"
- version_requirement_updates: "increase_versions"
- automerged_updates:
- - match:
- dependency_type: "production"
- update_type: "semver:patch"
- - match:
- dependency_type: "development"
- commit_message:
- prefix: "fix"
- prefix_development: "chore"
- include_scope: true
- default_labels:
- - "dependency"
- - "Changed"
\ No newline at end of file
diff --git a/.editorconfig b/.editorconfig
index bcf20c1f..ad243313 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -14,5 +14,8 @@ indent_size = 2
[*.ts]
indent_size = 2
+[*.js]
+indent_size = 2
+
[package.json]
indent_size = 2
diff --git a/.eslintrc.json b/.eslintrc.json
index 5f6e7687..060ef8c1 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -1,6 +1,6 @@
{
- "plugins": ["jest", "@typescript-eslint"],
- "extends": ["plugin:github/es6"],
+ "plugins": ["jest", "@typescript-eslint", "github"],
+ "extends": ["plugin:github/typescript"],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 9,
@@ -16,13 +16,9 @@
"@typescript-eslint/no-require-imports": "error",
"@typescript-eslint/array-type": "error",
"@typescript-eslint/await-thenable": "error",
- "@typescript-eslint/ban-ts-ignore": "warn",
"camelcase": "off",
- "@typescript-eslint/camelcase": "error",
- "@typescript-eslint/class-name-casing": "error",
"@typescript-eslint/explicit-function-return-type": ["error", {"allowExpressions": true}],
"@typescript-eslint/func-call-spacing": ["error", "never"],
- "@typescript-eslint/generic-type-naming": ["error", "^[A-Z][A-Za-z]*$"],
"@typescript-eslint/no-array-constructor": "error",
"@typescript-eslint/no-empty-interface": "error",
"@typescript-eslint/no-explicit-any": "error",
@@ -39,7 +35,6 @@
"@typescript-eslint/prefer-for-of": "warn",
"@typescript-eslint/prefer-function-type": "warn",
"@typescript-eslint/prefer-includes": "error",
- "@typescript-eslint/prefer-string-starts-ends-with": "error",
"@typescript-eslint/promise-function-async": "error",
"@typescript-eslint/require-array-sort-compare": "error",
"@typescript-eslint/restrict-plus-operands": "error",
@@ -53,4 +48,4 @@
"es6": true,
"jest/globals": true
}
- }
\ No newline at end of file
+ }
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 00000000..61e58b48
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,15 @@
+# https://docs.github.com/en/github/administering-a-repository/configuration-options-for-dependency-updates
+
+version: 2
+
+updates:
+ - commit-message:
+ include: "scope"
+ prefix: "chore"
+ directory: "/"
+ labels:
+ - "dependency"
+ open-pull-requests-limit: 10
+ package-ecosystem: "github-actions"
+ schedule:
+ interval: "daily"
diff --git a/.github/renovate.json5 b/.github/renovate.json5
new file mode 100644
index 00000000..47deaa20
--- /dev/null
+++ b/.github/renovate.json5
@@ -0,0 +1,47 @@
+{
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
+ "extends": ["config:base"],
+ "labels": ["dependency", "Changed"],
+ "semanticCommits": true,
+ "major": {
+ "semanticCommitType": "chore",
+ "semanticCommitScope": "deps"
+ },
+ "packageRules": [
+ {
+ "groupName": "renovate-meta",
+ "automerge": "true",
+ "updateTypes": ["lockFileMaintenance", "pin"],
+ "labels": ["dependency", "Changed"],
+ "semanticCommitType": "chore",
+ "semanticCommitScope": "deps"
+ },
+ {
+ "groupName": "dependencies (non-major)",
+ "automerge": "true",
+ "depTypeList": ["dependencies"],
+ "updateTypes": ["patch", "minor"],
+ "labels": ["type/deps"],
+ "semanticCommitType": "chore",
+ "semanticCommitScope": "deps"
+ },
+ {
+ "groupName": "devDependencies (major)",
+ "automerge": "true",
+ "depTypeList": ["devDependencies"],
+ "updateTypes": ["major"],
+ "labels": ["dependency", "Changed"],
+ "semanticCommitType": "chore",
+ "semanticCommitScope": "deps"
+ },
+ {
+ "groupName": "devDependencies (non-major)",
+ "automerge": "true",
+ "depTypeList": ["devDependencies"],
+ "updateTypes": ["patch", "minor"],
+ "labels": ["dependency", "Changed"],
+ "semanticCommitType": "chore",
+ "semanticCommitScope": "deps"
+ }
+ ]
+}
diff --git a/README.md b/README.md
index 9448b8b9..66eca8b4 100644
--- a/README.md
+++ b/README.md
@@ -105,3 +105,7 @@ jobs:
ignore_list: ''
```
+
+# Diff Filters
+
+> Note: The diff algorithm is ported from [diff-match-patch](https://github.com/google/diff-match-patch) package created by Neil Fraser.
diff --git a/__tests__/diff-match-patch.test.ts b/__tests__/diff-match-patch.test.ts
new file mode 100644
index 00000000..860c20f0
--- /dev/null
+++ b/__tests__/diff-match-patch.test.ts
@@ -0,0 +1,1114 @@
+// /**
+// * Diff Match and Patch -- Test Harness
+// * Copyright 2018 The diff-match-patch Authors.
+// * https://github.com/google/diff-match-patch
+// *
+// * Licensed under the Apache License, Version 2.0 (the "License");
+// * you may not use this file except in compliance with the License.
+// * You may obtain a copy of the License at
+// *
+// * http://www.apache.org/licenses/LICENSE-2.0
+// *
+// * Unless required by applicable law or agreed to in writing, software
+// * distributed under the License is distributed on an "AS IS" BASIS,
+// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// * See the License for the specific language governing permissions and
+// * limitations under the License.
+// */
+//
+// 'use strict';
+//
+// import diff_match_patch, { Diff, patch_obj, DIFF_EQUAL, DIFF_INSERT, DIFF_DELETE } from '../diff_match_patch';
+//
+// // If expected and actual are the equivalent, pass the test.
+// function assertEquivalent(msg: any, expected: any, actual?: any) {
+// if (typeof actual == 'undefined') {
+// // msg is optional.
+// actual = expected;
+// expected = msg;
+// msg = 'Expected: \'' + expected + '\' Actual: \'' + actual + '\'';
+// }
+// if (_equivalent(expected, actual)) {
+// return assertEquals(msg, String(expected), String(actual));
+// } else {
+// return assertEquals(msg, expected, actual);
+// }
+// }
+//
+//
+// // Are a and b the equivalent? -- Recursive.
+// function _equivalent(a: any, b: any) {
+// if (a == b) {
+// return true;
+// }
+// if (typeof a == 'object' && typeof b == 'object' && a !== null && b !== null) {
+// if (a.toString() != b.toString()) {
+// return false;
+// }
+// for (var p in a) {
+// if (a.hasOwnProperty(p) && !_equivalent(a[p], b[p])) {
+// return false;
+// }
+// }
+// for (var p in b) {
+// if (a.hasOwnProperty(p) && !_equivalent(a[p], b[p])) {
+// return false;
+// }
+// }
+// return true;
+// }
+// return false;
+// }
+//
+//
+// function diff_rebuildtexts(diffs: Diff[]) {
+// // Construct the two texts which made up the diff originally.
+// var text1 = '';
+// var text2 = '';
+// for (var x = 0; x < diffs.length; x++) {
+// if (diffs[x].operation != DIFF_INSERT) {
+// text1 += diffs[x].text;
+// }
+// if (diffs[x].operation != DIFF_DELETE) {
+// text2 += diffs[x].text;
+// }
+// }
+// return [text1, text2];
+// }
+//
+// var dmp = new diff_match_patch();
+//
+//
+// // DIFF TEST FUNCTIONS
+//
+//
+// export function testDiffCommonPrefix() {
+// // Detect any common prefix.
+// // Null case.
+// assertEquals(0, dmp.diff_commonPrefix('abc', 'xyz'));
+//
+// // Non-null case.
+// assertEquals(4, dmp.diff_commonPrefix('1234abcdef', '1234xyz'));
+//
+// // Whole case.
+// assertEquals(4, dmp.diff_commonPrefix('1234', '1234xyz'));
+// }
+//
+// export function testDiffCommonSuffix() {
+// // Detect any common suffix.
+// // Null case.
+// assertEquals(0, dmp.diff_commonSuffix('abc', 'xyz'));
+//
+// // Non-null case.
+// assertEquals(4, dmp.diff_commonSuffix('abcdef1234', 'xyz1234'));
+//
+// // Whole case.
+// assertEquals(4, dmp.diff_commonSuffix('1234', 'xyz1234'));
+// }
+//
+// export function testDiffCommonOverlap() {
+// // Detect any suffix/prefix overlap.
+// // Null case.
+// assertEquals(0, (dmp as any).diff_commonOverlap_('', 'abcd'));
+//
+// // Whole case.
+// assertEquals(3, (dmp as any).diff_commonOverlap_('abc', 'abcd'));
+//
+// // No overlap.
+// assertEquals(0, (dmp as any).diff_commonOverlap_('123456', 'abcd'));
+//
+// // Overlap.
+// assertEquals(3, (dmp as any).diff_commonOverlap_('123456xxx', 'xxxabcd'));
+//
+// // Unicode.
+// // Some overly clever languages (C#) may treat ligatures as equal to their
+// // component letters. E.g. U+FB01 == 'fi'
+// assertEquals(0, (dmp as any).diff_commonOverlap_('fi', '\ufb01i'));
+// }
+//
+// export function testDiffHalfMatch() {
+// // Detect a halfmatch.
+// dmp.Diff_Timeout = 1;
+// // No match.
+// assertEquals(null, (dmp as any).diff_halfMatch_('1234567890', 'abcdef'));
+//
+// assertEquals(null, (dmp as any).diff_halfMatch_('12345', '23'));
+//
+// // Single Match.
+// assertEquivalent(['12', '90', 'a', 'z', '345678'], (dmp as any).diff_halfMatch_('1234567890', 'a345678z'));
+//
+// assertEquivalent(['a', 'z', '12', '90', '345678'], (dmp as any).diff_halfMatch_('a345678z', '1234567890'));
+//
+// assertEquivalent(['abc', 'z', '1234', '0', '56789'], (dmp as any).diff_halfMatch_('abc56789z', '1234567890'));
+//
+// assertEquivalent(['a', 'xyz', '1', '7890', '23456'], (dmp as any).diff_halfMatch_('a23456xyz', '1234567890'));
+//
+// // Multiple Matches.
+// assertEquivalent(['12123', '123121', 'a', 'z', '1234123451234'], (dmp as any).diff_halfMatch_('121231234123451234123121', 'a1234123451234z'));
+//
+// assertEquivalent(['', '-=-=-=-=-=', 'x', '', 'x-=-=-=-=-=-=-='], (dmp as any).diff_halfMatch_('x-=-=-=-=-=-=-=-=-=-=-=-=', 'xx-=-=-=-=-=-=-='));
+//
+// assertEquivalent(['-=-=-=-=-=', '', '', 'y', '-=-=-=-=-=-=-=y'], (dmp as any).diff_halfMatch_('-=-=-=-=-=-=-=-=-=-=-=-=y', '-=-=-=-=-=-=-=yy'));
+//
+// // Non-optimal halfmatch.
+// // Optimal diff would be -q+x=H-i+e=lloHe+Hu=llo-Hew+y not -qHillo+x=HelloHe-w+Hulloy
+// assertEquivalent(['qHillo', 'w', 'x', 'Hulloy', 'HelloHe'], (dmp as any).diff_halfMatch_('qHilloHelloHew', 'xHelloHeHulloy'));
+//
+// // Optimal no halfmatch.
+// dmp.Diff_Timeout = 0;
+// assertEquals(null, (dmp as any).diff_halfMatch_('qHilloHelloHew', 'xHelloHeHulloy'));
+// }
+//
+// export function testDiffLinesToChars() {
+// function assertLinesToCharsResultEquals(a: any, b: any) {
+// assertEquals(a.chars1, b.chars1);
+// assertEquals(a.chars2, b.chars2);
+// assertEquivalent(a.lineArray, b.lineArray);
+// }
+//
+// // Convert lines down to characters.
+// assertLinesToCharsResultEquals({ chars1: '\x01\x02\x01', chars2: '\x02\x01\x02', lineArray: ['', 'alpha\n', 'beta\n'] }, (dmp as any).diff_linesToChars_('alpha\nbeta\nalpha\n', 'beta\nalpha\nbeta\n'));
+//
+// assertLinesToCharsResultEquals({ chars1: '', chars2: '\x01\x02\x03\x03', lineArray: ['', 'alpha\r\n', 'beta\r\n', '\r\n'] }, (dmp as any).diff_linesToChars_('', 'alpha\r\nbeta\r\n\r\n\r\n'));
+//
+// assertLinesToCharsResultEquals({ chars1: '\x01', chars2: '\x02', lineArray: ['', 'a', 'b'] }, (dmp as any).diff_linesToChars_('a', 'b'));
+//
+// // More than 256 to reveal any 8-bit limitations.
+// var n = 300;
+// var lineList = [];
+// var charList = [];
+// for (var i = 1; i < n + 1; i++) {
+// lineList[i - 1] = i + '\n';
+// charList[i - 1] = String.fromCharCode(i);
+// }
+// assertEquals(n, lineList.length);
+// var lines = lineList.join('');
+// var chars = charList.join('');
+// assertEquals(n, chars.length);
+// lineList.unshift('');
+// assertLinesToCharsResultEquals({ chars1: chars, chars2: '', lineArray: lineList }, (dmp as any).diff_linesToChars_(lines, ''));
+// }
+//
+// export function testDiffCharsToLines() {
+// // Convert chars up to lines.
+// var diffs: Diff[] = [new Diff(DIFF_EQUAL, '\x01\x02\x01'), new Diff(DIFF_INSERT, '\x02\x01\x02')];
+// (dmp as any).diff_charsToLines_(diffs, ['', 'alpha\n', 'beta\n']);
+// assertEquivalent([new Diff(DIFF_EQUAL, 'alpha\nbeta\nalpha\n'), new Diff(DIFF_INSERT, 'beta\nalpha\nbeta\n')], diffs);
+//
+// // More than 256 to reveal any 8-bit limitations.
+// var n = 300;
+// var lineList = [];
+// var charList = [];
+// for (var i = 1; i < n + 1; i++) {
+// lineList[i - 1] = i + '\n';
+// charList[i - 1] = String.fromCharCode(i);
+// }
+// assertEquals(n, lineList.length);
+// var lines = lineList.join('');
+// var chars = charList.join('');
+// assertEquals(n, chars.length);
+// lineList.unshift('');
+// var diffs: Diff[] = [new Diff(DIFF_DELETE, chars)];
+// (dmp as any).diff_charsToLines_(diffs, lineList);
+// assertEquivalent([new Diff(DIFF_DELETE, lines)], diffs);
+//
+// // More than 65536 to verify any 16-bit limitation.
+// lineList = [];
+// for (var i = 0; i < 66000; i++) {
+// lineList[i] = i + '\n';
+// }
+// chars = lineList.join('');
+// var results = (dmp as any).diff_linesToChars_(chars, '');
+// diffs = [new Diff(DIFF_INSERT, results.chars1)];
+// (dmp as any).diff_charsToLines_(diffs, results.lineArray);
+// assertEquals(chars, diffs[0].text);
+// }
+//
+// export function testDiffCleanupMerge() {
+// // Cleanup a messy diff.
+// // Null case.
+// var diffs: Diff[] = [];
+// dmp.diff_cleanupMerge(diffs);
+// assertEquivalent([], diffs);
+//
+// // No change case.
+// diffs = [new Diff(DIFF_EQUAL, 'a'), new Diff(DIFF_DELETE, 'b'), new Diff(DIFF_INSERT, 'c')];
+// dmp.diff_cleanupMerge(diffs);
+// assertEquivalent([new Diff(DIFF_EQUAL, 'a'), new Diff(DIFF_DELETE, 'b'), new Diff(DIFF_INSERT, 'c')], diffs);
+//
+// // Merge equalities.
+// diffs = [new Diff(DIFF_EQUAL, 'a'), new Diff(DIFF_EQUAL, 'b'), new Diff(DIFF_EQUAL, 'c')];
+// dmp.diff_cleanupMerge(diffs);
+// assertEquivalent([new Diff(DIFF_EQUAL, 'abc')], diffs);
+//
+// // Merge deletions.
+// diffs = [new Diff(DIFF_DELETE, 'a'), new Diff(DIFF_DELETE, 'b'), new Diff(DIFF_DELETE, 'c')];
+// dmp.diff_cleanupMerge(diffs);
+// assertEquivalent([new Diff(DIFF_DELETE, 'abc')], diffs);
+//
+// // Merge insertions.
+// diffs = [new Diff(DIFF_INSERT, 'a'), new Diff(DIFF_INSERT, 'b'), new Diff(DIFF_INSERT, 'c')];
+// dmp.diff_cleanupMerge(diffs);
+// assertEquivalent([new Diff(DIFF_INSERT, 'abc')], diffs);
+//
+// // Merge interweave.
+// diffs = [new Diff(DIFF_DELETE, 'a'), new Diff(DIFF_INSERT, 'b'), new Diff(DIFF_DELETE, 'c'), new Diff(DIFF_INSERT, 'd'), new Diff(DIFF_EQUAL, 'e'), new Diff(DIFF_EQUAL, 'f')];
+// dmp.diff_cleanupMerge(diffs);
+// assertEquivalent([new Diff(DIFF_DELETE, 'ac'), new Diff(DIFF_INSERT, 'bd'), new Diff(DIFF_EQUAL, 'ef')], diffs);
+//
+// // Prefix and suffix detection.
+// diffs = [new Diff(DIFF_DELETE, 'a'), new Diff(DIFF_INSERT, 'abc'), new Diff(DIFF_DELETE, 'dc')];
+// dmp.diff_cleanupMerge(diffs);
+// assertEquivalent([new Diff(DIFF_EQUAL, 'a'), new Diff(DIFF_DELETE, 'd'), new Diff(DIFF_INSERT, 'b'), new Diff(DIFF_EQUAL, 'c')], diffs);
+//
+// // Prefix and suffix detection with equalities.
+// diffs = [new Diff(DIFF_EQUAL, 'x'), new Diff(DIFF_DELETE, 'a'), new Diff(DIFF_INSERT, 'abc'), new Diff(DIFF_DELETE, 'dc'), new Diff(DIFF_EQUAL, 'y')];
+// dmp.diff_cleanupMerge(diffs);
+// assertEquivalent([new Diff(DIFF_EQUAL, 'xa'), new Diff(DIFF_DELETE, 'd'), new Diff(DIFF_INSERT, 'b'), new Diff(DIFF_EQUAL, 'cy')], diffs);
+//
+// // Slide edit left.
+// diffs = [new Diff(DIFF_EQUAL, 'a'), new Diff(DIFF_INSERT, 'ba'), new Diff(DIFF_EQUAL, 'c')];
+// dmp.diff_cleanupMerge(diffs);
+// assertEquivalent([new Diff(DIFF_INSERT, 'ab'), new Diff(DIFF_EQUAL, 'ac')], diffs);
+//
+// // Slide edit right.
+// diffs = [new Diff(DIFF_EQUAL, 'c'), new Diff(DIFF_INSERT, 'ab'), new Diff(DIFF_EQUAL, 'a')];
+// dmp.diff_cleanupMerge(diffs);
+// assertEquivalent([new Diff(DIFF_EQUAL, 'ca'), new Diff(DIFF_INSERT, 'ba')], diffs);
+//
+// // Slide edit left recursive.
+// diffs = [new Diff(DIFF_EQUAL, 'a'), new Diff(DIFF_DELETE, 'b'), new Diff(DIFF_EQUAL, 'c'), new Diff(DIFF_DELETE, 'ac'), new Diff(DIFF_EQUAL, 'x')];
+// dmp.diff_cleanupMerge(diffs);
+// assertEquivalent([new Diff(DIFF_DELETE, 'abc'), new Diff(DIFF_EQUAL, 'acx')], diffs);
+//
+// // Slide edit right recursive.
+// diffs = [new Diff(DIFF_EQUAL, 'x'), new Diff(DIFF_DELETE, 'ca'), new Diff(DIFF_EQUAL, 'c'), new Diff(DIFF_DELETE, 'b'), new Diff(DIFF_EQUAL, 'a')];
+// dmp.diff_cleanupMerge(diffs);
+// assertEquivalent([new Diff(DIFF_EQUAL, 'xca'), new Diff(DIFF_DELETE, 'cba')], diffs);
+//
+// // Empty merge.
+// diffs = [new Diff(DIFF_DELETE, 'b'), new Diff(DIFF_INSERT, 'ab'), new Diff(DIFF_EQUAL, 'c')];
+// dmp.diff_cleanupMerge(diffs);
+// assertEquivalent([new Diff(DIFF_INSERT, 'a'), new Diff(DIFF_EQUAL, 'bc')], diffs);
+//
+// // Empty equality.
+// diffs = [new Diff(DIFF_EQUAL, ''), new Diff(DIFF_INSERT, 'a'), new Diff(DIFF_EQUAL, 'b')];
+// dmp.diff_cleanupMerge(diffs);
+// assertEquivalent([new Diff(DIFF_INSERT, 'a'), new Diff(DIFF_EQUAL, 'b')], diffs);
+// }
+//
+// export function testDiffCleanupSemanticLossless() {
+// // Slide diffs to match logical boundaries.
+// // Null case.
+// var diffs: Diff[] = [];
+// dmp.diff_cleanupSemanticLossless(diffs);
+// assertEquivalent([], diffs);
+//
+// // Blank lines.
+// diffs = [new Diff(DIFF_EQUAL, 'AAA\r\n\r\nBBB'), new Diff(DIFF_INSERT, '\r\nDDD\r\n\r\nBBB'), new Diff(DIFF_EQUAL, '\r\nEEE')];
+// dmp.diff_cleanupSemanticLossless(diffs);
+// assertEquivalent([new Diff(DIFF_EQUAL, 'AAA\r\n\r\n'), new Diff(DIFF_INSERT, 'BBB\r\nDDD\r\n\r\n'), new Diff(DIFF_EQUAL, 'BBB\r\nEEE')], diffs);
+//
+// // Line boundaries.
+// diffs = [new Diff(DIFF_EQUAL, 'AAA\r\nBBB'), new Diff(DIFF_INSERT, ' DDD\r\nBBB'), new Diff(DIFF_EQUAL, ' EEE')];
+// dmp.diff_cleanupSemanticLossless(diffs);
+// assertEquivalent([new Diff(DIFF_EQUAL, 'AAA\r\n'), new Diff(DIFF_INSERT, 'BBB DDD\r\n'), new Diff(DIFF_EQUAL, 'BBB EEE')], diffs);
+//
+// // Word boundaries.
+// diffs = [new Diff(DIFF_EQUAL, 'The c'), new Diff(DIFF_INSERT, 'ow and the c'), new Diff(DIFF_EQUAL, 'at.')];
+// dmp.diff_cleanupSemanticLossless(diffs);
+// assertEquivalent([new Diff(DIFF_EQUAL, 'The '), new Diff(DIFF_INSERT, 'cow and the '), new Diff(DIFF_EQUAL, 'cat.')], diffs);
+//
+// // Alphanumeric boundaries.
+// diffs = [new Diff(DIFF_EQUAL, 'The-c'), new Diff(DIFF_INSERT, 'ow-and-the-c'), new Diff(DIFF_EQUAL, 'at.')];
+// dmp.diff_cleanupSemanticLossless(diffs);
+// assertEquivalent([new Diff(DIFF_EQUAL, 'The-'), new Diff(DIFF_INSERT, 'cow-and-the-'), new Diff(DIFF_EQUAL, 'cat.')], diffs);
+//
+// // Hitting the start.
+// diffs = [new Diff(DIFF_EQUAL, 'a'), new Diff(DIFF_DELETE, 'a'), new Diff(DIFF_EQUAL, 'ax')];
+// dmp.diff_cleanupSemanticLossless(diffs);
+// assertEquivalent([new Diff(DIFF_DELETE, 'a'), new Diff(DIFF_EQUAL, 'aax')], diffs);
+//
+// // Hitting the end.
+// diffs = [new Diff(DIFF_EQUAL, 'xa'), new Diff(DIFF_DELETE, 'a'), new Diff(DIFF_EQUAL, 'a')];
+// dmp.diff_cleanupSemanticLossless(diffs);
+// assertEquivalent([new Diff(DIFF_EQUAL, 'xaa'), new Diff(DIFF_DELETE, 'a')], diffs);
+//
+// // Sentence boundaries.
+// diffs = [new Diff(DIFF_EQUAL, 'The xxx. The '), new Diff(DIFF_INSERT, 'zzz. The '), new Diff(DIFF_EQUAL, 'yyy.')];
+// dmp.diff_cleanupSemanticLossless(diffs);
+// assertEquivalent([new Diff(DIFF_EQUAL, 'The xxx.'), new Diff(DIFF_INSERT, ' The zzz.'), new Diff(DIFF_EQUAL, ' The yyy.')], diffs);
+// }
+//
+// export function testDiffCleanupSemantic() {
+// // Cleanup semantically trivial equalities.
+// // Null case.
+// var diffs: Diff[] = [];
+// dmp.diff_cleanupSemantic(diffs);
+// assertEquivalent([], diffs);
+//
+// // No elimination #1.
+// diffs = [new Diff(DIFF_DELETE, 'ab'), new Diff(DIFF_INSERT, 'cd'), new Diff(DIFF_EQUAL, '12'), new Diff(DIFF_DELETE, 'e')];
+// dmp.diff_cleanupSemantic(diffs);
+// assertEquivalent([new Diff(DIFF_DELETE, 'ab'), new Diff(DIFF_INSERT, 'cd'), new Diff(DIFF_EQUAL, '12'), new Diff(DIFF_DELETE, 'e')], diffs);
+//
+// // No elimination #2.
+// diffs = [new Diff(DIFF_DELETE, 'abc'), new Diff(DIFF_INSERT, 'ABC'), new Diff(DIFF_EQUAL, '1234'), new Diff(DIFF_DELETE, 'wxyz')];
+// dmp.diff_cleanupSemantic(diffs);
+// assertEquivalent([new Diff(DIFF_DELETE, 'abc'), new Diff(DIFF_INSERT, 'ABC'), new Diff(DIFF_EQUAL, '1234'), new Diff(DIFF_DELETE, 'wxyz')], diffs);
+//
+// // Simple elimination.
+// diffs = [new Diff(DIFF_DELETE, 'a'), new Diff(DIFF_EQUAL, 'b'), new Diff(DIFF_DELETE, 'c')];
+// dmp.diff_cleanupSemantic(diffs);
+// assertEquivalent([new Diff(DIFF_DELETE, 'abc'), new Diff(DIFF_INSERT, 'b')], diffs);
+//
+// // Backpass elimination.
+// diffs = [new Diff(DIFF_DELETE, 'ab'), new Diff(DIFF_EQUAL, 'cd'), new Diff(DIFF_DELETE, 'e'), new Diff(DIFF_EQUAL, 'f'), new Diff(DIFF_INSERT, 'g')];
+// dmp.diff_cleanupSemantic(diffs);
+// assertEquivalent([new Diff(DIFF_DELETE, 'abcdef'), new Diff(DIFF_INSERT, 'cdfg')], diffs);
+//
+// // Multiple eliminations.
+// diffs = [new Diff(DIFF_INSERT, '1'), new Diff(DIFF_EQUAL, 'A'), new Diff(DIFF_DELETE, 'B'), new Diff(DIFF_INSERT, '2'), new Diff(DIFF_EQUAL, '_'), new Diff(DIFF_INSERT, '1'), new Diff(DIFF_EQUAL, 'A'), new Diff(DIFF_DELETE, 'B'), new Diff(DIFF_INSERT, '2')];
+// dmp.diff_cleanupSemantic(diffs);
+// assertEquivalent([new Diff(DIFF_DELETE, 'AB_AB'), new Diff(DIFF_INSERT, '1A2_1A2')], diffs);
+//
+// // Word boundaries.
+// diffs = [new Diff(DIFF_EQUAL, 'The c'), new Diff(DIFF_DELETE, 'ow and the c'), new Diff(DIFF_EQUAL, 'at.')];
+// dmp.diff_cleanupSemantic(diffs);
+// assertEquivalent([new Diff(DIFF_EQUAL, 'The '), new Diff(DIFF_DELETE, 'cow and the '), new Diff(DIFF_EQUAL, 'cat.')], diffs);
+//
+// // No overlap elimination.
+// diffs = [new Diff(DIFF_DELETE, 'abcxx'), new Diff(DIFF_INSERT, 'xxdef')];
+// dmp.diff_cleanupSemantic(diffs);
+// assertEquivalent([new Diff(DIFF_DELETE, 'abcxx'), new Diff(DIFF_INSERT, 'xxdef')], diffs);
+//
+// // Overlap elimination.
+// diffs = [new Diff(DIFF_DELETE, 'abcxxx'), new Diff(DIFF_INSERT, 'xxxdef')];
+// dmp.diff_cleanupSemantic(diffs);
+// assertEquivalent([new Diff(DIFF_DELETE, 'abc'), new Diff(DIFF_EQUAL, 'xxx'), new Diff(DIFF_INSERT, 'def')], diffs);
+//
+// // Reverse overlap elimination.
+// diffs = [new Diff(DIFF_DELETE, 'xxxabc'), new Diff(DIFF_INSERT, 'defxxx')];
+// dmp.diff_cleanupSemantic(diffs);
+// assertEquivalent([new Diff(DIFF_INSERT, 'def'), new Diff(DIFF_EQUAL, 'xxx'), new Diff(DIFF_DELETE, 'abc')], diffs);
+//
+// // Two overlap eliminations.
+// diffs = [new Diff(DIFF_DELETE, 'abcd1212'), new Diff(DIFF_INSERT, '1212efghi'), new Diff(DIFF_EQUAL, '----'), new Diff(DIFF_DELETE, 'A3'), new Diff(DIFF_INSERT, '3BC')];
+// dmp.diff_cleanupSemantic(diffs);
+// assertEquivalent([new Diff(DIFF_DELETE, 'abcd'), new Diff(DIFF_EQUAL, '1212'), new Diff(DIFF_INSERT, 'efghi'), new Diff(DIFF_EQUAL, '----'), new Diff(DIFF_DELETE, 'A'), new Diff(DIFF_EQUAL, '3'), new Diff(DIFF_INSERT, 'BC')], diffs);
+// }
+//
+// export function testDiffCleanupEfficiency() {
+// // Cleanup operationally trivial equalities.
+// dmp.Diff_EditCost = 4;
+// // Null case.
+// var diffs: Diff[] = [];
+// dmp.diff_cleanupEfficiency(diffs);
+// assertEquivalent([], diffs);
+//
+// // No elimination.
+// diffs = [new Diff(DIFF_DELETE, 'ab'), new Diff(DIFF_INSERT, '12'), new Diff(DIFF_EQUAL, 'wxyz'), new Diff(DIFF_DELETE, 'cd'), new Diff(DIFF_INSERT, '34')];
+// dmp.diff_cleanupEfficiency(diffs);
+// assertEquivalent([new Diff(DIFF_DELETE, 'ab'), new Diff(DIFF_INSERT, '12'), new Diff(DIFF_EQUAL, 'wxyz'), new Diff(DIFF_DELETE, 'cd'), new Diff(DIFF_INSERT, '34')], diffs);
+//
+// // Four-edit elimination.
+// diffs = [new Diff(DIFF_DELETE, 'ab'), new Diff(DIFF_INSERT, '12'), new Diff(DIFF_EQUAL, 'xyz'), new Diff(DIFF_DELETE, 'cd'), new Diff(DIFF_INSERT, '34')];
+// dmp.diff_cleanupEfficiency(diffs);
+// assertEquivalent([new Diff(DIFF_DELETE, 'abxyzcd'), new Diff(DIFF_INSERT, '12xyz34')], diffs);
+//
+// // Three-edit elimination.
+// diffs = [new Diff(DIFF_INSERT, '12'), new Diff(DIFF_EQUAL, 'x'), new Diff(DIFF_DELETE, 'cd'), new Diff(DIFF_INSERT, '34')];
+// dmp.diff_cleanupEfficiency(diffs);
+// assertEquivalent([new Diff(DIFF_DELETE, 'xcd'), new Diff(DIFF_INSERT, '12x34')], diffs);
+//
+// // Backpass elimination.
+// diffs = [new Diff(DIFF_DELETE, 'ab'), new Diff(DIFF_INSERT, '12'), new Diff(DIFF_EQUAL, 'xy'), new Diff(DIFF_INSERT, '34'), new Diff(DIFF_EQUAL, 'z'), new Diff(DIFF_DELETE, 'cd'), new Diff(DIFF_INSERT, '56')];
+// dmp.diff_cleanupEfficiency(diffs);
+// assertEquivalent([new Diff(DIFF_DELETE, 'abxyzcd'), new Diff(DIFF_INSERT, '12xy34z56')], diffs);
+//
+// // High cost elimination.
+// dmp.Diff_EditCost = 5;
+// diffs = [new Diff(DIFF_DELETE, 'ab'), new Diff(DIFF_INSERT, '12'), new Diff(DIFF_EQUAL, 'wxyz'), new Diff(DIFF_DELETE, 'cd'), new Diff(DIFF_INSERT, '34')];
+// dmp.diff_cleanupEfficiency(diffs);
+// assertEquivalent([new Diff(DIFF_DELETE, 'abwxyzcd'), new Diff(DIFF_INSERT, '12wxyz34')], diffs);
+// dmp.Diff_EditCost = 4;
+// }
+//
+// export function testDiffPrettyHtml() {
+// // Pretty print.
+// var diffs: Diff[] = [new Diff(DIFF_EQUAL, 'a\n'), new Diff(DIFF_DELETE, 'b'), new Diff(DIFF_INSERT, 'c&d')];
+// assertEquals('a¶
<B>b</B>c&d', dmp.diff_prettyHtml(diffs));
+// }
+//
+// export function testDiffText() {
+// // Compute the source and destination texts.
+// var diffs: Diff[] = [new Diff(DIFF_EQUAL, 'jump'), new Diff(DIFF_DELETE, 's'), new Diff(DIFF_INSERT, 'ed'), new Diff(DIFF_EQUAL, ' over '), new Diff(DIFF_DELETE, 'the'), new Diff(DIFF_INSERT, 'a'), new Diff(DIFF_EQUAL, ' lazy')];
+// assertEquals('jumps over the lazy', dmp.diff_text1(diffs));
+//
+// assertEquals('jumped over a lazy', dmp.diff_text2(diffs));
+// }
+//
+// export function testDiffDelta() {
+// // Convert a diff into delta string.
+// var diffs: Diff[] = [new Diff(DIFF_EQUAL, 'jump'), new Diff(DIFF_DELETE, 's'), new Diff(DIFF_INSERT, 'ed'), new Diff(DIFF_EQUAL, ' over '), new Diff(DIFF_DELETE, 'the'), new Diff(DIFF_INSERT, 'a'), new Diff(DIFF_EQUAL, ' lazy'), new Diff(DIFF_INSERT, 'old dog')];
+// var text1 = dmp.diff_text1(diffs);
+// assertEquals('jumps over the lazy', text1);
+//
+// var delta = dmp.diff_toDelta(diffs);
+// assertEquals('=4\t-1\t+ed\t=6\t-3\t+a\t=5\t+old dog', delta);
+//
+// // Convert delta string into a diff.
+// assertEquivalent(diffs, dmp.diff_fromDelta(text1, delta));
+//
+// // Generates error (19 != 20).
+// try {
+// dmp.diff_fromDelta(text1 + 'x', delta);
+// assertEquals(Error, null);
+// } catch (e) {
+// // Exception expected.
+// }
+//
+// // Generates error (19 != 18).
+// try {
+// dmp.diff_fromDelta(text1.substring(1), delta);
+// assertEquals(Error, null);
+// } catch (e) {
+// // Exception expected.
+// }
+//
+// // Generates error (%c3%xy invalid Unicode).
+// try {
+// dmp.diff_fromDelta('', '+%c3%xy');
+// assertEquals(Error, null);
+// } catch (e) {
+// // Exception expected.
+// }
+//
+// // Test deltas with special characters.
+// diffs = [new Diff(DIFF_EQUAL, '\u0680 \x00 \t %'), new Diff(DIFF_DELETE, '\u0681 \x01 \n ^'), new Diff(DIFF_INSERT, '\u0682 \x02 \\ |')];
+// text1 = dmp.diff_text1(diffs);
+// assertEquals('\u0680 \x00 \t %\u0681 \x01 \n ^', text1);
+//
+// delta = dmp.diff_toDelta(diffs);
+// assertEquals('=7\t-7\t+%DA%82 %02 %5C %7C', delta);
+//
+// // Convert delta string into a diff.
+// assertEquivalent(diffs, dmp.diff_fromDelta(text1, delta));
+//
+// // Verify pool of unchanged characters.
+// diffs = [new Diff(DIFF_INSERT, 'A-Z a-z 0-9 - _ . ! ~ * \' ( ) ; / ? : @ & = + $ , # ')];
+// var text2 = dmp.diff_text2(diffs);
+// assertEquals('A-Z a-z 0-9 - _ . ! ~ * \' ( ) ; / ? : @ & = + $ , # ', text2);
+//
+// delta = dmp.diff_toDelta(diffs);
+// assertEquals('+A-Z a-z 0-9 - _ . ! ~ * \' ( ) ; / ? : @ & = + $ , # ', delta);
+//
+// // Convert delta string into a diff.
+// assertEquivalent(diffs, dmp.diff_fromDelta('', delta));
+//
+// // 160 kb string.
+// var a = 'abcdefghij';
+// for (var i = 0; i < 14; i++) {
+// a += a;
+// }
+// diffs = [new Diff(DIFF_INSERT, a)];
+// delta = dmp.diff_toDelta(diffs);
+// assertEquals('+' + a, delta);
+//
+// // Convert delta string into a diff.
+// assertEquivalent(diffs, dmp.diff_fromDelta('', delta));
+// }
+//
+// export function testDiffXIndex() {
+// // Translate a location in text1 to text2.
+// // Translation on equality.
+// assertEquals(5, dmp.diff_xIndex([new Diff(DIFF_DELETE, 'a'), new Diff(DIFF_INSERT, '1234'), new Diff(DIFF_EQUAL, 'xyz')], 2));
+//
+// // Translation on deletion.
+// assertEquals(1, dmp.diff_xIndex([new Diff(DIFF_EQUAL, 'a'), new Diff(DIFF_DELETE, '1234'), new Diff(DIFF_EQUAL, 'xyz')], 3));
+// }
+//
+// export function testDiffLevenshtein() {
+// // Levenshtein with trailing equality.
+// assertEquals(4, dmp.diff_levenshtein([new Diff(DIFF_DELETE, 'abc'), new Diff(DIFF_INSERT, '1234'), new Diff(DIFF_EQUAL, 'xyz')]));
+// // Levenshtein with leading equality.
+// assertEquals(4, dmp.diff_levenshtein([new Diff(DIFF_EQUAL, 'xyz'), new Diff(DIFF_DELETE, 'abc'), new Diff(DIFF_INSERT, '1234')]));
+// // Levenshtein with middle equality.
+// assertEquals(7, dmp.diff_levenshtein([new Diff(DIFF_DELETE, 'abc'), new Diff(DIFF_EQUAL, 'xyz'), new Diff(DIFF_INSERT, '1234')]));
+// }
+//
+// export function testDiffBisect() {
+// // Normal.
+// var a = 'cat';
+// var b = 'map';
+// // Since the resulting diff hasn't been normalized, it would be ok if
+// // the insertion and deletion pairs are swapped.
+// // If the order changes, tweak this test as required.
+// assertEquivalent([new Diff(DIFF_DELETE, 'c'), new Diff(DIFF_INSERT, 'm'), new Diff(DIFF_EQUAL, 'a'), new Diff(DIFF_DELETE, 't'), new Diff(DIFF_INSERT, 'p')], (dmp as any).diff_bisect_(a, b, Number.MAX_VALUE));
+//
+// // Timeout.
+// assertEquivalent([new Diff(DIFF_DELETE, 'cat'), new Diff(DIFF_INSERT, 'map')], (dmp as any).diff_bisect_(a, b, 0));
+// }
+//
+// export function testDiffMain() {
+// // Perform a trivial diff.
+// // Null case.
+// assertEquivalent([], dmp.diff_main('', '', false));
+//
+// // Equality.
+// assertEquivalent([new Diff(DIFF_EQUAL, 'abc')], dmp.diff_main('abc', 'abc', false));
+//
+// // Simple insertion.
+// assertEquivalent([new Diff(DIFF_EQUAL, 'ab'), new Diff(DIFF_INSERT, '123'), new Diff(DIFF_EQUAL, 'c')], dmp.diff_main('abc', 'ab123c', false));
+//
+// // Simple deletion.
+// assertEquivalent([new Diff(DIFF_EQUAL, 'a'), new Diff(DIFF_DELETE, '123'), new Diff(DIFF_EQUAL, 'bc')], dmp.diff_main('a123bc', 'abc', false));
+//
+// // Two insertions.
+// assertEquivalent([new Diff(DIFF_EQUAL, 'a'), new Diff(DIFF_INSERT, '123'), new Diff(DIFF_EQUAL, 'b'), new Diff(DIFF_INSERT, '456'), new Diff(DIFF_EQUAL, 'c')], dmp.diff_main('abc', 'a123b456c', false));
+//
+// // Two deletions.
+// assertEquivalent([new Diff(DIFF_EQUAL, 'a'), new Diff(DIFF_DELETE, '123'), new Diff(DIFF_EQUAL, 'b'), new Diff(DIFF_DELETE, '456'), new Diff(DIFF_EQUAL, 'c')], dmp.diff_main('a123b456c', 'abc', false));
+//
+// // Perform a real diff.
+// // Switch off the timeout.
+// dmp.Diff_Timeout = 0;
+// // Simple cases.
+// assertEquivalent([new Diff(DIFF_DELETE, 'a'), new Diff(DIFF_INSERT, 'b')], dmp.diff_main('a', 'b', false));
+//
+// assertEquivalent([new Diff(DIFF_DELETE, 'Apple'), new Diff(DIFF_INSERT, 'Banana'), new Diff(DIFF_EQUAL, 's are a'), new Diff(DIFF_INSERT, 'lso'), new Diff(DIFF_EQUAL, ' fruit.')], dmp.diff_main('Apples are a fruit.', 'Bananas are also fruit.', false));
+//
+// assertEquivalent([new Diff(DIFF_DELETE, 'a'), new Diff(DIFF_INSERT, '\u0680'), new Diff(DIFF_EQUAL, 'x'), new Diff(DIFF_DELETE, '\t'), new Diff(DIFF_INSERT, '\0')], dmp.diff_main('ax\t', '\u0680x\0', false));
+//
+// // Overlaps.
+// assertEquivalent([new Diff(DIFF_DELETE, '1'), new Diff(DIFF_EQUAL, 'a'), new Diff(DIFF_DELETE, 'y'), new Diff(DIFF_EQUAL, 'b'), new Diff(DIFF_DELETE, '2'), new Diff(DIFF_INSERT, 'xab')], dmp.diff_main('1ayb2', 'abxab', false));
+//
+// assertEquivalent([new Diff(DIFF_INSERT, 'xaxcx'), new Diff(DIFF_EQUAL, 'abc'), new Diff(DIFF_DELETE, 'y')], dmp.diff_main('abcy', 'xaxcxabc', false));
+//
+// assertEquivalent([new Diff(DIFF_DELETE, 'ABCD'), new Diff(DIFF_EQUAL, 'a'), new Diff(DIFF_DELETE, '='), new Diff(DIFF_INSERT, '-'), new Diff(DIFF_EQUAL, 'bcd'), new Diff(DIFF_DELETE, '='), new Diff(DIFF_INSERT, '-'), new Diff(DIFF_EQUAL, 'efghijklmnopqrs'), new Diff(DIFF_DELETE, 'EFGHIJKLMNOefg')], dmp.diff_main('ABCDa=bcd=efghijklmnopqrsEFGHIJKLMNOefg', 'a-bcd-efghijklmnopqrs', false));
+//
+// // Large equality.
+// assertEquivalent([new Diff(DIFF_INSERT, ' '), new Diff(DIFF_EQUAL, 'a'), new Diff(DIFF_INSERT, 'nd'), new Diff(DIFF_EQUAL, ' [[Pennsylvania]]'), new Diff(DIFF_DELETE, ' and [[New')], dmp.diff_main('a [[Pennsylvania]] and [[New', ' and [[Pennsylvania]]', false));
+//
+// // Timeout.
+// dmp.Diff_Timeout = 0.1; // 100ms
+// var a = '`Twas brillig, and the slithy toves\nDid gyre and gimble in the wabe:\nAll mimsy were the borogoves,\nAnd the mome raths outgrabe.\n';
+// var b = 'I am the very model of a modern major general,\nI\'ve information vegetable, animal, and mineral,\nI know the kings of England, and I quote the fights historical,\nFrom Marathon to Waterloo, in order categorical.\n';
+// // Increase the text lengths by 1024 times to ensure a timeout.
+// for (var i = 0; i < 10; i++) {
+// a += a;
+// b += b;
+// }
+// var startTime = (new Date()).getTime();
+// dmp.diff_main(a, b);
+// var endTime = (new Date()).getTime();
+// // Test that we took at least the timeout period.
+// assertTrue(dmp.Diff_Timeout * 1000 <= endTime - startTime);
+// // Test that we didn't take forever (be forgiving).
+// // Theoretically this test could fail very occasionally if the
+// // OS task swaps or locks up for a second at the wrong moment.
+// assertTrue(dmp.Diff_Timeout * 1000 * 2 > endTime - startTime);
+// dmp.Diff_Timeout = 0;
+//
+// // Test the linemode speedup.
+// // Must be long to pass the 100 char cutoff.
+// // Simple line-mode.
+// a = '1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n';
+// b = 'abcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\n';
+// assertEquivalent(dmp.diff_main(a, b, false), dmp.diff_main(a, b, true));
+//
+// // Single line-mode.
+// a = '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890';
+// b = 'abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij';
+// assertEquivalent(dmp.diff_main(a, b, false), dmp.diff_main(a, b, true));
+//
+// // Overlap line-mode.
+// a = '1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n';
+// b = 'abcdefghij\n1234567890\n1234567890\n1234567890\nabcdefghij\n1234567890\n1234567890\n1234567890\nabcdefghij\n1234567890\n1234567890\n1234567890\nabcdefghij\n';
+// var texts_linemode = diff_rebuildtexts(dmp.diff_main(a, b, true));
+// var texts_textmode = diff_rebuildtexts(dmp.diff_main(a, b, false));
+// assertEquivalent(texts_textmode, texts_linemode);
+//
+// // Test null inputs.
+// try {
+// dmp.diff_main(null, null);
+// assertEquals(Error, null);
+// } catch (e) {
+// // Exception expected.
+// }
+// }
+//
+//
+// // MATCH TEST FUNCTIONS
+//
+//
+// export function testMatchAlphabet() {
+// // Initialise the bitmasks for Bitap.
+// // Unique.
+// assertEquivalent({ 'a': 4, 'b': 2, 'c': 1 }, (dmp as any).match_alphabet_('abc'));
+//
+// // Duplicates.
+// assertEquivalent({ 'a': 37, 'b': 18, 'c': 8 }, (dmp as any).match_alphabet_('abcaba'));
+// }
+//
+// export function testMatchBitap() {
+// // Bitap algorithm.
+// dmp.Match_Distance = 100;
+// dmp.Match_Threshold = 0.5;
+// // Exact matches.
+// assertEquals(5, (dmp as any).match_bitap_('abcdefghijk', 'fgh', 5));
+//
+// assertEquals(5, (dmp as any).match_bitap_('abcdefghijk', 'fgh', 0));
+//
+// // Fuzzy matches.
+// assertEquals(4, (dmp as any).match_bitap_('abcdefghijk', 'efxhi', 0));
+//
+// assertEquals(2, (dmp as any).match_bitap_('abcdefghijk', 'cdefxyhijk', 5));
+//
+// assertEquals(-1, (dmp as any).match_bitap_('abcdefghijk', 'bxy', 1));
+//
+// // Overflow.
+// assertEquals(2, (dmp as any).match_bitap_('123456789xx0', '3456789x0', 2));
+//
+// // Threshold test.
+// dmp.Match_Threshold = 0.4;
+// assertEquals(4, (dmp as any).match_bitap_('abcdefghijk', 'efxyhi', 1));
+//
+// dmp.Match_Threshold = 0.3;
+// assertEquals(-1, (dmp as any).match_bitap_('abcdefghijk', 'efxyhi', 1));
+//
+// dmp.Match_Threshold = 0.0;
+// assertEquals(1, (dmp as any).match_bitap_('abcdefghijk', 'bcdef', 1));
+// dmp.Match_Threshold = 0.5;
+//
+// // Multiple select.
+// assertEquals(0, (dmp as any).match_bitap_('abcdexyzabcde', 'abccde', 3));
+//
+// assertEquals(8, (dmp as any).match_bitap_('abcdexyzabcde', 'abccde', 5));
+//
+// // Distance test.
+// dmp.Match_Distance = 10; // Strict location.
+// assertEquals(-1, (dmp as any).match_bitap_('abcdefghijklmnopqrstuvwxyz', 'abcdefg', 24));
+//
+// assertEquals(0, (dmp as any).match_bitap_('abcdefghijklmnopqrstuvwxyz', 'abcdxxefg', 1));
+//
+// dmp.Match_Distance = 1000; // Loose location.
+// assertEquals(0, (dmp as any).match_bitap_('abcdefghijklmnopqrstuvwxyz', 'abcdefg', 24));
+// }
+//
+// export function testMatchMain() {
+// // Full match.
+// // Shortcut matches.
+// assertEquals(0, dmp.match_main('abcdef', 'abcdef', 1000));
+//
+// assertEquals(-1, dmp.match_main('', 'abcdef', 1));
+//
+// assertEquals(3, dmp.match_main('abcdef', '', 3));
+//
+// assertEquals(3, dmp.match_main('abcdef', 'de', 3));
+//
+// // Beyond end match.
+// assertEquals(3, dmp.match_main("abcdef", "defy", 4));
+//
+// // Oversized pattern.
+// assertEquals(0, dmp.match_main("abcdef", "abcdefy", 0));
+//
+// // Complex match.
+// assertEquals(4, dmp.match_main('I am the very model of a modern major general.', ' that berry ', 5));
+//
+// // Test null inputs.
+// try {
+// dmp.match_main(null, null, 0);
+// assertEquals(Error, null);
+// } catch (e) {
+// // Exception expected.
+// }
+// }
+//
+//
+// // PATCH TEST FUNCTIONS
+//
+//
+// export function testPatchObj() {
+// // Patch Object.
+// var p = new patch_obj();
+// p.start1 = 20;
+// p.start2 = 21;
+// p.length1 = 18;
+// p.length2 = 17;
+// p.diffs = [new Diff(DIFF_EQUAL, 'jump'), new Diff(DIFF_DELETE, 's'), new Diff(DIFF_INSERT, 'ed'), new Diff(DIFF_EQUAL, ' over '), new Diff(DIFF_DELETE, 'the'), new Diff(DIFF_INSERT, 'a'), new Diff(DIFF_EQUAL, '\nlaz')];
+// var strp = p.toString();
+// assertEquals('@@ -21,18 +22,17 @@\n jump\n-s\n+ed\n over \n-the\n+a\n %0Alaz\n', strp);
+// }
+//
+// export function testPatchFromText() {
+// assertEquivalent([], dmp.patch_fromText(strp));
+//
+// var strp = '@@ -21,18 +22,17 @@\n jump\n-s\n+ed\n over \n-the\n+a\n %0Alaz\n';
+// assertEquals(strp, dmp.patch_fromText(strp)[0].toString());
+//
+// assertEquals('@@ -1 +1 @@\n-a\n+b\n', dmp.patch_fromText('@@ -1 +1 @@\n-a\n+b\n')[0].toString());
+//
+// assertEquals('@@ -1,3 +0,0 @@\n-abc\n', dmp.patch_fromText('@@ -1,3 +0,0 @@\n-abc\n')[0].toString());
+//
+// assertEquals('@@ -0,0 +1,3 @@\n+abc\n', dmp.patch_fromText('@@ -0,0 +1,3 @@\n+abc\n')[0].toString());
+//
+// // Generates error.
+// try {
+// dmp.patch_fromText('Bad\nPatch\n');
+// assertEquals(Error, null);
+// } catch (e) {
+// // Exception expected.
+// }
+// }
+//
+// export function testPatchToText() {
+// var strp = '@@ -21,18 +22,17 @@\n jump\n-s\n+ed\n over \n-the\n+a\n laz\n';
+// var p = dmp.patch_fromText(strp);
+// assertEquals(strp, dmp.patch_toText(p));
+//
+// strp = '@@ -1,9 +1,9 @@\n-f\n+F\n oo+fooba\n@@ -7,9 +7,9 @@\n obar\n-,\n+.\n tes\n';
+// p = dmp.patch_fromText(strp);
+// assertEquals(strp, dmp.patch_toText(p));
+// }
+//
+// function testPatchSurrogates() {
+// var p, p2, strp;
+//
+// // These share the same high surrogate prefix
+// p = dmp.patch_make('\u{1F30D}', '\u{1F308}');
+// strp = dmp.patch_toText(p);
+// p2 = dmp.patch_fromText(strp);
+// assertEquivalent(p, p2);
+//
+// // These share the same low surrogate suffix
+// p = dmp.patch_make('\u{10120}', '\u{10520}');
+// strp = dmp.patch_toText(p);
+// p2 = dmp.patch_fromText(strp);
+// assertEquivalent(p, p2);
+//
+// // No common prefix, but later there's the same high surrogate char
+// p = dmp.patch_make('abbb\u{1F30D}', 'cbbb\u{1F308}');
+// strp = dmp.patch_toText(p);
+// p2 = dmp.patch_fromText(strp);
+// assertEquivalent(p, p2);
+//
+// // No common suffix, but earlier there's the same low surrogate char
+// p = dmp.patch_make('\u{10120}aaac', '\u{10520}aaab');
+// strp = dmp.patch_toText(p);
+// p2 = dmp.patch_fromText(strp);
+// assertEquivalent(p, p2);
+//
+// // No common suffix, but earlier there's the same low surrogate char
+// p = dmp.patch_make('abbb\u{10120}aaac', '\u{10520}aaab');
+// strp = dmp.patch_toText(p);
+// p2 = dmp.patch_fromText(strp);
+// assertEquivalent(p, p2);
+//
+// var padding1 = "";
+// while (padding1.length < 100) {
+// padding1 += String.fromCharCode(50 + padding1.length);
+// }
+//
+// var padding2 = "";
+// while (padding2.length < 100) {
+// padding2 += String.fromCharCode(200 + padding2.length);
+// }
+//
+// // Add some random padding
+// p = dmp.patch_make(padding1+'\u{10120}'+padding2, padding2+'\u{10520}'+padding1);
+// strp = dmp.patch_toText(p);
+// p2 = dmp.patch_fromText(strp);
+// assertEquivalent(p, p2);
+// }
+//
+// export function testPatchAddContext() {
+// dmp.Patch_Margin = 4;
+// var p = dmp.patch_fromText('@@ -21,4 +21,10 @@\n-jump\n+somersault\n')[0];
+// (dmp as any).patch_addContext_(p, 'The quick brown fox jumps over the lazy dog.');
+// assertEquals('@@ -17,12 +17,18 @@\n fox \n-jump\n+somersault\n s ov\n', p.toString());
+//
+// // Same, but not enough trailing context.
+// p = dmp.patch_fromText('@@ -21,4 +21,10 @@\n-jump\n+somersault\n')[0];
+// (dmp as any).patch_addContext_(p, 'The quick brown fox jumps.');
+// assertEquals('@@ -17,10 +17,16 @@\n fox \n-jump\n+somersault\n s.\n', p.toString());
+//
+// // Same, but not enough leading context.
+// p = dmp.patch_fromText('@@ -3 +3,2 @@\n-e\n+at\n')[0];
+// (dmp as any).patch_addContext_(p, 'The quick brown fox jumps.');
+// assertEquals('@@ -1,7 +1,8 @@\n Th\n-e\n+at\n qui\n', p.toString());
+//
+// // Same, but with ambiguity.
+// p = dmp.patch_fromText('@@ -3 +3,2 @@\n-e\n+at\n')[0];
+// (dmp as any).patch_addContext_(p, 'The quick brown fox jumps. The quick brown fox crashes.');
+// assertEquals('@@ -1,27 +1,28 @@\n Th\n-e\n+at\n quick brown fox jumps. \n', p.toString());
+// }
+//
+// export function testPatchMake() {
+// // Null case.
+// var patches = dmp.patch_make('', '');
+// assertEquals('', dmp.patch_toText(patches));
+//
+// var text1 = 'The quick brown fox jumps over the lazy dog.';
+// var text2 = 'That quick brown fox jumped over a lazy dog.';
+// // Text2+Text1 inputs.
+// var expectedPatch = '@@ -1,8 +1,7 @@\n Th\n-at\n+e\n qui\n@@ -21,17 +21,18 @@\n jump\n-ed\n+s\n over \n-a\n+the\n laz\n';
+// // The second patch must be "-21,17 +21,18", not "-22,17 +21,18" due to rolling context.
+// patches = dmp.patch_make(text2, text1);
+// assertEquals(expectedPatch, dmp.patch_toText(patches));
+//
+// // Text1+Text2 inputs.
+// expectedPatch = '@@ -1,11 +1,12 @@\n Th\n-e\n+at\n quick b\n@@ -22,18 +22,17 @@\n jump\n-s\n+ed\n over \n-the\n+a\n laz\n';
+// patches = dmp.patch_make(text1, text2);
+// assertEquals(expectedPatch, dmp.patch_toText(patches));
+//
+// // Diff input.
+// var diffs = dmp.diff_main(text1, text2, false);
+// patches = dmp.patch_make(diffs);
+// assertEquals(expectedPatch, dmp.patch_toText(patches));
+//
+// // Text1+Diff inputs.
+// patches = dmp.patch_make(text1, diffs);
+// assertEquals(expectedPatch, dmp.patch_toText(patches));
+//
+// // Text1+Text2+Diff inputs (deprecated).
+// patches = dmp.patch_make(text1, text2, diffs);
+// assertEquals(expectedPatch, dmp.patch_toText(patches));
+//
+// // Character encoding.
+// patches = dmp.patch_make('`1234567890-=[]\\;\',./', '~!@#$%^&*()_+{}|:"<>?');
+// assertEquals('@@ -1,21 +1,21 @@\n-%601234567890-=%5B%5D%5C;\',./\n+~!@#$%25%5E&*()_+%7B%7D%7C:%22%3C%3E?\n', dmp.patch_toText(patches));
+//
+// // Character decoding.
+// diffs = [new Diff(DIFF_DELETE, '`1234567890-=[]\\;\',./'), new Diff(DIFF_INSERT, '~!@#$%^&*()_+{}|:"<>?')];
+// assertEquivalent(diffs, dmp.patch_fromText('@@ -1,21 +1,21 @@\n-%601234567890-=%5B%5D%5C;\',./\n+~!@#$%25%5E&*()_+%7B%7D%7C:%22%3C%3E?\n')[0].diffs);
+//
+// // Long string with repeats.
+// text1 = '';
+// for (var x = 0; x < 100; x++) {
+// text1 += 'abcdef';
+// }
+// text2 = text1 + '123';
+// expectedPatch = '@@ -573,28 +573,31 @@\n cdefabcdefabcdefabcdefabcdef\n+123\n';
+// patches = dmp.patch_make(text1, text2);
+// assertEquals(expectedPatch, dmp.patch_toText(patches));
+//
+// // Test null inputs.
+// try {
+// dmp.patch_make(null);
+// assertEquals(Error, null);
+// } catch (e) {
+// // Exception expected.
+// }
+// }
+//
+// export function testPatchSplitMax() {
+// // Assumes that dmp.Match_MaxBits is 32.
+// var patches = dmp.patch_make('abcdefghijklmnopqrstuvwxyz01234567890', 'XabXcdXefXghXijXklXmnXopXqrXstXuvXwxXyzX01X23X45X67X89X0');
+// dmp.patch_splitMax(patches);
+// assertEquals('@@ -1,32 +1,46 @@\n+X\n ab\n+X\n cd\n+X\n ef\n+X\n gh\n+X\n ij\n+X\n kl\n+X\n mn\n+X\n op\n+X\n qr\n+X\n st\n+X\n uv\n+X\n wx\n+X\n yz\n+X\n 012345\n@@ -25,13 +39,18 @@\n zX01\n+X\n 23\n+X\n 45\n+X\n 67\n+X\n 89\n+X\n 0\n', dmp.patch_toText(patches));
+//
+// patches = dmp.patch_make('abcdef1234567890123456789012345678901234567890123456789012345678901234567890uvwxyz', 'abcdefuvwxyz');
+// var oldToText = dmp.patch_toText(patches);
+// dmp.patch_splitMax(patches);
+// assertEquals(oldToText, dmp.patch_toText(patches));
+//
+// patches = dmp.patch_make('1234567890123456789012345678901234567890123456789012345678901234567890', 'abc');
+// dmp.patch_splitMax(patches);
+// assertEquals('@@ -1,32 +1,4 @@\n-1234567890123456789012345678\n 9012\n@@ -29,32 +1,4 @@\n-9012345678901234567890123456\n 7890\n@@ -57,14 +1,3 @@\n-78901234567890\n+abc\n', dmp.patch_toText(patches));
+//
+// patches = dmp.patch_make('abcdefghij , h : 0 , t : 1 abcdefghij , h : 0 , t : 1 abcdefghij , h : 0 , t : 1', 'abcdefghij , h : 1 , t : 1 abcdefghij , h : 1 , t : 1 abcdefghij , h : 0 , t : 1');
+// dmp.patch_splitMax(patches);
+// assertEquals('@@ -2,32 +2,32 @@\n bcdefghij , h : \n-0\n+1\n , t : 1 abcdef\n@@ -29,32 +29,32 @@\n bcdefghij , h : \n-0\n+1\n , t : 1 abcdef\n', dmp.patch_toText(patches));
+// }
+//
+// export function testPatchAddPadding() {
+// // Both edges full.
+// var patches = dmp.patch_make('', 'test');
+// assertEquals('@@ -0,0 +1,4 @@\n+test\n', dmp.patch_toText(patches));
+// dmp.patch_addPadding(patches);
+// assertEquals('@@ -1,8 +1,12 @@\n %01%02%03%04\n+test\n %01%02%03%04\n', dmp.patch_toText(patches));
+//
+// // Both edges partial.
+// patches = dmp.patch_make('XY', 'XtestY');
+// assertEquals('@@ -1,2 +1,6 @@\n X\n+test\n Y\n', dmp.patch_toText(patches));
+// dmp.patch_addPadding(patches);
+// assertEquals('@@ -2,8 +2,12 @@\n %02%03%04X\n+test\n Y%01%02%03\n', dmp.patch_toText(patches));
+//
+// // Both edges none.
+// patches = dmp.patch_make('XXXXYYYY', 'XXXXtestYYYY');
+// assertEquals('@@ -1,8 +1,12 @@\n XXXX\n+test\n YYYY\n', dmp.patch_toText(patches));
+// dmp.patch_addPadding(patches);
+// assertEquals('@@ -5,8 +5,12 @@\n XXXX\n+test\n YYYY\n', dmp.patch_toText(patches));
+// }
+//
+// export function testPatchApply() {
+// dmp.Match_Distance = 1000;
+// dmp.Match_Threshold = 0.5;
+// dmp.Patch_DeleteThreshold = 0.5;
+// // Null case.
+// var patches = dmp.patch_make('', '');
+// var results = dmp.patch_apply(patches, 'Hello world.');
+// assertEquivalent(['Hello world.', []], results);
+//
+// // Exact match.
+// patches = dmp.patch_make('The quick brown fox jumps over the lazy dog.', 'That quick brown fox jumped over a lazy dog.');
+// results = dmp.patch_apply(patches, 'The quick brown fox jumps over the lazy dog.');
+// assertEquivalent(['That quick brown fox jumped over a lazy dog.', [true, true]], results);
+//
+// // Partial match.
+// results = dmp.patch_apply(patches, 'The quick red rabbit jumps over the tired tiger.');
+// assertEquivalent(['That quick red rabbit jumped over a tired tiger.', [true, true]], results);
+//
+// // Failed match.
+// results = dmp.patch_apply(patches, 'I am the very model of a modern major general.');
+// assertEquivalent(['I am the very model of a modern major general.', [false, false]], results);
+//
+// // Big delete, small change.
+// patches = dmp.patch_make('x1234567890123456789012345678901234567890123456789012345678901234567890y', 'xabcy');
+// results = dmp.patch_apply(patches, 'x123456789012345678901234567890-----++++++++++-----123456789012345678901234567890y');
+// assertEquivalent(['xabcy', [true, true]], results);
+//
+// // Big delete, big change 1.
+// patches = dmp.patch_make('x1234567890123456789012345678901234567890123456789012345678901234567890y', 'xabcy');
+// results = dmp.patch_apply(patches, 'x12345678901234567890---------------++++++++++---------------12345678901234567890y');
+// assertEquivalent(['xabc12345678901234567890---------------++++++++++---------------12345678901234567890y', [false, true]], results);
+//
+// // Big delete, big change 2.
+// dmp.Patch_DeleteThreshold = 0.6;
+// patches = dmp.patch_make('x1234567890123456789012345678901234567890123456789012345678901234567890y', 'xabcy');
+// results = dmp.patch_apply(patches, 'x12345678901234567890---------------++++++++++---------------12345678901234567890y');
+// assertEquivalent(['xabcy', [true, true]], results);
+// dmp.Patch_DeleteThreshold = 0.5;
+//
+// // Compensate for failed patch.
+// dmp.Match_Threshold = 0.0;
+// dmp.Match_Distance = 0;
+// patches = dmp.patch_make('abcdefghijklmnopqrstuvwxyz--------------------1234567890', 'abcXXXXXXXXXXdefghijklmnopqrstuvwxyz--------------------1234567YYYYYYYYYY890');
+// results = dmp.patch_apply(patches, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ--------------------1234567890');
+// assertEquivalent(['ABCDEFGHIJKLMNOPQRSTUVWXYZ--------------------1234567YYYYYYYYYY890', [false, true]], results);
+// dmp.Match_Threshold = 0.5;
+// dmp.Match_Distance = 1000;
+//
+// // No side effects.
+// patches = dmp.patch_make('', 'test');
+// var patchstr = dmp.patch_toText(patches);
+// dmp.patch_apply(patches, '');
+// assertEquals(patchstr, dmp.patch_toText(patches));
+//
+// // No side effects with major delete.
+// patches = dmp.patch_make('The quick brown fox jumps over the lazy dog.', 'Woof');
+// patchstr = dmp.patch_toText(patches);
+// dmp.patch_apply(patches, 'The quick brown fox jumps over the lazy dog.');
+// assertEquals(patchstr, dmp.patch_toText(patches));
+//
+// // Edge exact match.
+// patches = dmp.patch_make('', 'test');
+// results = dmp.patch_apply(patches, '');
+// assertEquivalent(['test', [true]], results);
+//
+// // Near edge exact match.
+// patches = dmp.patch_make('XY', 'XtestY');
+// results = dmp.patch_apply(patches, 'XY');
+// assertEquivalent(['XtestY', [true]], results);
+//
+// // Edge partial match.
+// patches = dmp.patch_make('y', 'y123');
+// results = dmp.patch_apply(patches, 'x');
+// assertEquivalent(['x123', [true]], results);
+// }
+//
+//
+//
+// // Counters for unit test results.
+// var test_good = 0;
+// var test_bad = 0;
+//
+// // If expected and actual are the identical, print 'Ok', otherwise 'Fail!'
+// export function assertEquals(msg: any, expected: any, actual?: any) {
+// if (typeof actual == 'undefined') {
+// // msg is optional.
+// actual = expected;
+// expected = msg;
+// msg = 'Expected: \'' + expected + '\' Actual: \'' + actual + '\'';
+// }
+// if (expected === actual) {
+// console.log("Ok");
+// test_good++;
+// return true;
+// } else {
+// console.error("Fail!");
+// msg = msg.replace(/&/g, '&').replace(//g, '>');
+// console.error(msg);
+// test_bad++;
+// return false;
+// }
+// }
+//
+// function assertTrue(msg: any, actual?: any) {
+// if (typeof actual == 'undefined') {
+// // msg is optional.
+// actual = msg;
+// return assertEquals(true, actual);
+// } else {
+// return assertEquals(msg, true, actual);
+// }
+// }
+//
+// function assertFalse(msg: any, actual?: any) {
+// if (typeof actual == 'undefined') {
+// // msg is optional.
+// actual = msg;
+// return assertEquals(false, actual);
+// } else {
+// return assertEquals(msg, false, actual);
+// }
+// }
+//
+// function runTests() {
+//
+// for (var x = 0; x < tests.length; x++) {
+// console.log(tests[x]);
+// eval(tests[x] + '()');
+// }
+// }
+//
+// var tests = [
+// 'testDiffCommonPrefix',
+// 'testDiffCommonSuffix',
+// 'testDiffCommonOverlap',
+// 'testDiffHalfMatch',
+// 'testDiffLinesToChars',
+// 'testDiffCharsToLines',
+// 'testDiffCleanupMerge',
+// 'testDiffCleanupSemanticLossless',
+// 'testDiffCleanupSemantic',
+// 'testDiffCleanupEfficiency',
+// 'testDiffPrettyHtml',
+// 'testDiffText',
+// 'testDiffDelta',
+// 'testDiffXIndex',
+// 'testDiffLevenshtein',
+// 'testDiffBisect',
+// 'testDiffMain',
+//
+// 'testMatchAlphabet',
+// 'testMatchBitap',
+// 'testMatchMain',
+//
+// 'testPatchObj',
+// 'testPatchFromText',
+// 'testPatchToText',
+// 'testPatchAddContext',
+// 'testPatchMake',
+// 'testPatchSplitMax',
+// 'testPatchAddPadding',
+// 'testPatchApply'];
+//
+//
+// var startTime = (new Date()).getTime();
+// runTests();
+// var endTime = (new Date()).getTime();
+// console.log("Done");
+// console.log('Tests passed: ' + test_good + '\nTests failed: ' + test_bad);
+// console.log('Total time: ' + (endTime - startTime) + ' ms');
diff --git a/__tests__/fixture/settings-with-filters.yml b/__tests__/fixture/settings-with-filters.yml
new file mode 100644
index 00000000..3204ff58
--- /dev/null
+++ b/__tests__/fixture/settings-with-filters.yml
@@ -0,0 +1,7 @@
+filters:
+ -
+ filepath: string
+ filter: string
+ -
+ filepath: string
+ filter: string
diff --git a/__tests__/settings.test.ts b/__tests__/settings.test.ts
new file mode 100644
index 00000000..2cd5c63a
--- /dev/null
+++ b/__tests__/settings.test.ts
@@ -0,0 +1,69 @@
+import path from "path"
+import * as core from '@actions/core'
+import {GithubActionContext} from '../lib/github-action-context'
+import fs from 'fs-extra'
+import {PathLike} from 'fs'
+
+const originalGitHubWorkspace = process.env['GITHUB_WORKSPACE']
+
+const context = new GithubActionContext()
+
+const gitHubWorkspace = path.resolve('/checkout-tests/workspace')
+
+// Inputs for mock @actions/core
+let inputs = {} as any
+
+// Shallow clone original @actions/github context
+let originalContext = {...context}
+
+describe('settings tests', () => {
+ beforeAll(() => {
+ // Mock getInput
+ jest.spyOn(core, 'getInput').mockImplementation((name: string) => {
+ return inputs[name]
+ })
+
+ // Mock error/warning/info/debug
+ jest.spyOn(core, 'error').mockImplementation(jest.fn())
+ jest.spyOn(core, 'warning').mockImplementation(jest.fn())
+ jest.spyOn(core, 'info').mockImplementation(jest.fn())
+ jest.spyOn(core, 'debug').mockImplementation(jest.fn())
+
+ // Mock github context
+ jest.spyOn(context, 'repo', 'get').mockImplementation(() => {
+ return {
+ owner: 'some-owner',
+ repo: 'some-repo'
+ }
+ })
+ context.ref = 'refs/heads/some-ref'
+
+ // Mock ./fs-helper directoryExistsSync()
+ jest
+ .spyOn(fs, 'existsSync')
+ .mockImplementation((path: PathLike) => path == gitHubWorkspace)
+
+ // GitHub workspace
+ process.env['GITHUB_WORKSPACE'] = gitHubWorkspace
+ })
+
+ beforeEach(() => {
+ // Reset inputs
+ inputs = {}
+ })
+
+ afterAll(() => {
+ // Restore GitHub workspace
+ delete process.env['GITHUB_WORKSPACE']
+
+ if (originalGitHubWorkspace) {
+ process.env['GITHUB_WORKSPACE'] = originalGitHubWorkspace
+ }
+
+ // Restore @actions/github context
+ context.ref = originalContext.ref
+
+ // Restore
+ jest.restoreAllMocks()
+ })
+})
diff --git a/__tests__/sync.test.ts b/__tests__/sync.test.ts
new file mode 100644
index 00000000..4a744cf3
--- /dev/null
+++ b/__tests__/sync.test.ts
@@ -0,0 +1,628 @@
+import path from 'path'
+import * as core from '@actions/core'
+import fs from 'fs-extra'
+import {PathLike} from 'fs'
+import {sync} from '../lib/sync'
+import {GithubActionContext} from '../lib/github-action-context'
+import {Settings} from '../lib/settings'
+import {ISettings} from '../lib/interfaces'
+
+const originalGitHubWorkspace = process.env['GITHUB_WORKSPACE']
+const context = new GithubActionContext()
+const gitHubWorkspace = path.join(__dirname, 'fixture/workspace')
+const templateRepositoryPath = path.join(gitHubWorkspace, 'template')
+
+let settings: ISettings
+
+// Inputs for mock @actions/core
+let inputs = {} as any
+
+// Shallow clone original @actions/github context
+let originalContext = {...context}
+
+const createFile = (name: string, content: string): string => {
+ fs.writeFileSync(name, content)
+
+ return name
+}
+
+describe('sync tests', () => {
+ beforeAll(() => {
+ // Mock getInput
+ jest.spyOn(core, 'getInput').mockImplementation((name: string) => {
+ return inputs[name]
+ })
+
+ // Mock error/warning/info/debug
+ jest.spyOn(core, 'error').mockImplementation(jest.fn())
+ jest.spyOn(core, 'warning').mockImplementation(jest.fn())
+ jest.spyOn(core, 'info').mockImplementation(jest.fn())
+ jest.spyOn(core, 'debug').mockImplementation(jest.fn())
+
+ // Mock github context
+ jest.spyOn(context, 'repo', 'get').mockImplementation(() => {
+ return {
+ owner: 'some-owner',
+ repo: 'some-repo'
+ }
+ })
+
+ context.ref = 'refs/heads/some-ref'
+
+ jest
+ .spyOn(fs, 'existsSync')
+ .mockImplementation((path: PathLike) => path == gitHubWorkspace)
+
+ // GitHub workspace
+ process.env['GITHUB_WORKSPACE'] = gitHubWorkspace
+ })
+
+ beforeEach(() => {
+ // Reset inputs
+ inputs = {}
+
+ fs.rmdirSync(gitHubWorkspace, {recursive: true})
+
+ fs.mkdirpSync(gitHubWorkspace)
+ fs.mkdirpSync(templateRepositoryPath)
+ })
+
+ afterAll(() => {
+ // Restore GitHub workspace
+ delete process.env['GITHUB_WORKSPACE']
+
+ if (originalGitHubWorkspace) {
+ process.env['GITHUB_WORKSPACE'] = originalGitHubWorkspace
+ }
+
+ // Restore @actions/github context
+ context.ref = originalContext.ref
+
+ // Restore
+ jest.restoreAllMocks()
+
+ // fs.rmdirSync(gitHubWorkspace, { recursive: true })
+ })
+
+ // it('sync with patch', async () => {
+ // const patchContent = 'abc\n' + 'def\n' + 'abc\n'
+ //
+ // fs.writeFileSync(
+ // path.join(templateRepositoryPath, 'test.txt'),
+ // patchContent
+ // )
+ // const testFilePathB = createFile(
+ // path.join(gitHubWorkspace, 'test.txt'),
+ // 'abd\n' + 'deg\n' + 'ab4\n'
+ // )
+ //
+ // settings = new Settings(context)
+ // settings.templateRepositoryPath = templateRepositoryPath
+ //
+ // await sync(settings)
+ //
+ // expect(
+ // fs.readFileSync(testFilePathB, 'utf8')
+ // ).toBe(patchContent)
+ // })
+ //
+ // it('sync with patch and copy', async () => {
+ // const patchContent = 'abc\n' + 'def\n' + 'abc\n'
+ //
+ // fs.writeFileSync(
+ // path.join(templateRepositoryPath, 'test.txt'),
+ // patchContent
+ // )
+ // const testFilePathB1 = createFile(path.join(templateRepositoryPath, 'missing.txt'), '')
+ // const testFilePathB2 = createFile(
+ // path.join(gitHubWorkspace, 'test.txt'),
+ // 'abd\n' + 'deg\n' + 'ab4\n'
+ // )
+ //
+ // settings = new Settings(context)
+ // settings.templateRepositoryPath = templateRepositoryPath
+ //
+ // await sync(settings)
+ //
+ // expect(
+ // await fs.readFile(testFilePathB2, 'utf8')
+ // ).toBe(patchContent)
+ //
+ // expect(fs.pathExistsSync(testFilePathB1)).toBe(true)
+ // })
+ //
+ // it('sync with patch and filter', async () => {
+ // const dotGithubPath = path.join(gitHubWorkspace, '.github')
+ //
+ // fs.mkdirpSync(dotGithubPath)
+ // fs.writeFileSync(
+ // path.join(dotGithubPath, 'template-sync-settings.yml'),
+ // 'filters:\n' +
+ // ' -\n' +
+ // ' filepath: test.txt\n' +
+ // ' filter: f\n'
+ // )
+ // fs.writeFileSync(
+ // path.join(templateRepositoryPath, 'test.txt'),
+ // 'abc\n' + 'def\n' + 'abc\n'
+ // )
+ // const testFilePathB = createFile(
+ // path.join(gitHubWorkspace, 'test.txt'),
+ // 'abd\n' + 'deg\n' + 'ab4\n'
+ // )
+ //
+ // settings = new Settings(context)
+ // settings.templateRepositoryPath = templateRepositoryPath
+ //
+ // await sync(settings)
+ //
+ // expect(await fs.readFile(testFilePathB, 'utf8')).toBe('abc\n' + 'deg\n' + 'abc\n')
+ // })
+ //
+ // it('sync with long patch and filter', async () => {
+ // const dotGithubPath = path.join(gitHubWorkspace, '.github')
+ //
+ // fs.mkdirpSync(dotGithubPath)
+ // fs.writeFileSync(
+ // path.join(dotGithubPath, 'template-sync-settings.yml'),
+ // 'filters:\n' +
+ // ' -\n' +
+ // ' filepath: composer.json\n' +
+ // ' filter: 4\n'
+ // )
+ // fs.writeFileSync(
+ // path.join(templateRepositoryPath, 'composer.json'),
+ // '{\n' +
+ // ' "name": "narrowspark/tools",\n' +
+ // ' "description": "tools",\n' +
+ // ' "license": "proprietary",\n' +
+ // ' "require": {\n' +
+ // ' "php": "^7.4",\n' +
+ // ' "narrowspark/coding-standard": "^5.1.0",\n' +
+ // ' "wikimedia/composer-merge-plugin": "^1.4.1"\n' +
+ // ' },\n' +
+ // ' "extra": {\n' +
+ // ' "merge-plugin": {\n' +
+ // ' "include": [\n' +
+ // ' "../composer.json"\n' +
+ // ' ],\n' +
+ // ' "merge-extra": false,\n' +
+ // ' "merge-scripts": false\n' +
+ // ' },\n' +
+ // ' "prefetcher": {\n' +
+ // ' "require": {\n' +
+ // ' "phpunit/phpunit": "^9.0",\n' +
+ // ' "friendsofphp/php-cs-fixer": "^2.16.0"\n' +
+ // ' }\n' +
+ // ' }\n' +
+ // ' },\n' +
+ // ' "minimum-stability": "dev",\n' +
+ // ' "prefer-stable": true,\n' +
+ // ' "scripts": {\n' +
+ // ' "changelog": "changelog-generator generate --config=\\"./../.changelog\\" --file=\\"./../CHANGELOG.md\\" --prepend",\n' +
+ // ' "cs": "php-cs-fixer fix --config=\\"./../.php_cs\\" --ansi",\n' +
+ // ' "cs:check": "php-cs-fixer fix --config=\\"./../.php_cs\\" --ansi --dry-run",\n' +
+ // ' "infection": "infection --configuration=\\"./../infection.json\\" -j$(nproc) --ansi",\n' +
+ // ' "phpstan": "phpstan analyse -c ./../phpstan.neon --ansi",\n' +
+ // ' "phpstan:baseline": "phpstan analyse -c ./../phpstan.neon --ansi --generate-baseline",\n' +
+ // ' "psalm": "psalm --diff --diff-methods --threads=$(nproc)",\n' +
+ // ' "psalm:baseline": "psalm --threads=$(nproc) --set-baseline=./.build/psalm-baseline.xml",\n' +
+ // ' "psalm:fix": "psalm --alter --issues=all --threads=$(nproc)",\n' +
+ // ' "rector-src": "rector process ./../src/ --config=./rector-src.yaml --ansi --dry-run",\n' +
+ // ' "rector-src:fix": "rector process ./../src/ --config=./rector-src.yaml --ansi",\n' +
+ // ' "rector-tests": "rector process ./../tests/ --config=./rector-tests.yaml --ansi --dry-run",\n' +
+ // ' "rector-tests:fix": "rector process ./../tests/ --config=./rector-tests.yaml --ansi",\n' +
+ // ' "req:check": "composer-require-checker check --config-file=./../composer-require.json ./../composer.json"\n' +
+ // ' }\n' +
+ // '}'
+ // )
+ // const testFilePathB = createFile(
+ // path.join(gitHubWorkspace, 'composer.json'),
+ // '{\n' +
+ // ' "description": "tools",\n' +
+ // ' "minimum-stability": "dev",\n' +
+ // ' "prefer-stable": true,\n' +
+ // ' "require": {\n' +
+ // ' "php": "^7.3",\n' +
+ // ' "narrowspark/coding-standard": "^5.1.0",\n' +
+ // ' "wikimedia/composer-merge-plugin": "^1.4.1"\n' +
+ // ' },\n' +
+ // ' "extra": {\n' +
+ // ' "prefetcher": {\n' +
+ // ' "require": {\n' +
+ // ' "phpunit/phpunit": "^8.0 || ^9.0",\n' +
+ // ' "friendsofphp/php-cs-fixer": "^2.16.0"\n' +
+ // ' }\n' +
+ // ' },\n' +
+ // ' "merge-plugin": {\n' +
+ // ' "include": [\n' +
+ // ' "../composer.json"\n' +
+ // ' ],\n' +
+ // ' "merge-extra": false,\n' +
+ // ' "merge-scripts": false\n' +
+ // ' }\n' +
+ // ' },\n' +
+ // ' "scripts": {\n' +
+ // ' "changelog": "changelog-generator generate --config=\\"./../.changelog\\" --file=./../CHANGELOG.md --prepend",\n' +
+ // ' "cs": "php-cs-fixer fix --config=\\"./../.php_cs\\" --ansi",\n' +
+ // ' "cs:check": "php-cs-fixer fix --config=\\"./../.php_cs\\" --ansi --dry-run",\n' +
+ // ' "phpstan": "phpstan analyse -c ./../phpstan.neon --ansi",\n' +
+ // ' "psalm": "psalm --threads=$(nproc)",\n' +
+ // ' "psalm:fix": "psalm --alter --issues=all --threads=$(nproc)",\n' +
+ // ' "infection": "infection --configuration=\\"./../infection.json\\" -j$(nproc) --ansi",\n' +
+ // ' "rector-src": "rector process ../src/ --config=./rector-src.yaml --ansi --dry-run",\n' +
+ // ' "rector-src:fix": "rector process ../src/ --config=./rector-src.yaml --ansi",\n' +
+ // ' "rector-tests": "rector process ../tests/ --config=./rector-tests.yaml --ansi --dry-run",\n' +
+ // ' "rector-tests:fix": "rector process ../tests/ --config=./rector-tests.yaml --ansi"\n' +
+ // ' }\n' +
+ // '}'
+ // )
+ //
+ // settings = new Settings(context)
+ // settings.templateRepositoryPath = templateRepositoryPath
+ //
+ // await sync(settings)
+ //
+ // expect(await fs.readFile(testFilePathB, 'utf8')).toBe(
+ // '{\n' +
+ // ' "name": "narrowspark/tools",\n' +
+ // ' "description": "tools",\n' +
+ // ' "license": "proprietary",\n' +
+ // ' "require": {\n' +
+ // ' "php": "^7.3",\n' +
+ // ' "narrowspark/coding-standard": "^5.1.0",\n' +
+ // ' "wikimedia/composer-merge-plugin": "^1.4.1"\n' +
+ // ' },\n' +
+ // ' "extra": {\n' +
+ // ' "merge-plugin": {\n' +
+ // ' "include": [\n' +
+ // ' "../composer.json"\n' +
+ // ' ],\n' +
+ // ' "merge-extra": false,\n' +
+ // ' "merge-scripts": false\n' +
+ // ' },\n' +
+ // ' "prefetcher": {\n' +
+ // ' "require": {\n' +
+ // ' "phpunit/phpunit": "^9.0",\n' +
+ // ' "friendsofphp/php-cs-fixer": "^2.16.0"\n' +
+ // ' }\n' +
+ // ' }\n' +
+ // ' },\n' +
+ // ' "minimum-stability": "dev",\n' +
+ // ' "prefer-stable": true,\n' +
+ // ' "scripts": {\n' +
+ // ' "changelog": "changelog-generator generate --config=\\"./../.changelog\\" --file=\\"./../CHANGELOG.md\\" --prepend",\n' +
+ // ' "cs": "php-cs-fixer fix --config=\\"./../.php_cs\\" --ansi",\n' +
+ // ' "cs:check": "php-cs-fixer fix --config=\\"./../.php_cs\\" --ansi --dry-run",\n' +
+ // ' "infection": "infection --configuration=\\"./../infection.json\\" -j$(nproc) --ansi",\n' +
+ // ' "phpstan": "phpstan analyse -c ./../phpstan.neon --ansi",\n' +
+ // ' "phpstan:baseline": "phpstan analyse -c ./../phpstan.neon --ansi --generate-baseline",\n' +
+ // ' "psalm": "psalm --diff --diff-methods --threads=$(nproc)",\n' +
+ // ' "psalm:baseline": "psalm --threads=$(nproc) --set-baseline=./.build/psalm-baseline.xml",\n' +
+ // ' "psalm:fix": "psalm --alter --issues=all --threads=$(nproc)",\n' +
+ // ' "rector-src": "rector process ./../src/ --config=./rector-src.yaml --ansi --dry-run",\n' +
+ // ' "rector-src:fix": "rector process ./../src/ --config=./rector-src.yaml --ansi",\n' +
+ // ' "rector-tests": "rector process ./../tests/ --config=./rector-tests.yaml --ansi --dry-run",\n' +
+ // ' "rector-tests:fix": "rector process ./../tests/ --config=./rector-tests.yaml --ansi",\n' +
+ // ' "req:check": "composer-require-checker check --config-file=./../composer-require.json ./../composer.json"\n' +
+ // ' }\n' +
+ // '}'
+ // )
+ // })
+
+ it('sync with long patch and more filters', async () => {
+ const dotGithubPath = path.join(gitHubWorkspace, '.github')
+
+ fs.mkdirpSync(dotGithubPath)
+ fs.writeFileSync(
+ path.join(dotGithubPath, 'template-sync-settings.yml'),
+ 'filters:\n' +
+ ' -\n' +
+ ' filepath: composer.json\n' +
+ ' filter: narrowspark/php-library-template\n' +
+ ' -\n' +
+ ' filepath: composer.json\n' +
+ ' filter: narrowspark/php-library-template\n' +
+ ' -\n' +
+ ' filepath: composer.json\n' +
+ ' filter: Provides a GitHub repository template for a Narrowspark PHP library, using GitHub actions\n' +
+ ' -\n' +
+ ' filepath: composer.json\n' +
+ ' filter: 4\n' +
+ ' strict: true\n' +
+ ' -\n' +
+ ' filepath: composer.json\n' +
+ ' filter: 0\n' +
+ ' strict: true\n' +
+ ' -\n' +
+ ' filepath: composer.json\n' +
+ ' filter: Narrowspark\\\\Library\n' +
+ ' -\n' +
+ ' filepath: composer.json\n' +
+ ' filter: Narrowspark\\\\Library\n' +
+ ' -\n' +
+ ' filepath: composer.json\n' +
+ ' filter: narrowspark\n' +
+ ' -\n' +
+ ' filepath: composer.json\n' +
+ ' filter: narrowspark/php-library-template\n'
+ )
+ fs.writeFileSync(
+ path.join(templateRepositoryPath, 'composer.json'),
+ '{\n' +
+ ' "name": "narrowspark/php-library-template",\n' +
+ ' "type": "library",\n' +
+ ' "description": "Provides a GitHub repository template for a Narrowspark PHP library, using GitHub actions.",\n' +
+ ' "keywords": [\n' +
+ ' "narrowspark"\n' +
+ ' ],\n' +
+ ' "homepage": "http://github.com/narrowspark/php-library-template",\n' +
+ ' "license": "MIT",\n' +
+ ' "authors": [\n' +
+ ' {\n' +
+ ' "name": "Daniel Bannert",\n' +
+ ' "email": "d.bannert@anolilab.de",\n' +
+ ' "homepage": "http://www.anolilab.de",\n' +
+ ' "role": "Developer"\n' +
+ ' }\n' +
+ ' ],\n' +
+ ' "require": {\n' +
+ ' "php": "^7.4",\n' +
+ ' "thecodingmachine/safe": "^1.1.1"\n' +
+ ' },\n' +
+ ' "require-dev": {\n' +
+ ' "ext-json": "*",\n' +
+ ' "phpunit/phpunit": "^9.1.5",\n' +
+ ' "thecodingmachine/phpstan-safe-rule": "^1.0.0"\n' +
+ ' },\n' +
+ ' "config": {\n' +
+ ' "preferred-install": "dist",\n' +
+ ' "sort-packages": true\n' +
+ ' },\n' +
+ ' "extra": {\n' +
+ ' "branch-alias": {\n' +
+ ' "dev-master": "1.0-dev"\n' +
+ ' },\n' +
+ ' "prefetcher": {\n' +
+ ' "require": {\n' +
+ ' "phpunit/phpunit": "^8.0 || ^9.0"\n' +
+ ' }\n' +
+ ' }\n' +
+ ' },\n' +
+ ' "autoload": {\n' +
+ ' "psr-4": {\n' +
+ ' "Narrowspark\\\\Library\\\\": "src/"\n' +
+ ' },\n' +
+ ' "exclude-from-classmap": [\n' +
+ ' "/tests/"\n' +
+ ' ]\n' +
+ ' },\n' +
+ ' "autoload-dev": {\n' +
+ ' "psr-4": {\n' +
+ ' "Narrowspark\\\\Library\\\\Tests\\\\": "tests/"\n' +
+ ' }\n' +
+ ' },\n' +
+ ' "minimum-stability": "dev",\n' +
+ ' "prefer-stable": true,\n' +
+ ' "scripts": {\n' +
+ ' "post-install-cmd": "composer --working-dir=./.build install --lock",\n' +
+ ' "post-update-cmd": "composer --working-dir=./.build update --lock",\n' +
+ ' "changelog": "composer --working-dir=./.build changelog",\n' +
+ ' "coverage": [\n' +
+ ' "phpunit --dump-xdebug-filter=./.build/phpunit/.xdebug-filter.php",\n' +
+ ' "phpunit --prepend=./.build/phpunit/.xdebug-filter.php --coverage-html=./.build/phpunit/coverage"\n' +
+ ' ],\n' +
+ ' "cs": "composer --working-dir=./.build cs -- -v",\n' +
+ ' "cs:check": "composer --working-dir=./.build cs:check -- -v",\n' +
+ ' "infection": "composer --working-dir=./.build infection -- --min-covered-msi=73 --min-msi=61",\n' +
+ ' "phpstan": "composer --working-dir=./.build phpstan -- --memory-limit=-1",\n' +
+ ' "phpstan:baseline": "composer --working-dir=./.build phpstan:baseline -- --memory-limit=-1",\n' +
+ ' "psalm": "composer --working-dir=./.build psalm",\n' +
+ ' "psalm:baseline": "composer --working-dir=./.build psalm:baseline",\n' +
+ ' "psalm:fix": "composer --working-dir=./.build psalm:fix",\n' +
+ ' "rector-src": "composer --working-dir=./.build rector-src",\n' +
+ ' "rector-src:fix": "composer --working-dir=./.build rector-src:fix",\n' +
+ ' "rector-tests": "composer --working-dir=./.build rector-tests",\n' +
+ ' "rector-tests:fix": "composer --working-dir=./.build rector-tests:fix",\n' +
+ ' "req:check": "composer --working-dir=./.build req:check",\n' +
+ ' "test": "phpunit"\n' +
+ ' },\n' +
+ ' "support": {\n' +
+ ' "issues": "https://github.com/narrowspark/php-library-template/issues",\n' +
+ ' "source": "https://github.com/narrowspark/php-library-template"\n' +
+ ' }\n' +
+ '}'
+ )
+ const testFilePathB = createFile(
+ path.join(gitHubWorkspace, 'composer.json'),
+ '{\n' +
+ ' "name": "testomat/terminal-colour",\n' +
+ ' "type": "library",\n' +
+ ' "description": "Return your terminal message in style! Change the text style, text color and text background color from the terminal, console or shell interface with ANSI color codes.",\n' +
+ ' "keywords": [\n' +
+ ' "narrowspark",\n' +
+ ' "testomat",\n' +
+ ' "color",\n' +
+ ' "terminal",\n' +
+ ' "colour",\n' +
+ ' "ansi",\n' +
+ ' "style",\n' +
+ ' "truecolor",\n' +
+ ' "color256",\n' +
+ ' "color16"\n' +
+ ' ],\n' +
+ ' "homepage": "http://github.com/testomat/terminal-colour",\n' +
+ ' "license": "MIT",\n' +
+ ' "authors": [\n' +
+ ' {\n' +
+ ' "name": "Daniel Bannert",\n' +
+ ' "email": "d.bannert@anolilab.de",\n' +
+ ' "homepage": "http://www.anolilab.de",\n' +
+ ' "role": "Developer"\n' +
+ ' }\n' +
+ ' ],\n' +
+ ' "require": {\n' +
+ ' "php": "^7.3",\n' +
+ ' "thecodingmachine/safe": "^1.1.1"\n' +
+ ' },\n' +
+ ' "require-dev": {\n' +
+ ' "ext-json": "*",\n' +
+ ' "phpunit/phpunit": "^9.1.4"\n' +
+ ' },\n' +
+ ' "config": {\n' +
+ ' "preferred-install": "dist",\n' +
+ ' "sort-packages": true\n' +
+ ' },\n' +
+ ' "extra": {\n' +
+ ' "branch-alias": {\n' +
+ ' "dev-master": "1.1-dev"\n' +
+ ' },\n' +
+ ' "prefetcher": {\n' +
+ ' "require": {\n' +
+ ' "phpunit/phpunit": "^8.0 || ^9.0"\n' +
+ ' }\n' +
+ ' }\n' +
+ ' },\n' +
+ ' "autoload": {\n' +
+ ' "psr-4": {\n' +
+ ' "Testomat\\\\TerminalColour\\\\": "src/"\n' +
+ ' },\n' +
+ ' "exclude-from-classmap": [\n' +
+ ' "/tests/"\n' +
+ ' ]\n' +
+ ' },\n' +
+ ' "autoload-dev": {\n' +
+ ' "psr-4": {\n' +
+ ' "Testomat\\\\TerminalColour\\\\Tests\\\\": "tests/"\n' +
+ ' }\n' +
+ ' },\n' +
+ ' "minimum-stability": "dev",\n' +
+ ' "prefer-stable": true,\n' +
+ ' "scripts": {\n' +
+ ' "changelog": "composer --working-dir=./.build changelog",\n' +
+ ' "coverage": [\n' +
+ ' "phpunit --dump-xdebug-filter=./.build/phpunit/.xdebug-filter.php",\n' +
+ ' "phpunit --prepend=./.build/phpunit/.xdebug-filter.php --coverage-html=./.build/phpunit/coverage"\n' +
+ ' ],\n' +
+ ' "cs": "composer --working-dir=./.build cs -- -v",\n' +
+ ' "cs:check": "composer --working-dir=./.build cs:check -- -v",\n' +
+ ' "phpstan": "composer --working-dir=./.build phpstan -- --memory-limit=-1",\n' +
+ ' "psalm": "composer --working-dir=./.build psalm",\n' +
+ ' "psalm:fix": "composer --working-dir=./.build psalm:fix",\n' +
+ ' "infection": "composer --working-dir=./.build infection -- --min-covered-msi=89 --min-msi=89",\n' +
+ ' "rector-src": "composer --working-dir=./.build rector-src",\n' +
+ ' "rector-src:fix": "composer --working-dir=./.build rector-src:fix",\n' +
+ ' "rector-tests": "composer --working-dir=./.build rector-tests",\n' +
+ ' "rector-tests:fix": "composer --working-dir=./.build rector-tests:fix",\n' +
+ ' "test": "phpunit",\n' +
+ ' "post-install-cmd": "composer --working-dir=./.build install --lock",\n' +
+ ' "post-update-cmd": "composer --working-dir=./.build update --lock"\n' +
+ ' },\n' +
+ ' "support": {\n' +
+ ' "issues": "https://github.com/testomat/terminal-colour/issues",\n' +
+ ' "source": "https://github.com/testomat/terminal-colour"\n' +
+ ' }\n' +
+ '}'
+ )
+
+ settings = new Settings(context)
+ settings.templateRepositoryPath = templateRepositoryPath
+
+ await sync(settings)
+
+ expect(await fs.readFile(testFilePathB, 'utf8')).toBe(
+ '{\n' +
+ ' "name": "testomat/terminal-colour",\n' +
+ ' "type": "library",\n' +
+ ' "description": "Return your terminal message in style! Change the text style, text color and text background color from the terminal, console or shell interface with ANSI color codes.",\n' +
+ ' "keywords": [\n' +
+ ' "narrowspark",\n' +
+ ' "testomat",\n' +
+ ' "color",\n' +
+ ' "terminal",\n' +
+ ' "colour",\n' +
+ ' "ansi",\n' +
+ ' "style",\n' +
+ ' "truecolor",\n' +
+ ' "color256",\n' +
+ ' "color16"\n' +
+ ' ],\n' +
+ ' "homepage": "http://github.com/testomat/terminal-colour",\n' +
+ ' "license": "MIT",\n' +
+ ' "authors": [\n' +
+ ' {\n' +
+ ' "name": "Daniel Bannert",\n' +
+ ' "email": "d.bannert@anolilab.de",\n' +
+ ' "homepage": "http://www.anolilab.de",\n' +
+ ' "role": "Developer"\n' +
+ ' }\n' +
+ ' ],\n' +
+ ' "require": {\n' +
+ ' "php": "^7.3",\n' +
+ ' "thecodingmachine/safe": "^1.1.1"\n' +
+ ' },\n' +
+ ' "require-dev": {\n' +
+ ' "ext-json": "*",\n' +
+ ' "phpunit/phpunit": "^9.1.5",\n' +
+ ' "thecodingmachine/phpstan-safe-rule": "^1.0.0"\n' +
+ ' },\n' +
+ ' "config": {\n' +
+ ' "preferred-install": "dist",\n' +
+ ' "sort-packages": true\n' +
+ ' },\n' +
+ ' "extra": {\n' +
+ ' "branch-alias": {\n' +
+ ' "dev-master": "1.1-dev"\n' +
+ ' },\n' +
+ ' "prefetcher": {\n' +
+ ' "require": {\n' +
+ ' "phpunit/phpunit": "^8.0 || ^9.0"\n' +
+ ' }\n' +
+ ' }\n' +
+ ' },\n' +
+ ' "autoload": {\n' +
+ ' "psr-4": {\n' +
+ ' "Testomat\\\\TerminalColour\\\\": "src/"\n' +
+ ' },\n' +
+ ' "exclude-from-classmap": [\n' +
+ ' "/tests/"\n' +
+ ' ]\n' +
+ ' },\n' +
+ ' "autoload-dev": {\n' +
+ ' "psr-4": {\n' +
+ ' "Testomat\\\\TerminalColour\\\\Tests\\\\": "tests/"\n' +
+ ' }\n' +
+ ' },\n' +
+ ' "minimum-stability": "dev",\n' +
+ ' "prefer-stable": true,\n' +
+ ' "scripts": {\n' +
+ ' "post-install-cmd": "composer --working-dir=./.build install --lock",\n' +
+ ' "post-update-cmd": "composer --working-dir=./.build update --lock",\n' +
+ ' "changelog": "composer --working-dir=./.build changelog",\n' +
+ ' "coverage": [\n' +
+ ' "phpunit --dump-xdebug-filter=./.build/phpunit/.xdebug-filter.php",\n' +
+ ' "phpunit --prepend=./.build/phpunit/.xdebug-filter.php --coverage-html=./.build/phpunit/coverage"\n' +
+ ' ],\n' +
+ ' "cs": "composer --working-dir=./.build cs -- -v",\n' +
+ ' "cs:check": "composer --working-dir=./.build cs:check -- -v",\n' +
+ ' "infection": "composer --working-dir=./.build infection -- --min-covered-msi=73 --min-msi=61",\n' +
+ ' "phpstan": "composer --working-dir=./.build phpstan -- --memory-limit=-1",\n' +
+ ' "phpstan:baseline": "composer --working-dir=./.build phpstan:baseline -- --memory-limit=-1",\n' +
+ ' "psalm": "composer --working-dir=./.build psalm",\n' +
+ ' "psalm:baseline": "composer --working-dir=./.build psalm:baseline",\n' +
+ ' "psalm:fix": "composer --working-dir=./.build psalm:fix",\n' +
+ ' "rector-src": "composer --working-dir=./.build rector-src",\n' +
+ ' "rector-src:fix": "composer --working-dir=./.build rector-src:fix",\n' +
+ ' "rector-tests": "composer --working-dir=./.build rector-tests",\n' +
+ ' "rector-tests:fix": "composer --working-dir=./.build rector-tests:fix",\n' +
+ ' "req:check": "composer --working-dir=./.build req:check",\n' +
+ ' "test": "phpunit"\n' +
+ ' },\n' +
+ ' "support": {\n' +
+ ' "issues": "https://github.com/testomat/terminal-colour/issues",\n' +
+ ' "source": "https://github.com/testomat/terminal-colour"\n' +
+ ' }\n' +
+ '}'
+ )
+ })
+})
diff --git a/action.yml b/action.yml
index be9b8bcd..8c89c3fb 100644
--- a/action.yml
+++ b/action.yml
@@ -65,8 +65,8 @@ inputs:
description: >
The branch, tag or SHA to checkout. When checking out the repository that
triggered a workflow, this defaults to the reference or SHA for that
- event. Otherwise, defaults to `master`.
- required: true
+ event. Otherwise, defaults to `master`.
+ required: false
template_repository:
description: ''
@@ -75,7 +75,7 @@ inputs:
description: >
The branch, tag or SHA to checkout. When checking out the repository that
triggered a workflow, this defaults to the reference or SHA for that
- event. Otherwise, defaults to `master`.
+ event. Otherwise, defaults to `master`.
required: false
ignore_list:
diff --git a/jest.config.js b/jest.config.js
index 150dcaf2..fc6202c1 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -9,5 +9,10 @@ module.exports = {
},
roots: ['/__tests__'],
verbose: true,
- collectCoverage: true
-}
\ No newline at end of file
+ collectCoverage: true,
+ globals: {
+ 'ts-jest': {
+ packageJson: 'package.json',
+ },
+ },
+}
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index 4138d527..00000000
--- a/package-lock.json
+++ /dev/null
@@ -1,10724 +0,0 @@
-{
- "name": "template-sync-action",
- "version": "1.0.0-alpha.5",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "@actions/core": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.2.4.tgz",
- "integrity": "sha512-YJCEq8BE3CdN8+7HPZ/4DxJjk/OkZV2FFIf+DlZTC/4iBlzYCD5yjRR6eiOS5llO11zbRltIRuKAjMKaWTE6cg=="
- },
- "@actions/exec": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.0.4.tgz",
- "integrity": "sha512-4DPChWow9yc9W3WqEbUj8Nr86xkpyE29ZzWjXucHItclLbEW6jr80Zx4nqv18QL6KK65+cifiQZXvnqgTV6oHw==",
- "requires": {
- "@actions/io": "^1.0.1"
- }
- },
- "@actions/http-client": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.8.tgz",
- "integrity": "sha512-G4JjJ6f9Hb3Zvejj+ewLLKLf99ZC+9v+yCxoYf9vSyH+WkzPLB2LuUtRMGNkooMqdugGBFStIKXOuvH1W+EctA==",
- "requires": {
- "tunnel": "0.0.6"
- }
- },
- "@actions/io": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.0.2.tgz",
- "integrity": "sha512-J8KuFqVPr3p6U8W93DOXlXW6zFvrQAJANdS+vw0YhusLIq+bszW8zmK2Fh1C2kDPX8FMvwIl1OUcFgvJoXLbAg=="
- },
- "@actions/tool-cache": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-1.3.5.tgz",
- "integrity": "sha512-y2J7AUqpnQ7lcJIzoVPmDasTIWvS224OBpVcoFRH/gnkisinfNcaTsMexTHKR8YQPS7v1F+K/KjTzoErSQuVbQ==",
- "requires": {
- "@actions/core": "^1.2.3",
- "@actions/exec": "^1.0.0",
- "@actions/http-client": "^1.0.8",
- "@actions/io": "^1.0.1",
- "semver": "^6.1.0",
- "uuid": "^3.3.2"
- },
- "dependencies": {
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
- }
- }
- },
- "@babel/code-frame": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
- "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.8.3"
- }
- },
- "@babel/core": {
- "version": "7.9.6",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz",
- "integrity": "sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.9.6",
- "@babel/helper-module-transforms": "^7.9.0",
- "@babel/helpers": "^7.9.6",
- "@babel/parser": "^7.9.6",
- "@babel/template": "^7.8.6",
- "@babel/traverse": "^7.9.6",
- "@babel/types": "^7.9.6",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.1",
- "json5": "^2.1.2",
- "lodash": "^4.17.13",
- "resolve": "^1.3.2",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "@babel/generator": {
- "version": "7.9.6",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz",
- "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.9.6",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.13",
- "source-map": "^0.5.0"
- }
- },
- "@babel/helper-function-name": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz",
- "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==",
- "dev": true,
- "requires": {
- "@babel/helper-get-function-arity": "^7.8.3",
- "@babel/template": "^7.8.3",
- "@babel/types": "^7.9.5"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
- "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-member-expression-to-functions": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz",
- "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-module-imports": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz",
- "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-module-transforms": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz",
- "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.8.3",
- "@babel/helper-replace-supers": "^7.8.6",
- "@babel/helper-simple-access": "^7.8.3",
- "@babel/helper-split-export-declaration": "^7.8.3",
- "@babel/template": "^7.8.6",
- "@babel/types": "^7.9.0",
- "lodash": "^4.17.13"
- }
- },
- "@babel/helper-optimise-call-expression": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz",
- "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
- "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==",
- "dev": true
- },
- "@babel/helper-replace-supers": {
- "version": "7.9.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz",
- "integrity": "sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==",
- "dev": true,
- "requires": {
- "@babel/helper-member-expression-to-functions": "^7.8.3",
- "@babel/helper-optimise-call-expression": "^7.8.3",
- "@babel/traverse": "^7.9.6",
- "@babel/types": "^7.9.6"
- }
- },
- "@babel/helper-simple-access": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz",
- "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.8.3",
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
- "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz",
- "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==",
- "dev": true
- },
- "@babel/helpers": {
- "version": "7.9.6",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz",
- "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.8.3",
- "@babel/traverse": "^7.9.6",
- "@babel/types": "^7.9.6"
- }
- },
- "@babel/highlight": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
- "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.9.0",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/parser": {
- "version": "7.9.6",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz",
- "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==",
- "dev": true
- },
- "@babel/plugin-syntax-async-generators": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-bigint": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
- "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-class-properties": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.8.3.tgz",
- "integrity": "sha512-UcAyQWg2bAN647Q+O811tG9MrJ38Z10jjhQdKNAL8fsyPzE3cCN/uT+f55cFVY4aGO4jqJAvmqsuY3GQDwAoXg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.8.3.tgz",
- "integrity": "sha512-Zpg2Sgc++37kuFl6ppq2Q7Awc6E6AIW671x5PY8E/f7MCIyPPGK/EoeZXvvY3P42exZ3Q4/t3YOzP/HiN79jDg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-numeric-separator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz",
- "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/runtime": {
- "version": "7.9.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz",
- "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==",
- "dev": true,
- "requires": {
- "regenerator-runtime": "^0.13.4"
- },
- "dependencies": {
- "regenerator-runtime": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
- "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==",
- "dev": true
- }
- }
- },
- "@babel/runtime-corejs3": {
- "version": "7.9.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.9.6.tgz",
- "integrity": "sha512-6toWAfaALQjt3KMZQc6fABqZwUDDuWzz+cAfPhqyEnzxvdWOAkjwPNxgF8xlmo7OWLsSjaKjsskpKHRLaMArOA==",
- "dev": true,
- "requires": {
- "core-js-pure": "^3.0.0",
- "regenerator-runtime": "^0.13.4"
- },
- "dependencies": {
- "regenerator-runtime": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
- "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==",
- "dev": true
- }
- }
- },
- "@babel/template": {
- "version": "7.8.6",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
- "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/parser": "^7.8.6",
- "@babel/types": "^7.8.6"
- }
- },
- "@babel/traverse": {
- "version": "7.9.6",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz",
- "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.9.6",
- "@babel/helper-function-name": "^7.9.5",
- "@babel/helper-split-export-declaration": "^7.8.3",
- "@babel/parser": "^7.9.6",
- "@babel/types": "^7.9.6",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.13"
- },
- "dependencies": {
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
- }
- }
- },
- "@babel/types": {
- "version": "7.9.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
- "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.9.5",
- "lodash": "^4.17.13",
- "to-fast-properties": "^2.0.0"
- }
- },
- "@bcoe/v8-coverage": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
- "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
- "dev": true
- },
- "@cnakazawa/watch": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
- "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==",
- "dev": true,
- "requires": {
- "exec-sh": "^0.3.2",
- "minimist": "^1.2.0"
- }
- },
- "@commitlint/cli": {
- "version": "8.3.5",
- "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-8.3.5.tgz",
- "integrity": "sha512-6+L0vbw55UEdht71pgWOE55SRgb+8OHcEwGDB234VlIBFGK9P2QOBU7MHiYJ5cjdjCQ0rReNrGjOHmJ99jwf0w==",
- "dev": true,
- "requires": {
- "@commitlint/format": "^8.3.4",
- "@commitlint/lint": "^8.3.5",
- "@commitlint/load": "^8.3.5",
- "@commitlint/read": "^8.3.4",
- "babel-polyfill": "6.26.0",
- "chalk": "2.4.2",
- "get-stdin": "7.0.0",
- "lodash": "4.17.15",
- "meow": "5.0.0",
- "resolve-from": "5.0.0",
- "resolve-global": "1.0.0"
- }
- },
- "@commitlint/config-conventional": {
- "version": "8.3.4",
- "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-8.3.4.tgz",
- "integrity": "sha512-w0Yc5+aVAjZgjYqx29igBOnVCj8O22gy3Vo6Fyp7PwoS7+AYS1x3sN7IBq6i7Ae15Mv5P+rEx1pkxXo5zOMe4g==",
- "dev": true,
- "requires": {
- "conventional-changelog-conventionalcommits": "4.2.1"
- },
- "dependencies": {
- "conventional-changelog-conventionalcommits": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.2.1.tgz",
- "integrity": "sha512-vC02KucnkNNap+foDKFm7BVUSDAXktXrUJqGszUuYnt6T0J2azsbYz/w9TDc3VsrW2v6JOtiQWVcgZnporHr4Q==",
- "dev": true,
- "requires": {
- "compare-func": "^1.3.1",
- "lodash": "^4.2.1",
- "q": "^1.5.1"
- }
- }
- }
- },
- "@commitlint/core": {
- "version": "8.3.5",
- "resolved": "https://registry.npmjs.org/@commitlint/core/-/core-8.3.5.tgz",
- "integrity": "sha512-UjfNA95fXZW20dmNJ8upBfH/Br7RPQro3osatmE9l9EZBv0xzHS5Cc4TzXMwe32xxHCqIEUtPFedxAHgELVHmg==",
- "dev": true,
- "requires": {
- "@commitlint/format": "^8.3.4",
- "@commitlint/lint": "^8.3.5",
- "@commitlint/load": "^8.3.5",
- "@commitlint/read": "^8.3.4"
- }
- },
- "@commitlint/ensure": {
- "version": "8.3.4",
- "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-8.3.4.tgz",
- "integrity": "sha512-8NW77VxviLhD16O3EUd02lApMFnrHexq10YS4F4NftNoErKbKaJ0YYedktk2boKrtNRf/gQHY/Qf65edPx4ipw==",
- "dev": true,
- "requires": {
- "lodash": "4.17.15"
- }
- },
- "@commitlint/execute-rule": {
- "version": "8.3.4",
- "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-8.3.4.tgz",
- "integrity": "sha512-f4HigYjeIBn9f7OuNv5zh2y5vWaAhNFrfeul8CRJDy82l3Y+09lxOTGxfF3uMXKrZq4LmuK6qvvRCZ8mUrVvzQ==",
- "dev": true
- },
- "@commitlint/format": {
- "version": "8.3.4",
- "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-8.3.4.tgz",
- "integrity": "sha512-809wlQ/ND6CLZON+w2Rb3YM2TLNDfU2xyyqpZeqzf2reJNpySMSUAeaO/fNDJSOKIsOsR3bI01rGu6hv28k+Nw==",
- "dev": true,
- "requires": {
- "chalk": "^2.0.1"
- }
- },
- "@commitlint/is-ignored": {
- "version": "8.3.5",
- "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-8.3.5.tgz",
- "integrity": "sha512-Zo+8a6gJLFDTqyNRx53wQi/XTiz8mncvmWf/4oRG+6WRcBfjSSHY7KPVj5Y6UaLy2EgZ0WQ2Tt6RdTDeQiQplA==",
- "dev": true,
- "requires": {
- "semver": "6.3.0"
- }
- },
- "@commitlint/lint": {
- "version": "8.3.5",
- "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-8.3.5.tgz",
- "integrity": "sha512-02AkI0a6PU6rzqUvuDkSi6rDQ2hUgkq9GpmdJqfai5bDbxx2939mK4ZO+7apbIh4H6Pae7EpYi7ffxuJgm+3hQ==",
- "dev": true,
- "requires": {
- "@commitlint/is-ignored": "^8.3.5",
- "@commitlint/parse": "^8.3.4",
- "@commitlint/rules": "^8.3.4",
- "babel-runtime": "^6.23.0",
- "lodash": "4.17.15"
- }
- },
- "@commitlint/load": {
- "version": "8.3.5",
- "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-8.3.5.tgz",
- "integrity": "sha512-poF7R1CtQvIXRmVIe63FjSQmN9KDqjRtU5A6hxqXBga87yB2VUJzic85TV6PcQc+wStk52cjrMI+g0zFx+Zxrw==",
- "dev": true,
- "requires": {
- "@commitlint/execute-rule": "^8.3.4",
- "@commitlint/resolve-extends": "^8.3.5",
- "babel-runtime": "^6.23.0",
- "chalk": "2.4.2",
- "cosmiconfig": "^5.2.0",
- "lodash": "4.17.15",
- "resolve-from": "^5.0.0"
- }
- },
- "@commitlint/message": {
- "version": "8.3.4",
- "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-8.3.4.tgz",
- "integrity": "sha512-nEj5tknoOKXqBsaQtCtgPcsAaf5VCg3+fWhss4Vmtq40633xLq0irkdDdMEsYIx8rGR0XPBTukqzln9kAWCkcA==",
- "dev": true
- },
- "@commitlint/parse": {
- "version": "8.3.4",
- "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-8.3.4.tgz",
- "integrity": "sha512-b3uQvpUQWC20EBfKSfMRnyx5Wc4Cn778bVeVOFErF/cXQK725L1bYFvPnEjQO/GT8yGVzq2wtLaoEqjm1NJ/Bw==",
- "dev": true,
- "requires": {
- "conventional-changelog-angular": "^1.3.3",
- "conventional-commits-parser": "^3.0.0",
- "lodash": "^4.17.11"
- }
- },
- "@commitlint/read": {
- "version": "8.3.4",
- "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-8.3.4.tgz",
- "integrity": "sha512-FKv1kHPrvcAG5j+OSbd41IWexsbLhfIXpxVC/YwQZO+FR0EHmygxQNYs66r+GnhD1EfYJYM4WQIqd5bJRx6OIw==",
- "dev": true,
- "requires": {
- "@commitlint/top-level": "^8.3.4",
- "@marionebl/sander": "^0.6.0",
- "babel-runtime": "^6.23.0",
- "git-raw-commits": "^2.0.0"
- }
- },
- "@commitlint/resolve-extends": {
- "version": "8.3.5",
- "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-8.3.5.tgz",
- "integrity": "sha512-nHhFAK29qiXNe6oH6uG5wqBnCR+BQnxlBW/q5fjtxIaQALgfoNLHwLS9exzbIRFqwJckpR6yMCfgMbmbAOtklQ==",
- "dev": true,
- "requires": {
- "import-fresh": "^3.0.0",
- "lodash": "4.17.15",
- "resolve-from": "^5.0.0",
- "resolve-global": "^1.0.0"
- }
- },
- "@commitlint/rules": {
- "version": "8.3.4",
- "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-8.3.4.tgz",
- "integrity": "sha512-xuC9dlqD5xgAoDFgnbs578cJySvwOSkMLQyZADb1xD5n7BNcUJfP8WjT9W1Aw8K3Wf8+Ym/ysr9FZHXInLeaRg==",
- "dev": true,
- "requires": {
- "@commitlint/ensure": "^8.3.4",
- "@commitlint/message": "^8.3.4",
- "@commitlint/to-lines": "^8.3.4",
- "babel-runtime": "^6.23.0"
- }
- },
- "@commitlint/to-lines": {
- "version": "8.3.4",
- "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-8.3.4.tgz",
- "integrity": "sha512-5AvcdwRsMIVq0lrzXTwpbbG5fKRTWcHkhn/hCXJJ9pm1JidsnidS1y0RGkb3O50TEHGewhXwNoavxW9VToscUA==",
- "dev": true
- },
- "@commitlint/top-level": {
- "version": "8.3.4",
- "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-8.3.4.tgz",
- "integrity": "sha512-nOaeLBbAqSZNpKgEtO6NAxmui1G8ZvLG+0wb4rvv6mWhPDzK1GNZkCd8FUZPahCoJ1iHDoatw7F8BbJLg4nDjg==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- }
- },
- "@istanbuljs/load-nyc-config": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz",
- "integrity": "sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg==",
- "dev": true,
- "requires": {
- "camelcase": "^5.3.1",
- "find-up": "^4.1.0",
- "js-yaml": "^3.13.1",
- "resolve-from": "^5.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- }
- }
- },
- "@istanbuljs/schema": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz",
- "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==",
- "dev": true
- },
- "@jest/console": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz",
- "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==",
- "dev": true,
- "requires": {
- "@jest/types": "^25.5.0",
- "chalk": "^3.0.0",
- "jest-message-util": "^25.5.0",
- "jest-util": "^25.5.0",
- "slash": "^3.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "@jest/core": {
- "version": "25.5.4",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-25.5.4.tgz",
- "integrity": "sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA==",
- "dev": true,
- "requires": {
- "@jest/console": "^25.5.0",
- "@jest/reporters": "^25.5.1",
- "@jest/test-result": "^25.5.0",
- "@jest/transform": "^25.5.1",
- "@jest/types": "^25.5.0",
- "ansi-escapes": "^4.2.1",
- "chalk": "^3.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-changed-files": "^25.5.0",
- "jest-config": "^25.5.4",
- "jest-haste-map": "^25.5.1",
- "jest-message-util": "^25.5.0",
- "jest-regex-util": "^25.2.6",
- "jest-resolve": "^25.5.1",
- "jest-resolve-dependencies": "^25.5.4",
- "jest-runner": "^25.5.4",
- "jest-runtime": "^25.5.4",
- "jest-snapshot": "^25.5.1",
- "jest-util": "^25.5.0",
- "jest-validate": "^25.5.0",
- "jest-watcher": "^25.5.0",
- "micromatch": "^4.0.2",
- "p-each-series": "^2.1.0",
- "realpath-native": "^2.0.0",
- "rimraf": "^3.0.0",
- "slash": "^3.0.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-escapes": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
- "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
- "dev": true,
- "requires": {
- "type-fest": "^0.11.0"
- }
- },
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "micromatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
- "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.0.5"
- }
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "type-fest": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
- "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
- "dev": true
- }
- }
- },
- "@jest/environment": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz",
- "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==",
- "dev": true,
- "requires": {
- "@jest/fake-timers": "^25.5.0",
- "@jest/types": "^25.5.0",
- "jest-mock": "^25.5.0"
- }
- },
- "@jest/fake-timers": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz",
- "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==",
- "dev": true,
- "requires": {
- "@jest/types": "^25.5.0",
- "jest-message-util": "^25.5.0",
- "jest-mock": "^25.5.0",
- "jest-util": "^25.5.0",
- "lolex": "^5.0.0"
- }
- },
- "@jest/globals": {
- "version": "25.5.2",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-25.5.2.tgz",
- "integrity": "sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==",
- "dev": true,
- "requires": {
- "@jest/environment": "^25.5.0",
- "@jest/types": "^25.5.0",
- "expect": "^25.5.0"
- }
- },
- "@jest/reporters": {
- "version": "25.5.1",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-25.5.1.tgz",
- "integrity": "sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw==",
- "dev": true,
- "requires": {
- "@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^25.5.0",
- "@jest/test-result": "^25.5.0",
- "@jest/transform": "^25.5.1",
- "@jest/types": "^25.5.0",
- "chalk": "^3.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.2",
- "graceful-fs": "^4.2.4",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^4.0.0",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.0.2",
- "jest-haste-map": "^25.5.1",
- "jest-resolve": "^25.5.1",
- "jest-util": "^25.5.0",
- "jest-worker": "^25.5.0",
- "node-notifier": "^6.0.0",
- "slash": "^3.0.0",
- "source-map": "^0.6.0",
- "string-length": "^3.1.0",
- "terminal-link": "^2.0.0",
- "v8-to-istanbul": "^4.1.3"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "@jest/source-map": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.5.0.tgz",
- "integrity": "sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0",
- "graceful-fs": "^4.2.4",
- "source-map": "^0.6.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
- "@jest/test-result": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz",
- "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==",
- "dev": true,
- "requires": {
- "@jest/console": "^25.5.0",
- "@jest/types": "^25.5.0",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "collect-v8-coverage": "^1.0.0"
- }
- },
- "@jest/test-sequencer": {
- "version": "25.5.4",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz",
- "integrity": "sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==",
- "dev": true,
- "requires": {
- "@jest/test-result": "^25.5.0",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^25.5.1",
- "jest-runner": "^25.5.4",
- "jest-runtime": "^25.5.4"
- }
- },
- "@jest/transform": {
- "version": "25.5.1",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.5.1.tgz",
- "integrity": "sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.1.0",
- "@jest/types": "^25.5.0",
- "babel-plugin-istanbul": "^6.0.0",
- "chalk": "^3.0.0",
- "convert-source-map": "^1.4.0",
- "fast-json-stable-stringify": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^25.5.1",
- "jest-regex-util": "^25.2.6",
- "jest-util": "^25.5.0",
- "micromatch": "^4.0.2",
- "pirates": "^4.0.1",
- "realpath-native": "^2.0.0",
- "slash": "^3.0.0",
- "source-map": "^0.6.1",
- "write-file-atomic": "^3.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "micromatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
- "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.0.5"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- }
- }
- },
- "@jest/types": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz",
- "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^1.1.1",
- "@types/yargs": "^15.0.0",
- "chalk": "^3.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "@marionebl/sander": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/@marionebl/sander/-/sander-0.6.1.tgz",
- "integrity": "sha1-GViWWHTyS8Ub5Ih1/rUNZC/EH3s=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.3",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.2"
- }
- },
- "@octokit/action": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/@octokit/action/-/action-2.7.0.tgz",
- "integrity": "sha512-PY6Zg+Lc8lC3qxHSN88V9e51jB3eiBxo6xJRw39TGWTOU2eJB9LjE7FkSIj75zE/mGTo+OjbBKFKHCYFnoJ41Q==",
- "requires": {
- "@octokit/auth-action": "^1.2.0",
- "@octokit/core": "^2.4.3",
- "@octokit/plugin-paginate-rest": "^2.2.0",
- "@octokit/plugin-rest-endpoint-methods": "3.11.0",
- "@octokit/types": "^2.0.2"
- }
- },
- "@octokit/auth-action": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@octokit/auth-action/-/auth-action-1.2.0.tgz",
- "integrity": "sha512-AlHcxjGUGIw86FNhEjO+kvNfcSeV1YDrV8BdGgceHCdtbh1DlI3jwsujY4Y2JjIsVpwKaoGQ4mL1s0354SiODA==",
- "requires": {
- "@octokit/auth-token": "^2.4.0",
- "@octokit/types": "^2.0.0"
- }
- },
- "@octokit/auth-token": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.0.tgz",
- "integrity": "sha512-eoOVMjILna7FVQf96iWc3+ZtE/ZT6y8ob8ZzcqKY1ibSQCnu4O/B7pJvzMx5cyZ/RjAff6DAdEb0O0Cjcxidkg==",
- "requires": {
- "@octokit/types": "^2.0.0"
- }
- },
- "@octokit/core": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@octokit/core/-/core-2.5.0.tgz",
- "integrity": "sha512-uvzmkemQrBgD8xuGbjhxzJN1darJk9L2cS+M99cHrDG2jlSVpxNJVhoV86cXdYBqdHCc9Z995uLCczaaHIYA6Q==",
- "requires": {
- "@octokit/auth-token": "^2.4.0",
- "@octokit/graphql": "^4.3.1",
- "@octokit/request": "^5.4.0",
- "@octokit/types": "^2.0.0",
- "before-after-hook": "^2.1.0",
- "universal-user-agent": "^5.0.0"
- }
- },
- "@octokit/endpoint": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.1.tgz",
- "integrity": "sha512-pOPHaSz57SFT/m3R5P8MUu4wLPszokn5pXcB/pzavLTQf2jbU+6iayTvzaY6/BiotuRS0qyEUkx3QglT4U958A==",
- "requires": {
- "@octokit/types": "^2.11.1",
- "is-plain-object": "^3.0.0",
- "universal-user-agent": "^5.0.0"
- }
- },
- "@octokit/fixtures": {
- "version": "21.0.5",
- "resolved": "https://registry.npmjs.org/@octokit/fixtures/-/fixtures-21.0.5.tgz",
- "integrity": "sha512-tUErZKXOP5lHd6WsTExSkU7FpO6fz56p/xQy6DDC0r/eWr6ywg3UTwW+rrsVW1RXoF+zKofzTs9QgE7Xyjf6Yg==",
- "dev": true,
- "requires": {
- "json-diff": "^0.5.3",
- "lodash": "^4.17.11",
- "nock": "^12.0.0",
- "url-template": "^2.0.8"
- }
- },
- "@octokit/graphql": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.4.0.tgz",
- "integrity": "sha512-Du3hAaSROQ8EatmYoSAJjzAz3t79t9Opj/WY1zUgxVUGfIKn0AEjg+hlOLscF6fv6i/4y/CeUvsWgIfwMkTccw==",
- "requires": {
- "@octokit/request": "^5.3.0",
- "@octokit/types": "^2.0.0",
- "universal-user-agent": "^5.0.0"
- }
- },
- "@octokit/plugin-paginate-rest": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.2.0.tgz",
- "integrity": "sha512-KoNxC3PLNar8UJwR+1VMQOw2IoOrrFdo5YOiDKnBhpVbKpw+zkBKNMNKwM44UWL25Vkn0Sl3nYIEGKY+gW5ebw==",
- "requires": {
- "@octokit/types": "^2.12.1"
- }
- },
- "@octokit/plugin-rest-endpoint-methods": {
- "version": "3.11.0",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-3.11.0.tgz",
- "integrity": "sha512-D31cBYhlOt6Om2xNkCNZUjyWdaDKUfa4HwpLwL8Dnu8aDuVuuOPLUhFMUDE0GvfqlNQFrNtU7n5HaZm+KmRdsw==",
- "requires": {
- "@octokit/types": "^2.16.0",
- "deprecation": "^2.3.1"
- }
- },
- "@octokit/plugin-retry": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.1.tgz",
- "integrity": "sha512-X+VALkeYyE4XGMHOoOnRS1/OvwvleZ2Xe3yxshaAKJrA4pbjBYptDx7IAY9xQj5JYY9vlCKUsXEZMWLRNxfViw==",
- "requires": {
- "@octokit/types": "^2.0.1",
- "bottleneck": "^2.15.3"
- }
- },
- "@octokit/request": {
- "version": "5.4.2",
- "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.2.tgz",
- "integrity": "sha512-zKdnGuQ2TQ2vFk9VU8awFT4+EYf92Z/v3OlzRaSh4RIP0H6cvW1BFPXq4XYvNez+TPQjqN+0uSkCYnMFFhcFrw==",
- "requires": {
- "@octokit/endpoint": "^6.0.1",
- "@octokit/request-error": "^2.0.0",
- "@octokit/types": "^2.11.1",
- "deprecation": "^2.0.0",
- "is-plain-object": "^3.0.0",
- "node-fetch": "^2.3.0",
- "once": "^1.4.0",
- "universal-user-agent": "^5.0.0"
- }
- },
- "@octokit/request-error": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.0.tgz",
- "integrity": "sha512-rtYicB4Absc60rUv74Rjpzek84UbVHGHJRu4fNVlZ1mCcyUPPuzFfG9Rn6sjHrd95DEsmjSt1Axlc699ZlbDkw==",
- "requires": {
- "@octokit/types": "^2.0.0",
- "deprecation": "^2.0.0",
- "once": "^1.4.0"
- }
- },
- "@octokit/types": {
- "version": "2.16.2",
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz",
- "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==",
- "requires": {
- "@types/node": ">= 8"
- }
- },
- "@sinonjs/commons": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.2.tgz",
- "integrity": "sha512-+DUO6pnp3udV/v2VfUWgaY5BIE1IfT7lLfeDzPVeMT1XKkaAp9LgSI9x5RtrFQoZ9Oi0PgXQQHPaoKu7dCjVxw==",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- },
- "@sinonjs/fake-timers": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
- "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.7.0"
- }
- },
- "@types/babel__core": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.7.tgz",
- "integrity": "sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw==",
- "dev": true,
- "requires": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0",
- "@types/babel__generator": "*",
- "@types/babel__template": "*",
- "@types/babel__traverse": "*"
- }
- },
- "@types/babel__generator": {
- "version": "7.6.1",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz",
- "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.0.0"
- }
- },
- "@types/babel__template": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz",
- "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==",
- "dev": true,
- "requires": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0"
- }
- },
- "@types/babel__traverse": {
- "version": "7.0.11",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.11.tgz",
- "integrity": "sha512-ddHK5icION5U6q11+tV2f9Mo6CZVuT8GJKld2q9LqHSZbvLbH34Kcu2yFGckZut453+eQU6btIA3RihmnRgI+Q==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.3.0"
- }
- },
- "@types/bluebird": {
- "version": "3.5.30",
- "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.30.tgz",
- "integrity": "sha512-8LhzvcjIoqoi1TghEkRMkbbmM+jhHnBokPGkJWjclMK+Ks0MxEBow3/p2/iFTZ+OIbJHQDSfpgdZEb+af3gfVw==",
- "dev": true
- },
- "@types/color-name": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
- "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
- "dev": true
- },
- "@types/eslint-visitor-keys": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
- "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==",
- "dev": true
- },
- "@types/fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-UoOfVEzAUpeSPmjm7h1uk5MH6KZma2z2O7a75onTGjnNvAvMVrPzPL/vBbT65iIGHWj6rokwfmYcmxmlSf2uwg==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/graceful-fs": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.3.tgz",
- "integrity": "sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/istanbul-lib-coverage": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz",
- "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==",
- "dev": true
- },
- "@types/istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-coverage": "*"
- }
- },
- "@types/istanbul-reports": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz",
- "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-coverage": "*",
- "@types/istanbul-lib-report": "*"
- }
- },
- "@types/jest": {
- "version": "25.2.2",
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.2.2.tgz",
- "integrity": "sha512-aRctFbG8Pb7DSLzUt/fEtL3q/GKb9mretFuYhRub2J0q6NhzBYbx9HTQzHrWgBNIxYOlxGNVe6Z54cpbUt+Few==",
- "dev": true,
- "requires": {
- "jest-diff": "^25.2.1",
- "pretty-format": "^25.2.1"
- }
- },
- "@types/js-yaml": {
- "version": "3.12.3",
- "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.3.tgz",
- "integrity": "sha512-otRe77JNNWzoVGLKw8TCspKswRoQToys4tuL6XYVBFxjgeM0RUrx7m3jkaTdxILxeGry3zM8mGYkGXMeQ02guA==",
- "dev": true
- },
- "@types/json-schema": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz",
- "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==",
- "dev": true
- },
- "@types/minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=",
- "dev": true
- },
- "@types/node": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.1.tgz",
- "integrity": "sha512-FAYBGwC+W6F9+huFIDtn43cpy7+SzG+atzRiTfdp3inUKL2hXnd4rG8hylJLIh4+hqrQy1P17kvJByE/z825hA=="
- },
- "@types/normalize-package-data": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
- "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
- "dev": true
- },
- "@types/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
- "dev": true
- },
- "@types/prettier": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz",
- "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==",
- "dev": true
- },
- "@types/promise-retry": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@types/promise-retry/-/promise-retry-1.1.3.tgz",
- "integrity": "sha512-LxIlEpEX6frE3co3vCO2EUJfHIta1IOmhDlcAsR4GMMv9hev1iTI9VwberVGkePJAuLZs5rMucrV8CziCfuJMw==",
- "dev": true,
- "requires": {
- "@types/retry": "*"
- }
- },
- "@types/retry": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz",
- "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==",
- "dev": true
- },
- "@types/stack-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
- "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==",
- "dev": true
- },
- "@types/uuid": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-7.0.3.tgz",
- "integrity": "sha512-PUdqTZVrNYTNcIhLHkiaYzoOIaUi5LFg/XLerAdgvwQrUCx+oSbtoBze1AMyvYbcwzUSNC+Isl58SM4Sm/6COw==",
- "dev": true
- },
- "@types/yargs": {
- "version": "15.0.5",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz",
- "integrity": "sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- },
- "@types/yargs-parser": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz",
- "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==",
- "dev": true
- },
- "@typescript-eslint/eslint-plugin": {
- "version": "2.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.33.0.tgz",
- "integrity": "sha512-QV6P32Btu1sCI/kTqjTNI/8OpCYyvlGjW5vD8MpTIg+HGE5S88HtT1G+880M4bXlvXj/NjsJJG0aGcVh0DdbeQ==",
- "dev": true,
- "requires": {
- "@typescript-eslint/experimental-utils": "2.33.0",
- "functional-red-black-tree": "^1.0.1",
- "regexpp": "^3.0.0",
- "tsutils": "^3.17.1"
- },
- "dependencies": {
- "regexpp": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
- "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
- "dev": true
- }
- }
- },
- "@typescript-eslint/experimental-utils": {
- "version": "2.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.33.0.tgz",
- "integrity": "sha512-qzPM2AuxtMrRq78LwyZa8Qn6gcY8obkIrBs1ehqmQADwkYzTE1Pb4y2W+U3rE/iFkSWcWHG2LS6MJfj6SmHApg==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.3",
- "@typescript-eslint/typescript-estree": "2.33.0",
- "eslint-scope": "^5.0.0",
- "eslint-utils": "^2.0.0"
- }
- },
- "@typescript-eslint/parser": {
- "version": "2.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.33.0.tgz",
- "integrity": "sha512-AUtmwUUhJoH6yrtxZMHbRUEMsC2G6z5NSxg9KsROOGqNXasM71I8P2NihtumlWTUCRld70vqIZ6Pm4E5PAziEA==",
- "dev": true,
- "requires": {
- "@types/eslint-visitor-keys": "^1.0.0",
- "@typescript-eslint/experimental-utils": "2.33.0",
- "@typescript-eslint/typescript-estree": "2.33.0",
- "eslint-visitor-keys": "^1.1.0"
- }
- },
- "@typescript-eslint/typescript-estree": {
- "version": "2.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.33.0.tgz",
- "integrity": "sha512-d8rY6/yUxb0+mEwTShCQF2zYQdLlqihukNfG9IUlLYz5y1CH6G/9XYbrxQLq3Z14RNvkCC6oe+OcFlyUpwUbkg==",
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "eslint-visitor-keys": "^1.1.0",
- "glob": "^7.1.6",
- "is-glob": "^4.0.1",
- "lodash": "^4.17.15",
- "semver": "^7.3.2",
- "tsutils": "^3.17.1"
- },
- "dependencies": {
- "semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
- "dev": true
- }
- }
- },
- "@zeit/ncc": {
- "version": "0.22.1",
- "resolved": "https://registry.npmjs.org/@zeit/ncc/-/ncc-0.22.1.tgz",
- "integrity": "sha512-Qq3bMuonkcnV/96jhy9SQYdh39NXHxNMJ1O31ZFzWG9n52fR2DLtgrNzhj/ahlEjnBziMLGVWDbaS9sf03/fEw==",
- "dev": true
- },
- "JSONStream": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
- "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
- "dev": true,
- "requires": {
- "jsonparse": "^1.2.0",
- "through": ">=2.2.7 <3"
- }
- },
- "abab": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz",
- "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==",
- "dev": true
- },
- "acorn": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz",
- "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==",
- "dev": true
- },
- "acorn-globals": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
- "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
- "dev": true,
- "requires": {
- "acorn": "^6.0.1",
- "acorn-walk": "^6.0.1"
- },
- "dependencies": {
- "acorn": {
- "version": "6.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
- "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==",
- "dev": true
- }
- }
- },
- "acorn-jsx": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz",
- "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==",
- "dev": true
- },
- "acorn-walk": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
- "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
- "dev": true
- },
- "ajv": {
- "version": "6.12.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
- "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-escapes": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
- "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
- "dev": true
- },
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "anymatch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
- "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "aria-query": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz",
- "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=",
- "dev": true,
- "requires": {
- "ast-types-flow": "0.0.7",
- "commander": "^2.11.0"
- }
- },
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true
- },
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
- "dev": true
- },
- "array-equal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
- "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
- "dev": true
- },
- "array-find-index": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
- "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
- "dev": true
- },
- "array-ify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
- "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=",
- "dev": true
- },
- "array-includes": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz",
- "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0",
- "is-string": "^1.0.5"
- }
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
- },
- "array.prototype.flat": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz",
- "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0-next.1"
- }
- },
- "arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
- "dev": true
- },
- "asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "dev": true,
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true
- },
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
- "dev": true
- },
- "ast-types-flow": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
- "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=",
- "dev": true
- },
- "astral-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
- "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
- "dev": true
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
- "at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="
- },
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "dev": true
- },
- "aws4": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
- "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==",
- "dev": true
- },
- "axobject-query": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.1.2.tgz",
- "integrity": "sha512-ICt34ZmrVt8UQnvPl6TVyDTkmhXmAyAT4Jh5ugfGUX4MOrZ+U/ZY6/sdylRw3qGNr9Ub5AJsaHeDMzNLehRdOQ==",
- "dev": true
- },
- "babel-eslint": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
- "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.7.0",
- "@babel/traverse": "^7.7.0",
- "@babel/types": "^7.7.0",
- "eslint-visitor-keys": "^1.0.0",
- "resolve": "^1.12.0"
- }
- },
- "babel-jest": {
- "version": "25.5.1",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz",
- "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==",
- "dev": true,
- "requires": {
- "@jest/transform": "^25.5.1",
- "@jest/types": "^25.5.0",
- "@types/babel__core": "^7.1.7",
- "babel-plugin-istanbul": "^6.0.0",
- "babel-preset-jest": "^25.5.0",
- "chalk": "^3.0.0",
- "graceful-fs": "^4.2.4",
- "slash": "^3.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "babel-plugin-istanbul": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz",
- "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^4.0.0",
- "test-exclude": "^6.0.0"
- }
- },
- "babel-plugin-jest-hoist": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz",
- "integrity": "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__traverse": "^7.0.6"
- }
- },
- "babel-polyfill": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
- "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.26.0",
- "core-js": "^2.5.0",
- "regenerator-runtime": "^0.10.5"
- },
- "dependencies": {
- "regenerator-runtime": {
- "version": "0.10.5",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
- "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
- "dev": true
- }
- }
- },
- "babel-preset-current-node-syntax": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.2.tgz",
- "integrity": "sha512-u/8cS+dEiK1SFILbOC8/rUI3ml9lboKuuMvZ/4aQnQmhecQAgPw5ew066C1ObnEAUmlx7dv/s2z52psWEtLNiw==",
- "dev": true,
- "requires": {
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.8.3",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.8.3",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3"
- }
- },
- "babel-preset-jest": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz",
- "integrity": "sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==",
- "dev": true,
- "requires": {
- "babel-plugin-jest-hoist": "^25.5.0",
- "babel-preset-current-node-syntax": "^0.1.2"
- }
- },
- "babel-runtime": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
- "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
- "dev": true,
- "requires": {
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.11.0"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
- },
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "dev": true,
- "requires": {
- "tweetnacl": "^0.14.3"
- }
- },
- "before-after-hook": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz",
- "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A=="
- },
- "bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
- },
- "bottleneck": {
- "version": "2.19.5",
- "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz",
- "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw=="
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true
- },
- "browser-resolve": {
- "version": "1.11.3",
- "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
- "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
- "dev": true,
- "requires": {
- "resolve": "1.1.7"
- },
- "dependencies": {
- "resolve": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
- "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
- "dev": true
- }
- }
- },
- "bs-logger": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz",
- "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==",
- "dev": true,
- "requires": {
- "fast-json-stable-stringify": "2.x"
- }
- },
- "bser": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
- "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
- "dev": true,
- "requires": {
- "node-int64": "^0.4.0"
- }
- },
- "buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
- "dev": true
- },
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
- "requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "cachedir": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.2.0.tgz",
- "integrity": "sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ==",
- "dev": true
- },
- "caller-callsite": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
- "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
- "dev": true,
- "requires": {
- "callsites": "^2.0.0"
- },
- "dependencies": {
- "callsites": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
- "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
- "dev": true
- }
- }
- },
- "caller-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
- "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
- "dev": true,
- "requires": {
- "caller-callsite": "^2.0.0"
- }
- },
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
- },
- "camelcase": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz",
- "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==",
- "dev": true
- },
- "camelcase-keys": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
- "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
- "dev": true,
- "requires": {
- "camelcase": "^5.3.1",
- "map-obj": "^4.0.0",
- "quick-lru": "^4.0.1"
- },
- "dependencies": {
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- }
- }
- },
- "capture-exit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
- "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
- "dev": true,
- "requires": {
- "rsvp": "^4.8.4"
- }
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
- "dev": true
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "chardet": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
- "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
- "dev": true
- },
- "ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
- "dev": true
- },
- "class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "cli-color": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-0.1.7.tgz",
- "integrity": "sha1-rcMgD6RxzCEbDaf1ZrcemLnWc0c=",
- "dev": true,
- "requires": {
- "es5-ext": "0.8.x"
- }
- },
- "cli-cursor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
- "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
- "dev": true,
- "requires": {
- "restore-cursor": "^2.0.0"
- }
- },
- "cli-width": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
- "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==",
- "dev": true
- },
- "cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- }
- }
- },
- "co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
- "dev": true
- },
- "collect-v8-coverage": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
- "dev": true
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "dev": true,
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true
- },
- "comment-parser": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.7.4.tgz",
- "integrity": "sha512-Nnl77/mt6sj1BiYSVMeMWzvD0183F2MFOJyFRmZHimUVDYS9J40AvXpiFA7RpU5pQH+HkvYc0dnsHpwW2xmbyQ==",
- "dev": true
- },
- "commitizen": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.1.2.tgz",
- "integrity": "sha512-LBxTQKHbVgroMz9ohpm86N+GfJobonGyvDc3zBGdZazbwCLz2tqLa48Rf2TnAdKx7/06W1i1R3SXUt5QW97qVQ==",
- "dev": true,
- "requires": {
- "cachedir": "2.2.0",
- "cz-conventional-changelog": "3.2.0",
- "dedent": "0.7.0",
- "detect-indent": "6.0.0",
- "find-node-modules": "2.0.0",
- "find-root": "1.1.0",
- "fs-extra": "8.1.0",
- "glob": "7.1.4",
- "inquirer": "6.5.0",
- "is-utf8": "^0.2.1",
- "lodash": "4.17.15",
- "minimist": "1.2.5",
- "strip-bom": "4.0.0",
- "strip-json-comments": "3.0.1"
- },
- "dependencies": {
- "fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "glob": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
- "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true
- },
- "universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "dev": true
- }
- }
- },
- "compare-func": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz",
- "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=",
- "dev": true,
- "requires": {
- "array-ify": "^1.0.0",
- "dot-prop": "^3.0.0"
- }
- },
- "compare-versions": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz",
- "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==",
- "dev": true
- },
- "component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
- },
- "contains-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
- "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
- "dev": true
- },
- "conventional-changelog-angular": {
- "version": "1.6.6",
- "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz",
- "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==",
- "dev": true,
- "requires": {
- "compare-func": "^1.3.1",
- "q": "^1.5.1"
- }
- },
- "conventional-changelog-conventionalcommits": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.3.0.tgz",
- "integrity": "sha512-oYHydvZKU+bS8LnGqTMlNrrd7769EsuEHKy4fh1oMdvvDi7fem8U+nvfresJ1IDB8K00Mn4LpiA/lR+7Gs6rgg==",
- "dev": true,
- "requires": {
- "compare-func": "^1.3.1",
- "lodash": "^4.17.15",
- "q": "^1.5.1"
- }
- },
- "conventional-commit-types": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz",
- "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==",
- "dev": true
- },
- "conventional-commits-parser": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.1.0.tgz",
- "integrity": "sha512-RSo5S0WIwXZiRxUGTPuYFbqvrR4vpJ1BDdTlthFgvHt5kEdnd1+pdvwWphWn57/oIl4V72NMmOocFqqJ8mFFhA==",
- "dev": true,
- "requires": {
- "JSONStream": "^1.0.4",
- "is-text-path": "^1.0.1",
- "lodash": "^4.17.15",
- "meow": "^7.0.0",
- "split2": "^2.0.0",
- "through2": "^3.0.0",
- "trim-off-newlines": "^1.0.0"
- },
- "dependencies": {
- "meow": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-7.0.1.tgz",
- "integrity": "sha512-tBKIQqVrAHqwit0vfuFPY3LlzJYkEOFyKa3bPgxzNl6q/RtN8KQ+ALYEASYuFayzSAsjlhXj/JZ10rH85Q6TUw==",
- "dev": true,
- "requires": {
- "@types/minimist": "^1.2.0",
- "arrify": "^2.0.1",
- "camelcase": "^6.0.0",
- "camelcase-keys": "^6.2.2",
- "decamelize-keys": "^1.1.0",
- "hard-rejection": "^2.1.0",
- "minimist-options": "^4.0.2",
- "normalize-package-data": "^2.5.0",
- "read-pkg-up": "^7.0.1",
- "redent": "^3.0.0",
- "trim-newlines": "^3.0.0",
- "type-fest": "^0.13.1",
- "yargs-parser": "^18.1.3"
- }
- }
- }
- },
- "convert-source-map": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
- "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- }
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
- "dev": true
- },
- "core-js": {
- "version": "2.6.11",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
- "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
- "dev": true
- },
- "core-js-pure": {
- "version": "3.6.5",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz",
- "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==",
- "dev": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
- },
- "cosmiconfig": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
- "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
- "dev": true,
- "requires": {
- "import-fresh": "^2.0.0",
- "is-directory": "^0.3.1",
- "js-yaml": "^3.13.1",
- "parse-json": "^4.0.0"
- },
- "dependencies": {
- "import-fresh": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
- "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
- "dev": true,
- "requires": {
- "caller-path": "^2.0.0",
- "resolve-from": "^3.0.0"
- }
- },
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "resolve-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
- "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
- "dev": true
- }
- }
- },
- "cross-fetch": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.2.tgz",
- "integrity": "sha1-pH/09/xxLauo9qaVoRyUhEDUVyM=",
- "dev": true,
- "requires": {
- "node-fetch": "2.1.2",
- "whatwg-fetch": "2.0.4"
- },
- "dependencies": {
- "node-fetch": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz",
- "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=",
- "dev": true
- }
- }
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- }
- }
- },
- "cssom": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
- "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
- "dev": true
- },
- "cssstyle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
- "dev": true,
- "requires": {
- "cssom": "~0.3.6"
- },
- "dependencies": {
- "cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
- "dev": true
- }
- }
- },
- "currently-unhandled": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
- "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
- "dev": true,
- "requires": {
- "array-find-index": "^1.0.1"
- }
- },
- "cz-conventional-changelog": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.2.0.tgz",
- "integrity": "sha512-yAYxeGpVi27hqIilG1nh4A9Bnx4J3Ov+eXy4koL3drrR+IO9GaWPsKjik20ht608Asqi8TQPf0mczhEeyAtMzg==",
- "dev": true,
- "requires": {
- "@commitlint/load": ">6.1.1",
- "chalk": "^2.4.1",
- "commitizen": "^4.0.3",
- "conventional-commit-types": "^3.0.0",
- "lodash.map": "^4.5.1",
- "longest": "^2.0.1",
- "word-wrap": "^1.0.3"
- }
- },
- "damerau-levenshtein": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz",
- "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==",
- "dev": true
- },
- "dargs": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz",
- "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==",
- "dev": true
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "data-urls": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
- "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
- "dev": true,
- "requires": {
- "abab": "^2.0.0",
- "whatwg-mimetype": "^2.2.0",
- "whatwg-url": "^7.0.0"
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- },
- "decamelize-keys": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
- "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
- "dev": true,
- "requires": {
- "decamelize": "^1.1.0",
- "map-obj": "^1.0.0"
- },
- "dependencies": {
- "map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
- "dev": true
- }
- }
- },
- "decimal.js": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz",
- "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==",
- "dev": true
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true
- },
- "dedent": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
- "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
- "dev": true
- },
- "deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
- "dev": true
- },
- "deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
- "dev": true
- },
- "define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "dev": true,
- "requires": {
- "object-keys": "^1.0.12"
- }
- },
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- },
- "dependencies": {
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true
- },
- "deprecation": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
- "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
- },
- "detect-file": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
- "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
- "dev": true
- },
- "detect-indent": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz",
- "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==",
- "dev": true
- },
- "detect-newline": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
- "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
- "dev": true
- },
- "diff-sequences": {
- "version": "25.2.6",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz",
- "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==",
- "dev": true
- },
- "difflib": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz",
- "integrity": "sha1-teMDYabbAjF21WKJLbhZQKcY9H4=",
- "dev": true,
- "requires": {
- "heap": ">= 0.2.0"
- }
- },
- "doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "domexception": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
- "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
- "dev": true,
- "requires": {
- "webidl-conversions": "^4.0.2"
- }
- },
- "dot-prop": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz",
- "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=",
- "dev": true,
- "requires": {
- "is-obj": "^1.0.0"
- }
- },
- "dreamopt": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/dreamopt/-/dreamopt-0.6.0.tgz",
- "integrity": "sha1-2BPM2sjTnYrVJndVFKE92mZNa0s=",
- "dev": true,
- "requires": {
- "wordwrap": ">=0.0.2"
- }
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "dev": true,
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "requires": {
- "once": "^1.4.0"
- }
- },
- "err-code": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz",
- "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA="
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "es-abstract": {
- "version": "1.17.5",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
- "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
- "dev": true,
- "requires": {
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1",
- "is-callable": "^1.1.5",
- "is-regex": "^1.0.5",
- "object-inspect": "^1.7.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.0",
- "string.prototype.trimleft": "^2.1.1",
- "string.prototype.trimright": "^2.1.1"
- }
- },
- "es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dev": true,
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- }
- },
- "es5-ext": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.8.2.tgz",
- "integrity": "sha1-q6jZ4ZQ6iVrJaDemKjmz9V7NlKs=",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
- },
- "escodegen": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz",
- "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==",
- "dev": true,
- "requires": {
- "esprima": "^4.0.1",
- "estraverse": "^4.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1",
- "source-map": "~0.6.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "optional": true
- }
- }
- },
- "eslint": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
- "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "ajv": "^6.10.0",
- "chalk": "^2.1.0",
- "cross-spawn": "^6.0.5",
- "debug": "^4.0.1",
- "doctrine": "^3.0.0",
- "eslint-scope": "^5.0.0",
- "eslint-utils": "^1.4.3",
- "eslint-visitor-keys": "^1.1.0",
- "espree": "^6.1.2",
- "esquery": "^1.0.1",
- "esutils": "^2.0.2",
- "file-entry-cache": "^5.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.0.0",
- "globals": "^12.1.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "inquirer": "^7.0.0",
- "is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.3.0",
- "lodash": "^4.17.14",
- "minimatch": "^3.0.4",
- "mkdirp": "^0.5.1",
- "natural-compare": "^1.4.0",
- "optionator": "^0.8.3",
- "progress": "^2.0.0",
- "regexpp": "^2.0.1",
- "semver": "^6.1.2",
- "strip-ansi": "^5.2.0",
- "strip-json-comments": "^3.0.1",
- "table": "^5.2.3",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
- },
- "dependencies": {
- "ansi-escapes": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
- "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
- "dev": true,
- "requires": {
- "type-fest": "^0.11.0"
- }
- },
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
- "dev": true,
- "requires": {
- "restore-cursor": "^3.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "eslint-utils": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
- "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^1.1.0"
- }
- },
- "figures": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "inquirer": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz",
- "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==",
- "dev": true,
- "requires": {
- "ansi-escapes": "^4.2.1",
- "chalk": "^3.0.0",
- "cli-cursor": "^3.1.0",
- "cli-width": "^2.0.0",
- "external-editor": "^3.0.3",
- "figures": "^3.0.0",
- "lodash": "^4.17.15",
- "mute-stream": "0.0.8",
- "run-async": "^2.4.0",
- "rxjs": "^6.5.3",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0",
- "through": "^2.3.6"
- },
- "dependencies": {
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- }
- }
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true
- },
- "mute-stream": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
- "dev": true
- },
- "onetime": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
- "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
- "dev": true,
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
- "dev": true,
- "requires": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- }
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- }
- }
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "type-fest": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
- "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
- "dev": true
- }
- }
- },
- "eslint-config-prettier": {
- "version": "6.11.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz",
- "integrity": "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==",
- "dev": true,
- "requires": {
- "get-stdin": "^6.0.0"
- },
- "dependencies": {
- "get-stdin": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
- "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==",
- "dev": true
- }
- }
- },
- "eslint-import-resolver-node": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz",
- "integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==",
- "dev": true,
- "requires": {
- "debug": "^2.6.9",
- "resolve": "^1.13.1"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "eslint-module-utils": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz",
- "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==",
- "dev": true,
- "requires": {
- "debug": "^2.6.9",
- "pkg-dir": "^2.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "eslint-plugin-eslint-comments": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.1.2.tgz",
- "integrity": "sha512-QexaqrNeteFfRTad96W+Vi4Zj1KFbkHHNMMaHZEYcovKav6gdomyGzaxSDSL3GoIyUOo078wRAdYlu1caiauIQ==",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.5",
- "ignore": "^5.0.5"
- },
- "dependencies": {
- "ignore": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
- "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==",
- "dev": true
- }
- }
- },
- "eslint-plugin-flowtype": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.7.0.tgz",
- "integrity": "sha512-M+hxhSCk5QBEValO5/UqrS4UunT+MgplIJK5wA1sCtXjzBcZkpTGRwxmLHhGpbHcrmQecgt6ZL/KDdXWqGB7VA==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.15"
- }
- },
- "eslint-plugin-github": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-3.4.1.tgz",
- "integrity": "sha512-wylAFFr//6c7pu719/d9GYOaGYVvIhrfN1QqfjT62ETBTVqqHsbu5L3V5w9xuBCfGRyjrNfEbWZx5ay9nVBK8g==",
- "dev": true,
- "requires": {
- "@typescript-eslint/eslint-plugin": ">=2.5.0",
- "@typescript-eslint/parser": ">=2.5.0",
- "babel-eslint": ">=10.0.3",
- "eslint-config-prettier": ">=6.4.0",
- "eslint-plugin-eslint-comments": ">=3.0.1",
- "eslint-plugin-flowtype": ">=4.3.0",
- "eslint-plugin-graphql": ">=3.0.1",
- "eslint-plugin-import": ">=2.18.2",
- "eslint-plugin-jsdoc": ">=15.5.2",
- "eslint-plugin-jsx-a11y": ">=6.0.0",
- "eslint-plugin-prettier": ">=2.6.0",
- "eslint-plugin-react": ">=7.7.0",
- "eslint-plugin-relay": ">=1.0.0",
- "eslint-rule-documentation": ">=1.0.0",
- "inquirer": ">=6.0.0",
- "prettier": ">=1.12.0",
- "read-pkg-up": ">=6.0.0",
- "supports-color": "^7.1.0",
- "svg-element-attributes": ">=1.2.1"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "eslint-plugin-graphql": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-graphql/-/eslint-plugin-graphql-3.1.1.tgz",
- "integrity": "sha512-VNu2AipS8P1BAnE/tcJ2EmBWjFlCnG+1jKdUlFNDQjocWZlFiPpMu9xYNXePoEXK+q+jG51M/6PdhOjEgJZEaQ==",
- "dev": true,
- "requires": {
- "graphql-config": "^2.0.1",
- "lodash": "^4.11.1"
- }
- },
- "eslint-plugin-import": {
- "version": "2.20.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz",
- "integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==",
- "dev": true,
- "requires": {
- "array-includes": "^3.0.3",
- "array.prototype.flat": "^1.2.1",
- "contains-path": "^0.1.0",
- "debug": "^2.6.9",
- "doctrine": "1.5.0",
- "eslint-import-resolver-node": "^0.3.2",
- "eslint-module-utils": "^2.4.1",
- "has": "^1.0.3",
- "minimatch": "^3.0.4",
- "object.values": "^1.1.0",
- "read-pkg-up": "^2.0.0",
- "resolve": "^1.12.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "doctrine": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
- "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "isarray": "^1.0.0"
- }
- },
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "load-json-file": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
- "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dev": true,
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true
- },
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true,
- "requires": {
- "error-ex": "^1.2.0"
- }
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- },
- "path-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
- "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
- "dev": true,
- "requires": {
- "pify": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "read-pkg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
- "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
- "dev": true,
- "requires": {
- "load-json-file": "^2.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^2.0.0"
- }
- },
- "read-pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
- "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^2.0.0"
- }
- }
- }
- },
- "eslint-plugin-jest": {
- "version": "23.11.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-23.11.0.tgz",
- "integrity": "sha512-qedvh6mcMgoLFHjITtG40yKOCu5Fa1GMYesDOclU30ZvtVkf+DaH0fnCn1ysOX/QMdk2SGhQvxvYLowcLaM0GA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/experimental-utils": "^2.5.0"
- }
- },
- "eslint-plugin-jsdoc": {
- "version": "25.4.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-25.4.1.tgz",
- "integrity": "sha512-EixCLTv36/etbr5GGC89n0GLDkU/5NmadPzI3x6gSzldqrZpyQVh6qqN3jarWdfTvJsimorP4KNCIwe5mk/7TA==",
- "dev": true,
- "requires": {
- "comment-parser": "^0.7.4",
- "debug": "^4.1.1",
- "jsdoctypeparser": "^6.1.0",
- "lodash": "^4.17.15",
- "regextras": "^0.7.1",
- "semver": "^6.3.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "eslint-plugin-jsx-a11y": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz",
- "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.4.5",
- "aria-query": "^3.0.0",
- "array-includes": "^3.0.3",
- "ast-types-flow": "^0.0.7",
- "axobject-query": "^2.0.2",
- "damerau-levenshtein": "^1.0.4",
- "emoji-regex": "^7.0.2",
- "has": "^1.0.3",
- "jsx-ast-utils": "^2.2.1"
- },
- "dependencies": {
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- }
- }
- },
- "eslint-plugin-prettier": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz",
- "integrity": "sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ==",
- "dev": true,
- "requires": {
- "prettier-linter-helpers": "^1.0.0"
- }
- },
- "eslint-plugin-react": {
- "version": "7.20.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz",
- "integrity": "sha512-rqe1abd0vxMjmbPngo4NaYxTcR3Y4Hrmc/jg4T+sYz63yqlmJRknpEQfmWY+eDWPuMmix6iUIK+mv0zExjeLgA==",
- "dev": true,
- "requires": {
- "array-includes": "^3.1.1",
- "doctrine": "^2.1.0",
- "has": "^1.0.3",
- "jsx-ast-utils": "^2.2.3",
- "object.entries": "^1.1.1",
- "object.fromentries": "^2.0.2",
- "object.values": "^1.1.1",
- "prop-types": "^15.7.2",
- "resolve": "^1.15.1",
- "string.prototype.matchall": "^4.0.2",
- "xregexp": "^4.3.0"
- },
- "dependencies": {
- "doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- }
- }
- },
- "eslint-plugin-relay": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-relay/-/eslint-plugin-relay-1.7.1.tgz",
- "integrity": "sha512-K7j5BF8raseLfgA97udZMGKEtWan+y5BLrBYlApy952saStF0ghYzU9WElIwoVIkcBO8QP+pT4AOuNFFNRzcUw==",
- "dev": true,
- "requires": {
- "graphql": "^14.0.0 || ^15.0.0-rc.1"
- }
- },
- "eslint-rule-documentation": {
- "version": "1.0.23",
- "resolved": "https://registry.npmjs.org/eslint-rule-documentation/-/eslint-rule-documentation-1.0.23.tgz",
- "integrity": "sha512-pWReu3fkohwyvztx/oQWWgld2iad25TfUdi6wvhhaDPIQjHU/pyvlKgXFw1kX31SQK2Nq9MH+vRDWB0ZLy8fYw==",
- "dev": true
- },
- "eslint-scope": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
- "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- },
- "eslint-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz",
- "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^1.1.0"
- }
- },
- "eslint-visitor-keys": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
- "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
- "dev": true
- },
- "espree": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
- "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
- "dev": true,
- "requires": {
- "acorn": "^7.1.1",
- "acorn-jsx": "^5.2.0",
- "eslint-visitor-keys": "^1.1.0"
- }
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "esquery": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
- "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
- "dev": true,
- "requires": {
- "estraverse": "^5.1.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz",
- "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==",
- "dev": true
- }
- }
- },
- "esrecurse": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
- "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
- "dev": true,
- "requires": {
- "estraverse": "^4.1.0"
- }
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true
- },
- "exec-sh": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz",
- "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==",
- "dev": true
- },
- "execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "exit": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
- "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
- "dev": true
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "expand-tilde": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
- "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
- "dev": true,
- "requires": {
- "homedir-polyfill": "^1.0.1"
- }
- },
- "expect": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz",
- "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==",
- "dev": true,
- "requires": {
- "@jest/types": "^25.5.0",
- "ansi-styles": "^4.0.0",
- "jest-get-type": "^25.2.6",
- "jest-matcher-utils": "^25.5.0",
- "jest-message-util": "^25.5.0",
- "jest-regex-util": "^25.2.6"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- }
- }
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "external-editor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
- "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
- "dev": true,
- "requires": {
- "chardet": "^0.7.0",
- "iconv-lite": "^0.4.24",
- "tmp": "^0.0.33"
- }
- },
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
- "dev": true
- },
- "fast-deep-equal": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
- "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
- "dev": true
- },
- "fast-diff": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
- "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
- "dev": true
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
- },
- "fb-watchman": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
- "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
- "dev": true,
- "requires": {
- "bser": "2.1.1"
- }
- },
- "figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
- "file-entry-cache": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
- "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
- "dev": true,
- "requires": {
- "flat-cache": "^2.0.1"
- }
- },
- "file-js": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/file-js/-/file-js-0.3.0.tgz",
- "integrity": "sha1-+rRr94I0bJKUSZ8fDSrQfYOPJdE=",
- "requires": {
- "bluebird": "^3.4.7",
- "minimatch": "^3.0.3",
- "proper-lockfile": "^1.2.0"
- }
- },
- "filehound": {
- "version": "1.17.4",
- "resolved": "https://registry.npmjs.org/filehound/-/filehound-1.17.4.tgz",
- "integrity": "sha512-A74hiTADH20bpFbXBNyKtpqN4Guffa+ROmdGJWNnuCRhaD45UVSVoI6McLcpHYmuaOERrzD3gMV3v9VZq/SHeA==",
- "requires": {
- "bluebird": "^3.5.1",
- "file-js": "0.3.0",
- "lodash": "^4.17.10",
- "minimatch": "^3.0.4",
- "moment": "^2.22.1",
- "unit-compare": "^1.0.1"
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "find-node-modules": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.0.0.tgz",
- "integrity": "sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw==",
- "dev": true,
- "requires": {
- "findup-sync": "^3.0.0",
- "merge": "^1.2.1"
- }
- },
- "find-root": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
- "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
- "dev": true
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "find-versions": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz",
- "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==",
- "dev": true,
- "requires": {
- "semver-regex": "^2.0.0"
- }
- },
- "findup-sync": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
- "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
- "dev": true,
- "requires": {
- "detect-file": "^1.0.0",
- "is-glob": "^4.0.0",
- "micromatch": "^3.0.4",
- "resolve-dir": "^1.0.1"
- }
- },
- "flat-cache": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
- "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
- "dev": true,
- "requires": {
- "flatted": "^2.0.0",
- "rimraf": "2.6.3",
- "write": "1.0.3"
- },
- "dependencies": {
- "rimraf": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- }
- }
- },
- "flatted": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
- "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
- "dev": true
- },
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "dev": true
- },
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "dev": true,
- "requires": {
- "map-cache": "^0.2.2"
- }
- },
- "fs-extra": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz",
- "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==",
- "requires": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^1.0.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "fsevents": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
- "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
- "dev": true,
- "optional": true
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
- "dev": true
- },
- "gensync": {
- "version": "1.0.0-beta.1",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
- "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==",
- "dev": true
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "get-stdin": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz",
- "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==",
- "dev": true
- },
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
- "dev": true
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "git-raw-commits": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.7.tgz",
- "integrity": "sha512-SkwrTqrDxw8y0G1uGJ9Zw13F7qu3LF8V4BifyDeiJCxSnjRGZD9SaoMiMqUvvXMXh6S3sOQ1DsBN7L2fMUZW/g==",
- "dev": true,
- "requires": {
- "dargs": "^7.0.0",
- "lodash.template": "^4.0.2",
- "meow": "^7.0.0",
- "split2": "^2.0.0",
- "through2": "^3.0.0"
- },
- "dependencies": {
- "meow": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-7.0.1.tgz",
- "integrity": "sha512-tBKIQqVrAHqwit0vfuFPY3LlzJYkEOFyKa3bPgxzNl6q/RtN8KQ+ALYEASYuFayzSAsjlhXj/JZ10rH85Q6TUw==",
- "dev": true,
- "requires": {
- "@types/minimist": "^1.2.0",
- "arrify": "^2.0.1",
- "camelcase": "^6.0.0",
- "camelcase-keys": "^6.2.2",
- "decamelize-keys": "^1.1.0",
- "hard-rejection": "^2.1.0",
- "minimist-options": "^4.0.2",
- "normalize-package-data": "^2.5.0",
- "read-pkg-up": "^7.0.1",
- "redent": "^3.0.0",
- "trim-newlines": "^3.0.0",
- "type-fest": "^0.13.1",
- "yargs-parser": "^18.1.3"
- }
- }
- }
- },
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
- "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "global-dirs": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
- "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
- "dev": true,
- "requires": {
- "ini": "^1.3.4"
- }
- },
- "global-modules": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
- "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
- "dev": true,
- "requires": {
- "global-prefix": "^1.0.1",
- "is-windows": "^1.0.1",
- "resolve-dir": "^1.0.0"
- }
- },
- "global-prefix": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
- "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
- "dev": true,
- "requires": {
- "expand-tilde": "^2.0.2",
- "homedir-polyfill": "^1.0.1",
- "ini": "^1.3.4",
- "is-windows": "^1.0.1",
- "which": "^1.2.14"
- }
- },
- "globals": {
- "version": "12.4.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
- "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
- "dev": true,
- "requires": {
- "type-fest": "^0.8.1"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true
- }
- }
- },
- "graceful-fs": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
- "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
- },
- "graphql": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.0.0.tgz",
- "integrity": "sha512-ZyVO1xIF9F+4cxfkdhOJINM+51B06Friuv4M66W7HzUOeFd+vNzUn4vtswYINPi6sysjf1M2Ri/rwZALqgwbaQ==",
- "dev": true
- },
- "graphql-config": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.2.tgz",
- "integrity": "sha512-mtv1ejPyyR2mJUUZNhljggU+B/Xl8tJJWf+h145hB+1Y48acSghFalhNtXfPBcYl2tJzpb+lGxfj3O7OjaiMgw==",
- "dev": true,
- "requires": {
- "graphql-import": "^0.7.1",
- "graphql-request": "^1.5.0",
- "js-yaml": "^3.10.0",
- "lodash": "^4.17.4",
- "minimatch": "^3.0.4"
- }
- },
- "graphql-import": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/graphql-import/-/graphql-import-0.7.1.tgz",
- "integrity": "sha512-YpwpaPjRUVlw2SN3OPljpWbVRWAhMAyfSba5U47qGMOSsPLi2gYeJtngGpymjm9nk57RFWEpjqwh4+dpYuFAPw==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.4",
- "resolve-from": "^4.0.0"
- },
- "dependencies": {
- "resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true
- }
- }
- },
- "graphql-request": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-1.8.2.tgz",
- "integrity": "sha512-dDX2M+VMsxXFCmUX0Vo0TopIZIX4ggzOtiCsThgtrKR4niiaagsGTDIHj3fsOMFETpa064vzovI+4YV4QnMbcg==",
- "dev": true,
- "requires": {
- "cross-fetch": "2.2.2"
- }
- },
- "growly": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
- "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
- "dev": true,
- "optional": true
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
- "dev": true
- },
- "har-validator": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
- "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
- "dev": true,
- "requires": {
- "ajv": "^6.5.5",
- "har-schema": "^2.0.0"
- }
- },
- "hard-rejection": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
- "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
- "dev": true
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "has-symbols": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
- "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
- "dev": true
- },
- "has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "heap": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz",
- "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=",
- "dev": true
- },
- "homedir-polyfill": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
- "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
- "dev": true,
- "requires": {
- "parse-passwd": "^1.0.0"
- }
- },
- "hosted-git-info": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
- "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
- "dev": true
- },
- "html-encoding-sniffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
- "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
- "dev": true,
- "requires": {
- "whatwg-encoding": "^1.0.1"
- }
- },
- "html-escaper": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
- "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "human-signals": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
- "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
- "dev": true
- },
- "husky": {
- "version": "4.2.5",
- "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.5.tgz",
- "integrity": "sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ==",
- "dev": true,
- "requires": {
- "chalk": "^4.0.0",
- "ci-info": "^2.0.0",
- "compare-versions": "^3.6.0",
- "cosmiconfig": "^6.0.0",
- "find-versions": "^3.2.0",
- "opencollective-postinstall": "^2.0.2",
- "pkg-dir": "^4.2.0",
- "please-upgrade-node": "^3.2.0",
- "slash": "^3.0.0",
- "which-pm-runs": "^1.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz",
- "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "cosmiconfig": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
- "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
- "dev": true,
- "requires": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.7.2"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- }
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
- },
- "import-fresh": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
- "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
- "dev": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "dependencies": {
- "resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true
- }
- }
- },
- "import-local": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
- "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
- "dev": true,
- "requires": {
- "pkg-dir": "^4.2.0",
- "resolve-cwd": "^3.0.0"
- },
- "dependencies": {
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- }
- }
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true
- },
- "indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "ini": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
- "dev": true
- },
- "inquirer": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz",
- "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==",
- "dev": true,
- "requires": {
- "ansi-escapes": "^3.2.0",
- "chalk": "^2.4.2",
- "cli-cursor": "^2.1.0",
- "cli-width": "^2.0.0",
- "external-editor": "^3.0.3",
- "figures": "^2.0.0",
- "lodash": "^4.17.12",
- "mute-stream": "0.0.7",
- "run-async": "^2.2.0",
- "rxjs": "^6.4.0",
- "string-width": "^2.1.0",
- "strip-ansi": "^5.1.0",
- "through": "^2.3.6"
- }
- },
- "internal-slot": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz",
- "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==",
- "dev": true,
- "requires": {
- "es-abstract": "^1.17.0-next.1",
- "has": "^1.0.3",
- "side-channel": "^1.0.2"
- }
- },
- "ip-regex": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
- "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
- "dev": true
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-callable": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
- "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
- "dev": true
- },
- "is-ci": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
- "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
- "dev": true,
- "requires": {
- "ci-info": "^2.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-date-object": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
- "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
- "dev": true
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "is-directory": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
- "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
- "dev": true
- },
- "is-docker": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz",
- "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==",
- "dev": true,
- "optional": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "is-generator-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
- "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
- "dev": true
- },
- "is-plain-obj": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
- "dev": true
- },
- "is-plain-object": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz",
- "integrity": "sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==",
- "requires": {
- "isobject": "^4.0.0"
- }
- },
- "is-potential-custom-element-name": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz",
- "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=",
- "dev": true
- },
- "is-regex": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
- "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
- "dev": true,
- "requires": {
- "has": "^1.0.3"
- }
- },
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
- },
- "is-string": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
- "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==",
- "dev": true
- },
- "is-symbol": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
- "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
- "dev": true,
- "requires": {
- "has-symbols": "^1.0.1"
- }
- },
- "is-text-path": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
- "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=",
- "dev": true,
- "requires": {
- "text-extensions": "^1.0.0"
- }
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
- "is-utf8": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
- "dev": true
- },
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true
- },
- "is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "dev": true,
- "optional": true,
- "requires": {
- "is-docker": "^2.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
- },
- "isobject": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz",
- "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA=="
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "dev": true
- },
- "istanbul-lib-coverage": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
- "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
- "dev": true
- },
- "istanbul-lib-instrument": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.7.5",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
- "semver": "^6.3.0"
- }
- },
- "istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
- "dev": true,
- "requires": {
- "istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
- "supports-color": "^7.1.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "istanbul-lib-source-maps": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
- "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
- "istanbul-reports": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
- "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
- "dev": true,
- "requires": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.0"
- }
- },
- "jest": {
- "version": "25.5.4",
- "resolved": "https://registry.npmjs.org/jest/-/jest-25.5.4.tgz",
- "integrity": "sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ==",
- "dev": true,
- "requires": {
- "@jest/core": "^25.5.4",
- "import-local": "^3.0.2",
- "jest-cli": "^25.5.4"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "jest-cli": {
- "version": "25.5.4",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.5.4.tgz",
- "integrity": "sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw==",
- "dev": true,
- "requires": {
- "@jest/core": "^25.5.4",
- "@jest/test-result": "^25.5.0",
- "@jest/types": "^25.5.0",
- "chalk": "^3.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "import-local": "^3.0.2",
- "is-ci": "^2.0.0",
- "jest-config": "^25.5.4",
- "jest-util": "^25.5.0",
- "jest-validate": "^25.5.0",
- "prompts": "^2.0.1",
- "realpath-native": "^2.0.0",
- "yargs": "^15.3.1"
- }
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "jest-changed-files": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.5.0.tgz",
- "integrity": "sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw==",
- "dev": true,
- "requires": {
- "@jest/types": "^25.5.0",
- "execa": "^3.2.0",
- "throat": "^5.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz",
- "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "execa": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz",
- "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.0",
- "get-stream": "^5.0.0",
- "human-signals": "^1.1.1",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.0",
- "onetime": "^5.1.0",
- "p-finally": "^2.0.0",
- "signal-exit": "^3.0.2",
- "strip-final-newline": "^2.0.0"
- }
- },
- "get-stream": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
- "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "is-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
- "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
- "dev": true
- },
- "mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true
- },
- "npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "requires": {
- "path-key": "^3.0.0"
- }
- },
- "onetime": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
- "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
- "dev": true,
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "p-finally": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz",
- "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==",
- "dev": true
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "jest-circus": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-26.0.1.tgz",
- "integrity": "sha512-dp20V0Pi1N92Y7+ULPa3tNR9KCG0Sy19NiopyPmo5rNoQ4OGWmuzp1P0q1je2HV3fRD0BYE7wqh8aReGGENfUA==",
- "dev": true,
- "requires": {
- "@babel/traverse": "^7.1.0",
- "@jest/environment": "^26.0.1",
- "@jest/test-result": "^26.0.1",
- "@jest/types": "^26.0.1",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "dedent": "^0.7.0",
- "expect": "^26.0.1",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^26.0.1",
- "jest-matcher-utils": "^26.0.1",
- "jest-message-util": "^26.0.1",
- "jest-runtime": "^26.0.1",
- "jest-snapshot": "^26.0.1",
- "jest-util": "^26.0.1",
- "pretty-format": "^26.0.1",
- "stack-utils": "^2.0.2",
- "throat": "^5.0.0"
- },
- "dependencies": {
- "@jest/console": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.0.1.tgz",
- "integrity": "sha512-9t1KUe/93coV1rBSxMmBAOIK3/HVpwxArCA1CxskKyRiv6o8J70V8C/V3OJminVCTa2M0hQI9AWRd5wxu2dAHw==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.0.1",
- "chalk": "^4.0.0",
- "jest-message-util": "^26.0.1",
- "jest-util": "^26.0.1",
- "slash": "^3.0.0"
- }
- },
- "@jest/environment": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.0.1.tgz",
- "integrity": "sha512-xBDxPe8/nx251u0VJ2dFAFz2H23Y98qdIaNwnMK6dFQr05jc+Ne/2np73lOAx+5mSBO/yuQldRrQOf6hP1h92g==",
- "dev": true,
- "requires": {
- "@jest/fake-timers": "^26.0.1",
- "@jest/types": "^26.0.1",
- "jest-mock": "^26.0.1"
- }
- },
- "@jest/fake-timers": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.0.1.tgz",
- "integrity": "sha512-Oj/kCBnTKhm7CR+OJSjZty6N1bRDr9pgiYQr4wY221azLz5PHi08x/U+9+QpceAYOWheauLP8MhtSVFrqXQfhg==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.0.1",
- "@sinonjs/fake-timers": "^6.0.1",
- "jest-message-util": "^26.0.1",
- "jest-mock": "^26.0.1",
- "jest-util": "^26.0.1"
- }
- },
- "@jest/globals": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.0.1.tgz",
- "integrity": "sha512-iuucxOYB7BRCvT+TYBzUqUNuxFX1hqaR6G6IcGgEqkJ5x4htNKo1r7jk1ji9Zj8ZMiMw0oB5NaA7k5Tx6MVssA==",
- "dev": true,
- "requires": {
- "@jest/environment": "^26.0.1",
- "@jest/types": "^26.0.1",
- "expect": "^26.0.1"
- }
- },
- "@jest/source-map": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.0.0.tgz",
- "integrity": "sha512-S2Z+Aj/7KOSU2TfW0dyzBze7xr95bkm5YXNUqqCek+HE0VbNNSNzrRwfIi5lf7wvzDTSS0/ib8XQ1krFNyYgbQ==",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0",
- "graceful-fs": "^4.2.4",
- "source-map": "^0.6.0"
- }
- },
- "@jest/test-result": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.0.1.tgz",
- "integrity": "sha512-oKwHvOI73ICSYRPe8WwyYPTtiuOAkLSbY8/MfWF3qDEd/sa8EDyZzin3BaXTqufir/O/Gzea4E8Zl14XU4Mlyg==",
- "dev": true,
- "requires": {
- "@jest/console": "^26.0.1",
- "@jest/types": "^26.0.1",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "collect-v8-coverage": "^1.0.0"
- }
- },
- "@jest/test-sequencer": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.0.1.tgz",
- "integrity": "sha512-ssga8XlwfP8YjbDcmVhwNlrmblddMfgUeAkWIXts1V22equp2GMIHxm7cyeD5Q/B0ZgKPK/tngt45sH99yLLGg==",
- "dev": true,
- "requires": {
- "@jest/test-result": "^26.0.1",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^26.0.1",
- "jest-runner": "^26.0.1",
- "jest-runtime": "^26.0.1"
- }
- },
- "@jest/transform": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.0.1.tgz",
- "integrity": "sha512-pPRkVkAQ91drKGbzCfDOoHN838+FSbYaEAvBXvKuWeeRRUD8FjwXkqfUNUZL6Ke48aA/1cqq/Ni7kVMCoqagWA==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.1.0",
- "@jest/types": "^26.0.1",
- "babel-plugin-istanbul": "^6.0.0",
- "chalk": "^4.0.0",
- "convert-source-map": "^1.4.0",
- "fast-json-stable-stringify": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^26.0.1",
- "jest-regex-util": "^26.0.0",
- "jest-util": "^26.0.1",
- "micromatch": "^4.0.2",
- "pirates": "^4.0.1",
- "slash": "^3.0.0",
- "source-map": "^0.6.1",
- "write-file-atomic": "^3.0.0"
- }
- },
- "@jest/types": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.0.1.tgz",
- "integrity": "sha512-IbtjvqI9+eS1qFnOIEL7ggWmT+iK/U+Vde9cGWtYb/b6XgKb3X44ZAe/z9YZzoAAZ/E92m0DqrilF934IGNnQA==",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^1.1.1",
- "@types/yargs": "^15.0.0",
- "chalk": "^4.0.0"
- }
- },
- "@types/prettier": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.0.0.tgz",
- "integrity": "sha512-/rM+sWiuOZ5dvuVzV37sUuklsbg+JPOP8d+nNFlo2ZtfpzPiPvh1/gc8liWOLBqe+sR+ZM7guPaIcTt6UZTo7Q==",
- "dev": true
- },
- "acorn-globals": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
- "dev": true,
- "requires": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
- }
- },
- "acorn-walk": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz",
- "integrity": "sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "babel-jest": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.0.1.tgz",
- "integrity": "sha512-Z4GGmSNQ8pX3WS1O+6v3fo41YItJJZsVxG5gIQ+HuB/iuAQBJxMTHTwz292vuYws1LnHfwSRgoqI+nxdy/pcvw==",
- "dev": true,
- "requires": {
- "@jest/transform": "^26.0.1",
- "@jest/types": "^26.0.1",
- "@types/babel__core": "^7.1.7",
- "babel-plugin-istanbul": "^6.0.0",
- "babel-preset-jest": "^26.0.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "slash": "^3.0.0"
- }
- },
- "babel-plugin-jest-hoist": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.0.0.tgz",
- "integrity": "sha512-+AuoehOrjt9irZL7DOt2+4ZaTM6dlu1s5TTS46JBa0/qem4dy7VNW3tMb96qeEqcIh20LD73TVNtmVEeymTG7w==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__traverse": "^7.0.6"
- }
- },
- "babel-preset-jest": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.0.0.tgz",
- "integrity": "sha512-9ce+DatAa31DpR4Uir8g4Ahxs5K4W4L8refzt+qHWQANb6LhGcAEfIFgLUwk67oya2cCUd6t4eUMtO/z64ocNw==",
- "dev": true,
- "requires": {
- "babel-plugin-jest-hoist": "^26.0.0",
- "babel-preset-current-node-syntax": "^0.1.2"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "chalk": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz",
- "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "data-urls": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
- "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
- "dev": true,
- "requires": {
- "abab": "^2.0.3",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0"
- }
- },
- "diff-sequences": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.0.0.tgz",
- "integrity": "sha512-JC/eHYEC3aSS0vZGjuoc4vHA0yAQTzhQQldXMeMF+JlxLGJlCO38Gma82NV9gk1jGFz8mDzUMeaKXvjRRdJ2dg==",
- "dev": true
- },
- "domexception": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
- "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
- "dev": true,
- "requires": {
- "webidl-conversions": "^5.0.0"
- },
- "dependencies": {
- "webidl-conversions": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
- "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
- "dev": true
- }
- }
- },
- "escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true
- },
- "expect": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/expect/-/expect-26.0.1.tgz",
- "integrity": "sha512-QcCy4nygHeqmbw564YxNbHTJlXh47dVID2BUP52cZFpLU9zHViMFK6h07cC1wf7GYCTIigTdAXhVua8Yl1FkKg==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.0.1",
- "ansi-styles": "^4.0.0",
- "jest-get-type": "^26.0.0",
- "jest-matcher-utils": "^26.0.1",
- "jest-message-util": "^26.0.1",
- "jest-regex-util": "^26.0.0"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "html-encoding-sniffer": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
- "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
- "dev": true,
- "requires": {
- "whatwg-encoding": "^1.0.5"
- }
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "jest-config": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.0.1.tgz",
- "integrity": "sha512-9mWKx2L1LFgOXlDsC4YSeavnblN6A4CPfXFiobq+YYLaBMymA/SczN7xYTSmLaEYHZOcB98UdoN4m5uNt6tztg==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^26.0.1",
- "@jest/types": "^26.0.1",
- "babel-jest": "^26.0.1",
- "chalk": "^4.0.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.1",
- "graceful-fs": "^4.2.4",
- "jest-environment-jsdom": "^26.0.1",
- "jest-environment-node": "^26.0.1",
- "jest-get-type": "^26.0.0",
- "jest-jasmine2": "^26.0.1",
- "jest-regex-util": "^26.0.0",
- "jest-resolve": "^26.0.1",
- "jest-util": "^26.0.1",
- "jest-validate": "^26.0.1",
- "micromatch": "^4.0.2",
- "pretty-format": "^26.0.1"
- }
- },
- "jest-diff": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.0.1.tgz",
- "integrity": "sha512-odTcHyl5X+U+QsczJmOjWw5tPvww+y9Yim5xzqxVl/R1j4z71+fHW4g8qu1ugMmKdFdxw+AtQgs5mupPnzcIBQ==",
- "dev": true,
- "requires": {
- "chalk": "^4.0.0",
- "diff-sequences": "^26.0.0",
- "jest-get-type": "^26.0.0",
- "pretty-format": "^26.0.1"
- }
- },
- "jest-docblock": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz",
- "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==",
- "dev": true,
- "requires": {
- "detect-newline": "^3.0.0"
- }
- },
- "jest-each": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.0.1.tgz",
- "integrity": "sha512-OTgJlwXCAR8NIWaXFL5DBbeS4QIYPuNASkzSwMCJO+ywo9BEa6TqkaSWsfR7VdbMLdgYJqSfQcIyjJCNwl5n4Q==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.0.1",
- "chalk": "^4.0.0",
- "jest-get-type": "^26.0.0",
- "jest-util": "^26.0.1",
- "pretty-format": "^26.0.1"
- }
- },
- "jest-environment-jsdom": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.0.1.tgz",
- "integrity": "sha512-u88NJa3aptz2Xix2pFhihRBAatwZHWwSiRLBDBQE1cdJvDjPvv7ZGA0NQBxWwDDn7D0g1uHqxM8aGgfA9Bx49g==",
- "dev": true,
- "requires": {
- "@jest/environment": "^26.0.1",
- "@jest/fake-timers": "^26.0.1",
- "@jest/types": "^26.0.1",
- "jest-mock": "^26.0.1",
- "jest-util": "^26.0.1",
- "jsdom": "^16.2.2"
- }
- },
- "jest-environment-node": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.0.1.tgz",
- "integrity": "sha512-4FRBWcSn5yVo0KtNav7+5NH5Z/tEgDLp7VRQVS5tCouWORxj+nI+1tOLutM07Zb2Qi7ja+HEDoOUkjBSWZg/IQ==",
- "dev": true,
- "requires": {
- "@jest/environment": "^26.0.1",
- "@jest/fake-timers": "^26.0.1",
- "@jest/types": "^26.0.1",
- "jest-mock": "^26.0.1",
- "jest-util": "^26.0.1"
- }
- },
- "jest-get-type": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.0.0.tgz",
- "integrity": "sha512-zRc1OAPnnws1EVfykXOj19zo2EMw5Hi6HLbFCSjpuJiXtOWAYIjNsHVSbpQ8bDX7L5BGYGI8m+HmKdjHYFF0kg==",
- "dev": true
- },
- "jest-haste-map": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.0.1.tgz",
- "integrity": "sha512-J9kBl/EdjmDsvyv7CiyKY5+DsTvVOScenprz/fGqfLg/pm1gdjbwwQ98nW0t+OIt+f+5nAVaElvn/6wP5KO7KA==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.0.1",
- "@types/graceful-fs": "^4.1.2",
- "anymatch": "^3.0.3",
- "fb-watchman": "^2.0.0",
- "fsevents": "^2.1.2",
- "graceful-fs": "^4.2.4",
- "jest-serializer": "^26.0.0",
- "jest-util": "^26.0.1",
- "jest-worker": "^26.0.0",
- "micromatch": "^4.0.2",
- "sane": "^4.0.3",
- "walker": "^1.0.7",
- "which": "^2.0.2"
- }
- },
- "jest-jasmine2": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.0.1.tgz",
- "integrity": "sha512-ILaRyiWxiXOJ+RWTKupzQWwnPaeXPIoLS5uW41h18varJzd9/7I0QJGqg69fhTT1ev9JpSSo9QtalriUN0oqOg==",
- "dev": true,
- "requires": {
- "@babel/traverse": "^7.1.0",
- "@jest/environment": "^26.0.1",
- "@jest/source-map": "^26.0.0",
- "@jest/test-result": "^26.0.1",
- "@jest/types": "^26.0.1",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "expect": "^26.0.1",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^26.0.1",
- "jest-matcher-utils": "^26.0.1",
- "jest-message-util": "^26.0.1",
- "jest-runtime": "^26.0.1",
- "jest-snapshot": "^26.0.1",
- "jest-util": "^26.0.1",
- "pretty-format": "^26.0.1",
- "throat": "^5.0.0"
- }
- },
- "jest-leak-detector": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.0.1.tgz",
- "integrity": "sha512-93FR8tJhaYIWrWsbmVN1pQ9ZNlbgRpfvrnw5LmgLRX0ckOJ8ut/I35CL7awi2ecq6Ca4lL59bEK9hr7nqoHWPA==",
- "dev": true,
- "requires": {
- "jest-get-type": "^26.0.0",
- "pretty-format": "^26.0.1"
- }
- },
- "jest-matcher-utils": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.0.1.tgz",
- "integrity": "sha512-PUMlsLth0Azen8Q2WFTwnSkGh2JZ8FYuwijC8NR47vXKpsrKmA1wWvgcj1CquuVfcYiDEdj985u5Wmg7COEARw==",
- "dev": true,
- "requires": {
- "chalk": "^4.0.0",
- "jest-diff": "^26.0.1",
- "jest-get-type": "^26.0.0",
- "pretty-format": "^26.0.1"
- }
- },
- "jest-message-util": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.0.1.tgz",
- "integrity": "sha512-CbK8uQREZ8umUfo8+zgIfEt+W7HAHjQCoRaNs4WxKGhAYBGwEyvxuK81FXa7VeB9pwDEXeeKOB2qcsNVCAvB7Q==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "@jest/types": "^26.0.1",
- "@types/stack-utils": "^1.0.1",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "micromatch": "^4.0.2",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.2"
- }
- },
- "jest-mock": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.0.1.tgz",
- "integrity": "sha512-MpYTBqycuPYSY6xKJognV7Ja46/TeRbAZept987Zp+tuJvMN0YBWyyhG9mXyYQaU3SBI0TUlSaO5L3p49agw7Q==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.0.1"
- }
- },
- "jest-regex-util": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz",
- "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==",
- "dev": true
- },
- "jest-resolve": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.0.1.tgz",
- "integrity": "sha512-6jWxk0IKZkPIVTvq6s72RH735P8f9eCJW3IM5CX/SJFeKq1p2cZx0U49wf/SdMlhaB/anann5J2nCJj6HrbezQ==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.0.1",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "jest-pnp-resolver": "^1.2.1",
- "jest-util": "^26.0.1",
- "read-pkg-up": "^7.0.1",
- "resolve": "^1.17.0",
- "slash": "^3.0.0"
- }
- },
- "jest-runner": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.0.1.tgz",
- "integrity": "sha512-CApm0g81b49Znm4cZekYQK67zY7kkB4umOlI2Dx5CwKAzdgw75EN+ozBHRvxBzwo1ZLYZ07TFxkaPm+1t4d8jA==",
- "dev": true,
- "requires": {
- "@jest/console": "^26.0.1",
- "@jest/environment": "^26.0.1",
- "@jest/test-result": "^26.0.1",
- "@jest/types": "^26.0.1",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-config": "^26.0.1",
- "jest-docblock": "^26.0.0",
- "jest-haste-map": "^26.0.1",
- "jest-jasmine2": "^26.0.1",
- "jest-leak-detector": "^26.0.1",
- "jest-message-util": "^26.0.1",
- "jest-resolve": "^26.0.1",
- "jest-runtime": "^26.0.1",
- "jest-util": "^26.0.1",
- "jest-worker": "^26.0.0",
- "source-map-support": "^0.5.6",
- "throat": "^5.0.0"
- }
- },
- "jest-runtime": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.0.1.tgz",
- "integrity": "sha512-Ci2QhYFmANg5qaXWf78T2Pfo6GtmIBn2rRaLnklRyEucmPccmCKvS9JPljcmtVamsdMmkyNkVFb9pBTD6si9Lw==",
- "dev": true,
- "requires": {
- "@jest/console": "^26.0.1",
- "@jest/environment": "^26.0.1",
- "@jest/fake-timers": "^26.0.1",
- "@jest/globals": "^26.0.1",
- "@jest/source-map": "^26.0.0",
- "@jest/test-result": "^26.0.1",
- "@jest/transform": "^26.0.1",
- "@jest/types": "^26.0.1",
- "@types/yargs": "^15.0.0",
- "chalk": "^4.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.4",
- "jest-config": "^26.0.1",
- "jest-haste-map": "^26.0.1",
- "jest-message-util": "^26.0.1",
- "jest-mock": "^26.0.1",
- "jest-regex-util": "^26.0.0",
- "jest-resolve": "^26.0.1",
- "jest-snapshot": "^26.0.1",
- "jest-util": "^26.0.1",
- "jest-validate": "^26.0.1",
- "slash": "^3.0.0",
- "strip-bom": "^4.0.0",
- "yargs": "^15.3.1"
- }
- },
- "jest-serializer": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.0.0.tgz",
- "integrity": "sha512-sQGXLdEGWFAE4wIJ2ZaIDb+ikETlUirEOBsLXdoBbeLhTHkZUJwgk3+M8eyFizhM6le43PDCCKPA1hzkSDo4cQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.2.4"
- }
- },
- "jest-snapshot": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.0.1.tgz",
- "integrity": "sha512-jxd+cF7+LL+a80qh6TAnTLUZHyQoWwEHSUFJjkw35u3Gx+BZUNuXhYvDqHXr62UQPnWo2P6fvQlLjsU93UKyxA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.0.0",
- "@jest/types": "^26.0.1",
- "@types/prettier": "^2.0.0",
- "chalk": "^4.0.0",
- "expect": "^26.0.1",
- "graceful-fs": "^4.2.4",
- "jest-diff": "^26.0.1",
- "jest-get-type": "^26.0.0",
- "jest-matcher-utils": "^26.0.1",
- "jest-message-util": "^26.0.1",
- "jest-resolve": "^26.0.1",
- "make-dir": "^3.0.0",
- "natural-compare": "^1.4.0",
- "pretty-format": "^26.0.1",
- "semver": "^7.3.2"
- }
- },
- "jest-util": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.0.1.tgz",
- "integrity": "sha512-byQ3n7ad1BO/WyFkYvlWQHTsomB6GIewBh8tlGtusiylAlaxQ1UpS0XYH0ngOyhZuHVLN79Qvl6/pMiDMSSG1g==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.0.1",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "is-ci": "^2.0.0",
- "make-dir": "^3.0.0"
- }
- },
- "jest-validate": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.0.1.tgz",
- "integrity": "sha512-u0xRc+rbmov/VqXnX3DlkxD74rHI/CfS5xaV2VpeaVySjbb1JioNVOyly5b56q2l9ZKe7bVG5qWmjfctkQb0bA==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.0.1",
- "camelcase": "^6.0.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^26.0.0",
- "leven": "^3.1.0",
- "pretty-format": "^26.0.1"
- }
- },
- "jest-worker": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.0.0.tgz",
- "integrity": "sha512-pPaYa2+JnwmiZjK9x7p9BoZht+47ecFCDFA/CJxspHzeDvQcfVBLWzCiWyo+EGrSiQMWZtCFo9iSvMZnAAo8vw==",
- "dev": true,
- "requires": {
- "merge-stream": "^2.0.0",
- "supports-color": "^7.0.0"
- }
- },
- "jsdom": {
- "version": "16.2.2",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.2.2.tgz",
- "integrity": "sha512-pDFQbcYtKBHxRaP55zGXCJWgFHkDAYbKcsXEK/3Icu9nKYZkutUXfLBwbD+09XDutkYSHcgfQLZ0qvpAAm9mvg==",
- "dev": true,
- "requires": {
- "abab": "^2.0.3",
- "acorn": "^7.1.1",
- "acorn-globals": "^6.0.0",
- "cssom": "^0.4.4",
- "cssstyle": "^2.2.0",
- "data-urls": "^2.0.0",
- "decimal.js": "^10.2.0",
- "domexception": "^2.0.1",
- "escodegen": "^1.14.1",
- "html-encoding-sniffer": "^2.0.1",
- "is-potential-custom-element-name": "^1.0.0",
- "nwsapi": "^2.2.0",
- "parse5": "5.1.1",
- "request": "^2.88.2",
- "request-promise-native": "^1.0.8",
- "saxes": "^5.0.0",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^3.0.1",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^2.0.0",
- "webidl-conversions": "^6.0.0",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0",
- "ws": "^7.2.3",
- "xml-name-validator": "^3.0.0"
- }
- },
- "micromatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
- "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.0.5"
- }
- },
- "parse5": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
- "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
- "dev": true
- },
- "pretty-format": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.0.1.tgz",
- "integrity": "sha512-SWxz6MbupT3ZSlL0Po4WF/KujhQaVehijR2blyRDCzk9e45EaYMVhMBn49fnRuHxtkSpXTes1GxNpVmH86Bxfw==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.0.1",
- "ansi-regex": "^5.0.0",
- "ansi-styles": "^4.0.0",
- "react-is": "^16.12.0"
- }
- },
- "saxes": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
- "dev": true,
- "requires": {
- "xmlchars": "^2.2.0"
- }
- },
- "semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "stack-utils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.2.tgz",
- "integrity": "sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg==",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^2.0.0"
- }
- },
- "strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "tr46": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz",
- "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.1"
- }
- },
- "w3c-xmlserializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
- "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
- "dev": true,
- "requires": {
- "xml-name-validator": "^3.0.0"
- }
- },
- "webidl-conversions": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
- "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
- "dev": true
- },
- "whatwg-url": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.1.0.tgz",
- "integrity": "sha512-vEIkwNi9Hqt4TV9RdnaBPNt+E2Sgmo3gePebCRgZ1R7g6d23+53zCTnuB0amKI4AXq6VM8jj2DUAa0S1vjJxkw==",
- "dev": true,
- "requires": {
- "lodash.sortby": "^4.7.0",
- "tr46": "^2.0.2",
- "webidl-conversions": "^5.0.0"
- },
- "dependencies": {
- "webidl-conversions": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
- "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
- "dev": true
- }
- }
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "jest-config": {
- "version": "25.5.4",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz",
- "integrity": "sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^25.5.4",
- "@jest/types": "^25.5.0",
- "babel-jest": "^25.5.1",
- "chalk": "^3.0.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.1",
- "graceful-fs": "^4.2.4",
- "jest-environment-jsdom": "^25.5.0",
- "jest-environment-node": "^25.5.0",
- "jest-get-type": "^25.2.6",
- "jest-jasmine2": "^25.5.4",
- "jest-regex-util": "^25.2.6",
- "jest-resolve": "^25.5.1",
- "jest-util": "^25.5.0",
- "jest-validate": "^25.5.0",
- "micromatch": "^4.0.2",
- "pretty-format": "^25.5.0",
- "realpath-native": "^2.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "micromatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
- "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.0.5"
- }
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- }
- }
- },
- "jest-diff": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz",
- "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==",
- "dev": true,
- "requires": {
- "chalk": "^3.0.0",
- "diff-sequences": "^25.2.6",
- "jest-get-type": "^25.2.6",
- "pretty-format": "^25.5.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "jest-docblock": {
- "version": "25.3.0",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz",
- "integrity": "sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==",
- "dev": true,
- "requires": {
- "detect-newline": "^3.0.0"
- }
- },
- "jest-each": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.5.0.tgz",
- "integrity": "sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA==",
- "dev": true,
- "requires": {
- "@jest/types": "^25.5.0",
- "chalk": "^3.0.0",
- "jest-get-type": "^25.2.6",
- "jest-util": "^25.5.0",
- "pretty-format": "^25.5.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "jest-environment-jsdom": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz",
- "integrity": "sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A==",
- "dev": true,
- "requires": {
- "@jest/environment": "^25.5.0",
- "@jest/fake-timers": "^25.5.0",
- "@jest/types": "^25.5.0",
- "jest-mock": "^25.5.0",
- "jest-util": "^25.5.0",
- "jsdom": "^15.2.1"
- }
- },
- "jest-environment-node": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.5.0.tgz",
- "integrity": "sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==",
- "dev": true,
- "requires": {
- "@jest/environment": "^25.5.0",
- "@jest/fake-timers": "^25.5.0",
- "@jest/types": "^25.5.0",
- "jest-mock": "^25.5.0",
- "jest-util": "^25.5.0",
- "semver": "^6.3.0"
- }
- },
- "jest-get-type": {
- "version": "25.2.6",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz",
- "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==",
- "dev": true
- },
- "jest-haste-map": {
- "version": "25.5.1",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz",
- "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==",
- "dev": true,
- "requires": {
- "@jest/types": "^25.5.0",
- "@types/graceful-fs": "^4.1.2",
- "anymatch": "^3.0.3",
- "fb-watchman": "^2.0.0",
- "fsevents": "^2.1.2",
- "graceful-fs": "^4.2.4",
- "jest-serializer": "^25.5.0",
- "jest-util": "^25.5.0",
- "jest-worker": "^25.5.0",
- "micromatch": "^4.0.2",
- "sane": "^4.0.3",
- "walker": "^1.0.7",
- "which": "^2.0.2"
- },
- "dependencies": {
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "micromatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
- "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.0.5"
- }
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "jest-jasmine2": {
- "version": "25.5.4",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz",
- "integrity": "sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ==",
- "dev": true,
- "requires": {
- "@babel/traverse": "^7.1.0",
- "@jest/environment": "^25.5.0",
- "@jest/source-map": "^25.5.0",
- "@jest/test-result": "^25.5.0",
- "@jest/types": "^25.5.0",
- "chalk": "^3.0.0",
- "co": "^4.6.0",
- "expect": "^25.5.0",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^25.5.0",
- "jest-matcher-utils": "^25.5.0",
- "jest-message-util": "^25.5.0",
- "jest-runtime": "^25.5.4",
- "jest-snapshot": "^25.5.1",
- "jest-util": "^25.5.0",
- "pretty-format": "^25.5.0",
- "throat": "^5.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "jest-leak-detector": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz",
- "integrity": "sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==",
- "dev": true,
- "requires": {
- "jest-get-type": "^25.2.6",
- "pretty-format": "^25.5.0"
- }
- },
- "jest-matcher-utils": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz",
- "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==",
- "dev": true,
- "requires": {
- "chalk": "^3.0.0",
- "jest-diff": "^25.5.0",
- "jest-get-type": "^25.2.6",
- "pretty-format": "^25.5.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "jest-message-util": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz",
- "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "@jest/types": "^25.5.0",
- "@types/stack-utils": "^1.0.1",
- "chalk": "^3.0.0",
- "graceful-fs": "^4.2.4",
- "micromatch": "^4.0.2",
- "slash": "^3.0.0",
- "stack-utils": "^1.0.1"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "micromatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
- "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.0.5"
- }
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- }
- }
- },
- "jest-mock": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz",
- "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==",
- "dev": true,
- "requires": {
- "@jest/types": "^25.5.0"
- }
- },
- "jest-pnp-resolver": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz",
- "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==",
- "dev": true
- },
- "jest-regex-util": {
- "version": "25.2.6",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz",
- "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==",
- "dev": true
- },
- "jest-resolve": {
- "version": "25.5.1",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz",
- "integrity": "sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==",
- "dev": true,
- "requires": {
- "@jest/types": "^25.5.0",
- "browser-resolve": "^1.11.3",
- "chalk": "^3.0.0",
- "graceful-fs": "^4.2.4",
- "jest-pnp-resolver": "^1.2.1",
- "read-pkg-up": "^7.0.1",
- "realpath-native": "^2.0.0",
- "resolve": "^1.17.0",
- "slash": "^3.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "jest-resolve-dependencies": {
- "version": "25.5.4",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz",
- "integrity": "sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw==",
- "dev": true,
- "requires": {
- "@jest/types": "^25.5.0",
- "jest-regex-util": "^25.2.6",
- "jest-snapshot": "^25.5.1"
- }
- },
- "jest-runner": {
- "version": "25.5.4",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz",
- "integrity": "sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==",
- "dev": true,
- "requires": {
- "@jest/console": "^25.5.0",
- "@jest/environment": "^25.5.0",
- "@jest/test-result": "^25.5.0",
- "@jest/types": "^25.5.0",
- "chalk": "^3.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-config": "^25.5.4",
- "jest-docblock": "^25.3.0",
- "jest-haste-map": "^25.5.1",
- "jest-jasmine2": "^25.5.4",
- "jest-leak-detector": "^25.5.0",
- "jest-message-util": "^25.5.0",
- "jest-resolve": "^25.5.1",
- "jest-runtime": "^25.5.4",
- "jest-util": "^25.5.0",
- "jest-worker": "^25.5.0",
- "source-map-support": "^0.5.6",
- "throat": "^5.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "jest-runtime": {
- "version": "25.5.4",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz",
- "integrity": "sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==",
- "dev": true,
- "requires": {
- "@jest/console": "^25.5.0",
- "@jest/environment": "^25.5.0",
- "@jest/globals": "^25.5.2",
- "@jest/source-map": "^25.5.0",
- "@jest/test-result": "^25.5.0",
- "@jest/transform": "^25.5.1",
- "@jest/types": "^25.5.0",
- "@types/yargs": "^15.0.0",
- "chalk": "^3.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.4",
- "jest-config": "^25.5.4",
- "jest-haste-map": "^25.5.1",
- "jest-message-util": "^25.5.0",
- "jest-mock": "^25.5.0",
- "jest-regex-util": "^25.2.6",
- "jest-resolve": "^25.5.1",
- "jest-snapshot": "^25.5.1",
- "jest-util": "^25.5.0",
- "jest-validate": "^25.5.0",
- "realpath-native": "^2.0.0",
- "slash": "^3.0.0",
- "strip-bom": "^4.0.0",
- "yargs": "^15.3.1"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "jest-serializer": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.5.0.tgz",
- "integrity": "sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.2.4"
- }
- },
- "jest-snapshot": {
- "version": "25.5.1",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz",
- "integrity": "sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.0.0",
- "@jest/types": "^25.5.0",
- "@types/prettier": "^1.19.0",
- "chalk": "^3.0.0",
- "expect": "^25.5.0",
- "graceful-fs": "^4.2.4",
- "jest-diff": "^25.5.0",
- "jest-get-type": "^25.2.6",
- "jest-matcher-utils": "^25.5.0",
- "jest-message-util": "^25.5.0",
- "jest-resolve": "^25.5.1",
- "make-dir": "^3.0.0",
- "natural-compare": "^1.4.0",
- "pretty-format": "^25.5.0",
- "semver": "^6.3.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "jest-util": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz",
- "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==",
- "dev": true,
- "requires": {
- "@jest/types": "^25.5.0",
- "chalk": "^3.0.0",
- "graceful-fs": "^4.2.4",
- "is-ci": "^2.0.0",
- "make-dir": "^3.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "jest-validate": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz",
- "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==",
- "dev": true,
- "requires": {
- "@jest/types": "^25.5.0",
- "camelcase": "^5.3.1",
- "chalk": "^3.0.0",
- "jest-get-type": "^25.2.6",
- "leven": "^3.1.0",
- "pretty-format": "^25.5.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "jest-watcher": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz",
- "integrity": "sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==",
- "dev": true,
- "requires": {
- "@jest/test-result": "^25.5.0",
- "@jest/types": "^25.5.0",
- "ansi-escapes": "^4.2.1",
- "chalk": "^3.0.0",
- "jest-util": "^25.5.0",
- "string-length": "^3.1.0"
- },
- "dependencies": {
- "ansi-escapes": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
- "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
- "dev": true,
- "requires": {
- "type-fest": "^0.11.0"
- }
- },
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "type-fest": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
- "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
- "dev": true
- }
- }
- },
- "jest-worker": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz",
- "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==",
- "dev": true,
- "requires": {
- "merge-stream": "^2.0.0",
- "supports-color": "^7.0.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "js-yaml": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
- "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "dev": true
- },
- "jsdoctypeparser": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-6.1.0.tgz",
- "integrity": "sha512-UCQBZ3xCUBv/PLfwKAJhp6jmGOSLFNKzrotXGNgbKhWvz27wPsCsVeP7gIcHPElQw2agBmynAitXqhxR58XAmA==",
- "dev": true
- },
- "jsdom": {
- "version": "15.2.1",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz",
- "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==",
- "dev": true,
- "requires": {
- "abab": "^2.0.0",
- "acorn": "^7.1.0",
- "acorn-globals": "^4.3.2",
- "array-equal": "^1.0.0",
- "cssom": "^0.4.1",
- "cssstyle": "^2.0.0",
- "data-urls": "^1.1.0",
- "domexception": "^1.0.1",
- "escodegen": "^1.11.1",
- "html-encoding-sniffer": "^1.0.2",
- "nwsapi": "^2.2.0",
- "parse5": "5.1.0",
- "pn": "^1.1.0",
- "request": "^2.88.0",
- "request-promise-native": "^1.0.7",
- "saxes": "^3.1.9",
- "symbol-tree": "^3.2.2",
- "tough-cookie": "^3.0.1",
- "w3c-hr-time": "^1.0.1",
- "w3c-xmlserializer": "^1.1.2",
- "webidl-conversions": "^4.0.2",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^7.0.0",
- "ws": "^7.0.0",
- "xml-name-validator": "^3.0.0"
- }
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
- },
- "json-diff": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/json-diff/-/json-diff-0.5.4.tgz",
- "integrity": "sha512-q5Xmx9QXNOzOzIlMoYtLrLiu4Jl/Ce2bn0CNcv54PhyH89CI4GWlGVDye8ei2Ijt9R3U+vsWPsXpLUNob8bs8Q==",
- "dev": true,
- "requires": {
- "cli-color": "~0.1.6",
- "difflib": "~0.2.1",
- "dreamopt": "~0.6.0"
- }
- },
- "json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
- "dev": true
- },
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
- "dev": true
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "dev": true
- },
- "json5": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
- "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "jsonfile": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz",
- "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==",
- "requires": {
- "graceful-fs": "^4.1.6",
- "universalify": "^1.0.0"
- }
- },
- "jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
- "dev": true
- },
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "dev": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "jsx-ast-utils": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz",
- "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==",
- "dev": true,
- "requires": {
- "array-includes": "^3.0.3",
- "object.assign": "^4.1.0"
- }
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
- "kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true
- },
- "leven": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
- "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
- "dev": true
- },
- "levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- }
- },
- "lines-and-columns": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
- "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
- "dev": true
- },
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- },
- "dependencies": {
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- }
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
- },
- "lodash._reinterpolate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
- "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
- "dev": true
- },
- "lodash.map": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
- "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
- "dev": true
- },
- "lodash.memoize": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
- "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
- "dev": true
- },
- "lodash.sortby": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
- "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
- "dev": true
- },
- "lodash.template": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
- "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
- "dev": true,
- "requires": {
- "lodash._reinterpolate": "^3.0.0",
- "lodash.templatesettings": "^4.0.0"
- }
- },
- "lodash.templatesettings": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
- "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
- "dev": true,
- "requires": {
- "lodash._reinterpolate": "^3.0.0"
- }
- },
- "lolex": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz",
- "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.7.0"
- }
- },
- "longest": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz",
- "integrity": "sha1-eB4YMpaqlPbU2RbcM10NF676I/g=",
- "dev": true
- },
- "loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "dev": true,
- "requires": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- }
- },
- "loud-rejection": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
- "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
- "dev": true,
- "requires": {
- "currently-unhandled": "^0.4.1",
- "signal-exit": "^3.0.0"
- }
- },
- "macos-release": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz",
- "integrity": "sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA=="
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "make-error": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
- "dev": true
- },
- "makeerror": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
- "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
- "dev": true,
- "requires": {
- "tmpl": "1.0.x"
- }
- },
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "dev": true
- },
- "map-obj": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz",
- "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==",
- "dev": true
- },
- "map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "dev": true,
- "requires": {
- "object-visit": "^1.0.0"
- }
- },
- "meow": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz",
- "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==",
- "dev": true,
- "requires": {
- "camelcase-keys": "^4.0.0",
- "decamelize-keys": "^1.0.0",
- "loud-rejection": "^1.0.0",
- "minimist-options": "^3.0.1",
- "normalize-package-data": "^2.3.4",
- "read-pkg-up": "^3.0.0",
- "redent": "^2.0.0",
- "trim-newlines": "^2.0.0",
- "yargs-parser": "^10.0.0"
- },
- "dependencies": {
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "dev": true
- },
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
- "camelcase-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
- "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0",
- "map-obj": "^2.0.0",
- "quick-lru": "^1.0.0"
- }
- },
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "indent-string": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
- "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
- "dev": true
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "map-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
- "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
- "dev": true
- },
- "minimist-options": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
- "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
- "dev": true,
- "requires": {
- "arrify": "^1.0.1",
- "is-plain-obj": "^1.1.0"
- }
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dev": true,
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- },
- "quick-lru": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
- "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
- "dev": true
- },
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "read-pkg-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
- "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^3.0.0"
- }
- },
- "redent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
- "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
- "dev": true,
- "requires": {
- "indent-string": "^3.0.0",
- "strip-indent": "^2.0.0"
- }
- },
- "strip-indent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
- "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
- "dev": true
- },
- "trim-newlines": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
- "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
- "dev": true
- },
- "yargs-parser": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
- "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0"
- }
- }
- }
- },
- "merge": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz",
- "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==",
- "dev": true
- },
- "merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "mime-db": {
- "version": "1.44.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
- "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.27",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
- "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
- "dev": true,
- "requires": {
- "mime-db": "1.44.0"
- }
- },
- "mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
- "dev": true
- },
- "min-indent": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz",
- "integrity": "sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=",
- "dev": true
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
- "dev": true
- },
- "minimist-options": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.0.2.tgz",
- "integrity": "sha512-seq4hpWkYSUh1y7NXxzucwAN9yVlBc3Upgdjz8vLCP97jG8kaOmzYrVH/m7tQ1NYD1wdtZbSLfdy4zFmRWuc/w==",
- "dev": true,
- "requires": {
- "arrify": "^1.0.1",
- "is-plain-obj": "^1.1.0"
- },
- "dependencies": {
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "dev": true
- }
- }
- },
- "mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "dev": true,
- "requires": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "moment": {
- "version": "2.25.3",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.25.3.tgz",
- "integrity": "sha512-PuYv0PHxZvzc15Sp8ybUCoQ+xpyPWvjOuK72a5ovzp2LI32rJXOiIfyoFoYvG3s6EwwrdkMyWuRiEHSZRLJNdg=="
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
- "dev": true
- },
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- }
- },
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
- "dev": true
- },
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
- },
- "nock": {
- "version": "12.0.3",
- "resolved": "https://registry.npmjs.org/nock/-/nock-12.0.3.tgz",
- "integrity": "sha512-QNb/j8kbFnKCiyqi9C5DD0jH/FubFGj5rt9NQFONXwQm3IPB0CULECg/eS3AU1KgZb/6SwUa4/DTRKhVxkGABw==",
- "dev": true,
- "requires": {
- "debug": "^4.1.0",
- "json-stringify-safe": "^5.0.1",
- "lodash": "^4.17.13",
- "propagate": "^2.0.0"
- }
- },
- "node-fetch": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
- "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA=="
- },
- "node-int64": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
- "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
- "dev": true
- },
- "node-modules-regexp": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
- "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
- "dev": true
- },
- "node-notifier": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-6.0.0.tgz",
- "integrity": "sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==",
- "dev": true,
- "optional": true,
- "requires": {
- "growly": "^1.3.0",
- "is-wsl": "^2.1.1",
- "semver": "^6.3.0",
- "shellwords": "^0.1.1",
- "which": "^1.3.1"
- }
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
- },
- "npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
- "requires": {
- "path-key": "^2.0.0"
- }
- },
- "nwsapi": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
- "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
- "dev": true
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- },
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "dev": true,
- "requires": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "object-inspect": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
- "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
- "dev": true
- },
- "object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true
- },
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "object.assign": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
- "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.2",
- "function-bind": "^1.1.1",
- "has-symbols": "^1.0.0",
- "object-keys": "^1.0.11"
- }
- },
- "object.entries": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.1.tgz",
- "integrity": "sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0-next.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3"
- }
- },
- "object.fromentries": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz",
- "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0-next.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3"
- }
- },
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "object.values": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz",
- "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0-next.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3"
- }
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "requires": {
- "wrappy": "1"
- }
- },
- "onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "dev": true,
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- },
- "opencollective-postinstall": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz",
- "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==",
- "dev": true
- },
- "optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "dev": true,
- "requires": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- }
- },
- "os-name": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz",
- "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==",
- "requires": {
- "macos-release": "^2.2.0",
- "windows-release": "^3.1.0"
- }
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
- "dev": true
- },
- "p-each-series": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.1.0.tgz",
- "integrity": "sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==",
- "dev": true
- },
- "p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- },
- "parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0"
- }
- },
- "parse-json": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
- "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1",
- "lines-and-columns": "^1.1.6"
- }
- },
- "parse-passwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
- "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
- "dev": true
- },
- "parse5": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
- "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==",
- "dev": true
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
- },
- "path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
- "dev": true
- },
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
- "dev": true
- },
- "picomatch": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
- "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
- "dev": true
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- },
- "pirates": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
- "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
- "dev": true,
- "requires": {
- "node-modules-regexp": "^1.0.0"
- }
- },
- "pkg-dir": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
- "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
- "dev": true,
- "requires": {
- "find-up": "^2.1.0"
- },
- "dependencies": {
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dev": true,
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- }
- }
- },
- "please-upgrade-node": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
- "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
- "dev": true,
- "requires": {
- "semver-compare": "^1.0.0"
- }
- },
- "pn": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
- "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
- "dev": true
- },
- "posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
- "dev": true
- },
- "prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "dev": true
- },
- "prettier": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz",
- "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==",
- "dev": true
- },
- "prettier-linter-helpers": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
- "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
- "dev": true,
- "requires": {
- "fast-diff": "^1.1.2"
- }
- },
- "pretty-format": {
- "version": "25.5.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz",
- "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==",
- "dev": true,
- "requires": {
- "@jest/types": "^25.5.0",
- "ansi-regex": "^5.0.0",
- "ansi-styles": "^4.0.0",
- "react-is": "^16.12.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- }
- }
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "dev": true
- },
- "progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true
- },
- "prompts": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz",
- "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==",
- "dev": true,
- "requires": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.4"
- }
- },
- "prop-types": {
- "version": "15.7.2",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
- "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.8.1"
- }
- },
- "propagate": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz",
- "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==",
- "dev": true
- },
- "proper-lockfile": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-1.2.0.tgz",
- "integrity": "sha1-zv9d2J0+XxD7deHo52vHWAGlnDQ=",
- "requires": {
- "err-code": "^1.0.0",
- "extend": "^3.0.0",
- "graceful-fs": "^4.1.2",
- "retry": "^0.10.0"
- }
- },
- "psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
- "dev": true
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "dev": true
- },
- "q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
- "dev": true
- },
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "dev": true
- },
- "quick-lru": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
- "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
- "dev": true
- },
- "react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true
- },
- "read-pkg": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
- "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
- "dev": true,
- "requires": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^2.5.0",
- "parse-json": "^5.0.0",
- "type-fest": "^0.6.0"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
- "dev": true
- }
- }
- },
- "read-pkg-up": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
- "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
- "dev": true,
- "requires": {
- "find-up": "^4.1.0",
- "read-pkg": "^5.2.0",
- "type-fest": "^0.8.1"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true
- }
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "realpath-native": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-2.0.0.tgz",
- "integrity": "sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==",
- "dev": true
- },
- "redent": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
- "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
- "dev": true,
- "requires": {
- "indent-string": "^4.0.0",
- "strip-indent": "^3.0.0"
- }
- },
- "regenerator-runtime": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
- "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
- "dev": true
- },
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "regexp.prototype.flags": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
- "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0-next.1"
- }
- },
- "regexpp": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
- "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
- "dev": true
- },
- "regextras": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.7.1.tgz",
- "integrity": "sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w==",
- "dev": true
- },
- "remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
- "dev": true
- },
- "repeat-element": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
- "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
- "dev": true
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
- "dev": true
- },
- "request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "dev": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "dependencies": {
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "dev": true,
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- },
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "dev": true
- }
- }
- },
- "request-promise-core": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz",
- "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.15"
- }
- },
- "request-promise-native": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz",
- "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==",
- "dev": true,
- "requires": {
- "request-promise-core": "1.1.3",
- "stealthy-require": "^1.1.1",
- "tough-cookie": "^2.3.3"
- },
- "dependencies": {
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "dev": true,
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- }
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
- },
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
- "dev": true
- },
- "resolve": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
- "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
- "dev": true,
- "requires": {
- "path-parse": "^1.0.6"
- }
- },
- "resolve-cwd": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
- "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
- "dev": true,
- "requires": {
- "resolve-from": "^5.0.0"
- }
- },
- "resolve-dir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
- "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
- "dev": true,
- "requires": {
- "expand-tilde": "^2.0.0",
- "global-modules": "^1.0.0"
- }
- },
- "resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true
- },
- "resolve-global": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz",
- "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==",
- "dev": true,
- "requires": {
- "global-dirs": "^0.1.1"
- }
- },
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "dev": true
- },
- "restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
- "dev": true,
- "requires": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
- }
- },
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true
- },
- "retry": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz",
- "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q="
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "rsvp": {
- "version": "4.8.5",
- "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
- "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
- "dev": true
- },
- "run-async": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
- "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
- "dev": true
- },
- "rxjs": {
- "version": "6.5.5",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz",
- "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==",
- "dev": true,
- "requires": {
- "tslib": "^1.9.0"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "dev": true,
- "requires": {
- "ret": "~0.1.10"
- }
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "sane": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
- "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
- "dev": true,
- "requires": {
- "@cnakazawa/watch": "^1.0.3",
- "anymatch": "^2.0.0",
- "capture-exit": "^2.0.0",
- "exec-sh": "^0.3.2",
- "execa": "^1.0.0",
- "fb-watchman": "^2.0.0",
- "micromatch": "^3.1.4",
- "minimist": "^1.1.1",
- "walker": "~1.0.5"
- },
- "dependencies": {
- "anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- }
- },
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "dev": true,
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
- }
- }
- },
- "saxes": {
- "version": "3.1.11",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz",
- "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==",
- "dev": true,
- "requires": {
- "xmlchars": "^2.1.1"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- },
- "semver-compare": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
- "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
- "dev": true
- },
- "semver-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz",
- "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==",
- "dev": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
- },
- "set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
- },
- "shellwords": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
- "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
- "dev": true,
- "optional": true
- },
- "side-channel": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz",
- "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==",
- "dev": true,
- "requires": {
- "es-abstract": "^1.17.0-next.1",
- "object-inspect": "^1.7.0"
- }
- },
- "signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
- },
- "sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true
- },
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
- },
- "slice-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
- "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "astral-regex": "^1.0.0",
- "is-fullwidth-code-point": "^2.0.0"
- }
- },
- "snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
- "requires": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "requires": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
- "requires": {
- "kind-of": "^3.2.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "source-map-resolve": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
- "dev": true,
- "requires": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
- }
- },
- "source-map-support": {
- "version": "0.5.19",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
- "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
- "source-map-url": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
- "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
- "dev": true
- },
- "spdx-correct": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
- "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
- "dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
- "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
- "dev": true
- },
- "split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.0"
- }
- },
- "split2": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
- "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
- "dev": true,
- "requires": {
- "through2": "^2.0.2"
- },
- "dependencies": {
- "through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dev": true,
- "requires": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- }
- }
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- },
- "sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "dev": true,
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- }
- },
- "stack-utils": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
- "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==",
- "dev": true
- },
- "static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "dev": true,
- "requires": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
- }
- },
- "stealthy-require": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
- "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
- "dev": true
- },
- "string-length": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz",
- "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==",
- "dev": true,
- "requires": {
- "astral-regex": "^1.0.0",
- "strip-ansi": "^5.2.0"
- }
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "string.prototype.matchall": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz",
- "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0",
- "has-symbols": "^1.0.1",
- "internal-slot": "^1.0.2",
- "regexp.prototype.flags": "^1.3.0",
- "side-channel": "^1.0.2"
- }
- },
- "string.prototype.trimend": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
- "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.5"
- }
- },
- "string.prototype.trimleft": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
- "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.5",
- "string.prototype.trimstart": "^1.0.0"
- }
- },
- "string.prototype.trimright": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
- "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.5",
- "string.prototype.trimend": "^1.0.0"
- }
- },
- "string.prototype.trimstart": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
- "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.5"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- }
- }
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
- "dev": true
- },
- "strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
- },
- "strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "dev": true
- },
- "strip-indent": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
- "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
- "dev": true,
- "requires": {
- "min-indent": "^1.0.0"
- }
- },
- "strip-json-comments": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
- "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "supports-hyperlinks": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz",
- "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0",
- "supports-color": "^7.0.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "svg-element-attributes": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/svg-element-attributes/-/svg-element-attributes-1.3.1.tgz",
- "integrity": "sha512-Bh05dSOnJBf3miNMqpsormfNtfidA/GxQVakhtn0T4DECWKeXQRQUceYjJ+OxYiiLdGe4Jo9iFV8wICFapFeIA==",
- "dev": true
- },
- "symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
- "dev": true
- },
- "table": {
- "version": "5.4.6",
- "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
- "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
- "dev": true,
- "requires": {
- "ajv": "^6.10.2",
- "lodash": "^4.17.14",
- "slice-ansi": "^2.1.0",
- "string-width": "^3.0.0"
- },
- "dependencies": {
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- }
- }
- },
- "terminal-link": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
- "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
- "dev": true,
- "requires": {
- "ansi-escapes": "^4.2.1",
- "supports-hyperlinks": "^2.0.0"
- },
- "dependencies": {
- "ansi-escapes": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
- "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
- "dev": true,
- "requires": {
- "type-fest": "^0.11.0"
- }
- },
- "type-fest": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
- "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
- "dev": true
- }
- }
- },
- "test-exclude": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
- "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
- "dev": true,
- "requires": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^7.1.4",
- "minimatch": "^3.0.4"
- }
- },
- "text-extensions": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz",
- "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==",
- "dev": true
- },
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
- "dev": true
- },
- "throat": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz",
- "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==",
- "dev": true
- },
- "through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
- "dev": true
- },
- "through2": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
- "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
- "dev": true,
- "requires": {
- "readable-stream": "2 || 3"
- }
- },
- "tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "dev": true,
- "requires": {
- "os-tmpdir": "~1.0.2"
- }
- },
- "tmpl": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
- "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
- "dev": true
- },
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
- "dev": true
- },
- "to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
- "requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- },
- "tough-cookie": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
- "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",
- "dev": true,
- "requires": {
- "ip-regex": "^2.1.0",
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- },
- "tr46": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
- "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "trim-newlines": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz",
- "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==",
- "dev": true
- },
- "trim-off-newlines": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz",
- "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=",
- "dev": true
- },
- "ts-jest": {
- "version": "25.5.1",
- "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-25.5.1.tgz",
- "integrity": "sha512-kHEUlZMK8fn8vkxDjwbHlxXRB9dHYpyzqKIGDNxbzs+Rz+ssNDSDNusEK8Fk/sDd4xE6iKoQLfFkFVaskmTJyw==",
- "dev": true,
- "requires": {
- "bs-logger": "0.x",
- "buffer-from": "1.x",
- "fast-json-stable-stringify": "2.x",
- "json5": "2.x",
- "lodash.memoize": "4.x",
- "make-error": "1.x",
- "micromatch": "4.x",
- "mkdirp": "0.x",
- "semver": "6.x",
- "yargs-parser": "18.x"
- },
- "dependencies": {
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "micromatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
- "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.0.5"
- }
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- }
- }
- },
- "tslib": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
- "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==",
- "dev": true
- },
- "tsutils": {
- "version": "3.17.1",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz",
- "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==",
- "dev": true,
- "requires": {
- "tslib": "^1.8.1"
- }
- },
- "tunnel": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
- "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "dev": true
- },
- "type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2"
- }
- },
- "type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true
- },
- "type-fest": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
- "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
- "dev": true
- },
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
- "typescript": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.2.tgz",
- "integrity": "sha512-q2ktq4n/uLuNNShyayit+DTobV2ApPEo/6so68JaD5ojvc/6GClBipedB9zNWYxRSAlZXAe405Rlijzl6qDiSw==",
- "dev": true
- },
- "union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- }
- },
- "unit-compare": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/unit-compare/-/unit-compare-1.0.1.tgz",
- "integrity": "sha1-DHRZ8OW/U2N+qHPKPO4Y3i7so4Y=",
- "requires": {
- "moment": "^2.14.1"
- }
- },
- "universal-user-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-5.0.0.tgz",
- "integrity": "sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q==",
- "requires": {
- "os-name": "^3.1.0"
- }
- },
- "universalify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
- "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug=="
- },
- "unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "dev": true,
- "requires": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
- },
- "has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
- "dev": true
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "uri-js": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
- "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
- "dev": true
- },
- "url-template": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz",
- "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=",
- "dev": true
- },
- "use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "dev": true
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
- },
- "uuid": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz",
- "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw=="
- },
- "v8-compile-cache": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
- "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==",
- "dev": true
- },
- "v8-to-istanbul": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz",
- "integrity": "sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ==",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-coverage": "^2.0.1",
- "convert-source-map": "^1.6.0",
- "source-map": "^0.7.3"
- },
- "dependencies": {
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- }
- }
- },
- "validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "w3c-hr-time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "dev": true,
- "requires": {
- "browser-process-hrtime": "^1.0.0"
- }
- },
- "w3c-xmlserializer": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz",
- "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==",
- "dev": true,
- "requires": {
- "domexception": "^1.0.1",
- "webidl-conversions": "^4.0.2",
- "xml-name-validator": "^3.0.0"
- }
- },
- "walker": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
- "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
- "dev": true,
- "requires": {
- "makeerror": "1.0.x"
- }
- },
- "webidl-conversions": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
- "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
- "dev": true
- },
- "whatwg-encoding": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
- "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
- "dev": true,
- "requires": {
- "iconv-lite": "0.4.24"
- }
- },
- "whatwg-fetch": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz",
- "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==",
- "dev": true
- },
- "whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
- "whatwg-url": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
- "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
- "dev": true,
- "requires": {
- "lodash.sortby": "^4.7.0",
- "tr46": "^1.0.1",
- "webidl-conversions": "^4.0.2"
- }
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
- "which-pm-runs": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz",
- "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=",
- "dev": true
- },
- "windows-release": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.3.0.tgz",
- "integrity": "sha512-2HetyTg1Y+R+rUgrKeUEhAG/ZuOmTrI1NBb3ZyAGQMYmOJjBBPe4MTodghRkmLJZHwkuPi02anbeGP+Zf401LQ==",
- "requires": {
- "execa": "^1.0.0"
- }
- },
- "word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
- "dev": true
- },
- "wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
- "dev": true
- },
- "wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "write": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
- "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
- "dev": true,
- "requires": {
- "mkdirp": "^0.5.1"
- }
- },
- "write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
- "ws": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.0.tgz",
- "integrity": "sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==",
- "dev": true
- },
- "xml-name-validator": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
- "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
- "dev": true
- },
- "xmlchars": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "dev": true
- },
- "xregexp": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.3.0.tgz",
- "integrity": "sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==",
- "dev": true,
- "requires": {
- "@babel/runtime-corejs3": "^7.8.3"
- }
- },
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true
- },
- "y18n": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
- "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
- "dev": true
- },
- "yaml": {
- "version": "1.9.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.2.tgz",
- "integrity": "sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.9.2"
- }
- },
- "yargs": {
- "version": "15.3.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz",
- "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==",
- "dev": true,
- "requires": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.1"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- }
- }
- },
- "yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- }
- }
- }
- }
-}
diff --git a/package.json b/package.json
index f95eea14..3ce56208 100644
--- a/package.json
+++ b/package.json
@@ -52,40 +52,46 @@
"dependencies": {
"@actions/core": "^1.2.4",
"@actions/exec": "^1.0.4",
- "@actions/io": "^1.0.2",
"@actions/tool-cache": "^1.3.5",
- "@octokit/action": "^2.7.0",
+ "@octokit/action": "^3.0.5",
"@octokit/plugin-retry": "^3.0.1",
+ "@octokit/core": "^3.1.1",
+ "diff": "^4.0.2",
"filehound": "^1.17.4",
"fs-extra": "^9.0.0",
- "uuid": "^8.0.0"
+ "uuid": "^8.0.0",
+ "which": "^2.0.2",
+ "yaml": "^1.10.0"
},
"devDependencies": {
- "@commitlint/cli": "^8.2.0",
- "@commitlint/config-conventional": "^8.2.0",
- "@commitlint/core": "^8.2.0",
+ "@commitlint/cli": "^9.1.2",
+ "@commitlint/config-conventional": "^9.1.1",
+ "@commitlint/core": "^9.1.1",
"@octokit/fixtures": "^21.0.5",
- "@octokit/types": "^2.16.2",
+ "@octokit/types": "^5.2.0",
"@types/bluebird": "^3.5.30",
- "@types/fs-extra": "^8.1.0",
- "@types/jest": "^25.2.2",
+ "@types/diff": "^4.0.2",
+ "@types/fs-extra": "^9.0.1",
+ "@types/jest": "^26.0.7",
"@types/js-yaml": "^3.12.3",
"@types/node": "^14.0.1",
"@types/promise-retry": "^1.1.3",
- "@types/uuid": "^7.0.3",
- "@typescript-eslint/parser": "^2.33.0",
+ "@types/tmp": "^0.2.0",
+ "@types/uuid": "^8.0.0",
+ "@types/which": "^1.3.2",
+ "@typescript-eslint/parser": "^3.0.0",
"@zeit/ncc": "^0.22.1",
- "conventional-changelog-conventionalcommits": "^4.3.0",
+ "conventional-changelog-conventionalcommits": "^4.3.1",
"cz-conventional-changelog": "^3.0.2",
- "eslint": "^6.8.0",
- "eslint-plugin-github": "^3.4.1",
- "eslint-plugin-jest": "^23.11.0",
+ "eslint": "^7.5.0",
+ "eslint-plugin-github": "^4.1.1",
+ "eslint-plugin-jest": "^23.18.0",
"husky": "^4.2.5",
- "jest": "^25.5.4",
+ "jest": "^26.0.1",
"jest-circus": "^26.0.1",
"js-yaml": "^3.13.1",
"prettier": "^2.0.5",
- "ts-jest": "^25.5.1",
+ "ts-jest": "^26.0.0",
"typescript": "^3.9.2"
}
}
diff --git a/src/diff/common-prefix.ts b/src/diff/common-prefix.ts
new file mode 100644
index 00000000..971eaac4
--- /dev/null
+++ b/src/diff/common-prefix.ts
@@ -0,0 +1,57 @@
+/**
+ * Diff Match and Patch
+ * Copyright 2018 The diff-match-patch Authors.
+ * https://github.com/google/diff-match-patch
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @author fraser@google.com (Neil Fraser)
+ */
+
+/**
+ * Determine the common prefix of two strings.
+ *
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ *
+ * @return {number} The number of characters common to the start of each
+ * string.
+ */
+export const commonPrefix = (text1: string, text2: string): number => {
+ // Quick check for common null cases.
+ if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {
+ return 0
+ }
+ // Binary search.
+ // Performance analysis: https://neil.fraser.name/news/2007/10/09/
+ let pointerMin = 0
+ let pointerMax = Math.min(text1.length, text2.length)
+ let pointerMid = pointerMax
+ let pointerStart = 0
+
+ while (pointerMin < pointerMid) {
+ if (
+ text1.substring(pointerStart, pointerMid) ==
+ text2.substring(pointerStart, pointerMid)
+ ) {
+ pointerMin = pointerMid
+ pointerStart = pointerMin
+ } else {
+ pointerMax = pointerMid
+ }
+
+ pointerMid = Math.floor((pointerMax - pointerMin) / 2 + pointerMin)
+ }
+
+ return pointerMid
+}
diff --git a/src/diff/common-suffix.ts b/src/diff/common-suffix.ts
new file mode 100644
index 00000000..2e592302
--- /dev/null
+++ b/src/diff/common-suffix.ts
@@ -0,0 +1,60 @@
+/**
+ * Diff Match and Patch
+ * Copyright 2018 The diff-match-patch Authors.
+ * https://github.com/google/diff-match-patch
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @author fraser@google.com (Neil Fraser)
+ */
+
+/**
+ * Determine the common suffix of two strings.
+ *
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ *
+ * @return {number} The number of characters common to the end of each string.
+ */
+export const commonSuffix = (text1: string, text2: string): number => {
+ // Quick check for common null cases.
+ if (
+ !text1 ||
+ !text2 ||
+ text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)
+ ) {
+ return 0
+ }
+ // Binary search.
+ // Performance analysis: https://neil.fraser.name/news/2007/10/09/
+ let pointerMin = 0
+ let pointerMax = Math.min(text1.length, text2.length)
+ let pointerMid = pointerMax
+ let pointerEnd = 0
+
+ while (pointerMin < pointerMid) {
+ if (
+ text1.substring(text1.length - pointerMid, text1.length - pointerEnd) ==
+ text2.substring(text2.length - pointerMid, text2.length - pointerEnd)
+ ) {
+ pointerMin = pointerMid
+ pointerEnd = pointerMin
+ } else {
+ pointerMax = pointerMid
+ }
+
+ pointerMid = Math.floor((pointerMax - pointerMin) / 2 + pointerMin)
+ }
+
+ return pointerMid
+}
diff --git a/src/diff/diff-chars-to-lines.ts b/src/diff/diff-chars-to-lines.ts
new file mode 100644
index 00000000..7d94bd17
--- /dev/null
+++ b/src/diff/diff-chars-to-lines.ts
@@ -0,0 +1,41 @@
+/**
+ * Diff Match and Patch
+ * Copyright 2018 The diff-match-patch Authors.
+ * https://github.com/google/diff-match-patch
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @author fraser@google.com (Neil Fraser)
+ */
+
+import {Diff} from './diff'
+
+/**
+ * Rehydrate the text in a diff from a string of line hashes to real lines of
+ * text.
+ *
+ * @param {!Array.} diffs Array of diff tuples.
+ * @param {!Array.} lineArray Array of unique strings.
+ */
+export const diffCharsToLines = (diffs: Diff[], lineArray: string[]) => {
+ for (let i = 0; i < diffs.length; i++) {
+ const chars = diffs[i].text
+ const text: string[] = []
+
+ for (let j = 0; j < chars.length; j++) {
+ text[j] = lineArray[chars.charCodeAt(j)]
+ }
+
+ diffs[i].text = text.join('')
+ }
+}
diff --git a/src/diff/diff-common-overlap.ts b/src/diff/diff-common-overlap.ts
new file mode 100644
index 00000000..4cfe64d8
--- /dev/null
+++ b/src/diff/diff-common-overlap.ts
@@ -0,0 +1,76 @@
+/**
+ * Diff Match and Patch
+ * Copyright 2018 The diff-match-patch Authors.
+ * https://github.com/google/diff-match-patch
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @author fraser@google.com (Neil Fraser)
+ */
+
+/**
+ * Determine if the suffix of one string is the prefix of another.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ *
+ * @return {number} The number of characters common to the end of the first
+ * string and the start of the second string.
+ */
+export const diffCommonOverlap = (text1: string, text2: string): number => {
+ // Cache the text lengths to prevent multiple calls.
+ const text1Length = text1.length
+ const text2Length = text2.length
+
+ // Eliminate the null case.
+ if (text1Length == 0 || text2Length == 0) {
+ return 0
+ }
+ // Truncate the longer string.
+ if (text1Length > text2Length) {
+ text1 = text1.substring(text1Length - text2Length)
+ } else if (text1Length < text2Length) {
+ text2 = text2.substring(0, text1Length)
+ }
+
+ const textLength = Math.min(text1Length, text2Length)
+
+ // Quick check for the worst case.
+ if (text1 == text2) {
+ return textLength
+ }
+
+ // Start by looking for a single character match
+ // and increase length until no match is found.
+ // Performance analysis: https://neil.fraser.name/news/2010/11/04/
+ let best = 0
+ let length = 1
+
+ while (true) {
+ const pattern = text1.substring(textLength - length)
+ const found = text2.indexOf(pattern)
+
+ if (found == -1) {
+ return best
+ }
+
+ length += found
+
+ if (
+ found == 0 ||
+ text1.substring(textLength - length) == text2.substring(0, length)
+ ) {
+ best = length
+ length++
+ }
+ }
+}
diff --git a/src/diff/diff-lines-to-chars.ts b/src/diff/diff-lines-to-chars.ts
new file mode 100644
index 00000000..e86c964d
--- /dev/null
+++ b/src/diff/diff-lines-to-chars.ts
@@ -0,0 +1,109 @@
+/**
+ * Diff Match and Patch
+ * Copyright 2018 The diff-match-patch Authors.
+ * https://github.com/google/diff-match-patch
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @author fraser@google.com (Neil Fraser)
+ */
+
+interface IOutput {
+ chars1: string
+ chars2: string
+ lineArray: string[]
+}
+
+/**
+ * Split two texts into an array of strings. Reduce the texts to a string of
+ * hashes where each Unicode character represents one line.
+ *
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ *
+ * @return {{chars1: string, chars2: string, lineArray: !Array.}}
+ * An object containing the encoded text1, the encoded text2 and
+ * the array of unique strings.
+ * The zeroth element of the array of unique strings is intentionally blank.
+ */
+export const diffLinesToChars = (text1: string, text2: string): IOutput => {
+ const lineArray: string[] = [] // e.g. lineArray[4] == 'Hello\n'
+ const lineHash: {[key: string]: number} = {} // e.g. lineHash['Hello\n'] == 4
+
+ // '\x00' is a valid character, but various debuggers don't like it.
+ // So we'll insert a junk entry to avoid generating a null character.
+ lineArray[0] = ''
+
+ /**
+ * Split a text into an array of strings. Reduce the texts to a string of
+ * hashes where each Unicode character represents one line.
+ * Modifies lineArray and linehash through being a closure.
+ * @param {string} text String to encode.
+ * @return {string} Encoded string.
+ * @private
+ */
+ function diffLinesToCharsMunge(text: string): string {
+ let chars = ''
+ // Walk the text, pulling out a substring for each line.
+ // text.split('\n') would would temporarily double our memory footprint.
+ // Modifying text would create many large strings to garbage collect.
+ let lineStart = 0
+ let lineEnd = -1
+ // Keeping our own length variable is faster than looking it up.
+ let lineArrayLength = lineArray.length
+
+ while (lineEnd < text.length - 1) {
+ lineEnd = text.indexOf('\n', lineStart)
+
+ if (lineEnd == -1) {
+ lineEnd = text.length - 1
+ }
+
+ let line = text.substring(lineStart, lineEnd + 1)
+
+ if (
+ lineHash.hasOwnProperty
+ ? lineHash.hasOwnProperty(line)
+ : lineHash[line] !== undefined
+ ) {
+ chars += String.fromCharCode(lineHash[line])
+ } else {
+ if (lineArrayLength == maxLines) {
+ // Bail out at 65535 because
+ // String.fromCharCode(65536) == String.fromCharCode(0)
+ line = text.substring(lineStart)
+ lineEnd = text.length
+ }
+
+ chars += String.fromCharCode(lineArrayLength)
+ lineHash[line] = lineArrayLength
+ lineArray[lineArrayLength++] = line
+ }
+
+ lineStart = lineEnd + 1
+ }
+
+ return chars
+ }
+
+ // Allocate 2/3rds of the space for text1, the rest for text2.
+ let maxLines = 40000
+
+ const chars1 = diffLinesToCharsMunge(text1)
+
+ maxLines = 65535
+
+ const chars2 = diffLinesToCharsMunge(text2)
+
+ return {chars1, chars2, lineArray}
+}
diff --git a/src/diff/diff-lines-to-words.ts b/src/diff/diff-lines-to-words.ts
new file mode 100644
index 00000000..d8ef1838
--- /dev/null
+++ b/src/diff/diff-lines-to-words.ts
@@ -0,0 +1,109 @@
+/**
+ * Diff Match and Patch
+ * Copyright 2018 The diff-match-patch Authors.
+ * https://github.com/google/diff-match-patch
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @author fraser@google.com (Neil Fraser)
+ */
+
+interface IOutput {
+ chars1: string
+ chars2: string
+ lineArray: string[]
+}
+
+/**
+ * Split two texts into an array of strings. Reduce the texts to a string of
+ * hashes where each Unicode character represents one line.
+ *
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ *
+ * @return {{chars1: string, chars2: string, lineArray: !Array.}}
+ * An object containing the encoded text1, the encoded text2 and
+ * the array of unique strings.
+ * The zeroth element of the array of unique strings is intentionally blank.
+ */
+export const diffLinesToWords = (text1: string, text2: string): IOutput => {
+ const lineArray: string[] = [] // e.g. lineArray[4] == 'Hello\n'
+ const lineHash: {[key: string]: number} = {} // e.g. lineHash['Hello\n'] == 4
+
+ // '\x00' is a valid character, but various debuggers don't like it.
+ // So we'll insert a junk entry to avoid generating a null character.
+ lineArray[0] = ''
+
+ /**
+ * Split a text into an array of strings. Reduce the texts to a string of
+ * hashes where each Unicode character represents one line.
+ * Modifies lineArray and linehash through being a closure.
+ * @param {string} text String to encode.
+ * @return {string} Encoded string.
+ * @private
+ */
+ function diffLinesToCharsMunge(text: string): string {
+ let chars = ''
+ // Walk the text, pulling out a substring for each line.
+ // text.split('\n') would would temporarily double our memory footprint.
+ // Modifying text would create many large strings to garbage collect.
+ let lineStart = 0
+ let lineEnd = -1
+ // Keeping our own length variable is faster than looking it up.
+ let lineArrayLength = lineArray.length
+
+ while (lineEnd < text.length - 1) {
+ lineEnd = text.indexOf(' ', lineStart)
+
+ if (lineEnd == -1) {
+ lineEnd = text.length - 1
+ }
+
+ let line = text.substring(lineStart, lineEnd + 1)
+
+ if (
+ lineHash.hasOwnProperty
+ ? lineHash.hasOwnProperty(line)
+ : lineHash[line] !== undefined
+ ) {
+ chars += String.fromCharCode(lineHash[line])
+ } else {
+ if (lineArrayLength == maxLines) {
+ // Bail out at 65535 because
+ // String.fromCharCode(65536) == String.fromCharCode(0)
+ line = text.substring(lineStart)
+ lineEnd = text.length
+ }
+
+ chars += String.fromCharCode(lineArrayLength)
+ lineHash[line] = lineArrayLength
+ lineArray[lineArrayLength++] = line
+ }
+
+ lineStart = lineEnd + 1
+ }
+
+ return chars
+ }
+
+ // Allocate 2/3rds of the space for text1, the rest for text2.
+ let maxLines = 40000
+
+ const chars1 = diffLinesToCharsMunge(text1)
+
+ maxLines = 65535
+
+ const chars2 = diffLinesToCharsMunge(text2)
+
+ return {chars1, chars2, lineArray}
+}
diff --git a/src/diff/diff-match-patch.ts b/src/diff/diff-match-patch.ts
new file mode 100644
index 00000000..922814ca
--- /dev/null
+++ b/src/diff/diff-match-patch.ts
@@ -0,0 +1,1763 @@
+/**
+ * Diff Match and Patch
+ * Copyright 2018 The diff-match-patch Authors.
+ * https://github.com/google/diff-match-patch
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @fileoverview Computes the difference between two texts to create a patch.
+ * Applies the patch onto another text, allowing for errors.
+ * @author fraser@google.com (Neil Fraser)
+ */
+import {Diff} from './diff'
+import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT} from '../interfaces'
+import {PatchObject} from './patch-object'
+import {levenshtein} from './levenshtein'
+import {diffLinesToChars} from './diff-lines-to-chars'
+import {diffCharsToLines} from './diff-chars-to-lines'
+import {commonSuffix} from './common-suffix'
+import {commonPrefix} from './common-prefix'
+import {diffXIndex} from './diff-x-index'
+import {diffCommonOverlap} from './diff-common-overlap'
+import {matchAlphabet} from './match-alphabet'
+import {patchDeepObjectCopy} from './patch-deep-object-copy'
+import {diffText} from './diff-text'
+
+export default class DiffMatchPatch {
+ DiffTimeout: number
+ DiffEditCost: number
+ MatchThreshold: number
+ MatchDistance: number
+ PatchDeleteThreshold: number
+ PatchMargin: number
+ MatchMaxBits: number
+
+ // Define some regex patterns for matching boundaries.
+ private static nonAlphaNumericRegex = /[^a-zA-Z0-9]/
+ private static whitespaceRegex = /\s/
+ private static linebreakRegex = /[\r\n]/
+ private static blankLineEndRegex = /\n\r?\n$/
+ private static blankLineStartRegex = /^\r?\n\r?\n/
+
+ constructor() {
+ // Defaults.
+ // Redefine these in your program to override the defaults.
+
+ // Number of seconds to map a diff before giving up (0 for infinity).
+ this.DiffTimeout = 1.0
+ // Cost of an empty edit operation in terms of edit characters.
+ this.DiffEditCost = 4
+ // At what point is no match declared (0.0 = perfection, 1.0 = very loose).
+ this.MatchThreshold = 0.5
+ // How far to search for a match (0 = exact location, 1000+ = broad match).
+ // A match this many characters away from the expected location will add
+ // 1.0 to the score (0.0 is a perfect match).
+ this.MatchDistance = 1000
+ // When deleting a large block of text (over ~64 characters), how close do
+ // the contents have to be to match the expected contents. (0.0 = perfection,
+ // 1.0 = very loose). Note that MatchThreshold controls how closely the
+ // end points of a delete need to match.
+ this.PatchDeleteThreshold = 0.5
+ // Chunk size for context length.
+ this.PatchMargin = 4
+
+ // The number of bits in an int.
+ this.MatchMaxBits = 32
+ }
+
+ /**
+ * Find the differences between two texts. Simplifies the problem by stripping
+ * any common prefix or suffix off the texts before diffing.
+ *
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {boolean} optCheckLines Optional speedup flag. If present and false,
+ * then don't run a line-level diff first to identify the changed areas.
+ * Defaults to true, which does a faster, slightly less optimal diff.
+ * @param {number} optDeadline Optional time when the diff should be complete
+ * by. Used internally for recursive calls. Users should set DiffTimeout
+ * instead.
+ *
+ * @return {!Array.} Array of diff tuples.
+ */
+ diff(
+ text1: string,
+ text2: string,
+ optCheckLines?: boolean,
+ optDeadline?: number
+ ): Diff[] {
+ // Set a deadline by which time the diff must be complete.
+ if (typeof optDeadline == 'undefined') {
+ if (this.DiffTimeout <= 0) {
+ optDeadline = Number.MAX_VALUE
+ } else {
+ optDeadline = new Date().getTime() + this.DiffTimeout * 1000
+ }
+ }
+
+ const deadline = optDeadline
+
+ // Check for equality (speedup).
+ if (text1 == text2) {
+ if (text1 !== '') {
+ return [new Diff(DIFF_EQUAL, text1)]
+ }
+
+ return []
+ }
+
+ if (typeof optCheckLines == 'undefined') {
+ optCheckLines = true
+ }
+
+ const checkLines = optCheckLines
+
+ // Trim off common prefix (speedup).
+ let commonLength = commonPrefix(text1, text2)
+
+ const prefix = text1.substring(0, commonLength)
+
+ text1 = text1.substring(commonLength)
+ text2 = text2.substring(commonLength)
+
+ // Trim off common suffix (speedup).
+ commonLength = commonSuffix(text1, text2)
+
+ const suffix = text1.substring(text1.length - commonLength)
+
+ text1 = text1.substring(0, text1.length - commonLength)
+ text2 = text2.substring(0, text2.length - commonLength)
+
+ // Compute the diff on the middle block.
+ const diffs = this.diffCompute(text1, text2, checkLines, deadline)
+
+ // Restore the prefix and suffix.
+ if (prefix) {
+ diffs.unshift(new Diff(DIFF_EQUAL, prefix))
+ }
+
+ if (suffix) {
+ diffs.push(new Diff(DIFF_EQUAL, suffix))
+ }
+
+ this.diffCleanupMerge(diffs)
+
+ return diffs
+ }
+
+ /**
+ * Find the differences between two texts. Assumes that the texts do not
+ * have any common prefix or suffix.
+ *
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {boolean} checkLines Speedup flag. If false, then don't run a
+ * line-level diff first to identify the changed areas.
+ * If true, then run a faster, slightly less optimal diff.
+ * @param {number} deadline Time when the diff should be complete by.
+ *
+ * @return {!Array.} Array of diff tuples.
+ *
+ * @private
+ */
+ private diffCompute(
+ text1: string,
+ text2: string,
+ checkLines: boolean,
+ deadline: number
+ ): Diff[] {
+ let diffs
+
+ if (!text1) {
+ // Just add some text (speedup).
+ return [new Diff(DIFF_INSERT, text2)]
+ }
+
+ if (!text2) {
+ // Just delete some text (speedup).
+ return [new Diff(DIFF_DELETE, text1)]
+ }
+
+ const longtext = text1.length > text2.length ? text1 : text2
+ const shortText = text1.length > text2.length ? text2 : text1
+ const i = longtext.indexOf(shortText)
+
+ if (i != -1) {
+ // Shorter text is inside the longer text (speedup).
+ diffs = [
+ new Diff(DIFF_INSERT, longtext.substring(0, i)),
+ new Diff(DIFF_EQUAL, shortText),
+ new Diff(DIFF_INSERT, longtext.substring(i + shortText.length))
+ ]
+
+ // Swap insertions for deletions if diff is reversed.
+ if (text1.length > text2.length) {
+ diffs[0].operation = diffs[2].operation = DIFF_DELETE
+ }
+
+ return diffs
+ }
+
+ if (shortText.length == 1) {
+ // Single character string.
+ // After the previous speedup, the character can't be an equality.
+ return [new Diff(DIFF_DELETE, text1), new Diff(DIFF_INSERT, text2)]
+ }
+
+ // Check to see if the problem can be split in two.
+ const hm = this.diffHalfMatch(text1, text2)
+
+ if (hm) {
+ // A half-match was found, sort out the return data.
+ const text1A = hm[0]
+ const text1B = hm[1]
+ const text2A = hm[2]
+ const text2B = hm[3]
+ const midCommon = hm[4]
+ // Send both pairs off for separate processing.
+ const diffsA = this.diff(text1A, text2A, checkLines, deadline)
+ const diffsB = this.diff(text1B, text2B, checkLines, deadline)
+
+ // Merge the results.
+ return diffsA.concat([new Diff(DIFF_EQUAL, midCommon)], diffsB)
+ }
+
+ if (checkLines && text1.length > 100 && text2.length > 100) {
+ return this.diffLineMode(text1, text2, deadline)
+ }
+
+ return this.diffBisect(text1, text2, deadline)
+ }
+
+ /**
+ * Do a quick line-level diff on both strings, then rediff the parts for
+ * greater accuracy.
+ * This speedup can produce non-minimal diffs.
+ *
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {number} deadline Time when the diff should be complete by.
+ *
+ * @return {!Array.} Array of diff tuples.
+ *
+ * @private
+ */
+ private diffLineMode(text1: string, text2: string, deadline: number): Diff[] {
+ // Scan the text on a line-by-line basis first.
+ const a = diffLinesToChars(text1, text2)
+ text1 = a.chars1
+ text2 = a.chars2
+ const lineArray = a.lineArray
+
+ const diffs = this.diff(text1, text2, false, deadline)
+
+ // Convert the diff back to original text.
+ diffCharsToLines(diffs, lineArray)
+ // Eliminate freak matches (e.g. blank lines)
+ this.diffCleanupSemantic(diffs)
+
+ // Rediff any replacement blocks, this time character-by-character.
+ // Add a dummy entry at the end.
+ diffs.push(new Diff(DIFF_EQUAL, ''))
+
+ let pointer = 0
+ let countDelete = 0
+ let countInsert = 0
+ let textDelete = ''
+ let textInsert = ''
+
+ while (pointer < diffs.length) {
+ switch (diffs[pointer].operation) {
+ case DIFF_INSERT:
+ countInsert++
+ textInsert += diffs[pointer].text
+ break
+ case DIFF_DELETE:
+ countDelete++
+ textDelete += diffs[pointer].text
+ break
+ case DIFF_EQUAL:
+ // Upon reaching an equality, check for prior redundancies.
+ if (countDelete >= 1 && countInsert >= 1) {
+ // Delete the offending records and add the merged ones.
+ diffs.splice(
+ pointer - countDelete - countInsert,
+ countDelete + countInsert
+ )
+
+ pointer = pointer - countDelete - countInsert
+
+ const subDiff = this.diff(textDelete, textInsert, false, deadline)
+
+ for (let j = subDiff.length - 1; j >= 0; j--) {
+ diffs.splice(pointer, 0, subDiff[j])
+ }
+
+ pointer = pointer + subDiff.length
+ }
+
+ countInsert = 0
+ countDelete = 0
+ textDelete = ''
+ textInsert = ''
+ break
+ }
+
+ pointer++
+ }
+
+ diffs.pop() // Remove the dummy entry at the end.
+
+ return diffs
+ }
+
+ /**
+ * Find the 'middle snake' of a diff, split the problem in two
+ * and return the recursively constructed diff.
+ * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.
+ *
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {number} deadline Time at which to bail if not yet complete.
+ *
+ * @return {!Array.} Array of diff tuples.
+ *
+ * @private
+ */
+ private diffBisect(text1: string, text2: string, deadline: number): Diff[] {
+ // Cache the text lengths to prevent multiple calls.
+ const text1Length = text1.length
+ const text2Length = text2.length
+ const maxD = Math.ceil((text1Length + text2Length) / 2)
+ const vOffset = maxD
+ const vLength = 2 * maxD
+ const v1 = new Array(vLength)
+ const v2 = new Array(vLength)
+
+ // Setting all elements to -1 is faster in Chrome & Firefox than mixing
+ // integers and undefined.
+ for (let x = 0; x < vLength; x++) {
+ v1[x] = -1
+ v2[x] = -1
+ }
+
+ v1[vOffset + 1] = 0
+ v2[vOffset + 1] = 0
+
+ const delta = text1Length - text2Length
+ // If the total number of characters is odd, then the front path will collide
+ // with the reverse path.
+ const front = delta % 2 != 0
+ // Offsets for start and end of k loop.
+ // Prevents mapping of space beyond the grid.
+ let k1start = 0
+ let k1end = 0
+ let k2start = 0
+ let k2end = 0
+
+ for (let d = 0; d < maxD; d++) {
+ // Bail out if deadline is reached.
+ if (new Date().getTime() > deadline) {
+ break
+ }
+
+ // Walk the front path one step.
+ for (let k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {
+ const k1Offset = vOffset + k1
+ let x1: number
+
+ if (k1 == -d || (k1 != d && v1[k1Offset - 1] < v1[k1Offset + 1])) {
+ x1 = v1[k1Offset + 1]
+ } else {
+ x1 = v1[k1Offset - 1] + 1
+ }
+
+ let y1 = x1 - k1
+
+ while (
+ x1 < text1Length &&
+ y1 < text2Length &&
+ text1.charAt(x1) == text2.charAt(y1)
+ ) {
+ x1++
+ y1++
+ }
+
+ v1[k1Offset] = x1
+
+ if (x1 > text1Length) {
+ // Ran off the right of the graph.
+ k1end += 2
+ } else if (y1 > text2Length) {
+ // Ran off the bottom of the graph.
+ k1start += 2
+ } else if (front) {
+ const k2Offset = vOffset + delta - k1
+
+ if (k2Offset >= 0 && k2Offset < vLength && v2[k2Offset] != -1) {
+ // Mirror x2 onto top-left coordinate system.
+ const x2 = text1Length - v2[k2Offset]
+
+ if (x1 >= x2) {
+ // Overlap detected.
+ return this.diffBisectSplit(text1, text2, x1, y1, deadline)
+ }
+ }
+ }
+ }
+
+ // Walk the reverse path one step.
+ for (let k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {
+ const k2Offset = vOffset + k2
+ let x2: number
+
+ if (k2 == -d || (k2 != d && v2[k2Offset - 1] < v2[k2Offset + 1])) {
+ x2 = v2[k2Offset + 1]
+ } else {
+ x2 = v2[k2Offset - 1] + 1
+ }
+
+ let y2 = x2 - k2
+
+ while (
+ x2 < text1Length &&
+ y2 < text2Length &&
+ text1.charAt(text1Length - x2 - 1) ==
+ text2.charAt(text2Length - y2 - 1)
+ ) {
+ x2++
+ y2++
+ }
+
+ v2[k2Offset] = x2
+
+ if (x2 > text1Length) {
+ // Ran off the left of the graph.
+ k2end += 2
+ } else if (y2 > text2Length) {
+ // Ran off the top of the graph.
+ k2start += 2
+ } else if (!front) {
+ const k1Offset = vOffset + delta - k2
+
+ if (k1Offset >= 0 && k1Offset < vLength && v1[k1Offset] != -1) {
+ const x1 = v1[k1Offset]
+ const y1 = vOffset + x1 - k1Offset
+ // Mirror x2 onto top-left coordinate system.
+ x2 = text1Length - x2
+
+ if (x1 >= x2) {
+ // Overlap detected.
+ return this.diffBisectSplit(text1, text2, x1, y1, deadline)
+ }
+ }
+ }
+ }
+ }
+
+ // Diff took too long and hit the deadline or
+ // number of diffs equals number of characters, no commonality at all.
+ return [new Diff(DIFF_DELETE, text1), new Diff(DIFF_INSERT, text2)]
+ }
+
+ /**
+ * Given the location of the 'middle snake', split the diff in two parts
+ * and recurse.
+ *
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {number} x Index of split point in text1.
+ * @param {number} y Index of split point in text2.
+ * @param {number} deadline Time at which to bail if not yet complete.
+ *
+ * @return {!Array.} Array of diff tuples.
+ *
+ * @private
+ */
+ private diffBisectSplit(
+ text1: string,
+ text2: string,
+ x: number,
+ y: number,
+ deadline: number
+ ): Diff[] {
+ const text1a = text1.substring(0, x)
+ const text2a = text2.substring(0, y)
+ const text1b = text1.substring(x)
+ const text2b = text2.substring(y)
+
+ // Compute both diffs serially.
+ const diffs = this.diff(text1a, text2a, false, deadline)
+ const diffsB = this.diff(text1b, text2b, false, deadline)
+
+ return diffs.concat(diffsB)
+ }
+
+ /**
+ * Do the two texts share a substring which is at least half the length of the
+ * longer text?
+ * This speedup can produce non-minimal diffs.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ * @return {Array.} Five element Array, containing the prefix of
+ * text1, the suffix of text1, the prefix of text2, the suffix of
+ * text2 and the common middle. Or null if there was no match.
+ * @private
+ */
+ private diffHalfMatch(text1: string, text2: string): string[] | null {
+ if (this.DiffTimeout <= 0) {
+ // Don't risk returning a non-optimal diff if we have unlimited time.
+ return null
+ }
+
+ const longtext = text1.length > text2.length ? text1 : text2
+ const shortText = text1.length > text2.length ? text2 : text1
+
+ if (longtext.length < 4 || shortText.length * 2 < longtext.length) {
+ return null // Pointless.
+ }
+
+ /**
+ * Does a substring of shortText exist within longtext such that the substring
+ * is at least half the length of longtext?
+ * Closure, but does not reference any external variables.
+ * @param {string} longtext Longer string.
+ * @param {string} shortText Shorter string.
+ * @param {number} i Start index of quarter length substring within longtext.
+ * @return {Array.} Five element Array, containing the prefix of
+ * longtext, the suffix of longtext, the prefix of shortText, the suffix
+ * of shortText and the common middle. Or null if there was no match.
+ * @private
+ */
+ function diffHalfMatchI(
+ longtext: string,
+ shortText: string,
+ i: number
+ ): string[] | null {
+ // Start with a 1/4 length substring at position i as a seed.
+ const seed = longtext.substring(i, i + Math.floor(longtext.length / 4))
+
+ let j = -1
+ let bestCommon = ''
+ let bestLongtextA = ''
+ let bestLongtextB = ''
+ let bestShortTextA = ''
+ let bestShortTextB = ''
+
+ while ((j = shortText.indexOf(seed, j + 1)) != -1) {
+ const prefixLength = commonPrefix(
+ longtext.substring(i),
+ shortText.substring(j)
+ )
+
+ const suffixLength = commonSuffix(
+ longtext.substring(0, i),
+ shortText.substring(0, j)
+ )
+
+ if (bestCommon.length < suffixLength + prefixLength) {
+ bestCommon =
+ shortText.substring(j - suffixLength, j) +
+ shortText.substring(j, j + prefixLength)
+ bestLongtextA = longtext.substring(0, i - suffixLength)
+ bestLongtextB = longtext.substring(i + prefixLength)
+ bestShortTextA = shortText.substring(0, j - suffixLength)
+ bestShortTextB = shortText.substring(j + prefixLength)
+ }
+ }
+
+ if (bestCommon.length * 2 >= longtext.length) {
+ return [
+ bestLongtextA,
+ bestLongtextB,
+ bestShortTextA,
+ bestShortTextB,
+ bestCommon
+ ]
+ }
+
+ return null
+ }
+
+ // First check if the second quarter is the seed for a half-match.
+ const hm1 = diffHalfMatchI(
+ longtext,
+ shortText,
+ Math.ceil(longtext.length / 4)
+ )
+
+ // Check again based on the third quarter.
+ const hm2 = diffHalfMatchI(
+ longtext,
+ shortText,
+ Math.ceil(longtext.length / 2)
+ )
+
+ let hm: string[] | null
+
+ if (!hm1 && !hm2) {
+ return null
+ } else if (!hm2) {
+ hm = hm1
+ } else if (!hm1) {
+ hm = hm2
+ } else {
+ // Both matched. Select the longest.
+ hm = hm1[4].length > hm2[4].length ? hm1 : hm2
+ }
+
+ // A half-match was found, sort out the return data.
+ let text1A
+ let text1B
+ let text2A
+ let text2B
+
+ if (text1.length > text2.length) {
+ text1A = hm![0]
+ text1B = hm![1]
+ text2A = hm![2]
+ text2B = hm![3]
+ } else {
+ text2A = hm![0]
+ text2B = hm![1]
+ text1A = hm![2]
+ text1B = hm![3]
+ }
+
+ const midCommon = hm![4]
+
+ return [text1A, text1B, text2A, text2B, midCommon]
+ }
+
+ /**
+ * Reduce the number of edits by eliminating semantically trivial equalities.
+ *
+ * @param {!Array.} diffs Array of diff tuples.
+ */
+ diffCleanupSemantic(diffs: Diff[]) {
+ const equalities: number[] = [] // Stack of indices where equalities are found.
+
+ let changes = false
+ let equalitiesLength = 0 // Keeping our own length const is faster in JS.
+ /** @type {?string} */
+ let lastEquality = null
+ // Always equal to diffs[equalities[equalitiesLength - 1]][1]
+ let pointer = 0 // Index of current position.
+ // Number of characters that changed prior to the equality.
+ let lengthInsertions1 = 0
+ let lengthDeletions1 = 0
+ // Number of characters that changed after the equality.
+ let lengthInsertions2 = 0
+ let lengthDeletions2 = 0
+
+ while (pointer < diffs.length) {
+ if (diffs[pointer].operation == DIFF_EQUAL) {
+ // Equality found.
+ equalities[equalitiesLength++] = pointer
+ lengthInsertions1 = lengthInsertions2
+ lengthDeletions1 = lengthDeletions2
+ lengthInsertions2 = 0
+ lengthDeletions2 = 0
+ lastEquality = diffs[pointer].text
+ } else {
+ // An insertion or deletion.
+ if (diffs[pointer].operation == DIFF_INSERT) {
+ lengthInsertions2 += diffs[pointer].text.length
+ } else {
+ lengthDeletions2 += diffs[pointer].text.length
+ }
+
+ // Eliminate an equality that is smaller or equal to the edits on both
+ // sides of it.
+ if (
+ lastEquality &&
+ lastEquality.length <=
+ Math.max(lengthInsertions1, lengthDeletions1) &&
+ lastEquality.length <= Math.max(lengthInsertions2, lengthDeletions2)
+ ) {
+ // Duplicate record.
+ diffs.splice(
+ equalities[equalitiesLength - 1],
+ 0,
+ new Diff(DIFF_DELETE, lastEquality)
+ )
+ // Change second copy to insert.
+ diffs[equalities[equalitiesLength - 1] + 1].operation = DIFF_INSERT
+ // Throw away the equality we just deleted.
+ equalitiesLength--
+ // Throw away the previous equality (it needs to be reevaluated).
+ equalitiesLength--
+ pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1
+ lengthInsertions1 = 0 // Reset the counters.
+ lengthDeletions1 = 0
+ lengthInsertions2 = 0
+ lengthDeletions2 = 0
+ lastEquality = null
+ changes = true
+ }
+ }
+
+ pointer++
+ }
+
+ // Normalize the diff.
+ if (changes) {
+ this.diffCleanupMerge(diffs)
+ }
+
+ this.cleanupSemanticLossless(diffs)
+
+ // Find any overlaps between deletions and insertions.
+ // e.g: abcxxxxxxdef
+ // -> abcxxxdef
+ // e.g: xxxabcdefxxx
+ // -> defxxxabc
+ // Only extract an overlap if it is as big as the edit ahead or behind it.
+ pointer = 1
+
+ while (pointer < diffs.length) {
+ if (
+ diffs[pointer - 1].operation == DIFF_DELETE &&
+ diffs[pointer].operation == DIFF_INSERT
+ ) {
+ const deletion = diffs[pointer - 1].text
+ const insertion = diffs[pointer].text
+ const overlapLength1 = diffCommonOverlap(deletion, insertion)
+ const overlapLength2 = diffCommonOverlap(insertion, deletion)
+ if (overlapLength1 >= overlapLength2) {
+ if (
+ overlapLength1 >= deletion.length / 2 ||
+ overlapLength1 >= insertion.length / 2
+ ) {
+ // Overlap found. Insert an equality and trim the surrounding edits.
+ diffs.splice(
+ pointer,
+ 0,
+ new Diff(DIFF_EQUAL, insertion.substring(0, overlapLength1))
+ )
+
+ diffs[pointer - 1].text = deletion.substring(
+ 0,
+ deletion.length - overlapLength1
+ )
+ diffs[pointer + 1].text = insertion.substring(overlapLength1)
+
+ pointer++
+ }
+ } else {
+ if (
+ overlapLength2 >= deletion.length / 2 ||
+ overlapLength2 >= insertion.length / 2
+ ) {
+ // Reverse overlap found.
+ // Insert an equality and swap and trim the surrounding edits.
+ diffs.splice(
+ pointer,
+ 0,
+ new Diff(DIFF_EQUAL, deletion.substring(0, overlapLength2))
+ )
+
+ diffs[pointer - 1].operation = DIFF_INSERT
+ diffs[pointer - 1].text = insertion.substring(
+ 0,
+ insertion.length - overlapLength2
+ )
+ diffs[pointer + 1].operation = DIFF_DELETE
+ diffs[pointer + 1].text = deletion.substring(overlapLength2)
+
+ pointer++
+ }
+ }
+
+ pointer++
+ }
+
+ pointer++
+ }
+ }
+
+ /**
+ * Look for single edits surrounded on both sides by equalities
+ * which can be shifted sideways to align the edit to a word boundary.
+ * e.g: The cat came. -> The cat came.
+ *
+ * @param {!Array.} diffs Array of diff tuples.
+ */
+ private cleanupSemanticLossless(diffs: Diff[]) {
+ /**
+ * Given two strings, compute a score representing whether the internal
+ * boundary falls on logical boundaries.
+ * Scores range from 6 (best) to 0 (worst).
+ * Closure, but does not reference any external variables.
+ * @param {string} one First string.
+ * @param {string} two Second string.
+ * @return {number} The score.
+ * @private
+ */
+ function diffCleanupSemanticScore(one: string, two: string): number {
+ if (!one || !two) {
+ // Edges are the best.
+ return 6
+ }
+
+ // Each port of this function behaves slightly differently due to
+ // subtle differences in each language's definition of things like
+ // 'whitespace'. Since this function's purpose is largely cosmetic,
+ // the choice has been made to use each language's native features
+ // rather than force total conformity.
+ const char1 = one.charAt(one.length - 1)
+ const char2 = two.charAt(0)
+ const nonAlphaNumeric1 = char1.match(DiffMatchPatch.nonAlphaNumericRegex)
+ const nonAlphaNumeric2 = char2.match(DiffMatchPatch.nonAlphaNumericRegex)
+ const whitespace1 =
+ nonAlphaNumeric1 && char1.match(DiffMatchPatch.whitespaceRegex)
+ const whitespace2 =
+ nonAlphaNumeric2 && char2.match(DiffMatchPatch.whitespaceRegex)
+ const lineBreak1 =
+ whitespace1 && char1.match(DiffMatchPatch.linebreakRegex)
+ const lineBreak2 =
+ whitespace2 && char2.match(DiffMatchPatch.linebreakRegex)
+ const blankLine1 =
+ lineBreak1 && one.match(DiffMatchPatch.blankLineEndRegex)
+ const blankLine2 =
+ lineBreak2 && two.match(DiffMatchPatch.blankLineStartRegex)
+
+ if (blankLine1 || blankLine2) {
+ // Five points for blank lines.
+ return 5
+ } else if (lineBreak1 || lineBreak2) {
+ // Four points for line breaks.
+ return 4
+ } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {
+ // Three points for end of sentences.
+ return 3
+ } else if (whitespace1 || whitespace2) {
+ // Two points for whitespace.
+ return 2
+ } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {
+ // One point for non-alphanumeric.
+ return 1
+ }
+
+ return 0
+ }
+
+ let pointer = 1
+
+ // Intentionally ignore the first and last element (don't need checking).
+ while (pointer < diffs.length - 1) {
+ if (
+ diffs[pointer - 1].operation == DIFF_EQUAL &&
+ diffs[pointer + 1].operation == DIFF_EQUAL
+ ) {
+ // This is a single edit surrounded by equalities.
+ let equality1 = diffs[pointer - 1].text
+ let edit = diffs[pointer].text
+ let equality2 = diffs[pointer + 1].text
+
+ // First, shift the edit as far left as possible.
+ const commonOffset = commonSuffix(equality1, edit)
+ if (commonOffset) {
+ const commonString = edit.substring(edit.length - commonOffset)
+
+ equality1 = equality1.substring(0, equality1.length - commonOffset)
+ edit = commonString + edit.substring(0, edit.length - commonOffset)
+ equality2 = commonString + equality2
+ }
+
+ // Second, step character by character right, looking for the best fit.
+ let bestEquality1 = equality1
+ let bestEdit = edit
+ let bestEquality2 = equality2
+ let bestScore =
+ diffCleanupSemanticScore(equality1, edit) +
+ diffCleanupSemanticScore(edit, equality2)
+
+ while (edit.charAt(0) === equality2.charAt(0)) {
+ equality1 += edit.charAt(0)
+ edit = edit.substring(1) + equality2.charAt(0)
+ equality2 = equality2.substring(1)
+
+ const score =
+ diffCleanupSemanticScore(equality1, edit) +
+ diffCleanupSemanticScore(edit, equality2)
+ // The >= encourages trailing rather than leading whitespace on edits.
+ if (score >= bestScore) {
+ bestScore = score
+ bestEquality1 = equality1
+ bestEdit = edit
+ bestEquality2 = equality2
+ }
+ }
+
+ if (diffs[pointer - 1].text != bestEquality1) {
+ // We have an improvement, save it back to the diff.
+ if (bestEquality1) {
+ diffs[pointer - 1].text = bestEquality1
+ } else {
+ diffs.splice(pointer - 1, 1)
+ pointer--
+ }
+
+ diffs[pointer].text = bestEdit
+
+ if (bestEquality2) {
+ diffs[pointer + 1].text = bestEquality2
+ } else {
+ diffs.splice(pointer + 1, 1)
+ pointer--
+ }
+ }
+ }
+
+ pointer++
+ }
+ }
+
+ /**
+ * Reorder and merge like edit sections. Merge equalities.
+ * Any edit section can move as long as it doesn't cross an equality.
+ *
+ * @param {!Array.} diffs Array of diff tuples.
+ */
+ private diffCleanupMerge(diffs: Diff[]) {
+ // Add a dummy entry at the end.
+ diffs.push(new Diff(DIFF_EQUAL, ''))
+
+ let pointer = 0
+ let countDelete = 0
+ let countInsert = 0
+ let textDelete = ''
+ let textInsert = ''
+
+ let commonLength
+
+ while (pointer < diffs.length) {
+ switch (diffs[pointer].operation) {
+ case DIFF_INSERT:
+ countInsert++
+ textInsert += diffs[pointer].text
+ pointer++
+ break
+ case DIFF_DELETE:
+ countDelete++
+ textDelete += diffs[pointer].text
+ pointer++
+ break
+ case DIFF_EQUAL:
+ // Upon reaching an equality, check for prior redundancies.
+ if (countDelete + countInsert > 1) {
+ if (countDelete !== 0 && countInsert !== 0) {
+ // Factor out any common prefixies.
+ commonLength = commonPrefix(textInsert, textDelete)
+
+ if (commonLength !== 0) {
+ if (
+ pointer - countDelete - countInsert > 0 &&
+ diffs[pointer - countDelete - countInsert - 1].operation ==
+ DIFF_EQUAL
+ ) {
+ diffs[
+ pointer - countDelete - countInsert - 1
+ ].text += textInsert.substring(0, commonLength)
+ } else {
+ diffs.splice(
+ 0,
+ 0,
+ new Diff(DIFF_EQUAL, textInsert.substring(0, commonLength))
+ )
+
+ pointer++
+ }
+
+ textInsert = textInsert.substring(commonLength)
+ textDelete = textDelete.substring(commonLength)
+ }
+ // Factor out any common suffixies.
+ commonLength = commonSuffix(textInsert, textDelete)
+
+ if (commonLength !== 0) {
+ diffs[pointer].text =
+ textInsert.substring(textInsert.length - commonLength) +
+ diffs[pointer].text
+ textInsert = textInsert.substring(
+ 0,
+ textInsert.length - commonLength
+ )
+ textDelete = textDelete.substring(
+ 0,
+ textDelete.length - commonLength
+ )
+ }
+ }
+
+ // Delete the offending records and add the merged ones.
+ pointer -= countDelete + countInsert
+
+ diffs.splice(pointer, countDelete + countInsert)
+
+ if (textDelete.length !== 0) {
+ diffs.splice(pointer, 0, new Diff(DIFF_DELETE, textDelete, true))
+
+ pointer++
+ }
+
+ if (textInsert.length !== 0) {
+ diffs.splice(pointer, 0, new Diff(DIFF_INSERT, textInsert, true))
+
+ pointer++
+ }
+
+ pointer++
+ } else if (
+ pointer !== 0 &&
+ diffs[pointer - 1].operation == DIFF_EQUAL
+ ) {
+ // Merge this equality with the previous one.
+ diffs[pointer - 1].text += diffs[pointer].text
+ diffs.splice(pointer, 1)
+ } else {
+ pointer++
+ }
+
+ countInsert = 0
+ countDelete = 0
+ textDelete = ''
+ textInsert = ''
+
+ break
+ }
+ }
+ if (diffs[diffs.length - 1].text === '') {
+ diffs.pop() // Remove the dummy entry at the end.
+ }
+
+ // Second pass: look for single edits surrounded on both sides by equalities
+ // which can be shifted sideways to eliminate an equality.
+ // e.g: ABAC -> ABAC
+ let changes = false
+
+ pointer = 1
+
+ // Intentionally ignore the first and last element (don't need checking).
+ while (pointer < diffs.length - 1) {
+ if (
+ diffs[pointer - 1].operation == DIFF_EQUAL &&
+ diffs[pointer + 1].operation == DIFF_EQUAL
+ ) {
+ // This is a single edit surrounded by equalities.
+ if (
+ diffs[pointer].text.substring(
+ diffs[pointer].text.length - diffs[pointer - 1].text.length
+ ) == diffs[pointer - 1].text
+ ) {
+ // Shift the edit over the previous equality.
+ diffs[pointer].text =
+ diffs[pointer - 1].text +
+ diffs[pointer].text.substring(
+ 0,
+ diffs[pointer].text.length - diffs[pointer - 1].text.length
+ )
+ diffs[pointer + 1].text =
+ diffs[pointer - 1].text + diffs[pointer + 1].text
+ diffs.splice(pointer - 1, 1)
+
+ changes = true
+ } else if (
+ diffs[pointer].text.substring(0, diffs[pointer + 1].text.length) ==
+ diffs[pointer + 1].text
+ ) {
+ // Shift the edit over the next equality.
+ diffs[pointer - 1].text += diffs[pointer + 1].text
+ diffs[pointer].text =
+ diffs[pointer].text.substring(diffs[pointer + 1].text.length) +
+ diffs[pointer + 1].text
+ diffs.splice(pointer + 1, 1)
+
+ changes = true
+ }
+ }
+
+ pointer++
+ }
+ // If shifts were made, the diff needs reordering and another shift sweep.
+ if (changes) {
+ this.diffCleanupMerge(diffs)
+ }
+ }
+
+ /**
+ * Locate the best instance of 'pattern' in 'text' near 'loc'.
+ *
+ * @param {string} text The text to search.
+ * @param {string} pattern The pattern to search for.
+ * @param {number} loc The location to search around.
+ *
+ * @return {number} Best match index or -1.
+ */
+ private matchMain(text: string, pattern: string, loc: number): number {
+ // Check for null inputs.
+ if (text == null || pattern == null || loc == null) {
+ throw new Error('Null input. (matchMain)')
+ }
+
+ loc = Math.max(0, Math.min(loc, text.length))
+
+ if (text == pattern) {
+ // Shortcut (potentially not guaranteed by the algorithm)
+ return 0
+ } else if (!text.length) {
+ // Nothing to match.
+ return -1
+ } else if (text.substring(loc, loc + pattern.length) == pattern) {
+ // Perfect match at the perfect spot! (Includes case of null pattern)
+ return loc
+ }
+
+ // Do a fuzzy compare.
+ return this.matchBiTap(text, pattern, loc)
+ }
+
+ /**
+ * Locate the best instance of 'pattern' in 'text' near 'loc' using the
+ * Bitap algorithm.
+ *
+ * @param {string} text The text to search.
+ * @param {string} pattern The pattern to search for.
+ * @param {number} loc The location to search around.
+ *
+ * @return {number} Best match index or -1.
+ */
+ private matchBiTap(text: string, pattern: string, loc: number): number {
+ if (pattern.length > this.MatchMaxBits) {
+ throw new Error('Pattern too long for this browser.')
+ }
+
+ // Initialise the alphabet.
+ const s = matchAlphabet(pattern)
+ const dmp = this // 'this' becomes 'window' in a closure.
+
+ /**
+ * Compute and return the score for a match with e errors and x location.
+ * Accesses loc and pattern through being a closure.
+ *
+ * @param {number} e Number of errors in match.
+ * @param {number} x Location of match.
+ *
+ * @return {number} Overall score for match (0.0 = good, 1.0 = bad).
+ *
+ * @private
+ */
+ function matchBiTapScore(e: number, x: number): number {
+ const accuracy = e / pattern.length
+ const proximity = Math.abs(loc - x)
+
+ if (!dmp.MatchDistance) {
+ // Dodge divide by zero error.
+ return proximity ? 1.0 : accuracy
+ }
+
+ return accuracy + proximity / dmp.MatchDistance
+ }
+
+ // Highest score beyond which we give up.
+ let scoreThreshold = this.MatchThreshold
+ // Is there a nearby exact match? (speedup)
+ let bestLoc = text.indexOf(pattern, loc)
+
+ if (bestLoc != -1) {
+ scoreThreshold = Math.min(matchBiTapScore(0, bestLoc), scoreThreshold)
+
+ // What about in the other direction? (speedup)
+ bestLoc = text.lastIndexOf(pattern, loc + pattern.length)
+
+ if (bestLoc != -1) {
+ scoreThreshold = Math.min(matchBiTapScore(0, bestLoc), scoreThreshold)
+ }
+ }
+
+ // Initialise the bit arrays.
+ const matchMask = 1 << (pattern.length - 1)
+
+ bestLoc = -1
+
+ let binMin
+ let binMid
+
+ let binMax = pattern.length + text.length
+ let lastRd: number[] = []
+
+ for (let d = 0; d < pattern.length; d++) {
+ // Scan for the best match; each iteration allows for one more error.
+ // Run a binary search to determine how far from 'loc' we can stray at this
+ // error level.
+ binMin = 0
+ binMid = binMax
+
+ while (binMin < binMid) {
+ if (matchBiTapScore(d, loc + binMid) <= scoreThreshold) {
+ binMin = binMid
+ } else {
+ binMax = binMid
+ }
+
+ binMid = Math.floor((binMax - binMin) / 2 + binMin)
+ }
+
+ // Use the result from this iteration as the maximum for the next.
+ binMax = binMid
+
+ let start = Math.max(1, loc - binMid + 1)
+
+ const finish = Math.min(loc + binMid, text.length) + pattern.length
+ const rd = Array(finish + 2)
+
+ rd[finish + 1] = (1 << d) - 1
+
+ for (let j = finish; j >= start; j--) {
+ // The alphabet (s) is a sparse hash, so the following line generates
+ // warnings.
+ const charMatch = s[text.charAt(j - 1)]
+
+ if (d === 0) {
+ // First pass: exact match.
+ rd[j] = ((rd[j + 1] << 1) | 1) & charMatch
+ } else {
+ // Subsequent passes: fuzzy match.
+ rd[j] =
+ (((rd[j + 1] << 1) | 1) & charMatch) |
+ (((lastRd[j + 1] | lastRd[j]) << 1) | 1) |
+ lastRd[j + 1]
+ }
+
+ if (rd[j] & matchMask) {
+ const score = matchBiTapScore(d, j - 1)
+ // This match will almost certainly be better than any existing match.
+ // But check anyway.
+ if (score <= scoreThreshold) {
+ // Told you so.
+ scoreThreshold = score
+ bestLoc = j - 1
+
+ if (bestLoc > loc) {
+ // When passing loc, don't exceed our current distance from loc.
+ start = Math.max(1, 2 * loc - bestLoc)
+ } else {
+ // Already passed loc, downhill from here on in.
+ break
+ }
+ }
+ }
+ }
+ // No hope for a (better) match at greater error levels.
+ if (matchBiTapScore(d + 1, loc) > scoreThreshold) {
+ break
+ }
+
+ lastRd = rd
+ }
+
+ return bestLoc
+ }
+
+ /**
+ * Compute a list of patches to turn text1 into text2.
+ *
+ * @param {!Array.} diffs Array of diff tuples
+ *
+ * @return {!Array.} Array of Patch objects.
+ */
+ patchMake(diffs: Diff[]): PatchObject[] {
+ const text1 = diffText(diffs, DIFF_INSERT)
+
+ if (diffs.length === 0) {
+ return [] // Get rid of the null case.
+ }
+
+ const patches: PatchObject[] = []
+ let patch = new PatchObject()
+
+ let patchDiffLength = 0 // Keeping our own length const is faster in JS.
+ let charCount1 = 0 // Number of characters into the text1 string.
+ let charCount2 = 0 // Number of characters into the text2 string.
+
+ // Start with text1 (prePatchText) and apply the diffs until we arrive at
+ // text2 (postPatchText). We recreate the patches one by one to determine
+ // context info.
+ let prePatchText = text1
+ let postPatchText = text1
+
+ for (let x = 0; x < diffs.length; x++) {
+ const diffType = diffs[x].operation
+ const diffText = diffs[x].text
+
+ if (!patchDiffLength && diffType !== DIFF_EQUAL) {
+ // A new patch starts here.
+ patch.start1 = charCount1
+ patch.start2 = charCount2
+ }
+
+ switch (diffType) {
+ case DIFF_INSERT:
+ patch.diffs[patchDiffLength++] = diffs[x]
+ patch.length2 += diffText.length
+ postPatchText =
+ postPatchText.substring(0, charCount2) +
+ diffText +
+ postPatchText.substring(charCount2)
+ break
+ case DIFF_DELETE:
+ patch.length1 += diffText.length
+ patch.diffs[patchDiffLength++] = diffs[x]
+ postPatchText =
+ postPatchText.substring(0, charCount2) +
+ postPatchText.substring(charCount2 + diffText.length)
+ break
+ case DIFF_EQUAL:
+ if (
+ diffText.length <= 2 * this.PatchMargin &&
+ patchDiffLength &&
+ diffs.length != x + 1
+ ) {
+ // Small equality inside a patch.
+ patch.diffs[patchDiffLength++] = diffs[x]
+ patch.length1 += diffText.length
+ patch.length2 += diffText.length
+ } else if (diffText.length >= 2 * this.PatchMargin) {
+ // Time for a new patch.
+ if (patchDiffLength) {
+ this.patchAddContext(patch, prePatchText)
+
+ patches.push(patch)
+ patch = new PatchObject()
+ patchDiffLength = 0
+ // Unlike Unidiff, our patch lists have a rolling context.
+ // https://github.com/google/diff-match-patch/wiki/Unidiff
+ // Update prepatch text & pos to reflect the application of the
+ // just completed patch.
+ prePatchText = postPatchText
+ charCount1 = charCount2
+ }
+ }
+ break
+ }
+
+ // Update the current character count.
+ if (diffType !== DIFF_INSERT) {
+ charCount1 += diffText.length
+ }
+
+ if (diffType !== DIFF_DELETE) {
+ charCount2 += diffText.length
+ }
+ }
+
+ // Pick up the leftover patch if not empty.
+ if (patchDiffLength) {
+ this.patchAddContext(patch, prePatchText)
+
+ patches.push(patch)
+ }
+
+ return patches
+ }
+
+ /**
+ * Merge a set of patches onto the text. Return a patched text, as well
+ * as a list of true/false values indicating which patches were applied.
+ *
+ * @param {!Array.} patches Array of Patch objects.
+ * @param {string} text Old text.
+ *
+ * @return {!Array.>} Two element Array, containing the
+ * new text and an array of boolean values.
+ */
+ patchApply(patches: PatchObject[], text: string): Array {
+ if (patches.length == 0) {
+ return [text, []]
+ }
+
+ // Deep copy the patches so that no changes are made to originals.
+ patches = patchDeepObjectCopy(patches)
+
+ const nullPadding = this.patchAddPadding(patches)
+
+ text = nullPadding + text + nullPadding
+
+ this.patchSplitMax(patches)
+
+ // delta keeps track of the offset between the expected and actual location
+ // of the previous patch. If there are patches expected at positions 10 and
+ // 20, but the first patch was found at 12, delta is 2 and the second patch
+ // has an effective expected position of 22.
+ let delta = 0
+ const results: boolean[] = []
+
+ for (let x = 0; x < patches.length; x++) {
+ const expectedLoc = patches[x].start2! + delta
+ const text1 = diffText(patches[x].diffs, DIFF_INSERT)
+
+ let startLoc
+ let endLoc = -1
+
+ if (text1.length > this.MatchMaxBits) {
+ // patchSplitMax will only provide an oversized pattern in the case of
+ // a monster delete.
+ startLoc = this.matchMain(
+ text,
+ text1.substring(0, this.MatchMaxBits),
+ expectedLoc
+ )
+
+ if (startLoc != -1) {
+ endLoc = this.matchMain(
+ text,
+ text1.substring(text1.length - this.MatchMaxBits),
+ expectedLoc + text1.length - this.MatchMaxBits
+ )
+
+ if (endLoc == -1 || startLoc >= endLoc) {
+ // Can't find valid trailing context. Drop this patch.
+ startLoc = -1
+ }
+ }
+ } else {
+ startLoc = this.matchMain(text, text1, expectedLoc)
+ }
+
+ if (startLoc == -1) {
+ // No match found. :(
+ results[x] = false
+ // Subtract the delta for this failed patch from subsequent patches.
+ delta -= patches[x].length2 - patches[x].length1
+ } else {
+ // Found a match. :)
+ results[x] = true
+ delta = startLoc - expectedLoc
+
+ let text2
+
+ if (endLoc == -1) {
+ text2 = text.substring(startLoc, startLoc + text1.length)
+ } else {
+ text2 = text.substring(startLoc, endLoc + this.MatchMaxBits)
+ }
+
+ if (text1 == text2) {
+ // Perfect match, just shove the replacement text in.
+ text =
+ text.substring(0, startLoc) +
+ diffText(patches[x].diffs, DIFF_DELETE) +
+ text.substring(startLoc + text1.length)
+ } else {
+ // Imperfect match. Run a diff to get a framework of equivalent
+ // indices.
+ const diffs = this.diff(text1, text2, false)
+
+ if (
+ text1.length > this.MatchMaxBits &&
+ levenshtein(diffs) / text1.length > this.PatchDeleteThreshold
+ ) {
+ // The end points match, but the content is unacceptably bad.
+ results[x] = false
+ } else {
+ this.cleanupSemanticLossless(diffs)
+
+ let index1 = 0
+ let index2 = 0
+
+ for (let y = 0; y < patches[x].diffs.length; y++) {
+ const mod = patches[x].diffs[y]
+
+ if (mod.operation !== DIFF_EQUAL) {
+ index2 = diffXIndex(diffs, index1)
+ }
+
+ if (mod.operation === DIFF_INSERT) {
+ // Insertion
+ text =
+ text.substring(0, startLoc + index2) +
+ mod.text +
+ text.substring(startLoc + index2)
+ } else if (mod.operation === DIFF_DELETE) {
+ // Deletion
+ text =
+ text.substring(0, startLoc + index2) +
+ text.substring(
+ startLoc + diffXIndex(diffs, index1 + mod.text.length)
+ )
+ }
+
+ if (mod.operation !== DIFF_DELETE) {
+ index1 += mod.text.length
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Strip the padding off.
+ text = text.substring(nullPadding.length, text.length - nullPadding.length)
+
+ return [text, results]
+ }
+
+ /**
+ * Add some padding on text start and end so that edges can match something.
+ * Intended to be called only from within patchApply.
+ * @param {!Array.} patches Array of Patch objects.
+ * @return {string} The padding string added to each side.
+ */
+ private patchAddPadding(patches: PatchObject[]): string {
+ const paddingLength = this.PatchMargin
+ let nullPadding = ''
+
+ for (let x = 1; x <= paddingLength; x++) {
+ nullPadding += String.fromCharCode(x)
+ }
+
+ // Bump all the patches forward.
+ for (let x = 0; x < patches.length; x++) {
+ patches[x].start1! += paddingLength
+ patches[x].start2! += paddingLength
+ }
+
+ // Add some padding on start of first diff.
+ let patch = patches[0]
+ let diffs = patch.diffs
+
+ if (diffs.length == 0 || diffs[0].operation != DIFF_EQUAL) {
+ // Add nullPadding equality.
+ diffs.unshift(new Diff(DIFF_EQUAL, nullPadding))
+
+ patch.start1! -= paddingLength // Should be 0.
+ patch.start2! -= paddingLength // Should be 0.
+ patch.length1 += paddingLength
+ patch.length2 += paddingLength
+ } else if (paddingLength > diffs[0].text.length) {
+ // Grow first equality.
+ const extraLength = paddingLength - diffs[0].text.length
+
+ diffs[0].text =
+ nullPadding.substring(diffs[0].text.length) + diffs[0].text
+ patch.start1! -= extraLength
+ patch.start2! -= extraLength
+ patch.length1 += extraLength
+ patch.length2 += extraLength
+ }
+
+ // Add some padding on end of last diff.
+ patch = patches[patches.length - 1]
+ diffs = patch.diffs
+
+ if (diffs.length == 0 || diffs[diffs.length - 1].operation != DIFF_EQUAL) {
+ // Add nullPadding equality.
+ diffs.push(new Diff(DIFF_EQUAL, nullPadding))
+
+ patch.length1 += paddingLength
+ patch.length2 += paddingLength
+ } else if (paddingLength > diffs[diffs.length - 1].text.length) {
+ // Grow last equality.
+ const extraLength = paddingLength - diffs[diffs.length - 1].text.length
+
+ diffs[diffs.length - 1].text += nullPadding.substring(0, extraLength)
+
+ patch.length1 += extraLength
+ patch.length2 += extraLength
+ }
+
+ return nullPadding
+ }
+
+ /**
+ * Look through the patches and break up any which are longer than the maximum
+ * limit of the match algorithm.
+ * Intended to be called only from within patchApply.
+ *
+ * @param {!Array.} patches Array of Patch objects.
+ */
+ private patchSplitMax(patches: PatchObject[]) {
+ const patchSize = this.MatchMaxBits
+
+ for (let x = 0; x < patches.length; x++) {
+ if (patches[x].length1 <= patchSize) {
+ continue
+ }
+
+ const bigPatch = patches[x]
+
+ // Remove the big old patch.
+ patches.splice(x--, 1)
+
+ let start1 = Number(bigPatch.start1)
+ let start2 = Number(bigPatch.start2)
+ let preContext = ''
+
+ while (bigPatch.diffs.length !== 0) {
+ // Create one of several smaller patches.
+ const patch = new PatchObject()
+ let empty = true
+
+ patch.start1 = start1! - preContext.length
+ patch.start2 = start2! - preContext.length
+
+ if (preContext !== '') {
+ patch.length1 = patch.length2 = preContext.length
+ patch.diffs.push(new Diff(DIFF_EQUAL, preContext))
+ }
+
+ while (
+ bigPatch.diffs.length !== 0 &&
+ patch.length1 < patchSize - this.PatchMargin
+ ) {
+ const diffType = bigPatch.diffs[0].operation
+ let diffText = bigPatch.diffs[0].text
+
+ if (diffType === DIFF_INSERT) {
+ // Insertions are harmless.
+ patch.length2 += diffText.length
+ start2 += diffText.length
+ patch.diffs.push(bigPatch.diffs.shift()!)
+ empty = false
+ } else if (
+ diffType === DIFF_DELETE &&
+ patch.diffs.length == 1 &&
+ patch.diffs[0].operation == DIFF_EQUAL &&
+ diffText.length > 2 * patchSize
+ ) {
+ // This is a large deletion. Let it pass in one chunk.
+ patch.length1 += diffText.length
+ start1 += diffText.length
+ empty = false
+ patch.diffs.push(new Diff(diffType, diffText))
+ bigPatch.diffs.shift()
+ } else {
+ // Deletion or equality. Only take as much as we can stomach.
+ diffText = diffText.substring(
+ 0,
+ patchSize - patch.length1 - this.PatchMargin
+ )
+
+ patch.length1 += diffText.length
+ start1 += diffText.length
+
+ if (diffType === DIFF_EQUAL) {
+ patch.length2 += diffText.length
+ start2 += diffText.length
+ } else {
+ empty = false
+ }
+
+ patch.diffs.push(new Diff(diffType, diffText))
+
+ if (diffText == bigPatch.diffs[0].text) {
+ bigPatch.diffs.shift()
+ } else {
+ bigPatch.diffs[0].text = bigPatch.diffs[0].text.substring(
+ diffText.length
+ )
+ }
+ }
+ }
+
+ // Compute the head context for the next patch.
+ preContext = diffText(patch.diffs, DIFF_DELETE)
+ preContext = preContext.substring(preContext.length - this.PatchMargin)
+
+ // Append the end context for this patch.
+ const postContext = diffText(bigPatch.diffs, DIFF_INSERT).substring(
+ 0,
+ this.PatchMargin
+ )
+
+ if (postContext !== '') {
+ patch.length1 += postContext.length
+ patch.length2 += postContext.length
+
+ if (
+ patch.diffs.length !== 0 &&
+ patch.diffs[patch.diffs.length - 1].operation === DIFF_EQUAL
+ ) {
+ patch.diffs[patch.diffs.length - 1].text += postContext
+ } else {
+ patch.diffs.push(new Diff(DIFF_EQUAL, postContext))
+ }
+ }
+
+ if (!empty) {
+ patches.splice(++x, 0, patch)
+ }
+ }
+ }
+ }
+
+ /**
+ * Increase the context until it is unique,
+ * but don't let the pattern expand beyond MatchMaxBits.
+ * @param {!PatchObject} patch The patch to grow.
+ * @param {string} text Source text.
+ * @private
+ */
+ private patchAddContext(patch: PatchObject, text: string) {
+ if (text.length == 0) {
+ return
+ }
+
+ if (patch.start2 === null) {
+ throw Error('patch not initialized')
+ }
+
+ let pattern = text.substring(patch.start2, patch.start2 + patch.length1)
+ let padding = 0
+
+ // Look for the first and last matches of pattern in text. If two different
+ // matches are found, increase the pattern length.
+ while (
+ text.indexOf(pattern) != text.lastIndexOf(pattern) &&
+ pattern.length < this.MatchMaxBits - this.PatchMargin - this.PatchMargin
+ ) {
+ padding += this.PatchMargin
+ pattern = text.substring(
+ patch.start2 - padding,
+ patch.start2 + patch.length1 + padding
+ )
+ }
+ // Add one chunk for good luck.
+ padding += this.PatchMargin
+
+ // Add the prefix.
+ const prefix = text.substring(patch.start2 - padding, patch.start2)
+
+ if (prefix) {
+ patch.diffs.unshift(new Diff(DIFF_EQUAL, prefix))
+ }
+
+ // Add the suffix.
+ const suffix = text.substring(
+ patch.start2 + patch.length1,
+ patch.start2 + patch.length1 + padding
+ )
+
+ if (suffix) {
+ patch.diffs.push(new Diff(DIFF_EQUAL, suffix))
+ }
+
+ // Roll back the start points.
+ patch.start1! -= prefix.length
+ patch.start2 -= prefix.length
+ // Extend the lengths.
+ patch.length1 += prefix.length + suffix.length
+ patch.length2 += prefix.length + suffix.length
+ }
+}
diff --git a/src/diff/diff-text.ts b/src/diff/diff-text.ts
new file mode 100644
index 00000000..ad4da8aa
--- /dev/null
+++ b/src/diff/diff-text.ts
@@ -0,0 +1,40 @@
+/**
+ * Diff Match and Patch
+ * Copyright 2018 The diff-match-patch Authors.
+ * https://github.com/google/diff-match-patch
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @author fraser@google.com (Neil Fraser)
+ */
+
+import {Diff} from './diff'
+
+/**
+ * Compute and return the source text (all equalities and deletions).
+ *
+ * @param {!Array.} diffs Array of diff tuples.
+ *
+ * @return {string} Source text.
+ */
+export const diffText = (diffs: Diff[], type: number): string => {
+ const text: string[] = []
+
+ for (let x = 0; x < diffs.length; x++) {
+ if (diffs[x].operation !== type) {
+ text[x] = diffs[x].text
+ }
+ }
+
+ return text.join('')
+}
diff --git a/src/diff/diff-x-index.ts b/src/diff/diff-x-index.ts
new file mode 100644
index 00000000..5d3409b3
--- /dev/null
+++ b/src/diff/diff-x-index.ts
@@ -0,0 +1,68 @@
+/**
+ * Diff Match and Patch
+ * Copyright 2018 The diff-match-patch Authors.
+ * https://github.com/google/diff-match-patch
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @author fraser@google.com (Neil Fraser)
+ */
+
+import {Diff} from './diff'
+import {DIFF_DELETE, DIFF_INSERT} from '../interfaces'
+
+/**
+ * loc is a location in text1, compute and return the equivalent location in
+ * text2.
+ * e.g. 'The cat' vs 'The big cat', 1->1, 5->8
+ *
+ * @param {!Array.} diffs Array of diff tuples.
+ * @param {number} loc Location within text1.
+ *
+ * @return {number} Location within text2.
+ */
+export const diffXIndex = (diffs: Diff[], loc: number): number => {
+ let chars1 = 0
+ let chars2 = 0
+ let lastChars1 = 0
+ let lastChars2 = 0
+ let x
+
+ for (x = 0; x < diffs.length; x++) {
+ if (diffs[x].operation !== DIFF_INSERT) {
+ // Equality or deletion.
+ chars1 += diffs[x].text.length
+ }
+
+ if (diffs[x].operation !== DIFF_DELETE) {
+ // Equality or insertion.
+ chars2 += diffs[x].text.length
+ }
+
+ if (chars1 > loc) {
+ // Overshot the location.
+ break
+ }
+
+ lastChars1 = chars1
+ lastChars2 = chars2
+ }
+
+ // Was the location was deleted?
+ if (diffs.length != x && diffs[x].operation === DIFF_DELETE) {
+ return lastChars2
+ }
+
+ // Add the remaining character length.
+ return lastChars2 + (loc - lastChars1)
+}
diff --git a/src/diff/diff.ts b/src/diff/diff.ts
new file mode 100644
index 00000000..3562e41a
--- /dev/null
+++ b/src/diff/diff.ts
@@ -0,0 +1,85 @@
+/**
+ * Diff Match and Patch
+ * Copyright 2018 The diff-match-patch Authors.
+ * https://github.com/google/diff-match-patch
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @author fraser@google.com (Neil Fraser)
+ */
+
+/**
+ * The data structure representing a diff is an array of tuples:
+ * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]
+ * which means: delete 'Hello', add 'Goodbye' and keep ' world.'
+ */
+export class Diff {
+ 0: number
+ 1: string
+ 2: boolean
+
+ /**
+ * Class representing one diff tuple.
+ * Attempts to look like a two-element array (which is what this used to be).
+ *
+ * @param {number} op Operation, one of: DIFF_DELETE, DIFF_INSERT, DIFF_EQUAL.
+ * @param {string} text Text to be deleted, inserted, or retained.
+ * @param {boolean} bind
+ */
+ constructor(op: number, text: string, bind = false) {
+ this[0] = op
+ this[1] = text
+ this[2] = bind
+ }
+
+ /**
+ * Create a Diff object from a two-element array.
+ *
+ * @return {Diff} new Diff object.
+ */
+ static fromArray(diffArray: [number, string, boolean]): Diff {
+ return new Diff(diffArray[0], diffArray[1], diffArray[2] || false)
+ }
+
+ get operation(): number {
+ return this[0]
+ }
+
+ set operation(op: number) {
+ this[0] = op
+ }
+
+ get text(): string {
+ return this[1]
+ }
+
+ set text(text: string) {
+ this[1] = text
+ }
+
+ get bind(): boolean {
+ return this[2]
+ }
+
+ set bind(id: boolean) {
+ this[2] = id
+ }
+
+ /**
+ * Emulate the output of a two-element array.
+ * @return {string} Diff operation as a string.
+ */
+ toString() {
+ return `${this.operation},${this.text}`
+ }
+}
diff --git a/src/diff/levenshtein.ts b/src/diff/levenshtein.ts
new file mode 100644
index 00000000..88bbaeea
--- /dev/null
+++ b/src/diff/levenshtein.ts
@@ -0,0 +1,62 @@
+/**
+ * Diff Match and Patch
+ * Copyright 2018 The diff-match-patch Authors.
+ * https://github.com/google/diff-match-patch
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @author fraser@google.com (Neil Fraser)
+ */
+
+import {Diff} from './diff'
+import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT} from '../interfaces'
+
+/**
+ * Compute the Levenshtein distance; the number of inserted, deleted or
+ * substituted characters.
+ *
+ * @internal
+ *
+ * @param {!Array.} diffs Array of diff tuples.
+ *
+ * @return {number} Number of changes.
+ */
+export const levenshtein = (diffs: Diff[]): number => {
+ let levenshtein = 0
+ let insertions = 0
+ let deletions = 0
+
+ for (let x = 0; x < diffs.length; x++) {
+ const op = diffs[x].operation
+ const data = diffs[x].text
+
+ switch (op) {
+ case DIFF_INSERT:
+ insertions += data.length
+ break
+ case DIFF_DELETE:
+ deletions += data.length
+ break
+ case DIFF_EQUAL:
+ // A deletion and an insertion is one substitution.
+ levenshtein += Math.max(insertions, deletions)
+ insertions = 0
+ deletions = 0
+ break
+ }
+ }
+
+ levenshtein += Math.max(insertions, deletions)
+
+ return levenshtein
+}
diff --git a/src/diff/match-alphabet.ts b/src/diff/match-alphabet.ts
new file mode 100644
index 00000000..32991306
--- /dev/null
+++ b/src/diff/match-alphabet.ts
@@ -0,0 +1,40 @@
+/**
+ * Diff Match and Patch
+ * Copyright 2018 The diff-match-patch Authors.
+ * https://github.com/google/diff-match-patch
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @author fraser@google.com (Neil Fraser)
+ */
+
+/**
+ * Initialise the alphabet for the Bitap algorithm.
+ *
+ * @param {string} pattern The text to encode.
+ *
+ * @return {!Object} Hash of character locations.
+ */
+export const matchAlphabet = (pattern: string): {[key: string]: number} => {
+ const s: {[key: string]: number} = {}
+
+ for (let i = 0; i < pattern.length; i++) {
+ s[pattern.charAt(i)] = 0
+ }
+
+ for (let i = 0; i < pattern.length; i++) {
+ s[pattern.charAt(i)] |= 1 << (pattern.length - i - 1)
+ }
+
+ return s
+}
diff --git a/src/diff/patch-deep-object-copy.ts b/src/diff/patch-deep-object-copy.ts
new file mode 100644
index 00000000..f2538e11
--- /dev/null
+++ b/src/diff/patch-deep-object-copy.ts
@@ -0,0 +1,56 @@
+/**
+ * Diff Match and Patch
+ * Copyright 2018 The diff-match-patch Authors.
+ * https://github.com/google/diff-match-patch
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @author fraser@google.com (Neil Fraser)
+ */
+import {PatchObject} from './patch-object'
+import {Diff} from './diff'
+
+/**
+ * Given an array of patches, return another array that is identical.
+ *
+ * @param {!Array.} patches Array of Patch objects.
+ *
+ * @return {!Array.} Array of Patch objects.
+ */
+export const patchDeepObjectCopy = (patches: PatchObject[]): PatchObject[] => {
+ // Making deep copies is hard in JavaScript.
+ const patchesCopy: PatchObject[] = []
+
+ for (let x = 0; x < patches.length; x++) {
+ const patch = patches[x]
+ const patchCopy = new PatchObject()
+
+ patchCopy.diffs = []
+
+ for (let y = 0; y < patch.diffs.length; y++) {
+ patchCopy.diffs[y] = new Diff(
+ patch.diffs[y].operation,
+ patch.diffs[y].text
+ )
+ }
+
+ patchCopy.start1 = patch.start1
+ patchCopy.start2 = patch.start2
+ patchCopy.length1 = patch.length1
+ patchCopy.length2 = patch.length2
+
+ patchesCopy[x] = patchCopy
+ }
+
+ return patchesCopy
+}
diff --git a/src/diff/patch-object.ts b/src/diff/patch-object.ts
new file mode 100644
index 00000000..eb333271
--- /dev/null
+++ b/src/diff/patch-object.ts
@@ -0,0 +1,92 @@
+/**
+ * Diff Match and Patch
+ * Copyright 2018 The diff-match-patch Authors.
+ * https://github.com/google/diff-match-patch
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @author fraser@google.com (Neil Fraser)
+ */
+
+import {Diff} from './diff'
+import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT} from '../interfaces'
+
+export class PatchObject {
+ diffs: Diff[]
+ start1: number | null
+ start2: number | null
+ length1: number
+ length2: number
+
+ constructor() {
+ /** @type {!Array.} */
+ this.diffs = []
+ /** @type {?number} */
+ this.start1 = null
+ /** @type {?number} */
+ this.start2 = null
+ /** @type {number} */
+ this.length1 = 0
+ /** @type {number} */
+ this.length2 = 0
+ }
+
+ /**
+ * Emulate GNU diff's format.
+ * Header: @@ -382,8 +481,9 @@
+ * Indices are printed as 1-based, not 0-based.
+ * @return {string} The GNU diff string.
+ */
+ toString() {
+ let coords1
+ let coords2
+
+ if (this.length1 === 0) {
+ coords1 = `${this.start1},0`
+ } else if (this.length1 == 1) {
+ coords1 = this.start1! + 1
+ } else {
+ coords1 = `${this.start1! + 1},${this.length1}`
+ }
+
+ if (this.length2 === 0) {
+ coords2 = `${this.start2!},0`
+ } else if (this.length2 == 1) {
+ coords2 = this.start2! + 1
+ } else {
+ coords2 = `${this.start2! + 1},${this.length2}`
+ }
+
+ const text = [`@@ -${coords1} +${coords2} @@\n`]
+ let op
+
+ // Escape the body of the patch with %xx notation.
+ for (let x = 0; x < this.diffs.length; x++) {
+ switch (this.diffs[x].operation) {
+ case DIFF_INSERT:
+ op = '+'
+ break
+ case DIFF_DELETE:
+ op = '-'
+ break
+ case DIFF_EQUAL:
+ op = ' '
+ break
+ }
+
+ text[x + 1] = `${op + encodeURI(this.diffs[x].text)}\n`
+ }
+
+ return text.join('').replace(/%20/g, ' ')
+ }
+}
diff --git a/src/git-auth-helper.ts b/src/git-auth-helper.ts
index 64639e9f..89f1b3ec 100644
--- a/src/git-auth-helper.ts
+++ b/src/git-auth-helper.ts
@@ -2,14 +2,14 @@ import * as assert from 'assert'
import * as core from '@actions/core'
import * as coreCommand from '@actions/core/lib/command'
import * as exec from '@actions/exec'
-import * as fs from 'fs'
-import * as io from '@actions/io'
+import fs from 'fs-extra'
import * as os from 'os'
import * as path from 'path'
import {v4 as uuidv4} from 'uuid'
import {URL} from 'url'
import {IGitCommandManager, ISettings} from './interfaces'
import * as stateHelper from './state-helper'
+import which from 'which'
const IS_WINDOWS = process.platform === 'win32'
const SSH_COMMAND_KEY = 'core.sshCommand'
@@ -92,7 +92,7 @@ export class GitAuthHelper {
// Remove inherited permissions on Windows
if (IS_WINDOWS) {
- const icacls = await io.which('icacls.exe')
+ const icacls = which.sync('icacls.exe')
await exec.exec(
`"${icacls}" "${this.sshKeyPath}" /grant:r "${process.env['USERDOMAIN']}\\${process.env['USERNAME']}:F"`
@@ -139,7 +139,7 @@ export class GitAuthHelper {
await fs.promises.writeFile(this.sshKnownHostsPath, knownHosts)
// Configure GIT_SSH_COMMAND
- const sshPath = await io.which('ssh', true)
+ const sshPath = which.sync('ssh')
this.sshCommand = `"${sshPath}" -i "$RUNNER_TEMP/${path.basename(
this.sshKeyPath
@@ -219,7 +219,7 @@ export class GitAuthHelper {
const keyPath = this.sshKeyPath || stateHelper.SshKeyPath
if (keyPath) {
try {
- await io.rmRF(keyPath)
+ await fs.remove(keyPath)
} catch (err) {
core.debug(err.message)
core.warning(`Failed to remove SSH key '${keyPath}'`)
@@ -231,7 +231,7 @@ export class GitAuthHelper {
this.sshKnownHostsPath || stateHelper.SshKnownHostsPath
if (knownHostsPath) {
try {
- await io.rmRF(knownHostsPath)
+ await fs.remove(knownHostsPath)
} catch {
// Intentionally empty
}
diff --git a/src/git-command-manager.ts b/src/git-command-manager.ts
index 3ed779b1..8f178ef3 100644
--- a/src/git-command-manager.ts
+++ b/src/git-command-manager.ts
@@ -1,7 +1,7 @@
import {GitVersion} from './git-version'
import * as core from '@actions/core'
import * as exec from '@actions/exec'
-import * as io from '@actions/io'
+import which from 'which'
import fs from 'fs-extra'
import path from 'path'
import {RetryHelper} from './retry-helper'
@@ -47,7 +47,7 @@ export class GitCommandManager implements IGitCommandManager {
workingDirectory: string
): Promise {
this.workingDirectory = workingDirectory
- this.gitPath = await io.which('git', true)
+ this.gitPath = which.sync('git')
// Git version
core.debug('Getting git version')
diff --git a/src/git-source-provider.ts b/src/git-source-provider.ts
index 49b29185..77bfce57 100644
--- a/src/git-source-provider.ts
+++ b/src/git-source-provider.ts
@@ -1,5 +1,4 @@
import * as core from '@actions/core'
-import * as io from '@actions/io'
import * as path from 'path'
import fs from 'fs-extra'
import {IGitCommandManager, IGithubManager, ISettings} from './interfaces'
@@ -21,7 +20,7 @@ export async function getSource(
// Remove conflicting file path
if (fs.existsSync(repositoryPath)) {
- await io.rmRF(repositoryPath)
+ await fs.remove(repositoryPath)
}
// Create directory
@@ -30,7 +29,7 @@ export async function getSource(
if (!fs.existsSync(repositoryPath)) {
isExisting = false
- await io.mkdirP(repositoryPath)
+ await fs.mkdirp(repositoryPath)
}
// Git command manager
@@ -43,7 +42,7 @@ export async function getSource(
core.info(`Deleting the contents of '${repositoryPath}'`)
for (const file of await fs.promises.readdir(repositoryPath)) {
- await io.rmRF(path.join(repositoryPath, file))
+ await fs.remove(path.join(repositoryPath, file))
}
}
diff --git a/src/github-action-cleanup.ts b/src/github-action-cleanup.ts
index 94799398..4a306205 100644
--- a/src/github-action-cleanup.ts
+++ b/src/github-action-cleanup.ts
@@ -1,7 +1,6 @@
import fs from 'fs-extra'
import path from 'path'
import * as core from '@actions/core'
-import * as io from '@actions/io'
import {createCommandManager} from './git-command-manager'
import {IGitCommandManager, ISettings} from './interfaces'
import {GitAuthHelper} from './git-auth-helper'
@@ -30,7 +29,7 @@ export async function cleanup(repositoryPath: string): Promise {
const authHelper = new GitAuthHelper(git, settings)
await authHelper.removeAuth()
- await io.rmRF(repositoryPath)
+ await fs.remove(repositoryPath)
} catch (error) {
core.setFailed(error.message)
}
diff --git a/src/github-action-context.ts b/src/github-action-context.ts
index 2645ff49..64437175 100644
--- a/src/github-action-context.ts
+++ b/src/github-action-context.ts
@@ -4,6 +4,7 @@ import {EOL} from 'os'
export class GithubActionContext {
payload: IWebhookPayload
+ ref: string
constructor() {
this.payload = {}
@@ -19,6 +20,7 @@ export class GithubActionContext {
process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${EOL}`)
}
}
+ this.ref = process.env.GITHUB_REF as string
}
get repo(): {owner: string; repo: string} {
diff --git a/src/github-manager.ts b/src/github-manager.ts
index 380e841b..1b8e1806 100644
--- a/src/github-manager.ts
+++ b/src/github-manager.ts
@@ -3,8 +3,7 @@ import * as core from '@actions/core'
import {inspect} from 'util'
import {v4 as uuidv4} from 'uuid'
import path from 'path'
-import fs from 'fs'
-import * as io from '@actions/io'
+import fs from 'fs-extra'
import * as toolCache from '@actions/tool-cache'
import assert from 'assert'
import {
@@ -202,7 +201,7 @@ export class GithubManager implements IGithubManager {
const extractPath = path.join(repositoryPath, uniqueId)
- await io.mkdirP(extractPath)
+ await fs.mkdirp(extractPath)
if (IS_WINDOWS) {
await toolCache.extractZip(archivePath, extractPath)
@@ -210,7 +209,7 @@ export class GithubManager implements IGithubManager {
await toolCache.extractTar(archivePath, extractPath)
}
- io.rmRF(archivePath)
+ await fs.remove(archivePath)
// Determine the path of the repository content. The archive contains
// a top-level folder and the repository content is inside.
@@ -233,13 +232,13 @@ export class GithubManager implements IGithubManager {
const targetPath = path.join(repositoryPath, fileName)
if (IS_WINDOWS) {
- await io.cp(sourcePath, targetPath, {recursive: true}) // Copy on Windows (Windows Defender may have a lock)
+ await fs.copy(sourcePath, targetPath) // Copy on Windows (Windows Defender may have a lock)
} else {
- await io.mv(sourcePath, targetPath)
+ await fs.move(sourcePath, targetPath)
}
}
- io.rmRF(extractPath)
+ await fs.remove(extractPath)
}
}
}
diff --git a/src/interfaces.ts b/src/interfaces.ts
index d083c22c..c8e208e5 100644
--- a/src/interfaces.ts
+++ b/src/interfaces.ts
@@ -105,6 +105,18 @@ export interface IGithubManager {
repos: IGithubManagerRepos
}
+export const DIFF_DELETE = -1
+export const DIFF_INSERT = 1
+export const DIFF_EQUAL = 0
+
+export interface Filter {
+ filePath: string
+ filter: string,
+ strict: boolean,
+ count: number,
+ maxCount: number
+}
+
export interface ISettings {
/**
* The auth token to use when fetching the repository.
@@ -157,8 +169,6 @@ export interface ISettings {
*/
repositoryName: string
- repositoryPath: string
-
/**
* GitHub workspace.
*/
@@ -211,6 +221,16 @@ export interface ISettings {
ignoreList: string[]
clean: boolean
+
+ /**
+ * List of patch filters
+ */
+ filters: Filter[]
+}
+
+export interface IYamlSettings {
+ filters?: {[key: string]: string}[]
+ ignore_list?: string[]
}
export interface OctokitHttpError extends Error {
diff --git a/src/main.ts b/src/main.ts
index 4cae5b3d..bd241f7a 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1,10 +1,8 @@
import path from 'path'
-import fs from 'fs-extra'
import * as core from '@actions/core'
import * as coreCommand from '@actions/core/lib/command'
-import * as io from '@actions/io'
+import fs from 'fs-extra'
import {inspect} from 'util'
-import FileHound from 'filehound'
import {Settings} from './settings'
import {GithubActionContext} from './github-action-context'
import * as gitSourceProvider from './git-source-provider'
@@ -15,12 +13,11 @@ import * as stateHelper from './state-helper'
import * as refHelper from './ref-helper'
import {ISettings} from './interfaces'
import {cleanup} from './github-action-cleanup'
+import {sync} from './sync'
const USER_EMAIL = 'user.email'
const USER_NAME = 'user.name'
-const filehound = FileHound.create()
-
async function run(): Promise {
try {
const context = new GithubActionContext()
@@ -61,7 +58,7 @@ async function run(): Promise {
}
const mainGitCommandManager = await createCommandManager(
- settings.repositoryPath
+ settings.githubWorkspacePath
)
const ref = `refs/heads/${settings.syncBranchName}`
@@ -86,28 +83,11 @@ async function run(): Promise {
settings.templateRepositoryRef
)
- // find all files
- const files: string[] = filehound
- .path(settings.templateRepositoryPath)
- .discard(settings.ignoreList)
- .findSync()
-
- core.debug(`List of found files ${inspect(files)}`)
-
- for (const file of files) {
- fs.copySync(
- file,
- path.join(
- settings.githubWorkspacePath,
- file.replace(settings.templateRepositoryPath, '')
- ),
- {
- overwrite: true
- }
- )
- }
+ core.startGroup('Creating and applying patches for found files')
+ await sync(settings)
- await io.rmRF(settings.templateRepositoryPath)
+ await fs.remove(settings.templateRepositoryPath)
+ core.endGroup()
try {
core.startGroup('Setting up git user and email')
diff --git a/src/misc/generate-docs.ts b/src/misc/generate-docs.ts
index 9809be88..80fea156 100644
--- a/src/misc/generate-docs.ts
+++ b/src/misc/generate-docs.ts
@@ -22,6 +22,10 @@ function updateUsage(
// Load the action.yml
const actionYaml = yaml.safeLoad(fs.readFileSync(actionYamlPath).toString())
+ if (typeof actionYaml !== 'object') {
+ throw new Error('')
+ }
+
// Load the README
const originalReadme = fs.readFileSync(readmePath).toString()
@@ -47,8 +51,11 @@ function updateUsage(
// Build the new usage section
newReadme.push('```yaml', `- uses: ${actionReference}`, ' with:')
- const inputs = actionYaml.inputs
+
+ const inputs = (actionYaml as { inputs: { [key: string]: any } }).inputs
+
let firstInput = true
+
for (const key of Object.keys(inputs)) {
const input = inputs[key]
@@ -123,4 +130,4 @@ updateUsage(
'actions/template-sync@v1',
path.join(__dirname, '..', '..', 'action.yml'),
path.join(__dirname, '..', '..', 'README.md')
-)
\ No newline at end of file
+)
diff --git a/src/settings.ts b/src/settings.ts
index f57ecd7f..4da0f73c 100644
--- a/src/settings.ts
+++ b/src/settings.ts
@@ -1,8 +1,11 @@
import * as core from '@actions/core'
import {URL} from 'url'
-import {GithubActionContext} from './github-action-context'
-import {ISettings} from './interfaces'
import path from 'path'
+import YAML from 'yaml'
+import fs from 'fs-extra';
+import {GithubActionContext} from './github-action-context'
+import {Filter, ISettings, IYamlSettings} from './interfaces'
+import {inspect} from 'util'
export class Settings implements ISettings {
settings: ISettings
@@ -11,15 +14,9 @@ export class Settings implements ISettings {
const message =
'This pull request has been created by the [template sync action](https://github.com/narrowspark/template-sync-action) action.\n\nThis PR synchronizes with {0}\n\n---\n\n You can set a custom pull request title, body, ref and commit messages, see [Usage](https://github.com/narrowspark/template-sync-action#Usage).'
- let githubWorkspacePath = process.env['GITHUB_WORKSPACE']
-
- if (!githubWorkspacePath) {
- throw new Error('GITHUB_WORKSPACE not defined')
- }
-
- githubWorkspacePath = path.resolve(githubWorkspacePath)
+ let githubWorkspacePath = Settings.getGithubWorkspacePath()
- core.debug(`GITHUB_WORKSPACE = '${githubWorkspacePath}'`)
+ let {ignoreList, filters} = Settings.loadYamlSettings(path.join(githubWorkspacePath, '.github', 'template-sync-settings.yml'))
this.settings = {
authToken: core.getInput('github_token', {required: true}),
@@ -40,13 +37,12 @@ export class Settings implements ISettings {
repositoryOwner: core.getInput('owner') || context.repo.owner,
repositoryName: core.getInput('repo') || context.repo.repo,
githubWorkspacePath,
- repositoryPath: githubWorkspacePath,
messageHead:
core.getInput('pr_title') || 'Enhancement: Synchronize with "{0}"',
messageBody: core.getInput('pr_message') || message,
- ref: core.getInput('ref', {required: true}),
+ ref: core.getInput('ref') || context.ref,
syncBranchName: 'feature/template/sync/{0}',
templateRepositoryRef:
@@ -65,9 +61,60 @@ export class Settings implements ISettings {
'LICENSE.md.md',
'README.md',
'UPGRADE.md'
- ].concat(core.getInput('ignore_list', {required: false}) || []),
- clean: (core.getInput('clean') || 'true').toUpperCase() === 'TRUE'
+ ].concat(ignoreList),
+ clean: (core.getInput('clean') || 'true').toUpperCase() === 'TRUE',
+ filters
+ }
+ }
+
+ public static getGithubWorkspacePath(): string {
+ let githubWorkspacePath = process.env['GITHUB_WORKSPACE']
+
+ if (!githubWorkspacePath) {
+ throw new Error('GITHUB_WORKSPACE not defined')
+ }
+
+ githubWorkspacePath = path.resolve(githubWorkspacePath)
+
+ core.debug(`GITHUB_WORKSPACE = '${githubWorkspacePath}'`)
+
+ return githubWorkspacePath
+ }
+
+ public static loadYamlSettings(dotGithubPath: string): {filters: Filter[], ignoreList: string[]} {
+ let ignoreList: string[] = []
+ const filters: Filter[] = []
+
+ try {
+ const stats = fs.lstatSync(dotGithubPath)
+
+ if (stats.isFile()) {
+ const yamlSettings: IYamlSettings = YAML.parse(fs.readFileSync(dotGithubPath, 'utf8'))
+ const yamlFilters = yamlSettings.filters || []
+
+ yamlFilters.forEach((filter) => {
+ if (typeof filter === 'object' && filter !== null) {
+ if (typeof filter.filepath !== 'undefined' && typeof filter.filter !== 'undefined') {
+ filters.push({
+ filePath: filter.filepath,
+ filter: filter.filter,
+ strict: Boolean(filter.strict || false),
+ count: 0,
+ maxCount: filter.count || 1
+ } as Filter)
+ } else {
+ core.info(`Please provide the correct syntax for ${inspect(filter)}; Check the readme of https://github.com/narrowspark/template-sync-action.`)
+ }
+ }
+ })
+
+ return {ignoreList: yamlSettings.ignore_list as string[] || [], filters}
+ }
+ } catch (e) {
+ core.info(`No settings file found under ${dotGithubPath}, continue without it...`)
}
+
+ return {ignoreList, filters}
}
get authToken(): string {
@@ -90,10 +137,6 @@ export class Settings implements ISettings {
return this.settings.repositoryName
}
- get repositoryPath(): string {
- return this.settings.repositoryPath
- }
-
get githubWorkspacePath(): string {
return this.settings.githubWorkspacePath
}
@@ -175,10 +218,22 @@ export class Settings implements ISettings {
return this.settings.persistCredentials
}
+ set ignoreList(ignoreList: string[]) {
+ this.settings.ignoreList = ignoreList
+ }
+
get ignoreList(): string[] {
return this.settings.ignoreList
}
+ set filters(filters: Filter[]) {
+ this.settings.filters = filters
+ }
+
+ get filters(): Filter[] {
+ return this.settings.filters
+ }
+
get clean(): boolean {
return this.settings.clean
}
diff --git a/src/sync.ts b/src/sync.ts
new file mode 100644
index 00000000..8581f193
--- /dev/null
+++ b/src/sync.ts
@@ -0,0 +1,144 @@
+import * as core from '@actions/core'
+import {inspect} from 'util'
+import path from 'path'
+import fs from 'fs-extra'
+import FileHound from 'filehound'
+import {Diff} from './diff/diff'
+import {DIFF_EQUAL, Filter, ISettings} from './interfaces'
+import DiffMatchPatch from './diff/diff-match-patch'
+import {diffLinesToWords} from './diff/diff-lines-to-words'
+import {diffCharsToLines} from './diff/diff-chars-to-lines'
+import {diffLinesToChars} from './diff/diff-lines-to-chars'
+
+const filehound = FileHound.create()
+const diff = new DiffMatchPatch()
+
+export const sync = async (settings: ISettings) => {
+ const files: string[] = filehound
+ .path(settings.templateRepositoryPath)
+ .discard(settings.ignoreList)
+ .findSync()
+
+ core.debug(`List of found files ${inspect(files)}`)
+
+ for (const file of files) {
+ const coreFilePath = path.join(
+ settings.githubWorkspacePath,
+ file.replace(settings.templateRepositoryPath, '')
+ )
+
+ if (fs.pathExistsSync(coreFilePath)) {
+ const coreFileContent = await fs.readFile(coreFilePath, 'utf8')
+
+ let wordDiffs = diffLinesToChars(
+ coreFileContent,
+ await fs.readFile(file, 'utf8')
+ )
+
+ let diffs: null[] | Diff[] = diff.diff(
+ wordDiffs.chars1,
+ wordDiffs.chars2,
+ false
+ )
+
+ diffCharsToLines(diffs, wordDiffs.lineArray)
+
+ diff.diffCleanupSemantic(diffs)
+
+ core.debug(`Diff list before filters are applied; ${inspect(diffs)}`)
+
+ const filters: Filter[] = []
+
+ settings.filters.forEach((filter: Filter) => {
+ if (
+ file.includes(
+ path.resolve(
+ path.join(settings.templateRepositoryPath, filter.filePath)
+ )
+ )
+ ) {
+ filters.push(filter)
+ }
+ })
+
+ core.debug(`Loaded filters ${inspect(filters)} for file ${file}.`)
+
+ filters.forEach((filter: Filter) => {
+ diffs.forEach(
+ (d: null | Diff, index: number, objects: null[] | Diff[]) => {
+ if (d === null) {
+ return
+ }
+
+ if (filter.count < filter.maxCount) {
+ let shouldRemove
+
+ if (
+ Object.prototype.toString.call(filter.filter) ===
+ '[object RegExp]' &&
+ d.text.trim().match(filter.filter) !== null
+ ) {
+ shouldRemove = true
+ } else if (filter.strict) {
+ shouldRemove = d.text.trim() === String(filter.filter).trim()
+ } else {
+ shouldRemove = d.text
+ .trim()
+ .includes(String(filter.filter).trim())
+ }
+
+ if (shouldRemove) {
+ filter.count++
+
+ const preIndex = index - 1
+ let preDiff = objects[preIndex]
+
+ if (
+ typeof preDiff !== 'undefined' &&
+ preDiff !== null &&
+ preDiff.bind
+ ) {
+ preDiff.operation = DIFF_EQUAL
+ preDiff.bind = false
+
+ objects[preIndex] = preDiff
+ }
+
+ objects[index] = null
+ }
+ }
+ }
+ )
+ })
+
+ diffs = diffs.filter(Boolean)
+
+ core.debug(`Diff list after filters are applied; ${inspect(diffs)}`)
+console.log(diff.patchMake(diffs)[0].diffs)
+
+ if (diffs.length !== 0) {
+ const [text, results] = diff.patchApply(
+ diff.patchMake(diffs),
+ coreFileContent
+ )
+
+ // @ts-ignore
+ if (results.includes(false)) {
+ core.error(
+ `Failed to apply patch on ${coreFilePath}; ${inspect([
+ text,
+ results
+ ])}`
+ )
+ console.log(text, results)
+ } else {
+ await fs.writeFile(coreFilePath, text)
+ }
+ }
+ } else {
+ await fs.copy(file, coreFilePath, {
+ overwrite: true
+ })
+ }
+ }
+}
From c49d395e07958b5fdf8134725ab13307ee5bd570 Mon Sep 17 00:00:00 2001
From: prisis
Date: Fri, 19 Feb 2021 11:59:16 +0100
Subject: [PATCH 02/21] feat: reworking diff
---
.../.github/template-sync-settings.yml | 30 +
__tests__/fixture/workspace/composer.json | 88 +
.../fixture/workspace/template/composer.json | 83 +
__tests__/settings.test.ts | 2 +-
__tests__/sync.test.ts | 578 +-
pnpm-lock.yaml | 6394 +++++++++++++++++
src/interfaces.ts | 6 +-
src/settings.ts | 36 +-
src/sync.ts | 2 +-
9 files changed, 6916 insertions(+), 303 deletions(-)
create mode 100644 __tests__/fixture/workspace/.github/template-sync-settings.yml
create mode 100644 __tests__/fixture/workspace/composer.json
create mode 100644 __tests__/fixture/workspace/template/composer.json
create mode 100644 pnpm-lock.yaml
diff --git a/__tests__/fixture/workspace/.github/template-sync-settings.yml b/__tests__/fixture/workspace/.github/template-sync-settings.yml
new file mode 100644
index 00000000..38095aca
--- /dev/null
+++ b/__tests__/fixture/workspace/.github/template-sync-settings.yml
@@ -0,0 +1,30 @@
+filters:
+ -
+ filepath: composer.json
+ filter: narrowspark/php-library-template
+ -
+ filepath: composer.json
+ filter: narrowspark/php-library-template
+ -
+ filepath: composer.json
+ filter: Provides a GitHub repository template for a Narrowspark PHP library, using GitHub actions
+ -
+ filepath: composer.json
+ filter: 4
+ strict: true
+ -
+ filepath: composer.json
+ filter: 0
+ strict: true
+ -
+ filepath: composer.json
+ filter: Narrowspark\\Library
+ -
+ filepath: composer.json
+ filter: Narrowspark\\Library
+ -
+ filepath: composer.json
+ filter: narrowspark
+ -
+ filepath: composer.json
+ filter: narrowspark/php-library-template
diff --git a/__tests__/fixture/workspace/composer.json b/__tests__/fixture/workspace/composer.json
new file mode 100644
index 00000000..73d23675
--- /dev/null
+++ b/__tests__/fixture/workspace/composer.json
@@ -0,0 +1,88 @@
+{
+ "name": "testomat/terminal-colour",
+ "type": "library",
+ "description": "Return your terminal message in style! Change the text style, text color and text background color from the terminal, console or shell interface with ANSI color codes.",
+ "keywords": [
+ "narrowspark",
+ "testomat",
+ "color",
+ "terminal",
+ "colour",
+ "ansi",
+ "style",
+ "truecolor",
+ "color256",
+ "color16"
+ ],
+ "homepage": "http://github.com/testomat/terminal-colour",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Daniel Bannert",
+ "email": "d.bannert@anolilab.de",
+ "homepage": "http://www.anolilab.de",
+ "role": "Developer"
+ }
+ ],
+ "require": {
+ "php": "^7.3",
+ "thecodingmachine/safe": "^1.1.1"
+ },
+ "require-dev": {
+ "ext-json": "*",
+ "phpunit/phpunit": "^9.1.4"
+ },
+ "config": {
+ "preferred-install": "dist",
+ "sort-packages": true
+ },
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ },
+ "prefetcher": {
+ "require": {
+ "phpunit/phpunit": "^8.0 || ^9.0"
+ }
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Testomat\\TerminalColour\\": "src/"
+ },
+ "exclude-from-classmap": [
+ "/tests/"
+ ]
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Testomat\\TerminalColour\\Tests\\": "tests/"
+ }
+ },
+ "minimum-stability": "dev",
+ "prefer-stable": true,
+ "scripts": {
+ "changelog": "composer --working-dir=./.build changelog",
+ "coverage": [
+ "phpunit --dump-xdebug-filter=./.build/phpunit/.xdebug-filter.php",
+ "phpunit --prepend=./.build/phpunit/.xdebug-filter.php --coverage-html=./.build/phpunit/coverage"
+ ],
+ "cs": "composer --working-dir=./.build cs -- -v",
+ "cs:check": "composer --working-dir=./.build cs:check -- -v",
+ "phpstan": "composer --working-dir=./.build phpstan -- --memory-limit=-1",
+ "psalm": "composer --working-dir=./.build psalm",
+ "psalm:fix": "composer --working-dir=./.build psalm:fix",
+ "infection": "composer --working-dir=./.build infection -- --min-covered-msi=89 --min-msi=89",
+ "rector-src": "composer --working-dir=./.build rector-src",
+ "rector-src:fix": "composer --working-dir=./.build rector-src:fix",
+ "rector-tests": "composer --working-dir=./.build rector-tests",
+ "rector-tests:fix": "composer --working-dir=./.build rector-tests:fix",
+ "test": "phpunit",
+ "post-install-cmd": "composer --working-dir=./.build install --lock",
+ "post-update-cmd": "composer --working-dir=./.build update --lock"
+ },
+ "support": {
+ "issues": "https://github.com/testomat/terminal-colour/issues",
+ "source": "https://github.com/testomat/terminal-colour"
+ }
+}
\ No newline at end of file
diff --git a/__tests__/fixture/workspace/template/composer.json b/__tests__/fixture/workspace/template/composer.json
new file mode 100644
index 00000000..de2b571c
--- /dev/null
+++ b/__tests__/fixture/workspace/template/composer.json
@@ -0,0 +1,83 @@
+{
+ "name": "narrowspark/php-library-template",
+ "type": "library",
+ "description": "Provides a GitHub repository template for a Narrowspark PHP library, using GitHub actions.",
+ "keywords": [
+ "narrowspark"
+ ],
+ "homepage": "http://github.com/narrowspark/php-library-template",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Daniel Bannert",
+ "email": "d.bannert@anolilab.de",
+ "homepage": "http://www.anolilab.de",
+ "role": "Developer"
+ }
+ ],
+ "require": {
+ "php": "^7.4",
+ "thecodingmachine/safe": "^1.1.1"
+ },
+ "require-dev": {
+ "ext-json": "*",
+ "phpunit/phpunit": "^9.1.5",
+ "thecodingmachine/phpstan-safe-rule": "^1.0.0"
+ },
+ "config": {
+ "preferred-install": "dist",
+ "sort-packages": true
+ },
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ },
+ "prefetcher": {
+ "require": {
+ "phpunit/phpunit": "^8.0 || ^9.0"
+ }
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Narrowspark\\Library\\": "src/"
+ },
+ "exclude-from-classmap": [
+ "/tests/"
+ ]
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Narrowspark\\Library\\Tests\\": "tests/"
+ }
+ },
+ "minimum-stability": "dev",
+ "prefer-stable": true,
+ "scripts": {
+ "post-install-cmd": "composer --working-dir=./.build install --lock",
+ "post-update-cmd": "composer --working-dir=./.build update --lock",
+ "changelog": "composer --working-dir=./.build changelog",
+ "coverage": [
+ "phpunit --dump-xdebug-filter=./.build/phpunit/.xdebug-filter.php",
+ "phpunit --prepend=./.build/phpunit/.xdebug-filter.php --coverage-html=./.build/phpunit/coverage"
+ ],
+ "cs": "composer --working-dir=./.build cs -- -v",
+ "cs:check": "composer --working-dir=./.build cs:check -- -v",
+ "infection": "composer --working-dir=./.build infection -- --min-covered-msi=73 --min-msi=61",
+ "phpstan": "composer --working-dir=./.build phpstan -- --memory-limit=-1",
+ "phpstan:baseline": "composer --working-dir=./.build phpstan:baseline -- --memory-limit=-1",
+ "psalm": "composer --working-dir=./.build psalm",
+ "psalm:baseline": "composer --working-dir=./.build psalm:baseline",
+ "psalm:fix": "composer --working-dir=./.build psalm:fix",
+ "rector-src": "composer --working-dir=./.build rector-src",
+ "rector-src:fix": "composer --working-dir=./.build rector-src:fix",
+ "rector-tests": "composer --working-dir=./.build rector-tests",
+ "rector-tests:fix": "composer --working-dir=./.build rector-tests:fix",
+ "req:check": "composer --working-dir=./.build req:check",
+ "test": "phpunit"
+ },
+ "support": {
+ "issues": "https://github.com/narrowspark/php-library-template/issues",
+ "source": "https://github.com/narrowspark/php-library-template"
+ }
+}
\ No newline at end of file
diff --git a/__tests__/settings.test.ts b/__tests__/settings.test.ts
index 2cd5c63a..fb595240 100644
--- a/__tests__/settings.test.ts
+++ b/__tests__/settings.test.ts
@@ -1,4 +1,4 @@
-import path from "path"
+import path from 'path'
import * as core from '@actions/core'
import {GithubActionContext} from '../lib/github-action-context'
import fs from 'fs-extra'
diff --git a/__tests__/sync.test.ts b/__tests__/sync.test.ts
index 4a744cf3..30a85a90 100644
--- a/__tests__/sync.test.ts
+++ b/__tests__/sync.test.ts
@@ -317,212 +317,212 @@ describe('sync tests', () => {
fs.writeFileSync(
path.join(dotGithubPath, 'template-sync-settings.yml'),
'filters:\n' +
- ' -\n' +
- ' filepath: composer.json\n' +
- ' filter: narrowspark/php-library-template\n' +
- ' -\n' +
- ' filepath: composer.json\n' +
- ' filter: narrowspark/php-library-template\n' +
- ' -\n' +
- ' filepath: composer.json\n' +
- ' filter: Provides a GitHub repository template for a Narrowspark PHP library, using GitHub actions\n' +
- ' -\n' +
- ' filepath: composer.json\n' +
- ' filter: 4\n' +
- ' strict: true\n' +
- ' -\n' +
- ' filepath: composer.json\n' +
- ' filter: 0\n' +
- ' strict: true\n' +
- ' -\n' +
- ' filepath: composer.json\n' +
- ' filter: Narrowspark\\\\Library\n' +
- ' -\n' +
- ' filepath: composer.json\n' +
- ' filter: Narrowspark\\\\Library\n' +
- ' -\n' +
- ' filepath: composer.json\n' +
- ' filter: narrowspark\n' +
- ' -\n' +
- ' filepath: composer.json\n' +
- ' filter: narrowspark/php-library-template\n'
+ ' -\n' +
+ ' filepath: composer.json\n' +
+ ' filter: narrowspark/php-library-template\n' +
+ ' -\n' +
+ ' filepath: composer.json\n' +
+ ' filter: narrowspark/php-library-template\n' +
+ ' -\n' +
+ ' filepath: composer.json\n' +
+ ' filter: Provides a GitHub repository template for a Narrowspark PHP library, using GitHub actions\n' +
+ ' -\n' +
+ ' filepath: composer.json\n' +
+ ' filter: 4\n' +
+ ' strict: true\n' +
+ ' -\n' +
+ ' filepath: composer.json\n' +
+ ' filter: 0\n' +
+ ' strict: true\n' +
+ ' -\n' +
+ ' filepath: composer.json\n' +
+ ' filter: Narrowspark\\\\Library\n' +
+ ' -\n' +
+ ' filepath: composer.json\n' +
+ ' filter: Narrowspark\\\\Library\n' +
+ ' -\n' +
+ ' filepath: composer.json\n' +
+ ' filter: narrowspark\n' +
+ ' -\n' +
+ ' filepath: composer.json\n' +
+ ' filter: narrowspark/php-library-template\n'
)
fs.writeFileSync(
path.join(templateRepositoryPath, 'composer.json'),
'{\n' +
- ' "name": "narrowspark/php-library-template",\n' +
- ' "type": "library",\n' +
- ' "description": "Provides a GitHub repository template for a Narrowspark PHP library, using GitHub actions.",\n' +
- ' "keywords": [\n' +
- ' "narrowspark"\n' +
- ' ],\n' +
- ' "homepage": "http://github.com/narrowspark/php-library-template",\n' +
- ' "license": "MIT",\n' +
- ' "authors": [\n' +
- ' {\n' +
- ' "name": "Daniel Bannert",\n' +
- ' "email": "d.bannert@anolilab.de",\n' +
- ' "homepage": "http://www.anolilab.de",\n' +
- ' "role": "Developer"\n' +
- ' }\n' +
- ' ],\n' +
- ' "require": {\n' +
- ' "php": "^7.4",\n' +
- ' "thecodingmachine/safe": "^1.1.1"\n' +
- ' },\n' +
- ' "require-dev": {\n' +
- ' "ext-json": "*",\n' +
- ' "phpunit/phpunit": "^9.1.5",\n' +
- ' "thecodingmachine/phpstan-safe-rule": "^1.0.0"\n' +
- ' },\n' +
- ' "config": {\n' +
- ' "preferred-install": "dist",\n' +
- ' "sort-packages": true\n' +
- ' },\n' +
- ' "extra": {\n' +
- ' "branch-alias": {\n' +
- ' "dev-master": "1.0-dev"\n' +
- ' },\n' +
- ' "prefetcher": {\n' +
- ' "require": {\n' +
- ' "phpunit/phpunit": "^8.0 || ^9.0"\n' +
- ' }\n' +
- ' }\n' +
- ' },\n' +
- ' "autoload": {\n' +
- ' "psr-4": {\n' +
- ' "Narrowspark\\\\Library\\\\": "src/"\n' +
- ' },\n' +
- ' "exclude-from-classmap": [\n' +
- ' "/tests/"\n' +
- ' ]\n' +
- ' },\n' +
- ' "autoload-dev": {\n' +
- ' "psr-4": {\n' +
- ' "Narrowspark\\\\Library\\\\Tests\\\\": "tests/"\n' +
- ' }\n' +
- ' },\n' +
- ' "minimum-stability": "dev",\n' +
- ' "prefer-stable": true,\n' +
- ' "scripts": {\n' +
- ' "post-install-cmd": "composer --working-dir=./.build install --lock",\n' +
- ' "post-update-cmd": "composer --working-dir=./.build update --lock",\n' +
- ' "changelog": "composer --working-dir=./.build changelog",\n' +
- ' "coverage": [\n' +
- ' "phpunit --dump-xdebug-filter=./.build/phpunit/.xdebug-filter.php",\n' +
- ' "phpunit --prepend=./.build/phpunit/.xdebug-filter.php --coverage-html=./.build/phpunit/coverage"\n' +
- ' ],\n' +
- ' "cs": "composer --working-dir=./.build cs -- -v",\n' +
- ' "cs:check": "composer --working-dir=./.build cs:check -- -v",\n' +
- ' "infection": "composer --working-dir=./.build infection -- --min-covered-msi=73 --min-msi=61",\n' +
- ' "phpstan": "composer --working-dir=./.build phpstan -- --memory-limit=-1",\n' +
- ' "phpstan:baseline": "composer --working-dir=./.build phpstan:baseline -- --memory-limit=-1",\n' +
- ' "psalm": "composer --working-dir=./.build psalm",\n' +
- ' "psalm:baseline": "composer --working-dir=./.build psalm:baseline",\n' +
- ' "psalm:fix": "composer --working-dir=./.build psalm:fix",\n' +
- ' "rector-src": "composer --working-dir=./.build rector-src",\n' +
- ' "rector-src:fix": "composer --working-dir=./.build rector-src:fix",\n' +
- ' "rector-tests": "composer --working-dir=./.build rector-tests",\n' +
- ' "rector-tests:fix": "composer --working-dir=./.build rector-tests:fix",\n' +
- ' "req:check": "composer --working-dir=./.build req:check",\n' +
- ' "test": "phpunit"\n' +
- ' },\n' +
- ' "support": {\n' +
- ' "issues": "https://github.com/narrowspark/php-library-template/issues",\n' +
- ' "source": "https://github.com/narrowspark/php-library-template"\n' +
- ' }\n' +
- '}'
+ ' "name": "narrowspark/php-library-template",\n' +
+ ' "type": "library",\n' +
+ ' "description": "Provides a GitHub repository template for a Narrowspark PHP library, using GitHub actions.",\n' +
+ ' "keywords": [\n' +
+ ' "narrowspark"\n' +
+ ' ],\n' +
+ ' "homepage": "http://github.com/narrowspark/php-library-template",\n' +
+ ' "license": "MIT",\n' +
+ ' "authors": [\n' +
+ ' {\n' +
+ ' "name": "Daniel Bannert",\n' +
+ ' "email": "d.bannert@anolilab.de",\n' +
+ ' "homepage": "http://www.anolilab.de",\n' +
+ ' "role": "Developer"\n' +
+ ' }\n' +
+ ' ],\n' +
+ ' "require": {\n' +
+ ' "php": "^7.4",\n' +
+ ' "thecodingmachine/safe": "^1.1.1"\n' +
+ ' },\n' +
+ ' "require-dev": {\n' +
+ ' "ext-json": "*",\n' +
+ ' "phpunit/phpunit": "^9.1.5",\n' +
+ ' "thecodingmachine/phpstan-safe-rule": "^1.0.0"\n' +
+ ' },\n' +
+ ' "config": {\n' +
+ ' "preferred-install": "dist",\n' +
+ ' "sort-packages": true\n' +
+ ' },\n' +
+ ' "extra": {\n' +
+ ' "branch-alias": {\n' +
+ ' "dev-master": "1.0-dev"\n' +
+ ' },\n' +
+ ' "prefetcher": {\n' +
+ ' "require": {\n' +
+ ' "phpunit/phpunit": "^8.0 || ^9.0"\n' +
+ ' }\n' +
+ ' }\n' +
+ ' },\n' +
+ ' "autoload": {\n' +
+ ' "psr-4": {\n' +
+ ' "Narrowspark\\\\Library\\\\": "src/"\n' +
+ ' },\n' +
+ ' "exclude-from-classmap": [\n' +
+ ' "/tests/"\n' +
+ ' ]\n' +
+ ' },\n' +
+ ' "autoload-dev": {\n' +
+ ' "psr-4": {\n' +
+ ' "Narrowspark\\\\Library\\\\Tests\\\\": "tests/"\n' +
+ ' }\n' +
+ ' },\n' +
+ ' "minimum-stability": "dev",\n' +
+ ' "prefer-stable": true,\n' +
+ ' "scripts": {\n' +
+ ' "post-install-cmd": "composer --working-dir=./.build install --lock",\n' +
+ ' "post-update-cmd": "composer --working-dir=./.build update --lock",\n' +
+ ' "changelog": "composer --working-dir=./.build changelog",\n' +
+ ' "coverage": [\n' +
+ ' "phpunit --dump-xdebug-filter=./.build/phpunit/.xdebug-filter.php",\n' +
+ ' "phpunit --prepend=./.build/phpunit/.xdebug-filter.php --coverage-html=./.build/phpunit/coverage"\n' +
+ ' ],\n' +
+ ' "cs": "composer --working-dir=./.build cs -- -v",\n' +
+ ' "cs:check": "composer --working-dir=./.build cs:check -- -v",\n' +
+ ' "infection": "composer --working-dir=./.build infection -- --min-covered-msi=73 --min-msi=61",\n' +
+ ' "phpstan": "composer --working-dir=./.build phpstan -- --memory-limit=-1",\n' +
+ ' "phpstan:baseline": "composer --working-dir=./.build phpstan:baseline -- --memory-limit=-1",\n' +
+ ' "psalm": "composer --working-dir=./.build psalm",\n' +
+ ' "psalm:baseline": "composer --working-dir=./.build psalm:baseline",\n' +
+ ' "psalm:fix": "composer --working-dir=./.build psalm:fix",\n' +
+ ' "rector-src": "composer --working-dir=./.build rector-src",\n' +
+ ' "rector-src:fix": "composer --working-dir=./.build rector-src:fix",\n' +
+ ' "rector-tests": "composer --working-dir=./.build rector-tests",\n' +
+ ' "rector-tests:fix": "composer --working-dir=./.build rector-tests:fix",\n' +
+ ' "req:check": "composer --working-dir=./.build req:check",\n' +
+ ' "test": "phpunit"\n' +
+ ' },\n' +
+ ' "support": {\n' +
+ ' "issues": "https://github.com/narrowspark/php-library-template/issues",\n' +
+ ' "source": "https://github.com/narrowspark/php-library-template"\n' +
+ ' }\n' +
+ '}'
)
const testFilePathB = createFile(
path.join(gitHubWorkspace, 'composer.json'),
'{\n' +
- ' "name": "testomat/terminal-colour",\n' +
- ' "type": "library",\n' +
- ' "description": "Return your terminal message in style! Change the text style, text color and text background color from the terminal, console or shell interface with ANSI color codes.",\n' +
- ' "keywords": [\n' +
- ' "narrowspark",\n' +
- ' "testomat",\n' +
- ' "color",\n' +
- ' "terminal",\n' +
- ' "colour",\n' +
- ' "ansi",\n' +
- ' "style",\n' +
- ' "truecolor",\n' +
- ' "color256",\n' +
- ' "color16"\n' +
- ' ],\n' +
- ' "homepage": "http://github.com/testomat/terminal-colour",\n' +
- ' "license": "MIT",\n' +
- ' "authors": [\n' +
- ' {\n' +
- ' "name": "Daniel Bannert",\n' +
- ' "email": "d.bannert@anolilab.de",\n' +
- ' "homepage": "http://www.anolilab.de",\n' +
- ' "role": "Developer"\n' +
- ' }\n' +
- ' ],\n' +
- ' "require": {\n' +
- ' "php": "^7.3",\n' +
- ' "thecodingmachine/safe": "^1.1.1"\n' +
- ' },\n' +
- ' "require-dev": {\n' +
- ' "ext-json": "*",\n' +
- ' "phpunit/phpunit": "^9.1.4"\n' +
- ' },\n' +
- ' "config": {\n' +
- ' "preferred-install": "dist",\n' +
- ' "sort-packages": true\n' +
- ' },\n' +
- ' "extra": {\n' +
- ' "branch-alias": {\n' +
- ' "dev-master": "1.1-dev"\n' +
- ' },\n' +
- ' "prefetcher": {\n' +
- ' "require": {\n' +
- ' "phpunit/phpunit": "^8.0 || ^9.0"\n' +
- ' }\n' +
- ' }\n' +
- ' },\n' +
- ' "autoload": {\n' +
- ' "psr-4": {\n' +
- ' "Testomat\\\\TerminalColour\\\\": "src/"\n' +
- ' },\n' +
- ' "exclude-from-classmap": [\n' +
- ' "/tests/"\n' +
- ' ]\n' +
- ' },\n' +
- ' "autoload-dev": {\n' +
- ' "psr-4": {\n' +
- ' "Testomat\\\\TerminalColour\\\\Tests\\\\": "tests/"\n' +
- ' }\n' +
- ' },\n' +
- ' "minimum-stability": "dev",\n' +
- ' "prefer-stable": true,\n' +
- ' "scripts": {\n' +
- ' "changelog": "composer --working-dir=./.build changelog",\n' +
- ' "coverage": [\n' +
- ' "phpunit --dump-xdebug-filter=./.build/phpunit/.xdebug-filter.php",\n' +
- ' "phpunit --prepend=./.build/phpunit/.xdebug-filter.php --coverage-html=./.build/phpunit/coverage"\n' +
- ' ],\n' +
- ' "cs": "composer --working-dir=./.build cs -- -v",\n' +
- ' "cs:check": "composer --working-dir=./.build cs:check -- -v",\n' +
- ' "phpstan": "composer --working-dir=./.build phpstan -- --memory-limit=-1",\n' +
- ' "psalm": "composer --working-dir=./.build psalm",\n' +
- ' "psalm:fix": "composer --working-dir=./.build psalm:fix",\n' +
- ' "infection": "composer --working-dir=./.build infection -- --min-covered-msi=89 --min-msi=89",\n' +
- ' "rector-src": "composer --working-dir=./.build rector-src",\n' +
- ' "rector-src:fix": "composer --working-dir=./.build rector-src:fix",\n' +
- ' "rector-tests": "composer --working-dir=./.build rector-tests",\n' +
- ' "rector-tests:fix": "composer --working-dir=./.build rector-tests:fix",\n' +
- ' "test": "phpunit",\n' +
- ' "post-install-cmd": "composer --working-dir=./.build install --lock",\n' +
- ' "post-update-cmd": "composer --working-dir=./.build update --lock"\n' +
- ' },\n' +
- ' "support": {\n' +
- ' "issues": "https://github.com/testomat/terminal-colour/issues",\n' +
- ' "source": "https://github.com/testomat/terminal-colour"\n' +
- ' }\n' +
- '}'
+ ' "name": "testomat/terminal-colour",\n' +
+ ' "type": "library",\n' +
+ ' "description": "Return your terminal message in style! Change the text style, text color and text background color from the terminal, console or shell interface with ANSI color codes.",\n' +
+ ' "keywords": [\n' +
+ ' "narrowspark",\n' +
+ ' "testomat",\n' +
+ ' "color",\n' +
+ ' "terminal",\n' +
+ ' "colour",\n' +
+ ' "ansi",\n' +
+ ' "style",\n' +
+ ' "truecolor",\n' +
+ ' "color256",\n' +
+ ' "color16"\n' +
+ ' ],\n' +
+ ' "homepage": "http://github.com/testomat/terminal-colour",\n' +
+ ' "license": "MIT",\n' +
+ ' "authors": [\n' +
+ ' {\n' +
+ ' "name": "Daniel Bannert",\n' +
+ ' "email": "d.bannert@anolilab.de",\n' +
+ ' "homepage": "http://www.anolilab.de",\n' +
+ ' "role": "Developer"\n' +
+ ' }\n' +
+ ' ],\n' +
+ ' "require": {\n' +
+ ' "php": "^7.3",\n' +
+ ' "thecodingmachine/safe": "^1.1.1"\n' +
+ ' },\n' +
+ ' "require-dev": {\n' +
+ ' "ext-json": "*",\n' +
+ ' "phpunit/phpunit": "^9.1.4"\n' +
+ ' },\n' +
+ ' "config": {\n' +
+ ' "preferred-install": "dist",\n' +
+ ' "sort-packages": true\n' +
+ ' },\n' +
+ ' "extra": {\n' +
+ ' "branch-alias": {\n' +
+ ' "dev-master": "1.1-dev"\n' +
+ ' },\n' +
+ ' "prefetcher": {\n' +
+ ' "require": {\n' +
+ ' "phpunit/phpunit": "^8.0 || ^9.0"\n' +
+ ' }\n' +
+ ' }\n' +
+ ' },\n' +
+ ' "autoload": {\n' +
+ ' "psr-4": {\n' +
+ ' "Testomat\\\\TerminalColour\\\\": "src/"\n' +
+ ' },\n' +
+ ' "exclude-from-classmap": [\n' +
+ ' "/tests/"\n' +
+ ' ]\n' +
+ ' },\n' +
+ ' "autoload-dev": {\n' +
+ ' "psr-4": {\n' +
+ ' "Testomat\\\\TerminalColour\\\\Tests\\\\": "tests/"\n' +
+ ' }\n' +
+ ' },\n' +
+ ' "minimum-stability": "dev",\n' +
+ ' "prefer-stable": true,\n' +
+ ' "scripts": {\n' +
+ ' "changelog": "composer --working-dir=./.build changelog",\n' +
+ ' "coverage": [\n' +
+ ' "phpunit --dump-xdebug-filter=./.build/phpunit/.xdebug-filter.php",\n' +
+ ' "phpunit --prepend=./.build/phpunit/.xdebug-filter.php --coverage-html=./.build/phpunit/coverage"\n' +
+ ' ],\n' +
+ ' "cs": "composer --working-dir=./.build cs -- -v",\n' +
+ ' "cs:check": "composer --working-dir=./.build cs:check -- -v",\n' +
+ ' "phpstan": "composer --working-dir=./.build phpstan -- --memory-limit=-1",\n' +
+ ' "psalm": "composer --working-dir=./.build psalm",\n' +
+ ' "psalm:fix": "composer --working-dir=./.build psalm:fix",\n' +
+ ' "infection": "composer --working-dir=./.build infection -- --min-covered-msi=89 --min-msi=89",\n' +
+ ' "rector-src": "composer --working-dir=./.build rector-src",\n' +
+ ' "rector-src:fix": "composer --working-dir=./.build rector-src:fix",\n' +
+ ' "rector-tests": "composer --working-dir=./.build rector-tests",\n' +
+ ' "rector-tests:fix": "composer --working-dir=./.build rector-tests:fix",\n' +
+ ' "test": "phpunit",\n' +
+ ' "post-install-cmd": "composer --working-dir=./.build install --lock",\n' +
+ ' "post-update-cmd": "composer --working-dir=./.build update --lock"\n' +
+ ' },\n' +
+ ' "support": {\n' +
+ ' "issues": "https://github.com/testomat/terminal-colour/issues",\n' +
+ ' "source": "https://github.com/testomat/terminal-colour"\n' +
+ ' }\n' +
+ '}'
)
settings = new Settings(context)
@@ -532,97 +532,97 @@ describe('sync tests', () => {
expect(await fs.readFile(testFilePathB, 'utf8')).toBe(
'{\n' +
- ' "name": "testomat/terminal-colour",\n' +
- ' "type": "library",\n' +
- ' "description": "Return your terminal message in style! Change the text style, text color and text background color from the terminal, console or shell interface with ANSI color codes.",\n' +
- ' "keywords": [\n' +
- ' "narrowspark",\n' +
- ' "testomat",\n' +
- ' "color",\n' +
- ' "terminal",\n' +
- ' "colour",\n' +
- ' "ansi",\n' +
- ' "style",\n' +
- ' "truecolor",\n' +
- ' "color256",\n' +
- ' "color16"\n' +
- ' ],\n' +
- ' "homepage": "http://github.com/testomat/terminal-colour",\n' +
- ' "license": "MIT",\n' +
- ' "authors": [\n' +
- ' {\n' +
- ' "name": "Daniel Bannert",\n' +
- ' "email": "d.bannert@anolilab.de",\n' +
- ' "homepage": "http://www.anolilab.de",\n' +
- ' "role": "Developer"\n' +
- ' }\n' +
- ' ],\n' +
- ' "require": {\n' +
- ' "php": "^7.3",\n' +
- ' "thecodingmachine/safe": "^1.1.1"\n' +
- ' },\n' +
- ' "require-dev": {\n' +
- ' "ext-json": "*",\n' +
- ' "phpunit/phpunit": "^9.1.5",\n' +
- ' "thecodingmachine/phpstan-safe-rule": "^1.0.0"\n' +
- ' },\n' +
- ' "config": {\n' +
- ' "preferred-install": "dist",\n' +
- ' "sort-packages": true\n' +
- ' },\n' +
- ' "extra": {\n' +
- ' "branch-alias": {\n' +
- ' "dev-master": "1.1-dev"\n' +
- ' },\n' +
- ' "prefetcher": {\n' +
- ' "require": {\n' +
- ' "phpunit/phpunit": "^8.0 || ^9.0"\n' +
- ' }\n' +
- ' }\n' +
- ' },\n' +
- ' "autoload": {\n' +
- ' "psr-4": {\n' +
- ' "Testomat\\\\TerminalColour\\\\": "src/"\n' +
- ' },\n' +
- ' "exclude-from-classmap": [\n' +
- ' "/tests/"\n' +
- ' ]\n' +
- ' },\n' +
- ' "autoload-dev": {\n' +
- ' "psr-4": {\n' +
- ' "Testomat\\\\TerminalColour\\\\Tests\\\\": "tests/"\n' +
- ' }\n' +
- ' },\n' +
- ' "minimum-stability": "dev",\n' +
- ' "prefer-stable": true,\n' +
- ' "scripts": {\n' +
- ' "post-install-cmd": "composer --working-dir=./.build install --lock",\n' +
- ' "post-update-cmd": "composer --working-dir=./.build update --lock",\n' +
- ' "changelog": "composer --working-dir=./.build changelog",\n' +
- ' "coverage": [\n' +
- ' "phpunit --dump-xdebug-filter=./.build/phpunit/.xdebug-filter.php",\n' +
- ' "phpunit --prepend=./.build/phpunit/.xdebug-filter.php --coverage-html=./.build/phpunit/coverage"\n' +
- ' ],\n' +
- ' "cs": "composer --working-dir=./.build cs -- -v",\n' +
- ' "cs:check": "composer --working-dir=./.build cs:check -- -v",\n' +
- ' "infection": "composer --working-dir=./.build infection -- --min-covered-msi=73 --min-msi=61",\n' +
- ' "phpstan": "composer --working-dir=./.build phpstan -- --memory-limit=-1",\n' +
- ' "phpstan:baseline": "composer --working-dir=./.build phpstan:baseline -- --memory-limit=-1",\n' +
- ' "psalm": "composer --working-dir=./.build psalm",\n' +
- ' "psalm:baseline": "composer --working-dir=./.build psalm:baseline",\n' +
- ' "psalm:fix": "composer --working-dir=./.build psalm:fix",\n' +
- ' "rector-src": "composer --working-dir=./.build rector-src",\n' +
- ' "rector-src:fix": "composer --working-dir=./.build rector-src:fix",\n' +
- ' "rector-tests": "composer --working-dir=./.build rector-tests",\n' +
- ' "rector-tests:fix": "composer --working-dir=./.build rector-tests:fix",\n' +
- ' "req:check": "composer --working-dir=./.build req:check",\n' +
- ' "test": "phpunit"\n' +
- ' },\n' +
- ' "support": {\n' +
- ' "issues": "https://github.com/testomat/terminal-colour/issues",\n' +
- ' "source": "https://github.com/testomat/terminal-colour"\n' +
- ' }\n' +
- '}'
+ ' "name": "testomat/terminal-colour",\n' +
+ ' "type": "library",\n' +
+ ' "description": "Return your terminal message in style! Change the text style, text color and text background color from the terminal, console or shell interface with ANSI color codes.",\n' +
+ ' "keywords": [\n' +
+ ' "narrowspark",\n' +
+ ' "testomat",\n' +
+ ' "color",\n' +
+ ' "terminal",\n' +
+ ' "colour",\n' +
+ ' "ansi",\n' +
+ ' "style",\n' +
+ ' "truecolor",\n' +
+ ' "color256",\n' +
+ ' "color16"\n' +
+ ' ],\n' +
+ ' "homepage": "http://github.com/testomat/terminal-colour",\n' +
+ ' "license": "MIT",\n' +
+ ' "authors": [\n' +
+ ' {\n' +
+ ' "name": "Daniel Bannert",\n' +
+ ' "email": "d.bannert@anolilab.de",\n' +
+ ' "homepage": "http://www.anolilab.de",\n' +
+ ' "role": "Developer"\n' +
+ ' }\n' +
+ ' ],\n' +
+ ' "require": {\n' +
+ ' "php": "^7.3",\n' +
+ ' "thecodingmachine/safe": "^1.1.1"\n' +
+ ' },\n' +
+ ' "require-dev": {\n' +
+ ' "ext-json": "*",\n' +
+ ' "phpunit/phpunit": "^9.1.5",\n' +
+ ' "thecodingmachine/phpstan-safe-rule": "^1.0.0"\n' +
+ ' },\n' +
+ ' "config": {\n' +
+ ' "preferred-install": "dist",\n' +
+ ' "sort-packages": true\n' +
+ ' },\n' +
+ ' "extra": {\n' +
+ ' "branch-alias": {\n' +
+ ' "dev-master": "1.1-dev"\n' +
+ ' },\n' +
+ ' "prefetcher": {\n' +
+ ' "require": {\n' +
+ ' "phpunit/phpunit": "^8.0 || ^9.0"\n' +
+ ' }\n' +
+ ' }\n' +
+ ' },\n' +
+ ' "autoload": {\n' +
+ ' "psr-4": {\n' +
+ ' "Testomat\\\\TerminalColour\\\\": "src/"\n' +
+ ' },\n' +
+ ' "exclude-from-classmap": [\n' +
+ ' "/tests/"\n' +
+ ' ]\n' +
+ ' },\n' +
+ ' "autoload-dev": {\n' +
+ ' "psr-4": {\n' +
+ ' "Testomat\\\\TerminalColour\\\\Tests\\\\": "tests/"\n' +
+ ' }\n' +
+ ' },\n' +
+ ' "minimum-stability": "dev",\n' +
+ ' "prefer-stable": true,\n' +
+ ' "scripts": {\n' +
+ ' "post-install-cmd": "composer --working-dir=./.build install --lock",\n' +
+ ' "post-update-cmd": "composer --working-dir=./.build update --lock",\n' +
+ ' "changelog": "composer --working-dir=./.build changelog",\n' +
+ ' "coverage": [\n' +
+ ' "phpunit --dump-xdebug-filter=./.build/phpunit/.xdebug-filter.php",\n' +
+ ' "phpunit --prepend=./.build/phpunit/.xdebug-filter.php --coverage-html=./.build/phpunit/coverage"\n' +
+ ' ],\n' +
+ ' "cs": "composer --working-dir=./.build cs -- -v",\n' +
+ ' "cs:check": "composer --working-dir=./.build cs:check -- -v",\n' +
+ ' "infection": "composer --working-dir=./.build infection -- --min-covered-msi=73 --min-msi=61",\n' +
+ ' "phpstan": "composer --working-dir=./.build phpstan -- --memory-limit=-1",\n' +
+ ' "phpstan:baseline": "composer --working-dir=./.build phpstan:baseline -- --memory-limit=-1",\n' +
+ ' "psalm": "composer --working-dir=./.build psalm",\n' +
+ ' "psalm:baseline": "composer --working-dir=./.build psalm:baseline",\n' +
+ ' "psalm:fix": "composer --working-dir=./.build psalm:fix",\n' +
+ ' "rector-src": "composer --working-dir=./.build rector-src",\n' +
+ ' "rector-src:fix": "composer --working-dir=./.build rector-src:fix",\n' +
+ ' "rector-tests": "composer --working-dir=./.build rector-tests",\n' +
+ ' "rector-tests:fix": "composer --working-dir=./.build rector-tests:fix",\n' +
+ ' "req:check": "composer --working-dir=./.build req:check",\n' +
+ ' "test": "phpunit"\n' +
+ ' },\n' +
+ ' "support": {\n' +
+ ' "issues": "https://github.com/testomat/terminal-colour/issues",\n' +
+ ' "source": "https://github.com/testomat/terminal-colour"\n' +
+ ' }\n' +
+ '}'
)
})
})
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 00000000..1ac6c398
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,6394 @@
+dependencies:
+ '@actions/core': 1.2.4
+ '@actions/exec': 1.0.4
+ '@actions/tool-cache': 1.6.0
+ '@octokit/action': 3.0.5
+ '@octokit/core': 3.1.1
+ '@octokit/plugin-retry': 3.0.3
+ diff: 4.0.2
+ filehound: 1.17.4
+ fs-extra: 9.0.1
+ uuid: 8.3.0
+ which: 2.0.2
+ yaml: 1.10.0
+devDependencies:
+ '@commitlint/cli': 9.1.2
+ '@commitlint/config-conventional': 9.1.1
+ '@commitlint/core': 9.1.1
+ '@octokit/fixtures': 21.0.8
+ '@octokit/types': 5.2.0
+ '@types/bluebird': 3.5.32
+ '@types/diff': 4.0.2
+ '@types/fs-extra': 9.0.1
+ '@types/jest': 26.0.7
+ '@types/js-yaml': 3.12.5
+ '@types/node': 14.0.27
+ '@types/promise-retry': 1.1.3
+ '@types/tmp': 0.2.0
+ '@types/uuid': 8.0.0
+ '@types/which': 1.3.2
+ '@typescript-eslint/parser': 3.7.1_eslint@7.5.0+typescript@3.9.7
+ '@zeit/ncc': 0.22.3
+ conventional-changelog-conventionalcommits: 4.3.1
+ cz-conventional-changelog: 3.2.0
+ eslint: 7.5.0
+ eslint-plugin-github: 4.1.1_eslint@7.5.0+typescript@3.9.7
+ eslint-plugin-jest: 23.19.0_eslint@7.5.0+typescript@3.9.7
+ husky: 4.2.5
+ jest: 26.1.0
+ jest-circus: 26.1.0
+ js-yaml: 3.14.0
+ prettier: 2.0.5
+ ts-jest: 26.1.4_jest@26.1.0+typescript@3.9.7
+ typescript: 3.9.7
+lockfileVersion: 5.1
+packages:
+ /@actions/core/1.2.4:
+ dev: false
+ resolution:
+ integrity: sha512-YJCEq8BE3CdN8+7HPZ/4DxJjk/OkZV2FFIf+DlZTC/4iBlzYCD5yjRR6eiOS5llO11zbRltIRuKAjMKaWTE6cg==
+ /@actions/exec/1.0.4:
+ dependencies:
+ '@actions/io': 1.0.2
+ dev: false
+ resolution:
+ integrity: sha512-4DPChWow9yc9W3WqEbUj8Nr86xkpyE29ZzWjXucHItclLbEW6jr80Zx4nqv18QL6KK65+cifiQZXvnqgTV6oHw==
+ /@actions/http-client/1.0.8:
+ dependencies:
+ tunnel: 0.0.6
+ dev: false
+ resolution:
+ integrity: sha512-G4JjJ6f9Hb3Zvejj+ewLLKLf99ZC+9v+yCxoYf9vSyH+WkzPLB2LuUtRMGNkooMqdugGBFStIKXOuvH1W+EctA==
+ /@actions/io/1.0.2:
+ dev: false
+ resolution:
+ integrity: sha512-J8KuFqVPr3p6U8W93DOXlXW6zFvrQAJANdS+vw0YhusLIq+bszW8zmK2Fh1C2kDPX8FMvwIl1OUcFgvJoXLbAg==
+ /@actions/tool-cache/1.6.0:
+ dependencies:
+ '@actions/core': 1.2.4
+ '@actions/exec': 1.0.4
+ '@actions/http-client': 1.0.8
+ '@actions/io': 1.0.2
+ semver: 6.3.0
+ uuid: 3.4.0
+ dev: false
+ resolution:
+ integrity: sha512-+fyEBImPD3m5I0o6DflCO0NHY180LPoX8Lo6y4Iez+V17kO8kfkH0VHxb8mUdmD6hn9dWA9Ch1JA20fXoIYUeQ==
+ /@babel/code-frame/7.10.4:
+ dependencies:
+ '@babel/highlight': 7.10.4
+ dev: true
+ resolution:
+ integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==
+ /@babel/core/7.10.5:
+ dependencies:
+ '@babel/code-frame': 7.10.4
+ '@babel/generator': 7.10.5
+ '@babel/helper-module-transforms': 7.10.5
+ '@babel/helpers': 7.10.4
+ '@babel/parser': 7.10.5
+ '@babel/template': 7.10.4
+ '@babel/traverse': 7.10.5
+ '@babel/types': 7.10.5
+ convert-source-map: 1.7.0
+ debug: 4.1.1
+ gensync: 1.0.0-beta.1
+ json5: 2.1.3
+ lodash: 4.17.19
+ resolve: 1.17.0
+ semver: 5.7.1
+ source-map: 0.5.7
+ dev: true
+ engines:
+ node: '>=6.9.0'
+ resolution:
+ integrity: sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w==
+ /@babel/generator/7.10.5:
+ dependencies:
+ '@babel/types': 7.10.5
+ jsesc: 2.5.2
+ source-map: 0.5.7
+ dev: true
+ resolution:
+ integrity: sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==
+ /@babel/helper-function-name/7.10.4:
+ dependencies:
+ '@babel/helper-get-function-arity': 7.10.4
+ '@babel/template': 7.10.4
+ '@babel/types': 7.10.5
+ dev: true
+ resolution:
+ integrity: sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==
+ /@babel/helper-get-function-arity/7.10.4:
+ dependencies:
+ '@babel/types': 7.10.5
+ dev: true
+ resolution:
+ integrity: sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==
+ /@babel/helper-member-expression-to-functions/7.10.5:
+ dependencies:
+ '@babel/types': 7.10.5
+ dev: true
+ resolution:
+ integrity: sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==
+ /@babel/helper-module-imports/7.10.4:
+ dependencies:
+ '@babel/types': 7.10.5
+ dev: true
+ resolution:
+ integrity: sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==
+ /@babel/helper-module-transforms/7.10.5:
+ dependencies:
+ '@babel/helper-module-imports': 7.10.4
+ '@babel/helper-replace-supers': 7.10.4
+ '@babel/helper-simple-access': 7.10.4
+ '@babel/helper-split-export-declaration': 7.10.4
+ '@babel/template': 7.10.4
+ '@babel/types': 7.10.5
+ lodash: 4.17.19
+ dev: true
+ resolution:
+ integrity: sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==
+ /@babel/helper-optimise-call-expression/7.10.4:
+ dependencies:
+ '@babel/types': 7.10.5
+ dev: true
+ resolution:
+ integrity: sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==
+ /@babel/helper-plugin-utils/7.10.4:
+ dev: true
+ resolution:
+ integrity: sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==
+ /@babel/helper-replace-supers/7.10.4:
+ dependencies:
+ '@babel/helper-member-expression-to-functions': 7.10.5
+ '@babel/helper-optimise-call-expression': 7.10.4
+ '@babel/traverse': 7.10.5
+ '@babel/types': 7.10.5
+ dev: true
+ resolution:
+ integrity: sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==
+ /@babel/helper-simple-access/7.10.4:
+ dependencies:
+ '@babel/template': 7.10.4
+ '@babel/types': 7.10.5
+ dev: true
+ resolution:
+ integrity: sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==
+ /@babel/helper-split-export-declaration/7.10.4:
+ dependencies:
+ '@babel/types': 7.10.5
+ dev: true
+ resolution:
+ integrity: sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==
+ /@babel/helper-validator-identifier/7.10.4:
+ dev: true
+ resolution:
+ integrity: sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==
+ /@babel/helpers/7.10.4:
+ dependencies:
+ '@babel/template': 7.10.4
+ '@babel/traverse': 7.10.5
+ '@babel/types': 7.10.5
+ dev: true
+ resolution:
+ integrity: sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==
+ /@babel/highlight/7.10.4:
+ dependencies:
+ '@babel/helper-validator-identifier': 7.10.4
+ chalk: 2.4.2
+ js-tokens: 4.0.0
+ dev: true
+ resolution:
+ integrity: sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==
+ /@babel/parser/7.10.5:
+ dev: true
+ engines:
+ node: '>=6.0.0'
+ hasBin: true
+ resolution:
+ integrity: sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==
+ /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.10.5:
+ dependencies:
+ '@babel/core': 7.10.5
+ '@babel/helper-plugin-utils': 7.10.4
+ dev: true
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ resolution:
+ integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+ /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.10.5:
+ dependencies:
+ '@babel/core': 7.10.5
+ '@babel/helper-plugin-utils': 7.10.4
+ dev: true
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ resolution:
+ integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
+ /@babel/plugin-syntax-class-properties/7.10.4_@babel+core@7.10.5:
+ dependencies:
+ '@babel/core': 7.10.5
+ '@babel/helper-plugin-utils': 7.10.4
+ dev: true
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ resolution:
+ integrity: sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==
+ /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.10.5:
+ dependencies:
+ '@babel/core': 7.10.5
+ '@babel/helper-plugin-utils': 7.10.4
+ dev: true
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ resolution:
+ integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
+ /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.10.5:
+ dependencies:
+ '@babel/core': 7.10.5
+ '@babel/helper-plugin-utils': 7.10.4
+ dev: true
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ resolution:
+ integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+ /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.10.5:
+ dependencies:
+ '@babel/core': 7.10.5
+ '@babel/helper-plugin-utils': 7.10.4
+ dev: true
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ resolution:
+ integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
+ /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.10.5:
+ dependencies:
+ '@babel/core': 7.10.5
+ '@babel/helper-plugin-utils': 7.10.4
+ dev: true
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ resolution:
+ integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+ /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.10.5:
+ dependencies:
+ '@babel/core': 7.10.5
+ '@babel/helper-plugin-utils': 7.10.4
+ dev: true
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ resolution:
+ integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
+ /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.10.5:
+ dependencies:
+ '@babel/core': 7.10.5
+ '@babel/helper-plugin-utils': 7.10.4
+ dev: true
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ resolution:
+ integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+ /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.10.5:
+ dependencies:
+ '@babel/core': 7.10.5
+ '@babel/helper-plugin-utils': 7.10.4
+ dev: true
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ resolution:
+ integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+ /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.10.5:
+ dependencies:
+ '@babel/core': 7.10.5
+ '@babel/helper-plugin-utils': 7.10.4
+ dev: true
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ resolution:
+ integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+ /@babel/runtime/7.10.5:
+ dependencies:
+ regenerator-runtime: 0.13.7
+ dev: true
+ resolution:
+ integrity: sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg==
+ /@babel/template/7.10.4:
+ dependencies:
+ '@babel/code-frame': 7.10.4
+ '@babel/parser': 7.10.5
+ '@babel/types': 7.10.5
+ dev: true
+ resolution:
+ integrity: sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==
+ /@babel/traverse/7.10.5:
+ dependencies:
+ '@babel/code-frame': 7.10.4
+ '@babel/generator': 7.10.5
+ '@babel/helper-function-name': 7.10.4
+ '@babel/helper-split-export-declaration': 7.10.4
+ '@babel/parser': 7.10.5
+ '@babel/types': 7.10.5
+ debug: 4.1.1
+ globals: 11.12.0
+ lodash: 4.17.19
+ dev: true
+ resolution:
+ integrity: sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==
+ /@babel/types/7.10.5:
+ dependencies:
+ '@babel/helper-validator-identifier': 7.10.4
+ lodash: 4.17.19
+ to-fast-properties: 2.0.0
+ dev: true
+ resolution:
+ integrity: sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==
+ /@bcoe/v8-coverage/0.2.3:
+ dev: true
+ resolution:
+ integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+ /@cnakazawa/watch/1.0.4:
+ dependencies:
+ exec-sh: 0.3.4
+ minimist: 1.2.5
+ dev: true
+ engines:
+ node: '>=0.1.95'
+ hasBin: true
+ resolution:
+ integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==
+ /@commitlint/cli/9.1.2:
+ dependencies:
+ '@babel/runtime': 7.10.5
+ '@commitlint/format': 9.1.2
+ '@commitlint/lint': 9.1.2
+ '@commitlint/load': 9.1.2
+ '@commitlint/read': 9.1.2
+ chalk: 4.1.0
+ core-js: 3.6.5
+ get-stdin: 7.0.0
+ lodash: 4.17.19
+ resolve-from: 5.0.0
+ resolve-global: 1.0.0
+ yargs: 15.4.1
+ dev: true
+ engines:
+ node: '>=v8.17.0'
+ hasBin: true
+ resolution:
+ integrity: sha512-ctRrrPqjZ8r4Vc4FXpPaScEpkPwfvB0Us3NK2SD2AnLwXGMxOLFTabDmNySU1Xc40ud2CmJsaV8lpavvzs8ZZA==
+ /@commitlint/config-conventional/9.1.1:
+ dependencies:
+ conventional-changelog-conventionalcommits: 4.3.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-t/bvv8ofjj7V4W99eVDyuACaC7Ch4SYaukglBYt/K1Y9Ixg8mCBuFDMGRMhyZn4upUe1ls8l4SO3rjaVbYIjlg==
+ /@commitlint/core/9.1.1:
+ dependencies:
+ '@commitlint/format': 9.1.1
+ '@commitlint/lint': 9.1.1
+ '@commitlint/load': 9.1.1
+ '@commitlint/read': 9.1.1
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-9p7OUxeHtxNCULC3/R1t6cLGXBWYI0b4RSHL0A9Z42ZHkhXxUnG7+LA9iBObUtnHaPKcRD6ktJuCijHcaHee6Q==
+ /@commitlint/ensure/9.1.1:
+ dependencies:
+ '@commitlint/types': 9.1.1
+ lodash: 4.17.19
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-dCvev16s7pTqM3Qka8WkWkjZ0lKu3cZ8q+EK34gXR90v7rkssVbPvbyttTfTWTvmQTqZY1zNkvMqbOc8V7pXwA==
+ /@commitlint/ensure/9.1.2:
+ dependencies:
+ '@commitlint/types': 9.1.2
+ lodash: 4.17.19
+ dev: true
+ engines:
+ node: '>=v8.17.0'
+ resolution:
+ integrity: sha512-hwQICwpNSTsZgj/1/SdPvYAzhwjwgCJI4vLbT879+Jc+AJ6sj2bUDGw/F89vzgKz1VnaMm4D65bNhoWhG3pdhQ==
+ /@commitlint/execute-rule/9.1.1:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-kCncHMXfVDfmUx1NExl7T+s7udAWEOh039DFGR9R5MWoy+zm2cJsCdsbWFFuNbcPWCKor57ywdIUN2t048P6Yg==
+ /@commitlint/execute-rule/9.1.2:
+ dev: true
+ engines:
+ node: '>=v8.17.0'
+ resolution:
+ integrity: sha512-NGbeo0KCVYo1yj9vVPFHv6RGFpIF6wcQxpFYUKGIzZVV9Vz1WyiKS689JXa99Dt1aN0cZlEJJLnTNDIgYls0Vg==
+ /@commitlint/format/9.1.1:
+ dependencies:
+ chalk: 4.1.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-CLVXltSA8U7Sr+8ad1hBCFFL5GSdVWZsFgttt1hNT6CiOtPHV9e3AeWK0TACFcXWIl+iFKdRNfNrYM77RBJN0A==
+ /@commitlint/format/9.1.2:
+ dependencies:
+ '@commitlint/types': 9.1.2
+ chalk: 4.1.0
+ dev: true
+ engines:
+ node: '>=v8.17.0'
+ resolution:
+ integrity: sha512-+ZWTOSGEU6dbn3NRh1q7sY5K5QLiSs7E2uSzuYnWHXcQk8nlTvnE0ibwMCQxdKLaOTZiN57fHM/7M9Re2gsRuw==
+ /@commitlint/is-ignored/9.1.1:
+ dependencies:
+ '@commitlint/types': 9.1.1
+ semver: 7.3.2
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-A2ernvkAIfkGh53cNSuuMlTVZyJ58BYbkUw8h34pG0uS/GDteUyh7K3hgRqMmrwoL/DNBEp5earRM6nBYgLX1Q==
+ /@commitlint/is-ignored/9.1.2:
+ dependencies:
+ '@commitlint/types': 9.1.2
+ semver: 7.3.2
+ dev: true
+ engines:
+ node: '>=v8.17.0'
+ resolution:
+ integrity: sha512-423W/+Ro+Cc8cg81+t9gds1EscMZNjnGT31nKDvxVxJxXiXQsYYoFEQbU+nfUrRGQsUikEgEJ3ppVGr1linvcQ==
+ /@commitlint/lint/9.1.1:
+ dependencies:
+ '@commitlint/is-ignored': 9.1.1
+ '@commitlint/parse': 9.1.1
+ '@commitlint/rules': 9.1.1
+ '@commitlint/types': 9.1.1
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-2g2OL8J5dfzH3VY004i506DmRbCJR1W49JbYsTGuTAv1y9f0s8ocV2Wbfh7WJ8YZQabSHXTMZFQJjsvMQ+b0Hw==
+ /@commitlint/lint/9.1.2:
+ dependencies:
+ '@commitlint/is-ignored': 9.1.2
+ '@commitlint/parse': 9.1.2
+ '@commitlint/rules': 9.1.2
+ '@commitlint/types': 9.1.2
+ dev: true
+ engines:
+ node: '>=v8.17.0'
+ resolution:
+ integrity: sha512-XvggqHZ4XSTKOgzJhCzz52cWRRO57QQnEviwGj0qnD4jdwC+8h2u9LNZwoa2tGAuaNM3nSm//wNK7FRZhgiiFA==
+ /@commitlint/load/9.1.1:
+ dependencies:
+ '@commitlint/execute-rule': 9.1.1
+ '@commitlint/resolve-extends': 9.1.1
+ '@commitlint/types': 9.1.1
+ chalk: 4.1.0
+ cosmiconfig: 6.0.0
+ lodash: 4.17.19
+ resolve-from: 5.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-RCIX44M8nq3bW98vuxA6C2rM0wAnZlneFls2OVi5l2BvD/rsQ2R9CZYwPt/MYU6RbwMmlGhkuHdScwK6pJeUqA==
+ /@commitlint/load/9.1.2:
+ dependencies:
+ '@commitlint/execute-rule': 9.1.2
+ '@commitlint/resolve-extends': 9.1.2
+ '@commitlint/types': 9.1.2
+ chalk: 4.1.0
+ cosmiconfig: 6.0.0
+ lodash: 4.17.19
+ resolve-from: 5.0.0
+ dev: true
+ engines:
+ node: '>=v8.17.0'
+ resolution:
+ integrity: sha512-FPL82xBuF7J3EJ57kLVoligQP4BFRwrknooP+vNT787AXmQ/Fddc/iYYwHwy67pNkk5N++/51UyDl/CqiHb6nA==
+ /@commitlint/message/9.1.1:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-52Li4BNSY55I0fAq1s8cnxIK9Jneozdh4oonLlDzqWvgFq8znsHb9LWmi46K0bsCQT3CRUnMU+GPnikghIMRKQ==
+ /@commitlint/message/9.1.2:
+ dev: true
+ engines:
+ node: '>=v8.17.0'
+ resolution:
+ integrity: sha512-ndlx5z7bPVLG347oYJUHuQ41eTcsw+aUYT1ZwQyci0Duy2atpuoeeSw9SuM1PjufzRCpb6ExzFEgGzcCRKAJsg==
+ /@commitlint/parse/9.1.1:
+ dependencies:
+ conventional-changelog-angular: 5.0.10
+ conventional-commits-parser: 3.1.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-WxvsEi7sMBh8vynamTiHvUOsPOUZ5308pi0gJ5q+DnLY+JPx0Bbxdho9pjyVc3S0bymPCbOrk2gTIbmaTokIRQ==
+ /@commitlint/parse/9.1.2:
+ dependencies:
+ conventional-changelog-angular: 5.0.10
+ conventional-commits-parser: 3.1.0
+ dev: true
+ engines:
+ node: '>=v8.17.0'
+ resolution:
+ integrity: sha512-d+/VYbkotctW+lzDpus/R6xTerOqFQkW1myH+3PwnqYSE6JU/uHT4MlZNGJBv8pX9SPlR66t6X9puFobqtezEw==
+ /@commitlint/read/9.1.1:
+ dependencies:
+ '@commitlint/top-level': 9.1.1
+ fs-extra: 8.1.0
+ git-raw-commits: 2.0.7
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-cg75klW1WNBAJZABxacf2FhxAlP0di7xs/wuTqPNq0OTpblhY5s2BoS7eO0UlQi1K14Unx7b9+Sb7sjuE9Viyw==
+ /@commitlint/read/9.1.2:
+ dependencies:
+ '@commitlint/top-level': 9.1.2
+ fs-extra: 8.1.0
+ git-raw-commits: 2.0.7
+ dev: true
+ engines:
+ node: '>=v8.17.0'
+ resolution:
+ integrity: sha512-C2sNBQOqeQXMxpWtRnXYKYB3D9yuybPtQNY/P67A6o8XH/UMHkFaUTyIx1KRgu0IG0yTTItRt46FGnsMWLotvA==
+ /@commitlint/resolve-extends/9.1.1:
+ dependencies:
+ import-fresh: 3.2.1
+ lodash: 4.17.19
+ resolve-from: 5.0.0
+ resolve-global: 1.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-IxxNaSUT+dPhSCQPAMpQyHQlcSVikDxQWJFP6uwGJUU5rQff+0yQTuC3taWI2NWaATukjNWboAbH2vgBDnrDrg==
+ /@commitlint/resolve-extends/9.1.2:
+ dependencies:
+ import-fresh: 3.2.1
+ lodash: 4.17.19
+ resolve-from: 5.0.0
+ resolve-global: 1.0.0
+ dev: true
+ engines:
+ node: '>=v8.17.0'
+ resolution:
+ integrity: sha512-HcoL+qFGmWEu9VM4fY0HI+VzF4yHcg3x+9Hx6pYFZ+r2wLbnKs964y0v68oyMO/mS/46MVoLNXZGR8U3adpadg==
+ /@commitlint/rules/9.1.1:
+ dependencies:
+ '@commitlint/ensure': 9.1.1
+ '@commitlint/message': 9.1.1
+ '@commitlint/to-lines': 9.1.1
+ '@commitlint/types': 9.1.1
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-QicTJ9v4g8WbJ71gu2ypvbdEP6Q+cJYlLPrb6ilNhtOMCyn6ndXSlCMpcQNw84d9ORyd28okzhDZZBSqX5hslg==
+ /@commitlint/rules/9.1.2:
+ dependencies:
+ '@commitlint/ensure': 9.1.2
+ '@commitlint/message': 9.1.2
+ '@commitlint/to-lines': 9.1.2
+ '@commitlint/types': 9.1.2
+ dev: true
+ engines:
+ node: '>=v8.17.0'
+ resolution:
+ integrity: sha512-1vecFuzqVqjiT57ocXq1bL8V6GEF1NZs3BR0dQzObaqHftImIxBVII299gasckTkcuxNc8M+7XxZyKxUthukpQ==
+ /@commitlint/to-lines/9.1.1:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-JFKfpehPL3Qrlo6DpIsuJvdtR1wSjdbXD3liphvFTAFWo64yYC/jmnTdy0UqWIhrV1jcxP1LzNejIuRt6hsCXQ==
+ /@commitlint/to-lines/9.1.2:
+ dev: true
+ engines:
+ node: '>=v8.17.0'
+ resolution:
+ integrity: sha512-o4zWcMf9EnzA3MOqx01780SgrKq5hqDJmUBPk30g6an0XcDuDy3OSZHHTJFdzsg4V9FjC4OY44sFeK7GN7NaxQ==
+ /@commitlint/top-level/9.1.1:
+ dependencies:
+ find-up: 4.1.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-pIgAbGqHbOunTGiUzBPhIKfXrTWdCrVwsimECXy/If5XaZ3GHhxiiA7BxsWFlAN1UZ6PgVMPgymKU0kx2D5A/w==
+ /@commitlint/top-level/9.1.2:
+ dependencies:
+ find-up: 4.1.0
+ dev: true
+ engines:
+ node: '>=v8.17.0'
+ resolution:
+ integrity: sha512-KMPP5xVePcz3B1dKqcZdU4FZBVOkT+bG3ip4RQX2TeCJoomMkTjd0utALs7rpTGLID6BXbwwXepZCZJREjR/Bw==
+ /@commitlint/types/9.1.1:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-SXY8bCQ1qacJ8AUTUxjabY8G6OjSmMPLN9MBCzGaKOjpPNX6z8zbXTbk9oU3GHZLtcxweWLCi2n49IRS4iQlwg==
+ /@commitlint/types/9.1.2:
+ dev: true
+ engines:
+ node: '>=v8.17.0'
+ resolution:
+ integrity: sha512-r3fwVbVH+M8W0qYlBBZFsUwKe6NT5qvz+EmU7sr8VeN1cQ63z+3cfXyTo7WGGEMEgKiT0jboNAK3b1FZp8k9LQ==
+ /@istanbuljs/load-nyc-config/1.1.0:
+ dependencies:
+ camelcase: 5.3.1
+ find-up: 4.1.0
+ get-package-type: 0.1.0
+ js-yaml: 3.14.0
+ resolve-from: 5.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
+ /@istanbuljs/schema/0.1.2:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==
+ /@jest/console/26.1.0:
+ dependencies:
+ '@jest/types': 26.1.0
+ chalk: 4.1.0
+ jest-message-util: 26.1.0
+ jest-util: 26.1.0
+ slash: 3.0.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-+0lpTHMd/8pJp+Nd4lyip+/Iyf2dZJvcCqrlkeZQoQid+JlThA4M9vxHtheyrQ99jJTMQam+es4BcvZ5W5cC3A==
+ /@jest/core/26.1.0:
+ dependencies:
+ '@jest/console': 26.1.0
+ '@jest/reporters': 26.1.0
+ '@jest/test-result': 26.1.0
+ '@jest/transform': 26.1.0
+ '@jest/types': 26.1.0
+ ansi-escapes: 4.3.1
+ chalk: 4.1.0
+ exit: 0.1.2
+ graceful-fs: 4.2.4
+ jest-changed-files: 26.1.0
+ jest-config: 26.1.0
+ jest-haste-map: 26.1.0
+ jest-message-util: 26.1.0
+ jest-regex-util: 26.0.0
+ jest-resolve: 26.1.0_jest-resolve@26.1.0
+ jest-resolve-dependencies: 26.1.0
+ jest-runner: 26.1.0
+ jest-runtime: 26.1.0
+ jest-snapshot: 26.1.0
+ jest-util: 26.1.0
+ jest-validate: 26.1.0
+ jest-watcher: 26.1.0
+ micromatch: 4.0.2
+ p-each-series: 2.1.0
+ rimraf: 3.0.2
+ slash: 3.0.0
+ strip-ansi: 6.0.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-zyizYmDJOOVke4OO/De//aiv8b07OwZzL2cfsvWF3q9YssfpcKfcnZAwDY8f+A76xXSMMYe8i/f/LPocLlByfw==
+ /@jest/environment/26.1.0:
+ dependencies:
+ '@jest/fake-timers': 26.1.0
+ '@jest/types': 26.1.0
+ jest-mock: 26.1.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-86+DNcGongbX7ai/KE/S3/NcUVZfrwvFzOOWX/W+OOTvTds7j07LtC+MgGydH5c8Ri3uIrvdmVgd1xFD5zt/xA==
+ /@jest/fake-timers/26.1.0:
+ dependencies:
+ '@jest/types': 26.1.0
+ '@sinonjs/fake-timers': 6.0.1
+ jest-message-util: 26.1.0
+ jest-mock: 26.1.0
+ jest-util: 26.1.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-Y5F3kBVWxhau3TJ825iuWy++BAuQzK/xEa+wD9vDH3RytW9f2DbMVodfUQC54rZDX3POqdxCgcKdgcOL0rYUpA==
+ /@jest/globals/26.1.0:
+ dependencies:
+ '@jest/environment': 26.1.0
+ '@jest/types': 26.1.0
+ expect: 26.1.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-MKiHPNaT+ZoG85oMaYUmGHEqu98y3WO2yeIDJrs2sJqHhYOy3Z6F7F/luzFomRQ8SQ1wEkmahFAz2291Iv8EAw==
+ /@jest/reporters/26.1.0:
+ dependencies:
+ '@bcoe/v8-coverage': 0.2.3
+ '@jest/console': 26.1.0
+ '@jest/test-result': 26.1.0
+ '@jest/transform': 26.1.0
+ '@jest/types': 26.1.0
+ chalk: 4.1.0
+ collect-v8-coverage: 1.0.1
+ exit: 0.1.2
+ glob: 7.1.6
+ graceful-fs: 4.2.4
+ istanbul-lib-coverage: 3.0.0
+ istanbul-lib-instrument: 4.0.3
+ istanbul-lib-report: 3.0.0
+ istanbul-lib-source-maps: 4.0.0
+ istanbul-reports: 3.0.2
+ jest-haste-map: 26.1.0
+ jest-resolve: 26.1.0_jest-resolve@26.1.0
+ jest-util: 26.1.0
+ jest-worker: 26.1.0
+ slash: 3.0.0
+ source-map: 0.6.1
+ string-length: 4.0.1
+ terminal-link: 2.1.1
+ v8-to-istanbul: 4.1.4
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ optionalDependencies:
+ node-notifier: 7.0.2
+ resolution:
+ integrity: sha512-SVAysur9FOIojJbF4wLP0TybmqwDkdnFxHSPzHMMIYyBtldCW9gG+Q5xWjpMFyErDiwlRuPyMSJSU64A67Pazg==
+ /@jest/source-map/26.1.0:
+ dependencies:
+ callsites: 3.1.0
+ graceful-fs: 4.2.4
+ source-map: 0.6.1
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-XYRPYx4eEVX15cMT9mstnO7hkHP3krNtKfxUYd8L7gbtia8JvZZ6bMzSwa6IQJENbudTwKMw5R1BePRD+bkEmA==
+ /@jest/test-result/26.1.0:
+ dependencies:
+ '@jest/console': 26.1.0
+ '@jest/types': 26.1.0
+ '@types/istanbul-lib-coverage': 2.0.3
+ collect-v8-coverage: 1.0.1
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-Xz44mhXph93EYMA8aYDz+75mFbarTV/d/x0yMdI3tfSRs/vh4CqSxgzVmCps1fPkHDCtn0tU8IH9iCKgGeGpfw==
+ /@jest/test-sequencer/26.1.0:
+ dependencies:
+ '@jest/test-result': 26.1.0
+ graceful-fs: 4.2.4
+ jest-haste-map: 26.1.0
+ jest-runner: 26.1.0
+ jest-runtime: 26.1.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-Z/hcK+rTq56E6sBwMoQhSRDVjqrGtj1y14e2bIgcowARaIE1SgOanwx6gvY4Q9gTKMoZQXbXvptji+q5GYxa6Q==
+ /@jest/transform/26.1.0:
+ dependencies:
+ '@babel/core': 7.10.5
+ '@jest/types': 26.1.0
+ babel-plugin-istanbul: 6.0.0
+ chalk: 4.1.0
+ convert-source-map: 1.7.0
+ fast-json-stable-stringify: 2.1.0
+ graceful-fs: 4.2.4
+ jest-haste-map: 26.1.0
+ jest-regex-util: 26.0.0
+ jest-util: 26.1.0
+ micromatch: 4.0.2
+ pirates: 4.0.1
+ slash: 3.0.0
+ source-map: 0.6.1
+ write-file-atomic: 3.0.3
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-ICPm6sUXmZJieq45ix28k0s+d/z2E8CHDsq+WwtWI6kW8m7I8kPqarSEcUN86entHQ570ZBRci5OWaKL0wlAWw==
+ /@jest/types/25.5.0:
+ dependencies:
+ '@types/istanbul-lib-coverage': 2.0.3
+ '@types/istanbul-reports': 1.1.2
+ '@types/yargs': 15.0.5
+ chalk: 3.0.0
+ dev: true
+ engines:
+ node: '>= 8.3'
+ resolution:
+ integrity: sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==
+ /@jest/types/26.1.0:
+ dependencies:
+ '@types/istanbul-lib-coverage': 2.0.3
+ '@types/istanbul-reports': 1.1.2
+ '@types/yargs': 15.0.5
+ chalk: 4.1.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==
+ /@octokit/action/3.0.5:
+ dependencies:
+ '@octokit/auth-action': 1.2.2
+ '@octokit/core': 3.1.1
+ '@octokit/plugin-paginate-rest': 2.3.0
+ '@octokit/plugin-rest-endpoint-methods': 4.1.2
+ '@octokit/types': 5.2.0
+ dev: false
+ resolution:
+ integrity: sha512-JvNp6iO4T7zZEiVx+vB6dCiBHLCbx6sqLr0ze/gRUGIQp0FuBUASwwpdP7YrjY0KFahYZTKPIb8fcgWcU86fRw==
+ /@octokit/auth-action/1.2.2:
+ dependencies:
+ '@octokit/auth-token': 2.4.2
+ '@octokit/types': 5.2.0
+ dev: false
+ resolution:
+ integrity: sha512-G3xcXQI+TRlvkcCe3uN7heklS0sDbHosbStkcoCBzuOQxDSuOB5nGIjJcWCnp4YO7/L9hKDwsC6ct/6eR9GcnQ==
+ /@octokit/auth-token/2.4.2:
+ dependencies:
+ '@octokit/types': 5.2.0
+ dev: false
+ resolution:
+ integrity: sha512-jE/lE/IKIz2v1+/P0u4fJqv0kYwXOTujKemJMFr6FeopsxlIK3+wKDCJGnysg81XID5TgZQbIfuJ5J0lnTiuyQ==
+ /@octokit/core/3.1.1:
+ dependencies:
+ '@octokit/auth-token': 2.4.2
+ '@octokit/graphql': 4.5.3
+ '@octokit/request': 5.4.7
+ '@octokit/types': 5.2.0
+ before-after-hook: 2.1.0
+ universal-user-agent: 6.0.0
+ dev: false
+ resolution:
+ integrity: sha512-cQ2HGrtyNJ1IBxpTP1U5m/FkMAJvgw7d2j1q3c9P0XUuYilEgF6e4naTpsgm4iVcQeOnccZlw7XHRIUBy0ymcg==
+ /@octokit/endpoint/6.0.5:
+ dependencies:
+ '@octokit/types': 5.2.0
+ is-plain-object: 4.1.1
+ universal-user-agent: 6.0.0
+ dev: false
+ resolution:
+ integrity: sha512-70K5u6zd45ItOny6aHQAsea8HHQjlQq85yqOMe+Aj8dkhN2qSJ9T+Q3YjUjEYfPRBcuUWNgMn62DQnP/4LAIiQ==
+ /@octokit/fixtures/21.0.8:
+ dependencies:
+ json-diff: 0.5.4
+ lodash: 4.17.19
+ nock: 13.0.3
+ url-template: 2.0.8
+ dev: true
+ resolution:
+ integrity: sha512-yxVYCemxzYrKETLr3G+LzFrztUT9nlNX2f8ADLdAtn+8krgPTvvsBCsjpdML0VUO19Zr4zRuvxwbAy88bhDYrA==
+ /@octokit/graphql/4.5.3:
+ dependencies:
+ '@octokit/request': 5.4.7
+ '@octokit/types': 5.2.0
+ universal-user-agent: 6.0.0
+ dev: false
+ resolution:
+ integrity: sha512-JyYvi3j2tOb5ofASEpcg1Advs07H+Ag+I+ez7buuZfNVAmh1IYcDTuxd4gnYH8S2PSGu+f5IdDGxMmkK+5zsdA==
+ /@octokit/plugin-paginate-rest/2.3.0:
+ dependencies:
+ '@octokit/types': 5.2.0
+ dev: false
+ resolution:
+ integrity: sha512-Ye2ZJreP0ZlqJQz8fz+hXvrEAEYK4ay7br1eDpWzr6j76VXs/gKqxFcH8qRzkB3fo/2xh4Vy9VtGii4ZDc9qlA==
+ /@octokit/plugin-rest-endpoint-methods/4.1.2:
+ dependencies:
+ '@octokit/types': 5.2.0
+ deprecation: 2.3.1
+ dev: false
+ resolution:
+ integrity: sha512-PTI7wpbGEZ2IR87TVh+TNWaLcgX/RsZQalFbQCq8XxYUrQ36RHyERrHSNXFy5gkWpspUAOYRSV707JJv6BhqJA==
+ /@octokit/plugin-retry/3.0.3:
+ dependencies:
+ '@octokit/types': 5.2.0
+ bottleneck: 2.19.5
+ dev: false
+ resolution:
+ integrity: sha512-RFvcBg4JGyfWTWE35EIF7jf/eglIk5MuvfygzdIMLIVK3/4Ywz3X1x9Ri75nlyAmk53EpVWB4DwM/xEB1NXxXA==
+ /@octokit/request-error/2.0.2:
+ dependencies:
+ '@octokit/types': 5.2.0
+ deprecation: 2.3.1
+ once: 1.4.0
+ dev: false
+ resolution:
+ integrity: sha512-2BrmnvVSV1MXQvEkrb9zwzP0wXFNbPJij922kYBTLIlIafukrGOb+ABBT2+c6wZiuyWDH1K1zmjGQ0toN/wMWw==
+ /@octokit/request/5.4.7:
+ dependencies:
+ '@octokit/endpoint': 6.0.5
+ '@octokit/request-error': 2.0.2
+ '@octokit/types': 5.2.0
+ deprecation: 2.3.1
+ is-plain-object: 4.1.1
+ node-fetch: 2.6.0
+ once: 1.4.0
+ universal-user-agent: 6.0.0
+ dev: false
+ resolution:
+ integrity: sha512-FN22xUDP0i0uF38YMbOfx6TotpcENP5W8yJM1e/LieGXn6IoRxDMnBf7tx5RKSW4xuUZ/1P04NFZy5iY3Rax1A==
+ /@octokit/types/5.2.0:
+ dependencies:
+ '@types/node': 14.0.27
+ resolution:
+ integrity: sha512-XjOk9y4m8xTLIKPe1NFxNWBdzA2/z3PFFA/bwf4EoH6oS8hM0Y46mEa4Cb+KCyj/tFDznJFahzQ0Aj3o1FYq4A==
+ /@sinonjs/commons/1.8.1:
+ dependencies:
+ type-detect: 4.0.8
+ dev: true
+ resolution:
+ integrity: sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==
+ /@sinonjs/fake-timers/6.0.1:
+ dependencies:
+ '@sinonjs/commons': 1.8.1
+ dev: true
+ resolution:
+ integrity: sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==
+ /@types/babel__core/7.1.9:
+ dependencies:
+ '@babel/parser': 7.10.5
+ '@babel/types': 7.10.5
+ '@types/babel__generator': 7.6.1
+ '@types/babel__template': 7.0.2
+ '@types/babel__traverse': 7.0.13
+ dev: true
+ resolution:
+ integrity: sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw==
+ /@types/babel__generator/7.6.1:
+ dependencies:
+ '@babel/types': 7.10.5
+ dev: true
+ resolution:
+ integrity: sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==
+ /@types/babel__template/7.0.2:
+ dependencies:
+ '@babel/parser': 7.10.5
+ '@babel/types': 7.10.5
+ dev: true
+ resolution:
+ integrity: sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==
+ /@types/babel__traverse/7.0.13:
+ dependencies:
+ '@babel/types': 7.10.5
+ dev: true
+ resolution:
+ integrity: sha512-i+zS7t6/s9cdQvbqKDARrcbrPvtJGlbYsMkazo03nTAK3RX9FNrLllXys22uiTGJapPOTZTQ35nHh4ISph4SLQ==
+ /@types/bluebird/3.5.32:
+ dev: true
+ resolution:
+ integrity: sha512-dIOxFfI0C+jz89g6lQ+TqhGgPQ0MxSnh/E4xuC0blhFtyW269+mPG5QeLgbdwst/LvdP8o1y0o/Gz5EHXLec/g==
+ /@types/color-name/1.1.1:
+ dev: true
+ resolution:
+ integrity: sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
+ /@types/diff/4.0.2:
+ dev: true
+ resolution:
+ integrity: sha512-mIenTfsIe586/yzsyfql69KRnA75S8SVXQbTLpDejRrjH0QSJcpu3AUOi/Vjnt9IOsXKxPhJfGpQUNMueIU1fQ==
+ /@types/eslint-visitor-keys/1.0.0:
+ dev: true
+ resolution:
+ integrity: sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
+ /@types/fs-extra/9.0.1:
+ dependencies:
+ '@types/node': 14.0.27
+ dev: true
+ resolution:
+ integrity: sha512-B42Sxuaz09MhC3DDeW5kubRcQ5by4iuVQ0cRRWM2lggLzAa/KVom0Aft/208NgMvNQQZ86s5rVcqDdn/SH0/mg==
+ /@types/graceful-fs/4.1.3:
+ dependencies:
+ '@types/node': 14.0.27
+ dev: true
+ resolution:
+ integrity: sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ==
+ /@types/istanbul-lib-coverage/2.0.3:
+ dev: true
+ resolution:
+ integrity: sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==
+ /@types/istanbul-lib-report/3.0.0:
+ dependencies:
+ '@types/istanbul-lib-coverage': 2.0.3
+ dev: true
+ resolution:
+ integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
+ /@types/istanbul-reports/1.1.2:
+ dependencies:
+ '@types/istanbul-lib-coverage': 2.0.3
+ '@types/istanbul-lib-report': 3.0.0
+ dev: true
+ resolution:
+ integrity: sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==
+ /@types/jest/26.0.7:
+ dependencies:
+ jest-diff: 25.5.0
+ pretty-format: 25.5.0
+ dev: true
+ resolution:
+ integrity: sha512-+x0077/LoN6MjqBcVOe1y9dpryWnfDZ+Xfo3EqGeBcfPRJlQp3Lw62RvNlWxuGv7kOEwlHriAa54updi3Jvvwg==
+ /@types/js-yaml/3.12.5:
+ dev: true
+ resolution:
+ integrity: sha512-JCcp6J0GV66Y4ZMDAQCXot4xprYB+Zfd3meK9+INSJeVZwJmHAW30BBEEkPzXswMXuiyReUGOP3GxrADc9wPww==
+ /@types/json-schema/7.0.5:
+ dev: true
+ resolution:
+ integrity: sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==
+ /@types/json5/0.0.29:
+ dev: true
+ resolution:
+ integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
+ /@types/minimist/1.2.0:
+ dev: true
+ resolution:
+ integrity: sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=
+ /@types/node/14.0.27:
+ resolution:
+ integrity: sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g==
+ /@types/normalize-package-data/2.4.0:
+ dev: true
+ resolution:
+ integrity: sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==
+ /@types/parse-json/4.0.0:
+ dev: true
+ resolution:
+ integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+ /@types/prettier/2.0.2:
+ dev: true
+ resolution:
+ integrity: sha512-IkVfat549ggtkZUthUzEX49562eGikhSYeVGX97SkMFn+sTZrgRewXjQ4tPKFPCykZHkX1Zfd9OoELGqKU2jJA==
+ /@types/promise-retry/1.1.3:
+ dependencies:
+ '@types/retry': 0.12.0
+ dev: true
+ resolution:
+ integrity: sha512-LxIlEpEX6frE3co3vCO2EUJfHIta1IOmhDlcAsR4GMMv9hev1iTI9VwberVGkePJAuLZs5rMucrV8CziCfuJMw==
+ /@types/retry/0.12.0:
+ dev: true
+ resolution:
+ integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==
+ /@types/stack-utils/1.0.1:
+ dev: true
+ resolution:
+ integrity: sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
+ /@types/tmp/0.2.0:
+ dev: true
+ resolution:
+ integrity: sha512-flgpHJjntpBAdJD43ShRosQvNC0ME97DCfGvZEDlAThQmnerRXrLbX6YgzRBQCZTthET9eAWFAMaYP0m0Y4HzQ==
+ /@types/uuid/8.0.0:
+ dev: true
+ resolution:
+ integrity: sha512-xSQfNcvOiE5f9dyd4Kzxbof1aTrLobL278pGLKOZI6esGfZ7ts9Ka16CzIN6Y8hFHE1C7jIBZokULhK1bOgjRw==
+ /@types/which/1.3.2:
+ dev: true
+ resolution:
+ integrity: sha512-8oDqyLC7eD4HM307boe2QWKyuzdzWBj56xI/imSl2cpL+U3tCMaTAkMJ4ee5JBZ/FsOJlvRGeIShiZDAl1qERA==
+ /@types/yargs-parser/15.0.0:
+ dev: true
+ resolution:
+ integrity: sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==
+ /@types/yargs/15.0.5:
+ dependencies:
+ '@types/yargs-parser': 15.0.0
+ dev: true
+ resolution:
+ integrity: sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==
+ /@typescript-eslint/eslint-plugin/3.7.1_6426e42c89f0c157ed209e0bfffbcf90:
+ dependencies:
+ '@typescript-eslint/experimental-utils': 3.7.1_eslint@7.5.0+typescript@3.9.7
+ '@typescript-eslint/parser': 3.7.1_eslint@7.5.0+typescript@3.9.7
+ debug: 4.1.1
+ eslint: 7.5.0
+ functional-red-black-tree: 1.0.1
+ regexpp: 3.1.0
+ semver: 7.3.2
+ tsutils: 3.17.1_typescript@3.9.7
+ typescript: 3.9.7
+ dev: true
+ engines:
+ node: ^10.12.0 || >=12.0.0
+ peerDependencies:
+ '@typescript-eslint/parser': ^3.0.0
+ eslint: ^5.0.0 || ^6.0.0 || ^7.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ resolution:
+ integrity: sha512-3DB9JDYkMrc8Au00rGFiJLK2Ja9CoMP6Ut0sHsXp3ZtSugjNxvSSHTnKLfo4o+QmjYBJqEznDqsG1zj4F2xnsg==
+ /@typescript-eslint/experimental-utils/2.34.0_eslint@7.5.0+typescript@3.9.7:
+ dependencies:
+ '@types/json-schema': 7.0.5
+ '@typescript-eslint/typescript-estree': 2.34.0_typescript@3.9.7
+ eslint: 7.5.0
+ eslint-scope: 5.1.0
+ eslint-utils: 2.1.0
+ dev: true
+ engines:
+ node: ^8.10.0 || ^10.13.0 || >=11.10.1
+ peerDependencies:
+ eslint: '*'
+ typescript: '*'
+ resolution:
+ integrity: sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==
+ /@typescript-eslint/experimental-utils/3.7.1_eslint@7.5.0+typescript@3.9.7:
+ dependencies:
+ '@types/json-schema': 7.0.5
+ '@typescript-eslint/types': 3.7.1
+ '@typescript-eslint/typescript-estree': 3.7.1_typescript@3.9.7
+ eslint: 7.5.0
+ eslint-scope: 5.1.0
+ eslint-utils: 2.1.0
+ dev: true
+ engines:
+ node: ^10.12.0 || >=12.0.0
+ peerDependencies:
+ eslint: '*'
+ typescript: '*'
+ resolution:
+ integrity: sha512-TqE97pv7HrqWcGJbLbZt1v59tcqsSVpWTOf1AqrWK7n8nok2sGgVtYRuGXeNeLw3wXlLEbY1MKP3saB2HsO/Ng==
+ /@typescript-eslint/parser/3.7.1_eslint@7.5.0+typescript@3.9.7:
+ dependencies:
+ '@types/eslint-visitor-keys': 1.0.0
+ '@typescript-eslint/experimental-utils': 3.7.1_eslint@7.5.0+typescript@3.9.7
+ '@typescript-eslint/types': 3.7.1
+ '@typescript-eslint/typescript-estree': 3.7.1_typescript@3.9.7
+ eslint: 7.5.0
+ eslint-visitor-keys: 1.3.0
+ typescript: 3.9.7
+ dev: true
+ engines:
+ node: ^10.12.0 || >=12.0.0
+ peerDependencies:
+ eslint: ^5.0.0 || ^6.0.0 || ^7.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ resolution:
+ integrity: sha512-W4QV/gXvfIsccN8225784LNOorcm7ch68Fi3V4Wg7gmkWSQRKevO4RrRqWo6N/Z/myK1QAiGgeaXN57m+R/8iQ==
+ /@typescript-eslint/types/3.7.1:
+ dev: true
+ engines:
+ node: ^8.10.0 || ^10.13.0 || >=11.10.1
+ resolution:
+ integrity: sha512-PZe8twm5Z4b61jt7GAQDor6KiMhgPgf4XmUb9zdrwTbgtC/Sj29gXP1dws9yEn4+aJeyXrjsD9XN7AWFhmnUfg==
+ /@typescript-eslint/typescript-estree/2.34.0_typescript@3.9.7:
+ dependencies:
+ debug: 4.1.1
+ eslint-visitor-keys: 1.3.0
+ glob: 7.1.6
+ is-glob: 4.0.1
+ lodash: 4.17.19
+ semver: 7.3.2
+ tsutils: 3.17.1_typescript@3.9.7
+ typescript: 3.9.7
+ dev: true
+ engines:
+ node: ^8.10.0 || ^10.13.0 || >=11.10.1
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ resolution:
+ integrity: sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==
+ /@typescript-eslint/typescript-estree/3.7.1_typescript@3.9.7:
+ dependencies:
+ '@typescript-eslint/types': 3.7.1
+ '@typescript-eslint/visitor-keys': 3.7.1
+ debug: 4.1.1
+ glob: 7.1.6
+ is-glob: 4.0.1
+ lodash: 4.17.19
+ semver: 7.3.2
+ tsutils: 3.17.1_typescript@3.9.7
+ typescript: 3.9.7
+ dev: true
+ engines:
+ node: ^10.12.0 || >=12.0.0
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ resolution:
+ integrity: sha512-m97vNZkI08dunYOr2lVZOHoyfpqRs0KDpd6qkGaIcLGhQ2WPtgHOd/eVbsJZ0VYCQvupKrObAGTOvk3tfpybYA==
+ /@typescript-eslint/visitor-keys/3.7.1:
+ dependencies:
+ eslint-visitor-keys: 1.3.0
+ dev: true
+ engines:
+ node: ^8.10.0 || ^10.13.0 || >=11.10.1
+ resolution:
+ integrity: sha512-xn22sQbEya+Utj2IqJHGLA3i1jDzR43RzWupxojbSWnj3nnPLavaQmWe5utw03CwYao3r00qzXfgJMGNkrzrAA==
+ /@zeit/ncc/0.22.3:
+ dev: true
+ hasBin: true
+ resolution:
+ integrity: sha512-jnCLpLXWuw/PAiJiVbLjA8WBC0IJQbFeUwF4I9M+23MvIxTxk5pD4Q8byQBSPmHQjz5aBoA7AKAElQxMpjrCLQ==
+ /JSONStream/1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+ dev: true
+ hasBin: true
+ resolution:
+ integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
+ /abab/2.0.3:
+ dev: true
+ resolution:
+ integrity: sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==
+ /acorn-globals/6.0.0:
+ dependencies:
+ acorn: 7.3.1
+ acorn-walk: 7.2.0
+ dev: true
+ resolution:
+ integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==
+ /acorn-jsx/5.2.0_acorn@7.3.1:
+ dependencies:
+ acorn: 7.3.1
+ dev: true
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0
+ resolution:
+ integrity: sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==
+ /acorn-walk/7.2.0:
+ dev: true
+ engines:
+ node: '>=0.4.0'
+ resolution:
+ integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
+ /acorn/7.3.1:
+ dev: true
+ engines:
+ node: '>=0.4.0'
+ hasBin: true
+ resolution:
+ integrity: sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==
+ /ajv/6.12.3:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.2.2
+ dev: true
+ resolution:
+ integrity: sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==
+ /ansi-colors/4.1.1:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
+ /ansi-escapes/3.2.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+ /ansi-escapes/4.3.1:
+ dependencies:
+ type-fest: 0.11.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==
+ /ansi-regex/3.0.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+ /ansi-regex/4.1.0:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+ /ansi-regex/5.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+ /ansi-styles/3.2.1:
+ dependencies:
+ color-convert: 1.9.3
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ /ansi-styles/4.2.1:
+ dependencies:
+ '@types/color-name': 1.1.1
+ color-convert: 2.0.1
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
+ /anymatch/2.0.0:
+ dependencies:
+ micromatch: 3.1.10
+ normalize-path: 2.1.1
+ dev: true
+ resolution:
+ integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ /anymatch/3.1.1:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.2.2
+ dev: true
+ engines:
+ node: '>= 8'
+ resolution:
+ integrity: sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
+ /argparse/1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+ dev: true
+ resolution:
+ integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ /arr-diff/4.0.0:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+ /arr-flatten/1.1.0:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+ /arr-union/3.1.0:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+ /array-ify/1.0.0:
+ dev: true
+ resolution:
+ integrity: sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=
+ /array-includes/3.1.1:
+ dependencies:
+ define-properties: 1.1.3
+ es-abstract: 1.17.6
+ is-string: 1.0.5
+ dev: true
+ engines:
+ node: '>= 0.4'
+ resolution:
+ integrity: sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==
+ /array-unique/0.3.2:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+ /array.prototype.flat/1.2.3:
+ dependencies:
+ define-properties: 1.1.3
+ es-abstract: 1.17.6
+ dev: true
+ engines:
+ node: '>= 0.4'
+ resolution:
+ integrity: sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==
+ /arrify/1.0.1:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+ /arrify/2.0.1:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
+ /asn1/0.2.4:
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: true
+ resolution:
+ integrity: sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+ /assert-plus/1.0.0:
+ dev: true
+ engines:
+ node: '>=0.8'
+ resolution:
+ integrity: sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+ /assign-symbols/1.0.0:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+ /astral-regex/1.0.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+ /asynckit/0.4.0:
+ dev: true
+ resolution:
+ integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=
+ /at-least-node/1.0.0:
+ dev: false
+ engines:
+ node: '>= 4.0.0'
+ resolution:
+ integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+ /atob/2.1.2:
+ dev: true
+ engines:
+ node: '>= 4.5.0'
+ hasBin: true
+ resolution:
+ integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+ /aws-sign2/0.7.0:
+ dev: true
+ resolution:
+ integrity: sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+ /aws4/1.10.0:
+ dev: true
+ resolution:
+ integrity: sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==
+ /babel-jest/26.1.0_@babel+core@7.10.5:
+ dependencies:
+ '@babel/core': 7.10.5
+ '@jest/transform': 26.1.0
+ '@jest/types': 26.1.0
+ '@types/babel__core': 7.1.9
+ babel-plugin-istanbul: 6.0.0
+ babel-preset-jest: 26.1.0_@babel+core@7.10.5
+ chalk: 4.1.0
+ graceful-fs: 4.2.4
+ slash: 3.0.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ resolution:
+ integrity: sha512-Nkqgtfe7j6PxLO6TnCQQlkMm8wdTdnIF8xrdpooHCuD5hXRzVEPbPneTJKknH5Dsv3L8ip9unHDAp48YQ54Dkg==
+ /babel-plugin-istanbul/6.0.0:
+ dependencies:
+ '@babel/helper-plugin-utils': 7.10.4
+ '@istanbuljs/load-nyc-config': 1.1.0
+ '@istanbuljs/schema': 0.1.2
+ istanbul-lib-instrument: 4.0.3
+ test-exclude: 6.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==
+ /babel-plugin-jest-hoist/26.1.0:
+ dependencies:
+ '@babel/template': 7.10.4
+ '@babel/types': 7.10.5
+ '@types/babel__core': 7.1.9
+ '@types/babel__traverse': 7.0.13
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-qhqLVkkSlqmC83bdMhM8WW4Z9tB+JkjqAqlbbohS9sJLT5Ha2vfzuKqg5yenXrAjOPG2YC0WiXdH3a9PvB+YYw==
+ /babel-preset-current-node-syntax/0.1.3_@babel+core@7.10.5:
+ dependencies:
+ '@babel/core': 7.10.5
+ '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.10.5
+ '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.10.5
+ '@babel/plugin-syntax-class-properties': 7.10.4_@babel+core@7.10.5
+ '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.10.5
+ '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.10.5
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.10.5
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.10.5
+ '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.10.5
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.10.5
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.10.5
+ '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.10.5
+ dev: true
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ resolution:
+ integrity: sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ==
+ /babel-preset-jest/26.1.0_@babel+core@7.10.5:
+ dependencies:
+ '@babel/core': 7.10.5
+ babel-plugin-jest-hoist: 26.1.0
+ babel-preset-current-node-syntax: 0.1.3_@babel+core@7.10.5
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ resolution:
+ integrity: sha512-na9qCqFksknlEj5iSdw1ehMVR06LCCTkZLGKeEtxDDdhg8xpUF09m29Kvh1pRbZ07h7AQ5ttLYUwpXL4tO6w7w==
+ /balanced-match/1.0.0:
+ resolution:
+ integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+ /base/0.11.2:
+ dependencies:
+ cache-base: 1.0.1
+ class-utils: 0.3.6
+ component-emitter: 1.3.0
+ define-property: 1.0.0
+ isobject: 3.0.1
+ mixin-deep: 1.3.2
+ pascalcase: 0.1.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ /bcrypt-pbkdf/1.0.2:
+ dependencies:
+ tweetnacl: 0.14.5
+ dev: true
+ resolution:
+ integrity: sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
+ /before-after-hook/2.1.0:
+ dev: false
+ resolution:
+ integrity: sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==
+ /bluebird/3.7.2:
+ dev: false
+ resolution:
+ integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+ /bottleneck/2.19.5:
+ dev: false
+ resolution:
+ integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==
+ /brace-expansion/1.1.11:
+ dependencies:
+ balanced-match: 1.0.0
+ concat-map: 0.0.1
+ resolution:
+ integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ /braces/2.3.2:
+ dependencies:
+ arr-flatten: 1.1.0
+ array-unique: 0.3.2
+ extend-shallow: 2.0.1
+ fill-range: 4.0.0
+ isobject: 3.0.1
+ repeat-element: 1.1.3
+ snapdragon: 0.8.2
+ snapdragon-node: 2.1.1
+ split-string: 3.1.0
+ to-regex: 3.0.2
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ /braces/3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ /browser-process-hrtime/1.0.0:
+ dev: true
+ resolution:
+ integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
+ /bs-logger/0.2.6:
+ dependencies:
+ fast-json-stable-stringify: 2.1.0
+ dev: true
+ engines:
+ node: '>= 6'
+ resolution:
+ integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==
+ /bser/2.1.1:
+ dependencies:
+ node-int64: 0.4.0
+ dev: true
+ resolution:
+ integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
+ /buffer-from/1.1.1:
+ dev: true
+ resolution:
+ integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+ /cache-base/1.0.1:
+ dependencies:
+ collection-visit: 1.0.0
+ component-emitter: 1.3.0
+ get-value: 2.0.6
+ has-value: 1.0.0
+ isobject: 3.0.1
+ set-value: 2.0.1
+ to-object-path: 0.3.0
+ union-value: 1.0.1
+ unset-value: 1.0.0
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ /cachedir/2.2.0:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ==
+ /callsites/3.1.0:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+ /camelcase-keys/6.2.2:
+ dependencies:
+ camelcase: 5.3.1
+ map-obj: 4.1.0
+ quick-lru: 4.0.1
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==
+ /camelcase/5.3.1:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+ /camelcase/6.0.0:
+ dev: true
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==
+ /capture-exit/2.0.0:
+ dependencies:
+ rsvp: 4.8.5
+ dev: true
+ engines:
+ node: 6.* || 8.* || >= 10.*
+ resolution:
+ integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==
+ /caseless/0.12.0:
+ dev: true
+ resolution:
+ integrity: sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+ /chalk/2.4.2:
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ /chalk/3.0.0:
+ dependencies:
+ ansi-styles: 4.2.1
+ supports-color: 7.1.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
+ /chalk/4.1.0:
+ dependencies:
+ ansi-styles: 4.2.1
+ supports-color: 7.1.0
+ dev: true
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
+ /char-regex/1.0.2:
+ dev: true
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
+ /chardet/0.7.0:
+ dev: true
+ resolution:
+ integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+ /ci-info/2.0.0:
+ dev: true
+ resolution:
+ integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+ /class-utils/0.3.6:
+ dependencies:
+ arr-union: 3.1.0
+ define-property: 0.2.5
+ isobject: 3.0.1
+ static-extend: 0.1.2
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ /cli-color/0.1.7:
+ dependencies:
+ es5-ext: 0.8.2
+ dev: true
+ engines:
+ node: '>=0.1.103'
+ resolution:
+ integrity: sha1-rcMgD6RxzCEbDaf1ZrcemLnWc0c=
+ /cli-cursor/2.1.0:
+ dependencies:
+ restore-cursor: 2.0.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+ /cli-width/2.2.1:
+ dev: true
+ resolution:
+ integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
+ /cliui/6.0.0:
+ dependencies:
+ string-width: 4.2.0
+ strip-ansi: 6.0.0
+ wrap-ansi: 6.2.0
+ dev: true
+ resolution:
+ integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
+ /co/4.6.0:
+ dev: true
+ engines:
+ iojs: '>= 1.0.0'
+ node: '>= 0.12.0'
+ resolution:
+ integrity: sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+ /collect-v8-coverage/1.0.1:
+ dev: true
+ resolution:
+ integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==
+ /collection-visit/1.0.0:
+ dependencies:
+ map-visit: 1.0.0
+ object-visit: 1.0.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ /color-convert/1.9.3:
+ dependencies:
+ color-name: 1.1.3
+ dev: true
+ resolution:
+ integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ /color-convert/2.0.1:
+ dependencies:
+ color-name: 1.1.4
+ dev: true
+ engines:
+ node: '>=7.0.0'
+ resolution:
+ integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ /color-name/1.1.3:
+ dev: true
+ resolution:
+ integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+ /color-name/1.1.4:
+ dev: true
+ resolution:
+ integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+ /combined-stream/1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+ dev: true
+ engines:
+ node: '>= 0.8'
+ resolution:
+ integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ /commitizen/4.1.2:
+ dependencies:
+ cachedir: 2.2.0
+ cz-conventional-changelog: 3.2.0
+ dedent: 0.7.0
+ detect-indent: 6.0.0
+ find-node-modules: 2.0.0
+ find-root: 1.1.0
+ fs-extra: 8.1.0
+ glob: 7.1.4
+ inquirer: 6.5.0
+ is-utf8: 0.2.1
+ lodash: 4.17.15
+ minimist: 1.2.5
+ strip-bom: 4.0.0
+ strip-json-comments: 3.0.1
+ dev: true
+ engines:
+ node: '>= 10'
+ hasBin: true
+ resolution:
+ integrity: sha512-LBxTQKHbVgroMz9ohpm86N+GfJobonGyvDc3zBGdZazbwCLz2tqLa48Rf2TnAdKx7/06W1i1R3SXUt5QW97qVQ==
+ /compare-func/1.3.4:
+ dependencies:
+ array-ify: 1.0.0
+ dot-prop: 3.0.0
+ dev: true
+ resolution:
+ integrity: sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q==
+ /compare-func/2.0.0:
+ dependencies:
+ array-ify: 1.0.0
+ dot-prop: 5.2.0
+ dev: true
+ resolution:
+ integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==
+ /compare-versions/3.6.0:
+ dev: true
+ resolution:
+ integrity: sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==
+ /component-emitter/1.3.0:
+ dev: true
+ resolution:
+ integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+ /concat-map/0.0.1:
+ resolution:
+ integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+ /contains-path/0.1.0:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
+ /conventional-changelog-angular/5.0.10:
+ dependencies:
+ compare-func: 1.3.4
+ q: 1.5.1
+ dev: true
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-k7RPPRs0vp8+BtPsM9uDxRl6KcgqtCJmzRD1wRtgqmhQ96g8ifBGo9O/TZBG23jqlXS/rg8BKRDELxfnQQGiaA==
+ /conventional-changelog-conventionalcommits/4.3.0:
+ dependencies:
+ compare-func: 1.3.4
+ lodash: 4.17.19
+ q: 1.5.1
+ dev: true
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-oYHydvZKU+bS8LnGqTMlNrrd7769EsuEHKy4fh1oMdvvDi7fem8U+nvfresJ1IDB8K00Mn4LpiA/lR+7Gs6rgg==
+ /conventional-changelog-conventionalcommits/4.3.1:
+ dependencies:
+ compare-func: 2.0.0
+ lodash: 4.17.19
+ q: 1.5.1
+ dev: true
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-EQa7TJzF7H4EMkfjjJV7d+gragejDqa8NirZnCfRpruCMZqRbAJ8DqmYbkHrYtBYicXqgfM0zkk6HlvLPcyOdQ==
+ /conventional-commit-types/3.0.0:
+ dev: true
+ resolution:
+ integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==
+ /conventional-commits-parser/3.1.0:
+ dependencies:
+ JSONStream: 1.3.5
+ is-text-path: 1.0.1
+ lodash: 4.17.19
+ meow: 7.0.1
+ split2: 2.2.0
+ through2: 3.0.2
+ trim-off-newlines: 1.0.1
+ dev: true
+ engines:
+ node: '>=10'
+ hasBin: true
+ resolution:
+ integrity: sha512-RSo5S0WIwXZiRxUGTPuYFbqvrR4vpJ1BDdTlthFgvHt5kEdnd1+pdvwWphWn57/oIl4V72NMmOocFqqJ8mFFhA==
+ /convert-source-map/1.7.0:
+ dependencies:
+ safe-buffer: 5.1.2
+ dev: true
+ resolution:
+ integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
+ /copy-descriptor/0.1.1:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+ /core-js/3.6.5:
+ dev: true
+ requiresBuild: true
+ resolution:
+ integrity: sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==
+ /core-util-is/1.0.2:
+ dev: true
+ resolution:
+ integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+ /cosmiconfig/6.0.0:
+ dependencies:
+ '@types/parse-json': 4.0.0
+ import-fresh: 3.2.1
+ parse-json: 5.0.1
+ path-type: 4.0.0
+ yaml: 1.10.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==
+ /cross-spawn/6.0.5:
+ dependencies:
+ nice-try: 1.0.5
+ path-key: 2.0.1
+ semver: 5.7.1
+ shebang-command: 1.2.0
+ which: 1.3.1
+ dev: true
+ engines:
+ node: '>=4.8'
+ resolution:
+ integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ /cross-spawn/7.0.3:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+ dev: true
+ engines:
+ node: '>= 8'
+ resolution:
+ integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ /cssom/0.3.8:
+ dev: true
+ resolution:
+ integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+ /cssom/0.4.4:
+ dev: true
+ resolution:
+ integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==
+ /cssstyle/2.3.0:
+ dependencies:
+ cssom: 0.3.8
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
+ /cz-conventional-changelog/3.2.0:
+ dependencies:
+ chalk: 2.4.2
+ commitizen: 4.1.2
+ conventional-commit-types: 3.0.0
+ lodash.map: 4.6.0
+ longest: 2.0.1
+ word-wrap: 1.2.3
+ dev: true
+ engines:
+ node: '>= 10'
+ optionalDependencies:
+ '@commitlint/load': 9.1.1
+ resolution:
+ integrity: sha512-yAYxeGpVi27hqIilG1nh4A9Bnx4J3Ov+eXy4koL3drrR+IO9GaWPsKjik20ht608Asqi8TQPf0mczhEeyAtMzg==
+ /dargs/7.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==
+ /dashdash/1.14.1:
+ dependencies:
+ assert-plus: 1.0.0
+ dev: true
+ engines:
+ node: '>=0.10'
+ resolution:
+ integrity: sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ /data-urls/2.0.0:
+ dependencies:
+ abab: 2.0.3
+ whatwg-mimetype: 2.3.0
+ whatwg-url: 8.1.0
+ dev: true
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==
+ /debug/2.6.9:
+ dependencies:
+ ms: 2.0.0
+ dev: true
+ resolution:
+ integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ /debug/4.1.1:
+ dependencies:
+ ms: 2.1.2
+ dev: true
+ resolution:
+ integrity: sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+ /decamelize-keys/1.1.0:
+ dependencies:
+ decamelize: 1.2.0
+ map-obj: 1.0.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=
+ /decamelize/1.2.0:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+ /decimal.js/10.2.0:
+ dev: true
+ resolution:
+ integrity: sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==
+ /decode-uri-component/0.2.0:
+ dev: true
+ engines:
+ node: '>=0.10'
+ resolution:
+ integrity: sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+ /dedent/0.7.0:
+ dev: true
+ resolution:
+ integrity: sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
+ /deep-is/0.1.3:
+ dev: true
+ resolution:
+ integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+ /deepmerge/4.2.2:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
+ /define-properties/1.1.3:
+ dependencies:
+ object-keys: 1.1.1
+ dev: true
+ engines:
+ node: '>= 0.4'
+ resolution:
+ integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ /define-property/0.2.5:
+ dependencies:
+ is-descriptor: 0.1.6
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ /define-property/1.0.0:
+ dependencies:
+ is-descriptor: 1.0.2
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ /define-property/2.0.2:
+ dependencies:
+ is-descriptor: 1.0.2
+ isobject: 3.0.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ /delayed-stream/1.0.0:
+ dev: true
+ engines:
+ node: '>=0.4.0'
+ resolution:
+ integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+ /deprecation/2.3.1:
+ dev: false
+ resolution:
+ integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
+ /detect-file/1.0.0:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
+ /detect-indent/6.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==
+ /detect-newline/3.1.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
+ /diff-sequences/25.2.6:
+ dev: true
+ engines:
+ node: '>= 8.3'
+ resolution:
+ integrity: sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==
+ /diff-sequences/26.0.0:
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-JC/eHYEC3aSS0vZGjuoc4vHA0yAQTzhQQldXMeMF+JlxLGJlCO38Gma82NV9gk1jGFz8mDzUMeaKXvjRRdJ2dg==
+ /diff/4.0.2:
+ dev: false
+ engines:
+ node: '>=0.3.1'
+ resolution:
+ integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
+ /difflib/0.2.4:
+ dependencies:
+ heap: 0.2.6
+ dev: true
+ resolution:
+ integrity: sha1-teMDYabbAjF21WKJLbhZQKcY9H4=
+ /doctrine/1.5.0:
+ dependencies:
+ esutils: 2.0.3
+ isarray: 1.0.0
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
+ /doctrine/3.0.0:
+ dependencies:
+ esutils: 2.0.3
+ dev: true
+ engines:
+ node: '>=6.0.0'
+ resolution:
+ integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ /domexception/2.0.1:
+ dependencies:
+ webidl-conversions: 5.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==
+ /dot-prop/3.0.0:
+ dependencies:
+ is-obj: 1.0.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-G3CK8JSknJoOfbyteQq6U52sEXc=
+ /dot-prop/5.2.0:
+ dependencies:
+ is-obj: 2.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==
+ /dreamopt/0.6.0:
+ dependencies:
+ wordwrap: 1.0.0
+ dev: true
+ engines:
+ node: '>=0.4.0'
+ resolution:
+ integrity: sha1-2BPM2sjTnYrVJndVFKE92mZNa0s=
+ /ecc-jsbn/0.1.2:
+ dependencies:
+ jsbn: 0.1.1
+ safer-buffer: 2.1.2
+ dev: true
+ resolution:
+ integrity: sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
+ /emoji-regex/7.0.3:
+ dev: true
+ resolution:
+ integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+ /emoji-regex/8.0.0:
+ dev: true
+ resolution:
+ integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+ /end-of-stream/1.4.4:
+ dependencies:
+ once: 1.4.0
+ dev: true
+ resolution:
+ integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ /enquirer/2.3.6:
+ dependencies:
+ ansi-colors: 4.1.1
+ dev: true
+ engines:
+ node: '>=8.6'
+ resolution:
+ integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
+ /err-code/1.1.2:
+ dev: false
+ resolution:
+ integrity: sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=
+ /error-ex/1.3.2:
+ dependencies:
+ is-arrayish: 0.2.1
+ dev: true
+ resolution:
+ integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ /es-abstract/1.17.6:
+ dependencies:
+ es-to-primitive: 1.2.1
+ function-bind: 1.1.1
+ has: 1.0.3
+ has-symbols: 1.0.1
+ is-callable: 1.2.0
+ is-regex: 1.1.0
+ object-inspect: 1.8.0
+ object-keys: 1.1.1
+ object.assign: 4.1.0
+ string.prototype.trimend: 1.0.1
+ string.prototype.trimstart: 1.0.1
+ dev: true
+ engines:
+ node: '>= 0.4'
+ resolution:
+ integrity: sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==
+ /es-to-primitive/1.2.1:
+ dependencies:
+ is-callable: 1.2.0
+ is-date-object: 1.0.2
+ is-symbol: 1.0.3
+ dev: true
+ engines:
+ node: '>= 0.4'
+ resolution:
+ integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ /es5-ext/0.8.2:
+ dev: true
+ engines:
+ node: '>=0.4'
+ resolution:
+ integrity: sha1-q6jZ4ZQ6iVrJaDemKjmz9V7NlKs=
+ /escape-string-regexp/1.0.5:
+ dev: true
+ engines:
+ node: '>=0.8.0'
+ resolution:
+ integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+ /escape-string-regexp/2.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
+ /escodegen/1.14.3:
+ dependencies:
+ esprima: 4.0.1
+ estraverse: 4.3.0
+ esutils: 2.0.3
+ optionator: 0.8.3
+ dev: true
+ engines:
+ node: '>=4.0'
+ hasBin: true
+ optionalDependencies:
+ source-map: 0.6.1
+ resolution:
+ integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
+ /eslint-config-prettier/6.11.0_eslint@7.5.0:
+ dependencies:
+ eslint: 7.5.0
+ get-stdin: 6.0.0
+ dev: true
+ hasBin: true
+ peerDependencies:
+ eslint: '>=3.14.1'
+ resolution:
+ integrity: sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==
+ /eslint-import-resolver-node/0.3.4:
+ dependencies:
+ debug: 2.6.9
+ resolve: 1.17.0
+ dev: true
+ resolution:
+ integrity: sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==
+ /eslint-module-utils/2.6.0:
+ dependencies:
+ debug: 2.6.9
+ pkg-dir: 2.0.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==
+ /eslint-plugin-eslint-comments/3.2.0_eslint@7.5.0:
+ dependencies:
+ escape-string-regexp: 1.0.5
+ eslint: 7.5.0
+ ignore: 5.1.8
+ dev: true
+ engines:
+ node: '>=6.5.0'
+ peerDependencies:
+ eslint: '>=4.19.1'
+ resolution:
+ integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==
+ /eslint-plugin-github/4.1.1_eslint@7.5.0+typescript@3.9.7:
+ dependencies:
+ '@typescript-eslint/eslint-plugin': 3.7.1_6426e42c89f0c157ed209e0bfffbcf90
+ '@typescript-eslint/parser': 3.7.1_eslint@7.5.0+typescript@3.9.7
+ eslint: 7.5.0
+ eslint-config-prettier: 6.11.0_eslint@7.5.0
+ eslint-plugin-eslint-comments: 3.2.0_eslint@7.5.0
+ eslint-plugin-import: 2.22.0_eslint@7.5.0
+ eslint-plugin-prettier: 3.1.4_eslint@7.5.0+prettier@2.0.5
+ eslint-rule-documentation: 1.0.23
+ prettier: 2.0.5
+ svg-element-attributes: 1.3.1
+ dev: true
+ hasBin: true
+ peerDependencies:
+ eslint: '>=4.19.0'
+ typescript: '*'
+ resolution:
+ integrity: sha512-MzCh4P4zVvR/13AHtumzZ3znq0cbUE7lXehyBEpFURD/EHdx/+7qW+0c+ySTrteImpX9LGLJFTYNtu10BifkbQ==
+ /eslint-plugin-import/2.22.0_eslint@7.5.0:
+ dependencies:
+ array-includes: 3.1.1
+ array.prototype.flat: 1.2.3
+ contains-path: 0.1.0
+ debug: 2.6.9
+ doctrine: 1.5.0
+ eslint: 7.5.0
+ eslint-import-resolver-node: 0.3.4
+ eslint-module-utils: 2.6.0
+ has: 1.0.3
+ minimatch: 3.0.4
+ object.values: 1.1.1
+ read-pkg-up: 2.0.0
+ resolve: 1.17.0
+ tsconfig-paths: 3.9.0
+ dev: true
+ engines:
+ node: '>=4'
+ peerDependencies:
+ eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0
+ resolution:
+ integrity: sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg==
+ /eslint-plugin-jest/23.19.0_eslint@7.5.0+typescript@3.9.7:
+ dependencies:
+ '@typescript-eslint/experimental-utils': 2.34.0_eslint@7.5.0+typescript@3.9.7
+ eslint: 7.5.0
+ dev: true
+ engines:
+ node: '>=8'
+ peerDependencies:
+ eslint: '>=5'
+ typescript: '*'
+ resolution:
+ integrity: sha512-l5PLflALqnODl8Yy0H5hDs18aKJS1KTf66VZGXRpIhmbLbPLaTuMB2P+65fBpkdseSpnTVcIlBYvTvJSBi/itg==
+ /eslint-plugin-prettier/3.1.4_eslint@7.5.0+prettier@2.0.5:
+ dependencies:
+ eslint: 7.5.0
+ prettier: 2.0.5
+ prettier-linter-helpers: 1.0.0
+ dev: true
+ engines:
+ node: '>=6.0.0'
+ peerDependencies:
+ eslint: '>=5.0.0'
+ prettier: '>=1.13.0'
+ resolution:
+ integrity: sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==
+ /eslint-rule-documentation/1.0.23:
+ dev: true
+ engines:
+ node: '>=4.0.0'
+ resolution:
+ integrity: sha512-pWReu3fkohwyvztx/oQWWgld2iad25TfUdi6wvhhaDPIQjHU/pyvlKgXFw1kX31SQK2Nq9MH+vRDWB0ZLy8fYw==
+ /eslint-scope/5.1.0:
+ dependencies:
+ esrecurse: 4.2.1
+ estraverse: 4.3.0
+ dev: true
+ engines:
+ node: '>=8.0.0'
+ resolution:
+ integrity: sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==
+ /eslint-utils/2.1.0:
+ dependencies:
+ eslint-visitor-keys: 1.3.0
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
+ /eslint-visitor-keys/1.3.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
+ /eslint/7.5.0:
+ dependencies:
+ '@babel/code-frame': 7.10.4
+ ajv: 6.12.3
+ chalk: 4.1.0
+ cross-spawn: 7.0.3
+ debug: 4.1.1
+ doctrine: 3.0.0
+ enquirer: 2.3.6
+ eslint-scope: 5.1.0
+ eslint-utils: 2.1.0
+ eslint-visitor-keys: 1.3.0
+ espree: 7.2.0
+ esquery: 1.3.1
+ esutils: 2.0.3
+ file-entry-cache: 5.0.1
+ functional-red-black-tree: 1.0.1
+ glob-parent: 5.1.1
+ globals: 12.4.0
+ ignore: 4.0.6
+ import-fresh: 3.2.1
+ imurmurhash: 0.1.4
+ is-glob: 4.0.1
+ js-yaml: 3.14.0
+ json-stable-stringify-without-jsonify: 1.0.1
+ levn: 0.4.1
+ lodash: 4.17.19
+ minimatch: 3.0.4
+ natural-compare: 1.4.0
+ optionator: 0.9.1
+ progress: 2.0.3
+ regexpp: 3.1.0
+ semver: 7.3.2
+ strip-ansi: 6.0.0
+ strip-json-comments: 3.1.1
+ table: 5.4.6
+ text-table: 0.2.0
+ v8-compile-cache: 2.1.1
+ dev: true
+ engines:
+ node: ^10.12.0 || >=12.0.0
+ hasBin: true
+ resolution:
+ integrity: sha512-vlUP10xse9sWt9SGRtcr1LAC67BENcQMFeV+w5EvLEoFe3xJ8cF1Skd0msziRx/VMC+72B4DxreCE+OR12OA6Q==
+ /espree/7.2.0:
+ dependencies:
+ acorn: 7.3.1
+ acorn-jsx: 5.2.0_acorn@7.3.1
+ eslint-visitor-keys: 1.3.0
+ dev: true
+ engines:
+ node: ^10.12.0 || >=12.0.0
+ resolution:
+ integrity: sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g==
+ /esprima/4.0.1:
+ dev: true
+ engines:
+ node: '>=4'
+ hasBin: true
+ resolution:
+ integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+ /esquery/1.3.1:
+ dependencies:
+ estraverse: 5.1.0
+ dev: true
+ engines:
+ node: '>=0.10'
+ resolution:
+ integrity: sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
+ /esrecurse/4.2.1:
+ dependencies:
+ estraverse: 4.3.0
+ dev: true
+ engines:
+ node: '>=4.0'
+ resolution:
+ integrity: sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
+ /estraverse/4.3.0:
+ dev: true
+ engines:
+ node: '>=4.0'
+ resolution:
+ integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+ /estraverse/5.1.0:
+ dev: true
+ engines:
+ node: '>=4.0'
+ resolution:
+ integrity: sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==
+ /esutils/2.0.3:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+ /exec-sh/0.3.4:
+ dev: true
+ resolution:
+ integrity: sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==
+ /execa/1.0.0:
+ dependencies:
+ cross-spawn: 6.0.5
+ get-stream: 4.1.0
+ is-stream: 1.1.0
+ npm-run-path: 2.0.2
+ p-finally: 1.0.0
+ signal-exit: 3.0.3
+ strip-eof: 1.0.0
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+ /execa/4.0.3:
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 5.1.0
+ human-signals: 1.1.1
+ is-stream: 2.0.0
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.0
+ signal-exit: 3.0.3
+ strip-final-newline: 2.0.0
+ dev: true
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==
+ /exit/0.1.2:
+ dev: true
+ engines:
+ node: '>= 0.8.0'
+ resolution:
+ integrity: sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
+ /expand-brackets/2.1.4:
+ dependencies:
+ debug: 2.6.9
+ define-property: 0.2.5
+ extend-shallow: 2.0.1
+ posix-character-classes: 0.1.1
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ /expand-tilde/2.0.2:
+ dependencies:
+ homedir-polyfill: 1.0.3
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=
+ /expect/26.1.0:
+ dependencies:
+ '@jest/types': 26.1.0
+ ansi-styles: 4.2.1
+ jest-get-type: 26.0.0
+ jest-matcher-utils: 26.1.0
+ jest-message-util: 26.1.0
+ jest-regex-util: 26.0.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-QbH4LZXDsno9AACrN9eM0zfnby9G+OsdNgZUohjg/P0mLy1O+/bzTAJGT6VSIjVCe8yKM6SzEl/ckEOFBT7Vnw==
+ /extend-shallow/2.0.1:
+ dependencies:
+ is-extendable: 0.1.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ /extend-shallow/3.0.2:
+ dependencies:
+ assign-symbols: 1.0.0
+ is-extendable: 1.0.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ /extend/3.0.2:
+ resolution:
+ integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+ /external-editor/3.1.0:
+ dependencies:
+ chardet: 0.7.0
+ iconv-lite: 0.4.24
+ tmp: 0.0.33
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
+ /extglob/2.0.4:
+ dependencies:
+ array-unique: 0.3.2
+ define-property: 1.0.0
+ expand-brackets: 2.1.4
+ extend-shallow: 2.0.1
+ fragment-cache: 0.2.1
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ /extsprintf/1.3.0:
+ dev: true
+ engines:
+ '0': node >=0.6.0
+ resolution:
+ integrity: sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+ /fast-deep-equal/3.1.3:
+ dev: true
+ resolution:
+ integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+ /fast-diff/1.2.0:
+ dev: true
+ resolution:
+ integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
+ /fast-json-stable-stringify/2.1.0:
+ dev: true
+ resolution:
+ integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+ /fast-levenshtein/2.0.6:
+ dev: true
+ resolution:
+ integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+ /fb-watchman/2.0.1:
+ dependencies:
+ bser: 2.1.1
+ dev: true
+ resolution:
+ integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==
+ /figures/2.0.0:
+ dependencies:
+ escape-string-regexp: 1.0.5
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+ /file-entry-cache/5.0.1:
+ dependencies:
+ flat-cache: 2.0.1
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+ /file-js/0.3.0:
+ dependencies:
+ bluebird: 3.7.2
+ minimatch: 3.0.4
+ proper-lockfile: 1.2.0
+ dev: false
+ resolution:
+ integrity: sha1-+rRr94I0bJKUSZ8fDSrQfYOPJdE=
+ /filehound/1.17.4:
+ dependencies:
+ bluebird: 3.7.2
+ file-js: 0.3.0
+ lodash: 4.17.19
+ minimatch: 3.0.4
+ moment: 2.27.0
+ unit-compare: 1.0.1
+ dev: false
+ resolution:
+ integrity: sha512-A74hiTADH20bpFbXBNyKtpqN4Guffa+ROmdGJWNnuCRhaD45UVSVoI6McLcpHYmuaOERrzD3gMV3v9VZq/SHeA==
+ /fill-range/4.0.0:
+ dependencies:
+ extend-shallow: 2.0.1
+ is-number: 3.0.0
+ repeat-string: 1.6.1
+ to-regex-range: 2.1.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ /fill-range/7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ /find-node-modules/2.0.0:
+ dependencies:
+ findup-sync: 3.0.0
+ merge: 1.2.1
+ dev: true
+ resolution:
+ integrity: sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw==
+ /find-root/1.1.0:
+ dev: true
+ resolution:
+ integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
+ /find-up/2.1.0:
+ dependencies:
+ locate-path: 2.0.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+ /find-up/4.1.0:
+ dependencies:
+ locate-path: 5.0.0
+ path-exists: 4.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ /find-versions/3.2.0:
+ dependencies:
+ semver-regex: 2.0.0
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==
+ /findup-sync/3.0.0:
+ dependencies:
+ detect-file: 1.0.0
+ is-glob: 4.0.1
+ micromatch: 3.1.10
+ resolve-dir: 1.0.1
+ dev: true
+ engines:
+ node: '>= 0.10'
+ resolution:
+ integrity: sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
+ /flat-cache/2.0.1:
+ dependencies:
+ flatted: 2.0.2
+ rimraf: 2.6.3
+ write: 1.0.3
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+ /flatted/2.0.2:
+ dev: true
+ resolution:
+ integrity: sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
+ /for-in/1.0.2:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+ /forever-agent/0.6.1:
+ dev: true
+ resolution:
+ integrity: sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+ /form-data/2.3.3:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.27
+ dev: true
+ engines:
+ node: '>= 0.12'
+ resolution:
+ integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ /fragment-cache/0.2.1:
+ dependencies:
+ map-cache: 0.2.2
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ /fs-extra/8.1.0:
+ dependencies:
+ graceful-fs: 4.2.4
+ jsonfile: 4.0.0
+ universalify: 0.1.2
+ dev: true
+ engines:
+ node: '>=6 <7 || >=8'
+ resolution:
+ integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+ /fs-extra/9.0.1:
+ dependencies:
+ at-least-node: 1.0.0
+ graceful-fs: 4.2.4
+ jsonfile: 6.0.1
+ universalify: 1.0.0
+ dev: false
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==
+ /fs.realpath/1.0.0:
+ dev: true
+ resolution:
+ integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+ /fsevents/2.1.3:
+ dev: true
+ engines:
+ node: ^8.16.0 || ^10.6.0 || >=11.0.0
+ optional: true
+ os:
+ - darwin
+ resolution:
+ integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
+ /function-bind/1.1.1:
+ dev: true
+ resolution:
+ integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+ /functional-red-black-tree/1.0.1:
+ dev: true
+ resolution:
+ integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+ /gensync/1.0.0-beta.1:
+ dev: true
+ engines:
+ node: '>=6.9.0'
+ resolution:
+ integrity: sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
+ /get-caller-file/2.0.5:
+ dev: true
+ engines:
+ node: 6.* || 8.* || >= 10.*
+ resolution:
+ integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+ /get-package-type/0.1.0:
+ dev: true
+ engines:
+ node: '>=8.0.0'
+ resolution:
+ integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
+ /get-stdin/6.0.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
+ /get-stdin/7.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==
+ /get-stream/4.1.0:
+ dependencies:
+ pump: 3.0.0
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+ /get-stream/5.1.0:
+ dependencies:
+ pump: 3.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==
+ /get-value/2.0.6:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+ /getpass/0.1.7:
+ dependencies:
+ assert-plus: 1.0.0
+ dev: true
+ resolution:
+ integrity: sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+ /git-raw-commits/2.0.7:
+ dependencies:
+ dargs: 7.0.0
+ lodash.template: 4.5.0
+ meow: 7.0.1
+ split2: 2.2.0
+ through2: 3.0.2
+ dev: true
+ engines:
+ node: '>=10'
+ hasBin: true
+ resolution:
+ integrity: sha512-SkwrTqrDxw8y0G1uGJ9Zw13F7qu3LF8V4BifyDeiJCxSnjRGZD9SaoMiMqUvvXMXh6S3sOQ1DsBN7L2fMUZW/g==
+ /glob-parent/5.1.1:
+ dependencies:
+ is-glob: 4.0.1
+ dev: true
+ engines:
+ node: '>= 6'
+ resolution:
+ integrity: sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
+ /glob/7.1.4:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.0.4
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+ dev: true
+ resolution:
+ integrity: sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
+ /glob/7.1.6:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.0.4
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+ dev: true
+ resolution:
+ integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+ /global-dirs/0.1.1:
+ dependencies:
+ ini: 1.3.5
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=
+ /global-modules/1.0.0:
+ dependencies:
+ global-prefix: 1.0.2
+ is-windows: 1.0.2
+ resolve-dir: 1.0.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+ /global-prefix/1.0.2:
+ dependencies:
+ expand-tilde: 2.0.2
+ homedir-polyfill: 1.0.3
+ ini: 1.3.5
+ is-windows: 1.0.2
+ which: 1.3.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=
+ /globals/11.12.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+ /globals/12.4.0:
+ dependencies:
+ type-fest: 0.8.1
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
+ /graceful-fs/4.2.4:
+ resolution:
+ integrity: sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
+ /growly/1.3.0:
+ dev: true
+ optional: true
+ resolution:
+ integrity: sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
+ /har-schema/2.0.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
+ /har-validator/5.1.5:
+ dependencies:
+ ajv: 6.12.3
+ har-schema: 2.0.0
+ deprecated: this library is no longer supported
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
+ /hard-rejection/2.1.0:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==
+ /has-flag/3.0.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+ /has-flag/4.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+ /has-symbols/1.0.1:
+ dev: true
+ engines:
+ node: '>= 0.4'
+ resolution:
+ integrity: sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
+ /has-value/0.3.1:
+ dependencies:
+ get-value: 2.0.6
+ has-values: 0.1.4
+ isobject: 2.1.0
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ /has-value/1.0.0:
+ dependencies:
+ get-value: 2.0.6
+ has-values: 1.0.0
+ isobject: 3.0.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ /has-values/0.1.4:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+ /has-values/1.0.0:
+ dependencies:
+ is-number: 3.0.0
+ kind-of: 4.0.0
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ /has/1.0.3:
+ dependencies:
+ function-bind: 1.1.1
+ dev: true
+ engines:
+ node: '>= 0.4.0'
+ resolution:
+ integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ /heap/0.2.6:
+ dev: true
+ resolution:
+ integrity: sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=
+ /homedir-polyfill/1.0.3:
+ dependencies:
+ parse-passwd: 1.0.0
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+ /hosted-git-info/2.8.8:
+ dev: true
+ resolution:
+ integrity: sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
+ /html-encoding-sniffer/2.0.1:
+ dependencies:
+ whatwg-encoding: 1.0.5
+ dev: true
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==
+ /html-escaper/2.0.2:
+ dev: true
+ resolution:
+ integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+ /http-signature/1.2.0:
+ dependencies:
+ assert-plus: 1.0.0
+ jsprim: 1.4.1
+ sshpk: 1.16.1
+ dev: true
+ engines:
+ node: '>=0.8'
+ npm: '>=1.3.7'
+ resolution:
+ integrity: sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+ /human-signals/1.1.1:
+ dev: true
+ engines:
+ node: '>=8.12.0'
+ resolution:
+ integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
+ /husky/4.2.5:
+ dependencies:
+ chalk: 4.1.0
+ ci-info: 2.0.0
+ compare-versions: 3.6.0
+ cosmiconfig: 6.0.0
+ find-versions: 3.2.0
+ opencollective-postinstall: 2.0.3
+ pkg-dir: 4.2.0
+ please-upgrade-node: 3.2.0
+ slash: 3.0.0
+ which-pm-runs: 1.0.0
+ dev: true
+ engines:
+ node: '>=10'
+ hasBin: true
+ requiresBuild: true
+ resolution:
+ integrity: sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ==
+ /iconv-lite/0.4.24:
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ /ignore/4.0.6:
+ dev: true
+ engines:
+ node: '>= 4'
+ resolution:
+ integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+ /ignore/5.1.8:
+ dev: true
+ engines:
+ node: '>= 4'
+ resolution:
+ integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
+ /import-fresh/3.2.1:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
+ /import-local/3.0.2:
+ dependencies:
+ pkg-dir: 4.2.0
+ resolve-cwd: 3.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ hasBin: true
+ resolution:
+ integrity: sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==
+ /imurmurhash/0.1.4:
+ dev: true
+ engines:
+ node: '>=0.8.19'
+ resolution:
+ integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=
+ /indent-string/4.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+ /inflight/1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+ dev: true
+ resolution:
+ integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ /inherits/2.0.4:
+ dev: true
+ resolution:
+ integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+ /ini/1.3.5:
+ dev: true
+ resolution:
+ integrity: sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+ /inquirer/6.5.0:
+ dependencies:
+ ansi-escapes: 3.2.0
+ chalk: 2.4.2
+ cli-cursor: 2.1.0
+ cli-width: 2.2.1
+ external-editor: 3.1.0
+ figures: 2.0.0
+ lodash: 4.17.15
+ mute-stream: 0.0.7
+ run-async: 2.4.1
+ rxjs: 6.6.0
+ string-width: 2.1.1
+ strip-ansi: 5.2.0
+ through: 2.3.8
+ dev: true
+ engines:
+ node: '>=6.0.0'
+ resolution:
+ integrity: sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==
+ /ip-regex/2.1.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
+ /is-accessor-descriptor/0.1.6:
+ dependencies:
+ kind-of: 3.2.2
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ /is-accessor-descriptor/1.0.0:
+ dependencies:
+ kind-of: 6.0.3
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ /is-arrayish/0.2.1:
+ dev: true
+ resolution:
+ integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+ /is-buffer/1.1.6:
+ dev: true
+ resolution:
+ integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+ /is-callable/1.2.0:
+ dev: true
+ engines:
+ node: '>= 0.4'
+ resolution:
+ integrity: sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==
+ /is-ci/2.0.0:
+ dependencies:
+ ci-info: 2.0.0
+ dev: true
+ hasBin: true
+ resolution:
+ integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
+ /is-data-descriptor/0.1.4:
+ dependencies:
+ kind-of: 3.2.2
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ /is-data-descriptor/1.0.0:
+ dependencies:
+ kind-of: 6.0.3
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ /is-date-object/1.0.2:
+ dev: true
+ engines:
+ node: '>= 0.4'
+ resolution:
+ integrity: sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
+ /is-descriptor/0.1.6:
+ dependencies:
+ is-accessor-descriptor: 0.1.6
+ is-data-descriptor: 0.1.4
+ kind-of: 5.1.0
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ /is-descriptor/1.0.2:
+ dependencies:
+ is-accessor-descriptor: 1.0.0
+ is-data-descriptor: 1.0.0
+ kind-of: 6.0.3
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ /is-docker/2.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ optional: true
+ resolution:
+ integrity: sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==
+ /is-extendable/0.1.1:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+ /is-extendable/1.0.1:
+ dependencies:
+ is-plain-object: 2.0.4
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ /is-extglob/2.1.1:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+ /is-fullwidth-code-point/2.0.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+ /is-fullwidth-code-point/3.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+ /is-generator-fn/2.1.0:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
+ /is-glob/4.0.1:
+ dependencies:
+ is-extglob: 2.1.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ /is-number/3.0.0:
+ dependencies:
+ kind-of: 3.2.2
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ /is-number/7.0.0:
+ dev: true
+ engines:
+ node: '>=0.12.0'
+ resolution:
+ integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+ /is-obj/1.0.1:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+ /is-obj/2.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
+ /is-plain-obj/1.1.0:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+ /is-plain-object/2.0.4:
+ dependencies:
+ isobject: 3.0.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ /is-plain-object/4.1.1:
+ dev: false
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-5Aw8LLVsDlZsETVMhoMXzqsXwQqr/0vlnBYzIXJbYo2F4yYlhLHs+Ez7Bod7IIQKWkJbJfxrWD7pA1Dw1TKrwA==
+ /is-potential-custom-element-name/1.0.0:
+ dev: true
+ resolution:
+ integrity: sha1-DFLlS8yjkbssSUsh6GJtczbG45c=
+ /is-regex/1.1.0:
+ dependencies:
+ has-symbols: 1.0.1
+ dev: true
+ engines:
+ node: '>= 0.4'
+ resolution:
+ integrity: sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==
+ /is-stream/1.1.0:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+ /is-stream/2.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
+ /is-string/1.0.5:
+ dev: true
+ engines:
+ node: '>= 0.4'
+ resolution:
+ integrity: sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
+ /is-symbol/1.0.3:
+ dependencies:
+ has-symbols: 1.0.1
+ dev: true
+ engines:
+ node: '>= 0.4'
+ resolution:
+ integrity: sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
+ /is-text-path/1.0.1:
+ dependencies:
+ text-extensions: 1.9.0
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=
+ /is-typedarray/1.0.0:
+ dev: true
+ resolution:
+ integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+ /is-utf8/0.2.1:
+ dev: true
+ resolution:
+ integrity: sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+ /is-windows/1.0.2:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+ /is-wsl/2.2.0:
+ dependencies:
+ is-docker: 2.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ optional: true
+ resolution:
+ integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+ /isarray/1.0.0:
+ dev: true
+ resolution:
+ integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+ /isexe/2.0.0:
+ resolution:
+ integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+ /isobject/2.1.0:
+ dependencies:
+ isarray: 1.0.0
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ /isobject/3.0.1:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+ /isstream/0.1.2:
+ dev: true
+ resolution:
+ integrity: sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+ /istanbul-lib-coverage/3.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==
+ /istanbul-lib-instrument/4.0.3:
+ dependencies:
+ '@babel/core': 7.10.5
+ '@istanbuljs/schema': 0.1.2
+ istanbul-lib-coverage: 3.0.0
+ semver: 6.3.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==
+ /istanbul-lib-report/3.0.0:
+ dependencies:
+ istanbul-lib-coverage: 3.0.0
+ make-dir: 3.1.0
+ supports-color: 7.1.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==
+ /istanbul-lib-source-maps/4.0.0:
+ dependencies:
+ debug: 4.1.1
+ istanbul-lib-coverage: 3.0.0
+ source-map: 0.6.1
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==
+ /istanbul-reports/3.0.2:
+ dependencies:
+ html-escaper: 2.0.2
+ istanbul-lib-report: 3.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==
+ /jest-changed-files/26.1.0:
+ dependencies:
+ '@jest/types': 26.1.0
+ execa: 4.0.3
+ throat: 5.0.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-HS5MIJp3B8t0NRKGMCZkcDUZo36mVRvrDETl81aqljT1S9tqiHRSpyoOvWg9ZilzZG9TDisDNaN1IXm54fLRZw==
+ /jest-circus/26.1.0:
+ dependencies:
+ '@babel/traverse': 7.10.5
+ '@jest/environment': 26.1.0
+ '@jest/test-result': 26.1.0
+ '@jest/types': 26.1.0
+ chalk: 4.1.0
+ co: 4.6.0
+ dedent: 0.7.0
+ expect: 26.1.0
+ is-generator-fn: 2.1.0
+ jest-each: 26.1.0
+ jest-matcher-utils: 26.1.0
+ jest-message-util: 26.1.0
+ jest-runtime: 26.1.0
+ jest-snapshot: 26.1.0
+ jest-util: 26.1.0
+ pretty-format: 26.1.0
+ stack-utils: 2.0.2
+ throat: 5.0.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-V5h5XJLPf0XXwP92GIOx8n0Q6vdPDcFPBuEVQ9/OPzpsx3gquL8fdxaJGZ5TsvkU3zWM7mDWULAKYJMRkA2e+g==
+ /jest-cli/26.1.0:
+ dependencies:
+ '@jest/core': 26.1.0
+ '@jest/test-result': 26.1.0
+ '@jest/types': 26.1.0
+ chalk: 4.1.0
+ exit: 0.1.2
+ graceful-fs: 4.2.4
+ import-local: 3.0.2
+ is-ci: 2.0.0
+ jest-config: 26.1.0
+ jest-util: 26.1.0
+ jest-validate: 26.1.0
+ prompts: 2.3.2
+ yargs: 15.4.1
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ hasBin: true
+ resolution:
+ integrity: sha512-Imumvjgi3rU7stq6SJ1JUEMaV5aAgJYXIs0jPqdUnF47N/Tk83EXfmtvNKQ+SnFVI6t6mDOvfM3aA9Sg6kQPSw==
+ /jest-config/26.1.0:
+ dependencies:
+ '@babel/core': 7.10.5
+ '@jest/test-sequencer': 26.1.0
+ '@jest/types': 26.1.0
+ babel-jest: 26.1.0_@babel+core@7.10.5
+ chalk: 4.1.0
+ deepmerge: 4.2.2
+ glob: 7.1.6
+ graceful-fs: 4.2.4
+ jest-environment-jsdom: 26.1.0
+ jest-environment-node: 26.1.0
+ jest-get-type: 26.0.0
+ jest-jasmine2: 26.1.0
+ jest-regex-util: 26.0.0
+ jest-resolve: 26.1.0_jest-resolve@26.1.0
+ jest-util: 26.1.0
+ jest-validate: 26.1.0
+ micromatch: 4.0.2
+ pretty-format: 26.1.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-ONTGeoMbAwGCdq4WuKkMcdMoyfs5CLzHEkzFOlVvcDXufZSaIWh/OXMLa2fwKXiOaFcqEw8qFr4VOKJQfn4CVw==
+ /jest-diff/25.5.0:
+ dependencies:
+ chalk: 3.0.0
+ diff-sequences: 25.2.6
+ jest-get-type: 25.2.6
+ pretty-format: 25.5.0
+ dev: true
+ engines:
+ node: '>= 8.3'
+ resolution:
+ integrity: sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==
+ /jest-diff/26.1.0:
+ dependencies:
+ chalk: 4.1.0
+ diff-sequences: 26.0.0
+ jest-get-type: 26.0.0
+ pretty-format: 26.1.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-GZpIcom339y0OXznsEKjtkfKxNdg7bVbEofK8Q6MnevTIiR1jNhDWKhRX6X0SDXJlwn3dy59nZ1z55fLkAqPWg==
+ /jest-docblock/26.0.0:
+ dependencies:
+ detect-newline: 3.1.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==
+ /jest-each/26.1.0:
+ dependencies:
+ '@jest/types': 26.1.0
+ chalk: 4.1.0
+ jest-get-type: 26.0.0
+ jest-util: 26.1.0
+ pretty-format: 26.1.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-lYiSo4Igr81q6QRsVQq9LIkJW0hZcKxkIkHzNeTMPENYYDw/W/Raq28iJ0sLlNFYz2qxxeLnc5K2gQoFYlu2bA==
+ /jest-environment-jsdom/26.1.0:
+ dependencies:
+ '@jest/environment': 26.1.0
+ '@jest/fake-timers': 26.1.0
+ '@jest/types': 26.1.0
+ jest-mock: 26.1.0
+ jest-util: 26.1.0
+ jsdom: 16.3.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-dWfiJ+spunVAwzXbdVqPH1LbuJW/kDL+FyqgA5YzquisHqTi0g9hquKif9xKm7c1bKBj6wbmJuDkeMCnxZEpUw==
+ /jest-environment-node/26.1.0:
+ dependencies:
+ '@jest/environment': 26.1.0
+ '@jest/fake-timers': 26.1.0
+ '@jest/types': 26.1.0
+ jest-mock: 26.1.0
+ jest-util: 26.1.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-DNm5x1aQH0iRAe9UYAkZenuzuJ69VKzDCAYISFHQ5i9e+2Tbeu2ONGY7YStubCLH8a1wdKBgqScYw85+ySxqxg==
+ /jest-get-type/25.2.6:
+ dev: true
+ engines:
+ node: '>= 8.3'
+ resolution:
+ integrity: sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==
+ /jest-get-type/26.0.0:
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-zRc1OAPnnws1EVfykXOj19zo2EMw5Hi6HLbFCSjpuJiXtOWAYIjNsHVSbpQ8bDX7L5BGYGI8m+HmKdjHYFF0kg==
+ /jest-haste-map/26.1.0:
+ dependencies:
+ '@jest/types': 26.1.0
+ '@types/graceful-fs': 4.1.3
+ anymatch: 3.1.1
+ fb-watchman: 2.0.1
+ graceful-fs: 4.2.4
+ jest-serializer: 26.1.0
+ jest-util: 26.1.0
+ jest-worker: 26.1.0
+ micromatch: 4.0.2
+ sane: 4.1.0
+ walker: 1.0.7
+ which: 2.0.2
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ optionalDependencies:
+ fsevents: 2.1.3
+ resolution:
+ integrity: sha512-WeBS54xCIz9twzkEdm6+vJBXgRBQfdbbXD0dk8lJh7gLihopABlJmIQFdWSDDtuDe4PRiObsjZSUjbJ1uhWEpA==
+ /jest-jasmine2/26.1.0:
+ dependencies:
+ '@babel/traverse': 7.10.5
+ '@jest/environment': 26.1.0
+ '@jest/source-map': 26.1.0
+ '@jest/test-result': 26.1.0
+ '@jest/types': 26.1.0
+ chalk: 4.1.0
+ co: 4.6.0
+ expect: 26.1.0
+ is-generator-fn: 2.1.0
+ jest-each: 26.1.0
+ jest-matcher-utils: 26.1.0
+ jest-message-util: 26.1.0
+ jest-runtime: 26.1.0
+ jest-snapshot: 26.1.0
+ jest-util: 26.1.0
+ pretty-format: 26.1.0
+ throat: 5.0.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-1IPtoDKOAG+MeBrKvvuxxGPJb35MTTRSDglNdWWCndCB3TIVzbLThRBkwH9P081vXLgiJHZY8Bz3yzFS803xqQ==
+ /jest-leak-detector/26.1.0:
+ dependencies:
+ jest-get-type: 26.0.0
+ pretty-format: 26.1.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-dsMnKF+4BVOZwvQDlgn3MG+Ns4JuLv8jNvXH56bgqrrboyCbI1rQg6EI5rs+8IYagVcfVP2yZFKfWNZy0rK0Hw==
+ /jest-matcher-utils/26.1.0:
+ dependencies:
+ chalk: 4.1.0
+ jest-diff: 26.1.0
+ jest-get-type: 26.0.0
+ pretty-format: 26.1.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-PW9JtItbYvES/xLn5mYxjMd+Rk+/kIt88EfH3N7w9KeOrHWaHrdYPnVHndGbsFGRJ2d5gKtwggCvkqbFDoouQA==
+ /jest-message-util/26.1.0:
+ dependencies:
+ '@babel/code-frame': 7.10.4
+ '@jest/types': 26.1.0
+ '@types/stack-utils': 1.0.1
+ chalk: 4.1.0
+ graceful-fs: 4.2.4
+ micromatch: 4.0.2
+ slash: 3.0.0
+ stack-utils: 2.0.2
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-dY0+UlldiAJwNDJ08SF0HdF32g9PkbF2NRK/+2iMPU40O6q+iSn1lgog/u0UH8ksWoPv0+gNq8cjhYO2MFtT0g==
+ /jest-mock/26.1.0:
+ dependencies:
+ '@jest/types': 26.1.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-1Rm8EIJ3ZFA8yCIie92UbxZWj9SuVmUGcyhLHyAhY6WI3NIct38nVcfOPWhJteqSn8V8e3xOMha9Ojfazfpovw==
+ /jest-pnp-resolver/1.2.2_jest-resolve@26.1.0:
+ dependencies:
+ jest-resolve: 26.1.0_jest-resolve@26.1.0
+ dev: true
+ engines:
+ node: '>=6'
+ peerDependencies:
+ jest-resolve: '*'
+ peerDependenciesMeta:
+ jest-resolve:
+ optional: true
+ resolution:
+ integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==
+ /jest-regex-util/26.0.0:
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==
+ /jest-resolve-dependencies/26.1.0:
+ dependencies:
+ '@jest/types': 26.1.0
+ jest-regex-util: 26.0.0
+ jest-snapshot: 26.1.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-fQVEPHHQ1JjHRDxzlLU/buuQ9om+hqW6Vo928aa4b4yvq4ZHBtRSDsLdKQLuCqn5CkTVpYZ7ARh2fbA8WkRE6g==
+ /jest-resolve/26.1.0_jest-resolve@26.1.0:
+ dependencies:
+ '@jest/types': 26.1.0
+ chalk: 4.1.0
+ graceful-fs: 4.2.4
+ jest-pnp-resolver: 1.2.2_jest-resolve@26.1.0
+ jest-util: 26.1.0
+ read-pkg-up: 7.0.1
+ resolve: 1.17.0
+ slash: 3.0.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ peerDependencies:
+ jest-resolve: '*'
+ resolution:
+ integrity: sha512-KsY1JV9FeVgEmwIISbZZN83RNGJ1CC+XUCikf/ZWJBX/tO4a4NvA21YixokhdR9UnmPKKAC4LafVixJBrwlmfg==
+ /jest-runner/26.1.0:
+ dependencies:
+ '@jest/console': 26.1.0
+ '@jest/environment': 26.1.0
+ '@jest/test-result': 26.1.0
+ '@jest/types': 26.1.0
+ chalk: 4.1.0
+ exit: 0.1.2
+ graceful-fs: 4.2.4
+ jest-config: 26.1.0
+ jest-docblock: 26.0.0
+ jest-haste-map: 26.1.0
+ jest-jasmine2: 26.1.0
+ jest-leak-detector: 26.1.0
+ jest-message-util: 26.1.0
+ jest-resolve: 26.1.0_jest-resolve@26.1.0
+ jest-runtime: 26.1.0
+ jest-util: 26.1.0
+ jest-worker: 26.1.0
+ source-map-support: 0.5.19
+ throat: 5.0.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-elvP7y0fVDREnfqit0zAxiXkDRSw6dgCkzPCf1XvIMnSDZ8yogmSKJf192dpOgnUVykmQXwYYJnCx641uLTgcw==
+ /jest-runtime/26.1.0:
+ dependencies:
+ '@jest/console': 26.1.0
+ '@jest/environment': 26.1.0
+ '@jest/fake-timers': 26.1.0
+ '@jest/globals': 26.1.0
+ '@jest/source-map': 26.1.0
+ '@jest/test-result': 26.1.0
+ '@jest/transform': 26.1.0
+ '@jest/types': 26.1.0
+ '@types/yargs': 15.0.5
+ chalk: 4.1.0
+ collect-v8-coverage: 1.0.1
+ exit: 0.1.2
+ glob: 7.1.6
+ graceful-fs: 4.2.4
+ jest-config: 26.1.0
+ jest-haste-map: 26.1.0
+ jest-message-util: 26.1.0
+ jest-mock: 26.1.0
+ jest-regex-util: 26.0.0
+ jest-resolve: 26.1.0_jest-resolve@26.1.0
+ jest-snapshot: 26.1.0
+ jest-util: 26.1.0
+ jest-validate: 26.1.0
+ slash: 3.0.0
+ strip-bom: 4.0.0
+ yargs: 15.4.1
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ hasBin: true
+ resolution:
+ integrity: sha512-1qiYN+EZLmG1QV2wdEBRf+Ci8i3VSfIYLF02U18PiUDrMbhfpN/EAMMkJtT02jgJUoaEOpHAIXG6zS3QRMzRmA==
+ /jest-serializer/26.1.0:
+ dependencies:
+ graceful-fs: 4.2.4
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-eqZOQG/0+MHmr25b2Z86g7+Kzd5dG9dhCiUoyUNJPgiqi38DqbDEOlHcNijyfZoj74soGBohKBZuJFS18YTJ5w==
+ /jest-snapshot/26.1.0:
+ dependencies:
+ '@babel/types': 7.10.5
+ '@jest/types': 26.1.0
+ '@types/prettier': 2.0.2
+ chalk: 4.1.0
+ expect: 26.1.0
+ graceful-fs: 4.2.4
+ jest-diff: 26.1.0
+ jest-get-type: 26.0.0
+ jest-haste-map: 26.1.0
+ jest-matcher-utils: 26.1.0
+ jest-message-util: 26.1.0
+ jest-resolve: 26.1.0_jest-resolve@26.1.0
+ natural-compare: 1.4.0
+ pretty-format: 26.1.0
+ semver: 7.3.2
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-YhSbU7eMTVQO/iRbNs8j0mKRxGp4plo7sJ3GzOQ0IYjvsBiwg0T1o0zGQAYepza7lYHuPTrG5J2yDd0CE2YxSw==
+ /jest-util/26.1.0:
+ dependencies:
+ '@jest/types': 26.1.0
+ chalk: 4.1.0
+ graceful-fs: 4.2.4
+ is-ci: 2.0.0
+ micromatch: 4.0.2
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-rNMOwFQevljfNGvbzNQAxdmXQ+NawW/J72dmddsK0E8vgxXCMtwQ/EH0BiWEIxh0hhMcTsxwAxINt7Lh46Uzbg==
+ /jest-validate/26.1.0:
+ dependencies:
+ '@jest/types': 26.1.0
+ camelcase: 6.0.0
+ chalk: 4.1.0
+ jest-get-type: 26.0.0
+ leven: 3.1.0
+ pretty-format: 26.1.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-WPApOOnXsiwhZtmkDsxnpye+XLb/tUISP+H6cHjfUIXvlG+eKwP+isnivsxlHCPaO9Q5wvbhloIBkdF3qUn+Nw==
+ /jest-watcher/26.1.0:
+ dependencies:
+ '@jest/test-result': 26.1.0
+ '@jest/types': 26.1.0
+ ansi-escapes: 4.3.1
+ chalk: 4.1.0
+ jest-util: 26.1.0
+ string-length: 4.0.1
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-ffEOhJl2EvAIki613oPsSG11usqnGUzIiK7MMX6hE4422aXOcVEG3ySCTDFLn1+LZNXGPE8tuJxhp8OBJ1pgzQ==
+ /jest-worker/26.1.0:
+ dependencies:
+ merge-stream: 2.0.0
+ supports-color: 7.1.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-Z9P5pZ6UC+kakMbNJn+tA2RdVdNX5WH1x+5UCBZ9MxIK24pjYtFt96fK+UwBTrjLYm232g1xz0L3eTh51OW+yQ==
+ /jest/26.1.0:
+ dependencies:
+ '@jest/core': 26.1.0
+ import-local: 3.0.2
+ jest-cli: 26.1.0
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ hasBin: true
+ resolution:
+ integrity: sha512-LIti8jppw5BcQvmNJe4w2g1N/3V68HUfAv9zDVm7v+VAtQulGhH0LnmmiVkbNE4M4I43Bj2fXPiBGKt26k9tHw==
+ /js-tokens/4.0.0:
+ dev: true
+ resolution:
+ integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+ /js-yaml/3.14.0:
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+ dev: true
+ hasBin: true
+ resolution:
+ integrity: sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==
+ /jsbn/0.1.1:
+ dev: true
+ resolution:
+ integrity: sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+ /jsdom/16.3.0:
+ dependencies:
+ abab: 2.0.3
+ acorn: 7.3.1
+ acorn-globals: 6.0.0
+ cssom: 0.4.4
+ cssstyle: 2.3.0
+ data-urls: 2.0.0
+ decimal.js: 10.2.0
+ domexception: 2.0.1
+ escodegen: 1.14.3
+ html-encoding-sniffer: 2.0.1
+ is-potential-custom-element-name: 1.0.0
+ nwsapi: 2.2.0
+ parse5: 5.1.1
+ request: 2.88.2
+ request-promise-native: 1.0.9_request@2.88.2
+ saxes: 5.0.1
+ symbol-tree: 3.2.4
+ tough-cookie: 3.0.1
+ w3c-hr-time: 1.0.2
+ w3c-xmlserializer: 2.0.0
+ webidl-conversions: 6.1.0
+ whatwg-encoding: 1.0.5
+ whatwg-mimetype: 2.3.0
+ whatwg-url: 8.1.0
+ ws: 7.3.1
+ xml-name-validator: 3.0.0
+ dev: true
+ engines:
+ node: '>=10'
+ peerDependencies:
+ canvas: ^2.5.0
+ peerDependenciesMeta:
+ canvas:
+ optional: true
+ resolution:
+ integrity: sha512-zggeX5UuEknpdZzv15+MS1dPYG0J/TftiiNunOeNxSl3qr8Z6cIlQpN0IdJa44z9aFxZRIVqRncvEhQ7X5DtZg==
+ /jsesc/2.5.2:
+ dev: true
+ engines:
+ node: '>=4'
+ hasBin: true
+ resolution:
+ integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+ /json-diff/0.5.4:
+ dependencies:
+ cli-color: 0.1.7
+ difflib: 0.2.4
+ dreamopt: 0.6.0
+ dev: true
+ hasBin: true
+ resolution:
+ integrity: sha512-q5Xmx9QXNOzOzIlMoYtLrLiu4Jl/Ce2bn0CNcv54PhyH89CI4GWlGVDye8ei2Ijt9R3U+vsWPsXpLUNob8bs8Q==
+ /json-parse-better-errors/1.0.2:
+ dev: true
+ resolution:
+ integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+ /json-schema-traverse/0.4.1:
+ dev: true
+ resolution:
+ integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+ /json-schema/0.2.3:
+ dev: true
+ resolution:
+ integrity: sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+ /json-stable-stringify-without-jsonify/1.0.1:
+ dev: true
+ resolution:
+ integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+ /json-stringify-safe/5.0.1:
+ dev: true
+ resolution:
+ integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+ /json5/1.0.1:
+ dependencies:
+ minimist: 1.2.5
+ dev: true
+ hasBin: true
+ resolution:
+ integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+ /json5/2.1.3:
+ dependencies:
+ minimist: 1.2.5
+ dev: true
+ engines:
+ node: '>=6'
+ hasBin: true
+ resolution:
+ integrity: sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==
+ /jsonfile/4.0.0:
+ dev: true
+ optionalDependencies:
+ graceful-fs: 4.2.4
+ resolution:
+ integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
+ /jsonfile/6.0.1:
+ dependencies:
+ universalify: 1.0.0
+ dev: false
+ optionalDependencies:
+ graceful-fs: 4.2.4
+ resolution:
+ integrity: sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==
+ /jsonparse/1.3.1:
+ dev: true
+ engines:
+ '0': node >= 0.2.0
+ resolution:
+ integrity: sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=
+ /jsprim/1.4.1:
+ dependencies:
+ assert-plus: 1.0.0
+ extsprintf: 1.3.0
+ json-schema: 0.2.3
+ verror: 1.10.0
+ dev: true
+ engines:
+ '0': node >=0.6.0
+ resolution:
+ integrity: sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
+ /kind-of/3.2.2:
+ dependencies:
+ is-buffer: 1.1.6
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ /kind-of/4.0.0:
+ dependencies:
+ is-buffer: 1.1.6
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ /kind-of/5.1.0:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+ /kind-of/6.0.3:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+ /kleur/3.0.3:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+ /leven/3.1.0:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+ /levn/0.3.0:
+ dependencies:
+ prelude-ls: 1.1.2
+ type-check: 0.3.2
+ dev: true
+ engines:
+ node: '>= 0.8.0'
+ resolution:
+ integrity: sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+ /levn/0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ dev: true
+ engines:
+ node: '>= 0.8.0'
+ resolution:
+ integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ /lines-and-columns/1.1.6:
+ dev: true
+ resolution:
+ integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
+ /load-json-file/2.0.0:
+ dependencies:
+ graceful-fs: 4.2.4
+ parse-json: 2.2.0
+ pify: 2.3.0
+ strip-bom: 3.0.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
+ /locate-path/2.0.0:
+ dependencies:
+ p-locate: 2.0.0
+ path-exists: 3.0.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+ /locate-path/5.0.0:
+ dependencies:
+ p-locate: 4.1.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ /lodash._reinterpolate/3.0.0:
+ dev: true
+ resolution:
+ integrity: sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
+ /lodash.map/4.6.0:
+ dev: true
+ resolution:
+ integrity: sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=
+ /lodash.memoize/4.1.2:
+ dev: true
+ resolution:
+ integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
+ /lodash.set/4.3.2:
+ dev: true
+ resolution:
+ integrity: sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=
+ /lodash.sortby/4.7.0:
+ dev: true
+ resolution:
+ integrity: sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
+ /lodash.template/4.5.0:
+ dependencies:
+ lodash._reinterpolate: 3.0.0
+ lodash.templatesettings: 4.2.0
+ dev: true
+ resolution:
+ integrity: sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==
+ /lodash.templatesettings/4.2.0:
+ dependencies:
+ lodash._reinterpolate: 3.0.0
+ dev: true
+ resolution:
+ integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==
+ /lodash/4.17.15:
+ dev: true
+ resolution:
+ integrity: sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+ /lodash/4.17.19:
+ resolution:
+ integrity: sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
+ /longest/2.0.1:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-eB4YMpaqlPbU2RbcM10NF676I/g=
+ /make-dir/3.1.0:
+ dependencies:
+ semver: 6.3.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+ /make-error/1.3.6:
+ dev: true
+ resolution:
+ integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
+ /makeerror/1.0.11:
+ dependencies:
+ tmpl: 1.0.4
+ dev: true
+ resolution:
+ integrity: sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=
+ /map-cache/0.2.2:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+ /map-obj/1.0.1:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+ /map-obj/4.1.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==
+ /map-visit/1.0.0:
+ dependencies:
+ object-visit: 1.0.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ /meow/7.0.1:
+ dependencies:
+ '@types/minimist': 1.2.0
+ arrify: 2.0.1
+ camelcase: 6.0.0
+ camelcase-keys: 6.2.2
+ decamelize-keys: 1.1.0
+ hard-rejection: 2.1.0
+ minimist-options: 4.1.0
+ normalize-package-data: 2.5.0
+ read-pkg-up: 7.0.1
+ redent: 3.0.0
+ trim-newlines: 3.0.0
+ type-fest: 0.13.1
+ yargs-parser: 18.1.3
+ dev: true
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-tBKIQqVrAHqwit0vfuFPY3LlzJYkEOFyKa3bPgxzNl6q/RtN8KQ+ALYEASYuFayzSAsjlhXj/JZ10rH85Q6TUw==
+ /merge-stream/2.0.0:
+ dev: true
+ resolution:
+ integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+ /merge/1.2.1:
+ dev: true
+ resolution:
+ integrity: sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==
+ /micromatch/3.1.10:
+ dependencies:
+ arr-diff: 4.0.0
+ array-unique: 0.3.2
+ braces: 2.3.2
+ define-property: 2.0.2
+ extend-shallow: 3.0.2
+ extglob: 2.0.4
+ fragment-cache: 0.2.1
+ kind-of: 6.0.3
+ nanomatch: 1.2.13
+ object.pick: 1.3.0
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ /micromatch/4.0.2:
+ dependencies:
+ braces: 3.0.2
+ picomatch: 2.2.2
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
+ /mime-db/1.44.0:
+ dev: true
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==
+ /mime-types/2.1.27:
+ dependencies:
+ mime-db: 1.44.0
+ dev: true
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==
+ /mimic-fn/1.2.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+ /mimic-fn/2.1.0:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+ /min-indent/1.0.1:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
+ /minimatch/3.0.4:
+ dependencies:
+ brace-expansion: 1.1.11
+ resolution:
+ integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ /minimist-options/4.1.0:
+ dependencies:
+ arrify: 1.0.1
+ is-plain-obj: 1.1.0
+ kind-of: 6.0.3
+ dev: true
+ engines:
+ node: '>= 6'
+ resolution:
+ integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==
+ /minimist/1.2.5:
+ dev: true
+ resolution:
+ integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+ /mixin-deep/1.3.2:
+ dependencies:
+ for-in: 1.0.2
+ is-extendable: 1.0.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+ /mkdirp/0.5.5:
+ dependencies:
+ minimist: 1.2.5
+ dev: true
+ hasBin: true
+ resolution:
+ integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+ /mkdirp/1.0.4:
+ dev: true
+ engines:
+ node: '>=10'
+ hasBin: true
+ resolution:
+ integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+ /moment/2.27.0:
+ dev: false
+ resolution:
+ integrity: sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==
+ /ms/2.0.0:
+ dev: true
+ resolution:
+ integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+ /ms/2.1.2:
+ dev: true
+ resolution:
+ integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+ /mute-stream/0.0.7:
+ dev: true
+ resolution:
+ integrity: sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+ /nanomatch/1.2.13:
+ dependencies:
+ arr-diff: 4.0.0
+ array-unique: 0.3.2
+ define-property: 2.0.2
+ extend-shallow: 3.0.2
+ fragment-cache: 0.2.1
+ is-windows: 1.0.2
+ kind-of: 6.0.3
+ object.pick: 1.3.0
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ /natural-compare/1.4.0:
+ dev: true
+ resolution:
+ integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+ /nice-try/1.0.5:
+ dev: true
+ resolution:
+ integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+ /nock/13.0.3:
+ dependencies:
+ debug: 4.1.1
+ json-stringify-safe: 5.0.1
+ lodash.set: 4.3.2
+ propagate: 2.0.1
+ dev: true
+ engines:
+ node: '>= 10.13'
+ resolution:
+ integrity: sha512-hDscKS5chEfyEiF8J1syz8mkkH6Wetp04ECAAPNdL5k6e6WmRgx9FZZNnCrjePNdykgiiPXORBcXbNmMzFOP5w==
+ /node-fetch/2.6.0:
+ dev: false
+ engines:
+ node: 4.x || >=6.0.0
+ resolution:
+ integrity: sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
+ /node-int64/0.4.0:
+ dev: true
+ resolution:
+ integrity: sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
+ /node-modules-regexp/1.0.0:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
+ /node-notifier/7.0.2:
+ dependencies:
+ growly: 1.3.0
+ is-wsl: 2.2.0
+ semver: 7.3.2
+ shellwords: 0.1.1
+ uuid: 8.3.0
+ which: 2.0.2
+ dev: true
+ optional: true
+ resolution:
+ integrity: sha512-ux+n4hPVETuTL8+daJXTOC6uKLgMsl1RYfFv7DKRzyvzBapqco0rZZ9g72ZN8VS6V+gvNYHYa/ofcCY8fkJWsA==
+ /normalize-package-data/2.5.0:
+ dependencies:
+ hosted-git-info: 2.8.8
+ resolve: 1.17.0
+ semver: 5.7.1
+ validate-npm-package-license: 3.0.4
+ dev: true
+ resolution:
+ integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+ /normalize-path/2.1.1:
+ dependencies:
+ remove-trailing-separator: 1.1.0
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+ /normalize-path/3.0.0:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+ /npm-run-path/2.0.2:
+ dependencies:
+ path-key: 2.0.1
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ /npm-run-path/4.0.1:
+ dependencies:
+ path-key: 3.1.1
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+ /nwsapi/2.2.0:
+ dev: true
+ resolution:
+ integrity: sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
+ /oauth-sign/0.9.0:
+ dev: true
+ resolution:
+ integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+ /object-copy/0.1.0:
+ dependencies:
+ copy-descriptor: 0.1.1
+ define-property: 0.2.5
+ kind-of: 3.2.2
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ /object-inspect/1.8.0:
+ dev: true
+ resolution:
+ integrity: sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==
+ /object-keys/1.1.1:
+ dev: true
+ engines:
+ node: '>= 0.4'
+ resolution:
+ integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+ /object-visit/1.0.1:
+ dependencies:
+ isobject: 3.0.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ /object.assign/4.1.0:
+ dependencies:
+ define-properties: 1.1.3
+ function-bind: 1.1.1
+ has-symbols: 1.0.1
+ object-keys: 1.1.1
+ dev: true
+ engines:
+ node: '>= 0.4'
+ resolution:
+ integrity: sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
+ /object.pick/1.3.0:
+ dependencies:
+ isobject: 3.0.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ /object.values/1.1.1:
+ dependencies:
+ define-properties: 1.1.3
+ es-abstract: 1.17.6
+ function-bind: 1.1.1
+ has: 1.0.3
+ dev: true
+ engines:
+ node: '>= 0.4'
+ resolution:
+ integrity: sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==
+ /once/1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+ resolution:
+ integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ /onetime/2.0.1:
+ dependencies:
+ mimic-fn: 1.2.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
+ /onetime/5.1.0:
+ dependencies:
+ mimic-fn: 2.1.0
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
+ /opencollective-postinstall/2.0.3:
+ dev: true
+ hasBin: true
+ resolution:
+ integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==
+ /optionator/0.8.3:
+ dependencies:
+ deep-is: 0.1.3
+ fast-levenshtein: 2.0.6
+ levn: 0.3.0
+ prelude-ls: 1.1.2
+ type-check: 0.3.2
+ word-wrap: 1.2.3
+ dev: true
+ engines:
+ node: '>= 0.8.0'
+ resolution:
+ integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+ /optionator/0.9.1:
+ dependencies:
+ deep-is: 0.1.3
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.3
+ dev: true
+ engines:
+ node: '>= 0.8.0'
+ resolution:
+ integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+ /os-tmpdir/1.0.2:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+ /p-each-series/2.1.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==
+ /p-finally/1.0.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+ /p-limit/1.3.0:
+ dependencies:
+ p-try: 1.0.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+ /p-limit/2.3.0:
+ dependencies:
+ p-try: 2.2.0
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ /p-locate/2.0.0:
+ dependencies:
+ p-limit: 1.3.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+ /p-locate/4.1.0:
+ dependencies:
+ p-limit: 2.3.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ /p-try/1.0.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+ /p-try/2.2.0:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+ /parent-module/1.0.1:
+ dependencies:
+ callsites: 3.1.0
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ /parse-json/2.2.0:
+ dependencies:
+ error-ex: 1.3.2
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ /parse-json/5.0.1:
+ dependencies:
+ '@babel/code-frame': 7.10.4
+ error-ex: 1.3.2
+ json-parse-better-errors: 1.0.2
+ lines-and-columns: 1.1.6
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==
+ /parse-passwd/1.0.0:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
+ /parse5/5.1.1:
+ dev: true
+ resolution:
+ integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
+ /pascalcase/0.1.1:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+ /path-exists/3.0.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+ /path-exists/4.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+ /path-is-absolute/1.0.1:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+ /path-key/2.0.1:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+ /path-key/3.1.1:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+ /path-parse/1.0.6:
+ dev: true
+ resolution:
+ integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+ /path-type/2.0.0:
+ dependencies:
+ pify: 2.3.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
+ /path-type/4.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+ /performance-now/2.1.0:
+ dev: true
+ resolution:
+ integrity: sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+ /picomatch/2.2.2:
+ dev: true
+ engines:
+ node: '>=8.6'
+ resolution:
+ integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
+ /pify/2.3.0:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+ /pirates/4.0.1:
+ dependencies:
+ node-modules-regexp: 1.0.0
+ dev: true
+ engines:
+ node: '>= 6'
+ resolution:
+ integrity: sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
+ /pkg-dir/2.0.0:
+ dependencies:
+ find-up: 2.1.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
+ /pkg-dir/4.2.0:
+ dependencies:
+ find-up: 4.1.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ /please-upgrade-node/3.2.0:
+ dependencies:
+ semver-compare: 1.0.0
+ dev: true
+ resolution:
+ integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==
+ /posix-character-classes/0.1.1:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+ /prelude-ls/1.1.2:
+ dev: true
+ engines:
+ node: '>= 0.8.0'
+ resolution:
+ integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+ /prelude-ls/1.2.1:
+ dev: true
+ engines:
+ node: '>= 0.8.0'
+ resolution:
+ integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+ /prettier-linter-helpers/1.0.0:
+ dependencies:
+ fast-diff: 1.2.0
+ dev: true
+ engines:
+ node: '>=6.0.0'
+ resolution:
+ integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==
+ /prettier/2.0.5:
+ dev: true
+ engines:
+ node: '>=10.13.0'
+ hasBin: true
+ resolution:
+ integrity: sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==
+ /pretty-format/25.5.0:
+ dependencies:
+ '@jest/types': 25.5.0
+ ansi-regex: 5.0.0
+ ansi-styles: 4.2.1
+ react-is: 16.13.1
+ dev: true
+ engines:
+ node: '>= 8.3'
+ resolution:
+ integrity: sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==
+ /pretty-format/26.1.0:
+ dependencies:
+ '@jest/types': 26.1.0
+ ansi-regex: 5.0.0
+ ansi-styles: 4.2.1
+ react-is: 16.13.1
+ dev: true
+ engines:
+ node: '>= 10.14.2'
+ resolution:
+ integrity: sha512-GmeO1PEYdM+non4BKCj+XsPJjFOJIPnsLewqhDVoqY1xo0yNmDas7tC2XwpMrRAHR3MaE2hPo37deX5OisJ2Wg==
+ /process-nextick-args/2.0.1:
+ dev: true
+ resolution:
+ integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+ /progress/2.0.3:
+ dev: true
+ engines:
+ node: '>=0.4.0'
+ resolution:
+ integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+ /prompts/2.3.2:
+ dependencies:
+ kleur: 3.0.3
+ sisteransi: 1.0.5
+ dev: true
+ engines:
+ node: '>= 6'
+ resolution:
+ integrity: sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==
+ /propagate/2.0.1:
+ dev: true
+ engines:
+ node: '>= 8'
+ resolution:
+ integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==
+ /proper-lockfile/1.2.0:
+ dependencies:
+ err-code: 1.1.2
+ extend: 3.0.2
+ graceful-fs: 4.2.4
+ retry: 0.10.1
+ dev: false
+ resolution:
+ integrity: sha1-zv9d2J0+XxD7deHo52vHWAGlnDQ=
+ /psl/1.8.0:
+ dev: true
+ resolution:
+ integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
+ /pump/3.0.0:
+ dependencies:
+ end-of-stream: 1.4.4
+ once: 1.4.0
+ dev: true
+ resolution:
+ integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ /punycode/2.1.1:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+ /q/1.5.1:
+ dev: true
+ engines:
+ node: '>=0.6.0'
+ teleport: '>=0.2.0'
+ resolution:
+ integrity: sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+ /qs/6.5.2:
+ dev: true
+ engines:
+ node: '>=0.6'
+ resolution:
+ integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+ /quick-lru/4.0.1:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
+ /react-is/16.13.1:
+ dev: true
+ resolution:
+ integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+ /read-pkg-up/2.0.0:
+ dependencies:
+ find-up: 2.1.0
+ read-pkg: 2.0.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
+ /read-pkg-up/7.0.1:
+ dependencies:
+ find-up: 4.1.0
+ read-pkg: 5.2.0
+ type-fest: 0.8.1
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==
+ /read-pkg/2.0.0:
+ dependencies:
+ load-json-file: 2.0.0
+ normalize-package-data: 2.5.0
+ path-type: 2.0.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
+ /read-pkg/5.2.0:
+ dependencies:
+ '@types/normalize-package-data': 2.4.0
+ normalize-package-data: 2.5.0
+ parse-json: 5.0.1
+ type-fest: 0.6.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
+ /readable-stream/2.3.7:
+ dependencies:
+ core-util-is: 1.0.2
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+ dev: true
+ resolution:
+ integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ /readable-stream/3.6.0:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+ dev: true
+ engines:
+ node: '>= 6'
+ resolution:
+ integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+ /redent/3.0.0:
+ dependencies:
+ indent-string: 4.0.0
+ strip-indent: 3.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
+ /regenerator-runtime/0.13.7:
+ dev: true
+ resolution:
+ integrity: sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
+ /regex-not/1.0.2:
+ dependencies:
+ extend-shallow: 3.0.2
+ safe-regex: 1.1.0
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ /regexpp/3.1.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
+ /remove-trailing-separator/1.1.0:
+ dev: true
+ resolution:
+ integrity: sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+ /repeat-element/1.1.3:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
+ /repeat-string/1.6.1:
+ dev: true
+ engines:
+ node: '>=0.10'
+ resolution:
+ integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+ /request-promise-core/1.1.4_request@2.88.2:
+ dependencies:
+ lodash: 4.17.19
+ request: 2.88.2
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ peerDependencies:
+ request: ^2.34
+ resolution:
+ integrity: sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==
+ /request-promise-native/1.0.9_request@2.88.2:
+ dependencies:
+ request: 2.88.2
+ request-promise-core: 1.1.4_request@2.88.2
+ stealthy-require: 1.1.1
+ tough-cookie: 2.5.0
+ deprecated: 'request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142'
+ dev: true
+ engines:
+ node: '>=0.12.0'
+ peerDependencies:
+ request: ^2.34
+ resolution:
+ integrity: sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==
+ /request/2.88.2:
+ dependencies:
+ aws-sign2: 0.7.0
+ aws4: 1.10.0
+ caseless: 0.12.0
+ combined-stream: 1.0.8
+ extend: 3.0.2
+ forever-agent: 0.6.1
+ form-data: 2.3.3
+ har-validator: 5.1.5
+ http-signature: 1.2.0
+ is-typedarray: 1.0.0
+ isstream: 0.1.2
+ json-stringify-safe: 5.0.1
+ mime-types: 2.1.27
+ oauth-sign: 0.9.0
+ performance-now: 2.1.0
+ qs: 6.5.2
+ safe-buffer: 5.2.1
+ tough-cookie: 2.5.0
+ tunnel-agent: 0.6.0
+ uuid: 3.4.0
+ deprecated: 'request has been deprecated, see https://github.com/request/request/issues/3142'
+ dev: true
+ engines:
+ node: '>= 6'
+ resolution:
+ integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
+ /require-directory/2.1.1:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+ /require-main-filename/2.0.0:
+ dev: true
+ resolution:
+ integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+ /resolve-cwd/3.0.0:
+ dependencies:
+ resolve-from: 5.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+ /resolve-dir/1.0.1:
+ dependencies:
+ expand-tilde: 2.0.2
+ global-modules: 1.0.0
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=
+ /resolve-from/4.0.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+ /resolve-from/5.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+ /resolve-global/1.0.0:
+ dependencies:
+ global-dirs: 0.1.1
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==
+ /resolve-url/0.2.1:
+ deprecated: 'https://github.com/lydell/resolve-url#deprecated'
+ dev: true
+ resolution:
+ integrity: sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+ /resolve/1.17.0:
+ dependencies:
+ path-parse: 1.0.6
+ dev: true
+ resolution:
+ integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
+ /restore-cursor/2.0.0:
+ dependencies:
+ onetime: 2.0.1
+ signal-exit: 3.0.3
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
+ /ret/0.1.15:
+ dev: true
+ engines:
+ node: '>=0.12'
+ resolution:
+ integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+ /retry/0.10.1:
+ dev: false
+ resolution:
+ integrity: sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=
+ /rimraf/2.6.3:
+ dependencies:
+ glob: 7.1.6
+ dev: true
+ hasBin: true
+ resolution:
+ integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ /rimraf/3.0.2:
+ dependencies:
+ glob: 7.1.6
+ dev: true
+ hasBin: true
+ resolution:
+ integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ /rsvp/4.8.5:
+ dev: true
+ engines:
+ node: 6.* || >= 7.*
+ resolution:
+ integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
+ /run-async/2.4.1:
+ dev: true
+ engines:
+ node: '>=0.12.0'
+ resolution:
+ integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
+ /rxjs/6.6.0:
+ dependencies:
+ tslib: 1.13.0
+ dev: true
+ engines:
+ npm: '>=2.0.0'
+ resolution:
+ integrity: sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg==
+ /safe-buffer/5.1.2:
+ dev: true
+ resolution:
+ integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+ /safe-buffer/5.2.1:
+ dev: true
+ resolution:
+ integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+ /safe-regex/1.1.0:
+ dependencies:
+ ret: 0.1.15
+ dev: true
+ resolution:
+ integrity: sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ /safer-buffer/2.1.2:
+ dev: true
+ resolution:
+ integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+ /sane/4.1.0:
+ dependencies:
+ '@cnakazawa/watch': 1.0.4
+ anymatch: 2.0.0
+ capture-exit: 2.0.0
+ exec-sh: 0.3.4
+ execa: 1.0.0
+ fb-watchman: 2.0.1
+ micromatch: 3.1.10
+ minimist: 1.2.5
+ walker: 1.0.7
+ dev: true
+ engines:
+ node: 6.* || 8.* || >= 10.*
+ hasBin: true
+ resolution:
+ integrity: sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==
+ /saxes/5.0.1:
+ dependencies:
+ xmlchars: 2.2.0
+ dev: true
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
+ /semver-compare/1.0.0:
+ dev: true
+ resolution:
+ integrity: sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
+ /semver-regex/2.0.0:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==
+ /semver/5.7.1:
+ dev: true
+ hasBin: true
+ resolution:
+ integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+ /semver/6.3.0:
+ hasBin: true
+ resolution:
+ integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+ /semver/7.3.2:
+ dev: true
+ engines:
+ node: '>=10'
+ hasBin: true
+ resolution:
+ integrity: sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
+ /set-blocking/2.0.0:
+ dev: true
+ resolution:
+ integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+ /set-value/2.0.1:
+ dependencies:
+ extend-shallow: 2.0.1
+ is-extendable: 0.1.1
+ is-plain-object: 2.0.4
+ split-string: 3.1.0
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ /shebang-command/1.2.0:
+ dependencies:
+ shebang-regex: 1.0.0
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ /shebang-command/2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ /shebang-regex/1.0.0:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+ /shebang-regex/3.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+ /shellwords/0.1.1:
+ dev: true
+ optional: true
+ resolution:
+ integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
+ /signal-exit/3.0.3:
+ dev: true
+ resolution:
+ integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
+ /sisteransi/1.0.5:
+ dev: true
+ resolution:
+ integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+ /slash/3.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+ /slice-ansi/2.1.0:
+ dependencies:
+ ansi-styles: 3.2.1
+ astral-regex: 1.0.0
+ is-fullwidth-code-point: 2.0.0
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+ /snapdragon-node/2.1.1:
+ dependencies:
+ define-property: 1.0.0
+ isobject: 3.0.1
+ snapdragon-util: 3.0.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ /snapdragon-util/3.0.1:
+ dependencies:
+ kind-of: 3.2.2
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ /snapdragon/0.8.2:
+ dependencies:
+ base: 0.11.2
+ debug: 2.6.9
+ define-property: 0.2.5
+ extend-shallow: 2.0.1
+ map-cache: 0.2.2
+ source-map: 0.5.7
+ source-map-resolve: 0.5.3
+ use: 3.1.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ /source-map-resolve/0.5.3:
+ dependencies:
+ atob: 2.1.2
+ decode-uri-component: 0.2.0
+ resolve-url: 0.2.1
+ source-map-url: 0.4.0
+ urix: 0.1.0
+ dev: true
+ resolution:
+ integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
+ /source-map-support/0.5.19:
+ dependencies:
+ buffer-from: 1.1.1
+ source-map: 0.6.1
+ dev: true
+ resolution:
+ integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
+ /source-map-url/0.4.0:
+ dev: true
+ resolution:
+ integrity: sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+ /source-map/0.5.7:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+ /source-map/0.6.1:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+ /source-map/0.7.3:
+ dev: true
+ engines:
+ node: '>= 8'
+ resolution:
+ integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
+ /spdx-correct/3.1.1:
+ dependencies:
+ spdx-expression-parse: 3.0.1
+ spdx-license-ids: 3.0.5
+ dev: true
+ resolution:
+ integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
+ /spdx-exceptions/2.3.0:
+ dev: true
+ resolution:
+ integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
+ /spdx-expression-parse/3.0.1:
+ dependencies:
+ spdx-exceptions: 2.3.0
+ spdx-license-ids: 3.0.5
+ dev: true
+ resolution:
+ integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
+ /spdx-license-ids/3.0.5:
+ dev: true
+ resolution:
+ integrity: sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
+ /split-string/3.1.0:
+ dependencies:
+ extend-shallow: 3.0.2
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ /split2/2.2.0:
+ dependencies:
+ through2: 2.0.5
+ dev: true
+ resolution:
+ integrity: sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==
+ /sprintf-js/1.0.3:
+ dev: true
+ resolution:
+ integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+ /sshpk/1.16.1:
+ dependencies:
+ asn1: 0.2.4
+ assert-plus: 1.0.0
+ bcrypt-pbkdf: 1.0.2
+ dashdash: 1.14.1
+ ecc-jsbn: 0.1.2
+ getpass: 0.1.7
+ jsbn: 0.1.1
+ safer-buffer: 2.1.2
+ tweetnacl: 0.14.5
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ hasBin: true
+ resolution:
+ integrity: sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
+ /stack-utils/2.0.2:
+ dependencies:
+ escape-string-regexp: 2.0.0
+ dev: true
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg==
+ /static-extend/0.1.2:
+ dependencies:
+ define-property: 0.2.5
+ object-copy: 0.1.0
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ /stealthy-require/1.1.1:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
+ /string-length/4.0.1:
+ dependencies:
+ char-regex: 1.0.2
+ strip-ansi: 6.0.0
+ dev: true
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==
+ /string-width/2.1.1:
+ dependencies:
+ is-fullwidth-code-point: 2.0.0
+ strip-ansi: 4.0.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ /string-width/3.1.0:
+ dependencies:
+ emoji-regex: 7.0.3
+ is-fullwidth-code-point: 2.0.0
+ strip-ansi: 5.2.0
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+ /string-width/4.2.0:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
+ /string.prototype.trimend/1.0.1:
+ dependencies:
+ define-properties: 1.1.3
+ es-abstract: 1.17.6
+ dev: true
+ resolution:
+ integrity: sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
+ /string.prototype.trimstart/1.0.1:
+ dependencies:
+ define-properties: 1.1.3
+ es-abstract: 1.17.6
+ dev: true
+ resolution:
+ integrity: sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
+ /string_decoder/1.1.1:
+ dependencies:
+ safe-buffer: 5.1.2
+ dev: true
+ resolution:
+ integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ /string_decoder/1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: true
+ resolution:
+ integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ /strip-ansi/4.0.0:
+ dependencies:
+ ansi-regex: 3.0.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ /strip-ansi/5.2.0:
+ dependencies:
+ ansi-regex: 4.1.0
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+ /strip-ansi/6.0.0:
+ dependencies:
+ ansi-regex: 5.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+ /strip-bom/3.0.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+ /strip-bom/4.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
+ /strip-eof/1.0.0:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+ /strip-final-newline/2.0.0:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+ /strip-indent/3.0.0:
+ dependencies:
+ min-indent: 1.0.1
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
+ /strip-json-comments/3.0.1:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
+ /strip-json-comments/3.1.1:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+ /supports-color/5.5.0:
+ dependencies:
+ has-flag: 3.0.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ /supports-color/7.1.0:
+ dependencies:
+ has-flag: 4.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==
+ /supports-hyperlinks/2.1.0:
+ dependencies:
+ has-flag: 4.0.0
+ supports-color: 7.1.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==
+ /svg-element-attributes/1.3.1:
+ dev: true
+ resolution:
+ integrity: sha512-Bh05dSOnJBf3miNMqpsormfNtfidA/GxQVakhtn0T4DECWKeXQRQUceYjJ+OxYiiLdGe4Jo9iFV8wICFapFeIA==
+ /symbol-tree/3.2.4:
+ dev: true
+ resolution:
+ integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+ /table/5.4.6:
+ dependencies:
+ ajv: 6.12.3
+ lodash: 4.17.19
+ slice-ansi: 2.1.0
+ string-width: 3.1.0
+ dev: true
+ engines:
+ node: '>=6.0.0'
+ resolution:
+ integrity: sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
+ /terminal-link/2.1.1:
+ dependencies:
+ ansi-escapes: 4.3.1
+ supports-hyperlinks: 2.1.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==
+ /test-exclude/6.0.0:
+ dependencies:
+ '@istanbuljs/schema': 0.1.2
+ glob: 7.1.6
+ minimatch: 3.0.4
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
+ /text-extensions/1.9.0:
+ dev: true
+ engines:
+ node: '>=0.10'
+ resolution:
+ integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==
+ /text-table/0.2.0:
+ dev: true
+ resolution:
+ integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+ /throat/5.0.0:
+ dev: true
+ resolution:
+ integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==
+ /through/2.3.8:
+ dev: true
+ resolution:
+ integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+ /through2/2.0.5:
+ dependencies:
+ readable-stream: 2.3.7
+ xtend: 4.0.2
+ dev: true
+ resolution:
+ integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ /through2/3.0.2:
+ dependencies:
+ inherits: 2.0.4
+ readable-stream: 3.6.0
+ dev: true
+ resolution:
+ integrity: sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==
+ /tmp/0.0.33:
+ dependencies:
+ os-tmpdir: 1.0.2
+ dev: true
+ engines:
+ node: '>=0.6.0'
+ resolution:
+ integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ /tmpl/1.0.4:
+ dev: true
+ resolution:
+ integrity: sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=
+ /to-fast-properties/2.0.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+ /to-object-path/0.3.0:
+ dependencies:
+ kind-of: 3.2.2
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ /to-regex-range/2.1.1:
+ dependencies:
+ is-number: 3.0.0
+ repeat-string: 1.6.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ /to-regex-range/5.0.1:
+ dependencies:
+ is-number: 7.0.0
+ dev: true
+ engines:
+ node: '>=8.0'
+ resolution:
+ integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ /to-regex/3.0.2:
+ dependencies:
+ define-property: 2.0.2
+ extend-shallow: 3.0.2
+ regex-not: 1.0.2
+ safe-regex: 1.1.0
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ /tough-cookie/2.5.0:
+ dependencies:
+ psl: 1.8.0
+ punycode: 2.1.1
+ dev: true
+ engines:
+ node: '>=0.8'
+ resolution:
+ integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+ /tough-cookie/3.0.1:
+ dependencies:
+ ip-regex: 2.1.0
+ psl: 1.8.0
+ punycode: 2.1.1
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==
+ /tr46/2.0.2:
+ dependencies:
+ punycode: 2.1.1
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==
+ /trim-newlines/3.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==
+ /trim-off-newlines/1.0.1:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
+ /ts-jest/26.1.4_jest@26.1.0+typescript@3.9.7:
+ dependencies:
+ bs-logger: 0.2.6
+ buffer-from: 1.1.1
+ fast-json-stable-stringify: 2.1.0
+ jest: 26.1.0
+ jest-util: 26.1.0
+ json5: 2.1.3
+ lodash.memoize: 4.1.2
+ make-error: 1.3.6
+ mkdirp: 1.0.4
+ semver: 7.3.2
+ typescript: 3.9.7
+ yargs-parser: 18.1.3
+ dev: true
+ engines:
+ node: '>= 10'
+ hasBin: true
+ peerDependencies:
+ jest: '>=26 <27'
+ typescript: '>=3.8 <4.0'
+ resolution:
+ integrity: sha512-Nd7diUX6NZWfWq6FYyvcIPR/c7GbEF75fH1R6coOp3fbNzbRJBZZAn0ueVS0r8r9ral1VcrpneAFAwB3TsVS1Q==
+ /tsconfig-paths/3.9.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.1
+ minimist: 1.2.5
+ strip-bom: 3.0.0
+ dev: true
+ resolution:
+ integrity: sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==
+ /tslib/1.13.0:
+ dev: true
+ resolution:
+ integrity: sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
+ /tsutils/3.17.1_typescript@3.9.7:
+ dependencies:
+ tslib: 1.13.0
+ typescript: 3.9.7
+ dev: true
+ engines:
+ node: '>= 6'
+ peerDependencies:
+ typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
+ resolution:
+ integrity: sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==
+ /tunnel-agent/0.6.0:
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: true
+ resolution:
+ integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+ /tunnel/0.0.6:
+ dev: false
+ engines:
+ node: '>=0.6.11 <=0.7.0 || >=0.7.3'
+ resolution:
+ integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==
+ /tweetnacl/0.14.5:
+ dev: true
+ resolution:
+ integrity: sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+ /type-check/0.3.2:
+ dependencies:
+ prelude-ls: 1.1.2
+ dev: true
+ engines:
+ node: '>= 0.8.0'
+ resolution:
+ integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+ /type-check/0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+ dev: true
+ engines:
+ node: '>= 0.8.0'
+ resolution:
+ integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ /type-detect/4.0.8:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+ /type-fest/0.11.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
+ /type-fest/0.13.1:
+ dev: true
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
+ /type-fest/0.6.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
+ /type-fest/0.8.1:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+ /typedarray-to-buffer/3.1.5:
+ dependencies:
+ is-typedarray: 1.0.0
+ dev: true
+ resolution:
+ integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+ /typescript/3.9.7:
+ dev: true
+ engines:
+ node: '>=4.2.0'
+ hasBin: true
+ resolution:
+ integrity: sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==
+ /union-value/1.0.1:
+ dependencies:
+ arr-union: 3.1.0
+ get-value: 2.0.6
+ is-extendable: 0.1.1
+ set-value: 2.0.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ /unit-compare/1.0.1:
+ dependencies:
+ moment: 2.27.0
+ dev: false
+ resolution:
+ integrity: sha1-DHRZ8OW/U2N+qHPKPO4Y3i7so4Y=
+ /universal-user-agent/6.0.0:
+ dev: false
+ resolution:
+ integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==
+ /universalify/0.1.2:
+ dev: true
+ engines:
+ node: '>= 4.0.0'
+ resolution:
+ integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+ /universalify/1.0.0:
+ dev: false
+ engines:
+ node: '>= 10.0.0'
+ resolution:
+ integrity: sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==
+ /unset-value/1.0.0:
+ dependencies:
+ has-value: 0.3.1
+ isobject: 3.0.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ /uri-js/4.2.2:
+ dependencies:
+ punycode: 2.1.1
+ dev: true
+ resolution:
+ integrity: sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+ /urix/0.1.0:
+ deprecated: 'Please see https://github.com/lydell/urix#deprecated'
+ dev: true
+ resolution:
+ integrity: sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+ /url-template/2.0.8:
+ dev: true
+ resolution:
+ integrity: sha1-/FZaPMy/93MMd19WQflVV5FDnyE=
+ /use/3.1.1:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+ /util-deprecate/1.0.2:
+ dev: true
+ resolution:
+ integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+ /uuid/3.4.0:
+ hasBin: true
+ resolution:
+ integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+ /uuid/8.3.0:
+ hasBin: true
+ resolution:
+ integrity: sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==
+ /v8-compile-cache/2.1.1:
+ dev: true
+ resolution:
+ integrity: sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==
+ /v8-to-istanbul/4.1.4:
+ dependencies:
+ '@types/istanbul-lib-coverage': 2.0.3
+ convert-source-map: 1.7.0
+ source-map: 0.7.3
+ dev: true
+ engines:
+ node: 8.x.x || >=10.10.0
+ resolution:
+ integrity: sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ==
+ /validate-npm-package-license/3.0.4:
+ dependencies:
+ spdx-correct: 3.1.1
+ spdx-expression-parse: 3.0.1
+ dev: true
+ resolution:
+ integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ /verror/1.10.0:
+ dependencies:
+ assert-plus: 1.0.0
+ core-util-is: 1.0.2
+ extsprintf: 1.3.0
+ dev: true
+ engines:
+ '0': node >=0.6.0
+ resolution:
+ integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+ /w3c-hr-time/1.0.2:
+ dependencies:
+ browser-process-hrtime: 1.0.0
+ dev: true
+ resolution:
+ integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
+ /w3c-xmlserializer/2.0.0:
+ dependencies:
+ xml-name-validator: 3.0.0
+ dev: true
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==
+ /walker/1.0.7:
+ dependencies:
+ makeerror: 1.0.11
+ dev: true
+ resolution:
+ integrity: sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=
+ /webidl-conversions/5.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==
+ /webidl-conversions/6.1.0:
+ dev: true
+ engines:
+ node: '>=10.4'
+ resolution:
+ integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
+ /whatwg-encoding/1.0.5:
+ dependencies:
+ iconv-lite: 0.4.24
+ dev: true
+ resolution:
+ integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
+ /whatwg-mimetype/2.3.0:
+ dev: true
+ resolution:
+ integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
+ /whatwg-url/8.1.0:
+ dependencies:
+ lodash.sortby: 4.7.0
+ tr46: 2.0.2
+ webidl-conversions: 5.0.0
+ dev: true
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-vEIkwNi9Hqt4TV9RdnaBPNt+E2Sgmo3gePebCRgZ1R7g6d23+53zCTnuB0amKI4AXq6VM8jj2DUAa0S1vjJxkw==
+ /which-module/2.0.0:
+ dev: true
+ resolution:
+ integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+ /which-pm-runs/1.0.0:
+ dev: true
+ resolution:
+ integrity: sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=
+ /which/1.3.1:
+ dependencies:
+ isexe: 2.0.0
+ dev: true
+ hasBin: true
+ resolution:
+ integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ /which/2.0.2:
+ dependencies:
+ isexe: 2.0.0
+ engines:
+ node: '>= 8'
+ hasBin: true
+ resolution:
+ integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ /word-wrap/1.2.3:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+ /wordwrap/1.0.0:
+ dev: true
+ resolution:
+ integrity: sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
+ /wrap-ansi/6.2.0:
+ dependencies:
+ ansi-styles: 4.2.1
+ string-width: 4.2.0
+ strip-ansi: 6.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+ /wrappy/1.0.2:
+ resolution:
+ integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+ /write-file-atomic/3.0.3:
+ dependencies:
+ imurmurhash: 0.1.4
+ is-typedarray: 1.0.0
+ signal-exit: 3.0.3
+ typedarray-to-buffer: 3.1.5
+ dev: true
+ resolution:
+ integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+ /write/1.0.3:
+ dependencies:
+ mkdirp: 0.5.5
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
+ /ws/7.3.1:
+ dev: true
+ engines:
+ node: '>=8.3.0'
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ resolution:
+ integrity: sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==
+ /xml-name-validator/3.0.0:
+ dev: true
+ resolution:
+ integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+ /xmlchars/2.2.0:
+ dev: true
+ resolution:
+ integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+ /xtend/4.0.2:
+ dev: true
+ engines:
+ node: '>=0.4'
+ resolution:
+ integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+ /y18n/4.0.0:
+ dev: true
+ resolution:
+ integrity: sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+ /yaml/1.10.0:
+ engines:
+ node: '>= 6'
+ resolution:
+ integrity: sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==
+ /yargs-parser/18.1.3:
+ dependencies:
+ camelcase: 5.3.1
+ decamelize: 1.2.0
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
+ /yargs/15.4.1:
+ dependencies:
+ cliui: 6.0.0
+ decamelize: 1.2.0
+ find-up: 4.1.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ require-main-filename: 2.0.0
+ set-blocking: 2.0.0
+ string-width: 4.2.0
+ which-module: 2.0.0
+ y18n: 4.0.0
+ yargs-parser: 18.1.3
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
+specifiers:
+ '@actions/core': ^1.2.4
+ '@actions/exec': ^1.0.4
+ '@actions/tool-cache': ^1.3.5
+ '@commitlint/cli': ^9.1.2
+ '@commitlint/config-conventional': ^9.1.1
+ '@commitlint/core': ^9.1.1
+ '@octokit/action': ^3.0.5
+ '@octokit/core': ^3.1.1
+ '@octokit/fixtures': ^21.0.5
+ '@octokit/plugin-retry': ^3.0.1
+ '@octokit/types': ^5.2.0
+ '@types/bluebird': ^3.5.30
+ '@types/diff': ^4.0.2
+ '@types/fs-extra': ^9.0.1
+ '@types/jest': ^26.0.7
+ '@types/js-yaml': ^3.12.3
+ '@types/node': ^14.0.1
+ '@types/promise-retry': ^1.1.3
+ '@types/tmp': ^0.2.0
+ '@types/uuid': ^8.0.0
+ '@types/which': ^1.3.2
+ '@typescript-eslint/parser': ^3.0.0
+ '@zeit/ncc': ^0.22.1
+ conventional-changelog-conventionalcommits: ^4.3.1
+ cz-conventional-changelog: ^3.0.2
+ diff: ^4.0.2
+ eslint: ^7.5.0
+ eslint-plugin-github: ^4.1.1
+ eslint-plugin-jest: ^23.18.0
+ filehound: ^1.17.4
+ fs-extra: ^9.0.0
+ husky: ^4.2.5
+ jest: ^26.0.1
+ jest-circus: ^26.0.1
+ js-yaml: ^3.13.1
+ prettier: ^2.0.5
+ ts-jest: ^26.0.0
+ typescript: ^3.9.2
+ uuid: ^8.0.0
+ which: ^2.0.2
+ yaml: ^1.10.0
diff --git a/src/interfaces.ts b/src/interfaces.ts
index c8e208e5..62b8d757 100644
--- a/src/interfaces.ts
+++ b/src/interfaces.ts
@@ -111,9 +111,9 @@ export const DIFF_EQUAL = 0
export interface Filter {
filePath: string
- filter: string,
- strict: boolean,
- count: number,
+ filter: string
+ strict: boolean
+ count: number
maxCount: number
}
diff --git a/src/settings.ts b/src/settings.ts
index 4da0f73c..6ae5dca3 100644
--- a/src/settings.ts
+++ b/src/settings.ts
@@ -2,7 +2,7 @@ import * as core from '@actions/core'
import {URL} from 'url'
import path from 'path'
import YAML from 'yaml'
-import fs from 'fs-extra';
+import fs from 'fs-extra'
import {GithubActionContext} from './github-action-context'
import {Filter, ISettings, IYamlSettings} from './interfaces'
import {inspect} from 'util'
@@ -16,7 +16,9 @@ export class Settings implements ISettings {
let githubWorkspacePath = Settings.getGithubWorkspacePath()
- let {ignoreList, filters} = Settings.loadYamlSettings(path.join(githubWorkspacePath, '.github', 'template-sync-settings.yml'))
+ let {ignoreList, filters} = Settings.loadYamlSettings(
+ path.join(githubWorkspacePath, '.github', 'template-sync-settings.yml')
+ )
this.settings = {
authToken: core.getInput('github_token', {required: true}),
@@ -81,7 +83,9 @@ export class Settings implements ISettings {
return githubWorkspacePath
}
- public static loadYamlSettings(dotGithubPath: string): {filters: Filter[], ignoreList: string[]} {
+ public static loadYamlSettings(
+ dotGithubPath: string
+ ): {filters: Filter[]; ignoreList: string[]} {
let ignoreList: string[] = []
const filters: Filter[] = []
@@ -89,12 +93,17 @@ export class Settings implements ISettings {
const stats = fs.lstatSync(dotGithubPath)
if (stats.isFile()) {
- const yamlSettings: IYamlSettings = YAML.parse(fs.readFileSync(dotGithubPath, 'utf8'))
+ const yamlSettings: IYamlSettings = YAML.parse(
+ fs.readFileSync(dotGithubPath, 'utf8')
+ )
const yamlFilters = yamlSettings.filters || []
- yamlFilters.forEach((filter) => {
+ yamlFilters.forEach(filter => {
if (typeof filter === 'object' && filter !== null) {
- if (typeof filter.filepath !== 'undefined' && typeof filter.filter !== 'undefined') {
+ if (
+ typeof filter.filepath !== 'undefined' &&
+ typeof filter.filter !== 'undefined'
+ ) {
filters.push({
filePath: filter.filepath,
filter: filter.filter,
@@ -103,15 +112,24 @@ export class Settings implements ISettings {
maxCount: filter.count || 1
} as Filter)
} else {
- core.info(`Please provide the correct syntax for ${inspect(filter)}; Check the readme of https://github.com/narrowspark/template-sync-action.`)
+ core.info(
+ `Please provide the correct syntax for ${inspect(
+ filter
+ )}; Check the readme of https://github.com/narrowspark/template-sync-action.`
+ )
}
}
})
- return {ignoreList: yamlSettings.ignore_list as string[] || [], filters}
+ return {
+ ignoreList: (yamlSettings.ignore_list as string[]) || [],
+ filters
+ }
}
} catch (e) {
- core.info(`No settings file found under ${dotGithubPath}, continue without it...`)
+ core.info(
+ `No settings file found under ${dotGithubPath}, continue without it...`
+ )
}
return {ignoreList, filters}
diff --git a/src/sync.ts b/src/sync.ts
index 8581f193..7dfb70a5 100644
--- a/src/sync.ts
+++ b/src/sync.ts
@@ -114,7 +114,7 @@ export const sync = async (settings: ISettings) => {
diffs = diffs.filter(Boolean)
core.debug(`Diff list after filters are applied; ${inspect(diffs)}`)
-console.log(diff.patchMake(diffs)[0].diffs)
+ console.log(diff.patchMake(diffs)[0].diffs)
if (diffs.length !== 0) {
const [text, results] = diff.patchApply(
From 99734134c0047b53817693f6a0784fcff5689fae Mon Sep 17 00:00:00 2001
From: "dependabot-preview[bot]"
<27856297+dependabot-preview[bot]@users.noreply.github.com>
Date: Fri, 22 May 2020 18:35:26 +0000
Subject: [PATCH 03/21] Build(deps-dev): Bump js-yaml from 3.13.1 to 3.14.0
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 3.13.1 to 3.14.0.
- [Release notes](https://github.com/nodeca/js-yaml/releases)
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/3.13.1...3.14.0)
Signed-off-by: dependabot-preview[bot]
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 3ce56208..a501a25c 100644
--- a/package.json
+++ b/package.json
@@ -89,7 +89,7 @@
"husky": "^4.2.5",
"jest": "^26.0.1",
"jest-circus": "^26.0.1",
- "js-yaml": "^3.13.1",
+ "js-yaml": "^3.14.0",
"prettier": "^2.0.5",
"ts-jest": "^26.0.0",
"typescript": "^3.9.2"
From 671a9b84d26371b90dc8544854f92d13d95a7fad Mon Sep 17 00:00:00 2001
From: prisis
Date: Mon, 22 Feb 2021 11:50:40 +0100
Subject: [PATCH 04/21] feat: upgraded dependencies feat: upgraded old
functions calls style: cs fixes
---
.eslintrc.js | 19 +
.eslintrc.json | 51 -
.github/renovate.json5 | 110 +-
.github/workflows/auto-close-fixed-issues.yml | 16 +
.github/workflows/greetings.yml | 15 +
.github/workflows/test.yml | 46 +-
.husky/.gitignore | 1 +
.husky/commit-msg | 14 +
.husky/pre-commit | 16 +
.husky/prepare-commit-msg | 9 +
.prettierrc.js | 23 +
.prettierrc.json | 11 -
.textlintrc | 143 +
dist/index.js | 54 +-
package.json | 24 +-
src/git-version.ts | 141 +-
src/misc/generate-docs.ts | 197 +-
src/octokit.ts | 26 +-
src/ref-helper.ts | 128 +-
src/retry-helper.ts | 97 +-
src/settings.ts | 207 +-
src/state-helper.ts | 36 +-
tsconfig.json | 2 +-
yarn.lock | 9091 +++++++++++++++++
24 files changed, 9878 insertions(+), 599 deletions(-)
create mode 100644 .eslintrc.js
delete mode 100644 .eslintrc.json
create mode 100644 .github/workflows/auto-close-fixed-issues.yml
create mode 100644 .github/workflows/greetings.yml
create mode 100644 .husky/.gitignore
create mode 100644 .husky/commit-msg
create mode 100644 .husky/pre-commit
create mode 100644 .husky/prepare-commit-msg
create mode 100644 .prettierrc.js
delete mode 100644 .prettierrc.json
create mode 100644 .textlintrc
create mode 100644 yarn.lock
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 00000000..eb3cf8ba
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,19 @@
+module.exports = {
+ extends: ["@anolilab/eslint-config"],
+ "parserOptions": {
+ "project": "./tsconfig.json"
+ },
+ env: {
+ "node": true,
+ "es6": true,
+ "jest/globals": true
+ },
+ globals: {
+ // Your global variables (setting to false means it's not allowed to be reassigned)
+ //
+ // myGlobal: false
+ },
+ rules: {
+ // Customize your rules
+ }
+};
diff --git a/.eslintrc.json b/.eslintrc.json
deleted file mode 100644
index 060ef8c1..00000000
--- a/.eslintrc.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- "plugins": ["jest", "@typescript-eslint", "github"],
- "extends": ["plugin:github/typescript"],
- "parser": "@typescript-eslint/parser",
- "parserOptions": {
- "ecmaVersion": 9,
- "sourceType": "module",
- "project": "./tsconfig.json"
- },
- "rules": {
- "eslint-comments/no-use": "off",
- "import/no-namespace": "off",
- "no-unused-vars": "off",
- "@typescript-eslint/no-unused-vars": "error",
- "@typescript-eslint/explicit-member-accessibility": ["error", {"accessibility": "no-public"}],
- "@typescript-eslint/no-require-imports": "error",
- "@typescript-eslint/array-type": "error",
- "@typescript-eslint/await-thenable": "error",
- "camelcase": "off",
- "@typescript-eslint/explicit-function-return-type": ["error", {"allowExpressions": true}],
- "@typescript-eslint/func-call-spacing": ["error", "never"],
- "@typescript-eslint/no-array-constructor": "error",
- "@typescript-eslint/no-empty-interface": "error",
- "@typescript-eslint/no-explicit-any": "error",
- "@typescript-eslint/no-extraneous-class": "error",
- "@typescript-eslint/no-for-in-array": "error",
- "@typescript-eslint/no-inferrable-types": "error",
- "@typescript-eslint/no-misused-new": "error",
- "@typescript-eslint/no-namespace": "error",
- "@typescript-eslint/no-non-null-assertion": "warn",
- "@typescript-eslint/no-unnecessary-qualifier": "error",
- "@typescript-eslint/no-unnecessary-type-assertion": "error",
- "@typescript-eslint/no-useless-constructor": "error",
- "@typescript-eslint/no-var-requires": "error",
- "@typescript-eslint/prefer-for-of": "warn",
- "@typescript-eslint/prefer-function-type": "warn",
- "@typescript-eslint/prefer-includes": "error",
- "@typescript-eslint/promise-function-async": "error",
- "@typescript-eslint/require-array-sort-compare": "error",
- "@typescript-eslint/restrict-plus-operands": "error",
- "semi": "off",
- "@typescript-eslint/semi": ["error", "never"],
- "@typescript-eslint/type-annotation-spacing": "error",
- "@typescript-eslint/unbound-method": "error"
- },
- "env": {
- "node": true,
- "es6": true,
- "jest/globals": true
- }
- }
diff --git a/.github/renovate.json5 b/.github/renovate.json5
index 47deaa20..98ab7e36 100644
--- a/.github/renovate.json5
+++ b/.github/renovate.json5
@@ -1,47 +1,71 @@
{
- "$schema": "https://docs.renovatebot.com/renovate-schema.json",
- "extends": ["config:base"],
- "labels": ["dependency", "Changed"],
- "semanticCommits": true,
- "major": {
- "semanticCommitType": "chore",
- "semanticCommitScope": "deps"
- },
- "packageRules": [
- {
- "groupName": "renovate-meta",
- "automerge": "true",
- "updateTypes": ["lockFileMaintenance", "pin"],
- "labels": ["dependency", "Changed"],
- "semanticCommitType": "chore",
- "semanticCommitScope": "deps"
+ $schema: "https://docs.renovatebot.com/renovate-schema.json",
+ extends: ["config:base"],
+ labels: ["dependency", "Changed"],
+ semanticCommits: true,
+ major: {
+ semanticCommitType: "chore",
+ semanticCommitScope: "deps",
},
- {
- "groupName": "dependencies (non-major)",
- "automerge": "true",
- "depTypeList": ["dependencies"],
- "updateTypes": ["patch", "minor"],
- "labels": ["type/deps"],
- "semanticCommitType": "chore",
- "semanticCommitScope": "deps"
+ minor: {
+ semanticCommitType: "chore",
+ semanticCommitScope: "deps",
},
- {
- "groupName": "devDependencies (major)",
- "automerge": "true",
- "depTypeList": ["devDependencies"],
- "updateTypes": ["major"],
- "labels": ["dependency", "Changed"],
- "semanticCommitType": "chore",
- "semanticCommitScope": "deps"
- },
- {
- "groupName": "devDependencies (non-major)",
- "automerge": "true",
- "depTypeList": ["devDependencies"],
- "updateTypes": ["patch", "minor"],
- "labels": ["dependency", "Changed"],
- "semanticCommitType": "chore",
- "semanticCommitScope": "deps"
- }
- ]
+ packageRules: [
+ {
+ groupName: "renovate-meta",
+ automerge: true,
+ updateTypes: ["lockFileMaintenance", "pin"],
+ labels: ["dependency", "Changed"],
+ semanticCommitType: "chore",
+ semanticCommitScope: "deps",
+ rangeStrategy: "replace",
+ vulnerabilityAlerts: {
+ labels: ["Security"],
+ assignees: ["@prisis"],
+ },
+ },
+ {
+ groupName: "dependencies (non-major)",
+ automerge: true,
+ depTypeList: ["dependencies"],
+ updateTypes: ["patch", "minor"],
+ labels: ["type/deps"],
+ semanticCommitType: "chore",
+ semanticCommitScope: "deps",
+ rangeStrategy: "replace",
+ vulnerabilityAlerts: {
+ labels: ["Security"],
+ assignees: ["@prisis"],
+ },
+ },
+ {
+ groupName: "devDependencies (major)",
+ automerge: true,
+ depTypeList: ["devDependencies"],
+ updateTypes: ["major"],
+ labels: ["dependency", "Changed"],
+ semanticCommitType: "chore",
+ semanticCommitScope: "deps",
+ rangeStrategy: "replace",
+ vulnerabilityAlerts: {
+ labels: ["Security"],
+ assignees: ["@prisis"],
+ },
+ },
+ {
+ groupName: "devDependencies (non-major)",
+ automerge: true,
+ depTypeList: ["devDependencies"],
+ updateTypes: ["patch", "minor"],
+ labels: ["dependency", "Changed"],
+ semanticCommitType: "chore",
+ semanticCommitScope: "deps",
+ rangeStrategy: "replace",
+ vulnerabilityAlerts: {
+ labels: ["Security"],
+ assignees: ["@prisis"],
+ },
+ },
+ ],
}
diff --git a/.github/workflows/auto-close-fixed-issues.yml b/.github/workflows/auto-close-fixed-issues.yml
new file mode 100644
index 00000000..a1722e5d
--- /dev/null
+++ b/.github/workflows/auto-close-fixed-issues.yml
@@ -0,0 +1,16 @@
+# This action will automatically close issues fixed in
+# pull requests that doesn't target the default branch.
+
+name: Auto Close Fixed Issues
+on:
+ pull_request_target:
+ types: [closed]
+jobs:
+ run:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: bubkoo/auto-close-fixed-issues@v1
+ with:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ comment: |
+ This issue was closed by #{{ pr }}.
diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml
new file mode 100644
index 00000000..e778316b
--- /dev/null
+++ b/.github/workflows/greetings.yml
@@ -0,0 +1,15 @@
+# https://help.github.com/en/categories/automating-your-workflow-with-github-actions
+
+name: "Greetings"
+
+on: ["pull_request", "issues"]
+
+jobs:
+ greeting:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/first-interaction@v1
+ with:
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
+ issue-message: "Awesome! Thank you for taking the time to create your first issue! Please review the [guidelines](https://narrowspark.com/docs/current/contributing)"
+ pr-message: "Great! Thank you for taking the time to create your first pull request! Please review the [guidelines](https://narrowspark.com/docs/current/contributing)"
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index b2529da1..21823181 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -1,31 +1,47 @@
-name: "test"
-on: ["pull_request", "push"]
+# https://help.github.com/en/categories/automating-your-workflow-with-github-actions
+
+name: "Tests"
+
+on: [push]
jobs:
- build:
+ test:
+ name: "Tests"
+
runs-on: ubuntu-latest
+
steps:
- uses: actions/checkout@v2
with:
- fetch-depth: 2
+ fetch-depth: 0
+ persist-credentials: false
- - name: "Setup node"
- uses: actions/setup-node@v1
+ - name: Use Node.js 12.x
+ uses: actions/setup-node@v2
with:
- node-version: 12
+ node-version: 12.x
+
+ - name: set git credentials
+ run: |
+ git config --local user.email "d.bannert@anolilab.de"
+ git config --local user.name "Daniel Bannert"
+
+ - name: Get yarn cache directory path
+ id: yarn-cache-dir-path
+ run: echo "::set-output name=dir::$(yarn config get cacheFolder)"
- - name: "Cache dependencies"
- uses: actions/cache@v1
+ - uses: actions/cache@v2
+ id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
- key: npm-${{ hashFiles('package-lock.json') }}
- path: ~/.npm
+ path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
+ key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
- npm-
+ ${{ runner.os }}-yarn-
- - name: "Install dependencies"
- run: npm ci --ignore-scripts --no-audit --no-progress --prefer-offline
+ - name: install
+ run: yarn install
- - run: npm run all
+ - run: yarn run all
- name: "Send code coverage report to Codecov.io"
uses: codecov/codecov-action@v1
diff --git a/.husky/.gitignore b/.husky/.gitignore
new file mode 100644
index 00000000..c9cdc63b
--- /dev/null
+++ b/.husky/.gitignore
@@ -0,0 +1 @@
+_
\ No newline at end of file
diff --git a/.husky/commit-msg b/.husky/commit-msg
new file mode 100644
index 00000000..7a87b3e5
--- /dev/null
+++ b/.husky/commit-msg
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+# The hook should exit with non-zero status after issuing
+# an appropriate message if it wants to stop the commit.
+#
+# https://rushjs.io/pages/maintainer/git_hooks/
+
+echo --------------------------------------------
+echo Starting Git hook: commit-msg
+
+yarn commitlint --edit $1 || exit $?
+
+echo Finished Git hook: commit-msg
+echo --------------------------------------------
diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100644
index 00000000..a544a286
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+# The hook should exit with non-zero status after issuing
+# an appropriate message if it wants to stop the commit.
+#
+# https://rushjs.io/pages/maintainer/git_hooks/
+
+echo --------------------------------------------
+echo Starting Git hook: pre-commit
+
+yarn pretty-quick --staged
+
+yarn sort-package-json
+
+echo Finished Git hook: pre-commit
+echo --------------------------------------------
diff --git a/.husky/prepare-commit-msg b/.husky/prepare-commit-msg
new file mode 100644
index 00000000..38b546d0
--- /dev/null
+++ b/.husky/prepare-commit-msg
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+echo --------------------------------------------
+echo Starting Git hook: prepare-commit-msg
+
+exec < /dev/tty && yarn commitizen --hook || true
+
+echo Finished Git hook: prepare-commit-msg
+echo --------------------------------------------
diff --git a/.prettierrc.js b/.prettierrc.js
new file mode 100644
index 00000000..74f6d3b9
--- /dev/null
+++ b/.prettierrc.js
@@ -0,0 +1,23 @@
+module.exports = {
+ "printWidth": 120,
+ "tabWidth": 4,
+ "useTabs": false,
+ "semi": true,
+ "singleQuote": false,
+ "quoteProps": "as-needed",
+ "jsxSingleQuote": false,
+ "trailingComma": "all",
+ "bracketSpacing": true,
+ "jsxBracketSameLine": false,
+ "arrowParens": "always",
+ "rangeStart": 0,
+ "rangeEnd": null,
+ "requirePragma": false,
+ "insertPragma": false,
+ "proseWrap": "preserve",
+ "htmlWhitespaceSensitivity": "css",
+ "vueIndentScriptAndStyle": false,
+ "endOfLine": "lf",
+ "embeddedLanguageFormatting": "auto",
+ "parser": "typescript"
+}
diff --git a/.prettierrc.json b/.prettierrc.json
deleted file mode 100644
index bbf43114..00000000
--- a/.prettierrc.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "printWidth": 80,
- "tabWidth": 2,
- "useTabs": false,
- "semi": false,
- "singleQuote": true,
- "trailingComma": "none",
- "bracketSpacing": false,
- "arrowParens": "avoid",
- "parser": "typescript"
- }
\ No newline at end of file
diff --git a/.textlintrc b/.textlintrc
new file mode 100644
index 00000000..dfb70895
--- /dev/null
+++ b/.textlintrc
@@ -0,0 +1,143 @@
+{
+ "filters": {},
+ "rules": {
+ "en-capitalization": true,
+ "footnote-order": true,
+ "no-todo": true,
+ "no-dead-link": {
+ "ignore": [
+ "bc_data_*",
+ ]
+ },
+ "no-empty-section": true,
+ "terminology": true,
+ "apostrophe": true,
+ "diacritics": true,
+ "@textlint-rule/no-invalid-control-character": true,
+ "@textlint-rule/no-unmatched-pair": true,
+ "abbr-within-parentheses": true,
+ "alex": {
+ "allow": [
+ "period",
+ "european",
+ "failure",
+ "fore",
+ "attack",
+ "execution",
+ "executed",
+ "remain",
+ "execute"
+ ]
+ },
+ "@textlint-rule/preset-google": true,
+ "write-good": {
+ "passive": false,
+ "eprime": false,
+ },
+ "common-misspellings": true,
+ "terminology": {
+ "defaultTerms": false,
+ "terms": [
+ // Abbreviations
+ "API",
+ ["API['’]?s", "APIs"],
+ "Ajax",
+ "CLI",
+ "CSS",
+ "CORS",
+ ["^E2E", "E2E"],
+ "gif",
+ ["^HTML", "HTML"],
+ ["^URL(s?)", "URL$1"],
+ ["^HTTP", "HTTP"],
+ ["^HTTPS", "HTTPS"],
+ "SSO",
+ ["^XHR(s?)", "XHR$1"],
+ ["^XHR['’]?s", "XHRs"],
+ "Xvfb",
+ "YAML",
+
+ // Words and phrases
+ ["\\(s\\)he", "they"],
+ ["he or she", "they"],
+ ["he/she", "they"],
+ ["crazy", "complex"],
+ ["crazier", "more complex"],
+ ["craziest", "most complex"],
+ ["dumb", "unintended"],
+ ["insane", "outrageous"],
+
+ // Prefer American spelling
+ ["behaviour", "behavior"],
+ ["cancelled", "canceled"],
+ ["cancelling", "canceling"],
+ ["centre", "center"],
+ ["colour", "color"],
+ ["customise", "customize"],
+ ["customisation", "customization"],
+ ["favourite", "favorite"],
+ ["labelled", "labeled"],
+ ["licence", "license"],
+ ["organise", "organize"],
+
+ // Common misspellings
+ ["gaurantee", "guarantee"],
+
+ // Words we would like to not use altogether
+ ["simply", ""],
+
+ // Single word
+ ["change[- ]log(s?)", "changelog$1"],
+ ["code[- ]base(es?)", "codebase$1"],
+ ["e[- ]mail(s?)", "email$1"],
+ ["end[- ]point(s?)", "endpoint$1"],
+ ["file[- ]name(s?)", "filename$1"],
+ ["can[- ]not", "cannot$1"],
+
+ // Multiple words
+ ["back-?end(s?)", "back end$1"],
+ ["front-?end(s?)", "front end$1"],
+ ["full-?stack(s?)", "full stack$1"],
+ ["open-?source(ed?)", "open source$1"],
+ ["web-?page(s?)", "web page$1"],
+
+ // Hyphenated
+ ["end ?to ?end", "end-to-end"],
+ ["retryability", "retry-ability"],
+ ["retriability", "retry-ability"],
+
+ ["some", ""],
+ ["filetype", "file type"],
+ ["stylesheet", "style sheet"],
+ ["like this", ""],
+ ["probably", ""],
+ ["known as", ""],
+ ["really", ""],
+ ["just", ""],
+ ["simple", ""],
+ ["obvious", ""],
+ ["straightforward", ""],
+ ["very", ""],
+ ["a little", ""],
+ ["note that", ""],
+ ["good to note", ""],
+ ["good to remember", ""],
+ ["basically", ""],
+ ["actually", ""],
+ ["pretty", ""],
+ ["easy", ""],
+ ["interesting", ""],
+ ["way to", ""],
+ ["In order to", "To"],
+ ["in order to", "to"],
+ ["might", ""],
+ ["us", ""],
+ ["I'll", ""],
+ ["I've", ""],
+ ["they'll", ""],
+ ["it is", "it's"],
+ ["It is", "It's"],
+ ]
+ }
+ }
+}
diff --git a/dist/index.js b/dist/index.js
index 029800ad..2a28e5a8 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -3705,7 +3705,7 @@ var FileHound = function (_EventEmitter) {
}
/**
- * Include file stats
+ * Include file stats
*
* @memberOf FileHound
* @instance
@@ -13486,7 +13486,7 @@ var File = function () {
* file.with(() => {
* if (file.isFileSync()) {
* file.delete();
- * }
+ * }
* });
*/
@@ -52852,28 +52852,28 @@ __webpack_require__(780)(Promise, apiRejection, tryConvertToPromise, createConte
__webpack_require__(658)(Promise);
__webpack_require__(685)(Promise, INTERNAL);
__webpack_require__(610)(Promise, INTERNAL);
-
- util.toFastProperties(Promise);
- util.toFastProperties(Promise.prototype);
- function fillTypes(value) {
- var p = new Promise(INTERNAL);
- p._fulfillmentHandler0 = value;
- p._rejectionHandler0 = value;
- p._promise0 = value;
- p._receiver0 = value;
- }
- // Complete slack tracking, opt out of field-type tracking and
- // stabilize map
- fillTypes({a: 1});
- fillTypes({b: 2});
- fillTypes({c: 3});
- fillTypes(1);
- fillTypes(function(){});
- fillTypes(undefined);
- fillTypes(false);
- fillTypes(new Promise(INTERNAL));
- debug.setBounds(Async.firstLineError, util.lastLineError);
- return Promise;
+
+ util.toFastProperties(Promise);
+ util.toFastProperties(Promise.prototype);
+ function fillTypes(value) {
+ var p = new Promise(INTERNAL);
+ p._fulfillmentHandler0 = value;
+ p._rejectionHandler0 = value;
+ p._promise0 = value;
+ p._receiver0 = value;
+ }
+ // Complete slack tracking, opt out of field-type tracking and
+ // stabilize map
+ fillTypes({a: 1});
+ fillTypes({b: 2});
+ fillTypes({c: 3});
+ fillTypes(1);
+ fillTypes(function(){});
+ fillTypes(undefined);
+ fillTypes(false);
+ fillTypes(new Promise(INTERNAL));
+ debug.setBounds(Async.firstLineError, util.lastLineError);
+ return Promise;
};
@@ -53084,7 +53084,7 @@ RetryOperation.prototype.mainError = function() {
/******/ ],
/******/ function(__webpack_require__) { // webpackRuntimeModules
/******/ "use strict";
-/******/
+/******/
/******/ /* webpack/runtime/node module decorator */
/******/ !function() {
/******/ __webpack_require__.nmd = function(module) {
@@ -53101,6 +53101,6 @@ RetryOperation.prototype.mainError = function() {
/******/ return module;
/******/ };
/******/ }();
-/******/
+/******/
/******/ }
-);
\ No newline at end of file
+);
diff --git a/package.json b/package.json
index a501a25c..f6561246 100644
--- a/package.json
+++ b/package.json
@@ -21,28 +21,26 @@
"author": "prisis",
"main": "lib/main.js",
"scripts": {
- "all": "npm run format && npm run lint && npm run build && npm run pack && npm test && node lib/misc/generate-docs.js",
+ "postinstall": "husky install",
"build": "tsc && tsc src/misc/generate-docs.ts --outDir ./lib/misc",
"format": "prettier --write **/*.ts",
"format-check": "prettier --check **/*.ts",
- "lint": "eslint src/**/*.ts",
- "lint:fix": "eslint --fix src/**/*.ts",
+ "lint": "eslint ./src/**/*.ts",
+ "lint:fix": "eslint --fix ./src/**/*.ts",
"pack": "ncc build",
- "prepublishOnly": "if [ \"$CI\" = '' ]; then node -p 'JSON.parse(process.env.npm_package_config_manualPublishMessage)'; exit 1; fi",
- "test": "jest"
- },
- "husky": {
- "skipCI": true,
- "hooks": {
- "commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
- "pre-commit": "npm run all"
- }
+ "test": "jest",
+ "all": "yarn run format && yarn run lint && yarn run build && yarn run pack && yarn test && node lib/misc/generate-docs.js"
},
"commitlint": {
"extends": [
"@commitlint/config-conventional"
]
},
+ "lint-staged": {
+ "*.{js,jsx,less,md,json}": [
+ "prettier --write"
+ ]
+ },
"config": {
"commitizen": {
"path": "./node_modules/cz-conventional-changelog"
@@ -50,7 +48,7 @@
"manualPublishMessage": "This repository is configured to use semantic-release for its releases. Please do not release manually.\n"
},
"dependencies": {
- "@actions/core": "^1.2.4",
+ "@actions/core": "^1.2.6",
"@actions/exec": "^1.0.4",
"@actions/tool-cache": "^1.3.5",
"@octokit/action": "^3.0.5",
diff --git a/src/git-version.ts b/src/git-version.ts
index 9b663a2a..33c3c0ef 100644
--- a/src/git-version.ts
+++ b/src/git-version.ts
@@ -1,87 +1,88 @@
export class GitVersion {
- private readonly major: number = NaN
- private readonly minor: number = NaN
- private readonly patch: number = NaN
+ private readonly major: number = NaN;
+ private readonly minor: number = NaN;
+ private readonly patch: number = NaN;
- /**
- * Used for comparing the version of git and git-lfs against the minimum required version.
- *
- * @param {undefined|string} version - The version string, e.g. 1.2 or 1.2.3.
- */
- constructor(version?: string) {
- if (version) {
- const match = version.match(/^(\d+)\.(\d+)(\.(\d+))?$/)
- if (match) {
- this.major = Number(match[1])
- this.minor = Number(match[2])
- if (match[4]) {
- this.patch = Number(match[4])
+ /**
+ * Used for comparing the version of git and git-lfs against the minimum required version.
+ *
+ * @param {undefined|string} version - The version string, e.g. 1.2 or 1.2.3.
+ */
+ constructor(version?: string) {
+ if (version) {
+ const match = version.match(/^(\d+)\.(\d+)(\.(\d+))?$/);
+ if (match) {
+ this.major = Number(match[1]);
+ this.minor = Number(match[2]);
+
+ if (match[4]) {
+ this.patch = Number(match[4]);
+ }
+ }
}
- }
}
- }
- /**
- * Compares the instance against a minimum required version.
- *
- * @param {GitVersion} minimum - Minimum version.
- *
- * @returns {boolean} Compares the instance against a minimum required version.
- */
- checkMinimum(minimum: GitVersion): boolean {
- if (!minimum.isValid()) {
- throw new Error('Arg minimum is not a valid version')
- }
+ /**
+ * Compares the instance against a minimum required version.
+ *
+ * @param {GitVersion} minimum - Minimum version.
+ *
+ * @returns {boolean} Compares the instance against a minimum required version.
+ */
+ checkMinimum(minimum: GitVersion): boolean {
+ if (!minimum.isValid()) {
+ throw new Error("Arg minimum is not a valid version");
+ }
- // Major is insufficient
- if (this.major < minimum.major) {
- return false
- }
+ // Major is insufficient
+ if (this.major < minimum.major) {
+ return false;
+ }
- // Major is equal
- if (this.major === minimum.major) {
- // Minor is insufficient
- if (this.minor < minimum.minor) {
- return false
- }
+ // Major is equal
+ if (this.major === minimum.major) {
+ // Minor is insufficient
+ if (this.minor < minimum.minor) {
+ return false;
+ }
- // Minor is equal
- if (this.minor === minimum.minor) {
- // Patch is insufficient
- if (this.patch && this.patch < (minimum.patch || 0)) {
- return false
+ // Minor is equal
+ if (this.minor === minimum.minor) {
+ // Patch is insufficient
+ if (this.patch && this.patch < (minimum.patch || 0)) {
+ return false;
+ }
+ }
}
- }
+
+ return true;
}
- return true
- }
+ /**
+ * Indicates whether the instance was constructed from a valid version string.
+ *
+ * @returns {boolean} Indicates whether the instance was constructed from a valid version string.
+ */
+ isValid(): boolean {
+ return !isNaN(this.major);
+ }
- /**
- * Indicates whether the instance was constructed from a valid version string.
- *
- * @returns {boolean} Indicates whether the instance was constructed from a valid version string.
- */
- isValid(): boolean {
- return !isNaN(this.major)
- }
+ /**
+ * Returns the version as a string, e.g. 1.2 or 1.2.3.
+ *
+ * @returns {string} Returns the version as a string, e.g. 1.2 or 1.2.3.
+ */
+ toString(): string {
+ let result = "";
- /**
- * Returns the version as a string, e.g. 1.2 or 1.2.3.
- *
- * @returns {string} Returns the version as a string, e.g. 1.2 or 1.2.3.
- */
- toString(): string {
- let result = ''
+ if (this.isValid()) {
+ result = `${this.major}.${this.minor}`;
- if (this.isValid()) {
- result = `${this.major}.${this.minor}`
+ if (!isNaN(this.patch)) {
+ result += `.${this.patch}`;
+ }
+ }
- if (!isNaN(this.patch)) {
- result += `.${this.patch}`
- }
+ return result;
}
-
- return result
- }
}
diff --git a/src/misc/generate-docs.ts b/src/misc/generate-docs.ts
index 80fea156..6c3d9a69 100644
--- a/src/misc/generate-docs.ts
+++ b/src/misc/generate-docs.ts
@@ -1,7 +1,7 @@
-import * as fs from 'fs'
-import * as os from 'os'
-import * as path from 'path'
-import * as yaml from 'js-yaml'
+import * as fs from "fs";
+import * as os from "os";
+import * as path from "path";
+import * as yaml from "js-yaml";
//
// SUMMARY
@@ -9,125 +9,122 @@ import * as yaml from 'js-yaml'
// This script rebuilds the usage section in the README.md to be consistent with the action.yml
function updateUsage(
- actionReference: string,
- actionYamlPath: string = 'action.yml',
- readmePath: string = 'README.md',
- startToken: string = '',
- endToken: string = ''
+ actionReference: string,
+ actionYamlPath: string = "action.yml",
+ readmePath: string = "README.md",
+ startToken: string = "",
+ endToken: string = "",
): void {
- if (!actionReference) {
- throw new Error('Parameter actionReference must not be empty')
- }
-
- // Load the action.yml
- const actionYaml = yaml.safeLoad(fs.readFileSync(actionYamlPath).toString())
-
- if (typeof actionYaml !== 'object') {
- throw new Error('')
- }
+ if (!actionReference) {
+ throw new Error("Parameter actionReference must not be empty");
+ }
- // Load the README
- const originalReadme = fs.readFileSync(readmePath).toString()
+ // Load the action.yml
+ const actionYaml = yaml.load(fs.readFileSync(actionYamlPath, "utf8").toString(), { filename: actionYamlPath });
- // Find the start token
- const startTokenIndex = originalReadme.indexOf(startToken)
- if (startTokenIndex < 0) {
- throw new Error(`Start token '${startToken}' not found`)
- }
+ // Load the README
+ const originalReadme = fs.readFileSync(readmePath, "utf8").toString();
- // Find the end token
- const endTokenIndex = originalReadme.indexOf(endToken)
- if (endTokenIndex < 0) {
- throw new Error(`End token '${endToken}' not found`)
- } else if (endTokenIndex < startTokenIndex) {
- throw new Error('Start token must appear before end token')
- }
+ // Find the start token
+ const startTokenIndex = originalReadme.indexOf(startToken);
+ if (startTokenIndex < 0) {
+ throw new Error(`Start token '${startToken}' not found`);
+ }
- // Build the new README
- const newReadme: string[] = []
+ // Find the end token
+ const endTokenIndex = originalReadme.indexOf(endToken);
+ if (endTokenIndex < 0) {
+ throw new Error(`End token '${endToken}' not found`);
+ } else if (endTokenIndex < startTokenIndex) {
+ throw new Error("Start token must appear before end token");
+ }
- // Append the beginning
- newReadme.push(originalReadme.substr(0, startTokenIndex + startToken.length))
+ // Build the new README
+ const newReadme: string[] = [];
- // Build the new usage section
- newReadme.push('```yaml', `- uses: ${actionReference}`, ' with:')
+ // Append the beginning
+ newReadme.push(originalReadme.substr(0, startTokenIndex + startToken.length));
- const inputs = (actionYaml as { inputs: { [key: string]: any } }).inputs
+ // Build the new usage section
+ newReadme.push("```yaml", `- uses: ${actionReference}`, " with:");
- let firstInput = true
+ // @ts-ignore
+ const inputs = actionYaml.inputs;
- for (const key of Object.keys(inputs)) {
- const input = inputs[key]
+ let firstInput = true;
- // Line break between inputs
- if (!firstInput) {
- newReadme.push('')
- }
+ for (const key of Object.keys(inputs)) {
+ const input = inputs[key];
- // Constrain the width of the description
- const width = 80
- let description = (input.description as string)
- .trimRight()
- .replace(/\r\n/g, '\n') // Convert CR to LF
- .replace(/ +/g, ' ') // Squash consecutive spaces
- .replace(/ \n/g, '\n') // Squash space followed by newline
- while (description) {
- // Longer than width? Find a space to break apart
- let segment: string = description
- if (description.length > width) {
- segment = description.substr(0, width + 1)
- while (!segment.endsWith(' ') && !segment.endsWith('\n') && segment) {
- segment = segment.substr(0, segment.length - 1)
+ // Line break between inputs
+ if (!firstInput) {
+ newReadme.push("");
}
- // Trimmed too much?
- if (segment.length < width * 0.67) {
- segment = description
+ // Constrain the width of the description
+ const width = 80;
+ let description = (input.description as string)
+ .trimRight()
+ .replace(/\r\n/g, "\n") // Convert CR to LF
+ .replace(/ +/g, " ") // Squash consecutive spaces
+ .replace(/ \n/g, "\n"); // Squash space followed by newline
+ while (description) {
+ // Longer than width? Find a space to break apart
+ let segment: string = description;
+ if (description.length > width) {
+ segment = description.substr(0, width + 1);
+ while (!segment.endsWith(" ") && !segment.endsWith("\n") && segment) {
+ segment = segment.substr(0, segment.length - 1);
+ }
+
+ // Trimmed too much?
+ if (segment.length < width * 0.67) {
+ segment = description;
+ }
+ } else {
+ segment = description;
+ }
+
+ // Check for newline
+ const newlineIndex = segment.indexOf("\n");
+ if (newlineIndex >= 0) {
+ segment = segment.substr(0, newlineIndex + 1);
+ }
+
+ // Append segment
+ newReadme.push(` # ${segment}`.trimRight());
+
+ // Remaining
+ description = description.substr(segment.length);
}
- } else {
- segment = description
- }
- // Check for newline
- const newlineIndex = segment.indexOf('\n')
- if (newlineIndex >= 0) {
- segment = segment.substr(0, newlineIndex + 1)
- }
+ if (input.default !== undefined) {
+ // Append blank line if description had paragraphs
+ if ((input.description as string).trimRight().match(/\n[ ]*\r?\n/)) {
+ newReadme.push(` #`);
+ }
- // Append segment
- newReadme.push(` # ${segment}`.trimRight())
-
- // Remaining
- description = description.substr(segment.length)
- }
+ // Default
+ newReadme.push(` # Default: ${input.default}`);
+ }
- if (input.default !== undefined) {
- // Append blank line if description had paragraphs
- if ((input.description as string).trimRight().match(/\n[ ]*\r?\n/)) {
- newReadme.push(` #`)
- }
+ // Input name
+ newReadme.push(` ${key}: ''`);
- // Default
- newReadme.push(` # Default: ${input.default}`)
+ firstInput = false;
}
- // Input name
- newReadme.push(` ${key}: ''`)
-
- firstInput = false
- }
-
- newReadme.push('```')
+ newReadme.push("```");
- // Append the end
- newReadme.push(originalReadme.substr(endTokenIndex))
+ // Append the end
+ newReadme.push(originalReadme.substr(endTokenIndex));
- // Write the new README
- fs.writeFileSync(readmePath, newReadme.join(os.EOL))
+ // Write the new README
+ fs.writeFileSync(readmePath, newReadme.join(os.EOL));
}
updateUsage(
- 'actions/template-sync@v1',
- path.join(__dirname, '..', '..', 'action.yml'),
- path.join(__dirname, '..', '..', 'README.md')
-)
+ "actions/template-sync@v1",
+ path.join(__dirname, "..", "..", "action.yml"),
+ path.join(__dirname, "..", "..", "README.md"),
+);
diff --git a/src/octokit.ts b/src/octokit.ts
index 9c9ecec1..98aee96b 100644
--- a/src/octokit.ts
+++ b/src/octokit.ts
@@ -1,18 +1,18 @@
-import {Octokit} from '@octokit/action'
-import {Octokit as Core} from '@octokit/core'
-import {retry} from '@octokit/plugin-retry'
-import {ISettings} from './interfaces'
+import { Octokit } from "@octokit/action";
+import { Octokit as Core } from "@octokit/core";
+import { retry } from "@octokit/plugin-retry";
+import { ISettings } from "./interfaces";
// plugins for octokit
-const MyOctokit = Octokit.plugin(retry)
+const MyOctokit = Octokit.plugin(retry);
export function octokit(setting: ISettings): Core {
- return new MyOctokit({
- auth: setting.authToken,
- baseUrl: setting.apiUrl,
- previews: [
- 'baptiste', // templateRepositoryPath
- 'lydian' // update pull request
- ]
- })
+ return new MyOctokit({
+ auth: setting.authToken,
+ baseUrl: setting.apiUrl,
+ previews: [
+ "baptiste", // templateRepositoryPath
+ "lydian", // update pull request
+ ],
+ });
}
diff --git a/src/ref-helper.ts b/src/ref-helper.ts
index beeecc5d..7af8850f 100644
--- a/src/ref-helper.ts
+++ b/src/ref-helper.ts
@@ -1,83 +1,75 @@
-import {IGitCommandManager} from './interfaces'
+import { IGitCommandManager } from "./interfaces";
export interface ICheckoutInfo {
- ref: string
- startPoint: string
+ ref: string;
+ startPoint: string;
}
-export async function getCheckoutInfo(
- git: IGitCommandManager,
- ref: string
-): Promise {
- if (!git) {
- throw new Error('Arg git cannot be empty')
- }
+export async function getCheckoutInfo(git: IGitCommandManager, ref: string): Promise {
+ if (!git) {
+ throw new Error("Arg git cannot be empty");
+ }
- if (!ref) {
- throw new Error('Args ref cannot be empty')
- }
+ if (!ref) {
+ throw new Error("Args ref cannot be empty");
+ }
- const result = ({} as unknown) as ICheckoutInfo
- const upperRef = (ref || '').toUpperCase()
+ const result = ({} as unknown) as ICheckoutInfo;
+ const upperRef = (ref || "").toUpperCase();
- // refs/heads/
- if (upperRef.startsWith('REFS/HEADS/')) {
- const branch = ref.substring('refs/heads/'.length)
- result.ref = branch
- result.startPoint = `refs/remotes/origin/${branch}`
- }
- // refs/pull/
- else if (upperRef.startsWith('REFS/PULL/')) {
- const branch = ref.substring('refs/pull/'.length)
- result.ref = `refs/remotes/pull/${branch}`
- }
- // refs/tags/
- else if (upperRef.startsWith('REFS/')) {
- result.ref = ref
- }
- // Unqualified ref, check for a matching ref or tag
- else {
- if (await git.branchExists(true, `origin/${ref}`)) {
- result.ref = ref
- result.startPoint = `refs/remotes/origin/${ref}`
- } else if (await git.tagExists(`${ref}`)) {
- result.ref = `refs/tags/${ref}`
- } else {
- throw new Error(
- `A branch or tag with the name '${ref}' could not be found`
- )
+ // refs/heads/
+ if (upperRef.startsWith("REFS/HEADS/")) {
+ const branch = ref.substring("refs/heads/".length);
+ result.ref = branch;
+ result.startPoint = `refs/remotes/origin/${branch}`;
+ }
+ // refs/pull/
+ else if (upperRef.startsWith("REFS/PULL/")) {
+ const branch = ref.substring("refs/pull/".length);
+ result.ref = `refs/remotes/pull/${branch}`;
+ }
+ // refs/tags/
+ else if (upperRef.startsWith("REFS/")) {
+ result.ref = ref;
+ }
+ // Unqualified ref, check for a matching ref or tag
+ else {
+ if (await git.branchExists(true, `origin/${ref}`)) {
+ result.ref = ref;
+ result.startPoint = `refs/remotes/origin/${ref}`;
+ } else if (await git.tagExists(`${ref}`)) {
+ result.ref = `refs/tags/${ref}`;
+ } else {
+ throw new Error(`A branch or tag with the name '${ref}' could not be found`);
+ }
}
- }
- return result
+ return result;
}
export function getRefSpec(ref: string): string[] {
- if (!ref) {
- throw new Error('Arg ref cannot be empty')
- }
+ if (!ref) {
+ throw new Error("Arg ref cannot be empty");
+ }
- const upperRef = (ref || '').toUpperCase()
+ const upperRef = (ref || "").toUpperCase();
- // Unqualified ref, check for a matching ref or tag
- if (!upperRef.startsWith('REFS/')) {
- return [
- `+refs/heads/${ref}*:refs/remotes/origin/${ref}*`,
- `+refs/tags/${ref}*:refs/tags/${ref}*`
- ]
- }
- // refs/heads/
- else if (upperRef.startsWith('REFS/HEADS/')) {
- const branch = ref.substring('refs/heads/'.length)
- return [`+${ref}:refs/remotes/origin/${branch}`]
- }
- // refs/pull/
- else if (upperRef.startsWith('REFS/PULL/')) {
- const branch = ref.substring('refs/pull/'.length)
- return [`+${ref}:refs/remotes/pull/${branch}`]
- }
- // refs/tags/
- else {
- return [`+${ref}:${ref}`]
- }
+ // Unqualified ref, check for a matching ref or tag
+ if (!upperRef.startsWith("REFS/")) {
+ return [`+refs/heads/${ref}*:refs/remotes/origin/${ref}*`, `+refs/tags/${ref}*:refs/tags/${ref}*`];
+ }
+ // refs/heads/
+ else if (upperRef.startsWith("REFS/HEADS/")) {
+ const branch = ref.substring("refs/heads/".length);
+ return [`+${ref}:refs/remotes/origin/${branch}`];
+ }
+ // refs/pull/
+ else if (upperRef.startsWith("REFS/PULL/")) {
+ const branch = ref.substring("refs/pull/".length);
+ return [`+${ref}:refs/remotes/pull/${branch}`];
+ }
+ // refs/tags/
+ else {
+ return [`+${ref}:${ref}`];
+ }
}
diff --git a/src/retry-helper.ts b/src/retry-helper.ts
index c50e9512..2b4cf751 100644
--- a/src/retry-helper.ts
+++ b/src/retry-helper.ts
@@ -1,58 +1,55 @@
-import * as core from '@actions/core'
+import * as core from "@actions/core";
-const defaultMaxAttempts = 3
-const defaultMinSeconds = 10
-const defaultMaxSeconds = 20
+const defaultMaxAttempts = 3;
+const defaultMinSeconds = 10;
+const defaultMaxSeconds = 20;
export class RetryHelper {
- private maxAttempts: number
- private minSeconds: number
- private maxSeconds: number
-
- constructor(
- maxAttempts: number = defaultMaxAttempts,
- minSeconds: number = defaultMinSeconds,
- maxSeconds: number = defaultMaxSeconds
- ) {
- this.maxAttempts = maxAttempts
- this.minSeconds = Math.floor(minSeconds)
- this.maxSeconds = Math.floor(maxSeconds)
-
- if (this.minSeconds > this.maxSeconds) {
- throw new Error('min seconds should be less than or equal to max seconds')
- }
- }
-
- async execute(action: () => Promise): Promise {
- let attempt = 1
-
- while (attempt < this.maxAttempts) {
- // Try
- try {
- return await action()
- } catch (err) {
- core.info(err.message)
- }
-
- // Sleep
- const seconds = this.getSleepAmount()
- core.info(`Waiting ${seconds} seconds before trying again`)
- await this.sleep(seconds)
- attempt++
+ private maxAttempts: number;
+ private minSeconds: number;
+ private maxSeconds: number;
+
+ constructor(
+ maxAttempts: number = defaultMaxAttempts,
+ minSeconds: number = defaultMinSeconds,
+ maxSeconds: number = defaultMaxSeconds,
+ ) {
+ this.maxAttempts = maxAttempts;
+ this.minSeconds = Math.floor(minSeconds);
+ this.maxSeconds = Math.floor(maxSeconds);
+
+ if (this.minSeconds > this.maxSeconds) {
+ throw new Error("min seconds should be less than or equal to max seconds");
+ }
}
- // Last attempt
- return await action()
- }
+ async execute(action: () => Promise): Promise {
+ let attempt = 1;
+
+ while (attempt < this.maxAttempts) {
+ // Try
+ try {
+ return await action();
+ } catch (err) {
+ core.info(err.message);
+ }
+
+ // Sleep
+ const seconds = this.getSleepAmount();
+ core.info(`Waiting ${seconds} seconds before trying again`);
+ await this.sleep(seconds);
+ attempt++;
+ }
+
+ // Last attempt
+ return await action();
+ }
- private getSleepAmount(): number {
- return (
- Math.floor(Math.random() * (this.maxSeconds - this.minSeconds + 1)) +
- this.minSeconds
- )
- }
+ private getSleepAmount(): number {
+ return Math.floor(Math.random() * (this.maxSeconds - this.minSeconds + 1)) + this.minSeconds;
+ }
- private async sleep(seconds: number): Promise {
- return new Promise(resolve => setTimeout(resolve, seconds * 1000))
- }
+ private async sleep(seconds: number): Promise {
+ return new Promise((resolve) => setTimeout(resolve, seconds * 1000));
+ }
}
diff --git a/src/settings.ts b/src/settings.ts
index 6ae5dca3..cf57794b 100644
--- a/src/settings.ts
+++ b/src/settings.ts
@@ -8,11 +8,11 @@ import {Filter, ISettings, IYamlSettings} from './interfaces'
import {inspect} from 'util'
export class Settings implements ISettings {
- settings: ISettings
+ settings: ISettings;
- constructor(context: GithubActionContext) {
- const message =
- 'This pull request has been created by the [template sync action](https://github.com/narrowspark/template-sync-action) action.\n\nThis PR synchronizes with {0}\n\n---\n\n You can set a custom pull request title, body, ref and commit messages, see [Usage](https://github.com/narrowspark/template-sync-action#Usage).'
+ constructor(context: GithubActionContext) {
+ const message =
+ "This pull request has been created by the [template sync action](https://github.com/narrowspark/template-sync-action) action.\n\nThis PR synchronizes with {0}\n\n---\n\n You can set a custom pull request title, body, ref and commit messages, see [Usage](https://github.com/narrowspark/template-sync-action#Usage).";
let githubWorkspacePath = Settings.getGithubWorkspacePath()
@@ -20,52 +20,46 @@ export class Settings implements ISettings {
path.join(githubWorkspacePath, '.github', 'template-sync-settings.yml')
)
- this.settings = {
- authToken: core.getInput('github_token', {required: true}),
- apiUrl: process.env['GITHUB_API_URL'] || 'https://api.github.com',
- serverUrl: new URL(process.env['GITHUB_URL'] || 'https://github.com'),
+ this.settings = {
+ authToken: core.getInput("github_token", { required: true }),
+ apiUrl: process.env["GITHUB_API_URL"] || "https://api.github.com",
+ serverUrl: new URL(process.env["GITHUB_URL"] || "https://github.com"),
- sshKey: core.getInput('ssh_key'),
- sshKnownHosts: core.getInput('ssh_known_hosts'),
- sshStrict:
- (core.getInput('ssh_strict') || 'true').toUpperCase() === 'TRUE',
- persistCredentials:
- (core.getInput('persist_credentials') || 'false').toUpperCase() ===
- 'TRUE',
+ sshKey: core.getInput("ssh_key"),
+ sshKnownHosts: core.getInput("ssh_known_hosts"),
+ sshStrict: (core.getInput("ssh_strict") || "true").toUpperCase() === "TRUE",
+ persistCredentials: (core.getInput("persist_credentials") || "false").toUpperCase() === "TRUE",
- authorName: core.getInput('git_author_name', {required: true}),
- authorEmail: core.getInput('git_author_email', {required: true}),
+ authorName: core.getInput("git_author_name", { required: true }),
+ authorEmail: core.getInput("git_author_email", { required: true }),
repositoryOwner: core.getInput('owner') || context.repo.owner,
repositoryName: core.getInput('repo') || context.repo.repo,
githubWorkspacePath,
- messageHead:
- core.getInput('pr_title') || 'Enhancement: Synchronize with "{0}"',
- messageBody: core.getInput('pr_message') || message,
+ messageHead: core.getInput("pr_title") || 'Enhancement: Synchronize with "{0}"',
+ messageBody: core.getInput("pr_message") || message,
ref: core.getInput('ref') || context.ref,
syncBranchName: 'feature/template/sync/{0}',
- templateRepositoryRef:
- core.getInput('template_ref') || 'refs/heads/master',
- templateRepository: '',
- templateRepositoryUrl: '',
- templateRepositoryPath:
- (process.env['STATE_template_repository_path'] as string) || '',
-
- ignoreList: [
- '.git',
- '.changelog',
- '.editorconfig',
- '.gitignore',
- 'CHANGELOG.md',
- 'LICENSE.md.md',
- 'README.md',
- 'UPGRADE.md'
- ].concat(ignoreList),
- clean: (core.getInput('clean') || 'true').toUpperCase() === 'TRUE',
- filters
+ templateRepositoryRef: core.getInput("template_ref") || "refs/heads/master",
+ templateRepository: "",
+ templateRepositoryUrl: "",
+ templateRepositoryPath: (process.env["STATE_template_repository_path"] as string) || "",
+
+ ignoreList: [
+ ".git$",
+ ".changelog",
+ ".editorconfig",
+ ".gitignore",
+ "CHANGELOG.md",
+ "LICENSE.md",
+ "README.md",
+ "UPGRADE.md",
+ ].concat(core.getInput("ignore_list", { required: false }) || []),
+ clean: (core.getInput("clean") || "true").toUpperCase() === "TRUE",
+ };
}
}
@@ -135,106 +129,97 @@ export class Settings implements ISettings {
return {ignoreList, filters}
}
- get authToken(): string {
- return this.settings.authToken
- }
+ get authToken(): string {
+ return this.settings.authToken;
+ }
- get apiUrl(): string {
- return this.settings.apiUrl
- }
+ get apiUrl(): string {
+ return this.settings.apiUrl;
+ }
- get serverUrl(): URL {
- return this.settings.serverUrl
- }
+ get serverUrl(): URL {
+ return this.settings.serverUrl;
+ }
- get repositoryOwner(): string {
- return this.settings.repositoryOwner
- }
+ get repositoryOwner(): string {
+ return this.settings.repositoryOwner;
+ }
- get repositoryName(): string {
- return this.settings.repositoryName
- }
+ get repositoryName(): string {
+ return this.settings.repositoryName;
+ }
get githubWorkspacePath(): string {
return this.settings.githubWorkspacePath
}
- get authorEmail(): string {
- return this.settings.authorEmail
- }
+ get authorEmail(): string {
+ return this.settings.authorEmail;
+ }
- get authorName(): string {
- return this.settings.authorName
- }
+ get authorName(): string {
+ return this.settings.authorName;
+ }
- get messageHead(): string {
- return this.settings.messageHead.replace(
- '{0}',
- this.settings.templateRepository
- )
- }
+ get messageHead(): string {
+ return this.settings.messageHead.replace("{0}", this.settings.templateRepository);
+ }
- get messageBody(): string {
- return this.settings.messageBody.replace(
- '{0}',
- this.settings.templateRepository
- )
- }
+ get messageBody(): string {
+ return this.settings.messageBody.replace("{0}", this.settings.templateRepository);
+ }
- get ref(): string {
- return this.settings.ref
- }
+ get ref(): string {
+ return this.settings.ref;
+ }
- get syncBranchName(): string {
- return this.settings.syncBranchName.replace(
- '{0}',
- this.settings.templateRepository
- )
- }
+ get syncBranchName(): string {
+ return this.settings.syncBranchName.replace("{0}", this.settings.templateRepository);
+ }
get templateRepositoryRef(): string {
return this.settings.templateRepositoryRef
}
- set templateRepository(templateRepository: string) {
- this.settings.templateRepository = templateRepository
- }
+ set templateRepository(templateRepository: string) {
+ this.settings.templateRepository = templateRepository;
+ }
- get templateRepository(): string {
- return this.settings.templateRepository
- }
+ get templateRepository(): string {
+ return this.settings.templateRepository;
+ }
- set templateRepositoryUrl(templateUrl: string) {
- this.settings.templateRepositoryUrl = templateUrl
- }
+ set templateRepositoryUrl(templateUrl: string) {
+ this.settings.templateRepositoryUrl = templateUrl;
+ }
- get templateRepositoryUrl(): string {
- return this.settings.templateRepositoryUrl
- }
+ get templateRepositoryUrl(): string {
+ return this.settings.templateRepositoryUrl;
+ }
- set templateRepositoryPath(templateRepository: string) {
- this.settings.templateRepositoryPath = templateRepository
- }
+ set templateRepositoryPath(templateRepository: string) {
+ this.settings.templateRepositoryPath = templateRepository;
+ }
- get templateRepositoryPath(): string {
- return this.settings.templateRepositoryPath
- }
+ get templateRepositoryPath(): string {
+ return this.settings.templateRepositoryPath;
+ }
- get sshKey(): string {
- return this.settings.sshKey
- }
+ get sshKey(): string {
+ return this.settings.sshKey;
+ }
- get sshKnownHosts(): string {
- return this.settings.sshKey
- }
+ get sshKnownHosts(): string {
+ return this.settings.sshKey;
+ }
- get sshStrict(): boolean {
- return this.settings.sshStrict
- }
+ get sshStrict(): boolean {
+ return this.settings.sshStrict;
+ }
- get persistCredentials(): boolean {
- return this.settings.persistCredentials
- }
+ get persistCredentials(): boolean {
+ return this.settings.persistCredentials;
+ }
set ignoreList(ignoreList: string[]) {
this.settings.ignoreList = ignoreList
diff --git a/src/state-helper.ts b/src/state-helper.ts
index a5eb6967..a30f86e6 100644
--- a/src/state-helper.ts
+++ b/src/state-helper.ts
@@ -1,33 +1,29 @@
-import * as coreCommand from '@actions/core/lib/command'
+import * as coreCommand from "@actions/core/lib/command";
/**
* Indicates whether the POST action is running.
*/
-export const IsPost = !!process.env['STATE_isPost']
+export const IsPost = !!process.env["STATE_isPost"];
/**
* The template repository path for the POST action. The value is empty during the MAIN action.
*/
-export const TemplateRepositoryPath =
- (process.env['STATE_template_repository_path'] as string) || ''
+export const TemplateRepositoryPath = (process.env["STATE_template_repository_path"] as string) || "";
/**
* The repository path for the POST action. The value is empty during the MAIN action.
*/
-export const RepositoryPath =
- (process.env['STATE_repositoryPath'] as string) || ''
+export const RepositoryPath = (process.env["STATE_repositoryPath"] as string) || "";
/**
* The SSH key path for the POST action. The value is empty during the MAIN action.
*/
-export const SshKeyPath =
- (process.env['STATE_template_ssh_key_path'] as string) || ''
+export const SshKeyPath = (process.env["STATE_template_ssh_key_path"] as string) || "";
/**
* The SSH known hosts path for the POST action. The value is empty during the MAIN action.
*/
-export const SshKnownHostsPath =
- (process.env['STATE_template_ssh_known_hosts_path'] as string) || ''
+export const SshKnownHostsPath = (process.env["STATE_template_ssh_known_hosts_path"] as string) || "";
/**
* Save the repository path so the POST action can retrieve the value.
@@ -35,11 +31,7 @@ export const SshKnownHostsPath =
* @param {string} repositoryPath - Path to repository.
*/
export function setTemplateRepositoryPath(repositoryPath: string): void {
- coreCommand.issueCommand(
- 'save-state',
- {name: 'template_repository_path'},
- repositoryPath
- )
+ coreCommand.issueCommand("save-state", { name: "template_repository_path" }, repositoryPath);
}
/**
@@ -48,11 +40,7 @@ export function setTemplateRepositoryPath(repositoryPath: string): void {
* @param {string} sshKeyPath - The ssh key path.
*/
export function setSshKeyPath(sshKeyPath: string): void {
- coreCommand.issueCommand(
- 'save-state',
- {name: 'template_ssh_key_path'},
- sshKeyPath
- )
+ coreCommand.issueCommand("save-state", { name: "template_ssh_key_path" }, sshKeyPath);
}
/**
@@ -61,15 +49,11 @@ export function setSshKeyPath(sshKeyPath: string): void {
* @param {string} sshKnownHostsPath - The ssh known hosts path.
*/
export function setSshKnownHostsPath(sshKnownHostsPath: string): void {
- coreCommand.issueCommand(
- 'save-state',
- {name: 'template_ssh_known_hosts_path'},
- sshKnownHostsPath
- )
+ coreCommand.issueCommand("save-state", { name: "template_ssh_known_hosts_path" }, sshKnownHostsPath);
}
// Publish a variable so that when the POST action runs, it can determine it should run the cleanup logic.
// This is necessary since we don't have a separate entry point.
if (!IsPost) {
- coreCommand.issueCommand('save-state', {name: 'isPost'}, 'true')
+ coreCommand.issueCommand("save-state", { name: "isPost" }, "true");
}
diff --git a/tsconfig.json b/tsconfig.json
index 1b7f6cb3..151b2f8e 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -3,7 +3,7 @@
"target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
"lib": [
- "es6"
+ "es2019"
],
"outDir": "./lib", /* Redirect output structure to the directory. */
"rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 00000000..7ef87d85
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,9091 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@actions/core@^1.2.6":
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.2.6.tgz#a78d49f41a4def18e88ce47c2cac615d5694bf09"
+ integrity sha512-ZQYitnqiyBc3D+k7LsgSBmMDVkOVidaagDG7j3fOym77jNunWRuYx7VSHa9GNfFZh+zh61xsCjRj4JxMZlDqTA==
+
+"@actions/exec@^1.0.0", "@actions/exec@^1.0.4":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@actions/exec/-/exec-1.0.4.tgz#99d75310e62e59fc37d2ee6dcff6d4bffadd3a5d"
+ integrity sha512-4DPChWow9yc9W3WqEbUj8Nr86xkpyE29ZzWjXucHItclLbEW6jr80Zx4nqv18QL6KK65+cifiQZXvnqgTV6oHw==
+ dependencies:
+ "@actions/io" "^1.0.1"
+
+"@actions/http-client@^1.0.8":
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-1.0.9.tgz#af1947d020043dbc6a3b4c5918892095c30ffb52"
+ integrity sha512-0O4SsJ7q+MK0ycvXPl2e6bMXV7dxAXOGjrXS1eTF9s2S401Tp6c/P3c3Joz04QefC1J6Gt942Wl2jbm3f4mLcg==
+ dependencies:
+ tunnel "0.0.6"
+
+"@actions/io@^1.0.1", "@actions/io@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@actions/io/-/io-1.0.2.tgz#2f614b6e69ce14d191180451eb38e6576a6e6b27"
+ integrity sha512-J8KuFqVPr3p6U8W93DOXlXW6zFvrQAJANdS+vw0YhusLIq+bszW8zmK2Fh1C2kDPX8FMvwIl1OUcFgvJoXLbAg==
+
+"@actions/tool-cache@^1.6.1":
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/@actions/tool-cache/-/tool-cache-1.6.1.tgz#5e199f7bfd9863eb2b0d467cd70751ef8042ec40"
+ integrity sha512-F+vwEDwfqcHMKuSkj79pihOnsAMv23EkG76nMpc82UsnXwyQdyEsktGxrB0SNtm7pRqTXEIOoAPTgrSQclXYTg==
+ dependencies:
+ "@actions/core" "^1.2.6"
+ "@actions/exec" "^1.0.0"
+ "@actions/http-client" "^1.0.8"
+ "@actions/io" "^1.0.1"
+ semver "^6.1.0"
+ uuid "^3.3.2"
+
+"@anolilab/eslint-config@^1.1.3":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@anolilab/eslint-config/-/eslint-config-1.1.3.tgz#3fef7ccc5343f34abad4c875664dfcea6403a8a4"
+ integrity sha512-Vi9bq9Oe5mg9ig4CBoofBRLm57+b0CcMAUTCFcPedGMOWx+Op9KMu87qppHnVbbtSciND/TBGlHCyN2/XufIzQ==
+ dependencies:
+ "@rushstack/eslint-plugin-security" "^0.1.3"
+ arrify "^2.0.1"
+ confusing-browser-globals "^1.0.10"
+ cosmiconfig "^7.0.0"
+ eslint-import-resolver-node "^0.3.4"
+ eslint-plugin-compat "^3.9.0"
+ eslint-plugin-eslint-comments "^3.2.0"
+ eslint-plugin-import "^2.22.1"
+ eslint-plugin-markdown "^2.0.0"
+ eslint-plugin-no-loops "^0.3.0"
+ eslint-plugin-no-secrets "^0.7.0"
+ eslint-plugin-optimize-regex "^1.2.0"
+ eslint-plugin-promise "^4.2.1"
+ eslint-plugin-radar "^0.2.0"
+ eslint-plugin-simple-import-sort "^7.0.0"
+ eslint-plugin-sort-keys-fix "^1.1.1"
+ eslint-plugin-unicorn "^28.0.0"
+ eslint-plugin-you-dont-need-lodash-underscore "^6.11.0"
+ eslint-plugin-you-dont-need-momentjs "^1.6.0"
+ lodash.has "^4.5.2"
+ object.assign "^4.1.2"
+ read-pkg-up "^7.0.1"
+ optionalDependencies:
+ "@typescript-eslint/eslint-plugin" "^4.14.2"
+ "@typescript-eslint/parser" "^4.14.2"
+ eslint-plugin-babel "^5.3.0"
+ eslint-plugin-cypress "^2.11.2"
+ eslint-plugin-jest "^24.1.3"
+ eslint-plugin-jest-async "^1.0.3"
+ eslint-plugin-jest-dom "^3.6.5"
+ eslint-plugin-jest-formatting "^2.0.1"
+ eslint-plugin-jsdoc "^32.0.0"
+ eslint-plugin-json "^2.1.2"
+ eslint-plugin-jsx-a11y "^6.4.1"
+ eslint-plugin-mdx "^1.8.2"
+ eslint-plugin-node "^11.1.0"
+ eslint-plugin-prefer-object-spread "^1.2.1"
+ eslint-plugin-react "^7.22.0"
+ eslint-plugin-react-hooks "^4.2.0"
+ eslint-plugin-react-redux "^3.3.2"
+ eslint-plugin-testing-library "^3.10.1"
+ eslint-plugin-typescript-sort-keys "^1.5.0"
+
+"@anolilab/prettier-config@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@anolilab/prettier-config/-/prettier-config-1.0.0.tgz#3ec0252c32036f47048c8f09803616d66157f96f"
+ integrity sha512-FTyzJtXeSyPmabXFHcvlSdhYROiL5S1Qe2rt6pjxK3EI/vFeElHZWFhTwTLinKTwrzO0JCv3u9d36VOPl/USoA==
+
+"@anolilab/textlint-config@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@anolilab/textlint-config/-/textlint-config-1.0.1.tgz#90cac8e94f7d3757e6c028f4d7a936830edafc0c"
+ integrity sha512-yftAwFBmjRHygpT3kUzta8sB0pE1GD08mdW6tXL5SjeEFo//lnlGGxgwnb3DNEl0ui86LQVIDnEmvkdQzRS2Fg==
+ dependencies:
+ "@textlint-rule/textlint-rule-no-invalid-control-character" "1.2.0"
+ "@textlint-rule/textlint-rule-no-unmatched-pair" "1.0.7"
+ "@textlint-rule/textlint-rule-preset-google" "0.1.2"
+ textlint "11.8.2"
+ textlint-rule-abbr-within-parentheses "1.0.2"
+ textlint-rule-alex "3.0.0"
+ textlint-rule-apostrophe "2.0.0"
+ textlint-rule-common-misspellings "1.0.1"
+ textlint-rule-diacritics "1.0.0"
+ textlint-rule-en-capitalization "2.0.3"
+ textlint-rule-footnote-order "1.0.3"
+ textlint-rule-helper "2.1.1"
+ textlint-rule-no-dead-link "4.7.0"
+ textlint-rule-no-empty-section "1.1.0"
+ textlint-rule-no-todo "2.0.1"
+ textlint-rule-terminology "2.1.5"
+ textlint-rule-write-good "1.6.2"
+ write-good "1.0.7"
+
+"@azu/format-text@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@azu/format-text/-/format-text-1.0.1.tgz#6967350a94640f6b02855169bd897ce54d6cebe2"
+ integrity sha1-aWc1CpRkD2sChVFpvYl85U1s6+I=
+
+"@azu/style-format@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@azu/style-format/-/style-format-1.0.0.tgz#e70187f8a862e191b1bce6c0268f13acd3a56b20"
+ integrity sha1-5wGH+Khi4ZGxvObAJo8TrNOlayA=
+ dependencies:
+ "@azu/format-text" "^1.0.1"
+
+"@babel/code-frame@7.12.11":
+ version "7.12.11"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
+ integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
+ dependencies:
+ "@babel/highlight" "^7.10.4"
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658"
+ integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==
+ dependencies:
+ "@babel/highlight" "^7.12.13"
+
+"@babel/core@7.12.9":
+ version "7.12.9"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8"
+ integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==
+ dependencies:
+ "@babel/code-frame" "^7.10.4"
+ "@babel/generator" "^7.12.5"
+ "@babel/helper-module-transforms" "^7.12.1"
+ "@babel/helpers" "^7.12.5"
+ "@babel/parser" "^7.12.7"
+ "@babel/template" "^7.12.7"
+ "@babel/traverse" "^7.12.9"
+ "@babel/types" "^7.12.7"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.1"
+ json5 "^2.1.2"
+ lodash "^4.17.19"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
+"@babel/core@^7.1.0", "@babel/core@^7.12.16", "@babel/core@^7.7.5":
+ version "7.12.17"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.17.tgz#993c5e893333107a2815d8e0d73a2c3755e280b2"
+ integrity sha512-V3CuX1aBywbJvV2yzJScRxeiiw0v2KZZYYE3giywxzFJL13RiyPjaaDwhDnxmgFTTS7FgvM2ijr4QmKNIu0AtQ==
+ dependencies:
+ "@babel/code-frame" "^7.12.13"
+ "@babel/generator" "^7.12.17"
+ "@babel/helper-module-transforms" "^7.12.17"
+ "@babel/helpers" "^7.12.17"
+ "@babel/parser" "^7.12.17"
+ "@babel/template" "^7.12.13"
+ "@babel/traverse" "^7.12.17"
+ "@babel/types" "^7.12.17"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.1"
+ json5 "^2.1.2"
+ lodash "^4.17.19"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
+"@babel/eslint-parser@^7.12.16":
+ version "7.12.17"
+ resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.12.17.tgz#6cb57929c5614654ee7d6d27fa85ed0b6a8d4470"
+ integrity sha512-CoetDyQRwtkUlOtbkCmYFpneXD78oANblFGUMX4DKLYj/mHzuS3rPt7zWzaDf0lB4uEB3C7C+hQAS/QgxqjdXQ==
+ dependencies:
+ eslint-scope "5.1.0"
+ eslint-visitor-keys "^1.3.0"
+ semver "^6.3.0"
+
+"@babel/generator@^7.12.17", "@babel/generator@^7.12.5":
+ version "7.12.17"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.17.tgz#9ef1dd792d778b32284411df63f4f668a9957287"
+ integrity sha512-DSA7ruZrY4WI8VxuS1jWSRezFnghEoYEFrZcw9BizQRmOZiUsiHl59+qEARGPqPikwA/GPTyRCi7isuCK/oyqg==
+ dependencies:
+ "@babel/types" "^7.12.17"
+ jsesc "^2.5.1"
+ source-map "^0.5.0"
+
+"@babel/helper-function-name@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a"
+ integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.12.13"
+ "@babel/template" "^7.12.13"
+ "@babel/types" "^7.12.13"
+
+"@babel/helper-get-function-arity@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583"
+ integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==
+ dependencies:
+ "@babel/types" "^7.12.13"
+
+"@babel/helper-member-expression-to-functions@^7.12.13":
+ version "7.12.17"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.17.tgz#f82838eb06e1235307b6d71457b6670ff71ee5ac"
+ integrity sha512-Bzv4p3ODgS/qpBE0DiJ9qf5WxSmrQ8gVTe8ClMfwwsY2x/rhykxxy3bXzG7AGTnPB2ij37zGJ/Q/6FruxHxsxg==
+ dependencies:
+ "@babel/types" "^7.12.17"
+
+"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0"
+ integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==
+ dependencies:
+ "@babel/types" "^7.12.13"
+
+"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.12.17":
+ version "7.12.17"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.17.tgz#7c75b987d6dfd5b48e575648f81eaac891539509"
+ integrity sha512-sFL+p6zOCQMm9vilo06M4VHuTxUAwa6IxgL56Tq1DVtA0ziAGTH1ThmJq7xwPqdQlgAbKX3fb0oZNbtRIyA5KQ==
+ dependencies:
+ "@babel/helper-module-imports" "^7.12.13"
+ "@babel/helper-replace-supers" "^7.12.13"
+ "@babel/helper-simple-access" "^7.12.13"
+ "@babel/helper-split-export-declaration" "^7.12.13"
+ "@babel/helper-validator-identifier" "^7.12.11"
+ "@babel/template" "^7.12.13"
+ "@babel/traverse" "^7.12.17"
+ "@babel/types" "^7.12.17"
+ lodash "^4.17.19"
+
+"@babel/helper-optimise-call-expression@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea"
+ integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==
+ dependencies:
+ "@babel/types" "^7.12.13"
+
+"@babel/helper-plugin-utils@7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375"
+ integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.8.0":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.12.13.tgz#174254d0f2424d8aefb4dd48057511247b0a9eeb"
+ integrity sha512-C+10MXCXJLiR6IeG9+Wiejt9jmtFpxUc3MQqCmPY8hfCjyUGl9kT+B2okzEZrtykiwrc4dbCPdDoz0A/HQbDaA==
+
+"@babel/helper-replace-supers@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.13.tgz#00ec4fb6862546bd3d0aff9aac56074277173121"
+ integrity sha512-pctAOIAMVStI2TMLhozPKbf5yTEXc0OJa0eENheb4w09SrgOWEs+P4nTOZYJQCqs8JlErGLDPDJTiGIp3ygbLg==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.12.13"
+ "@babel/helper-optimise-call-expression" "^7.12.13"
+ "@babel/traverse" "^7.12.13"
+ "@babel/types" "^7.12.13"
+
+"@babel/helper-simple-access@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4"
+ integrity sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==
+ dependencies:
+ "@babel/types" "^7.12.13"
+
+"@babel/helper-split-export-declaration@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05"
+ integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==
+ dependencies:
+ "@babel/types" "^7.12.13"
+
+"@babel/helper-validator-identifier@^7.12.11":
+ version "7.12.11"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
+ integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
+
+"@babel/helpers@^7.12.17", "@babel/helpers@^7.12.5":
+ version "7.12.17"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.17.tgz#71e03d2981a6b5ee16899964f4101dc8471d60bc"
+ integrity sha512-tEpjqSBGt/SFEsFikKds1sLNChKKGGR17flIgQKXH4fG6m9gTgl3gnOC1giHNyaBCSKuTfxaSzHi7UnvqiVKxg==
+ dependencies:
+ "@babel/template" "^7.12.13"
+ "@babel/traverse" "^7.12.17"
+ "@babel/types" "^7.12.17"
+
+"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c"
+ integrity sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.12.11"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.12.17", "@babel/parser@^7.12.7":
+ version "7.12.17"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.17.tgz#bc85d2d47db38094e5bb268fc761716e7d693848"
+ integrity sha512-r1yKkiUTYMQ8LiEI0UcQx5ETw5dpTLn9wijn9hk6KkTtOK95FndDN10M+8/s6k/Ymlbivw0Av9q4SlgF80PtHg==
+
+"@babel/plugin-proposal-object-rest-spread@7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069"
+ integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+ "@babel/plugin-transform-parameters" "^7.12.1"
+
+"@babel/plugin-syntax-async-generators@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+ integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-bigint@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"
+ integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.8.3":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
+ integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.12.13"
+
+"@babel/plugin-syntax-import-meta@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
+ integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-json-strings@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+ integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-jsx@7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926"
+ integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
+ integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+ integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
+ integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+ integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+ integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+ integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-top-level-await@^7.8.3":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178"
+ integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.12.13"
+
+"@babel/plugin-transform-parameters@^7.12.1":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.13.tgz#461e76dfb63c2dfd327b8a008a9e802818ce9853"
+ integrity sha512-e7QqwZalNiBRHCpJg/P8s/VJeSRYgmtWySs1JwvfwPqhBbiWfOcHDKdeAi6oAyIimoKWBlwc8oTgbZHdhCoVZA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.12.13"
+
+"@babel/runtime-corejs3@^7.10.2":
+ version "7.12.18"
+ resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.12.18.tgz#e5663237e5658e4c09586995d2dd6d2c8cfd6fc0"
+ integrity sha512-ngR7yhNTjDxxe1VYmhqQqqXZWujGb6g0IoA4qeG6MxNGRnIw2Zo8ImY8HfaQ7l3T6GklWhdNfyhWk0C0iocdVA==
+ dependencies:
+ core-js-pure "^3.0.0"
+ regenerator-runtime "^0.13.4"
+
+"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.9.6":
+ version "7.12.18"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.18.tgz#af137bd7e7d9705a412b3caaf991fe6aaa97831b"
+ integrity sha512-BogPQ7ciE6SYAUPtlm9tWbgI9+2AgqSam6QivMgXgAT+fKbgppaj4ZX15MHeLC1PVF5sNk70huBu20XxWOs8Cg==
+ dependencies:
+ regenerator-runtime "^0.13.4"
+
+"@babel/template@^7.12.13", "@babel/template@^7.12.7", "@babel/template@^7.3.3":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327"
+ integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==
+ dependencies:
+ "@babel/code-frame" "^7.12.13"
+ "@babel/parser" "^7.12.13"
+ "@babel/types" "^7.12.13"
+
+"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.13", "@babel/traverse@^7.12.17", "@babel/traverse@^7.12.9":
+ version "7.12.17"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.17.tgz#40ec8c7ffb502c4e54c7f95492dc11b88d718619"
+ integrity sha512-LGkTqDqdiwC6Q7fWSwQoas/oyiEYw6Hqjve5KOSykXkmFJFqzvGMb9niaUEag3Rlve492Mkye3gLw9FTv94fdQ==
+ dependencies:
+ "@babel/code-frame" "^7.12.13"
+ "@babel/generator" "^7.12.17"
+ "@babel/helper-function-name" "^7.12.13"
+ "@babel/helper-split-export-declaration" "^7.12.13"
+ "@babel/parser" "^7.12.17"
+ "@babel/types" "^7.12.17"
+ debug "^4.1.0"
+ globals "^11.1.0"
+ lodash "^4.17.19"
+
+"@babel/types@^7.0.0", "@babel/types@^7.12.13", "@babel/types@^7.12.17", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3":
+ version "7.12.17"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.17.tgz#9d711eb807e0934c90b8b1ca0eb1f7230d150963"
+ integrity sha512-tNMDjcv/4DIcHxErTgwB9q2ZcYyN0sUfgGKUK/mm1FJK7Wz+KstoEekxrl/tBiNDgLK1HGi+sppj1An/1DR4fQ==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.12.11"
+ lodash "^4.17.19"
+ to-fast-properties "^2.0.0"
+
+"@bcoe/v8-coverage@^0.2.3":
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
+ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+
+"@cnakazawa/watch@^1.0.3":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a"
+ integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==
+ dependencies:
+ exec-sh "^0.3.2"
+ minimist "^1.2.0"
+
+"@emotion/cache@^10.0.27":
+ version "10.0.29"
+ resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0"
+ integrity sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==
+ dependencies:
+ "@emotion/sheet" "0.9.4"
+ "@emotion/stylis" "0.8.5"
+ "@emotion/utils" "0.11.3"
+ "@emotion/weak-memoize" "0.2.5"
+
+"@emotion/core@^10.0.0":
+ version "10.1.1"
+ resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.1.1.tgz#c956c1365f2f2481960064bcb8c4732e5fb612c3"
+ integrity sha512-ZMLG6qpXR8x031NXD8HJqugy/AZSkAuMxxqB46pmAR7ze47MhNJ56cdoX243QPZdGctrdfo+s08yZTiwaUcRKA==
+ dependencies:
+ "@babel/runtime" "^7.5.5"
+ "@emotion/cache" "^10.0.27"
+ "@emotion/css" "^10.0.27"
+ "@emotion/serialize" "^0.11.15"
+ "@emotion/sheet" "0.9.4"
+ "@emotion/utils" "0.11.3"
+
+"@emotion/css@^10.0.27":
+ version "10.0.27"
+ resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c"
+ integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==
+ dependencies:
+ "@emotion/serialize" "^0.11.15"
+ "@emotion/utils" "0.11.3"
+ babel-plugin-emotion "^10.0.27"
+
+"@emotion/hash@0.8.0":
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
+ integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
+
+"@emotion/is-prop-valid@0.8.8", "@emotion/is-prop-valid@^0.8.1":
+ version "0.8.8"
+ resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a"
+ integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==
+ dependencies:
+ "@emotion/memoize" "0.7.4"
+
+"@emotion/memoize@0.7.4":
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb"
+ integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==
+
+"@emotion/memoize@^0.7.1":
+ version "0.7.5"
+ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50"
+ integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==
+
+"@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16":
+ version "0.11.16"
+ resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad"
+ integrity sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==
+ dependencies:
+ "@emotion/hash" "0.8.0"
+ "@emotion/memoize" "0.7.4"
+ "@emotion/unitless" "0.7.5"
+ "@emotion/utils" "0.11.3"
+ csstype "^2.5.7"
+
+"@emotion/sheet@0.9.4":
+ version "0.9.4"
+ resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5"
+ integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==
+
+"@emotion/styled-base@^10.0.27":
+ version "10.0.31"
+ resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.31.tgz#940957ee0aa15c6974adc7d494ff19765a2f742a"
+ integrity sha512-wTOE1NcXmqMWlyrtwdkqg87Mu6Rj1MaukEoEmEkHirO5IoHDJ8LgCQL4MjJODgxWxXibGR3opGp1p7YvkNEdXQ==
+ dependencies:
+ "@babel/runtime" "^7.5.5"
+ "@emotion/is-prop-valid" "0.8.8"
+ "@emotion/serialize" "^0.11.15"
+ "@emotion/utils" "0.11.3"
+
+"@emotion/styled@^10.0.0":
+ version "10.0.27"
+ resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.27.tgz#12cb67e91f7ad7431e1875b1d83a94b814133eaf"
+ integrity sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q==
+ dependencies:
+ "@emotion/styled-base" "^10.0.27"
+ babel-plugin-emotion "^10.0.27"
+
+"@emotion/stylis@0.8.5":
+ version "0.8.5"
+ resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04"
+ integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==
+
+"@emotion/unitless@0.7.5":
+ version "0.7.5"
+ resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
+ integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
+
+"@emotion/utils@0.11.3":
+ version "0.11.3"
+ resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924"
+ integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==
+
+"@emotion/weak-memoize@0.2.5":
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
+ integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
+
+"@eslint/eslintrc@^0.3.0":
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318"
+ integrity sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.1.1"
+ espree "^7.3.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.2.1"
+ js-yaml "^3.13.1"
+ lodash "^4.17.20"
+ minimatch "^3.0.4"
+ strip-json-comments "^3.1.1"
+
+"@istanbuljs/load-nyc-config@^1.0.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
+ integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
+ dependencies:
+ camelcase "^5.3.1"
+ find-up "^4.1.0"
+ get-package-type "^0.1.0"
+ js-yaml "^3.13.1"
+ resolve-from "^5.0.0"
+
+"@istanbuljs/schema@^0.1.2":
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
+ integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
+
+"@jest/console@^26.6.2":
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2"
+ integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==
+ dependencies:
+ "@jest/types" "^26.6.2"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ jest-message-util "^26.6.2"
+ jest-util "^26.6.2"
+ slash "^3.0.0"
+
+"@jest/core@^26.6.3":
+ version "26.6.3"
+ resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad"
+ integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==
+ dependencies:
+ "@jest/console" "^26.6.2"
+ "@jest/reporters" "^26.6.2"
+ "@jest/test-result" "^26.6.2"
+ "@jest/transform" "^26.6.2"
+ "@jest/types" "^26.6.2"
+ "@types/node" "*"
+ ansi-escapes "^4.2.1"
+ chalk "^4.0.0"
+ exit "^0.1.2"
+ graceful-fs "^4.2.4"
+ jest-changed-files "^26.6.2"
+ jest-config "^26.6.3"
+ jest-haste-map "^26.6.2"
+ jest-message-util "^26.6.2"
+ jest-regex-util "^26.0.0"
+ jest-resolve "^26.6.2"
+ jest-resolve-dependencies "^26.6.3"
+ jest-runner "^26.6.3"
+ jest-runtime "^26.6.3"
+ jest-snapshot "^26.6.2"
+ jest-util "^26.6.2"
+ jest-validate "^26.6.2"
+ jest-watcher "^26.6.2"
+ micromatch "^4.0.2"
+ p-each-series "^2.1.0"
+ rimraf "^3.0.0"
+ slash "^3.0.0"
+ strip-ansi "^6.0.0"
+
+"@jest/environment@^26.6.2":
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c"
+ integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==
+ dependencies:
+ "@jest/fake-timers" "^26.6.2"
+ "@jest/types" "^26.6.2"
+ "@types/node" "*"
+ jest-mock "^26.6.2"
+
+"@jest/fake-timers@^26.6.2":
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad"
+ integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==
+ dependencies:
+ "@jest/types" "^26.6.2"
+ "@sinonjs/fake-timers" "^6.0.1"
+ "@types/node" "*"
+ jest-message-util "^26.6.2"
+ jest-mock "^26.6.2"
+ jest-util "^26.6.2"
+
+"@jest/globals@^26.6.2":
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a"
+ integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==
+ dependencies:
+ "@jest/environment" "^26.6.2"
+ "@jest/types" "^26.6.2"
+ expect "^26.6.2"
+
+"@jest/reporters@^26.6.2":
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6"
+ integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==
+ dependencies:
+ "@bcoe/v8-coverage" "^0.2.3"
+ "@jest/console" "^26.6.2"
+ "@jest/test-result" "^26.6.2"
+ "@jest/transform" "^26.6.2"
+ "@jest/types" "^26.6.2"
+ chalk "^4.0.0"
+ collect-v8-coverage "^1.0.0"
+ exit "^0.1.2"
+ glob "^7.1.2"
+ graceful-fs "^4.2.4"
+ istanbul-lib-coverage "^3.0.0"
+ istanbul-lib-instrument "^4.0.3"
+ istanbul-lib-report "^3.0.0"
+ istanbul-lib-source-maps "^4.0.0"
+ istanbul-reports "^3.0.2"
+ jest-haste-map "^26.6.2"
+ jest-resolve "^26.6.2"
+ jest-util "^26.6.2"
+ jest-worker "^26.6.2"
+ slash "^3.0.0"
+ source-map "^0.6.0"
+ string-length "^4.0.1"
+ terminal-link "^2.0.0"
+ v8-to-istanbul "^7.0.0"
+ optionalDependencies:
+ node-notifier "^8.0.0"
+
+"@jest/source-map@^26.6.2":
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535"
+ integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==
+ dependencies:
+ callsites "^3.0.0"
+ graceful-fs "^4.2.4"
+ source-map "^0.6.0"
+
+"@jest/test-result@^26.6.2":
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18"
+ integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==
+ dependencies:
+ "@jest/console" "^26.6.2"
+ "@jest/types" "^26.6.2"
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ collect-v8-coverage "^1.0.0"
+
+"@jest/test-sequencer@^26.6.3":
+ version "26.6.3"
+ resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17"
+ integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==
+ dependencies:
+ "@jest/test-result" "^26.6.2"
+ graceful-fs "^4.2.4"
+ jest-haste-map "^26.6.2"
+ jest-runner "^26.6.3"
+ jest-runtime "^26.6.3"
+
+"@jest/transform@^26.6.2":
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b"
+ integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/types" "^26.6.2"
+ babel-plugin-istanbul "^6.0.0"
+ chalk "^4.0.0"
+ convert-source-map "^1.4.0"
+ fast-json-stable-stringify "^2.0.0"
+ graceful-fs "^4.2.4"
+ jest-haste-map "^26.6.2"
+ jest-regex-util "^26.0.0"
+ jest-util "^26.6.2"
+ micromatch "^4.0.2"
+ pirates "^4.0.1"
+ slash "^3.0.0"
+ source-map "^0.6.1"
+ write-file-atomic "^3.0.0"
+
+"@jest/types@^26.6.2":
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e"
+ integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^3.0.0"
+ "@types/node" "*"
+ "@types/yargs" "^15.0.0"
+ chalk "^4.0.0"
+
+"@mdn/browser-compat-data@^2.0.7":
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/@mdn/browser-compat-data/-/browser-compat-data-2.0.7.tgz#72ec37b9c1e00ce0b4e0309d753be18e2da12ee3"
+ integrity sha512-GeeM827DlzFFidn1eKkMBiqXFD2oLsnZbaiGhByPl0vcapsRzUL+t9hDoov1swc9rB2jw64R+ihtzC8qOE9wXw==
+ dependencies:
+ extend "3.0.2"
+
+"@mdx-js/util@1.6.22":
+ version "1.6.22"
+ resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b"
+ integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==
+
+"@nodelib/fs.scandir@2.1.4":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69"
+ integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.4"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655"
+ integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063"
+ integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.4"
+ fastq "^1.6.0"
+
+"@octokit/action@^3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@octokit/action/-/action-3.4.0.tgz#f406c215e542f74f09e35b9ce70993c7ea65a709"
+ integrity sha512-ZbcmFDlss2Xae1ghHdA9Gp4EOt6schF0LlT0d/6ZVvR67WTP/K3pM35lDUboVOVlNPLyjwuSFY2Tnag1yqjztg==
+ dependencies:
+ "@octokit/auth-action" "^1.2.0"
+ "@octokit/core" "^3.0.0"
+ "@octokit/plugin-paginate-rest" "^2.2.4"
+ "@octokit/plugin-rest-endpoint-methods" "4.12.0"
+ "@octokit/types" "^6.0.3"
+
+"@octokit/auth-action@^1.2.0":
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@octokit/auth-action/-/auth-action-1.3.2.tgz#9ef25aff70d78eb98c9ddb6f573bc8a298ca0220"
+ integrity sha512-eCFGNq30e8ObTh6fwcmq8JRaGoputPQtPi9PTgbsEo+NPd5JrOoynI2bV7OpePRqgtATp1JRWC0y/3iXTB11ow==
+ dependencies:
+ "@octokit/auth-token" "^2.4.0"
+ "@octokit/types" "^6.0.3"
+
+"@octokit/auth-token@^2.4.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.0.0":
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.2.5.tgz#57becbd5fd789b0592b915840855f3a5f233d554"
+ integrity sha512-+DCtPykGnvXKWWQI0E1XD+CCeWSBhB6kwItXqfFmNBlIlhczuDPbg+P6BtLnVBaRJDAjv+1mrUJuRsFSjktopg==
+ dependencies:
+ "@octokit/auth-token" "^2.4.4"
+ "@octokit/graphql" "^4.5.8"
+ "@octokit/request" "^5.4.12"
+ "@octokit/types" "^6.0.3"
+ before-after-hook "^2.1.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/fixtures@^21.3.5":
+ version "21.3.5"
+ resolved "https://registry.yarnpkg.com/@octokit/fixtures/-/fixtures-21.3.5.tgz#3ee67831e31980cec0100f68d348f4e4403d4541"
+ integrity sha512-bR7YkGXGZiAIlO7MUtX4CO7eEAdHPJS9RReELhpeshO7sJchn098m7Vx6XRxpoMmxs0XtGvGx81jhAABb0VY0Q==
+ dependencies:
+ json-diff "^0.5.3"
+ lodash "^4.17.11"
+ nock "^13.0.0"
+ url-template "^2.0.8"
+
+"@octokit/graphql@^4.5.8":
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.6.0.tgz#f9abca55f82183964a33439d5264674c701c3327"
+ integrity sha512-CJ6n7izLFXLvPZaWzCQDjU/RP+vHiZmWdOunaCS87v+2jxMsW9FB5ktfIxybRBxZjxuJGRnxk7xJecWTVxFUYQ==
+ dependencies:
+ "@octokit/request" "^5.3.0"
+ "@octokit/types" "^6.0.3"
+ universal-user-agent "^6.0.0"
+
+"@octokit/openapi-types@^5.1.0":
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-5.1.0.tgz#661fd03c7d55fbcb0a0937d3353d87dea012f52c"
+ integrity sha512-bodZvSYgycbUuuKrC/anCBUExvaSSWzMMFz0xl7pcJujxnmGxvqvcFHktjx1ZOSyeNKLfYF0QCgibaHUGsZTng==
+
+"@octokit/plugin-paginate-rest@^2.2.4":
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.10.0.tgz#5925156d809c94b7bfc47b28e17488415548fa67"
+ integrity sha512-71OsKBSMcQEu/6lfVbhv5C5ikU1rn10rKot/WiV7do7fyfElQ2eCUQFogHPbj0ci5lnKAjvahOiMAr6lcvL8Qw==
+ dependencies:
+ "@octokit/types" "^6.10.0"
+
+"@octokit/plugin-rest-endpoint-methods@4.12.0":
+ version "4.12.0"
+ resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.12.0.tgz#1cec405cd4eaf0bdb58cb7d2a9b3d8473b3a70e8"
+ integrity sha512-RgnQ1aoetdOJjZYC37LV5FNlL7GY/v1CdC5dur1Zp/UiADJlbRFbAz/xLx26ovXw67dK7EUtwCghS+6QyiI9RA==
+ dependencies:
+ "@octokit/types" "^6.10.0"
+ deprecation "^2.3.1"
+
+"@octokit/plugin-retry@^3.0.7":
+ version "3.0.7"
+ resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-3.0.7.tgz#174516f2b80b7140aee71ebc2b506db2c5c1d3d6"
+ integrity sha512-n08BPfVeKj5wnyH7IaOWnuKbx+e9rSJkhDHMJWXLPv61625uWjsN8G7sAW3zWm9n9vnS4friE7LL/XLcyGeG8Q==
+ dependencies:
+ "@octokit/types" "^6.0.3"
+ bottleneck "^2.15.3"
+
+"@octokit/request-error@^2.0.0":
+ 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.10.0", "@octokit/types@^6.7.1":
+ version "6.10.0"
+ resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.10.0.tgz#243faa864b0955f574012d52e179de38ac9ebafe"
+ integrity sha512-aMDo10kglofejJ96edCBIgQLVuzMDyjxmhdgEcoUUD64PlHYSrNsAGqN0wZtoiX4/PCQ3JLA50IpkP1bcKD/cA==
+ dependencies:
+ "@octokit/openapi-types" "^5.1.0"
+
+"@rushstack/eslint-plugin-security@^0.1.3":
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/@rushstack/eslint-plugin-security/-/eslint-plugin-security-0.1.3.tgz#7b7dfc66c3de67f784fddc601939160a8d93c3e8"
+ integrity sha512-hwyrR1S1d6peH8Hc/oULxHaDkh2jVDaXY65hx13ybkw396vFypx+JT+wWqzS8TzLCy0uLyS/s+pLT+m/e4kw7g==
+ dependencies:
+ "@rushstack/tree-pattern" "0.2.1"
+
+"@rushstack/tree-pattern@0.2.1":
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/@rushstack/tree-pattern/-/tree-pattern-0.2.1.tgz#579a066ec00df51a8653a02d2a60a5c4cf99729e"
+ integrity sha512-ZRPQdV0LxUY/HRIvVKNz3Sb/qbklSthL2pY0qkNoycXKcXbCgXEP3TxL+i1/tW9g1jqft4o+pl9wx12Q6Uc0Xw==
+
+"@sindresorhus/is@^0.14.0":
+ version "0.14.0"
+ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
+ integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==
+
+"@sinonjs/commons@^1.7.0":
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.2.tgz#858f5c4b48d80778fde4b9d541f27edc0d56488b"
+ integrity sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==
+ dependencies:
+ type-detect "4.0.8"
+
+"@sinonjs/fake-timers@^6.0.1":
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40"
+ integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==
+ dependencies:
+ "@sinonjs/commons" "^1.7.0"
+
+"@styled-system/background@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/background/-/background-5.1.2.tgz#75c63d06b497ab372b70186c0bf608d62847a2ba"
+ integrity sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/border@^5.1.5":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@styled-system/border/-/border-5.1.5.tgz#0493d4332d2b59b74bb0d57d08c73eb555761ba6"
+ integrity sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/color@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/color/-/color-5.1.2.tgz#b8d6b4af481faabe4abca1a60f8daa4ccc2d9f43"
+ integrity sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/core@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/core/-/core-5.1.2.tgz#b8b7b86455d5a0514f071c4fa8e434b987f6a772"
+ integrity sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==
+ dependencies:
+ object-assign "^4.1.1"
+
+"@styled-system/css@^5.0.0", "@styled-system/css@^5.1.5":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@styled-system/css/-/css-5.1.5.tgz#0460d5f3ff962fa649ea128ef58d9584f403bbbc"
+ integrity sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==
+
+"@styled-system/flexbox@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/flexbox/-/flexbox-5.1.2.tgz#077090f43f61c3852df63da24e4108087a8beecf"
+ integrity sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/grid@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/grid/-/grid-5.1.2.tgz#7165049877732900b99cd00759679fbe45c6c573"
+ integrity sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/layout@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/layout/-/layout-5.1.2.tgz#12d73e79887e10062f4dbbbc2067462eace42339"
+ integrity sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/position@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/position/-/position-5.1.2.tgz#56961266566836f57a24d8e8e33ce0c1adb59dd3"
+ integrity sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/shadow@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/shadow/-/shadow-5.1.2.tgz#beddab28d7de03cd0177a87ac4ed3b3b6d9831fd"
+ integrity sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/should-forward-prop@^5.0.0":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@styled-system/should-forward-prop/-/should-forward-prop-5.1.5.tgz#c392008c6ae14a6eb78bf1932733594f7f7e5c76"
+ integrity sha512-+rPRomgCGYnUIaFabDoOgpSDc4UUJ1KsmlnzcEp0tu5lFrBQKgZclSo18Z1URhaZm7a6agGtS5Xif7tuC2s52Q==
+ dependencies:
+ "@emotion/is-prop-valid" "^0.8.1"
+ "@emotion/memoize" "^0.7.1"
+ styled-system "^5.1.5"
+
+"@styled-system/space@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/space/-/space-5.1.2.tgz#38925d2fa29a41c0eb20e65b7c3efb6e8efce953"
+ integrity sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/typography@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/typography/-/typography-5.1.2.tgz#65fb791c67d50cd2900d234583eaacdca8c134f7"
+ integrity sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/variant@^5.1.5":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@styled-system/variant/-/variant-5.1.5.tgz#8446d8aad06af3a4c723d717841df2dbe4ddeafd"
+ integrity sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+ "@styled-system/css" "^5.1.5"
+
+"@szmarczak/http-timer@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"
+ integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==
+ dependencies:
+ defer-to-connect "^1.0.1"
+
+"@testing-library/dom@^7.28.1":
+ version "7.29.6"
+ resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.29.6.tgz#eb37844fb431186db7960a7ff6749ea65a19617c"
+ integrity sha512-vzTsAXa439ptdvav/4lsKRcGpAQX7b6wBIqia7+iNzqGJ5zjswApxA6jDAsexrc6ue9krWcbh8o+LYkBXW+GCQ==
+ dependencies:
+ "@babel/code-frame" "^7.10.4"
+ "@babel/runtime" "^7.12.5"
+ "@types/aria-query" "^4.2.0"
+ aria-query "^4.2.2"
+ chalk "^4.1.0"
+ dom-accessibility-api "^0.5.4"
+ lz-string "^1.4.4"
+ pretty-format "^26.6.2"
+
+"@textlint-rule/textlint-report-helper-for-google-preset@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-report-helper-for-google-preset/-/textlint-report-helper-for-google-preset-0.1.2.tgz#dd7ac251872724439bfe6e9961f120a2e998f45c"
+ integrity sha512-FsJXxngIT1PPLj+0aAq/yYFhXQOjDxRtbZVamotTw6K7nvUOeNPcGc5e20FF6gbq1x2fKpLvbMntmL262UXb+g==
+ dependencies:
+ "@textlint/ast-node-types" "^4.0.3"
+ en-lexicon "^1.0.11"
+ en-pos "^1.0.16"
+ match-test-replace "^1.1.0"
+ nlcst-parse-english "^1.1.1"
+ nlcst-to-string "^2.0.1"
+ textlint-rule-helper "^2.0.0"
+ textlint-util-to-string "^2.1.1"
+ unist-util-find "^1.0.1"
+
+"@textlint-rule/textlint-rule-google-abbreviations@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-google-abbreviations/-/textlint-rule-google-abbreviations-0.1.2.tgz#d6a284e9564d19ef276c433541f801fc49754c6a"
+ integrity sha512-/SonK3Bbi11ZDvUO6Ji9R07UKVk00t01sgisZT+R2PGvPjGjOmvCa9kjhq9bBnNZhbVnHnI4dHiUiQn3Mvuetw==
+ dependencies:
+ "@textlint-rule/textlint-report-helper-for-google-preset" "^0.1.2"
+
+"@textlint-rule/textlint-rule-google-articles@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-google-articles/-/textlint-rule-google-articles-0.1.2.tgz#ab497da0b5c72b0472b67d0c63ef7a41755b6524"
+ integrity sha512-bhQgZTfBkrcK1sqmlujwwGMIqx28HdU1NpYcKv15NJ1MaRzUalXNzzs5Xnj/Y7govbg4lIiXBf1E0/5+DI234w==
+ dependencies:
+ "@textlint-rule/textlint-report-helper-for-google-preset" "^0.1.2"
+ english-article-classifier "^1.0.1"
+
+"@textlint-rule/textlint-rule-google-capitalization@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-google-capitalization/-/textlint-rule-google-capitalization-0.1.2.tgz#4bf0af7e7d5828695a42c29b6364f009a142fb8b"
+ integrity sha512-y6Gj+7Vh5eKJ/a0u9BbH7Q43DJYqne75AA0J6vfHt41k449Y3yasAkib4Lfqji786WRvbVmNt7wjZ+v6k+MQEQ==
+ dependencies:
+ textlint-rule-en-capitalization "^2.0.1"
+
+"@textlint-rule/textlint-rule-google-clause-order@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-google-clause-order/-/textlint-rule-google-clause-order-0.1.2.tgz#e2a5281b4a7796f9050b977f7ff74cf523bbec1f"
+ integrity sha512-aT+wLXfWnzX6PFMDy5aSlS+biYC5BwfYcVR6BkB+MewhIBy51RLFKiTbFXo+gsknI96o+wMT0ux3peyWhcIRJg==
+ dependencies:
+ "@textlint-rule/textlint-report-helper-for-google-preset" "^0.1.2"
+
+"@textlint-rule/textlint-rule-google-colons@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-google-colons/-/textlint-rule-google-colons-0.1.2.tgz#8eecc33892d882ce259d2a007b886ac4980157d6"
+ integrity sha512-RbyPwxzLojSUhoUxLYr6ENOigLoXrxByenOYnhObGsQbCWuOrRuwINrR3lKKPXX27z0LXRcJkZ3t8cJWPYKCEA==
+ dependencies:
+ "@textlint-rule/textlint-report-helper-for-google-preset" "^0.1.2"
+
+"@textlint-rule/textlint-rule-google-commas@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-google-commas/-/textlint-rule-google-commas-0.1.2.tgz#e2283e4234674ebaead2cab97b649b74c74105a9"
+ integrity sha512-SoeJsyEE2yU3fQUpIstcna4WPBK8r2oI0wttdvP2GqtA8tgj1tg5H0KICoCpSotVScSq5tMq8I2vzpms5uKIhw==
+ dependencies:
+ "@textlint-rule/textlint-report-helper-for-google-preset" "^0.1.2"
+
+"@textlint-rule/textlint-rule-google-contractions@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-google-contractions/-/textlint-rule-google-contractions-0.1.2.tgz#23cad70b5cd69567463a09fc22489fd632a84415"
+ integrity sha512-0Ku5DpfotaMSNs43e8lylBt1aInFV4LVdGW2QLRpNkduHhqKvTWF6zy326WpdXbgdiuYlWW213G94c22dqil4w==
+ dependencies:
+ "@textlint-rule/textlint-report-helper-for-google-preset" "^0.1.2"
+
+"@textlint-rule/textlint-rule-google-dashes@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-google-dashes/-/textlint-rule-google-dashes-0.1.2.tgz#5b11cbc0453d3a345b6a177e5b7c7c4ad063ce57"
+ integrity sha512-2G0F/2few1vlYPSiCzkTxaBMCs6TdWei6F0uH6dTFTaB6DLFMHOinTF8ZJfyU7NE+KTqdFMbd8FfcgSk9Awi9g==
+ dependencies:
+ "@textlint-rule/textlint-report-helper-for-google-preset" "^0.1.2"
+ textlint-rule-helper "^2.0.0"
+
+"@textlint-rule/textlint-rule-google-ellipses@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-google-ellipses/-/textlint-rule-google-ellipses-0.1.2.tgz#62e9dede0233745853fc4de2f279722fff8e4191"
+ integrity sha512-DNwp5Z/LL9ebapvnhwBMVsoubMSgrZ6+PjA5DqMUMSpIProUeaf+IbvGFlYY8M3dqi3RTR/915y5U0wb8wKfhQ==
+ dependencies:
+ "@textlint-rule/textlint-report-helper-for-google-preset" "^0.1.2"
+
+"@textlint-rule/textlint-rule-google-exclamation-points@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-google-exclamation-points/-/textlint-rule-google-exclamation-points-0.1.2.tgz#b29542fb433b01586f4b5ea7494af645e83a1d37"
+ integrity sha512-CgGaSeyL9oyigNxfr3/t+/X4LwF4hWoRZJII7LtQd/ujDzoQ29XqeL2m9SKSpM8LXySSkUnqNcNPWuUjJ01nDA==
+ dependencies:
+ textlint-rule-no-exclamation-question-mark "^1.0.2"
+
+"@textlint-rule/textlint-rule-google-hyphens@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-google-hyphens/-/textlint-rule-google-hyphens-0.1.2.tgz#3ea0e42763cb49a7d51d7a0402811b3d5095f422"
+ integrity sha512-K0VRQYbfLUh9/WoqQYlWOTo2eJZz8JlnBh/tvTjpbz2OYiowkXx9Z3oMPiuNLjhP+P9eB1swDqu99SB4+d4sHA==
+ dependencies:
+ "@textlint-rule/textlint-report-helper-for-google-preset" "^0.1.2"
+
+"@textlint-rule/textlint-rule-google-plurals-parentheses@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-google-plurals-parentheses/-/textlint-rule-google-plurals-parentheses-0.1.2.tgz#40b59c69a461f27d86723c3bf2414782f066624f"
+ integrity sha512-aYAfklXfN6wyHYh2IkZd2BETFVPhczjGbcW18SS41OGOlluOBt5opQmzCuqKSs493nM7IjGdCcsbmWDgSSzYyA==
+ dependencies:
+ "@textlint-rule/textlint-report-helper-for-google-preset" "^0.1.2"
+
+"@textlint-rule/textlint-rule-google-possessives@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-google-possessives/-/textlint-rule-google-possessives-0.1.2.tgz#1a51fd667404af24ad1f8290dc750cf4a0631abd"
+ integrity sha512-PakavIzVv2NclOjC72+W5uxVjT8QgoS5XaarBnTFQmMWp6Zqqkv25kE7GYp+YJIZC6ie2F8/3wR98prm3TcXyw==
+ dependencies:
+ "@textlint-rule/textlint-report-helper-for-google-preset" "^0.1.2"
+
+"@textlint-rule/textlint-rule-google-quotation-marks@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-google-quotation-marks/-/textlint-rule-google-quotation-marks-0.1.2.tgz#9f6c756deb28696490cf27c7a940a09f3c218830"
+ integrity sha512-ywkVwPDKclbS3x2u3iBXZ2oYSQO5XZ71N6KoQR6TCnjoMtgQAg2RhnAOVTjEFmGvBeqnOjQzZBiE7E4/ME21Fw==
+ dependencies:
+ "@textlint-rule/textlint-report-helper-for-google-preset" "^0.1.2"
+
+"@textlint-rule/textlint-rule-google-sentence-spacing@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-google-sentence-spacing/-/textlint-rule-google-sentence-spacing-0.1.2.tgz#00458e86d2c2471ee5169d0b6d381fb547551d4e"
+ integrity sha512-rbZjMf7AGlzrOfVPuY30zEIvX9wkrUqegqx/IZobSyPXDAZsgWSeVbKATtoXionv/3sfR3PEEWFRbk+KvP5fkQ==
+ dependencies:
+ sentence-splitter "2.3.2"
+ textlint-rule-helper "^2.0.0"
+ textlint-util-to-string "^2.1.1"
+
+"@textlint-rule/textlint-rule-google-slashes@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-google-slashes/-/textlint-rule-google-slashes-0.1.2.tgz#fa535c5d22d8ffdaadd35da5a107ddbdeca5acd8"
+ integrity sha512-Bn1fuFPuTwYeSv/MtO2aFgLc+AF6D2wg191dIlMZSWWrf1E4ue3ncmRoDFq5YfsaeXzdB4BU2+LmnxdoRUjAbA==
+ dependencies:
+ "@textlint-rule/textlint-report-helper-for-google-preset" "^0.1.2"
+ textlint-rule-helper "^2.0.0"
+
+"@textlint-rule/textlint-rule-google-tone@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-google-tone/-/textlint-rule-google-tone-0.1.2.tgz#26c09c72bedf15e3ccb91cf51cf28296746ae774"
+ integrity sha512-XSN0OkkN4Vn+6/VFI/SPHweG29mbNJiWPh78a8lk04gyZyMJVhnyW8NoLTCE6jJavxFlUmsawFFm5AujPDsM7A==
+ dependencies:
+ "@textlint-rule/textlint-report-helper-for-google-preset" "^0.1.2"
+
+"@textlint-rule/textlint-rule-google-word-list@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-google-word-list/-/textlint-rule-google-word-list-0.1.2.tgz#ce170cc92adfd4bb3a93bab13b599d0d3eff7e3b"
+ integrity sha512-TEcCBBWLAvMlFmxEjax5Jvo7dZTha6eFBiN412w0FU1hElz2GNGXuQpLvLezbwFAroumdyUXy0cT4I3VJZkU4A==
+ dependencies:
+ "@textlint-rule/textlint-report-helper-for-google-preset" "^0.1.2"
+
+"@textlint-rule/textlint-rule-no-invalid-control-character@1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-no-invalid-control-character/-/textlint-rule-no-invalid-control-character-1.2.0.tgz#3e8f03258d06b7deb2592bdb13626659c46abbf5"
+ integrity sha512-FgkOQr14H8D/LQVAEOR2cGWhzItb9MXCAvaBwKkysIfP9Ngwam+8NRmbphQ/GrAm3PXV63QmK1xwAKM1DntwmQ==
+ dependencies:
+ execall "^1.0.0"
+
+"@textlint-rule/textlint-rule-no-unmatched-pair@1.0.7":
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-no-unmatched-pair/-/textlint-rule-no-unmatched-pair-1.0.7.tgz#c7c18d2ddac913fa4e5d98d998bb3e97d4f73cb6"
+ integrity sha512-ZZxnTWc9/rXfH10KfWZdEpB1rdTdBRUob7694GuKbppUGHgXV90kx5axxWsK78vA0sUeN6HXNy14cPSKqBrSiA==
+ dependencies:
+ sentence-splitter "^3.0.11"
+ textlint-rule-helper "2.0.1"
+ textlint-tester "5.0.1"
+
+"@textlint-rule/textlint-rule-preset-google@0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@textlint-rule/textlint-rule-preset-google/-/textlint-rule-preset-google-0.1.2.tgz#7c805fc3a3ac7a9528f451113283531d1808f0dd"
+ integrity sha512-Q4G4HsLmue1XPK2F7AmIMVf1L5URv8vLs8Yx7Qm3sBBQoy+hhMSVCjJMzSwJpD9oWRWuLSReBlBtdRFArFXlVA==
+ dependencies:
+ "@textlint-rule/textlint-rule-google-abbreviations" "^0.1.2"
+ "@textlint-rule/textlint-rule-google-articles" "^0.1.2"
+ "@textlint-rule/textlint-rule-google-capitalization" "^0.1.2"
+ "@textlint-rule/textlint-rule-google-clause-order" "^0.1.2"
+ "@textlint-rule/textlint-rule-google-colons" "^0.1.2"
+ "@textlint-rule/textlint-rule-google-commas" "^0.1.2"
+ "@textlint-rule/textlint-rule-google-contractions" "^0.1.2"
+ "@textlint-rule/textlint-rule-google-dashes" "^0.1.2"
+ "@textlint-rule/textlint-rule-google-ellipses" "^0.1.2"
+ "@textlint-rule/textlint-rule-google-exclamation-points" "^0.1.2"
+ "@textlint-rule/textlint-rule-google-hyphens" "^0.1.2"
+ "@textlint-rule/textlint-rule-google-plurals-parentheses" "^0.1.2"
+ "@textlint-rule/textlint-rule-google-possessives" "^0.1.2"
+ "@textlint-rule/textlint-rule-google-quotation-marks" "^0.1.2"
+ "@textlint-rule/textlint-rule-google-sentence-spacing" "^0.1.2"
+ "@textlint-rule/textlint-rule-google-slashes" "^0.1.2"
+ "@textlint-rule/textlint-rule-google-tone" "^0.1.2"
+ "@textlint-rule/textlint-rule-google-word-list" "^0.1.2"
+
+"@textlint/ast-node-types@^4.0.3", "@textlint/ast-node-types@^4.2.1", "@textlint/ast-node-types@^4.2.5", "@textlint/ast-node-types@^4.4.1":
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/@textlint/ast-node-types/-/ast-node-types-4.4.1.tgz#715dd42b3ec7ff02729fa81cdc9557fe2cdd4f10"
+ integrity sha512-2QBwlqi2SU83vTHibfdTxGiLdIqR0btNyMGfVl0bwA6FI85HnSYoGFLrdCnq2V0nxpbhuvwzcm2Ja81w0VkMGA==
+
+"@textlint/ast-tester@^2.3.2":
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/@textlint/ast-tester/-/ast-tester-2.3.2.tgz#f0a951956db0d5a0d444210bcabc8fb334684438"
+ integrity sha512-4e1kyqsHks5POcQmuh7ITVrU/dbYyRUfQarQbeVRPP271n2HnlgnoYyZ10yV2Sb/Ksw+lQf7DPSnwNewXdCWww==
+ dependencies:
+ "@textlint/ast-node-types" "^4.4.1"
+
+"@textlint/ast-traverse@^2.3.2":
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/@textlint/ast-traverse/-/ast-traverse-2.3.2.tgz#733bd6b8527c5254d3eae672076d3869e18bd31f"
+ integrity sha512-Dt1s/6x0XWhUNFH2rAa9gL6ODtq232BZuBHuHiOg+SrVwzl+VjOfa3fMQ0LoYixGSyDtwqAlksWcC0KyLz0eSw==
+ dependencies:
+ "@textlint/ast-node-types" "^4.4.1"
+
+"@textlint/feature-flag@^3.0.5", "@textlint/feature-flag@^3.3.2":
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/@textlint/feature-flag/-/feature-flag-3.3.2.tgz#b6dfe7229249e6684c0b99efecbe44becdab3d43"
+ integrity sha512-7ErQ/UF0IBAd+PkQNBD7yYCDqL2o6leErMDENSWAgUHWLy5TcHr3Orn7qswtBMW5gIyXW9lh+EpllwLJ5qv35w==
+ dependencies:
+ map-like "^2.0.0"
+
+"@textlint/fixer-formatter@^3.3.2":
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/@textlint/fixer-formatter/-/fixer-formatter-3.3.2.tgz#3d85b4b64d8d124485b42cee54aa2f9c84ccaa90"
+ integrity sha512-aTEyH/rHSzxRLrluSjNhDnMSgIYK60J5AAgprKJCkb9h3dDRuNoiJ+BXh5FXVSSm1tGF0d8pu+Ph8OFBgQOchQ==
+ dependencies:
+ "@textlint/module-interop" "^1.2.2"
+ "@textlint/types" "^1.5.2"
+ chalk "^1.1.3"
+ debug "^4.3.1"
+ diff "^4.0.2"
+ is-file "^1.0.0"
+ string-width "^1.0.2"
+ strip-ansi "^6.0.0"
+ text-table "^0.2.0"
+ try-resolve "^1.0.1"
+
+"@textlint/kernel@^3.0.0", "@textlint/kernel@^3.4.2":
+ version "3.4.2"
+ resolved "https://registry.yarnpkg.com/@textlint/kernel/-/kernel-3.4.2.tgz#2d2ad545548594c1adeab30d1e410e8116e5fdd9"
+ integrity sha512-PpxAtvLGI9ewn+Dbt4j0KMfmMM39/AY3cikmZffu59nyTdIymXMeVMEVkpVZTEUk5OlL27RAON9FF+2u+0fshg==
+ dependencies:
+ "@textlint/ast-node-types" "^4.4.1"
+ "@textlint/ast-tester" "^2.3.2"
+ "@textlint/ast-traverse" "^2.3.2"
+ "@textlint/feature-flag" "^3.3.2"
+ "@textlint/source-code-fixer" "^3.4.2"
+ "@textlint/types" "^1.5.2"
+ "@textlint/utils" "^1.2.2"
+ debug "^4.3.1"
+ deep-equal "^1.1.1"
+ map-like "^2.0.0"
+ structured-source "^3.0.2"
+
+"@textlint/linter-formatter@^3.3.2":
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/@textlint/linter-formatter/-/linter-formatter-3.3.2.tgz#b296b095a5026c1bba5da47530a0034c61e7a22c"
+ integrity sha512-MRa8D1/x6pWycKTwb1QLjtY7GyjgcsYRfV0Gu0Aze5szCa3UDwZSewHycpcAGlIqr8AkqPRfyXi653M47eJ0rA==
+ dependencies:
+ "@azu/format-text" "^1.0.1"
+ "@azu/style-format" "^1.0.0"
+ "@textlint/module-interop" "^1.2.2"
+ "@textlint/types" "^1.5.2"
+ chalk "^1.1.3"
+ concat-stream "^1.6.2"
+ debug "^4.3.1"
+ is-file "^1.0.0"
+ js-yaml "^3.14.1"
+ optionator "^0.9.1"
+ pluralize "^2.0.0"
+ string-width "^1.0.2"
+ strip-ansi "^6.0.0"
+ table "^3.8.3"
+ text-table "^0.2.0"
+ try-resolve "^1.0.1"
+ xml-escape "^1.1.0"
+
+"@textlint/markdown-to-ast@^6.3.2":
+ version "6.3.2"
+ resolved "https://registry.yarnpkg.com/@textlint/markdown-to-ast/-/markdown-to-ast-6.3.2.tgz#ae69c8475073eb2631958b108497d4fea4e0255a"
+ integrity sha512-uwndF3PRJ48wTVAEDSy0IAEVJg/scxpdZ1r+QKeGuFfdtaGSrtcgROI6qiVU1g/WNyNfQw+DAA7F8HfM+pmleg==
+ dependencies:
+ "@textlint/ast-node-types" "^4.4.1"
+ debug "^4.3.1"
+ remark-frontmatter "^1.3.3"
+ remark-parse "^5.0.0"
+ structured-source "^3.0.2"
+ traverse "^0.6.6"
+ unified "^6.2.0"
+
+"@textlint/module-interop@^1.2.2":
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/@textlint/module-interop/-/module-interop-1.2.2.tgz#4f550c592439ec548eed1f90f127005ad339e5ad"
+ integrity sha512-B8HPS129lOqzEpRcafYl/OJ2TDxfBw1jGfEhebzwt3kGoMd5pQVih+hUIOl+SfAmLWqCDEniaKn0gw1s+hjSXA==
+
+"@textlint/regexp-string-matcher@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@textlint/regexp-string-matcher/-/regexp-string-matcher-1.1.0.tgz#e19975029ce228a214d50c6a7e9dbcbef29ad8cd"
+ integrity sha512-uTPnE1Dw1j+9clXPn61ZUdtg+WyhbgeXHwCTfBev7quHjeCP9PS8NdRkR6wEgmjuLg+xZlI4r/e1r6Bd0xyusQ==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ execall "^1.0.0"
+ lodash.sortby "^4.7.0"
+ lodash.uniq "^4.5.0"
+ lodash.uniqwith "^4.5.0"
+ to-regex "^3.0.2"
+
+"@textlint/source-code-fixer@^3.4.2":
+ version "3.4.2"
+ resolved "https://registry.yarnpkg.com/@textlint/source-code-fixer/-/source-code-fixer-3.4.2.tgz#ff6cb8fe616a51aa16c302bad1fe515a50289738"
+ integrity sha512-mSGQNO8is21KcHgDh4S8Cx88r7uU+7xpzHLuEuzhgEZfgwz3+tnpk22TrEjNYe1V1+aseU9iCQegVQQr1wroKQ==
+ dependencies:
+ "@textlint/types" "^1.5.2"
+ debug "^4.3.1"
+
+"@textlint/text-to-ast@^3.3.2":
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/@textlint/text-to-ast/-/text-to-ast-3.3.2.tgz#7e511620e46a41097bbd0b2b7c4954b3cf8175e5"
+ integrity sha512-+DKAP62ho21KID8IcKy1kP6K+kUZk+Z0MwvS9u2l39J0cK+vX523KI+sA6AXxEhOMDA8zhdIsBf3onGvrAtyhA==
+ dependencies:
+ "@textlint/ast-node-types" "^4.4.1"
+
+"@textlint/textlint-plugin-markdown@^5.3.2":
+ version "5.3.2"
+ resolved "https://registry.yarnpkg.com/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-5.3.2.tgz#d94a8f339bb2cf00e024f526c39d04d9e25f18bc"
+ integrity sha512-6Ph7ESKR48tEz5Pnog3PpvF84LU3jkADvr4iBkkVz9vLQt3KbqGnmk8EV94Y0hLEX+UrZKWmH3cJfh6O1Zy/eA==
+ dependencies:
+ "@textlint/markdown-to-ast" "^6.3.2"
+
+"@textlint/textlint-plugin-text@^4.3.2":
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/@textlint/textlint-plugin-text/-/textlint-plugin-text-4.3.2.tgz#eee6c24f3671167dba7d526ff1f95bfc3255f4b0"
+ integrity sha512-xnjad0bXaM6ZtgffuFKogHYkzXymUK3VTLP5MGA00kLitADlNUtwXQk82TebkXFcSPRhePU9+2XFipXNQDsg7g==
+ dependencies:
+ "@textlint/text-to-ast" "^3.3.2"
+
+"@textlint/types@^1.1.2", "@textlint/types@^1.5.2":
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/@textlint/types/-/types-1.5.2.tgz#957f7d8e890b5401cf35e6784c9e331990c20d7c"
+ integrity sha512-IdS0h2MCzdY+wjM0+qvl8IW/IxhmVFAVrGu5TmIBpJkihIV7WMa3ITFXIVb0oqwnePUmyLBRIVsCtC66E3QbfQ==
+ dependencies:
+ "@textlint/ast-node-types" "^4.4.1"
+
+"@textlint/utils@^1.2.2":
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/@textlint/utils/-/utils-1.2.2.tgz#c2166c2433542aa299bb76a6da1a8b21e6a3a7a6"
+ integrity sha512-7Mqcl9G9YYrPBv5d/tZ2NlWC66hTUpQEQxZEHDMTdF3gPmQUSNRNGjqUR9mhw00Wy8Wo6i3LUWuxwMT6heHNBQ==
+
+"@types/aria-query@^4.2.0":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.1.tgz#78b5433344e2f92e8b306c06a5622c50c245bf6b"
+ integrity sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg==
+
+"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7":
+ version "7.1.12"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d"
+ integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+ "@types/babel__generator" "*"
+ "@types/babel__template" "*"
+ "@types/babel__traverse" "*"
+
+"@types/babel__generator@*":
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8"
+ integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@types/babel__template@*":
+ version "7.4.0"
+ resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be"
+ integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6":
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0"
+ integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==
+ dependencies:
+ "@babel/types" "^7.3.0"
+
+"@types/bluebird@^3.5.33":
+ version "3.5.33"
+ resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.33.tgz#d79c020f283bd50bd76101d7d300313c107325fc"
+ integrity sha512-ndEo1xvnYeHxm7I/5sF6tBvnsA4Tdi3zj1keRKRs12SP+2ye2A27NDJ1B6PqkfMbGAcT+mqQVqbZRIrhfOp5PQ==
+
+"@types/fs-extra@^9.0.7":
+ version "9.0.7"
+ resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.7.tgz#a9ef2ffdab043def080c5bec94c03402f793577f"
+ integrity sha512-YGq2A6Yc3bldrLUlm17VNWOnUbnEzJ9CMgOeLFtQF3HOCN5lQBO8VyjG00a5acA5NNSM30kHVGp1trZgnVgi1Q==
+ dependencies:
+ "@types/node" "*"
+
+"@types/graceful-fs@^4.1.2":
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"
+ integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==
+ dependencies:
+ "@types/node" "*"
+
+"@types/hast@^2.0.0":
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.1.tgz#b16872f2a6144c7025f296fb9636a667ebb79cd9"
+ integrity sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q==
+ dependencies:
+ "@types/unist" "*"
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762"
+ integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==
+
+"@types/istanbul-lib-report@*":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
+ integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+
+"@types/istanbul-reports@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821"
+ integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==
+ dependencies:
+ "@types/istanbul-lib-report" "*"
+
+"@types/jest@26.x", "@types/jest@^26.0.20":
+ version "26.0.20"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.20.tgz#cd2f2702ecf69e86b586e1f5223a60e454056307"
+ integrity sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA==
+ dependencies:
+ jest-diff "^26.0.0"
+ pretty-format "^26.0.0"
+
+"@types/js-yaml@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.0.tgz#d1a11688112091f2c711674df3a65ea2f47b5dfb"
+ integrity sha512-4vlpCM5KPCL5CfGmTbpjwVKbISRYhduEJvvUWsH5EB7QInhEj94XPZ3ts/9FPiLZFqYO0xoW4ZL8z2AabTGgJA==
+
+"@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"
+ integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
+
+"@types/minimist@^1.2.0":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256"
+ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==
+
+"@types/node@*":
+ version "14.14.31"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.31.tgz#72286bd33d137aa0d152d47ec7c1762563d34055"
+ integrity sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==
+
+"@types/node@12.12.70":
+ version "12.12.70"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.70.tgz#adf70b179c3ee17620215ee4cb5c68c95f7c37ec"
+ integrity sha512-i5y7HTbvhonZQE+GnUM2rz1Bi8QkzxdQmEv1LKOv4nWyaQk/gdeiTApuQR3PDJHX7WomAbpx2wlWSEpxXGZ/UQ==
+
+"@types/normalize-package-data@^2.4.0":
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
+ integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==
+
+"@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/parse5@^5.0.0":
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109"
+ integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==
+
+"@types/prettier@^2.0.0":
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.1.tgz#374e31645d58cb18a07b3ecd8e9dede4deb2cccd"
+ integrity sha512-DxZZbyMAM9GWEzXL+BMZROWz9oo6A9EilwwOMET2UVu2uZTqMWS5S69KVtuVKaRjCUpcrOXRalet86/OpG4kqw==
+
+"@types/promise-retry@^1.1.3":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@types/promise-retry/-/promise-retry-1.1.3.tgz#baab427419da9088a1d2f21bf56249c21b3dd43c"
+ integrity sha512-LxIlEpEX6frE3co3vCO2EUJfHIta1IOmhDlcAsR4GMMv9hev1iTI9VwberVGkePJAuLZs5rMucrV8CziCfuJMw==
+ dependencies:
+ "@types/retry" "*"
+
+"@types/retry@*":
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d"
+ integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==
+
+"@types/stack-utils@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff"
+ integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==
+
+"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
+ integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==
+
+"@types/uuid@^8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.0.tgz#215c231dff736d5ba92410e6d602050cce7e273f"
+ integrity sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==
+
+"@types/yargs-parser@*":
+ version "20.2.0"
+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9"
+ integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==
+
+"@types/yargs@^15.0.0":
+ version "15.0.13"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.13.tgz#34f7fec8b389d7f3c1fd08026a5763e072d3c6dc"
+ integrity sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==
+ dependencies:
+ "@types/yargs-parser" "*"
+
+"@typescript-eslint/eslint-plugin@^4.14.2", "@typescript-eslint/eslint-plugin@^4.15.1":
+ version "4.15.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.1.tgz#835f64aa0a403e5e9e64c10ceaf8d05c3f015180"
+ integrity sha512-yW2epMYZSpNJXZy22Biu+fLdTG8Mn6b22kR3TqblVk50HGNV8Zya15WAXuQCr8tKw4Qf1BL4QtI6kv6PCkLoJw==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "4.15.1"
+ "@typescript-eslint/scope-manager" "4.15.1"
+ 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.15.1", "@typescript-eslint/experimental-utils@^4.0.1":
+ version "4.15.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.1.tgz#d744d1ac40570a84b447f7aa1b526368afd17eec"
+ integrity sha512-9LQRmOzBRI1iOdJorr4jEnQhadxK4c9R2aEAsm7WE/7dq8wkKD1suaV0S/JucTL8QlYUPU1y2yjqg+aGC0IQBQ==
+ dependencies:
+ "@types/json-schema" "^7.0.3"
+ "@typescript-eslint/scope-manager" "4.15.1"
+ "@typescript-eslint/types" "4.15.1"
+ "@typescript-eslint/typescript-estree" "4.15.1"
+ eslint-scope "^5.0.0"
+ eslint-utils "^2.0.0"
+
+"@typescript-eslint/experimental-utils@^2.32.0":
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f"
+ integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==
+ dependencies:
+ "@types/json-schema" "^7.0.3"
+ "@typescript-eslint/typescript-estree" "2.34.0"
+ eslint-scope "^5.0.0"
+ eslint-utils "^2.0.0"
+
+"@typescript-eslint/experimental-utils@^3.10.1":
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686"
+ integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==
+ dependencies:
+ "@types/json-schema" "^7.0.3"
+ "@typescript-eslint/types" "3.10.1"
+ "@typescript-eslint/typescript-estree" "3.10.1"
+ eslint-scope "^5.0.0"
+ eslint-utils "^2.0.0"
+
+"@typescript-eslint/parser@^4.14.2", "@typescript-eslint/parser@^4.15.1":
+ version "4.15.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.15.1.tgz#4c91a0602733db63507e1dbf13187d6c71a153c4"
+ integrity sha512-V8eXYxNJ9QmXi5ETDguB7O9diAXlIyS+e3xzLoP/oVE4WCAjssxLIa0mqCLsCGXulYJUfT+GV70Jv1vHsdKwtA==
+ dependencies:
+ "@typescript-eslint/scope-manager" "4.15.1"
+ "@typescript-eslint/types" "4.15.1"
+ "@typescript-eslint/typescript-estree" "4.15.1"
+ debug "^4.1.1"
+
+"@typescript-eslint/scope-manager@4.15.1":
+ version "4.15.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.15.1.tgz#f6511eb38def2a8a6be600c530c243bbb56ac135"
+ integrity sha512-ibQrTFcAm7yG4C1iwpIYK7vDnFg+fKaZVfvyOm3sNsGAerKfwPVFtYft5EbjzByDJ4dj1WD8/34REJfw/9wdVA==
+ dependencies:
+ "@typescript-eslint/types" "4.15.1"
+ "@typescript-eslint/visitor-keys" "4.15.1"
+
+"@typescript-eslint/types@3.10.1":
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727"
+ integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==
+
+"@typescript-eslint/types@4.15.1":
+ version "4.15.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.15.1.tgz#da702f544ef1afae4bc98da699eaecd49cf31c8c"
+ integrity sha512-iGsaUyWFyLz0mHfXhX4zO6P7O3sExQpBJ2dgXB0G5g/8PRVfBBsmQIc3r83ranEQTALLR3Vko/fnCIVqmH+mPw==
+
+"@typescript-eslint/typescript-estree@2.34.0":
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5"
+ integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==
+ dependencies:
+ debug "^4.1.1"
+ eslint-visitor-keys "^1.1.0"
+ glob "^7.1.6"
+ is-glob "^4.0.1"
+ lodash "^4.17.15"
+ semver "^7.3.2"
+ tsutils "^3.17.1"
+
+"@typescript-eslint/typescript-estree@3.10.1":
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853"
+ integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==
+ dependencies:
+ "@typescript-eslint/types" "3.10.1"
+ "@typescript-eslint/visitor-keys" "3.10.1"
+ debug "^4.1.1"
+ glob "^7.1.6"
+ is-glob "^4.0.1"
+ lodash "^4.17.15"
+ semver "^7.3.2"
+ tsutils "^3.17.1"
+
+"@typescript-eslint/typescript-estree@4.15.1":
+ version "4.15.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.1.tgz#fa9a9ff88b4a04d901ddbe5b248bc0a00cd610be"
+ integrity sha512-z8MN3CicTEumrWAEB2e2CcoZa3KP9+SMYLIA2aM49XW3cWIaiVSOAGq30ffR5XHxRirqE90fgLw3e6WmNx5uNw==
+ dependencies:
+ "@typescript-eslint/types" "4.15.1"
+ "@typescript-eslint/visitor-keys" "4.15.1"
+ 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@3.10.1":
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931"
+ integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
+"@typescript-eslint/visitor-keys@4.15.1":
+ version "4.15.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.1.tgz#c76abbf2a3be8a70ed760f0e5756bf62de5865dd"
+ integrity sha512-tYzaTP9plooRJY8eNlpAewTOqtWW/4ff/5wBjNVaJ0S0wC4Gpq/zDVRTJa5bq2v1pCNQ08xxMCndcvR+h7lMww==
+ dependencies:
+ "@typescript-eslint/types" "4.15.1"
+ eslint-visitor-keys "^2.0.0"
+
+"@zeit/ncc@^0.22.3":
+ version "0.22.3"
+ resolved "https://registry.yarnpkg.com/@zeit/ncc/-/ncc-0.22.3.tgz#fca6b86b4454ce7a7e1e7e755165ec06457f16cd"
+ integrity sha512-jnCLpLXWuw/PAiJiVbLjA8WBC0IJQbFeUwF4I9M+23MvIxTxk5pD4Q8byQBSPmHQjz5aBoA7AKAElQxMpjrCLQ==
+
+abab@^2.0.3:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
+ integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
+
+acorn-globals@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
+ integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==
+ dependencies:
+ acorn "^7.1.1"
+ acorn-walk "^7.1.1"
+
+acorn-jsx@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
+ integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
+
+acorn-walk@^7.1.1:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
+ integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
+
+acorn@^7.1.1, acorn@^7.4.0:
+ version "7.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+ integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+
+adverb-where@0.0.9:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/adverb-where/-/adverb-where-0.0.9.tgz#09c5cddd8d503b9fe5f76e0b8dc5c70a8f193e34"
+ integrity sha1-CcXN3Y1QO5/l924LjcXHCo8ZPjQ=
+
+adverb-where@^0.2.1:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/adverb-where/-/adverb-where-0.2.2.tgz#54dadca0652114e339cc12ecfa7b40547cf2fe1b"
+ integrity sha512-hZPUFSgljaJnzQQXqc4GCEVSxmyhBkLgf/DyeW7F068PdRE9PervS4LmftJWWSPfTpaEhpJebx3eP7D9slBjSw==
+
+ajv-keywords@^1.0.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
+ integrity sha1-MU3QpLM2j609/NxU7eYXG4htrzw=
+
+ajv@^4.7.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
+ integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=
+ dependencies:
+ co "^4.6.0"
+ json-stable-stringify "^1.0.1"
+
+ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4:
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ajv@^7.0.2:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.1.1.tgz#1e6b37a454021fa9941713f38b952fc1c8d32a84"
+ integrity sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+ uri-js "^4.2.2"
+
+alex@^9.0.1:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/alex/-/alex-9.1.0.tgz#bc54b305c3e05d87085cca3af4376314be0dbeee"
+ integrity sha512-mlNQ0CBGinzZj1pjiXaSLsihjZ4Kzq0U0EjR+DrZ3IQQfM4pf4OtxHI1agBIiEwv0tQUzimjgTk+5t9iHeT7Vw==
+ dependencies:
+ meow "^7.0.0"
+ rehype-parse "^7.0.0"
+ rehype-retext "^2.0.1"
+ remark-frontmatter "^2.0.0"
+ remark-mdx "^2.0.0-next.7"
+ remark-message-control "^6.0.0"
+ remark-parse "^8.0.0"
+ remark-retext "^4.0.0"
+ retext-english "^3.0.0"
+ retext-equality "~5.5.0"
+ retext-profanities "~6.1.0"
+ unified "^9.0.0"
+ unified-diff "^3.0.0"
+ unified-engine "^8.0.0"
+ update-notifier "^4.0.0"
+ vfile "^4.0.0"
+ vfile-reporter "^6.0.0"
+ vfile-sort "^2.0.0"
+
+ansi-align@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb"
+ integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==
+ dependencies:
+ string-width "^3.0.0"
+
+ansi-colors@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
+ integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
+
+ansi-escapes@^4.2.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
+ integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==
+ dependencies:
+ type-fest "^0.11.0"
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-regex@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+ integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-regex@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
+ integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+anymatch@^3.0.3:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
+ integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+aria-query@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b"
+ integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==
+ dependencies:
+ "@babel/runtime" "^7.10.2"
+ "@babel/runtime-corejs3" "^7.10.2"
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-includes@^3.1.1, array-includes@^3.1.2:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a"
+ integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.2"
+ get-intrinsic "^1.1.1"
+ is-string "^1.0.5"
+
+array-iterate@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/array-iterate/-/array-iterate-1.1.4.tgz#add1522e9dd9749bb41152d08b845bd08d6af8b7"
+ integrity sha512-sNRaPGh9nnmdC8Zf+pT3UqP8rnWj5Hf9wiFGsX3wUQ2yVSIhO2ShFwCoceIPpB41QF6i2OEmrHmCo36xronCVA==
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+array.prototype.flat@^1.2.3:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123"
+ integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.1"
+
+array.prototype.flatmap@^1.2.3:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9"
+ integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.1"
+ function-bind "^1.1.1"
+
+arrify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+arrify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
+ integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
+
+asn1@~0.2.3:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+ dependencies:
+ safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+ast-metadata-inferer@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/ast-metadata-inferer/-/ast-metadata-inferer-0.4.0.tgz#6be85ceeffcf267bd79db8e1ae731da44880b45f"
+ integrity sha512-tKHdBe8N/Vq2nLAm4YPBVREVZjMux6KrqyPfNQgIbDl0t7HaNSmy8w4OyVHYg/cvyn5BW7o7pVwpjPte89Zhcg==
+
+ast-types-flow@^0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
+ integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
+
+astral-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
+ integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+
+asynckit@^0.4.0:
+ version "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"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+
+aws4@^1.8.0:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
+ integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
+
+axe-core@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.1.2.tgz#7cf783331320098bfbef620df3b3c770147bc224"
+ integrity sha512-V+Nq70NxKhYt89ArVcaNL9FDryB3vQOd+BFXZIfO3RP6rwtj+2yqqqdHEkacutglPaZLkJeuXKCjCJDMGPtPqg==
+
+axobject-query@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be"
+ integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==
+
+babel-jest@^26.6.3:
+ version "26.6.3"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056"
+ integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==
+ dependencies:
+ "@jest/transform" "^26.6.2"
+ "@jest/types" "^26.6.2"
+ "@types/babel__core" "^7.1.7"
+ babel-plugin-istanbul "^6.0.0"
+ babel-preset-jest "^26.6.2"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.4"
+ slash "^3.0.0"
+
+babel-plugin-emotion@^10.0.27:
+ version "10.2.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz#a1fe3503cff80abfd0bdda14abd2e8e57a79d17d"
+ integrity sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@emotion/hash" "0.8.0"
+ "@emotion/memoize" "0.7.4"
+ "@emotion/serialize" "^0.11.16"
+ babel-plugin-macros "^2.0.0"
+ babel-plugin-syntax-jsx "^6.18.0"
+ convert-source-map "^1.5.0"
+ escape-string-regexp "^1.0.5"
+ find-root "^1.1.0"
+ source-map "^0.5.7"
+
+babel-plugin-istanbul@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765"
+ integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@istanbuljs/load-nyc-config" "^1.0.0"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-instrument "^4.0.0"
+ test-exclude "^6.0.0"
+
+babel-plugin-jest-hoist@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d"
+ integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==
+ dependencies:
+ "@babel/template" "^7.3.3"
+ "@babel/types" "^7.3.3"
+ "@types/babel__core" "^7.0.0"
+ "@types/babel__traverse" "^7.0.6"
+
+babel-plugin-macros@^2.0.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138"
+ integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ cosmiconfig "^6.0.0"
+ resolve "^1.12.0"
+
+babel-plugin-syntax-jsx@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
+ integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=
+
+babel-preset-current-node-syntax@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b"
+ integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==
+ dependencies:
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+ "@babel/plugin-syntax-bigint" "^7.8.3"
+ "@babel/plugin-syntax-class-properties" "^7.8.3"
+ "@babel/plugin-syntax-import-meta" "^7.8.3"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-syntax-numeric-separator" "^7.8.3"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+ "@babel/plugin-syntax-top-level-await" "^7.8.3"
+
+babel-preset-jest@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee"
+ integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==
+ dependencies:
+ babel-plugin-jest-hoist "^26.6.2"
+ babel-preset-current-node-syntax "^1.0.0"
+
+bail@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776"
+ integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+before-after-hook@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.1.tgz#99ae36992b5cfab4a83f6bee74ab27835f28f405"
+ integrity sha512-5ekuQOvO04MDj7kYZJaMab2S8SPjGJbotVNyv7QYFCOAwrGZs/YnoDNlh1U+m5hl7H2D/+n0taaAV/tfyd3KMA==
+
+bluebird@^3.4.7, bluebird@^3.5.1:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+bottleneck@^2.15.3:
+ version "2.19.5"
+ resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91"
+ integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==
+
+boundary@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/boundary/-/boundary-1.0.1.tgz#4d67dc2602c0cc16dd9bce7ebf87e948290f5812"
+ integrity sha1-TWfcJgLAzBbdm85+v4fpSCkPWBI=
+
+boxen@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64"
+ integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==
+ dependencies:
+ ansi-align "^3.0.0"
+ camelcase "^5.3.1"
+ chalk "^3.0.0"
+ cli-boxes "^2.2.0"
+ string-width "^4.1.0"
+ term-size "^2.1.0"
+ type-fest "^0.8.1"
+ widest-line "^3.1.0"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+braces@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+browser-process-hrtime@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
+ integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
+
+browserslist@^4.12.2:
+ version "4.16.3"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717"
+ integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==
+ dependencies:
+ caniuse-lite "^1.0.30001181"
+ colorette "^1.2.1"
+ electron-to-chromium "^1.3.649"
+ escalade "^3.1.1"
+ node-releases "^1.1.70"
+
+bs-logger@0.x:
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8"
+ integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==
+ dependencies:
+ fast-json-stable-stringify "2.x"
+
+bser@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+ integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
+ dependencies:
+ node-int64 "^0.4.0"
+
+bubble-stream-error@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/bubble-stream-error/-/bubble-stream-error-1.0.0.tgz#7dad97f17128da396169bf37ada4acb195361e30"
+ integrity sha1-fa2X8XEo2jlhab83raSssZU2HjA=
+ dependencies:
+ once "^1.3.3"
+ sliced "^1.0.1"
+
+bubble-stream-error@~0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/bubble-stream-error/-/bubble-stream-error-0.0.1.tgz#55eb86846ecf26605e896aa2f1a31b3c9dcccb62"
+ integrity sha1-VeuGhG7PJmBeiWqi8aMbPJ3My2I=
+
+buffer-from@1.x, buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+cacheable-request@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912"
+ integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==
+ dependencies:
+ clone-response "^1.0.2"
+ get-stream "^5.1.0"
+ http-cache-semantics "^4.0.0"
+ keyv "^3.0.0"
+ lowercase-keys "^2.0.0"
+ normalize-url "^4.1.0"
+ responselike "^1.0.2"
+
+call-bind@^1.0.0, call-bind@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
+ integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+ dependencies:
+ function-bind "^1.1.1"
+ get-intrinsic "^1.0.2"
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase-keys@^6.2.2:
+ version "6.2.2"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0"
+ integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==
+ dependencies:
+ camelcase "^5.3.1"
+ map-obj "^4.0.0"
+ quick-lru "^4.0.1"
+
+camelcase@^5.0.0, camelcase@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+camelcase@^6.0.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"
+ integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
+
+caniuse-lite@^1.0.30001166, caniuse-lite@^1.0.30001181:
+ version "1.0.30001191"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001191.tgz#bacb432b6701f690c8c5f7c680166b9a9f0843d9"
+ integrity sha512-xJJqzyd+7GCJXkcoBiQ1GuxEiOBCLQ0aVW9HMekifZsAVGdj5eJ4mFB9fEhSHipq9IOk/QXFJUiIr9lZT+EsGw==
+
+capture-exit@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
+ integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==
+ dependencies:
+ rsvp "^4.8.4"
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+
+ccount@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043"
+ integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==
+
+chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chalk@^2.0.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ 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"
+ integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+char-regex@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
+ integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
+
+character-entities-html4@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125"
+ integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==
+
+character-entities-legacy@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1"
+ integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==
+
+character-entities@^1.0.0:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b"
+ integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==
+
+character-reference-invalid@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560"
+ integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==
+
+charenc@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
+ integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=
+
+ci-info@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+ integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+
+cities-list@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/cities-list/-/cities-list-1.0.3.tgz#cb217d19ea1f355fc833d173a752ad9992f1240c"
+ integrity sha1-yyF9GeofNV/IM9Fzp1KtmZLxJAw=
+
+cjs-module-lexer@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f"
+ integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+clean-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/clean-regexp/-/clean-regexp-1.0.0.tgz#8df7c7aae51fd36874e8f8d05b9180bc11a3fed7"
+ integrity sha1-jffHquUf02h06PjQW5GAvBGj/tc=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+cli-boxes@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"
+ integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==
+
+cli-color@~0.1.6:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-0.1.7.tgz#adc3200fa471cc211b0da7f566b71e98b9d67347"
+ integrity sha1-rcMgD6RxzCEbDaf1ZrcemLnWc0c=
+ dependencies:
+ es5-ext "0.8.x"
+
+cliui@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
+ integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^6.2.0"
+
+clone-regexp@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-1.0.1.tgz#051805cd33173375d82118fc0918606da39fd60f"
+ integrity sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw==
+ dependencies:
+ is-regexp "^1.0.0"
+ is-supported-regexp-flag "^1.0.0"
+
+clone-response@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
+ integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=
+ dependencies:
+ mimic-response "^1.0.0"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collapse-white-space@^1.0.2:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287"
+ integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==
+
+collect-v8-coverage@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"
+ integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+colorette@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
+ integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
+
+combined-stream@^1.0.6, combined-stream@~1.0.6:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+comma-separated-tokens@^1.0.0:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea"
+ integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==
+
+commander@^2.19.0:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+comment-parser@1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.1.2.tgz#e5317d7a2ec22b470dcb54a29b25426c30bf39d8"
+ integrity sha512-AOdq0i8ghZudnYv8RUnHrhTgafUGs61Rdz9jemU5x2lnZwAWyOq7vySo626K59e1fVKH1xSRorJwPVRLSWOoAQ==
+
+component-emitter@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@^1.5.2, concat-stream@^1.6.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+concat-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1"
+ integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^3.0.2"
+ typedarray "^0.0.6"
+
+configstore@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96"
+ integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==
+ dependencies:
+ dot-prop "^5.2.0"
+ graceful-fs "^4.1.2"
+ make-dir "^3.0.0"
+ unique-string "^2.0.0"
+ write-file-atomic "^3.0.0"
+ xdg-basedir "^4.0.0"
+
+confusing-browser-globals@^1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59"
+ integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==
+
+contains-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+ integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
+
+convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
+ integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
+ dependencies:
+ safe-buffer "~5.1.1"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-js-pure@^3.0.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.9.0.tgz#326cc74e1fef8b7443a6a793ddb0adfcd81f9efb"
+ integrity sha512-3pEcmMZC9Cq0D4ZBh3pe2HLtqxpGNJBLXF/kZ2YzK17RbKp94w0HFbdbSx8H8kAlZG5k76hvLrkPm57Uyef+kg==
+
+core-js@^3.6.5:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.9.0.tgz#790b1bb11553a2272b36e2625c7179db345492f8"
+ integrity sha512-PyFBJaLq93FlyYdsndE5VaueA9K5cNB7CGzeCj191YYLhkQM0gdZR2SKihM70oF0wdqKSKClv/tEBOpoRmdOVQ==
+
+core-util-is@1.0.2, core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cosmiconfig@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
+ integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==
+ dependencies:
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.1.0"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.7.2"
+
+cosmiconfig@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3"
+ integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==
+ dependencies:
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.2.1"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.10.0"
+
+cross-spawn@^6.0.0:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cross-spawn@^7.0.0, cross-spawn@^7.0.2:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+crypt@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
+ integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=
+
+crypto-random-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
+ integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
+
+cssom@^0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"
+ integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==
+
+cssom@~0.3.6:
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+ integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+
+cssstyle@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
+ integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
+ dependencies:
+ cssom "~0.3.6"
+
+csstype@^2.5.7:
+ version "2.6.15"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.15.tgz#655901663db1d652f10cb57ac6af5a05972aea1f"
+ integrity sha512-FNeiVKudquehtR3t9TRRnsHL+lJhuHF5Zn9dt01jpojlurLEPDhhEtUkWmAUJ7/fOLaLG4dCDEnUsR0N1rZSsg==
+
+cuss@^1.15.0:
+ version "1.21.0"
+ resolved "https://registry.yarnpkg.com/cuss/-/cuss-1.21.0.tgz#1aba3bb911fadda8566855ed036295af8116be40"
+ integrity sha512-X3VvImImJ5q6w0wOgJtxAX+RC06d26egp/A/vdSxqOrsRtAA9biXAkc4PZGj/3gx0+z+gDFri6BpcpwuG1/UEw==
+
+damerau-levenshtein@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791"
+ integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+data-urls@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
+ integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==
+ dependencies:
+ abab "^2.0.3"
+ whatwg-mimetype "^2.3.0"
+ whatwg-url "^8.0.0"
+
+debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
+ integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
+ dependencies:
+ ms "2.1.2"
+
+decamelize-keys@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
+ integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=
+ dependencies:
+ decamelize "^1.1.0"
+ map-obj "^1.0.0"
+
+decamelize@^1.1.0, decamelize@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decimal.js@^10.2.0:
+ version "10.2.1"
+ resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3"
+ integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+decompress-response@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
+ integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=
+ dependencies:
+ mimic-response "^1.0.0"
+
+dedent@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+ integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
+
+deep-equal@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
+ integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==
+ dependencies:
+ is-arguments "^1.0.4"
+ is-date-object "^1.0.1"
+ is-regex "^1.0.4"
+ object-is "^1.0.1"
+ object-keys "^1.1.1"
+ regexp.prototype.flags "^1.2.0"
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deep-is@^0.1.3, deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
+deepmerge@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
+ integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
+
+defer-to-connect@^1.0.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
+ integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
+
+define-properties@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+delayed-stream@~1.0.0:
+ version "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==
+
+detect-newline@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
+ integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
+
+diff-sequences@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1"
+ integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==
+
+diff@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
+ integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
+
+difflib@~0.2.1:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e"
+ integrity sha1-teMDYabbAjF21WKJLbhZQKcY9H4=
+ dependencies:
+ heap ">= 0.2.0"
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+doctrine@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+ integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+ dependencies:
+ esutils "^2.0.2"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+dom-accessibility-api@^0.5.4:
+ version "0.5.4"
+ resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.4.tgz#b06d059cdd4a4ad9a79275f9d414a5c126241166"
+ integrity sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ==
+
+domexception@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"
+ integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==
+ dependencies:
+ webidl-conversions "^5.0.0"
+
+dot-prop@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"
+ integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==
+ dependencies:
+ is-obj "^2.0.0"
+
+dreamopt@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/dreamopt/-/dreamopt-0.6.0.tgz#d813ccdac8d39d8ad526775514a13dda664d6b4b"
+ integrity sha1-2BPM2sjTnYrVJndVFKE92mZNa0s=
+ dependencies:
+ wordwrap ">=0.0.2"
+
+duplexer3@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
+ integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
+
+duplexer@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
+ integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
+
+e-prime@^0.10.2, e-prime@^0.10.4:
+ version "0.10.4"
+ resolved "https://registry.yarnpkg.com/e-prime/-/e-prime-0.10.4.tgz#562f56a50f0def8a6c7a73069fff42b035e569d7"
+ integrity sha512-tzBmM2mFSnAq5BuxPSyin6qXb3yMe1wufJN7L7ZPcEWS5S+jI2dhKQEoqHVEcSMMXo/j5lcWpX5jzA6wLSmX6w==
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
+electron-to-chromium@^1.3.649:
+ version "1.3.671"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.671.tgz#8feaed6eae42d279fa4611f58c42a5a1eb81b2a0"
+ integrity sha512-RTD97QkdrJKaKwRv9h/wGAaoR2lGxNXEcBXS31vjitgTPwTWAbLdS7cEsBK68eEQy7p6YyT8D5BxBEYHu2SuwQ==
+
+emittery@^0.7.1:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82"
+ integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==
+
+emoji-regex@^7.0.1:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+ integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emoji-regex@^9.0.0:
+ version "9.2.1"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.1.tgz#c9b25604256bb3428964bead3ab63069d736f7ee"
+ integrity sha512-117l1H6U4X3Krn+MrzYrL57d5H7siRHWraBs7s+LjRuFK7Fe7hJqnJ0skWlinqsycVLU5YAo6L8CsEYQ0V5prg==
+
+en-inflectors@^1.0.7:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/en-inflectors/-/en-inflectors-1.0.12.tgz#fd334776608a021cb4202157f20d52ab934af78a"
+ integrity sha1-/TNHdmCKAhy0ICFX8g1Sq5NK94o=
+ dependencies:
+ en-stemmer "^1.0.2"
+
+en-lexicon@^1.0.11, en-lexicon@^1.0.8:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/en-lexicon/-/en-lexicon-1.0.11.tgz#3f4da8a9cca9a906f510b8ece11631be3fd1105f"
+ integrity sha1-P02oqcypqQb1ELjs4RYxvj/REF8=
+ dependencies:
+ en-inflectors "^1.0.7"
+
+en-pos@^1.0.16:
+ version "1.0.16"
+ resolved "https://registry.yarnpkg.com/en-pos/-/en-pos-1.0.16.tgz#5b6ee67eed52a8e11267f3d15fa7501101123fb0"
+ integrity sha1-W27mfu1SqOESZ/PRX6dQEQESP7A=
+ dependencies:
+ cities-list "^1.0.3"
+ en-inflectors "^1.0.7"
+ en-lexicon "^1.0.8"
+ humannames "^1.0.5"
+
+en-stemmer@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/en-stemmer/-/en-stemmer-1.0.3.tgz#2d22fb5db9005a88d6fc58026b38a831c8bc7c19"
+ integrity sha1-LSL7XbkAWojW/FgCazioMci8fBk=
+
+end-of-stream@^1.1.0:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+english-article-classifier@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/english-article-classifier/-/english-article-classifier-1.0.1.tgz#ea7f9f1b55484508afff3df7aef7f339b7d9f40e"
+ integrity sha512-zRLN5xoinT3yQf8gzlkroaAlh7KJAWKq5AC4uF8jaD8DWnlFHEnsPTa6SfnYjlW+/joP/YzwyIjHhiFnOdZ4Jg==
+
+enquirer@^2.3.5:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
+ integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
+ dependencies:
+ ansi-colors "^4.1.1"
+
+err-code@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960"
+ integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=
+
+error-ex@^1.2.0, error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2:
+ version "1.18.0-next.2"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2"
+ integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==
+ dependencies:
+ call-bind "^1.0.2"
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ get-intrinsic "^1.0.2"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+ is-callable "^1.2.2"
+ is-negative-zero "^2.0.1"
+ is-regex "^1.1.1"
+ object-inspect "^1.9.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.2"
+ string.prototype.trimend "^1.0.3"
+ string.prototype.trimstart "^1.0.3"
+
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+es5-ext@0.8.x:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab"
+ integrity sha1-q6jZ4ZQ6iVrJaDemKjmz9V7NlKs=
+
+escalade@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+escape-goat@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675"
+ integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+escape-string-regexp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
+ integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
+
+escodegen@^1.14.1:
+ version "1.14.3"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
+ integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
+ dependencies:
+ esprima "^4.0.1"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
+
+eslint-import-resolver-node@^0.3.4:
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717"
+ integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==
+ dependencies:
+ debug "^2.6.9"
+ resolve "^1.13.1"
+
+eslint-mdx@^1.8.2:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/eslint-mdx/-/eslint-mdx-1.8.2.tgz#06cda4a771e7f1f1d79f63d2a478994988b3e1b2"
+ integrity sha512-j7mkBFr7zHLaiqGu+iWker9qwWfti29xUAuUDDad95l+H189R4++dsuSUB6u19wy6CCuspIt5I6katzbpRbbMw==
+ dependencies:
+ espree "^7.2.0"
+ remark-mdx "^1.6.16"
+ remark-parse "^8.0.3"
+ tslib "^2.0.1"
+ unified "^9.1.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"
+ integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==
+ dependencies:
+ debug "^2.6.9"
+ pkg-dir "^2.0.0"
+
+eslint-plugin-babel@^5.3.0:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-5.3.1.tgz#75a2413ffbf17e7be57458301c60291f2cfbf560"
+ integrity sha512-VsQEr6NH3dj664+EyxJwO4FCYm/00JhYb3Sk3ft8o+fpKuIfQ9TaW6uVUfvwMXHcf/lsnRIoyFPsLMyiWCSL/g==
+ dependencies:
+ eslint-rule-composer "^0.3.0"
+
+eslint-plugin-compat@^3.9.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-compat/-/eslint-plugin-compat-3.9.0.tgz#a7a224e09b102b58e7f7dff52c936428ff3e0186"
+ integrity sha512-lt3l5PHFHVEYSZ5zijcoYvtQJPsBifRiH5N0Et57KwVu7l/yxmHhSG6VJiLMa/lXrg93Qu8049RNQOMn0+yJBg==
+ dependencies:
+ "@mdn/browser-compat-data" "^2.0.7"
+ ast-metadata-inferer "^0.4.0"
+ browserslist "^4.12.2"
+ caniuse-lite "^1.0.30001166"
+ core-js "^3.6.5"
+ find-up "^4.1.0"
+ lodash.memoize "4.1.2"
+ semver "7.3.2"
+
+eslint-plugin-cypress@^2.11.2:
+ version "2.11.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-2.11.2.tgz#a8f3fe7ec840f55e4cea37671f93293e6c3e76a0"
+ integrity sha512-1SergF1sGbVhsf7MYfOLiBhdOg6wqyeV9pXUAIDIffYTGMN3dTBQS9nFAzhLsHhO+Bn0GaVM1Ecm71XUidQ7VA==
+ dependencies:
+ globals "^11.12.0"
+
+eslint-plugin-es@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893"
+ integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==
+ dependencies:
+ eslint-utils "^2.0.0"
+ regexpp "^3.0.0"
+
+eslint-plugin-eslint-comments@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz#9e1cd7b4413526abb313933071d7aba05ca12ffa"
+ integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ ignore "^5.0.5"
+
+eslint-plugin-import@^2.22.1:
+ version "2.22.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702"
+ integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==
+ dependencies:
+ array-includes "^3.1.1"
+ array.prototype.flat "^1.2.3"
+ contains-path "^0.1.0"
+ debug "^2.6.9"
+ doctrine "1.5.0"
+ eslint-import-resolver-node "^0.3.4"
+ eslint-module-utils "^2.6.0"
+ has "^1.0.3"
+ minimatch "^3.0.4"
+ object.values "^1.1.1"
+ read-pkg-up "^2.0.0"
+ resolve "^1.17.0"
+ tsconfig-paths "^3.9.0"
+
+eslint-plugin-jest-async@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jest-async/-/eslint-plugin-jest-async-1.0.3.tgz#69196702d8af85655b21a789a6fd75ca0a37800f"
+ integrity sha1-aRlnAtivhWVbIaeJpv11ygo3gA8=
+ dependencies:
+ requireindex "~1.1.0"
+
+eslint-plugin-jest-dom@^3.6.5:
+ version "3.6.5"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-3.6.5.tgz#61459d1db52873d438983d3aa84aaa9804eff222"
+ integrity sha512-iaJ5aSQghp9u2ciLAseWIVu7X5tW+WwNJwMBDToK4GBfwGXXQJDLt5IBNtm6fHvC3FRzCGwvyNMIG1g5gF+icQ==
+ dependencies:
+ "@babel/runtime" "^7.9.6"
+ "@testing-library/dom" "^7.28.1"
+ requireindex "^1.2.0"
+
+eslint-plugin-jest-formatting@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jest-formatting/-/eslint-plugin-jest-formatting-2.0.1.tgz#8f4297bf5b6c2cdd9b2c20a57892f0302b52c20a"
+ integrity sha512-t6oc6GcXqzQ4lwatnVoKxGTLqo8kFIdA5kpaS3mrkwnTNxhsgFo9reMFdrtNtllx72ohNUsXsay7RJR/LLLk3Q==
+
+eslint-plugin-jest@^24.1.3, eslint-plugin-jest@^24.1.5:
+ version "24.1.5"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.1.5.tgz#1e866a9f0deac587d0a3d5d7cefe99815a580de2"
+ integrity sha512-FIP3lwC8EzEG+rOs1y96cOJmMVpdFNreoDJv29B5vIupVssRi8zrSY3QadogT0K3h1Y8TMxJ6ZSAzYUmFCp2hg==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "^4.0.1"
+
+eslint-plugin-jsdoc@^32.0.0:
+ version "32.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-32.1.0.tgz#30ba4d7b7e5fa00ebb3b980c66d6478f68ccc226"
+ integrity sha512-nCdKF8QQvAZ6RsnNoEK4kPF0aD9E6XURdjLx88oIqF+txmPNXAo2rNvu2WwV77R78vnhAGJkeOgmxmYdRRpgaQ==
+ dependencies:
+ comment-parser "1.1.2"
+ debug "^4.3.1"
+ jsdoctypeparser "^9.0.0"
+ lodash "^4.17.20"
+ regextras "^0.7.1"
+ semver "^7.3.4"
+ spdx-expression-parse "^3.0.1"
+
+eslint-plugin-json@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-json/-/eslint-plugin-json-2.1.2.tgz#5bc1c221984583c0c5ff21c488386e8263a6bbb7"
+ integrity sha512-isM/fsUxS4wN1+nLsWoV5T4gLgBQnsql3nMTr8u+cEls1bL8rRQO5CP5GtxJxaOfbcKqnz401styw+H/P+e78Q==
+ dependencies:
+ lodash "^4.17.19"
+ vscode-json-languageservice "^3.7.0"
+
+eslint-plugin-jsx-a11y@^6.4.1:
+ version "6.4.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd"
+ integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==
+ dependencies:
+ "@babel/runtime" "^7.11.2"
+ aria-query "^4.2.2"
+ array-includes "^3.1.1"
+ ast-types-flow "^0.0.7"
+ axe-core "^4.0.2"
+ axobject-query "^2.2.0"
+ damerau-levenshtein "^1.0.6"
+ emoji-regex "^9.0.0"
+ has "^1.0.3"
+ jsx-ast-utils "^3.1.0"
+ language-tags "^1.0.5"
+
+eslint-plugin-markdown@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-markdown/-/eslint-plugin-markdown-2.0.0.tgz#cd650beda2b599cd9e4535ea369266b5d0e49d23"
+ integrity sha512-zt10JoexHeJFMTE5egDcetAJ34bn5k/92s0wAuRZfhDAyI0ryEj+O91JL2CbBExajie6BE5L63y47dN1Sbp6mQ==
+ dependencies:
+ remark-parse "^5.0.0"
+ unified "^6.1.2"
+
+eslint-plugin-mdx@^1.8.2:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-mdx/-/eslint-plugin-mdx-1.8.2.tgz#61fc4552329a38d352769c89bb2f0cf3c5eee8f0"
+ integrity sha512-fKkhsR1cTCHQUVcoguUmOohMo87297/H1Z0Zye3GF4ivvxcpX8fboLILLR2Em76QV8RrjP4sxrgBuOA9rBIumw==
+ dependencies:
+ cosmiconfig "^7.0.0"
+ eslint-mdx "^1.8.2"
+ eslint-plugin-react "^7.20.6"
+ remark-mdx "^1.6.16"
+ remark-parse "^8.0.3"
+ remark-stringify "^8.1.1"
+ tslib "^2.0.1"
+ unified "^9.1.0"
+ vfile "^4.1.1"
+ optionalDependencies:
+ rebass "^4.0.7"
+
+eslint-plugin-no-loops@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-no-loops/-/eslint-plugin-no-loops-0.3.0.tgz#e81fecb4eaaf494a926d9caba9a7cd84d1fede7d"
+ integrity sha1-6B/stOqvSUqSbZyrqafNhNH+3n0=
+
+eslint-plugin-no-secrets@^0.7.0:
+ version "0.7.9"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-no-secrets/-/eslint-plugin-no-secrets-0.7.9.tgz#f5658adb8ebd9653ae7ae2eb7ebf26b909e63f65"
+ integrity sha512-6gptwSr864TkKPOmk2f5tR3RoaBrMMbObLCDyqBS+Q4/KCv7iwPrh9mM946WHNenLfAuzLlTLCukNM6TxdiVng==
+
+eslint-plugin-node@^11.1.0:
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d"
+ integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==
+ dependencies:
+ eslint-plugin-es "^3.0.0"
+ eslint-utils "^2.0.0"
+ ignore "^5.1.1"
+ minimatch "^3.0.4"
+ resolve "^1.10.1"
+ semver "^6.1.0"
+
+eslint-plugin-optimize-regex@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-optimize-regex/-/eslint-plugin-optimize-regex-1.2.0.tgz#c13bd6c716cce4c5001ee8b7af073f2e0609e030"
+ integrity sha512-pzpF7bGsdXVPue/ubLqS0UbBGuBajxh2fO8OmBDoN0SHrxEBKf8WOAxkOI80lBb81yiZs7hj6ZxlflbrV3YrsA==
+ dependencies:
+ regexp-tree "^0.1.20"
+
+eslint-plugin-prefer-object-spread@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-prefer-object-spread/-/eslint-plugin-prefer-object-spread-1.2.1.tgz#27fb91853690cceb3ae6101d9c8aecc6a67a402c"
+ integrity sha1-J/uRhTaQzOs65hAdnIrsxqZ6QCw=
+
+eslint-plugin-promise@^4.2.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz#61485df2a359e03149fdafc0a68b0e030ad2ac45"
+ integrity sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==
+
+eslint-plugin-radar@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-radar/-/eslint-plugin-radar-0.2.1.tgz#5b5e696f0df1c1aacf26b6cb1b708d862659bfb2"
+ integrity sha512-aOc1MK6ddL45X6mS6zEqFIKy/c/qnwjhNycDecaFMw5acUsD744ZCZf2cG7yxLhMv71mBSwr6pZdu+26+Zzk5A==
+
+eslint-plugin-react-hooks@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556"
+ integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==
+
+eslint-plugin-react-redux@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-redux/-/eslint-plugin-react-redux-3.3.2.tgz#25994fab66f5f5b15fb4fbb14579ddbb1fa9f721"
+ integrity sha512-wfm9x4GDdlibfp08oOAiQ2qk3zgHXb9qjV6SlmMCK35dJr9gBiDAdS+1CH4jXFubsfslWeE0fCI/XhCYaMZENw==
+ dependencies:
+ eslint-plugin-react "^7.16.0"
+ eslint-rule-composer "^0.3.0"
+
+eslint-plugin-react@^7.16.0, eslint-plugin-react@^7.20.6, eslint-plugin-react@^7.22.0:
+ version "7.22.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz#3d1c542d1d3169c45421c1215d9470e341707269"
+ integrity sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA==
+ dependencies:
+ array-includes "^3.1.1"
+ array.prototype.flatmap "^1.2.3"
+ doctrine "^2.1.0"
+ has "^1.0.3"
+ jsx-ast-utils "^2.4.1 || ^3.0.0"
+ object.entries "^1.1.2"
+ object.fromentries "^2.0.2"
+ object.values "^1.1.1"
+ prop-types "^15.7.2"
+ resolve "^1.18.1"
+ string.prototype.matchall "^4.0.2"
+
+eslint-plugin-simple-import-sort@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz#a1dad262f46d2184a90095a60c66fef74727f0f8"
+ integrity sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==
+
+eslint-plugin-sort-keys-fix@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-sort-keys-fix/-/eslint-plugin-sort-keys-fix-1.1.1.tgz#2ed201b53fd4a89552c6e2abd38933f330a4b62e"
+ integrity sha512-x02SLBg+8OEaoT9vvMbsgeInw17wjHLsa9cOieIVQY+xMNRiXBbyMWw+NiBoxYyJIR4QKDOPDofCjQdoSvltQg==
+ dependencies:
+ requireindex "~1.2.0"
+
+eslint-plugin-testing-library@^3.10.1:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.1.tgz#4dd02306d601c3238fdabf1d1dbc5f2a8e85d531"
+ integrity sha512-nQIFe2muIFv2oR2zIuXE4vTbcFNx8hZKRzgHZqJg8rfopIWwoTwtlbCCNELT/jXzVe1uZF68ALGYoDXjLczKiQ==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "^3.10.1"
+
+eslint-plugin-typescript-sort-keys@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-typescript-sort-keys/-/eslint-plugin-typescript-sort-keys-1.5.0.tgz#cc2ae7a9311422d8eab760ae01524426fd204004"
+ integrity sha512-Pq0geV5TbkoGyxiPUH9AZhloRbQekrprmiXpMWmtSURfWvsWtPtsEPDLVKhDN19S791zbqnw+cm7enzu6833/w==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "^2.32.0"
+ json-schema "^0.2.5"
+ natural-compare-lite "^1.4.0"
+
+eslint-plugin-unicorn@^28.0.0:
+ version "28.0.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-28.0.2.tgz#ab9884ebae04590ecd9c1c294330d889a74b7c37"
+ integrity sha512-k4AoFP7n8/oq6lBXkdc9Flid6vw2B8j7aXFCxgzJCyKvmaKrCUFb1TFPhG9eSJQFZowqmymMPRtl8oo9NKLUbw==
+ dependencies:
+ ci-info "^2.0.0"
+ clean-regexp "^1.0.0"
+ eslint-template-visitor "^2.2.2"
+ eslint-utils "^2.1.0"
+ eslint-visitor-keys "^2.0.0"
+ import-modules "^2.1.0"
+ lodash "^4.17.20"
+ pluralize "^8.0.0"
+ read-pkg-up "^7.0.1"
+ regexp-tree "^0.1.22"
+ reserved-words "^0.1.2"
+ safe-regex "^2.1.1"
+ semver "^7.3.4"
+
+eslint-plugin-you-dont-need-lodash-underscore@^6.11.0:
+ version "6.11.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-you-dont-need-lodash-underscore/-/eslint-plugin-you-dont-need-lodash-underscore-6.11.0.tgz#56ac259495cdee7b778165660e89dd1513dba0ac"
+ integrity sha512-cIprUmcACzxBg5rUrrCMbyAI3O0jYsB80+9PGq8XsvRTrxDSIzLitNhBetu9erb3TDxyW6OPseyOZzfQdR8oow==
+ dependencies:
+ kebab-case "^1.0.0"
+
+eslint-plugin-you-dont-need-momentjs@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-you-dont-need-momentjs/-/eslint-plugin-you-dont-need-momentjs-1.6.0.tgz#c5209783e8a9fa772f8e3c4d4d4a03813d8f9a1e"
+ integrity sha512-u12WanwuAL5B6/Kx6AtMDI04OojkS/twDueDwBgxsnKLy33VM4npP7ZlU2o7pxD1z8LbzPP6Y6/e7cPf6ZhatQ==
+ dependencies:
+ kebab-case "^1.0.0"
+
+eslint-rule-composer@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9"
+ integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==
+
+eslint-scope@5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5"
+ integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.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==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^4.1.1"
+
+eslint-template-visitor@^2.2.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/eslint-template-visitor/-/eslint-template-visitor-2.3.2.tgz#b52f96ff311e773a345d79053ccc78275bbc463d"
+ integrity sha512-3ydhqFpuV7x1M9EK52BPNj6V0Kwu0KKkcIAfpUhwHbR8ocRln/oUHgfxQupY8O1h4Qv/POHDumb/BwwNfxbtnA==
+ dependencies:
+ "@babel/core" "^7.12.16"
+ "@babel/eslint-parser" "^7.12.16"
+ eslint-visitor-keys "^2.0.0"
+ esquery "^1.3.1"
+ multimap "^1.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==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
+eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
+ integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
+
+eslint-visitor-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
+ integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
+
+eslint@^7.20.0:
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.20.0.tgz#db07c4ca4eda2e2316e7aa57ac7fc91ec550bdc7"
+ integrity sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==
+ dependencies:
+ "@babel/code-frame" "7.12.11"
+ "@eslint/eslintrc" "^0.3.0"
+ ajv "^6.10.0"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.0.1"
+ doctrine "^3.0.0"
+ enquirer "^2.3.5"
+ eslint-scope "^5.1.1"
+ eslint-utils "^2.1.0"
+ eslint-visitor-keys "^2.0.0"
+ espree "^7.3.1"
+ esquery "^1.4.0"
+ esutils "^2.0.2"
+ file-entry-cache "^6.0.0"
+ functional-red-black-tree "^1.0.1"
+ glob-parent "^5.0.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ js-yaml "^3.13.1"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash "^4.17.20"
+ minimatch "^3.0.4"
+ natural-compare "^1.4.0"
+ optionator "^0.9.1"
+ progress "^2.0.0"
+ regexpp "^3.1.0"
+ semver "^7.2.1"
+ strip-ansi "^6.0.0"
+ strip-json-comments "^3.1.0"
+ table "^6.0.4"
+ text-table "^0.2.0"
+ v8-compile-cache "^2.0.3"
+
+espree@^7.2.0, espree@^7.3.0, espree@^7.3.1:
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"
+ integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==
+ dependencies:
+ acorn "^7.4.0"
+ acorn-jsx "^5.3.1"
+ eslint-visitor-keys "^1.3.0"
+
+esprima@^4.0.0, esprima@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.3.1, esquery@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
+ integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.1.0, esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^4.1.1, estraverse@^4.2.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.1.0, estraverse@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
+ integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+event-stream@~3.1.5:
+ version "3.1.7"
+ resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.1.7.tgz#b4c540012d0fe1498420f3d8946008db6393c37a"
+ integrity sha1-tMVAAS0P4UmEIPPYlGAI22OTw3o=
+ dependencies:
+ duplexer "~0.1.1"
+ from "~0"
+ map-stream "~0.1.0"
+ pause-stream "0.0.11"
+ split "0.2"
+ stream-combiner "~0.0.4"
+ through "~2.3.1"
+
+eventemitter3@^4.0.4:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
+ integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
+
+exec-sh@^0.3.2:
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5"
+ integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==
+
+execa@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+ integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^4.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+execa@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a"
+ integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ human-signals "^1.1.1"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.0"
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
+execall@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/execall/-/execall-1.0.0.tgz#73d0904e395b3cab0658b08d09ec25307f29bb73"
+ integrity sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=
+ dependencies:
+ clone-regexp "^1.0.0"
+
+exit@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+ integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expect@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417"
+ integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==
+ dependencies:
+ "@jest/types" "^26.6.2"
+ ansi-styles "^4.0.0"
+ jest-get-type "^26.3.0"
+ jest-matcher-utils "^26.6.2"
+ jest-message-util "^26.6.2"
+ jest-regex-util "^26.0.0"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@3.0.2, extend@^3.0.0, extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+
+extsprintf@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+ integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
+
+fast-deep-equal@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+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.x, 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"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+fastq@^1.6.0:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.1.tgz#8b8f2ac8bf3632d67afcd65dac248d5fdc45385e"
+ integrity sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA==
+ dependencies:
+ reusify "^1.0.4"
+
+fault@^1.0.0, fault@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13"
+ integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==
+ dependencies:
+ format "^0.2.0"
+
+fb-watchman@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
+ integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==
+ dependencies:
+ bser "2.1.1"
+
+figgy-pudding@^3.5.1:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
+ integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==
+
+figures@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
+ integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+file-entry-cache@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
+ integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+ dependencies:
+ flat-cache "^2.0.1"
+
+file-entry-cache@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
+ integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+ dependencies:
+ flat-cache "^3.0.4"
+
+file-js@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/file-js/-/file-js-0.3.0.tgz#fab46bf782346c9294499f1f0d2ad07d838f25d1"
+ integrity sha1-+rRr94I0bJKUSZ8fDSrQfYOPJdE=
+ dependencies:
+ bluebird "^3.4.7"
+ minimatch "^3.0.3"
+ proper-lockfile "^1.2.0"
+
+filehound@^1.17.4:
+ version "1.17.4"
+ resolved "https://registry.yarnpkg.com/filehound/-/filehound-1.17.4.tgz#3f5b76c5b3edc1080311ba802e1ad43179e4291e"
+ integrity sha512-A74hiTADH20bpFbXBNyKtpqN4Guffa+ROmdGJWNnuCRhaD45UVSVoI6McLcpHYmuaOERrzD3gMV3v9VZq/SHeA==
+ dependencies:
+ bluebird "^3.5.1"
+ file-js "0.3.0"
+ lodash "^4.17.10"
+ minimatch "^3.0.4"
+ moment "^2.22.1"
+ unit-compare "^1.0.1"
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-root@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
+ integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
+
+find-up@^2.0.0, find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+ dependencies:
+ locate-path "^2.0.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+find-up@^4.0.0, find-up@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+flat-cache@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
+ integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+ dependencies:
+ flatted "^2.0.0"
+ rimraf "2.6.3"
+ write "1.0.3"
+
+flat-cache@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
+ integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
+ dependencies:
+ flatted "^3.1.0"
+ rimraf "^3.0.2"
+
+flatted@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
+ integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
+
+flatted@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469"
+ integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==
+
+for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+format@^0.2.0:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b"
+ integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+from@~0:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe"
+ integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=
+
+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==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+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 "^6.0.1"
+ universalify "^2.0.0"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^2.1.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+ integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+ integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
+gensync@^1.0.0-beta.1:
+ version "1.0.0-beta.2"
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+ integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-caller-file@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
+ integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
+ dependencies:
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+
+get-package-type@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
+ integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
+
+get-stdin@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
+ integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=
+
+get-stream@^4.0.0, get-stream@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+ integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+ dependencies:
+ pump "^3.0.0"
+
+get-stream@^5.0.0, get-stream@^5.1.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+ integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
+ dependencies:
+ pump "^3.0.0"
+
+get-url-origin@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/get-url-origin/-/get-url-origin-1.0.1.tgz#edebfcc085433e84c6b32a5738b0996edfd5a7b9"
+ integrity sha512-MMSKo16gB2+6CjWy55jNdIAqUEaKgw3LzZCb8wVVtFrhoQ78EXyuYXxDdn3COI3A4Xr4ZfM3fZa9RTjO6DOTxw==
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+ dependencies:
+ assert-plus "^1.0.0"
+
+git-diff-tree@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/git-diff-tree/-/git-diff-tree-1.1.0.tgz#05cd0b2fa9ebf1630ba643fe89d8ccbb2635f7bb"
+ integrity sha512-PdNkH2snpXsKIzho6OWMZKEl+KZG6Zm+1ghQIDi0tEq1sz/S1tDjvNuYrX2ZpomalHAB89OUQim8O6vN+jesNQ==
+ dependencies:
+ git-spawned-stream "1.0.1"
+ pump-chain "1.0.0"
+ split-transform-stream "0.1.1"
+ through2 "2.0.0"
+
+git-spawned-stream@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/git-spawned-stream/-/git-spawned-stream-1.0.1.tgz#841cda93d106eeb2c71a3c1af44ec484b440248b"
+ integrity sha512-W2Zo3sCiq5Hqv1/FLsNmGomkXdyimmkHncGzqjBHh7nWx+CbH5dkWGb6CiFdknooL7wfeZJ3gz14KrXl/gotCw==
+ dependencies:
+ debug "^4.1.0"
+ spawn-to-readstream "~0.1.3"
+
+glob-parent@^5.0.0, glob-parent@^5.1.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"
+ integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+global-dirs@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d"
+ integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==
+ dependencies:
+ ini "1.3.7"
+
+globals@^11.1.0, globals@^11.12.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^12.1.0:
+ version "12.4.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
+ integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
+ dependencies:
+ type-fest "^0.8.1"
+
+globby@^11.0.1:
+ version "11.0.2"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83"
+ integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==
+ 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"
+
+got@^9.6.0:
+ version "9.6.0"
+ resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
+ integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==
+ dependencies:
+ "@sindresorhus/is" "^0.14.0"
+ "@szmarczak/http-timer" "^1.1.2"
+ cacheable-request "^6.0.0"
+ decompress-response "^3.3.0"
+ duplexer3 "^0.1.4"
+ get-stream "^4.1.0"
+ lowercase-keys "^1.0.1"
+ mimic-response "^1.0.1"
+ p-cancelable "^1.0.0"
+ to-readable-stream "^1.0.0"
+ url-parse-lax "^3.0.0"
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4:
+ version "4.2.6"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
+ integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
+
+growly@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
+ integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
+
+har-validator@~5.1.3:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
+ integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
+ dependencies:
+ ajv "^6.12.3"
+ har-schema "^2.0.0"
+
+hard-rejection@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883"
+ integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-symbols@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
+ integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has-yarn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77"
+ integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==
+
+has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+hast-util-embedded@^1.0.0:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/hast-util-embedded/-/hast-util-embedded-1.0.6.tgz#ea7007323351cc43e19e1d6256b7cde66ad1aa03"
+ integrity sha512-JQMW+TJe0UAIXZMjCJ4Wf6ayDV9Yv3PBDPsHD4ExBpAspJ6MOcCX+nzVF+UJVv7OqPcg852WEMSHQPoRA+FVSw==
+ dependencies:
+ hast-util-is-element "^1.1.0"
+
+hast-util-from-parse5@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a"
+ integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==
+ dependencies:
+ "@types/parse5" "^5.0.0"
+ hastscript "^6.0.0"
+ property-information "^5.0.0"
+ vfile "^4.0.0"
+ vfile-location "^3.2.0"
+ web-namespaces "^1.0.0"
+
+hast-util-has-property@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/hast-util-has-property/-/hast-util-has-property-1.0.4.tgz#9f137565fad6082524b382c1e7d7d33ca5059f36"
+ integrity sha512-ghHup2voGfgFoHMGnaLHOjbYFACKrRh9KFttdCzMCbFoBMJXiNi2+XTrPP8+q6cDJM/RSqlCfVWrjp1H201rZg==
+
+hast-util-is-body-ok-link@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-1.0.4.tgz#49ab2fad52ef04fe70adcbc95c9fc3a6358c32be"
+ integrity sha512-mFblNpLvFbD8dG2Nw5dJBYZkxIHeph1JAh5yr4huI7T5m8cV0zaXNiqzKPX/JdjA+tIDF7c33u9cxK132KRjyQ==
+ dependencies:
+ hast-util-has-property "^1.0.0"
+ hast-util-is-element "^1.0.0"
+
+hast-util-is-element@^1.0.0, hast-util-is-element@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz#3b3ed5159a2707c6137b48637fbfe068e175a425"
+ integrity sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==
+
+hast-util-parse-selector@^2.0.0:
+ version "2.2.5"
+ resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a"
+ integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==
+
+hast-util-phrasing@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/hast-util-phrasing/-/hast-util-phrasing-1.0.5.tgz#45fb7d3efc70128b61491f9e3f080a554f138b1d"
+ integrity sha512-P3uxm+8bnwcfAS/XpGie9wMmQXAQqsYhgQQKRwmWH/V6chiq0lmTy8KjQRJmYjusdMtNKGCUksdILSZy1suSpQ==
+ dependencies:
+ hast-util-embedded "^1.0.0"
+ hast-util-has-property "^1.0.0"
+ hast-util-is-body-ok-link "^1.0.0"
+ hast-util-is-element "^1.0.0"
+
+hast-util-to-nlcst@^1.0.0:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/hast-util-to-nlcst/-/hast-util-to-nlcst-1.2.8.tgz#751d17a22e4b55574c06a137056e90dd0d759c4b"
+ integrity sha512-cKMArohUvGw4fpN9PKDCIB+klMojkWzz5zNVNFRdKa0oC1MVX1TaDki1E/tb9xqS8WlUjKifIjmrNmRbEJzrJg==
+ dependencies:
+ hast-util-embedded "^1.0.0"
+ hast-util-is-element "^1.0.0"
+ hast-util-phrasing "^1.0.0"
+ hast-util-to-string "^1.0.0"
+ hast-util-whitespace "^1.0.0"
+ nlcst-to-string "^2.0.0"
+ unist-util-position "^3.0.0"
+ vfile-location "^3.1.0"
+
+hast-util-to-string@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/hast-util-to-string/-/hast-util-to-string-1.0.4.tgz#9b24c114866bdb9478927d7e9c36a485ac728378"
+ integrity sha512-eK0MxRX47AV2eZ+Lyr18DCpQgodvaS3fAQO2+b9Two9F5HEoRPhiUMNzoXArMJfZi2yieFzUBMRl3HNJ3Jus3w==
+
+hast-util-whitespace@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz#e4fe77c4a9ae1cb2e6c25e02df0043d0164f6e41"
+ integrity sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==
+
+hastscript@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640"
+ integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==
+ dependencies:
+ "@types/hast" "^2.0.0"
+ comma-separated-tokens "^1.0.0"
+ hast-util-parse-selector "^2.0.0"
+ property-information "^5.0.0"
+ space-separated-tokens "^1.0.0"
+
+"heap@>= 0.2.0":
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac"
+ integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=
+
+hosted-git-info@^2.1.4:
+ version "2.8.8"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
+ integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
+
+html-encoding-sniffer@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
+ integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==
+ dependencies:
+ whatwg-encoding "^1.0.5"
+
+html-escaper@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+ integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
+http-cache-semantics@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
+ integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+human-signals@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
+ integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
+
+humannames@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/humannames/-/humannames-1.0.5.tgz#a4d60d4168df8737f4b262efd23f2ee32974f1c5"
+ integrity sha1-pNYNQWjfhzf0smLv0j8u4yl08cU=
+
+husky@^5.0.9:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/husky/-/husky-5.1.0.tgz#68b1148523acc838af0655ead71bf4671adb9f93"
+ integrity sha512-Os0EY2haOO+59YZSwMiUDsHY43RFwBVIRStHcnnT8/kvA+sFfaA/YS4uLFRiymXYgQl6E6TQTt3y4v/Z2ctEtw==
+
+iconv-lite@0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+ignore@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+ integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
+ignore@^5.0.0, ignore@^5.0.5, ignore@^5.1.1, 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, import-fresh@^3.1.0, import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+import-lazy@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
+ integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=
+
+import-local@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6"
+ integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==
+ dependencies:
+ pkg-dir "^4.2.0"
+ resolve-cwd "^3.0.0"
+
+import-modules@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-modules/-/import-modules-2.1.0.tgz#abe7df297cb6c1f19b57246eb8b8bd9664b6d8c2"
+ integrity sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.0, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+ini@1.3.7:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84"
+ integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==
+
+ini@^1.3.5, ini@~1.3.0:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+ integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+internal-slot@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
+ integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
+ dependencies:
+ get-intrinsic "^1.1.0"
+ has "^1.0.3"
+ side-channel "^1.0.4"
+
+ip-regex@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
+ integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-alphabetical@1.0.4, is-alphabetical@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d"
+ integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==
+
+is-alphanumeric@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4"
+ integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=
+
+is-alphanumerical@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf"
+ integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==
+ dependencies:
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+
+is-arguments@^1.0.4:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9"
+ integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==
+ dependencies:
+ call-bind "^1.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-buffer@^1.1.4, is-buffer@^1.1.5, is-buffer@~1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-buffer@^2.0.0:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
+ integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
+
+is-callable@^1.1.4, is-callable@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e"
+ integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==
+
+is-ci@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
+ integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
+ dependencies:
+ ci-info "^2.0.0"
+
+is-core-module@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a"
+ integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==
+ dependencies:
+ has "^1.0.3"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
+ integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
+
+is-decimal@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5"
+ integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-docker@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156"
+ integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==
+
+is-empty@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/is-empty/-/is-empty-1.2.0.tgz#de9bb5b278738a05a0b09a57e1fb4d4a341a9f6b"
+ integrity sha1-3pu1snhzigWgsJpX4ftNSjQan2s=
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-file@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-file/-/is-file-1.0.0.tgz#28a44cfbd9d3db193045f22b65fce8edf9620596"
+ integrity sha1-KKRM+9nT2xkwRfIrZfzo7fliBZY=
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-generator-fn@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
+ integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
+
+is-glob@^4.0.0, is-glob@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-hexadecimal@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7"
+ integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==
+
+is-installed-globally@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141"
+ integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==
+ dependencies:
+ global-dirs "^2.0.1"
+ is-path-inside "^3.0.1"
+
+is-negative-zero@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
+ integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
+
+is-npm@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d"
+ integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-obj@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
+ integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
+
+is-path-inside@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017"
+ integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==
+
+is-plain-obj@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+ integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+
+is-plain-obj@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
+ integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+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-potential-custom-element-name@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397"
+ integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c=
+
+is-regex@^1.0.4, is-regex@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251"
+ integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==
+ dependencies:
+ call-bind "^1.0.2"
+ has-symbols "^1.0.1"
+
+is-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+ integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
+
+is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
+ integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
+
+is-string@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
+ integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
+
+is-supported-regexp-flag@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz#21ee16518d2c1dd3edd3e9a0d57e50207ac364ca"
+ integrity sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ==
+
+is-symbol@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
+ integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
+ dependencies:
+ has-symbols "^1.0.1"
+
+is-typedarray@^1.0.0, is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+is-whitespace-character@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7"
+ integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==
+
+is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+is-word-character@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230"
+ integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==
+
+is-wsl@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+ integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+ dependencies:
+ is-docker "^2.0.0"
+
+is-yarn-global@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232"
+ integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+istanbul-lib-coverage@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec"
+ integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==
+
+istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d"
+ integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==
+ dependencies:
+ "@babel/core" "^7.7.5"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-coverage "^3.0.0"
+ semver "^6.3.0"
+
+istanbul-lib-report@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6"
+ integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==
+ dependencies:
+ istanbul-lib-coverage "^3.0.0"
+ make-dir "^3.0.0"
+ supports-color "^7.1.0"
+
+istanbul-lib-source-maps@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9"
+ integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==
+ dependencies:
+ debug "^4.1.1"
+ istanbul-lib-coverage "^3.0.0"
+ source-map "^0.6.1"
+
+istanbul-reports@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b"
+ integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==
+ dependencies:
+ html-escaper "^2.0.0"
+ istanbul-lib-report "^3.0.0"
+
+jest-changed-files@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0"
+ integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==
+ dependencies:
+ "@jest/types" "^26.6.2"
+ execa "^4.0.0"
+ throat "^5.0.0"
+
+jest-circus@^26.6.3:
+ version "26.6.3"
+ resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-26.6.3.tgz#3cc7ef2a6a3787e5d7bfbe2c72d83262154053e7"
+ integrity sha512-ACrpWZGcQMpbv13XbzRzpytEJlilP/Su0JtNCi5r/xLpOUhnaIJr8leYYpLEMgPFURZISEHrnnpmB54Q/UziPw==
+ dependencies:
+ "@babel/traverse" "^7.1.0"
+ "@jest/environment" "^26.6.2"
+ "@jest/test-result" "^26.6.2"
+ "@jest/types" "^26.6.2"
+ "@types/babel__traverse" "^7.0.4"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ co "^4.6.0"
+ dedent "^0.7.0"
+ expect "^26.6.2"
+ is-generator-fn "^2.0.0"
+ jest-each "^26.6.2"
+ jest-matcher-utils "^26.6.2"
+ jest-message-util "^26.6.2"
+ jest-runner "^26.6.3"
+ jest-runtime "^26.6.3"
+ jest-snapshot "^26.6.2"
+ jest-util "^26.6.2"
+ pretty-format "^26.6.2"
+ stack-utils "^2.0.2"
+ throat "^5.0.0"
+
+jest-cli@^26.6.3:
+ version "26.6.3"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a"
+ integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==
+ dependencies:
+ "@jest/core" "^26.6.3"
+ "@jest/test-result" "^26.6.2"
+ "@jest/types" "^26.6.2"
+ chalk "^4.0.0"
+ exit "^0.1.2"
+ graceful-fs "^4.2.4"
+ import-local "^3.0.2"
+ is-ci "^2.0.0"
+ jest-config "^26.6.3"
+ jest-util "^26.6.2"
+ jest-validate "^26.6.2"
+ prompts "^2.0.1"
+ yargs "^15.4.1"
+
+jest-config@^26.6.3:
+ version "26.6.3"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349"
+ integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/test-sequencer" "^26.6.3"
+ "@jest/types" "^26.6.2"
+ babel-jest "^26.6.3"
+ chalk "^4.0.0"
+ deepmerge "^4.2.2"
+ glob "^7.1.1"
+ graceful-fs "^4.2.4"
+ jest-environment-jsdom "^26.6.2"
+ jest-environment-node "^26.6.2"
+ jest-get-type "^26.3.0"
+ jest-jasmine2 "^26.6.3"
+ jest-regex-util "^26.0.0"
+ jest-resolve "^26.6.2"
+ jest-util "^26.6.2"
+ jest-validate "^26.6.2"
+ micromatch "^4.0.2"
+ pretty-format "^26.6.2"
+
+jest-diff@^26.0.0, jest-diff@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394"
+ integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==
+ dependencies:
+ chalk "^4.0.0"
+ diff-sequences "^26.6.2"
+ jest-get-type "^26.3.0"
+ pretty-format "^26.6.2"
+
+jest-docblock@^26.0.0:
+ version "26.0.0"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5"
+ integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==
+ dependencies:
+ detect-newline "^3.0.0"
+
+jest-each@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb"
+ integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==
+ dependencies:
+ "@jest/types" "^26.6.2"
+ chalk "^4.0.0"
+ jest-get-type "^26.3.0"
+ jest-util "^26.6.2"
+ pretty-format "^26.6.2"
+
+jest-environment-jsdom@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e"
+ integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==
+ dependencies:
+ "@jest/environment" "^26.6.2"
+ "@jest/fake-timers" "^26.6.2"
+ "@jest/types" "^26.6.2"
+ "@types/node" "*"
+ jest-mock "^26.6.2"
+ jest-util "^26.6.2"
+ jsdom "^16.4.0"
+
+jest-environment-node@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c"
+ integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==
+ dependencies:
+ "@jest/environment" "^26.6.2"
+ "@jest/fake-timers" "^26.6.2"
+ "@jest/types" "^26.6.2"
+ "@types/node" "*"
+ jest-mock "^26.6.2"
+ jest-util "^26.6.2"
+
+jest-get-type@^26.3.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0"
+ integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==
+
+jest-haste-map@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa"
+ integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==
+ dependencies:
+ "@jest/types" "^26.6.2"
+ "@types/graceful-fs" "^4.1.2"
+ "@types/node" "*"
+ anymatch "^3.0.3"
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.2.4"
+ jest-regex-util "^26.0.0"
+ jest-serializer "^26.6.2"
+ jest-util "^26.6.2"
+ jest-worker "^26.6.2"
+ micromatch "^4.0.2"
+ sane "^4.0.3"
+ walker "^1.0.7"
+ optionalDependencies:
+ fsevents "^2.1.2"
+
+jest-jasmine2@^26.6.3:
+ version "26.6.3"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd"
+ integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==
+ dependencies:
+ "@babel/traverse" "^7.1.0"
+ "@jest/environment" "^26.6.2"
+ "@jest/source-map" "^26.6.2"
+ "@jest/test-result" "^26.6.2"
+ "@jest/types" "^26.6.2"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ co "^4.6.0"
+ expect "^26.6.2"
+ is-generator-fn "^2.0.0"
+ jest-each "^26.6.2"
+ jest-matcher-utils "^26.6.2"
+ jest-message-util "^26.6.2"
+ jest-runtime "^26.6.3"
+ jest-snapshot "^26.6.2"
+ jest-util "^26.6.2"
+ pretty-format "^26.6.2"
+ throat "^5.0.0"
+
+jest-leak-detector@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af"
+ integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==
+ dependencies:
+ jest-get-type "^26.3.0"
+ pretty-format "^26.6.2"
+
+jest-matcher-utils@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a"
+ integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==
+ dependencies:
+ chalk "^4.0.0"
+ jest-diff "^26.6.2"
+ jest-get-type "^26.3.0"
+ pretty-format "^26.6.2"
+
+jest-message-util@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07"
+ integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@jest/types" "^26.6.2"
+ "@types/stack-utils" "^2.0.0"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.4"
+ micromatch "^4.0.2"
+ pretty-format "^26.6.2"
+ slash "^3.0.0"
+ stack-utils "^2.0.2"
+
+jest-mock@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302"
+ integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==
+ dependencies:
+ "@jest/types" "^26.6.2"
+ "@types/node" "*"
+
+jest-pnp-resolver@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c"
+ integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==
+
+jest-regex-util@^26.0.0:
+ version "26.0.0"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28"
+ integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==
+
+jest-resolve-dependencies@^26.6.3:
+ version "26.6.3"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6"
+ integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==
+ dependencies:
+ "@jest/types" "^26.6.2"
+ jest-regex-util "^26.0.0"
+ jest-snapshot "^26.6.2"
+
+jest-resolve@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507"
+ integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==
+ dependencies:
+ "@jest/types" "^26.6.2"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.4"
+ jest-pnp-resolver "^1.2.2"
+ jest-util "^26.6.2"
+ read-pkg-up "^7.0.1"
+ resolve "^1.18.1"
+ slash "^3.0.0"
+
+jest-runner@^26.6.3:
+ version "26.6.3"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159"
+ integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==
+ dependencies:
+ "@jest/console" "^26.6.2"
+ "@jest/environment" "^26.6.2"
+ "@jest/test-result" "^26.6.2"
+ "@jest/types" "^26.6.2"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ emittery "^0.7.1"
+ exit "^0.1.2"
+ graceful-fs "^4.2.4"
+ jest-config "^26.6.3"
+ jest-docblock "^26.0.0"
+ jest-haste-map "^26.6.2"
+ jest-leak-detector "^26.6.2"
+ jest-message-util "^26.6.2"
+ jest-resolve "^26.6.2"
+ jest-runtime "^26.6.3"
+ jest-util "^26.6.2"
+ jest-worker "^26.6.2"
+ source-map-support "^0.5.6"
+ throat "^5.0.0"
+
+jest-runtime@^26.6.3:
+ version "26.6.3"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b"
+ integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==
+ dependencies:
+ "@jest/console" "^26.6.2"
+ "@jest/environment" "^26.6.2"
+ "@jest/fake-timers" "^26.6.2"
+ "@jest/globals" "^26.6.2"
+ "@jest/source-map" "^26.6.2"
+ "@jest/test-result" "^26.6.2"
+ "@jest/transform" "^26.6.2"
+ "@jest/types" "^26.6.2"
+ "@types/yargs" "^15.0.0"
+ chalk "^4.0.0"
+ cjs-module-lexer "^0.6.0"
+ collect-v8-coverage "^1.0.0"
+ exit "^0.1.2"
+ glob "^7.1.3"
+ graceful-fs "^4.2.4"
+ jest-config "^26.6.3"
+ jest-haste-map "^26.6.2"
+ jest-message-util "^26.6.2"
+ jest-mock "^26.6.2"
+ jest-regex-util "^26.0.0"
+ jest-resolve "^26.6.2"
+ jest-snapshot "^26.6.2"
+ jest-util "^26.6.2"
+ jest-validate "^26.6.2"
+ slash "^3.0.0"
+ strip-bom "^4.0.0"
+ yargs "^15.4.1"
+
+jest-serializer@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1"
+ integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==
+ dependencies:
+ "@types/node" "*"
+ graceful-fs "^4.2.4"
+
+jest-snapshot@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84"
+ integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==
+ dependencies:
+ "@babel/types" "^7.0.0"
+ "@jest/types" "^26.6.2"
+ "@types/babel__traverse" "^7.0.4"
+ "@types/prettier" "^2.0.0"
+ chalk "^4.0.0"
+ expect "^26.6.2"
+ graceful-fs "^4.2.4"
+ jest-diff "^26.6.2"
+ jest-get-type "^26.3.0"
+ jest-haste-map "^26.6.2"
+ jest-matcher-utils "^26.6.2"
+ jest-message-util "^26.6.2"
+ jest-resolve "^26.6.2"
+ natural-compare "^1.4.0"
+ pretty-format "^26.6.2"
+ semver "^7.3.2"
+
+jest-util@^26.1.0, jest-util@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1"
+ integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==
+ dependencies:
+ "@jest/types" "^26.6.2"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.4"
+ is-ci "^2.0.0"
+ micromatch "^4.0.2"
+
+jest-validate@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec"
+ integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==
+ dependencies:
+ "@jest/types" "^26.6.2"
+ camelcase "^6.0.0"
+ chalk "^4.0.0"
+ jest-get-type "^26.3.0"
+ leven "^3.1.0"
+ pretty-format "^26.6.2"
+
+jest-watcher@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975"
+ integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==
+ dependencies:
+ "@jest/test-result" "^26.6.2"
+ "@jest/types" "^26.6.2"
+ "@types/node" "*"
+ ansi-escapes "^4.2.1"
+ chalk "^4.0.0"
+ jest-util "^26.6.2"
+ string-length "^4.0.1"
+
+jest-worker@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed"
+ integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==
+ dependencies:
+ "@types/node" "*"
+ merge-stream "^2.0.0"
+ supports-color "^7.0.0"
+
+jest@^26.6.3:
+ version "26.6.3"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef"
+ integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==
+ dependencies:
+ "@jest/core" "^26.6.3"
+ import-local "^3.0.2"
+ jest-cli "^26.6.3"
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^3.12.0, js-yaml@^3.13.1, js-yaml@^3.14.1, js-yaml@^3.6.1:
+ version "3.14.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+ integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+js-yaml@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f"
+ integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==
+ dependencies:
+ argparse "^2.0.1"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+
+jsdoctypeparser@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz#8c97e2fb69315eb274b0f01377eaa5c940bd7b26"
+ integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==
+
+jsdom@^16.4.0:
+ version "16.4.0"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb"
+ integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==
+ dependencies:
+ abab "^2.0.3"
+ acorn "^7.1.1"
+ acorn-globals "^6.0.0"
+ cssom "^0.4.4"
+ cssstyle "^2.2.0"
+ data-urls "^2.0.0"
+ decimal.js "^10.2.0"
+ domexception "^2.0.1"
+ escodegen "^1.14.1"
+ html-encoding-sniffer "^2.0.1"
+ is-potential-custom-element-name "^1.0.0"
+ nwsapi "^2.2.0"
+ parse5 "5.1.1"
+ request "^2.88.2"
+ request-promise-native "^1.0.8"
+ saxes "^5.0.0"
+ symbol-tree "^3.2.4"
+ tough-cookie "^3.0.1"
+ w3c-hr-time "^1.0.2"
+ w3c-xmlserializer "^2.0.0"
+ webidl-conversions "^6.1.0"
+ whatwg-encoding "^1.0.5"
+ whatwg-mimetype "^2.3.0"
+ whatwg-url "^8.0.0"
+ ws "^7.2.3"
+ xml-name-validator "^3.0.0"
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+json-buffer@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
+ integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=
+
+json-diff@^0.5.3:
+ version "0.5.4"
+ resolved "https://registry.yarnpkg.com/json-diff/-/json-diff-0.5.4.tgz#7bc8198c441756632aab66c7d9189d365a7a035a"
+ integrity sha512-q5Xmx9QXNOzOzIlMoYtLrLiu4Jl/Ce2bn0CNcv54PhyH89CI4GWlGVDye8ei2Ijt9R3U+vsWPsXpLUNob8bs8Q==
+ dependencies:
+ cli-color "~0.1.6"
+ difflib "~0.2.1"
+ dreamopt "~0.6.0"
+
+json-parse-better-errors@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-parse-even-better-errors@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+ integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema-traverse@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
+ integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-schema@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.5.tgz#97997f50972dd0500214e208c407efa4b5d7063b"
+ integrity sha512-gWJOWYFrhQ8j7pVm0EM8Slr+EPVq1Phf6lvzvD/WCeqkrx/f2xBI0xOsRRS9xCn3I4vKtP519dvs3TP09r24wQ==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
+json-stable-stringify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=
+ dependencies:
+ jsonify "~0.0.0"
+
+json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json5@2.x, json5@^2.1.1, json5@^2.1.2:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
+ integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==
+ dependencies:
+ minimist "^1.2.5"
+
+json5@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+ integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+ dependencies:
+ minimist "^1.2.0"
+
+jsonc-parser@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22"
+ integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==
+
+jsonfile@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+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"
+
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+ integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82"
+ integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==
+ dependencies:
+ array-includes "^3.1.2"
+ object.assign "^4.1.2"
+
+kebab-case@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/kebab-case/-/kebab-case-1.0.0.tgz#3f9e4990adcad0c686c0e701f7645868f75f91eb"
+ integrity sha1-P55JkK3K0MaGwOcB92RYaPdfkes=
+
+keyv@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
+ integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==
+ dependencies:
+ json-buffer "3.0.0"
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+kleur@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+ integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
+language-subtag-registry@~0.3.2:
+ version "0.3.21"
+ resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a"
+ integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==
+
+language-tags@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a"
+ integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=
+ dependencies:
+ language-subtag-registry "~0.3.2"
+
+latest-version@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face"
+ integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==
+ dependencies:
+ package-json "^6.3.0"
+
+leven@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
+ integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
+levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+libnpmconfig@^1.0.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/libnpmconfig/-/libnpmconfig-1.2.1.tgz#c0c2f793a74e67d4825e5039e7a02a0044dfcbc0"
+ integrity sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA==
+ dependencies:
+ figgy-pudding "^3.5.1"
+ find-up "^3.0.0"
+ ini "^1.3.5"
+
+limit-spawn@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/limit-spawn/-/limit-spawn-0.0.3.tgz#cc09c24467a0f0a1ed10a5196dba597cad3f65dc"
+ integrity sha1-zAnCRGeg8KHtEKUZbbpZfK0/Zdw=
+
+lines-and-columns@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
+ integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+load-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ strip-bom "^3.0.0"
+
+load-json-file@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
+ integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^4.0.0"
+ pify "^3.0.0"
+ strip-bom "^3.0.0"
+
+load-plugin@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/load-plugin/-/load-plugin-3.0.0.tgz#8f3ce57cf4e5111639911012487bc1c2ba3d0e6c"
+ integrity sha512-od7eKCCZ62ITvFf8nHHrIiYmgOHb4xVNDRDqxBWSaao5FZyyZVX8OmRCbwjDGPrSrgIulwPNyBsWCGnhiDC0oQ==
+ dependencies:
+ libnpmconfig "^1.0.0"
+ resolve-from "^5.0.0"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
+lodash.difference@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c"
+ integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=
+
+lodash.has@^4.5.2:
+ version "4.5.2"
+ resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862"
+ integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=
+
+lodash.intersection@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.intersection/-/lodash.intersection-4.4.0.tgz#0a11ba631d0e95c23c7f2f4cbb9a692ed178e705"
+ integrity sha1-ChG6Yx0OlcI8fy9Mu5ppLtF45wU=
+
+lodash.iteratee@^4.5.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/lodash.iteratee/-/lodash.iteratee-4.7.0.tgz#be4177db289a8ccc3c0990f1db26b5b22fc1554c"
+ integrity sha1-vkF32yiajMw8CZDx2ya1si/BVUw=
+
+lodash.memoize@4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+ integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
+
+lodash.set@^4.3.2:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23"
+ integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=
+
+lodash.sortby@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+ integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
+
+lodash.uniq@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+ integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
+
+lodash.uniqwith@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz#7a0cbf65f43b5928625a9d4d0dc54b18cadc7ef3"
+ integrity sha1-egy/ZfQ7WShiWp1NDcVLGMrcfvM=
+
+lodash@4.x, lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+log-symbols@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
+ integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=
+ dependencies:
+ chalk "^1.0.0"
+
+longest-streak@^2.0.1:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4"
+ integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==
+
+loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+lowercase-keys@^1.0.0, lowercase-keys@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
+ integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
+
+lowercase-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
+ integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+lz-string@^1.4.4:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26"
+ integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=
+
+make-dir@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+ integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+ dependencies:
+ semver "^6.0.0"
+
+make-error@1.x:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
+ integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
+
+makeerror@1.0.x:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
+ integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=
+ dependencies:
+ tmpl "1.0.x"
+
+map-age-cleaner@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
+ integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==
+ dependencies:
+ p-defer "^1.0.0"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-like@^1.0.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/map-like/-/map-like-1.1.3.tgz#6faaca5339e0cc6567a3a55dd281fd871a39e5da"
+ integrity sha1-b6rKUzngzGVno6Vd0oH9hxo55do=
+
+map-like@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/map-like/-/map-like-2.0.0.tgz#94496d49ad333c0dc3234b27adbbd1e8535953b4"
+ integrity sha1-lEltSa0zPA3DI0snrbvR6FNZU7Q=
+
+map-obj@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+map-obj@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5"
+ integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==
+
+map-stream@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194"
+ integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+markdown-escapes@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535"
+ integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==
+
+markdown-table@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b"
+ integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==
+ dependencies:
+ repeat-string "^1.0.0"
+
+match-casing@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/match-casing/-/match-casing-1.0.3.tgz#cda6c33e377dbe49daff286e0d500d90766b16a4"
+ integrity sha512-oMyC3vUVCFbGu+M2Zxl212LPJThcaw7QxB5lFuJPQCgV/dsGBP0yZeCoLmX6CiBkoBcVbAKDJZrBpJVu0XcLMw==
+
+match-index@^1.0.1, match-index@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/match-index/-/match-index-1.0.3.tgz#752ec60c6586ea5dd440d5e62cfbff25838c071a"
+ integrity sha512-1XjyBWqCvEFFUDW/MPv0RwbITRD4xQXOvKoPYtLDq8IdZTfdF/cQSo5Yn4qvhfSSZgjgkTFsqJD2wOUG4ovV8Q==
+ dependencies:
+ regexp.prototype.flags "^1.1.1"
+
+match-test-replace@^1.1.0:
+ version "1.1.18"
+ resolved "https://registry.yarnpkg.com/match-test-replace/-/match-test-replace-1.1.18.tgz#1a5c363be62893e672cf3b626b7a1c87ee11ac14"
+ integrity sha512-kfMQMvOir3Udl1FFrqf57rUvBTe6wcLTrjhDejKUmc8oyig/iZ9CowqA3CQnj2YDS/K+d9vHMUqe6GSCeMMH/w==
+
+md5@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f"
+ integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==
+ dependencies:
+ charenc "0.0.2"
+ crypt "0.0.2"
+ is-buffer "~1.1.6"
+
+mdast-comment-marker@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/mdast-comment-marker/-/mdast-comment-marker-1.1.2.tgz#5ad2e42cfcc41b92a10c1421a98c288d7b447a6d"
+ integrity sha512-vTFXtmbbF3rgnTh3Zl3irso4LtvwUq/jaDvT2D1JqTGAwaipcS7RpTxzi6KjoRqI9n2yuAhzLDAC8xVTF3XYVQ==
+
+mdast-util-compact@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz#cabc69a2f43103628326f35b1acf735d55c99490"
+ integrity sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==
+ dependencies:
+ unist-util-visit "^2.0.0"
+
+mdast-util-to-nlcst@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-nlcst/-/mdast-util-to-nlcst-4.0.1.tgz#ff8b5339c960b38209273fa8bf4dd7a9498f8636"
+ integrity sha512-Y4ffygj85MTt70STKnEquw6k73jYWJBaYcb4ITAKgSNokZF7fH8rEHZ1GsRY/JaxqUevMaEnsDmkVv5Z9uVRdg==
+ dependencies:
+ nlcst-to-string "^2.0.0"
+ repeat-string "^1.0.0"
+ unist-util-position "^3.0.0"
+ vfile-location "^3.1.0"
+
+mem@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
+ integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==
+ dependencies:
+ map-age-cleaner "^0.1.1"
+ mimic-fn "^2.0.0"
+ p-is-promise "^2.0.0"
+
+meow@^7.0.0:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-7.1.1.tgz#7c01595e3d337fcb0ec4e8eed1666ea95903d306"
+ integrity sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==
+ dependencies:
+ "@types/minimist" "^1.2.0"
+ camelcase-keys "^6.2.2"
+ decamelize-keys "^1.1.0"
+ hard-rejection "^2.1.0"
+ minimist-options "4.1.0"
+ normalize-package-data "^2.5.0"
+ read-pkg-up "^7.0.1"
+ redent "^3.0.0"
+ trim-newlines "^3.0.0"
+ type-fest "^0.13.1"
+ yargs-parser "^18.1.3"
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+micromatch@^3.1.4:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+micromatch@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
+ integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
+ dependencies:
+ braces "^3.0.1"
+ picomatch "^2.0.5"
+
+mime-db@1.46.0:
+ version "1.46.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee"
+ integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==
+
+mime-types@^2.1.12, mime-types@~2.1.19:
+ version "2.1.29"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2"
+ integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==
+ dependencies:
+ mime-db "1.46.0"
+
+mimic-fn@^2.0.0, mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+mimic-response@^1.0.0, mimic-response@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
+ integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
+
+min-indent@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
+ integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
+
+minimatch@^3.0.3, minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist-options@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
+ integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==
+ dependencies:
+ arrify "^1.0.1"
+ is-plain-obj "^1.1.0"
+ kind-of "^6.0.3"
+
+minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+ integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+
+misspellings@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/misspellings/-/misspellings-1.1.0.tgz#53d500266cbd09cda9d94c4cf392e60589b5b324"
+ integrity sha1-U9UAJmy9Cc2p2UxM85LmBYm1syQ=
+
+mixin-deep@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mkdirp@1.x:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+ integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
+mkdirp@^0.5.0, mkdirp@^0.5.1:
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+ integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+ dependencies:
+ minimist "^1.2.5"
+
+moment@^2.14.1, moment@^2.22.1:
+ version "2.29.1"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3"
+ integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+multimap@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/multimap/-/multimap-1.1.0.tgz#5263febc085a1791c33b59bb3afc6a76a2a10ca8"
+ integrity sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+natural-compare-lite@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4"
+ integrity sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+nice-try@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+ integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+nlcst-is-literal@^1.0.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/nlcst-is-literal/-/nlcst-is-literal-1.2.2.tgz#e64595ced168ae586ae905a2fe6825f39ccf1a7b"
+ integrity sha512-R+1OJEmRl3ZOp9d8PbiRxGpnvmpi3jU+lzSqCJoLeogdEh0FYDRH1aC223qUbaKffxNTJkEfeDOeQfziw749yA==
+ dependencies:
+ nlcst-to-string "^2.0.0"
+
+nlcst-normalize@^2.0.0:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/nlcst-normalize/-/nlcst-normalize-2.1.5.tgz#14d320b346a833d1ac91dfb60558b947e4444f99"
+ integrity sha512-xSqTKv8IHIy3n/orD7wj81BZljLfbrTot0Pv64MYUnQUXfDbi1xDSpJR4qEmbFWyFoHsmivcOdgrK+o7ky3mcw==
+ dependencies:
+ nlcst-to-string "^2.0.0"
+
+nlcst-parse-english@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/nlcst-parse-english/-/nlcst-parse-english-1.1.4.tgz#5406f57334d0dcb86966c84a6e790132db355218"
+ integrity sha512-1pEYqCiuowGHd4lM9ky7I+ESpzu8Yyt40nl/McuhZfOxk6kj/4QKL4TGuyEVOR/WCZuQA3G099hTol1V2RVunQ==
+ dependencies:
+ en-lexicon "^1.0.11"
+ en-pos "^1.0.16"
+ nlcst-to-string "^2.0.1"
+ nlcst-types "^1.2.4"
+ parse-english "^4.1.0"
+ unist-util-visit "^1.1.3"
+
+nlcst-search@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/nlcst-search/-/nlcst-search-2.0.0.tgz#d5f3b8509b0ecfb1d39760122c2acd84f71bd94d"
+ integrity sha512-+3xdctMFTcG+76vKAa0wObNg1EYq7IIQlZcL+HxSFXkHO1DgSPRjsPJrmelVIvMg7rk+wmBcdPEoScv/CTT1Zw==
+ dependencies:
+ nlcst-is-literal "^1.0.0"
+ nlcst-normalize "^2.0.0"
+ unist-util-visit "^2.0.0"
+
+nlcst-to-string@^2.0.0, nlcst-to-string@^2.0.1:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/nlcst-to-string/-/nlcst-to-string-2.0.4.tgz#9315dfab80882bbfd86ddf1b706f53622dc400cc"
+ integrity sha512-3x3jwTd6UPG7vi5k4GEzvxJ5rDA7hVUIRNHPblKuMVP9Z3xmlsd9cgLcpAMkc5uPOBna82EeshROFhsPkbnTZg==
+
+nlcst-types@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/nlcst-types/-/nlcst-types-1.2.4.tgz#5ca7c79d8cf8b070e7cd6c939d59c21dc1fd73d0"
+ integrity sha512-8wlNDXWlAk/i+QCFRDGet3ICLrFaHNc4+bF51VywnZmRuW0oVT5qnskHNebEWe1JNpU0ECI1oLqMDYaj91fzSA==
+ dependencies:
+ unist-types "^1.1.5"
+
+no-cliches@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/no-cliches/-/no-cliches-0.1.1.tgz#c0afaef1011333d72aa3bf85382601ef81ae681c"
+ integrity sha512-mYihjs47X5+N71CN3P+QBrEIBuclIfMMpgWEpkmLqFPvrOXdzokvDlhbLfjdBNZOqYgniaeZC6J1ZCgxFdyvXw==
+
+no-cliches@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/no-cliches/-/no-cliches-0.3.0.tgz#c15f6fe6bff747a34d0475d7efe22c6754fba264"
+ integrity sha512-F5RA5GyDsJ9dYx2nFwzzy371BbFTBInQ/gO6arT+ngrI+1sDP5cSZxkWsVLgRoLMln4rs3xXBLjD2sLa7TnV1g==
+
+nock@^13.0.0:
+ version "13.0.7"
+ resolved "https://registry.yarnpkg.com/nock/-/nock-13.0.7.tgz#9bc718c66bd0862dfa14601a9ba678a406127910"
+ integrity sha512-WBz73VYIjdbO6BwmXODRQLtn7B5tldA9pNpWJe5QTtTEscQlY5KXU4srnGzBOK2fWakkXj69gfTnXGzmrsaRWw==
+ dependencies:
+ debug "^4.1.0"
+ json-stringify-safe "^5.0.1"
+ lodash.set "^4.3.2"
+ propagate "^2.0.0"
+
+node-fetch@^2.6.0, 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-int64@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+ integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
+
+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"
+ integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
+
+node-notifier@^8.0.0:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.1.tgz#f86e89bbc925f2b068784b31f382afdc6ca56be1"
+ integrity sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==
+ dependencies:
+ growly "^1.3.0"
+ is-wsl "^2.2.0"
+ semver "^7.3.2"
+ shellwords "^0.1.1"
+ uuid "^8.3.0"
+ which "^2.0.2"
+
+node-releases@^1.1.70:
+ version "1.1.70"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.70.tgz#66e0ed0273aa65666d7fe78febe7634875426a08"
+ integrity sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ resolve "^1.10.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+normalize-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-url@^4.1.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129"
+ integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ dependencies:
+ path-key "^2.0.0"
+
+npm-run-path@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+ dependencies:
+ path-key "^3.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+nwsapi@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
+ integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
+
+oauth-sign@~0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+object-assign@^4.0.1, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-inspect@^1.9.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a"
+ integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==
+
+object-is@^1.0.1:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac"
+ integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
+object-keys@^1.0.12, object-keys@^1.0.9, object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-keys@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336"
+ integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.assign@^4.0.4, object.assign@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
+ integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ has-symbols "^1.0.1"
+ object-keys "^1.1.1"
+
+object.entries@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6"
+ integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.1"
+ has "^1.0.3"
+
+object.fromentries@^2.0.2:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8"
+ integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.2"
+ has "^1.0.3"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+object.values@^1.1.0, object.values@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731"
+ integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.1"
+ has "^1.0.3"
+
+once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+onetime@^5.1.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+ integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+ dependencies:
+ mimic-fn "^2.1.0"
+
+optionator@^0.8.1:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+ integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.6"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ word-wrap "~1.2.3"
+
+optionator@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
+ integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+ dependencies:
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+ word-wrap "^1.2.3"
+
+p-cancelable@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
+ integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==
+
+p-defer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
+ integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
+
+p-each-series@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a"
+ integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-is-promise@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
+ integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==
+
+p-limit@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+ dependencies:
+ p-try "^1.0.0"
+
+p-limit@^2.0.0, p-limit@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ dependencies:
+ p-try "^2.0.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+ dependencies:
+ p-limit "^1.1.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
+p-memoize@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/p-memoize/-/p-memoize-3.1.0.tgz#ac7587983c9e530139f969ca7b41ef40e93659aa"
+ integrity sha512-e5tIvrsr7ydUUnxb534iQWtXxWgk/86IsH+H+nV4FHouIggBt4coXboKBt26o4lTu7JbEnGSeXdEsYR8BhAHFA==
+ dependencies:
+ mem "^4.3.0"
+ mimic-fn "^2.1.0"
+
+p-queue@^6.2.0:
+ version "6.6.2"
+ resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426"
+ integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==
+ dependencies:
+ eventemitter3 "^4.0.4"
+ p-timeout "^3.2.0"
+
+p-timeout@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe"
+ integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==
+ dependencies:
+ p-finally "^1.0.0"
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+package-json@^6.3.0:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0"
+ integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==
+ dependencies:
+ got "^9.6.0"
+ registry-auth-token "^4.0.0"
+ registry-url "^5.0.0"
+ semver "^6.2.0"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-english@^4.0.0, parse-english@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/parse-english/-/parse-english-4.2.0.tgz#037b68f34d1a1bdf3d33668b87791bdfc1f01e1e"
+ integrity sha512-jw5N6wZUZViIw3VLG/FUSeL3vDhfw5Q2g4E3nYC69Mm5ANbh9ZWd+eligQbeUoyObZM8neynTn3l14e09pjEWg==
+ dependencies:
+ nlcst-to-string "^2.0.0"
+ parse-latin "^4.0.0"
+ unist-util-modify-children "^2.0.0"
+ unist-util-visit-children "^1.0.0"
+
+parse-entities@^1.1.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50"
+ integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==
+ dependencies:
+ character-entities "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ character-reference-invalid "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-hexadecimal "^1.0.0"
+
+parse-entities@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"
+ integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==
+ dependencies:
+ character-entities "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ character-reference-invalid "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-hexadecimal "^1.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+parse-json@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+ integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+ dependencies:
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+
+parse-json@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+ integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-even-better-errors "^2.3.0"
+ lines-and-columns "^1.1.6"
+
+parse-latin@^4.0.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/parse-latin/-/parse-latin-4.3.0.tgz#1a70fc5601743baa06c5f12253c334fc94b4a917"
+ integrity sha512-TYKL+K98dcAWoCw/Ac1yrPviU8Trk+/gmjQVaoWEFDZmVD4KRg6c/80xKqNNFQObo2mTONgF8trzAf2UTwKafw==
+ dependencies:
+ nlcst-to-string "^2.0.0"
+ unist-util-modify-children "^2.0.0"
+ unist-util-visit-children "^1.0.0"
+
+parse5@5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
+ integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
+
+parse5@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
+ integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+passive-voice@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/passive-voice/-/passive-voice-0.1.0.tgz#16ff91ae40ba0e92c43e671763fdc842a70270b1"
+ integrity sha1-Fv+RrkC6DpLEPmcXY/3IQqcCcLE=
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-key@^2.0.0, path-key@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-key@^3.0.0, path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+ integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+path-to-glob-pattern@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-to-glob-pattern/-/path-to-glob-pattern-1.0.2.tgz#473e6a3a292a9d13fbae3edccee72d3baba8c619"
+ integrity sha1-Rz5qOikqnRP7rj7czuctO6uoxhk=
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+path-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+ integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
+ dependencies:
+ pify "^2.0.0"
+
+path-type@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+ integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
+ dependencies:
+ pify "^3.0.0"
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+pause-stream@0.0.11:
+ version "0.0.11"
+ resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"
+ integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=
+ dependencies:
+ through "~2.3"
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+
+picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
+ integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+ integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pirates@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
+ integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
+ dependencies:
+ node-modules-regexp "^1.0.0"
+
+pkg-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+ integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
+ dependencies:
+ find-up "^2.1.0"
+
+pkg-dir@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
+pluralize@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-2.0.0.tgz#72b726aa6fac1edeee42256c7d8dc256b335677f"
+ integrity sha1-crcmqm+sHt7uQiVsfY3CVrM1Z38=
+
+pluralize@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1"
+ integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+
+prepend-http@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
+ integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
+
+prettier@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5"
+ integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==
+
+pretty-format@^26.0.0, pretty-format@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93"
+ integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==
+ dependencies:
+ "@jest/types" "^26.6.2"
+ ansi-regex "^5.0.0"
+ ansi-styles "^4.0.0"
+ react-is "^17.0.1"
+
+process-nextick-args@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+ integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+progress@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+prompts@^2.0.1:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7"
+ integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==
+ dependencies:
+ kleur "^3.0.3"
+ sisteransi "^1.0.5"
+
+prop-types@^15.7.2:
+ version "15.7.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+ integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.8.1"
+
+propagate@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45"
+ integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==
+
+proper-lockfile@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-1.2.0.tgz#ceff5dd89d3e5f10fb75e1e8e76bc75801a59c34"
+ integrity sha1-zv9d2J0+XxD7deHo52vHWAGlnDQ=
+ dependencies:
+ err-code "^1.0.0"
+ extend "^3.0.0"
+ graceful-fs "^4.1.2"
+ retry "^0.10.0"
+
+property-information@^5.0.0:
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69"
+ integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==
+ dependencies:
+ xtend "^4.0.0"
+
+psl@^1.1.28:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
+ integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
+
+pump-chain@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pump-chain/-/pump-chain-1.0.0.tgz#7d57d8d9ad8181ea808f5413c4f2bc1e786a5e37"
+ integrity sha1-fVfY2a2BgeqAj1QTxPK8HnhqXjc=
+ dependencies:
+ bubble-stream-error "^1.0.0"
+ pump "^1.0.1"
+ sliced "^1.0.1"
+
+pump@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954"
+ integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+punycode@^2.1.0, punycode@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+pupa@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62"
+ integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==
+ dependencies:
+ escape-goat "^2.0.0"
+
+qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
+queue-microtask@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.2.tgz#abf64491e6ecf0f38a6502403d4cda04f372dfd3"
+ integrity sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==
+
+quick-lru@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
+ integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
+
+quotation@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/quotation/-/quotation-1.1.3.tgz#2a4d11f70105ad398b577883f310469367f53351"
+ integrity sha512-45gUgmX/RtQOQV1kwM06boP49OYXcKCPrYwdmAvs5YqkpiobhNKKwo524JM6Ma0ko3oN9tXNcWs9+ABq3Ry7YA==
+
+rc-config-loader@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/rc-config-loader/-/rc-config-loader-3.0.0.tgz#1484ed55d6fb8b21057699c8426370f7529c52a7"
+ integrity sha512-bwfUSB37TWkHfP+PPjb/x8BUjChFmmBK44JMfVnU7paisWqZl/o5k7ttCH+EQLnrbn2Aq8Fo1LAsyUiz+WF4CQ==
+ dependencies:
+ debug "^4.1.1"
+ js-yaml "^3.12.0"
+ json5 "^2.1.1"
+ require-from-string "^2.0.2"
+
+rc@^1.2.8:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+react-is@^16.8.1:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react-is@^17.0.1:
+ version "17.0.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339"
+ integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==
+
+read-pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^2.0.0"
+
+read-pkg-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
+ integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^3.0.0"
+
+read-pkg-up@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
+ integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==
+ dependencies:
+ find-up "^4.1.0"
+ read-pkg "^5.2.0"
+ type-fest "^0.8.1"
+
+read-pkg@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+read-pkg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+ integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
+ dependencies:
+ load-json-file "^2.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^2.0.0"
+
+read-pkg@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
+ integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
+ dependencies:
+ load-json-file "^4.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^3.0.0"
+
+read-pkg@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
+ integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
+ dependencies:
+ "@types/normalize-package-data" "^2.4.0"
+ normalize-package-data "^2.5.0"
+ parse-json "^5.0.0"
+ type-fest "^0.6.0"
+
+readable-stream@^2.2.2:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readable-stream@^3.0.2:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+ integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readable-stream@~1.0.17:
+ version "1.0.34"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readable-stream@~2.0.0:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
+ integrity sha1-j5A0HmilPMySh4jaz80Rs265t44=
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+rebass@^4.0.7:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/rebass/-/rebass-4.0.7.tgz#0a84e5558750c1f416c3baf41ec4c7fc8d64a98a"
+ integrity sha512-GJot6j6Qcr7jk1QIgf9qBoud75CGRpN8pGcEo98TSp4KNSWV01ZLvGwFKGI35oEBuNs+lpEd3+pnwkQUTSFytg==
+ dependencies:
+ reflexbox "^4.0.6"
+
+redent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
+ integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
+ dependencies:
+ indent-string "^4.0.0"
+ strip-indent "^3.0.0"
+
+reflexbox@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/reflexbox/-/reflexbox-4.0.6.tgz#fc756d2cc1ca493baf9b96bb27dd640ad8154cf1"
+ integrity sha512-UNUL4YoJEXAPjRKHuty1tuOk+LV1nDJ2KYViDcH7lYm5yU3AQ+EKNXxPU3E14bQNK/pE09b1hYl+ZKdA94tWLQ==
+ dependencies:
+ "@emotion/core" "^10.0.0"
+ "@emotion/styled" "^10.0.0"
+ "@styled-system/css" "^5.0.0"
+ "@styled-system/should-forward-prop" "^5.0.0"
+ styled-system "^5.0.0"
+
+regenerator-runtime@^0.13.4:
+ version "0.13.7"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
+ integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regexp-tree@^0.1.20, regexp-tree@^0.1.22, regexp-tree@~0.1.1:
+ version "0.1.23"
+ resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.23.tgz#8a8ce1cc5e971acef62213a7ecdb1f6e18a1f1b2"
+ integrity sha512-+7HWfb4Bvu8Rs2eQTUIpX9I/PlQkYOuTNbRpKLJlQpSgwSkzFYh+pUj0gtvglnOZLKB6YgnIgRuJ2/IlpL48qw==
+
+regexp.prototype.flags@^1.1.1, regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26"
+ integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
+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==
+
+regextras@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.7.1.tgz#be95719d5f43f9ef0b9fa07ad89b7c606995a3b2"
+ integrity sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w==
+
+registry-auth-token@^4.0.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250"
+ integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==
+ dependencies:
+ rc "^1.2.8"
+
+registry-url@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009"
+ integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==
+ dependencies:
+ rc "^1.2.8"
+
+rehype-parse@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-7.0.1.tgz#58900f6702b56767814afc2a9efa2d42b1c90c57"
+ integrity sha512-fOiR9a9xH+Le19i4fGzIEowAbwG7idy2Jzs4mOrFWBSJ0sNUgy0ev871dwWnbOo371SjgjG4pwzrbgSVrKxecw==
+ dependencies:
+ hast-util-from-parse5 "^6.0.0"
+ parse5 "^6.0.0"
+
+rehype-retext@^2.0.1:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/rehype-retext/-/rehype-retext-2.0.4.tgz#63badf6ce7bf1f39d50c4d895569965c497ffe09"
+ integrity sha512-OnGX5RE8WyEs/Snz+Bs8DM9uGdrNUXMhCC7CW3S1cIZVOC90VdewdE+71kpG6LOzS0xwgZyItwrhjGv+oQgwkQ==
+ dependencies:
+ hast-util-to-nlcst "^1.0.0"
+
+remark-frontmatter@^1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-1.3.3.tgz#67ec63c89da5a84bb793ecec166e11b4eb47af10"
+ integrity sha512-fM5eZPBvu2pVNoq3ZPW22q+5Ativ1oLozq2qYt9I2oNyxiUd/tDl0iLLntEVAegpZIslPWg1brhcP1VsaSVUag==
+ dependencies:
+ fault "^1.0.1"
+ xtend "^4.0.1"
+
+remark-frontmatter@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-2.0.0.tgz#c9b8539c27cd23b1672c7e0fcbd5795eeedb4dc1"
+ integrity sha512-uNOQt4tO14qBFWXenF0MLC4cqo3dv8qiHPGyjCl1rwOT0LomSHpcElbjjVh5CwzElInB38HD8aSRVugKQjeyHA==
+ dependencies:
+ fault "^1.0.1"
+
+remark-mdx@^1.6.16:
+ version "1.6.22"
+ resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.22.tgz#06a8dab07dcfdd57f3373af7f86bd0e992108bbd"
+ integrity sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==
+ dependencies:
+ "@babel/core" "7.12.9"
+ "@babel/helper-plugin-utils" "7.10.4"
+ "@babel/plugin-proposal-object-rest-spread" "7.12.1"
+ "@babel/plugin-syntax-jsx" "7.12.1"
+ "@mdx-js/util" "1.6.22"
+ is-alphabetical "1.0.4"
+ remark-parse "8.0.3"
+ unified "9.2.0"
+
+remark-mdx@^2.0.0-next.7:
+ version "2.0.0-next.8"
+ resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-2.0.0-next.8.tgz#db1c3cbc606ea0d01526242199bb134d99020363"
+ integrity sha512-mjP0yo6BgjYrx5a+gKWYRFWbGnRiWi4Fdf17xGCr9VkSMnG4Dyo06spqbaLfHwl0KkQ/RQZlR2sn1mKnYduJdw==
+ dependencies:
+ parse-entities "^2.0.0"
+ remark-stringify "^8.1.0"
+ stringify-entities "^3.0.1"
+ strip-indent "^3.0.0"
+ unist-util-stringify-position "^2.0.3"
+
+remark-message-control@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/remark-message-control/-/remark-message-control-6.0.0.tgz#955b054b38c197c9f2e35b1d88a4912949db7fc5"
+ integrity sha512-k9bt7BYc3G7YBdmeAhvd3VavrPa/XlKWR3CyHjr4sLO9xJyly8WHHT3Sp+8HPR8lEUv+/sZaffL7IjMLV0f6BA==
+ dependencies:
+ mdast-comment-marker "^1.0.0"
+ unified-message-control "^3.0.0"
+
+remark-parse@8.0.3, remark-parse@^8.0.0, remark-parse@^8.0.3:
+ version "8.0.3"
+ resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1"
+ integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==
+ dependencies:
+ ccount "^1.0.0"
+ collapse-white-space "^1.0.2"
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-whitespace-character "^1.0.0"
+ is-word-character "^1.0.0"
+ markdown-escapes "^1.0.0"
+ parse-entities "^2.0.0"
+ repeat-string "^1.5.4"
+ state-toggle "^1.0.0"
+ trim "0.0.1"
+ trim-trailing-lines "^1.0.0"
+ unherit "^1.0.4"
+ unist-util-remove-position "^2.0.0"
+ vfile-location "^3.0.0"
+ xtend "^4.0.1"
+
+remark-parse@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95"
+ integrity sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==
+ dependencies:
+ collapse-white-space "^1.0.2"
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-whitespace-character "^1.0.0"
+ is-word-character "^1.0.0"
+ markdown-escapes "^1.0.0"
+ parse-entities "^1.1.0"
+ repeat-string "^1.5.4"
+ state-toggle "^1.0.0"
+ trim "0.0.1"
+ trim-trailing-lines "^1.0.0"
+ unherit "^1.0.4"
+ unist-util-remove-position "^1.0.0"
+ vfile-location "^2.0.0"
+ xtend "^4.0.1"
+
+remark-retext@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/remark-retext/-/remark-retext-4.0.0.tgz#255ed98ac3e0a68da5c6ba4f172299b8d062bb28"
+ integrity sha512-cYCchalpf25bTtfXF24ribYvqytPKq0TiEhqQDBHvVEEsApebwruPWP1cTcvTFBidmpXyqzycm+y8ng7Kmvc8Q==
+ dependencies:
+ mdast-util-to-nlcst "^4.0.0"
+
+remark-stringify@^8.1.0, remark-stringify@^8.1.1:
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-8.1.1.tgz#e2a9dc7a7bf44e46a155ec78996db896780d8ce5"
+ integrity sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==
+ dependencies:
+ ccount "^1.0.0"
+ is-alphanumeric "^1.0.0"
+ is-decimal "^1.0.0"
+ is-whitespace-character "^1.0.0"
+ longest-streak "^2.0.1"
+ markdown-escapes "^1.0.0"
+ markdown-table "^2.0.0"
+ mdast-util-compact "^2.0.0"
+ parse-entities "^2.0.0"
+ repeat-string "^1.5.4"
+ state-toggle "^1.0.0"
+ stringify-entities "^3.0.0"
+ unherit "^1.0.4"
+ xtend "^4.0.1"
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+
+repeat-element@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+ integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
+
+repeat-string@^1.0.0, repeat-string@^1.5.0, repeat-string@^1.5.4, repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+replace-ext@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
+ integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=
+
+request-promise-core@1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f"
+ integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==
+ dependencies:
+ lodash "^4.17.19"
+
+request-promise-native@^1.0.8:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28"
+ integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==
+ dependencies:
+ request-promise-core "1.1.4"
+ stealthy-require "^1.1.1"
+ tough-cookie "^2.3.3"
+
+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==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.3"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
+ performance-now "^2.1.0"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.5.0"
+ tunnel-agent "^0.6.0"
+ uuid "^3.3.2"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-from-string@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+ integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
+require-main-filename@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+ integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
+requireindex@^1.2.0, requireindex@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef"
+ integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==
+
+requireindex@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162"
+ integrity sha1-5UBLgVV+91225JxacgBIk/4D4WI=
+
+reserved-words@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1"
+ integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=
+
+resolve-cwd@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+ integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+ dependencies:
+ resolve-from "^5.0.0"
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-from@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+ integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2:
+ version "1.20.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
+ integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
+ dependencies:
+ is-core-module "^2.2.0"
+ path-parse "^1.0.6"
+
+responselike@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
+ integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=
+ dependencies:
+ lowercase-keys "^1.0.0"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+retext-english@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/retext-english/-/retext-english-3.0.4.tgz#f978828d51fbcee842bc3807a45b7f709822ea8d"
+ integrity sha512-yr1PgaBDde+25aJXrnt3p1jvT8FVLVat2Bx8XeAWX13KXo8OT+3nWGU3HWxM4YFJvmfqvJYJZG2d7xxaO774gw==
+ dependencies:
+ parse-english "^4.0.0"
+ unherit "^1.0.4"
+
+retext-equality@~5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/retext-equality/-/retext-equality-5.5.0.tgz#d01e7251f11bfa3bbc9c47f4047a40c2eb84fa28"
+ integrity sha512-ha7zrQ+Bq4xWifm21IcAzc9xhMWCJYfePUjRRNE2mXi8cFhaq1F8+cD78YA2nd6W2mxd11VGTVKY9O0DmzEywQ==
+ dependencies:
+ nlcst-normalize "^2.0.0"
+ nlcst-search "^2.0.0"
+ nlcst-to-string "^2.0.0"
+ quotation "^1.0.0"
+ unist-util-is "^4.0.0"
+ unist-util-visit "^2.0.0"
+
+retext-profanities@~6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/retext-profanities/-/retext-profanities-6.1.0.tgz#95c0af011ac66df980b85b47655c770cb18abf44"
+ integrity sha512-40Ym0WOgy7rRY4tR2iL01g3Y5Ql+9NBV21hycIhNX3uv+6vjaWB30NWN+tTcxNIWBJEwXHoTDMiVdAMm6ZpHVA==
+ dependencies:
+ cuss "^1.15.0"
+ lodash.difference "^4.5.0"
+ lodash.intersection "^4.4.0"
+ nlcst-search "^2.0.0"
+ nlcst-to-string "^2.0.0"
+ object-keys "^1.0.9"
+ pluralize "^8.0.0"
+ quotation "^1.0.0"
+
+retry@^0.10.0:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4"
+ integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rimraf@2.6.3:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@^3.0.0, rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+rsvp@^4.8.4:
+ version "4.8.5"
+ resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
+ integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+safe-regex@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2"
+ integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==
+ dependencies:
+ regexp-tree "~0.1.1"
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sane@^4.0.3:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded"
+ integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==
+ dependencies:
+ "@cnakazawa/watch" "^1.0.3"
+ anymatch "^2.0.0"
+ capture-exit "^2.0.0"
+ exec-sh "^0.3.2"
+ execa "^1.0.0"
+ fb-watchman "^2.0.0"
+ micromatch "^3.1.4"
+ minimist "^1.1.1"
+ walker "~1.0.5"
+
+saxes@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
+ integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
+ dependencies:
+ xmlchars "^2.2.0"
+
+select-section@^0.4.0:
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/select-section/-/select-section-0.4.6.tgz#4e224bd7ee44cb28c55c72edb0009c80a7e7093a"
+ integrity sha512-0WGMcD/Q6SoD/I3TfZyOstTpXZ0J072Qr+vdH+fCMEc5Z+4u/hFRQzc9prVlUpStHWH7phJ44+9nIVySyEQmTg==
+ dependencies:
+ map-like "^1.0.3"
+ txt-ast-traverse "^1.2.1"
+
+semver-diff@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b"
+ integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==
+ dependencies:
+ semver "^6.3.0"
+
+"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@7.3.2:
+ version "7.3.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
+ integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
+
+semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4:
+ version "7.3.4"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
+ integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
+ dependencies:
+ lru-cache "^6.0.0"
+
+semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+sentence-splitter@2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/sentence-splitter/-/sentence-splitter-2.3.2.tgz#5ad33cd0e6ae171d58c88f6bfef16a9ed04f3a79"
+ integrity sha512-QnpHNykm4nI4T6mT+NoVayh9Ixl5DohYCSVqMgPJsO2WejOcqaYTh4HQOkmzaDzXH3NO5pif4z/hpo2NGtgNlg==
+ dependencies:
+ concat-stream "^1.5.2"
+ structured-source "^3.0.2"
+
+sentence-splitter@^3.0.11:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/sentence-splitter/-/sentence-splitter-3.2.0.tgz#fb2cd2f61f40006643ba83d9acf4609233c1c68c"
+ integrity sha512-lKX2tZ1rsA9Tu0gW8vRmMDmIEJoZ1d7cKpzcbFZdUrSpCR6gy/7OPPh7jjT/6Oc6Z79ToUmC2l8tyTEGanVmiA==
+ dependencies:
+ "@textlint/ast-node-types" "^4.2.5"
+ concat-stream "^2.0.0"
+ object.values "^1.1.0"
+ structured-source "^3.0.2"
+
+set-blocking@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+shellwords@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
+ integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
+
+side-channel@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
+ integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
+ dependencies:
+ call-bind "^1.0.0"
+ get-intrinsic "^1.0.2"
+ object-inspect "^1.9.0"
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
+ integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
+
+sisteransi@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
+ integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slice-ansi@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+ integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=
+
+slice-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
+ integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
+ dependencies:
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
+
+sliced@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41"
+ integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+source-map-resolve@^0.5.0:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+ integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
+ dependencies:
+ atob "^2.1.2"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@^0.5.6:
+ version "0.5.19"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
+ integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
+ integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
+
+source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+source-map@^0.7.3:
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
+ integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
+
+space-separated-tokens@^1.0.0:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899"
+ integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==
+
+spawn-to-readstream@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/spawn-to-readstream/-/spawn-to-readstream-0.1.3.tgz#96768b72739ac64ffa77c8ce2cbf98c2d21d8dbf"
+ integrity sha1-lnaLcnOaxk/6d8jOLL+YwtIdjb8=
+ dependencies:
+ limit-spawn "0.0.3"
+ through2 "~0.4.1"
+
+spdx-correct@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
+ integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
+ integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
+
+spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
+ integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.7"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65"
+ integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+split-transform-stream@0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/split-transform-stream/-/split-transform-stream-0.1.1.tgz#825236a78d52a18ff912a631ad3034c15ded5fe3"
+ integrity sha1-glI2p41SoY/5EqYxrTA0wV3tX+M=
+ dependencies:
+ bubble-stream-error "~0.0.1"
+ event-stream "~3.1.5"
+ through2 "~0.4.2"
+
+split@0.2:
+ version "0.2.10"
+ resolved "https://registry.yarnpkg.com/split/-/split-0.2.10.tgz#67097c601d697ce1368f418f06cd201cf0521a57"
+ integrity sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=
+ dependencies:
+ through "2"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+sshpk@^1.7.0:
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
+ integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
+ ecc-jsbn "~0.1.1"
+ getpass "^0.1.1"
+ jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
+ tweetnacl "~0.14.0"
+
+stack-utils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277"
+ integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==
+ dependencies:
+ escape-string-regexp "^2.0.0"
+
+state-toggle@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe"
+ integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+stealthy-require@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
+ integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
+
+stream-combiner@~0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14"
+ integrity sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=
+ dependencies:
+ duplexer "~0.1.1"
+
+string-length@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1"
+ integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==
+ dependencies:
+ char-regex "^1.0.2"
+ strip-ansi "^6.0.0"
+
+string-width@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string-width@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string-width@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+ integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+ dependencies:
+ emoji-regex "^7.0.1"
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^5.1.0"
+
+string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
+ integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.0"
+
+string.prototype.matchall@^4.0.2:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz#608f255e93e072107f5de066f81a2dfb78cf6b29"
+ integrity sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.2"
+ has-symbols "^1.0.1"
+ internal-slot "^1.0.3"
+ regexp.prototype.flags "^1.3.1"
+ side-channel "^1.0.4"
+
+string.prototype.trimend@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b"
+ integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+
+string.prototype.trimstart@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa"
+ integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+
+string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+stringify-entities@^3.0.0, stringify-entities@^3.0.1:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-3.1.0.tgz#b8d3feac256d9ffcc9fa1fefdcf3ca70576ee903"
+ integrity sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==
+ dependencies:
+ character-entities-html4 "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ xtend "^4.0.0"
+
+strip-ansi@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-ansi@^5.1.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+ dependencies:
+ ansi-regex "^4.1.0"
+
+strip-ansi@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+ integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+ dependencies:
+ ansi-regex "^5.0.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-bom@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
+ integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-final-newline@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
+strip-indent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
+ integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
+ dependencies:
+ min-indent "^1.0.0"
+
+strip-json-comments@^3.0.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+structured-source@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/structured-source/-/structured-source-3.0.2.tgz#dd802425e0f53dc4a6e7aca3752901a1ccda7af5"
+ integrity sha1-3YAkJeD1PcSm56yjdSkBoczaevU=
+ dependencies:
+ boundary "^1.0.1"
+
+styled-system@^5.0.0, styled-system@^5.1.5:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/styled-system/-/styled-system-5.1.5.tgz#e362d73e1dbb5641a2fd749a6eba1263dc85075e"
+ integrity sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==
+ dependencies:
+ "@styled-system/background" "^5.1.2"
+ "@styled-system/border" "^5.1.5"
+ "@styled-system/color" "^5.1.2"
+ "@styled-system/core" "^5.1.2"
+ "@styled-system/flexbox" "^5.1.2"
+ "@styled-system/grid" "^5.1.2"
+ "@styled-system/layout" "^5.1.2"
+ "@styled-system/position" "^5.1.2"
+ "@styled-system/shadow" "^5.1.2"
+ "@styled-system/space" "^5.1.2"
+ "@styled-system/typography" "^5.1.2"
+ "@styled-system/variant" "^5.1.5"
+ object-assign "^4.1.1"
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+ integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.0.0, supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-hyperlinks@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47"
+ integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==
+ dependencies:
+ has-flag "^4.0.0"
+ supports-color "^7.0.0"
+
+symbol-tree@^3.2.4:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+ integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+
+table@^3.8.3:
+ version "3.8.3"
+ resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
+ integrity sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=
+ dependencies:
+ ajv "^4.7.0"
+ ajv-keywords "^1.0.0"
+ chalk "^1.1.1"
+ lodash "^4.0.0"
+ slice-ansi "0.0.4"
+ string-width "^2.0.0"
+
+table@^6.0.4:
+ version "6.0.7"
+ resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34"
+ integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==
+ dependencies:
+ ajv "^7.0.2"
+ lodash "^4.17.20"
+ slice-ansi "^4.0.0"
+ string-width "^4.2.0"
+
+term-size@^2.1.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54"
+ integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==
+
+terminal-link@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
+ integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ supports-hyperlinks "^2.0.0"
+
+test-exclude@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
+ integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
+ dependencies:
+ "@istanbuljs/schema" "^0.1.2"
+ glob "^7.1.4"
+ minimatch "^3.0.4"
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
+textlint-rule-abbr-within-parentheses@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/textlint-rule-abbr-within-parentheses/-/textlint-rule-abbr-within-parentheses-1.0.2.tgz#8d49dd02b3a7a88d7e6b32817f9e202c5c6596b9"
+ integrity sha1-jUndArOnqI1+azKBf54gLFxllrk=
+ dependencies:
+ match-index "^1.0.1"
+
+textlint-rule-alex@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/textlint-rule-alex/-/textlint-rule-alex-3.0.0.tgz#2201735f5861c26ff5ae8951bcc35c2095999aa3"
+ integrity sha512-z/Xo1WHxAn7eueUbRLXoMNew+R3dzGENPG/yiCt/KT2WgAfRuQ7GeF855kLcnCCqdTnl6W7sYq8TKy+/DLpiqQ==
+ dependencies:
+ alex "^9.0.1"
+ textlint-rule-helper "^2.1.1"
+
+textlint-rule-apostrophe@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/textlint-rule-apostrophe/-/textlint-rule-apostrophe-2.0.0.tgz#2a2d8ce02428e2c487fa5e3f0a2b3b776ef348a9"
+ integrity sha512-iA0YlUBLS4/YNswvOzG44zo/tJ+xhcLYjyzI9iPia9+jxCQ5NGLlRXHTdtwWPvTTpCk3cn9vlcxYma7wdYyWzg==
+
+textlint-rule-common-misspellings@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/textlint-rule-common-misspellings/-/textlint-rule-common-misspellings-1.0.1.tgz#8c4133cf3bb59aa159199d2c9bced12413365774"
+ integrity sha1-jEEzzzu1mqFZGZ0sm87RJBM2V3Q=
+ dependencies:
+ misspellings "^1.0.1"
+ textlint-rule-helper "^1.1.5"
+
+textlint-rule-diacritics@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/textlint-rule-diacritics/-/textlint-rule-diacritics-1.0.0.tgz#3f34e2b72633a8e2eee3993678a3f80a2ad0e47e"
+ integrity sha512-hhJvDZzhV+sKD7walPQ4VmWkBw5o1T/lFLRsoDsAJF+LYhD89R5/L4yFVtxFRUkP9VZ5cvoUIPkYjZvkPEawTA==
+ dependencies:
+ match-casing "^1.0.2"
+ strip-json-comments "^3.0.1"
+
+textlint-rule-en-capitalization@2.0.3, textlint-rule-en-capitalization@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/textlint-rule-en-capitalization/-/textlint-rule-en-capitalization-2.0.3.tgz#6b05e5adcc58caed87abfe6fefea88e20c89d7e5"
+ integrity sha512-tIx2gzm3okWfK5+0NNV1ap21LHk9PTc2/IXNqFhd7RDVSqv7YFaZnhwL+UrBZXTEfOh6VgnTQd81Os2Akzas5g==
+ dependencies:
+ en-pos "^1.0.16"
+ sentence-splitter "^3.0.11"
+ textlint-rule-helper "^2.1.1"
+
+textlint-rule-footnote-order@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/textlint-rule-footnote-order/-/textlint-rule-footnote-order-1.0.3.tgz#fc7d586b79f6f70a9cd36de3b8583fedba925f79"
+ integrity sha512-HH4AWGi05S88XJ0HTzihOpVPDV+BRpnqt/MXnVcQBHTc6wGxNgVoBWN19o43G3D8m3GYnoUAR8UF/IbAYbKolA==
+
+textlint-rule-helper@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/textlint-rule-helper/-/textlint-rule-helper-2.0.1.tgz#f28dc20d3e06f60373aa04a97b965daa77d196b9"
+ integrity sha512-QNGSOemLVxm1b0qnH5VpRY8uyHgfx/8M+St8wSy/d6mZh0abd+KAvhQSuO8cxmVeRKr/LRkhAB3+0QU5LKhLGw==
+ dependencies:
+ unist-util-visit "^1.1.0"
+
+textlint-rule-helper@2.1.1, textlint-rule-helper@^2.0.0, textlint-rule-helper@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/textlint-rule-helper/-/textlint-rule-helper-2.1.1.tgz#d572588685359134bc779939b217e61f087dab0f"
+ integrity sha512-6fxgHzoJVkjl3LaC1b2Egi+5wbhG4i0pU0knJmQujVhxIJ3D3AcQQZPs457xKAi5xKz1WayYeTeJ5jrD/hnO7g==
+ dependencies:
+ "@textlint/ast-node-types" "^4.2.1"
+ "@textlint/types" "^1.1.2"
+ structured-source "^3.0.2"
+ unist-util-visit "^1.1.0"
+
+textlint-rule-helper@^1.1.5:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/textlint-rule-helper/-/textlint-rule-helper-1.2.0.tgz#be68d47a5146b16dd116278c9aeb7bd35631ccda"
+ integrity sha1-vmjUelFGsW3RFieMmut701YxzNo=
+ dependencies:
+ unist-util-visit "^1.1.0"
+
+textlint-rule-no-dead-link@4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/textlint-rule-no-dead-link/-/textlint-rule-no-dead-link-4.7.0.tgz#087332fa0b10f6bf13434a5317c5eefc3702ff1a"
+ integrity sha512-enqn5JHR7Xa5vtkrYBAwa1POuKoi4j2hY7RKrPX+mWgQGIFapPrxfy7Bw+2pEHfV2nLqXrLQuPo4H6/D9FvzSw==
+ dependencies:
+ fs-extra "^8.1.0"
+ get-url-origin "^1.0.1"
+ minimatch "^3.0.4"
+ node-fetch "^2.6.0"
+ p-memoize "^3.1.0"
+ p-queue "^6.2.0"
+ textlint-rule-helper "^2.1.1"
+
+textlint-rule-no-empty-section@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/textlint-rule-no-empty-section/-/textlint-rule-no-empty-section-1.1.0.tgz#137ae6b8dfcaab759fd6068bfcc1a6c941bb4607"
+ integrity sha1-E3rmuN/Kq3Wf1gaL/MGmyUG7Rgc=
+ dependencies:
+ select-section "^0.4.0"
+
+textlint-rule-no-exclamation-question-mark@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/textlint-rule-no-exclamation-question-mark/-/textlint-rule-no-exclamation-question-mark-1.1.0.tgz#5d6cf9bba6111c9619da91a3fff7c080847420b0"
+ integrity sha512-FcBH3uH2qp5VG7I9LKwolUCcPigONcsdam1JhAFPcu10YZNYX0r1l2y9Hzg+E4+1fXLgtGyiObWwfsfelTx8Bw==
+ dependencies:
+ "@textlint/regexp-string-matcher" "^1.1.0"
+ match-index "^1.0.3"
+ textlint-rule-helper "^2.1.1"
+
+textlint-rule-no-todo@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/textlint-rule-no-todo/-/textlint-rule-no-todo-2.0.1.tgz#86351ed3521ce8faa3b8224f88887f3cecbf2920"
+ integrity sha512-+adoWaBgoTN2g0WNcrERhVq7gdPKQIf1z7Ol+6XwMGv8XmuoFp5vJljHKtCmJBmGhBihjty2b8oaza2MY6UNlw==
+ dependencies:
+ textlint-rule-helper "^2.0.0"
+
+textlint-rule-terminology@2.1.5:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/textlint-rule-terminology/-/textlint-rule-terminology-2.1.5.tgz#21aaed9409e031f71fd450d024b6de9590be2489"
+ integrity sha512-VW+ea4ByLPddSUqoFkVVJF8zWnO8kqKwvC681wGFAjI4CYz9WhjEQH1ikhoEHXnd5AFXNArcjyoa8hoihrXy0w==
+ dependencies:
+ lodash "^4.17.15"
+ strip-json-comments "^3.0.1"
+ textlint-rule-helper "^2.1.1"
+
+textlint-rule-write-good@1.6.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/textlint-rule-write-good/-/textlint-rule-write-good-1.6.2.tgz#3c79b04091319d4e8be5fb442c596bf500e8493e"
+ integrity sha1-PHmwQJExnU6L5ftELFlr9QDoST4=
+ dependencies:
+ textlint-rule-helper "^2.0.0"
+ write-good "^0.11.0"
+
+textlint-tester@5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/textlint-tester/-/textlint-tester-5.0.1.tgz#968b4b34bbda2614a99ec85b82c56488c86bc255"
+ integrity sha512-MKN38gIQ9/Q3nKg1cnKUVl81bjsfoqy6yq7qptvf3733Ng22K2KoMmTyk8s8C/y7SGx8pN+idsO86DCGEB8q7w==
+ dependencies:
+ "@textlint/feature-flag" "^3.0.5"
+ "@textlint/kernel" "^3.0.0"
+ textlint "^11.0.1"
+
+textlint-util-to-string@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/textlint-util-to-string/-/textlint-util-to-string-2.1.1.tgz#7e456f16a2abc07e473cb9591acf19f110def2d1"
+ integrity sha512-PW6rXqLNGL3xZ6d5/INrX+pt8qbffmeDPLcvkBOlfNpDRFhVvNNjFmZXH86ZQjrOz9t/nNZDBXqnzqJuioJbSQ==
+ dependencies:
+ object-assign "^4.0.1"
+ structured-source "^3.0.2"
+
+textlint@11.8.2, textlint@^11.0.1:
+ version "11.8.2"
+ resolved "https://registry.yarnpkg.com/textlint/-/textlint-11.8.2.tgz#8fef172cee2a0f5883409b7565a482af182bb735"
+ integrity sha512-YrTGagGzWKXYw6VjW4uhJ1y7LoW8zqWZIr8sWgeQVIFE84+G/cHPoZ8RhFlia+RZ4YryZPNOqevuF4vG+dbKNQ==
+ dependencies:
+ "@textlint/ast-node-types" "^4.4.1"
+ "@textlint/ast-traverse" "^2.3.2"
+ "@textlint/feature-flag" "^3.3.2"
+ "@textlint/fixer-formatter" "^3.3.2"
+ "@textlint/kernel" "^3.4.2"
+ "@textlint/linter-formatter" "^3.3.2"
+ "@textlint/module-interop" "^1.2.2"
+ "@textlint/textlint-plugin-markdown" "^5.3.2"
+ "@textlint/textlint-plugin-text" "^4.3.2"
+ "@textlint/types" "^1.5.2"
+ "@textlint/utils" "^1.2.2"
+ debug "^4.3.1"
+ deep-equal "^1.1.1"
+ file-entry-cache "^5.0.1"
+ get-stdin "^5.0.1"
+ glob "^7.1.6"
+ is-file "^1.0.0"
+ log-symbols "^1.0.2"
+ map-like "^2.0.0"
+ md5 "^2.3.0"
+ mkdirp "^0.5.0"
+ optionator "^0.9.1"
+ path-to-glob-pattern "^1.0.2"
+ rc-config-loader "^3.0.0"
+ read-pkg "^1.1.0"
+ read-pkg-up "^3.0.0"
+ structured-source "^3.0.2"
+ try-resolve "^1.0.1"
+ unique-concat "^0.2.2"
+
+throat@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
+ integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==
+
+through2@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.0.tgz#f41a1c31df5e129e4314446f66eca05cd6a30480"
+ integrity sha1-9BocMd9eEp5DFERvZuygXNajBIA=
+ dependencies:
+ readable-stream "~2.0.0"
+ xtend "~4.0.0"
+
+through2@~0.4.1, through2@~0.4.2:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b"
+ integrity sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=
+ dependencies:
+ readable-stream "~1.0.17"
+ xtend "~2.1.1"
+
+through@2, through@~2.3, through@~2.3.1:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+tmpl@1.0.x:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
+ integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-readable-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771"
+ integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+to-vfile@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/to-vfile/-/to-vfile-6.1.0.tgz#5f7a3f65813c2c4e34ee1f7643a5646344627699"
+ integrity sha512-BxX8EkCxOAZe+D/ToHdDsJcVI4HqQfmw0tCkp31zf3dNP/XWIAjU4CmeuSwsSoOzOTqHPOL0KUzyZqJplkD0Qw==
+ dependencies:
+ is-buffer "^2.0.0"
+ vfile "^4.0.0"
+
+too-wordy@^0.1.4:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/too-wordy/-/too-wordy-0.1.6.tgz#97b69de6c28a176871305453f24fc747d434e9a7"
+ integrity sha512-MV5F74YF9+UYsvwXGXTh+5YP3EqH/ivwWfyFE2/YHWQQxm9jDPmkIC23nkN133Ye4nO3HTXmiMcfGqJ5xRPfOA==
+
+too-wordy@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/too-wordy/-/too-wordy-0.3.1.tgz#ae0bb3a52fc99a9fe6fd6a9018d64aab7239df5b"
+ integrity sha512-qfKDd/kxLEmbOqdtWnp/Gw1EEvW5ONZB3HehzkHNKFIx3bUrfda6qdOzxJ74vkaIaJbZyRFkBHkbY078fjAd5A==
+
+tough-cookie@^2.3.3, tough-cookie@~2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+ integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+ dependencies:
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
+tough-cookie@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2"
+ integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==
+ dependencies:
+ ip-regex "^2.1.0"
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
+tr46@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479"
+ integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==
+ dependencies:
+ punycode "^2.1.1"
+
+traverse@^0.6.6:
+ version "0.6.6"
+ resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137"
+ integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=
+
+trim-newlines@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30"
+ integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==
+
+trim-trailing-lines@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0"
+ integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==
+
+trim@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd"
+ integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0=
+
+trough@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406"
+ integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==
+
+try-resolve@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/try-resolve/-/try-resolve-1.0.1.tgz#cfde6fabd72d63e5797cfaab873abbe8e700e912"
+ integrity sha1-z95vq9ctY+V5fPqrhzq76OcA6RI=
+
+ts-jest@^26.5.1:
+ version "26.5.1"
+ resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.1.tgz#4d53ee4481552f57c1624f0bd3425c8b17996150"
+ integrity sha512-G7Rmo3OJMvlqE79amJX8VJKDiRcd7/r61wh9fnvvG8cAjhA9edklGw/dCxRSQmfZ/z8NDums5srSVgwZos1qfg==
+ dependencies:
+ "@types/jest" "26.x"
+ bs-logger "0.x"
+ buffer-from "1.x"
+ fast-json-stable-stringify "2.x"
+ jest-util "^26.1.0"
+ json5 "2.x"
+ lodash "4.x"
+ make-error "1.x"
+ mkdirp "1.x"
+ semver "7.x"
+ yargs-parser "20.x"
+
+tsconfig-paths@^3.9.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b"
+ integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==
+ dependencies:
+ "@types/json5" "^0.0.29"
+ json5 "^1.0.1"
+ 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@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a"
+ integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==
+
+tsutils@^3.17.1:
+ version "3.20.0"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.20.0.tgz#ea03ea45462e146b53d70ce0893de453ff24f698"
+ integrity sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==
+ 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"
+ integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tunnel@0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c"
+ integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+txt-ast-traverse@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/txt-ast-traverse/-/txt-ast-traverse-1.2.1.tgz#58e3fe43ddb5db5ca8b51142943b0d1b970def41"
+ integrity sha1-WOP+Q92121yotRFClDsNG5cN70E=
+
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+ dependencies:
+ prelude-ls "~1.1.2"
+
+type-detect@4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
+ integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+
+type-fest@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
+ integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
+
+type-fest@^0.13.1:
+ version "0.13.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
+ integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
+
+type-fest@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
+ integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
+
+type-fest@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
+ integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+
+typedarray-to-buffer@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+ integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+ dependencies:
+ is-typedarray "^1.0.0"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+typescript@^4.1.5:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.5.tgz#123a3b214aaff3be32926f0d8f1f6e704eb89a72"
+ integrity sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==
+
+unherit@^1.0.4:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22"
+ integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==
+ dependencies:
+ inherits "^2.0.0"
+ xtend "^4.0.0"
+
+unified-diff@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/unified-diff/-/unified-diff-3.1.0.tgz#d206fb04dd2347b03f9c1cd0057b07a330412462"
+ integrity sha512-d29qhcADmrvjgSYDLDUmmE/zvVyKUW+O3gRz6Bjj7fcv8kGBlrYBmMjnuBI+wuTou/PXaVl3hPeSh9mXZ0iGSA==
+ dependencies:
+ git-diff-tree "^1.0.0"
+ vfile-find-up "^5.0.0"
+
+unified-engine@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/unified-engine/-/unified-engine-8.0.0.tgz#e3996ff6eaecc6ca3408af92b70e25691192d17d"
+ integrity sha512-vLUezxCnjzz+ya4pYouRQVMT8k82Rk4fIj406UidRnSFJdGXFaQyQklAnalsQHJrLqAlaYPkXPUa1upfVSHGCA==
+ dependencies:
+ concat-stream "^2.0.0"
+ debug "^4.0.0"
+ fault "^1.0.0"
+ figures "^3.0.0"
+ glob "^7.0.3"
+ ignore "^5.0.0"
+ is-buffer "^2.0.0"
+ is-empty "^1.0.0"
+ is-plain-obj "^2.0.0"
+ js-yaml "^3.6.1"
+ load-plugin "^3.0.0"
+ parse-json "^5.0.0"
+ to-vfile "^6.0.0"
+ trough "^1.0.0"
+ unist-util-inspect "^5.0.0"
+ vfile-reporter "^6.0.0"
+ vfile-statistics "^1.1.0"
+
+unified-message-control@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/unified-message-control/-/unified-message-control-3.0.3.tgz#d08c4564092a507668de71451a33c0d80e734bbd"
+ integrity sha512-oY5z2n8ugjpNHXOmcgrw0pQeJzavHS0VjPBP21tOcm7rc2C+5Q+kW9j5+gqtf8vfW/8sabbsK5+P+9QPwwEHDA==
+ dependencies:
+ unist-util-visit "^2.0.0"
+ vfile-location "^3.0.0"
+
+unified@9.2.0, unified@^9.0.0, unified@^9.1.0:
+ version "9.2.0"
+ resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8"
+ integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==
+ dependencies:
+ bail "^1.0.0"
+ extend "^3.0.0"
+ is-buffer "^2.0.0"
+ is-plain-obj "^2.0.0"
+ trough "^1.0.0"
+ vfile "^4.0.0"
+
+unified@^6.1.2, unified@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba"
+ integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==
+ dependencies:
+ bail "^1.0.0"
+ extend "^3.0.0"
+ is-plain-obj "^1.1.0"
+ trough "^1.0.0"
+ vfile "^2.0.0"
+ x-is-string "^0.1.0"
+
+union-value@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^2.0.1"
+
+unique-concat@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/unique-concat/-/unique-concat-0.2.2.tgz#9210f9bdcaacc5e1e3929490d7c019df96f18712"
+ integrity sha1-khD5vcqsxeHjkpSQ18AZ35bxhxI=
+
+unique-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
+ integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==
+ dependencies:
+ crypto-random-string "^2.0.0"
+
+unist-types@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/unist-types/-/unist-types-1.1.5.tgz#f001c0af2c3b0ac6e4f5d9aa114e7afe046d7abe"
+ integrity sha512-6RSQ7sFV6pRycti5P0Al4GkKLoIsWZQw5XBAs4exX4K5XkhB9FCPzjCqLJEnmp//ekLxSq4oUKw4G0p46pxcew==
+
+unist-util-find@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/unist-util-find/-/unist-util-find-1.0.2.tgz#4d5b01a69fca2a382ad4f55f9865e402129ecf56"
+ integrity sha512-ft06UDYzqi9o9RmGP0sZWI/zvLLQiBW2/MD+rW6mDqbOWDcmknGX9orQPspfuGRYWr8eSJAmfsBcvOpfGRJseA==
+ dependencies:
+ lodash.iteratee "^4.5.0"
+ unist-util-visit "^1.1.0"
+
+unist-util-inspect@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/unist-util-inspect/-/unist-util-inspect-5.0.1.tgz#168c8770a99902318ca268f8c391e294bcf44540"
+ integrity sha512-fPNWewS593JSmg49HbnE86BJKuBi1/nMWhDSccBvbARfxezEuJV85EaARR9/VplveiwCoLm2kWq+DhP8TBaDpw==
+ dependencies:
+ is-empty "^1.0.0"
+
+unist-util-is@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd"
+ integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==
+
+unist-util-is@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.0.4.tgz#3e9e8de6af2eb0039a59f50c9b3e99698a924f50"
+ integrity sha512-3dF39j/u423v4BBQrk1AQ2Ve1FxY5W3JKwXxVFzBODQ6WEvccguhgp802qQLKSnxPODE6WuRZtV+ohlUg4meBA==
+
+unist-util-modify-children@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unist-util-modify-children/-/unist-util-modify-children-2.0.0.tgz#9c9c30d4e32502aabb3fde10d7872a17c86801e2"
+ integrity sha512-HGrj7JQo9DwZt8XFsX8UD4gGqOsIlCih9opG6Y+N11XqkBGKzHo8cvDi+MfQQgiZ7zXRUiQREYHhjOBHERTMdg==
+ dependencies:
+ array-iterate "^1.0.0"
+
+unist-util-position@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47"
+ integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==
+
+unist-util-remove-position@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020"
+ integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==
+ dependencies:
+ unist-util-visit "^1.1.0"
+
+unist-util-remove-position@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc"
+ integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==
+ dependencies:
+ unist-util-visit "^2.0.0"
+
+unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6"
+ integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==
+
+unist-util-stringify-position@^2.0.0, unist-util-stringify-position@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da"
+ integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==
+ dependencies:
+ "@types/unist" "^2.0.2"
+
+unist-util-visit-children@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-children/-/unist-util-visit-children-1.1.4.tgz#e8a087e58a33a2815f76ea1901c15dec2cb4b432"
+ integrity sha512-sA/nXwYRCQVRwZU2/tQWUqJ9JSFM1X3x7JIOsIgSzrFHcfVt6NkzDtKzyxg2cZWkCwGF9CO8x4QNZRJRMK8FeQ==
+
+unist-util-visit-parents@^2.0.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9"
+ integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==
+ dependencies:
+ unist-util-is "^3.0.0"
+
+unist-util-visit-parents@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6"
+ integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-is "^4.0.0"
+
+unist-util-visit@^1.1.0, unist-util-visit@^1.1.3:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3"
+ integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==
+ dependencies:
+ unist-util-visit-parents "^2.0.0"
+
+unist-util-visit@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c"
+ integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-is "^4.0.0"
+ unist-util-visit-parents "^3.0.0"
+
+unit-compare@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/unit-compare/-/unit-compare-1.0.1.tgz#0c7459f0e5bf53637ea873ca3cee18de2eeca386"
+ integrity sha1-DHRZ8OW/U2N+qHPKPO4Y3i7so4Y=
+ dependencies:
+ moment "^2.14.1"
+
+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@^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==
+
+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"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+update-notifier@^4.0.0:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3"
+ integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==
+ dependencies:
+ boxen "^4.2.0"
+ chalk "^3.0.0"
+ configstore "^5.0.1"
+ has-yarn "^2.1.0"
+ import-lazy "^2.1.0"
+ is-ci "^2.0.0"
+ is-installed-globally "^0.3.1"
+ is-npm "^4.0.0"
+ is-yarn-global "^0.3.0"
+ latest-version "^5.0.0"
+ pupa "^2.0.1"
+ semver-diff "^3.1.1"
+ xdg-basedir "^4.0.0"
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+url-parse-lax@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"
+ integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=
+ dependencies:
+ prepend-http "^2.0.0"
+
+url-template@^2.0.8:
+ version "2.0.8"
+ resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21"
+ integrity sha1-/FZaPMy/93MMd19WQflVV5FDnyE=
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+uuid@^3.3.2:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+ integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+
+uuid@^8.3.0, uuid@^8.3.2:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+ integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
+v8-compile-cache@^2.0.3:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132"
+ integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==
+
+v8-to-istanbul@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz#5b95cef45c0f83217ec79f8fc7ee1c8b486aee07"
+ integrity sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.1"
+ convert-source-map "^1.6.0"
+ source-map "^0.7.3"
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+vfile-find-up@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/vfile-find-up/-/vfile-find-up-5.0.1.tgz#2d3d855e99013b852c604b18a0e559acf6fd385e"
+ integrity sha512-YWx8fhWQNYpHxFkR5fDO4lCdvPcY4jfCG7qUMHVvSp14vRfkEYxFG/vUEV0eJuXoKFfiAmMkAS8dekOYnpAJ+A==
+ dependencies:
+ to-vfile "^6.0.0"
+
+vfile-location@^2.0.0:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e"
+ integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==
+
+vfile-location@^3.0.0, vfile-location@^3.1.0, vfile-location@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c"
+ integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==
+
+vfile-message@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1"
+ integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==
+ dependencies:
+ unist-util-stringify-position "^1.1.1"
+
+vfile-message@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a"
+ integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-stringify-position "^2.0.0"
+
+vfile-reporter@^6.0.0:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/vfile-reporter/-/vfile-reporter-6.0.2.tgz#cbddaea2eec560f27574ce7b7b269822c191a676"
+ integrity sha512-GN2bH2gs4eLnw/4jPSgfBjo+XCuvnX9elHICJZjVD4+NM0nsUrMTvdjGY5Sc/XG69XVTgLwj7hknQVc6M9FukA==
+ dependencies:
+ repeat-string "^1.5.0"
+ string-width "^4.0.0"
+ supports-color "^6.0.0"
+ unist-util-stringify-position "^2.0.0"
+ vfile-sort "^2.1.2"
+ vfile-statistics "^1.1.0"
+
+vfile-sort@^2.0.0, vfile-sort@^2.1.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/vfile-sort/-/vfile-sort-2.2.2.tgz#720fe067ce156aba0b411a01bb0dc65596aa1190"
+ integrity sha512-tAyUqD2R1l/7Rn7ixdGkhXLD3zsg+XLAeUDUhXearjfIcpL1Hcsj5hHpCoy/gvfK/Ws61+e972fm0F7up7hfYA==
+
+vfile-statistics@^1.1.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/vfile-statistics/-/vfile-statistics-1.1.4.tgz#b99fd15ecf0f44ba088cc973425d666cb7a9f245"
+ integrity sha512-lXhElVO0Rq3frgPvFBwahmed3X03vjPF8OcjKMy8+F1xU/3Q3QU3tKEDp743SFtb74PdF0UWpxPvtOP0GCLheA==
+
+vfile@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a"
+ integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==
+ dependencies:
+ is-buffer "^1.1.4"
+ replace-ext "1.0.0"
+ unist-util-stringify-position "^1.0.0"
+ vfile-message "^1.0.0"
+
+vfile@^4.0.0, vfile@^4.1.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624"
+ integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ is-buffer "^2.0.0"
+ unist-util-stringify-position "^2.0.0"
+ vfile-message "^2.0.0"
+
+vscode-json-languageservice@^3.7.0:
+ version "3.11.0"
+ resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-3.11.0.tgz#ad574b36c4346bd7830f1d34b5a5213d3af8d232"
+ integrity sha512-QxI+qV97uD7HHOCjh3MrM1TfbdwmTXrMckri5Tus1/FQiG3baDZb2C9Y0y8QThs7PwHYBIQXcAc59ZveCRZKPA==
+ dependencies:
+ jsonc-parser "^3.0.0"
+ vscode-languageserver-textdocument "^1.0.1"
+ vscode-languageserver-types "3.16.0-next.2"
+ vscode-nls "^5.0.0"
+ vscode-uri "^2.1.2"
+
+vscode-languageserver-textdocument@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz#178168e87efad6171b372add1dea34f53e5d330f"
+ integrity sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA==
+
+vscode-languageserver-types@3.16.0-next.2:
+ version "3.16.0-next.2"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0-next.2.tgz#940bd15c992295a65eae8ab6b8568a1e8daa3083"
+ integrity sha512-QjXB7CKIfFzKbiCJC4OWC8xUncLsxo19FzGVp/ADFvvi87PlmBSCAtZI5xwGjF5qE0xkLf0jjKUn3DzmpDP52Q==
+
+vscode-nls@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840"
+ integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==
+
+vscode-uri@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-2.1.2.tgz#c8d40de93eb57af31f3c715dd650e2ca2c096f1c"
+ integrity sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==
+
+w3c-hr-time@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
+ integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
+ dependencies:
+ browser-process-hrtime "^1.0.0"
+
+w3c-xmlserializer@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a"
+ integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==
+ dependencies:
+ xml-name-validator "^3.0.0"
+
+walker@^1.0.7, walker@~1.0.5:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
+ integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=
+ dependencies:
+ makeerror "1.0.x"
+
+weasel-words@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/weasel-words/-/weasel-words-0.1.1.tgz#7137946585c73fe44882013853bd000c5d687a4e"
+ integrity sha1-cTeUZYXHP+RIggE4U70ADF1oek4=
+
+web-namespaces@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec"
+ integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==
+
+webidl-conversions@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
+ integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==
+
+webidl-conversions@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
+ integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
+
+whatwg-encoding@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
+ integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
+ dependencies:
+ iconv-lite "0.4.24"
+
+whatwg-mimetype@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
+ integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
+
+whatwg-url@^8.0.0:
+ version "8.4.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837"
+ integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^2.0.2"
+ webidl-conversions "^6.1.0"
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which@^1.2.9:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+which@^2.0.1, which@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+widest-line@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca"
+ integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==
+ dependencies:
+ string-width "^4.0.0"
+
+word-wrap@^1.2.3, word-wrap@~1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+wordwrap@>=0.0.2:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+ integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
+
+wrap-ansi@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
+ integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write-file-atomic@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+ integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+ dependencies:
+ imurmurhash "^0.1.4"
+ is-typedarray "^1.0.0"
+ signal-exit "^3.0.2"
+ typedarray-to-buffer "^3.1.5"
+
+write-good@1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/write-good/-/write-good-1.0.7.tgz#a923988b93776164051eac687becb0413109a2e7"
+ integrity sha512-zhU9kVR9i6UBWYeYmSLa91WZYjtg8V94x8EMpByL/gTn6mW5QrD8yYTkWJC8Azx32Slq6A6NwA74R1m6Q+n9cg==
+ dependencies:
+ adverb-where "^0.2.1"
+ commander "^2.19.0"
+ e-prime "^0.10.4"
+ no-cliches "^0.3.0"
+ passive-voice "^0.1.0"
+ too-wordy "^0.3.0"
+ weasel-words "^0.1.1"
+
+write-good@^0.11.0:
+ version "0.11.3"
+ resolved "https://registry.yarnpkg.com/write-good/-/write-good-0.11.3.tgz#8eeb5da9a8e155dafb1325d27eba33cb67d24d8c"
+ integrity sha512-fDKIHO5wCzTLCOGNJl1rzzJrZlTIzfZl8msOoJQZzRhYo0X/tFTm4+2B1zTibFYK01Nnd1kLZBjj4xjcFLePNQ==
+ dependencies:
+ adverb-where "0.0.9"
+ e-prime "^0.10.2"
+ no-cliches "^0.1.0"
+ object.assign "^4.0.4"
+ passive-voice "^0.1.0"
+ too-wordy "^0.1.4"
+ weasel-words "^0.1.1"
+
+write@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
+ integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
+ dependencies:
+ mkdirp "^0.5.1"
+
+ws@^7.2.3:
+ version "7.4.3"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.3.tgz#1f9643de34a543b8edb124bdcbc457ae55a6e5cd"
+ integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==
+
+x-is-string@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82"
+ integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=
+
+xdg-basedir@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
+ integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
+
+xml-escape@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/xml-escape/-/xml-escape-1.1.0.tgz#3904c143fa8eb3a0030ec646d2902a2f1b706c44"
+ integrity sha1-OQTBQ/qOs6ADDsZG0pAqLxtwbEQ=
+
+xml-name-validator@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
+ integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+
+xmlchars@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
+ integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+
+xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+xtend@~2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b"
+ integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os=
+ dependencies:
+ object-keys "~0.4.0"
+
+y18n@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4"
+ integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yaml@^1.10.0, yaml@^1.7.2:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e"
+ integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==
+
+yargs-parser@20.x:
+ version "20.2.6"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.6.tgz#69f920addf61aafc0b8b89002f5d66e28f2d8b20"
+ integrity sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA==
+
+yargs-parser@^18.1.2, yargs-parser@^18.1.3:
+ version "18.1.3"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
+ integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs@^15.4.1:
+ version "15.4.1"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
+ integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
+ dependencies:
+ cliui "^6.0.0"
+ decamelize "^1.2.0"
+ find-up "^4.1.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^4.2.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^18.1.2"
From 6468d94426fcacccb41831b62016f34fda117ced Mon Sep 17 00:00:00 2001
From: prisis
Date: Mon, 22 Feb 2021 11:56:36 +0100
Subject: [PATCH 05/21] fix: fixed test pipe
---
.github/workflows/test.yml | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 21823181..470bdc2f 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -41,7 +41,14 @@ jobs:
- name: install
run: yarn install
- - run: yarn run all
+ - name: lint
+ run: yarn run lint
+
+ - name: build
+ run: yarn run build && yarn run pack
+
+ - name: test
+ run: yarn run test
- name: "Send code coverage report to Codecov.io"
uses: codecov/codecov-action@v1
From 11f552af261c89041f9b557c6a717a271cf0a3d3 Mon Sep 17 00:00:00 2001
From: prisis
Date: Mon, 22 Feb 2021 12:11:27 +0100
Subject: [PATCH 06/21] feat: added text lint
---
README.md | 2 +-
package.json | 8 ++++++--
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 66eca8b4..a0a298b3 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
-This [github action](https://github.com/features/actions) gives you the possibility to sync your repository with a [github template repository](https://help.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-template-repository).
+This [github action](https://github.com/features/actions) gives you the possibility to sync your repository with a [github template repository](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-template-repository).
## Example Workflow
diff --git a/package.json b/package.json
index f6561246..5fb2364a 100644
--- a/package.json
+++ b/package.json
@@ -25,8 +25,12 @@
"build": "tsc && tsc src/misc/generate-docs.ts --outDir ./lib/misc",
"format": "prettier --write **/*.ts",
"format-check": "prettier --check **/*.ts",
- "lint": "eslint ./src/**/*.ts",
- "lint:fix": "eslint --fix ./src/**/*.ts",
+ "lint": "yarn run lint:eslint && yarn run lint:text",
+ "lint:eslint": "eslint ./src/**/*.ts",
+ "lint:eslint:fix": "eslint --fix ./src/**/*.ts",
+ "lint:staged": "lint-staged",
+ "lint:text": "textlint ./.build/ISSUE_TEMPLATE/** ./src/** ./docs/** ./README.md ./UPGRADE.md --dry-run",
+ "lint:text:fix": "textlint ./.build/ISSUE_TEMPLATE/** ./src/** ./docs/** ./README.md ./UPGRADE.md --fix",
"pack": "ncc build",
"test": "jest",
"all": "yarn run format && yarn run lint && yarn run build && yarn run pack && yarn test && node lib/misc/generate-docs.js"
From f7b002bf46411fbcfb6a5d09fa4556d608f6467e Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Mon, 22 Feb 2021 11:27:12 +0000
Subject: [PATCH 07/21] chore(deps): pin dependencies
---
package.json | 6 +++
yarn.lock | 102 +++++++++++++++++++++++++--------------------------
2 files changed, 57 insertions(+), 51 deletions(-)
diff --git a/package.json b/package.json
index 5fb2364a..fc3d9f06 100644
--- a/package.json
+++ b/package.json
@@ -66,6 +66,9 @@
"yaml": "^1.10.0"
},
"devDependencies": {
+ "@anolilab/eslint-config": "1.1.3",
+ "@anolilab/textlint-config": "1.0.1",
+ "@anolilab/prettier-config": "1.0.0",
"@commitlint/cli": "^9.1.2",
"@commitlint/config-conventional": "^9.1.1",
"@commitlint/core": "^9.1.1",
@@ -95,5 +98,8 @@
"prettier": "^2.0.5",
"ts-jest": "^26.0.0",
"typescript": "^3.9.2"
+ },
+ "engines": {
+ "node": ">=12"
}
}
diff --git a/yarn.lock b/yarn.lock
index 7ef87d85..4c1a2ff9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,12 +2,12 @@
# yarn lockfile v1
-"@actions/core@^1.2.6":
+"@actions/core@1.2.6", "@actions/core@^1.2.6":
version "1.2.6"
resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.2.6.tgz#a78d49f41a4def18e88ce47c2cac615d5694bf09"
integrity sha512-ZQYitnqiyBc3D+k7LsgSBmMDVkOVidaagDG7j3fOym77jNunWRuYx7VSHa9GNfFZh+zh61xsCjRj4JxMZlDqTA==
-"@actions/exec@^1.0.0", "@actions/exec@^1.0.4":
+"@actions/exec@1.0.4", "@actions/exec@^1.0.0":
version "1.0.4"
resolved "https://registry.yarnpkg.com/@actions/exec/-/exec-1.0.4.tgz#99d75310e62e59fc37d2ee6dcff6d4bffadd3a5d"
integrity sha512-4DPChWow9yc9W3WqEbUj8Nr86xkpyE29ZzWjXucHItclLbEW6jr80Zx4nqv18QL6KK65+cifiQZXvnqgTV6oHw==
@@ -21,12 +21,12 @@
dependencies:
tunnel "0.0.6"
-"@actions/io@^1.0.1", "@actions/io@^1.0.2":
+"@actions/io@1.0.2", "@actions/io@^1.0.1":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@actions/io/-/io-1.0.2.tgz#2f614b6e69ce14d191180451eb38e6576a6e6b27"
integrity sha512-J8KuFqVPr3p6U8W93DOXlXW6zFvrQAJANdS+vw0YhusLIq+bszW8zmK2Fh1C2kDPX8FMvwIl1OUcFgvJoXLbAg==
-"@actions/tool-cache@^1.6.1":
+"@actions/tool-cache@1.6.1":
version "1.6.1"
resolved "https://registry.yarnpkg.com/@actions/tool-cache/-/tool-cache-1.6.1.tgz#5e199f7bfd9863eb2b0d467cd70751ef8042ec40"
integrity sha512-F+vwEDwfqcHMKuSkj79pihOnsAMv23EkG76nMpc82UsnXwyQdyEsktGxrB0SNtm7pRqTXEIOoAPTgrSQclXYTg==
@@ -38,7 +38,7 @@
semver "^6.1.0"
uuid "^3.3.2"
-"@anolilab/eslint-config@^1.1.3":
+"@anolilab/eslint-config@1.1.3":
version "1.1.3"
resolved "https://registry.yarnpkg.com/@anolilab/eslint-config/-/eslint-config-1.1.3.tgz#3fef7ccc5343f34abad4c875664dfcea6403a8a4"
integrity sha512-Vi9bq9Oe5mg9ig4CBoofBRLm57+b0CcMAUTCFcPedGMOWx+Op9KMu87qppHnVbbtSciND/TBGlHCyN2/XufIzQ==
@@ -86,12 +86,12 @@
eslint-plugin-testing-library "^3.10.1"
eslint-plugin-typescript-sort-keys "^1.5.0"
-"@anolilab/prettier-config@^1.0.0":
+"@anolilab/prettier-config@1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@anolilab/prettier-config/-/prettier-config-1.0.0.tgz#3ec0252c32036f47048c8f09803616d66157f96f"
integrity sha512-FTyzJtXeSyPmabXFHcvlSdhYROiL5S1Qe2rt6pjxK3EI/vFeElHZWFhTwTLinKTwrzO0JCv3u9d36VOPl/USoA==
-"@anolilab/textlint-config@^1.0.1":
+"@anolilab/textlint-config@1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@anolilab/textlint-config/-/textlint-config-1.0.1.tgz#90cac8e94f7d3757e6c028f4d7a936830edafc0c"
integrity sha512-yftAwFBmjRHygpT3kUzta8sB0pE1GD08mdW6tXL5SjeEFo//lnlGGxgwnb3DNEl0ui86LQVIDnEmvkdQzRS2Fg==
@@ -827,7 +827,7 @@
"@nodelib/fs.scandir" "2.1.4"
fastq "^1.6.0"
-"@octokit/action@^3.4.0":
+"@octokit/action@3.4.0":
version "3.4.0"
resolved "https://registry.yarnpkg.com/@octokit/action/-/action-3.4.0.tgz#f406c215e542f74f09e35b9ce70993c7ea65a709"
integrity sha512-ZbcmFDlss2Xae1ghHdA9Gp4EOt6schF0LlT0d/6ZVvR67WTP/K3pM35lDUboVOVlNPLyjwuSFY2Tnag1yqjztg==
@@ -874,7 +874,7 @@
is-plain-object "^5.0.0"
universal-user-agent "^6.0.0"
-"@octokit/fixtures@^21.3.5":
+"@octokit/fixtures@21.3.5":
version "21.3.5"
resolved "https://registry.yarnpkg.com/@octokit/fixtures/-/fixtures-21.3.5.tgz#3ee67831e31980cec0100f68d348f4e4403d4541"
integrity sha512-bR7YkGXGZiAIlO7MUtX4CO7eEAdHPJS9RReELhpeshO7sJchn098m7Vx6XRxpoMmxs0XtGvGx81jhAABb0VY0Q==
@@ -913,7 +913,7 @@
"@octokit/types" "^6.10.0"
deprecation "^2.3.1"
-"@octokit/plugin-retry@^3.0.7":
+"@octokit/plugin-retry@3.0.7":
version "3.0.7"
resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-3.0.7.tgz#174516f2b80b7140aee71ebc2b506db2c5c1d3d6"
integrity sha512-n08BPfVeKj5wnyH7IaOWnuKbx+e9rSJkhDHMJWXLPv61625uWjsN8G7sAW3zWm9n9vnS4friE7LL/XLcyGeG8Q==
@@ -944,7 +944,7 @@
once "^1.4.0"
universal-user-agent "^6.0.0"
-"@octokit/types@^6.0.3", "@octokit/types@^6.10.0", "@octokit/types@^6.7.1":
+"@octokit/types@6.10.0", "@octokit/types@^6.0.3", "@octokit/types@^6.10.0", "@octokit/types@^6.7.1":
version "6.10.0"
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.10.0.tgz#243faa864b0955f574012d52e179de38ac9ebafe"
integrity sha512-aMDo10kglofejJ96edCBIgQLVuzMDyjxmhdgEcoUUD64PlHYSrNsAGqN0wZtoiX4/PCQ3JLA50IpkP1bcKD/cA==
@@ -1479,12 +1479,12 @@
dependencies:
"@babel/types" "^7.3.0"
-"@types/bluebird@^3.5.33":
+"@types/bluebird@3.5.33":
version "3.5.33"
resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.33.tgz#d79c020f283bd50bd76101d7d300313c107325fc"
integrity sha512-ndEo1xvnYeHxm7I/5sF6tBvnsA4Tdi3zj1keRKRs12SP+2ye2A27NDJ1B6PqkfMbGAcT+mqQVqbZRIrhfOp5PQ==
-"@types/fs-extra@^9.0.7":
+"@types/fs-extra@9.0.7":
version "9.0.7"
resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.7.tgz#a9ef2ffdab043def080c5bec94c03402f793577f"
integrity sha512-YGq2A6Yc3bldrLUlm17VNWOnUbnEzJ9CMgOeLFtQF3HOCN5lQBO8VyjG00a5acA5NNSM30kHVGp1trZgnVgi1Q==
@@ -1524,7 +1524,7 @@
dependencies:
"@types/istanbul-lib-report" "*"
-"@types/jest@26.x", "@types/jest@^26.0.20":
+"@types/jest@26.0.20", "@types/jest@26.x":
version "26.0.20"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.20.tgz#cd2f2702ecf69e86b586e1f5223a60e454056307"
integrity sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA==
@@ -1532,7 +1532,7 @@
jest-diff "^26.0.0"
pretty-format "^26.0.0"
-"@types/js-yaml@^4.0.0":
+"@types/js-yaml@4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.0.tgz#d1a11688112091f2c711674df3a65ea2f47b5dfb"
integrity sha512-4vlpCM5KPCL5CfGmTbpjwVKbISRYhduEJvvUWsH5EB7QInhEj94XPZ3ts/9FPiLZFqYO0xoW4ZL8z2AabTGgJA==
@@ -1582,7 +1582,7 @@
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.1.tgz#374e31645d58cb18a07b3ecd8e9dede4deb2cccd"
integrity sha512-DxZZbyMAM9GWEzXL+BMZROWz9oo6A9EilwwOMET2UVu2uZTqMWS5S69KVtuVKaRjCUpcrOXRalet86/OpG4kqw==
-"@types/promise-retry@^1.1.3":
+"@types/promise-retry@1.1.3":
version "1.1.3"
resolved "https://registry.yarnpkg.com/@types/promise-retry/-/promise-retry-1.1.3.tgz#baab427419da9088a1d2f21bf56249c21b3dd43c"
integrity sha512-LxIlEpEX6frE3co3vCO2EUJfHIta1IOmhDlcAsR4GMMv9hev1iTI9VwberVGkePJAuLZs5rMucrV8CziCfuJMw==
@@ -1604,7 +1604,7 @@
resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==
-"@types/uuid@^8.3.0":
+"@types/uuid@8.3.0":
version "8.3.0"
resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.0.tgz#215c231dff736d5ba92410e6d602050cce7e273f"
integrity sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==
@@ -1621,7 +1621,7 @@
dependencies:
"@types/yargs-parser" "*"
-"@typescript-eslint/eslint-plugin@^4.14.2", "@typescript-eslint/eslint-plugin@^4.15.1":
+"@typescript-eslint/eslint-plugin@4.15.1", "@typescript-eslint/eslint-plugin@^4.14.2":
version "4.15.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.1.tgz#835f64aa0a403e5e9e64c10ceaf8d05c3f015180"
integrity sha512-yW2epMYZSpNJXZy22Biu+fLdTG8Mn6b22kR3TqblVk50HGNV8Zya15WAXuQCr8tKw4Qf1BL4QtI6kv6PCkLoJw==
@@ -1668,7 +1668,7 @@
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
-"@typescript-eslint/parser@^4.14.2", "@typescript-eslint/parser@^4.15.1":
+"@typescript-eslint/parser@4.15.1", "@typescript-eslint/parser@^4.14.2":
version "4.15.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.15.1.tgz#4c91a0602733db63507e1dbf13187d6c71a153c4"
integrity sha512-V8eXYxNJ9QmXi5ETDguB7O9diAXlIyS+e3xzLoP/oVE4WCAjssxLIa0mqCLsCGXulYJUfT+GV70Jv1vHsdKwtA==
@@ -1751,7 +1751,7 @@
"@typescript-eslint/types" "4.15.1"
eslint-visitor-keys "^2.0.0"
-"@zeit/ncc@^0.22.3":
+"@zeit/ncc@0.22.3":
version "0.22.3"
resolved "https://registry.yarnpkg.com/@zeit/ncc/-/ncc-0.22.3.tgz#fca6b86b4454ce7a7e1e7e755165ec06457f16cd"
integrity sha512-jnCLpLXWuw/PAiJiVbLjA8WBC0IJQbFeUwF4I9M+23MvIxTxk5pD4Q8byQBSPmHQjz5aBoA7AKAElQxMpjrCLQ==
@@ -3272,7 +3272,7 @@ eslint-plugin-jest-formatting@^2.0.1:
resolved "https://registry.yarnpkg.com/eslint-plugin-jest-formatting/-/eslint-plugin-jest-formatting-2.0.1.tgz#8f4297bf5b6c2cdd9b2c20a57892f0302b52c20a"
integrity sha512-t6oc6GcXqzQ4lwatnVoKxGTLqo8kFIdA5kpaS3mrkwnTNxhsgFo9reMFdrtNtllx72ohNUsXsay7RJR/LLLk3Q==
-eslint-plugin-jest@^24.1.3, eslint-plugin-jest@^24.1.5:
+eslint-plugin-jest@24.1.5, eslint-plugin-jest@^24.1.3:
version "24.1.5"
resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.1.5.tgz#1e866a9f0deac587d0a3d5d7cefe99815a580de2"
integrity sha512-FIP3lwC8EzEG+rOs1y96cOJmMVpdFNreoDJv29B5vIupVssRi8zrSY3QadogT0K3h1Y8TMxJ6ZSAzYUmFCp2hg==
@@ -3526,7 +3526,7 @@ eslint-visitor-keys@^2.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
-eslint@^7.20.0:
+eslint@7.20.0:
version "7.20.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.20.0.tgz#db07c4ca4eda2e2316e7aa57ac7fc91ec550bdc7"
integrity sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==
@@ -3827,7 +3827,7 @@ file-js@0.3.0:
minimatch "^3.0.3"
proper-lockfile "^1.2.0"
-filehound@^1.17.4:
+filehound@1.17.4:
version "1.17.4"
resolved "https://registry.yarnpkg.com/filehound/-/filehound-1.17.4.tgz#3f5b76c5b3edc1080311ba802e1ad43179e4291e"
integrity sha512-A74hiTADH20bpFbXBNyKtpqN4Guffa+ROmdGJWNnuCRhaD45UVSVoI6McLcpHYmuaOERrzD3gMV3v9VZq/SHeA==
@@ -3946,16 +3946,7 @@ from@~0:
resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe"
integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=
-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==
- dependencies:
- graceful-fs "^4.2.0"
- jsonfile "^4.0.0"
- universalify "^0.1.0"
-
-fs-extra@^9.1.0:
+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==
@@ -3965,6 +3956,15 @@ fs-extra@^9.1.0:
jsonfile "^6.0.1"
universalify "^2.0.0"
+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==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -4356,7 +4356,7 @@ humannames@^1.0.5:
resolved "https://registry.yarnpkg.com/humannames/-/humannames-1.0.5.tgz#a4d60d4168df8737f4b262efd23f2ee32974f1c5"
integrity sha1-pNYNQWjfhzf0smLv0j8u4yl08cU=
-husky@^5.0.9:
+husky@5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/husky/-/husky-5.1.0.tgz#68b1148523acc838af0655ead71bf4671adb9f93"
integrity sha512-Os0EY2haOO+59YZSwMiUDsHY43RFwBVIRStHcnnT8/kvA+sFfaA/YS4uLFRiymXYgQl6E6TQTt3y4v/Z2ctEtw==
@@ -4858,7 +4858,7 @@ jest-changed-files@^26.6.2:
execa "^4.0.0"
throat "^5.0.0"
-jest-circus@^26.6.3:
+jest-circus@26.6.3:
version "26.6.3"
resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-26.6.3.tgz#3cc7ef2a6a3787e5d7bfbe2c72d83262154053e7"
integrity sha512-ACrpWZGcQMpbv13XbzRzpytEJlilP/Su0JtNCi5r/xLpOUhnaIJr8leYYpLEMgPFURZISEHrnnpmB54Q/UziPw==
@@ -5240,7 +5240,7 @@ jest-worker@^26.6.2:
merge-stream "^2.0.0"
supports-color "^7.0.0"
-jest@^26.6.3:
+jest@26.6.3:
version "26.6.3"
resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef"
integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==
@@ -5254,6 +5254,13 @@ jest@^26.6.3:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+js-yaml@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f"
+ integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==
+ dependencies:
+ argparse "^2.0.1"
+
js-yaml@^3.12.0, js-yaml@^3.13.1, js-yaml@^3.14.1, js-yaml@^3.6.1:
version "3.14.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
@@ -5262,13 +5269,6 @@ js-yaml@^3.12.0, js-yaml@^3.13.1, js-yaml@^3.14.1, js-yaml@^3.6.1:
argparse "^1.0.7"
esprima "^4.0.0"
-js-yaml@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f"
- integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==
- dependencies:
- argparse "^2.0.1"
-
jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
@@ -6634,7 +6634,7 @@ prepend-http@^2.0.0:
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
-prettier@^2.2.1:
+prettier@2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5"
integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==
@@ -8300,7 +8300,7 @@ try-resolve@^1.0.1:
resolved "https://registry.yarnpkg.com/try-resolve/-/try-resolve-1.0.1.tgz#cfde6fabd72d63e5797cfaab873abbe8e700e912"
integrity sha1-z95vq9ctY+V5fPqrhzq76OcA6RI=
-ts-jest@^26.5.1:
+ts-jest@26.5.1:
version "26.5.1"
resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.1.tgz#4d53ee4481552f57c1624f0bd3425c8b17996150"
integrity sha512-G7Rmo3OJMvlqE79amJX8VJKDiRcd7/r61wh9fnvvG8cAjhA9edklGw/dCxRSQmfZ/z8NDums5srSVgwZos1qfg==
@@ -8417,7 +8417,7 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
-typescript@^4.1.5:
+typescript@4.1.5:
version "4.1.5"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.5.tgz#123a3b214aaff3be32926f0d8f1f6e704eb89a72"
integrity sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==
@@ -8702,16 +8702,16 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1:
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+uuid@8.3.2, uuid@^8.3.0:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+ integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
uuid@^3.3.2:
version "3.4.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
-uuid@^8.3.0, uuid@^8.3.2:
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
- integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
-
v8-compile-cache@^2.0.3:
version "2.2.0"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132"
From cdb2aec5457dfc278b9224ddb89257c625f473af Mon Sep 17 00:00:00 2001
From: prisis
Date: Wed, 13 May 2020 21:52:29 +0200
Subject: [PATCH 08/21] feat : added start group to pulls create
---
src/main.ts | 353 ++++++++++++++++++++++++----------------------------
1 file changed, 166 insertions(+), 187 deletions(-)
diff --git a/src/main.ts b/src/main.ts
index bd241f7a..813dc7f1 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1,132 +1,130 @@
-import path from 'path'
-import * as core from '@actions/core'
-import * as coreCommand from '@actions/core/lib/command'
-import fs from 'fs-extra'
-import {inspect} from 'util'
-import {Settings} from './settings'
-import {GithubActionContext} from './github-action-context'
-import * as gitSourceProvider from './git-source-provider'
-import {GithubManager} from './github-manager'
-import {createCommandManager} from './git-command-manager'
-import {octokit} from './octokit'
-import * as stateHelper from './state-helper'
-import * as refHelper from './ref-helper'
-import {ISettings} from './interfaces'
-import {cleanup} from './github-action-cleanup'
-import {sync} from './sync'
-
-const USER_EMAIL = 'user.email'
-const USER_NAME = 'user.name'
+import path from "path";
+import fs from "fs-extra";
+import * as core from "@actions/core";
+import * as coreCommand from "@actions/core/lib/command";
+import * as io from "@actions/io";
+import { inspect } from "util";
+import FileHound from "filehound";
+import { Settings } from "./settings";
+import { GithubActionContext } from "./github-action-context";
+import * as gitSourceProvider from "./git-source-provider";
+import { GithubManager } from "./github-manager";
+import { createCommandManager } from "./git-command-manager";
+import { octokit } from "./octokit";
+import * as stateHelper from "./state-helper";
+import * as refHelper from "./ref-helper";
+import { ISettings } from "./interfaces";
+import { cleanup } from "./github-action-cleanup";
+
+const USER_EMAIL = "user.email";
+const USER_NAME = "user.name";
+
+const filehound = FileHound.create();
async function run(): Promise {
- try {
- const context = new GithubActionContext()
- let settings: ISettings = new Settings(context)
- const githubManager = new GithubManager(octokit(settings))
-
- settings = await prepareTemplateSettings(settings, githubManager)
-
- core.debug(`Used settings: ${inspect(settings)}`)
-
try {
- // Register problem matcher
- coreCommand.issueCommand(
- 'add-matcher',
- {},
- path.join(__dirname, 'problem-matcher.json')
- )
-
- if (
- !(await githubManager.branch.has(
- settings.repositoryOwner,
- settings.repositoryName,
- settings.syncBranchName
- ))
- ) {
- const baseBranch = await githubManager.branch.get(
- settings.repositoryOwner,
- settings.repositoryName,
- settings.ref.replace(/^refs\/heads\//, '')
- )
-
- await githubManager.branch.create(
- settings.repositoryOwner,
- settings.repositoryName,
- baseBranch.data.object.sha,
- settings.syncBranchName
- )
- }
-
- const mainGitCommandManager = await createCommandManager(
- settings.githubWorkspacePath
- )
- const ref = `refs/heads/${settings.syncBranchName}`
-
- await mainGitCommandManager.fetch(0, refHelper.getRefSpec(ref))
-
- const checkoutInfo = await refHelper.getCheckoutInfo(
- mainGitCommandManager,
- ref
- )
-
- await mainGitCommandManager.checkout(
- checkoutInfo.ref,
- checkoutInfo.startPoint
- )
-
- // download the template repo
- await gitSourceProvider.getSource(
- githubManager,
- settings,
- settings.templateRepositoryUrl,
- settings.templateRepositoryPath,
- settings.templateRepositoryRef
- )
-
- core.startGroup('Creating and applying patches for found files')
- await sync(settings)
-
- await fs.remove(settings.templateRepositoryPath)
- core.endGroup()
-
- try {
- core.startGroup('Setting up git user and email')
- await mainGitCommandManager.config(
- USER_EMAIL,
- settings.authorEmail,
- true
- )
- await mainGitCommandManager.config(USER_NAME, settings.authorName, true)
- core.endGroup()
-
- core.startGroup('Adding all changed files to main repository')
- await mainGitCommandManager.addAll()
- core.endGroup()
-
- core.startGroup('Checking if changes exist that needs to applied')
- if ((await mainGitCommandManager.status(['--porcelain'])) === '') {
- core.setOutput(
- 'Git status',
- `No changes found for ${settings.templateRepositoryUrl}`
- )
- process.exit(0) // there is currently no neutral exit code
- }
- core.endGroup()
-
- core.startGroup('Creating a commit')
- await mainGitCommandManager.commit(settings.messageHead)
- core.endGroup()
-
- core.startGroup('Pushing new commit')
- await mainGitCommandManager.push(settings.syncBranchName)
- core.endGroup()
-
- // Dump some info about the checked out commit
- await mainGitCommandManager.log1()
- } finally {
- await mainGitCommandManager.tryConfigUnset(USER_EMAIL, true)
- await mainGitCommandManager.tryConfigUnset(USER_NAME, true)
- }
+ const context = new GithubActionContext();
+ let settings: ISettings = new Settings(context);
+ const githubManager = new GithubManager(octokit(settings));
+
+ settings = await prepareTemplateSettings(settings, githubManager);
+
+ core.debug(`Used settings: ${inspect(settings)}`);
+
+ try {
+ // Register problem matcher
+ coreCommand.issueCommand("add-matcher", {}, path.join(__dirname, "problem-matcher.json"));
+
+ if (
+ !(await githubManager.branch.has(
+ settings.repositoryOwner,
+ settings.repositoryName,
+ settings.syncBranchName,
+ ))
+ ) {
+ const baseBranch = await githubManager.branch.get(
+ settings.repositoryOwner,
+ settings.repositoryName,
+ settings.ref.replace(/^refs\/heads\//, ""),
+ );
+
+ await githubManager.branch.create(
+ settings.repositoryOwner,
+ settings.repositoryName,
+ baseBranch.data.object.sha,
+ settings.syncBranchName,
+ );
+ }
+
+ const mainGitCommandManager = await createCommandManager(settings.repositoryPath);
+ const ref = `refs/heads/${settings.syncBranchName}`;
+
+ await mainGitCommandManager.fetch(0, refHelper.getRefSpec(ref));
+
+ const checkoutInfo = await refHelper.getCheckoutInfo(mainGitCommandManager, ref);
+
+ await mainGitCommandManager.checkout(checkoutInfo.ref, checkoutInfo.startPoint);
+
+ // download the template repo
+ await gitSourceProvider.getSource(
+ githubManager,
+ settings,
+ settings.templateRepositoryUrl,
+ settings.templateRepositoryPath,
+ settings.templateRepositoryRef,
+ );
+
+ // find all files
+ const files: string[] = filehound
+ .path(settings.templateRepositoryPath)
+ .discard(settings.ignoreList)
+ .findSync();
+
+ core.debug(`List of found files ${inspect(files)}`);
+
+ for (const file of files) {
+ fs.copySync(
+ file,
+ path.join(settings.githubWorkspacePath, file.replace(settings.templateRepositoryPath, "")),
+ {
+ overwrite: true,
+ },
+ );
+ }
+
+ await io.rmRF(settings.templateRepositoryPath);
+
+ try {
+ core.startGroup("Setting up git user and email");
+ await mainGitCommandManager.config(USER_EMAIL, settings.authorEmail, true);
+ await mainGitCommandManager.config(USER_NAME, settings.authorName, true);
+ core.endGroup();
+
+ core.startGroup("Adding all changed files to main repository");
+ await mainGitCommandManager.addAll();
+ core.endGroup();
+
+ core.startGroup("Checking if changes exist that needs to applied");
+ if ((await mainGitCommandManager.status(["--porcelain"])) === "") {
+ core.setOutput("Git status", `No changes found for ${settings.templateRepositoryUrl}`);
+ process.exit(0); // there is currently no neutral exit code
+ }
+ core.endGroup();
+
+ core.startGroup("Creating a commit");
+ await mainGitCommandManager.commit(settings.messageHead);
+ core.endGroup();
+
+ core.startGroup("Pushing new commit");
+ await mainGitCommandManager.push(settings.syncBranchName);
+ core.endGroup();
+
+ // Dump some info about the checked out commit
+ await mainGitCommandManager.log1();
+ } finally {
+ await mainGitCommandManager.tryConfigUnset(USER_EMAIL, true);
+ await mainGitCommandManager.tryConfigUnset(USER_NAME, true);
+ }
core.startGroup('Creating Pull request')
await githubManager.pulls.create(
@@ -147,78 +145,59 @@ async function run(): Promise {
}
}
-async function prepareTemplateSettings(
- settings: ISettings,
- githubManager: GithubManager
-): Promise {
- let template = core.getInput('template_repository', {required: false})
+async function prepareTemplateSettings(settings: ISettings, githubManager: GithubManager): Promise {
+ let template = core.getInput("template_repository", { required: false });
- if (!template) {
- const repoData = await githubManager.repos.get(
- settings.repositoryOwner,
- settings.repositoryName
- )
+ if (!template) {
+ const repoData = await githubManager.repos.get(settings.repositoryOwner, settings.repositoryName);
- if (repoData.data.template_repository !== undefined) {
- template = repoData.data.template_repository.full_name
+ if (repoData.data.template_repository !== undefined) {
+ template = repoData.data.template_repository.full_name;
+ } else {
+ core.setFailed(
+ 'Template repository not found, please provide "template_repository" key, that you want to check',
+ );
+
+ process.exit(1); // there is currently no neutral exit code
+ }
} else {
- core.setFailed(
- 'Template repository not found, please provide "template_repository" key, that you want to check'
- )
+ const [templateRepositoryOwner, templateRepositoryName] = template.split("/");
+ const repoData = await githubManager.repos.get(templateRepositoryOwner, templateRepositoryName);
- process.exit(1) // there is currently no neutral exit code
- }
- } else {
- const [templateRepositoryOwner, templateRepositoryName] = template.split(
- '/'
- )
- const repoData = await githubManager.repos.get(
- templateRepositoryOwner,
- templateRepositoryName
- )
-
- if (repoData.data.template_repository === undefined) {
- core.setFailed(
- 'You need to provide a github template repository for "template_repository"'
- )
+ if (repoData.data.template_repository === undefined) {
+ core.setFailed('You need to provide a github template repository for "template_repository"');
- process.exit(1) // there is currently no neutral exit code
+ process.exit(1); // there is currently no neutral exit code
+ }
}
- }
- settings.templateRepository = template
-
- const [templateRepositoryOwner, templateRepositoryName] = template.split('/')
-
- settings.templateRepositoryPath = path.resolve(
- settings.githubWorkspacePath,
- `${encodeURIComponent(templateRepositoryOwner)}/${encodeURIComponent(
- templateRepositoryName
- )}`
- )
-
- if (
- !(settings.templateRepositoryPath + path.sep).startsWith(
- settings.githubWorkspacePath + path.sep
- )
- ) {
- throw new Error(
- `Repository path '${settings.templateRepositoryPath}' is not under '${settings.githubWorkspacePath}'`
- )
- }
+ settings.templateRepository = template;
- if (settings.sshKey) {
- settings.templateRepositoryUrl = `git@${settings.serverUrl.hostname}:${settings.templateRepository}.git`
- } else {
- // "origin" is SCHEME://HOSTNAME[:PORT]
- settings.templateRepositoryUrl = `${settings.serverUrl.origin}/${settings.templateRepository}`
- }
+ const [templateRepositoryOwner, templateRepositoryName] = template.split("/");
+
+ settings.templateRepositoryPath = path.resolve(
+ settings.githubWorkspacePath,
+ `${encodeURIComponent(templateRepositoryOwner)}/${encodeURIComponent(templateRepositoryName)}`,
+ );
+
+ if (!(settings.templateRepositoryPath + path.sep).startsWith(settings.githubWorkspacePath + path.sep)) {
+ throw new Error(
+ `Repository path '${settings.templateRepositoryPath}' is not under '${settings.githubWorkspacePath}'`,
+ );
+ }
+
+ if (settings.sshKey) {
+ settings.templateRepositoryUrl = `git@${settings.serverUrl.hostname}:${settings.templateRepository}.git`;
+ } else {
+ // "origin" is SCHEME://HOSTNAME[:PORT]
+ settings.templateRepositoryUrl = `${settings.serverUrl.origin}/${settings.templateRepository}`;
+ }
- return settings
+ return settings;
}
if (!stateHelper.IsPost) {
- run()
+ run();
} else {
- cleanup(stateHelper.TemplateRepositoryPath)
+ cleanup(stateHelper.TemplateRepositoryPath);
}
From 5a28472eae7d2801cb80684a866380b3502b7f02 Mon Sep 17 00:00:00 2001
From: prisis
Date: Wed, 13 May 2020 23:52:56 +0200
Subject: [PATCH 09/21] feat: added semantic release workflow
---
.dependabot/config.yml | 0
.editorconfig | 9 --------
.nvmrc | 2 +-
.releaserc | 47 ++++++++++++++++++++++++++++++++++++++++++
action.yml | 2 +-
5 files changed, 49 insertions(+), 11 deletions(-)
create mode 100644 .dependabot/config.yml
create mode 100644 .releaserc
diff --git a/.dependabot/config.yml b/.dependabot/config.yml
new file mode 100644
index 00000000..e69de29b
diff --git a/.editorconfig b/.editorconfig
index ad243313..80ce1de3 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -10,12 +10,3 @@ trim_trailing_whitespace = true
[*.yml]
indent_size = 2
-
-[*.ts]
-indent_size = 2
-
-[*.js]
-indent_size = 2
-
-[package.json]
-indent_size = 2
diff --git a/.nvmrc b/.nvmrc
index 493319d2..9714cb35 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-12.16.3
+14.2.0
\ No newline at end of file
diff --git a/.releaserc b/.releaserc
new file mode 100644
index 00000000..93d40a72
--- /dev/null
+++ b/.releaserc
@@ -0,0 +1,47 @@
+{
+ "plugins": [
+ [
+ "@semantic-release/commit-analyzer",
+ {
+ "preset": "conventionalcommits"
+ }
+ ],
+ [
+ "@google/semantic-release-replace-plugin",
+ {
+ "replacements": [
+ {
+ "files": [
+ "package.json"
+ ],
+ "from": "\"version\": \".*\"",
+ "to": "\"version\": \"${nextRelease.version}\"",
+ "results": [
+ {
+ "file": "package.json",
+ "hasChanged": true,
+ "numMatches": 1,
+ "numReplacements": 1
+ }
+ ],
+ "countMatches": true
+ }
+ ]
+ }
+ ],
+ [
+ "@semantic-release/release-notes-generator",
+ {
+ "preset": "conventionalcommits"
+ }
+ ],
+ "@semantic-release/changelog",
+ "@semantic-release/github",
+ [
+ "@semantic-release/git",
+ {
+ "assets": ["dist/*", "UPGRADE.md", "LICENSE.md", "README.md", "CHANGELOG.md", "action.yml"]
+ }
+ ]
+ ]
+}
diff --git a/action.yml b/action.yml
index 8c89c3fb..12e236ee 100644
--- a/action.yml
+++ b/action.yml
@@ -88,6 +88,6 @@ branding:
color: yellow
runs:
- using: 'node12'
+ using: 'node14'
main: 'dist/index.js'
post: dist/index.js
From 4ea239006f863c8e4e09a2b93cc7d15b24b335ee Mon Sep 17 00:00:00 2001
From: prisis
Date: Thu, 14 May 2020 01:06:18 +0200
Subject: [PATCH 10/21] feat: added commitlint
---
.editorconfig | 3 +++
1 file changed, 3 insertions(+)
diff --git a/.editorconfig b/.editorconfig
index 80ce1de3..9cd2488c 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -10,3 +10,6 @@ trim_trailing_whitespace = true
[*.yml]
indent_size = 2
+
+[package.json]
+indent_size = 2
From 1adc144b66dfb22808cc24b5d69069772051add7 Mon Sep 17 00:00:00 2001
From: prisis
Date: Thu, 14 May 2020 01:18:59 +0200
Subject: [PATCH 11/21] fix: changed node version back to 12
---
.nvmrc | 2 +-
action.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.nvmrc b/.nvmrc
index 9714cb35..493319d2 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-14.2.0
\ No newline at end of file
+12.16.3
diff --git a/action.yml b/action.yml
index 12e236ee..8c89c3fb 100644
--- a/action.yml
+++ b/action.yml
@@ -88,6 +88,6 @@ branding:
color: yellow
runs:
- using: 'node14'
+ using: 'node12'
main: 'dist/index.js'
post: dist/index.js
From 55a438e33477748afdd517d0f492990894546bea Mon Sep 17 00:00:00 2001
From: prisis
Date: Thu, 14 May 2020 09:27:53 +0200
Subject: [PATCH 12/21] fix: fixed error handling in github-manager.ts
---
.editorconfig | 3 +++
src/interfaces.ts | 22 ++++++++++++++++++++++
2 files changed, 25 insertions(+)
diff --git a/.editorconfig b/.editorconfig
index 9cd2488c..bcf20c1f 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -11,5 +11,8 @@ trim_trailing_whitespace = true
[*.yml]
indent_size = 2
+[*.ts]
+indent_size = 2
+
[package.json]
indent_size = 2
diff --git a/src/interfaces.ts b/src/interfaces.ts
index 62b8d757..c1a4ba79 100644
--- a/src/interfaces.ts
+++ b/src/interfaces.ts
@@ -254,3 +254,25 @@ export interface OctokitHttpError extends Error {
*/
request: RequestOptions
}
+
+export interface OctokitHttpError extends Error {
+ name: string
+ /**
+ * http status code
+ */
+ status: number
+ /**
+ * http status code
+ *
+ * @deprecated `error.code` is deprecated in favor of `error.status`
+ */
+ code: number
+ /**
+ * error response headers
+ */
+ headers: ResponseHeaders
+ /**
+ * Request options that lead to the error.
+ */
+ request: RequestOptions
+}
From efb9a8dc10155b14efe3455579239c2788a27b0f Mon Sep 17 00:00:00 2001
From: prisis
Date: Mon, 22 Feb 2021 12:54:51 +0100
Subject: [PATCH 13/21] feat: merge master (main) into alpha
---
dist/index.js | 39988 ++++++++++++++++++++++--------------------------
package.json | 4 +-
src/main.ts | 32 +-
3 files changed, 18240 insertions(+), 21784 deletions(-)
diff --git a/dist/index.js b/dist/index.js
index 2a28e5a8..4f41747c 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -19,7 +19,13 @@ module.exports =
/******/ };
/******/
/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/ var threw = true;
+/******/ try {
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/ threw = false;
+/******/ } finally {
+/******/ if(threw) delete installedModules[moduleId];
+/******/ }
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
@@ -43,9 +49,9 @@ module.exports =
/******/ return startup();
/******/ })
/************************************************************************/
-/******/ ([
-/* 0 */,
-/* 1 */
+/******/ ({
+
+/***/ 1:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -341,66 +347,82 @@ function copyFile(srcFile, destFile, force) {
//# sourceMappingURL=io.js.map
/***/ }),
-/* 2 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+
+/***/ 3:
+/***/ (function(__unusedmodule, exports) {
"use strict";
-const os = __webpack_require__(87);
-const macosRelease = __webpack_require__(118);
-const winRelease = __webpack_require__(49);
-const osName = (platform, release) => {
- if (!platform && release) {
- throw new Error('You can\'t specify a `release` without specifying `platform`');
- }
+Object.defineProperty(exports, '__esModule', { value: true });
- platform = platform || os.platform();
+/*!
+ * is-plain-object
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
- let id;
+function isObject(o) {
+ return Object.prototype.toString.call(o) === '[object Object]';
+}
- if (platform === 'darwin') {
- if (!release && os.platform() === 'darwin') {
- release = os.release();
- }
+function isPlainObject(o) {
+ var ctor,prot;
- const prefix = release ? (Number(release.split('.')[0]) > 15 ? 'macOS' : 'OS X') : 'macOS';
- id = release ? macosRelease(release).name : '';
- return prefix + (id ? ' ' + id : '');
- }
+ if (isObject(o) === false) return false;
- if (platform === 'linux') {
- if (!release && os.platform() === 'linux') {
- release = os.release();
- }
+ // If has modified constructor
+ ctor = o.constructor;
+ if (ctor === undefined) return true;
- id = release ? release.replace(/^(\d+\.\d+).*/, '$1') : '';
- return 'Linux' + (id ? ' ' + id : '');
- }
+ // If has modified prototype
+ prot = ctor.prototype;
+ if (isObject(prot) === false) return false;
- if (platform === 'win32') {
- if (!release && os.platform() === 'win32') {
- release = os.release();
- }
+ // If constructor does not have an Object-specific method
+ if (prot.hasOwnProperty('isPrototypeOf') === false) {
+ return false;
+ }
- id = release ? winRelease(release) : '';
- return 'Windows' + (id ? ' ' + id : '');
- }
+ // Most likely a plain Object
+ return true;
+}
- return platform;
-};
+exports.isPlainObject = isPlainObject;
+
+
+/***/ }),
+
+/***/ 6:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
-module.exports = osName;
+var _validate = _interopRequireDefault(__webpack_require__(78));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function version(uuid) {
+ if (!(0, _validate.default)(uuid)) {
+ throw TypeError('Invalid UUID');
+ }
+
+ return parseInt(uuid.substr(14, 1), 16);
+}
+
+var _default = version;
+exports.default = _default;
/***/ }),
-/* 3 */,
-/* 4 */,
-/* 5 */,
-/* 6 */,
-/* 7 */,
-/* 8 */,
-/* 9 */
+
+/***/ 9:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -1006,8 +1028,8 @@ class ExecState extends events.EventEmitter {
//# sourceMappingURL=toolrunner.js.map
/***/ }),
-/* 10 */,
-/* 11 */
+
+/***/ 11:
/***/ (function(module) {
// Returns a wrapper function that returns a wrapped callback
@@ -1046,76 +1068,75 @@ function wrappy (fn, cb) {
/***/ }),
-/* 12 */,
-/* 13 */,
-/* 14 */,
-/* 15 */,
-/* 16 */
+
+/***/ 16:
/***/ (function(module) {
module.exports = require("tls");
/***/ }),
-/* 17 */,
-/* 18 */
+
+/***/ 18:
/***/ (function(module) {
module.exports = eval("require")("encoding");
/***/ }),
-/* 19 */,
-/* 20 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-"use strict";
+/***/ 22:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
+"use strict";
-const cp = __webpack_require__(129);
-const parse = __webpack_require__(568);
-const enoent = __webpack_require__(881);
-function spawn(command, args, options) {
- // Parse the arguments
- const parsed = parse(command, args, options);
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
- // Spawn the child process
- const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);
+var _validate = _interopRequireDefault(__webpack_require__(78));
- // Hook into child process "exit" event to emit an error if the command
- // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
- enoent.hookChildProcess(spawned, parsed);
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- return spawned;
-}
+function parse(uuid) {
+ if (!(0, _validate.default)(uuid)) {
+ throw TypeError('Invalid UUID');
+ }
-function spawnSync(command, args, options) {
- // Parse the arguments
- const parsed = parse(command, args, options);
+ let v;
+ const arr = new Uint8Array(16); // Parse ########-....-....-....-............
- // Spawn the child process
- const result = cp.spawnSync(parsed.command, parsed.args, parsed.options);
+ arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;
+ arr[1] = v >>> 16 & 0xff;
+ arr[2] = v >>> 8 & 0xff;
+ arr[3] = v & 0xff; // Parse ........-####-....-....-............
- // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
- result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);
+ arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;
+ arr[5] = v & 0xff; // Parse ........-....-####-....-............
- return result;
-}
+ arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;
+ arr[7] = v & 0xff; // Parse ........-....-....-####-............
-module.exports = spawn;
-module.exports.spawn = spawn;
-module.exports.sync = spawnSync;
+ arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;
+ arr[9] = v & 0xff; // Parse ........-....-....-....-############
+ // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes)
-module.exports._parse = parse;
-module.exports._enoent = enoent;
+ arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;
+ arr[11] = v / 0x100000000 & 0xff;
+ arr[12] = v >>> 24 & 0xff;
+ arr[13] = v >>> 16 & 0xff;
+ arr[14] = v >>> 8 & 0xff;
+ arr[15] = v & 0xff;
+ return arr;
+}
+var _default = parse;
+exports.default = _default;
/***/ }),
-/* 21 */,
-/* 22 */,
-/* 23 */,
-/* 24 */,
-/* 25 */
+
+/***/ 25:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -1345,43 +1366,121 @@ Promise.spawn = function (generatorFunction) {
/***/ }),
-/* 26 */,
-/* 27 */,
-/* 28 */,
-/* 29 */,
-/* 30 */,
-/* 31 */,
-/* 32 */,
-/* 33 */,
-/* 34 */,
-/* 35 */,
-/* 36 */,
-/* 37 */,
-/* 38 */,
-/* 39 */
-/***/ (function(module) {
-
-"use strict";
-
-module.exports = opts => {
- opts = opts || {};
- const env = opts.env || process.env;
- const platform = opts.platform || process.platform;
+/***/ 31:
+/***/ (function(module, exports, __webpack_require__) {
- if (platform !== 'win32') {
- return 'PATH';
- }
+"use strict";
- return Object.keys(env).find(x => x.toUpperCase() === 'PATH') || 'Path';
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
};
-
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+ result["default"] = mod;
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const semver = __importStar(__webpack_require__(550));
+const core_1 = __webpack_require__(470);
+// needs to be require for core node modules to be mocked
+/* eslint @typescript-eslint/no-require-imports: 0 */
+const os = __webpack_require__(87);
+const cp = __webpack_require__(129);
+const fs = __webpack_require__(747);
+function _findMatch(versionSpec, stable, candidates, archFilter) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const platFilter = os.platform();
+ let result;
+ let match;
+ let file;
+ for (const candidate of candidates) {
+ const version = candidate.version;
+ core_1.debug(`check ${version} satisfies ${versionSpec}`);
+ if (semver.satisfies(version, versionSpec) &&
+ (!stable || candidate.stable === stable)) {
+ file = candidate.files.find(item => {
+ core_1.debug(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`);
+ let chk = item.arch === archFilter && item.platform === platFilter;
+ if (chk && item.platform_version) {
+ const osVersion = module.exports._getOsVersion();
+ if (osVersion === item.platform_version) {
+ chk = true;
+ }
+ else {
+ chk = semver.satisfies(osVersion, item.platform_version);
+ }
+ }
+ return chk;
+ });
+ if (file) {
+ core_1.debug(`matched ${candidate.version}`);
+ match = candidate;
+ break;
+ }
+ }
+ }
+ if (match && file) {
+ // clone since we're mutating the file list to be only the file that matches
+ result = Object.assign({}, match);
+ result.files = [file];
+ }
+ return result;
+ });
+}
+exports._findMatch = _findMatch;
+function _getOsVersion() {
+ // TODO: add windows and other linux, arm variants
+ // right now filtering on version is only an ubuntu and macos scenario for tools we build for hosted (python)
+ const plat = os.platform();
+ let version = '';
+ if (plat === 'darwin') {
+ version = cp.execSync('sw_vers -productVersion').toString();
+ }
+ else if (plat === 'linux') {
+ // lsb_release process not in some containers, readfile
+ // Run cat /etc/lsb-release
+ // DISTRIB_ID=Ubuntu
+ // DISTRIB_RELEASE=18.04
+ // DISTRIB_CODENAME=bionic
+ // DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"
+ const lsbContents = module.exports._readLinuxVersionFile();
+ if (lsbContents) {
+ const lines = lsbContents.split('\n');
+ for (const line of lines) {
+ const parts = line.split('=');
+ if (parts.length === 2 && parts[0].trim() === 'DISTRIB_RELEASE') {
+ version = parts[1].trim();
+ break;
+ }
+ }
+ }
+ }
+ return version;
+}
+exports._getOsVersion = _getOsVersion;
+function _readLinuxVersionFile() {
+ const lsbFile = '/etc/lsb-release';
+ let contents = '';
+ if (fs.existsSync(lsbFile)) {
+ contents = fs.readFileSync(lsbFile).toString();
+ }
+ return contents;
+}
+exports._readLinuxVersionFile = _readLinuxVersionFile;
+//# sourceMappingURL=manifest.js.map
/***/ }),
-/* 40 */,
-/* 41 */,
-/* 42 */,
-/* 43 */
+
+/***/ 43:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -1393,10533 +1492,10045 @@ module.exports = {
/***/ }),
-/* 44 */,
-/* 45 */,
-/* 46 */,
-/* 47 */,
-/* 48 */
-/***/ (function(module, exports) {
-exports = module.exports = SemVer
+/***/ 49:
+/***/ (function(module, __unusedexports, __webpack_require__) {
-var debug
-/* istanbul ignore next */
-if (typeof process === 'object' &&
- process.env &&
- process.env.NODE_DEBUG &&
- /\bsemver\b/i.test(process.env.NODE_DEBUG)) {
- debug = function () {
- var args = Array.prototype.slice.call(arguments, 0)
- args.unshift('SEMVER')
- console.log.apply(console, args)
+var wrappy = __webpack_require__(11)
+module.exports = wrappy(once)
+module.exports.strict = wrappy(onceStrict)
+
+once.proto = once(function () {
+ Object.defineProperty(Function.prototype, 'once', {
+ value: function () {
+ return once(this)
+ },
+ configurable: true
+ })
+
+ Object.defineProperty(Function.prototype, 'onceStrict', {
+ value: function () {
+ return onceStrict(this)
+ },
+ configurable: true
+ })
+})
+
+function once (fn) {
+ var f = function () {
+ if (f.called) return f.value
+ f.called = true
+ return f.value = fn.apply(this, arguments)
}
-} else {
- debug = function () {}
+ f.called = false
+ return f
}
-// Note: this is the semver.org version of the spec that it implements
-// Not necessarily the package version of this code.
-exports.SEMVER_SPEC_VERSION = '2.0.0'
-
-var MAX_LENGTH = 256
-var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||
- /* istanbul ignore next */ 9007199254740991
+function onceStrict (fn) {
+ var f = function () {
+ if (f.called)
+ throw new Error(f.onceError)
+ f.called = true
+ return f.value = fn.apply(this, arguments)
+ }
+ var name = fn.name || 'Function wrapped with `once`'
+ f.onceError = name + " shouldn't be called more than once"
+ f.called = false
+ return f
+}
-// Max safe segment length for coercion.
-var MAX_SAFE_COMPONENT_LENGTH = 16
-// The actual regexps go on exports.re
-var re = exports.re = []
-var src = exports.src = []
-var R = 0
+/***/ }),
-// The following Regular Expressions can be used for tokenizing,
-// validating, and parsing SemVer version strings.
+/***/ 54:
+/***/ (function(module, __unusedexports, __webpack_require__) {
-// ## Numeric Identifier
-// A single `0`, or a non-zero digit followed by zero or more digits.
+"use strict";
+// Adapted from https://github.com/sindresorhus/make-dir
+// Copyright (c) Sindre Sorhus (sindresorhus.com)
+// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-var NUMERICIDENTIFIER = R++
-src[NUMERICIDENTIFIER] = '0|[1-9]\\d*'
-var NUMERICIDENTIFIERLOOSE = R++
-src[NUMERICIDENTIFIERLOOSE] = '[0-9]+'
+const fs = __webpack_require__(869)
+const path = __webpack_require__(622)
+const atLeastNode = __webpack_require__(159)
-// ## Non-numeric Identifier
-// Zero or more digits, followed by a letter or hyphen, and then zero or
-// more letters, digits, or hyphens.
+const useNativeRecursiveOption = atLeastNode('10.12.0')
-var NONNUMERICIDENTIFIER = R++
-src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'
+// https://github.com/nodejs/node/issues/8987
+// https://github.com/libuv/libuv/pull/1088
+const checkPath = pth => {
+ if (process.platform === 'win32') {
+ const pathHasInvalidWinCharacters = /[<>:"|?*]/.test(pth.replace(path.parse(pth).root, ''))
-// ## Main Version
-// Three dot-separated numeric identifiers.
+ if (pathHasInvalidWinCharacters) {
+ const error = new Error(`Path contains invalid characters: ${pth}`)
+ error.code = 'EINVAL'
+ throw error
+ }
+ }
+}
-var MAINVERSION = R++
-src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' +
- '(' + src[NUMERICIDENTIFIER] + ')\\.' +
- '(' + src[NUMERICIDENTIFIER] + ')'
+const processOptions = options => {
+ const defaults = { mode: 0o777 }
+ if (typeof options === 'number') options = { mode: options }
+ return { ...defaults, ...options }
+}
-var MAINVERSIONLOOSE = R++
-src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
- '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
- '(' + src[NUMERICIDENTIFIERLOOSE] + ')'
+const permissionError = pth => {
+ // This replicates the exception of `fs.mkdir` with native the
+ // `recusive` option when run on an invalid drive under Windows.
+ const error = new Error(`operation not permitted, mkdir '${pth}'`)
+ error.code = 'EPERM'
+ error.errno = -4048
+ error.path = pth
+ error.syscall = 'mkdir'
+ return error
+}
-// ## Pre-release Version Identifier
-// A numeric identifier, or a non-numeric identifier.
+module.exports.makeDir = async (input, options) => {
+ checkPath(input)
+ options = processOptions(options)
-var PRERELEASEIDENTIFIER = R++
-src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +
- '|' + src[NONNUMERICIDENTIFIER] + ')'
+ if (useNativeRecursiveOption) {
+ const pth = path.resolve(input)
-var PRERELEASEIDENTIFIERLOOSE = R++
-src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +
- '|' + src[NONNUMERICIDENTIFIER] + ')'
+ return fs.mkdir(pth, {
+ mode: options.mode,
+ recursive: true
+ })
+ }
-// ## Pre-release Version
-// Hyphen, followed by one or more dot-separated pre-release version
-// identifiers.
+ const make = async pth => {
+ try {
+ await fs.mkdir(pth, options.mode)
+ } catch (error) {
+ if (error.code === 'EPERM') {
+ throw error
+ }
-var PRERELEASE = R++
-src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +
- '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))'
+ if (error.code === 'ENOENT') {
+ if (path.dirname(pth) === pth) {
+ throw permissionError(pth)
+ }
-var PRERELEASELOOSE = R++
-src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +
- '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'
+ if (error.message.includes('null bytes')) {
+ throw error
+ }
-// ## Build Metadata Identifier
-// Any combination of digits, letters, or hyphens.
+ await make(path.dirname(pth))
+ return make(pth)
+ }
-var BUILDIDENTIFIER = R++
-src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'
+ try {
+ const stats = await fs.stat(pth)
+ if (!stats.isDirectory()) {
+ // This error is never exposed to the user
+ // it is caught below, and the original error is thrown
+ throw new Error('The path is not a directory')
+ }
+ } catch {
+ throw error
+ }
+ }
+ }
-// ## Build Metadata
-// Plus sign, followed by one or more period-separated build metadata
-// identifiers.
+ return make(path.resolve(input))
+}
-var BUILD = R++
-src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] +
- '(?:\\.' + src[BUILDIDENTIFIER] + ')*))'
+module.exports.makeDirSync = (input, options) => {
+ checkPath(input)
+ options = processOptions(options)
-// ## Full Version String
-// A main version, followed optionally by a pre-release version and
-// build metadata.
+ if (useNativeRecursiveOption) {
+ const pth = path.resolve(input)
-// Note that the only major, minor, patch, and pre-release sections of
-// the version string are capturing groups. The build metadata is not a
-// capturing group, because it should not ever be used in version
-// comparison.
+ return fs.mkdirSync(pth, {
+ mode: options.mode,
+ recursive: true
+ })
+ }
-var FULL = R++
-var FULLPLAIN = 'v?' + src[MAINVERSION] +
- src[PRERELEASE] + '?' +
- src[BUILD] + '?'
+ const make = pth => {
+ try {
+ fs.mkdirSync(pth, options.mode)
+ } catch (error) {
+ if (error.code === 'EPERM') {
+ throw error
+ }
-src[FULL] = '^' + FULLPLAIN + '$'
+ if (error.code === 'ENOENT') {
+ if (path.dirname(pth) === pth) {
+ throw permissionError(pth)
+ }
-// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
-// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
-// common in the npm registry.
-var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] +
- src[PRERELEASELOOSE] + '?' +
- src[BUILD] + '?'
+ if (error.message.includes('null bytes')) {
+ throw error
+ }
-var LOOSE = R++
-src[LOOSE] = '^' + LOOSEPLAIN + '$'
+ make(path.dirname(pth))
+ return make(pth)
+ }
-var GTLT = R++
-src[GTLT] = '((?:<|>)?=?)'
+ try {
+ if (!fs.statSync(pth).isDirectory()) {
+ // This error is never exposed to the user
+ // it is caught below, and the original error is thrown
+ throw new Error('The path is not a directory')
+ }
+ } catch {
+ throw error
+ }
+ }
+ }
-// Something like "2.*" or "1.2.x".
-// Note that "x.x" is a valid xRange identifer, meaning "any version"
-// Only the first item is strictly required.
-var XRANGEIDENTIFIERLOOSE = R++
-src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'
-var XRANGEIDENTIFIER = R++
-src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*'
-
-var XRANGEPLAIN = R++
-src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' +
- '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
- '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
- '(?:' + src[PRERELEASE] + ')?' +
- src[BUILD] + '?' +
- ')?)?'
+ return make(path.resolve(input))
+}
-var XRANGEPLAINLOOSE = R++
-src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
- '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
- '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
- '(?:' + src[PRERELEASELOOSE] + ')?' +
- src[BUILD] + '?' +
- ')?)?'
-var XRANGE = R++
-src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$'
-var XRANGELOOSE = R++
-src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$'
+/***/ }),
-// Coercion.
-// Extract anything that could conceivably be a part of a valid semver
-var COERCE = R++
-src[COERCE] = '(?:^|[^\\d])' +
- '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
- '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
- '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
- '(?:$|[^\\d])'
+/***/ 62:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
-// Tilde ranges.
-// Meaning is "reasonably at or greater than"
-var LONETILDE = R++
-src[LONETILDE] = '(?:~>?)'
+"use strict";
-var TILDETRIM = R++
-src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+'
-re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')
-var tildeTrimReplace = '$1~'
-var TILDE = R++
-src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'
-var TILDELOOSE = R++
-src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+Object.defineProperty(exports, "v1", {
+ enumerable: true,
+ get: function () {
+ return _v.default;
+ }
+});
+Object.defineProperty(exports, "v3", {
+ enumerable: true,
+ get: function () {
+ return _v2.default;
+ }
+});
+Object.defineProperty(exports, "v4", {
+ enumerable: true,
+ get: function () {
+ return _v3.default;
+ }
+});
+Object.defineProperty(exports, "v5", {
+ enumerable: true,
+ get: function () {
+ return _v4.default;
+ }
+});
+Object.defineProperty(exports, "NIL", {
+ enumerable: true,
+ get: function () {
+ return _nil.default;
+ }
+});
+Object.defineProperty(exports, "version", {
+ enumerable: true,
+ get: function () {
+ return _version.default;
+ }
+});
+Object.defineProperty(exports, "validate", {
+ enumerable: true,
+ get: function () {
+ return _validate.default;
+ }
+});
+Object.defineProperty(exports, "stringify", {
+ enumerable: true,
+ get: function () {
+ return _stringify.default;
+ }
+});
+Object.defineProperty(exports, "parse", {
+ enumerable: true,
+ get: function () {
+ return _parse.default;
+ }
+});
-// Caret ranges.
-// Meaning is "at least and backwards compatible with"
-var LONECARET = R++
-src[LONECARET] = '(?:\\^)'
+var _v = _interopRequireDefault(__webpack_require__(893));
-var CARETTRIM = R++
-src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+'
-re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')
-var caretTrimReplace = '$1^'
+var _v2 = _interopRequireDefault(__webpack_require__(209));
-var CARET = R++
-src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'
-var CARETLOOSE = R++
-src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'
+var _v3 = _interopRequireDefault(__webpack_require__(733));
-// A simple gt/lt/eq thing, or just "" to indicate "any version"
-var COMPARATORLOOSE = R++
-src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$'
-var COMPARATOR = R++
-src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$'
+var _v4 = _interopRequireDefault(__webpack_require__(384));
-// An expression to strip any whitespace between the gtlt and the thing
-// it modifies, so that `> 1.2.3` ==> `>1.2.3`
-var COMPARATORTRIM = R++
-src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] +
- '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'
+var _nil = _interopRequireDefault(__webpack_require__(327));
-// this one has to use the /g flag
-re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')
-var comparatorTrimReplace = '$1$2$3'
+var _version = _interopRequireDefault(__webpack_require__(6));
-// Something like `1.2.3 - 1.2.4`
-// Note that these all use the loose form, because they'll be
-// checked against either the strict or loose comparator form
-// later.
-var HYPHENRANGE = R++
-src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' +
- '\\s+-\\s+' +
- '(' + src[XRANGEPLAIN] + ')' +
- '\\s*$'
+var _validate = _interopRequireDefault(__webpack_require__(78));
-var HYPHENRANGELOOSE = R++
-src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' +
- '\\s+-\\s+' +
- '(' + src[XRANGEPLAINLOOSE] + ')' +
- '\\s*$'
+var _stringify = _interopRequireDefault(__webpack_require__(411));
-// Star ranges basically just allow anything at all.
-var STAR = R++
-src[STAR] = '(<|>)?=?\\s*\\*'
+var _parse = _interopRequireDefault(__webpack_require__(22));
-// Compile to actual regexp objects.
-// All are flag-free, unless they were created above with a flag.
-for (var i = 0; i < R; i++) {
- debug(i, src[i])
- if (!re[i]) {
- re[i] = new RegExp(src[i])
- }
-}
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-exports.parse = parse
-function parse (version, options) {
- if (!options || typeof options !== 'object') {
- options = {
- loose: !!options,
- includePrerelease: false
- }
- }
+/***/ }),
- if (version instanceof SemVer) {
- return version
- }
+/***/ 78:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- if (typeof version !== 'string') {
- return null
- }
+"use strict";
- if (version.length > MAX_LENGTH) {
- return null
- }
- var r = options.loose ? re[LOOSE] : re[FULL]
- if (!r.test(version)) {
- return null
- }
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
- try {
- return new SemVer(version, options)
- } catch (er) {
- return null
- }
-}
+var _regex = _interopRequireDefault(__webpack_require__(456));
-exports.valid = valid
-function valid (version, options) {
- var v = parse(version, options)
- return v ? v.version : null
-}
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-exports.clean = clean
-function clean (version, options) {
- var s = parse(version.trim().replace(/^[=v]+/, ''), options)
- return s ? s.version : null
+function validate(uuid) {
+ return typeof uuid === 'string' && _regex.default.test(uuid);
}
-exports.SemVer = SemVer
-
-function SemVer (version, options) {
- if (!options || typeof options !== 'object') {
- options = {
- loose: !!options,
- includePrerelease: false
- }
- }
- if (version instanceof SemVer) {
- if (version.loose === options.loose) {
- return version
- } else {
- version = version.version
- }
- } else if (typeof version !== 'string') {
- throw new TypeError('Invalid Version: ' + version)
- }
+var _default = validate;
+exports.default = _default;
- if (version.length > MAX_LENGTH) {
- throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')
- }
+/***/ }),
- if (!(this instanceof SemVer)) {
- return new SemVer(version, options)
- }
+/***/ 82:
+/***/ (function(__unusedmodule, exports) {
- debug('SemVer', version, options)
- this.options = options
- this.loose = !!options.loose
+"use strict";
- var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL])
-
- if (!m) {
- throw new TypeError('Invalid Version: ' + version)
- }
-
- this.raw = version
-
- // these are actually numbers
- this.major = +m[1]
- this.minor = +m[2]
- this.patch = +m[3]
-
- if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
- throw new TypeError('Invalid major version')
- }
-
- if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
- throw new TypeError('Invalid minor version')
- }
-
- if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
- throw new TypeError('Invalid patch version')
- }
-
- // numberify any prerelease numeric ids
- if (!m[4]) {
- this.prerelease = []
- } else {
- this.prerelease = m[4].split('.').map(function (id) {
- if (/^[0-9]+$/.test(id)) {
- var num = +id
- if (num >= 0 && num < MAX_SAFE_INTEGER) {
- return num
- }
- }
- return id
- })
- }
-
- this.build = m[5] ? m[5].split('.') : []
- this.format()
+// We use any as a valid input type
+/* eslint-disable @typescript-eslint/no-explicit-any */
+Object.defineProperty(exports, "__esModule", { value: true });
+/**
+ * Sanitizes an input into a string so it can be passed into issueCommand safely
+ * @param input input to sanitize into a string
+ */
+function toCommandValue(input) {
+ if (input === null || input === undefined) {
+ return '';
+ }
+ else if (typeof input === 'string' || input instanceof String) {
+ return input;
+ }
+ return JSON.stringify(input);
}
+exports.toCommandValue = toCommandValue;
+//# sourceMappingURL=utils.js.map
-SemVer.prototype.format = function () {
- this.version = this.major + '.' + this.minor + '.' + this.patch
- if (this.prerelease.length) {
- this.version += '-' + this.prerelease.join('.')
- }
- return this.version
-}
+/***/ }),
-SemVer.prototype.toString = function () {
- return this.version
-}
+/***/ 87:
+/***/ (function(module) {
-SemVer.prototype.compare = function (other) {
- debug('SemVer.compare', this.version, this.options, other)
- if (!(other instanceof SemVer)) {
- other = new SemVer(other, this.options)
- }
+module.exports = require("os");
- return this.compareMain(other) || this.comparePre(other)
-}
+/***/ }),
-SemVer.prototype.compareMain = function (other) {
- if (!(other instanceof SemVer)) {
- other = new SemVer(other, this.options)
- }
+/***/ 90:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- return compareIdentifiers(this.major, other.major) ||
- compareIdentifiers(this.minor, other.minor) ||
- compareIdentifiers(this.patch, other.patch)
-}
+"use strict";
-SemVer.prototype.comparePre = function (other) {
- if (!(other instanceof SemVer)) {
- other = new SemVer(other, this.options)
- }
- // NOT having a prerelease is > having one
- if (this.prerelease.length && !other.prerelease.length) {
- return -1
- } else if (!this.prerelease.length && other.prerelease.length) {
- return 1
- } else if (!this.prerelease.length && !other.prerelease.length) {
- return 0
- }
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
- var i = 0
- do {
- var a = this.prerelease[i]
- var b = other.prerelease[i]
- debug('prerelease compare', i, a, b)
- if (a === undefined && b === undefined) {
- return 0
- } else if (b === undefined) {
- return 1
- } else if (a === undefined) {
- return -1
- } else if (a === b) {
- continue
- } else {
- return compareIdentifiers(a, b)
- }
- } while (++i)
-}
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-// preminor will bump the version up to the next minor release, and immediately
-// down to pre-release. premajor and prepatch work the same way.
-SemVer.prototype.inc = function (release, identifier) {
- switch (release) {
- case 'premajor':
- this.prerelease.length = 0
- this.patch = 0
- this.minor = 0
- this.major++
- this.inc('pre', identifier)
- break
- case 'preminor':
- this.prerelease.length = 0
- this.patch = 0
- this.minor++
- this.inc('pre', identifier)
- break
- case 'prepatch':
- // If this is already a prerelease, it will bump to the next version
- // drop any prereleases that might already exist, since they are not
- // relevant at this point.
- this.prerelease.length = 0
- this.inc('patch', identifier)
- this.inc('pre', identifier)
- break
- // If the input is a non-prerelease version, this acts the same as
- // prepatch.
- case 'prerelease':
- if (this.prerelease.length === 0) {
- this.inc('patch', identifier)
- }
- this.inc('pre', identifier)
- break
+var _lodash = __webpack_require__(557);
- case 'major':
- // If this is a pre-major version, bump up to the same major version.
- // Otherwise increment major.
- // 1.0.0-5 bumps to 1.0.0
- // 1.1.0 bumps to 2.0.0
- if (this.minor !== 0 ||
- this.patch !== 0 ||
- this.prerelease.length === 0) {
- this.major++
- }
- this.minor = 0
- this.patch = 0
- this.prerelease = []
- break
- case 'minor':
- // If this is a pre-minor version, bump up to the same minor version.
- // Otherwise increment minor.
- // 1.2.0-5 bumps to 1.2.0
- // 1.2.1 bumps to 1.3.0
- if (this.patch !== 0 || this.prerelease.length === 0) {
- this.minor++
- }
- this.patch = 0
- this.prerelease = []
- break
- case 'patch':
- // If this is not a pre-release version, it will increment the patch.
- // If it is a pre-release it will bump up to the same patch version.
- // 1.2.0-5 patches to 1.2.0
- // 1.2.0 patches to 1.2.1
- if (this.prerelease.length === 0) {
- this.patch++
- }
- this.prerelease = []
- break
- // This probably shouldn't be used publicly.
- // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
- case 'pre':
- if (this.prerelease.length === 0) {
- this.prerelease = [0]
- } else {
- var i = this.prerelease.length
- while (--i >= 0) {
- if (typeof this.prerelease[i] === 'number') {
- this.prerelease[i]++
- i = -2
- }
- }
- if (i === -1) {
- // didn't increment anything
- this.prerelease.push(0)
- }
- }
- if (identifier) {
- // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
- // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
- if (this.prerelease[0] === identifier) {
- if (isNaN(this.prerelease[1])) {
- this.prerelease = [identifier, 0]
- }
- } else {
- this.prerelease = [identifier, 0]
- }
- }
- break
+var _lodash2 = _interopRequireDefault(_lodash);
- default:
- throw new Error('invalid increment argument: ' + release)
- }
- this.format()
- this.raw = this.version
- return this
-}
+var _bluebird = __webpack_require__(440);
-exports.inc = inc
-function inc (version, release, loose, identifier) {
- if (typeof (loose) === 'string') {
- identifier = loose
- loose = undefined
- }
+var _bluebird2 = _interopRequireDefault(_bluebird);
- try {
- return new SemVer(version, loose).inc(release, identifier).version
- } catch (er) {
- return null
- }
-}
+var _path = __webpack_require__(622);
-exports.diff = diff
-function diff (version1, version2) {
- if (eq(version1, version2)) {
- return null
- } else {
- var v1 = parse(version1)
- var v2 = parse(version2)
- var prefix = ''
- if (v1.prerelease.length || v2.prerelease.length) {
- prefix = 'pre'
- var defaultResult = 'prerelease'
- }
- for (var key in v1) {
- if (key === 'major' || key === 'minor' || key === 'patch') {
- if (v1[key] !== v2[key]) {
- return prefix + key
- }
- }
- }
- return defaultResult // may be undefined
- }
-}
+var _path2 = _interopRequireDefault(_path);
-exports.compareIdentifiers = compareIdentifiers
+var _fileJs = __webpack_require__(202);
-var numeric = /^[0-9]+$/
-function compareIdentifiers (a, b) {
- var anum = numeric.test(a)
- var bnum = numeric.test(b)
+var _fileJs2 = _interopRequireDefault(_fileJs);
- if (anum && bnum) {
- a = +a
- b = +b
- }
+var _functions = __webpack_require__(942);
- return a === b ? 0
- : (anum && !bnum) ? -1
- : (bnum && !anum) ? 1
- : a < b ? -1
- : 1
-}
+var _files = __webpack_require__(770);
-exports.rcompareIdentifiers = rcompareIdentifiers
-function rcompareIdentifiers (a, b) {
- return compareIdentifiers(b, a)
-}
+var _arrays = __webpack_require__(947);
-exports.major = major
-function major (a, loose) {
- return new SemVer(a, loose).major
-}
+var _unitCompare = __webpack_require__(535);
-exports.minor = minor
-function minor (a, loose) {
- return new SemVer(a, loose).minor
-}
+var _events = __webpack_require__(614);
-exports.patch = patch
-function patch (a, loose) {
- return new SemVer(a, loose).patch
-}
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-exports.compare = compare
-function compare (a, b, loose) {
- return new SemVer(a, loose).compare(new SemVer(b, loose))
-}
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-exports.compareLoose = compareLoose
-function compareLoose (a, b) {
- return compare(a, b, true)
-}
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-exports.rcompare = rcompare
-function rcompare (a, b, loose) {
- return compare(b, a, loose)
-}
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-exports.sort = sort
-function sort (list, loose) {
- return list.sort(function (a, b) {
- return exports.compare(a, b, loose)
- })
+function isDefined(value) {
+ return value !== undefined;
}
-exports.rsort = rsort
-function rsort (list, loose) {
- return list.sort(function (a, b) {
- return exports.rcompare(a, b, loose)
- })
+function flatten(a, b) {
+ return a.concat(b);
}
-exports.gt = gt
-function gt (a, b, loose) {
- return compare(a, b, loose) > 0
+function isRegExpMatch(pattern) {
+ return function (file) {
+ return new RegExp(pattern).test(file.getName());
+ };
}
-exports.lt = lt
-function lt (a, b, loose) {
- return compare(a, b, loose) < 0
+function cleanExtension(ext) {
+ if (_lodash2.default.startsWith(ext, '.')) {
+ return ext.slice(1);
+ }
+ return ext;
}
-exports.eq = eq
-function eq (a, b, loose) {
- return compare(a, b, loose) === 0
-}
+/** @class */
-exports.neq = neq
-function neq (a, b, loose) {
- return compare(a, b, loose) !== 0
-}
+var FileHound = function (_EventEmitter) {
+ _inherits(FileHound, _EventEmitter);
-exports.gte = gte
-function gte (a, b, loose) {
- return compare(a, b, loose) >= 0
-}
+ function FileHound() {
+ _classCallCheck(this, FileHound);
-exports.lte = lte
-function lte (a, b, loose) {
- return compare(a, b, loose) <= 0
-}
+ var _this = _possibleConstructorReturn(this, (FileHound.__proto__ || Object.getPrototypeOf(FileHound)).call(this));
-exports.cmp = cmp
-function cmp (a, op, b, loose) {
- switch (op) {
- case '===':
- if (typeof a === 'object')
- a = a.version
- if (typeof b === 'object')
- b = b.version
- return a === b
+ _this._filters = [];
+ _this._searchPaths = [];
+ _this._searchPaths.push(process.cwd());
+ _this._ignoreHiddenDirectories = false;
+ _this._isMatch = _lodash2.default.noop;
+ _this._sync = false;
+ _this._directoriesOnly = false;
+ _this._includeStats = false;
+ return _this;
+ }
- case '!==':
- if (typeof a === 'object')
- a = a.version
- if (typeof b === 'object')
- b = b.version
- return a !== b
+ /**
+ * Static factory method to create an instance of FileHound
+ *
+ * @static
+ * @memberOf FileHound
+ * @method
+ * create
+ * @return FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ */
- case '':
- case '=':
- case '==':
- return eq(a, b, loose)
- case '!=':
- return neq(a, b, loose)
+ _createClass(FileHound, [{
+ key: 'modified',
- case '>':
- return gt(a, b, loose)
- case '>=':
- return gte(a, b, loose)
+ /**
+ * Filters by modifiction time
+ *
+ * @memberOf FileHound
+ * @method
+ * modified
+ * @param {string} dateExpression - date expression
+ * @return a FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * filehound
+ * .modified("< 2 days")
+ * .find()
+ * .each(console.log);
+ */
+ value: function modified(pattern) {
+ this.addFilter(function (file) {
+ var modified = file.lastModifiedSync();
+ return (0, _unitCompare.isDate)(modified).assert(pattern);
+ });
+ return this;
+ }
- case '<':
- return lt(a, b, loose)
+ /**
+ * Filters by file access time
+ *
+ * @memberOf FileHound
+ * @method
+ * accessed
+ * @param {string} dateExpression - date expression
+ * @return a FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * filehound
+ * .accessed("< 10 minutes")
+ * .find()
+ * .each(console.log);
+ */
- case '<=':
- return lte(a, b, loose)
+ }, {
+ key: 'accessed',
+ value: function accessed(pattern) {
+ this.addFilter(function (file) {
+ var accessed = file.lastAccessedSync();
+ return (0, _unitCompare.isDate)(accessed).assert(pattern);
+ });
+ return this;
+ }
- default:
- throw new TypeError('Invalid operator: ' + op)
- }
-}
+ /**
+ * Filters change time
+ *
+ * @memberOf FileHound
+ * @instance
+ * @method
+ * changed
+ * @param {string} dateExpression - date expression
+ * @return a FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * filehound
+ * .changed("< 10 minutes")
+ * .find()
+ * .each(console.log);
+ */
-exports.Comparator = Comparator
-function Comparator (comp, options) {
- if (!options || typeof options !== 'object') {
- options = {
- loose: !!options,
- includePrerelease: false
+ }, {
+ key: 'changed',
+ value: function changed(pattern) {
+ this.addFilter(function (file) {
+ var changed = file.lastChangedSync();
+ return (0, _unitCompare.isDate)(changed).assert(pattern);
+ });
+ return this;
}
- }
- if (comp instanceof Comparator) {
- if (comp.loose === !!options.loose) {
- return comp
- } else {
- comp = comp.value
- }
- }
-
- if (!(this instanceof Comparator)) {
- return new Comparator(comp, options)
- }
-
- debug('comparator', comp, options)
- this.options = options
- this.loose = !!options.loose
- this.parse(comp)
+ /**
+ *
+ * @memberOf FileHound
+ * @instance
+ * @method
+ * addFilter
+ * @param {function} function - custom filter function
+ * @return a FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * filehound
+ * .addFilter(customFilter)
+ * .find()
+ * .each(console.log);
+ */
- if (this.semver === ANY) {
- this.value = ''
- } else {
- this.value = this.operator + this.semver.version
- }
+ }, {
+ key: 'addFilter',
+ value: function addFilter(filter) {
+ this._filters.push(filter);
+ return this;
+ }
- debug('comp', this)
-}
+ /**
+ * Defines the search paths
+ *
+ * @memberOf FileHound
+ * @instance
+ * @method
+ * paths
+ * @param {array} path - array of paths
+ * @return a FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * filehound
+ * .paths("/tmp", "/etc") // or ["/tmp", "/etc"]
+ * .find()
+ * .each(console.log);
+ */
-var ANY = {}
-Comparator.prototype.parse = function (comp) {
- var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]
- var m = comp.match(r)
+ }, {
+ key: 'paths',
+ value: function paths() {
+ this._searchPaths = _lodash2.default.uniq((0, _arrays.from)(arguments)).map(_path2.default.normalize);
+ return this;
+ }
- if (!m) {
- throw new TypeError('Invalid comparator: ' + comp)
- }
+ /**
+ * Define the search path
+ *
+ * @memberOf FileHound
+ * @instance
+ * @method
+ * path
+ * @param {string} path - path
+ * @return a FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * filehound
+ * .path("/tmp")
+ * .find()
+ * .each(console.log);
+ */
- this.operator = m[1]
- if (this.operator === '=') {
- this.operator = ''
- }
+ }, {
+ key: 'path',
+ value: function path() {
+ return this.paths((0, _arrays.fromFirst)(arguments));
+ }
- // if it literally is just '>' or '' then allow anything.
- if (!m[2]) {
- this.semver = ANY
- } else {
- this.semver = new SemVer(m[2], this.options.loose)
- }
-}
+ /**
+ * Ignores files or sub-directories matching pattern
+ *
+ * @memberOf FileHound
+ * @instance
+ * @method
+ * discard
+ * @param {string|array} regex - regex or array of regex
+ * @return a FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * filehound
+ * .discard("*.tmp*")
+ * .find()
+ * .each(console.log);
+ */
-Comparator.prototype.toString = function () {
- return this.value
-}
+ }, {
+ key: 'discard',
+ value: function discard() {
+ var _this2 = this;
-Comparator.prototype.test = function (version) {
- debug('Comparator.test', version, this.options.loose)
+ var patterns = (0, _arrays.from)(arguments);
+ patterns.forEach(function (pattern) {
+ _this2.addFilter((0, _functions.negate)(isRegExpMatch(pattern)));
+ });
+ return this;
+ }
- if (this.semver === ANY) {
- return true
- }
+ /**
+ * Filter on file extension
+ *
+ * @memberOf FileHound
+ * @instance
+ * @method
+ * ext
+ * @param {string|array} extensions - extension or an array of extensions
+ * @return a FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * let filehound = FileHound.create();
+ * filehound
+ * .ext(".json")
+ * .find()
+ * .each(console.log);
+ *
+ * // array of extensions to filter by
+ * filehound = FileHound.create();
+ * filehound
+ * .ext([".json", ".txt"])
+ * .find()
+ * .each(console.log);
+ *
+ * // supports var args
+ * filehound = FileHound.create();
+ * filehound
+ * .ext(".json", ".txt")
+ * .find()
+ * .each(console.log);
+ */
- if (typeof version === 'string') {
- version = new SemVer(version, this.options)
- }
+ }, {
+ key: 'ext',
+ value: function ext() {
+ var extensions = (0, _arrays.from)(arguments).map(cleanExtension);
- return cmp(version, this.operator, this.semver, this.options)
-}
+ this.addFilter(function (file) {
+ return _lodash2.default.includes(extensions, file.getPathExtension());
+ });
+ return this;
+ }
-Comparator.prototype.intersects = function (comp, options) {
- if (!(comp instanceof Comparator)) {
- throw new TypeError('a Comparator is required')
- }
+ /**
+ * Filter by file size
+ *
+ * @memberOf FileHound
+ * @instance
+ * @method
+ * size
+ * @param {string} sizeExpression - a size expression
+ * @return a FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * filehound
+ * .size("<10kb")
+ * .find()
+ * .each(console.log);
+ */
- if (!options || typeof options !== 'object') {
- options = {
- loose: !!options,
- includePrerelease: false
+ }, {
+ key: 'size',
+ value: function size(sizeExpression) {
+ this.addFilter(function (file) {
+ var size = file.sizeSync();
+ return (0, _unitCompare.isNumber)(size).assert(sizeExpression);
+ });
+ return this;
}
- }
-
- var rangeTmp
- if (this.operator === '') {
- rangeTmp = new Range(comp.value, options)
- return satisfies(this.value, rangeTmp, options)
- } else if (comp.operator === '') {
- rangeTmp = new Range(this.value, options)
- return satisfies(comp.semver, rangeTmp, options)
- }
+ /**
+ * Filter by zero length files
+ *
+ * @memberOf FileHound
+ * @instance
+ * @method
+ * isEmpty
+ * @param {string} path - path
+ * @return a FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * filehound
+ * .size("<10kb")
+ * .find()
+ * .each(console.log);
+ */
- var sameDirectionIncreasing =
- (this.operator === '>=' || this.operator === '>') &&
- (comp.operator === '>=' || comp.operator === '>')
- var sameDirectionDecreasing =
- (this.operator === '<=' || this.operator === '<') &&
- (comp.operator === '<=' || comp.operator === '<')
- var sameSemVer = this.semver.version === comp.semver.version
- var differentDirectionsInclusive =
- (this.operator === '>=' || this.operator === '<=') &&
- (comp.operator === '>=' || comp.operator === '<=')
- var oppositeDirectionsLessThan =
- cmp(this.semver, '<', comp.semver, options) &&
- ((this.operator === '>=' || this.operator === '>') &&
- (comp.operator === '<=' || comp.operator === '<'))
- var oppositeDirectionsGreaterThan =
- cmp(this.semver, '>', comp.semver, options) &&
- ((this.operator === '<=' || this.operator === '<') &&
- (comp.operator === '>=' || comp.operator === '>'))
+ }, {
+ key: 'isEmpty',
+ value: function isEmpty() {
+ this.size(0);
+ return this;
+ }
- return sameDirectionIncreasing || sameDirectionDecreasing ||
- (sameSemVer && differentDirectionsInclusive) ||
- oppositeDirectionsLessThan || oppositeDirectionsGreaterThan
-}
+ /**
+ * Filter by a file glob
+ *
+ * @memberOf FileHound
+ * @instance
+ * @method
+ * glob
+ * @param {array} glob - array of globs
+ * @return a FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * filehound
+ * .glob(['*tmp*']) // .glob('*tmp*') || .glob('*tmp1*','*tmp2*')
+ * .find()
+ * .each(console.log); // array of files names all containing 'tmp'
+ */
-exports.Range = Range
-function Range (range, options) {
- if (!options || typeof options !== 'object') {
- options = {
- loose: !!options,
- includePrerelease: false
+ }, {
+ key: 'glob',
+ value: function glob() {
+ return this.match((0, _arrays.from)(arguments));
}
- }
- if (range instanceof Range) {
- if (range.loose === !!options.loose &&
- range.includePrerelease === !!options.includePrerelease) {
- return range
- } else {
- return new Range(range.raw, options)
- }
- }
+ /**
+ * Same as glob
+ * @see glob
+ */
- if (range instanceof Comparator) {
- return new Range(range.value, options)
- }
+ }, {
+ key: 'match',
+ value: function match(globPatterns) {
+ if (_lodash2.default.isArray(globPatterns)) {
+ this.addFilter(function (file) {
+ var isMatch = globPatterns.filter(function (globPattern) {
+ return file.isMatch(globPattern);
+ })[0];
+ return isMatch ? true : false;
+ });
+ } else {
+ this.addFilter(function (file) {
+ return file.isMatch(globPatterns);
+ });
+ }
+ return this;
+ }
- if (!(this instanceof Range)) {
- return new Range(range, options)
- }
+ /**
+ * Negates filters
+ *
+ * @memberOf FileHound
+ * @instance
+ * @method
+ * not
+ * @param {string} glob - file glob
+ * @return a FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * filehound
+ * .not()
+ * .glob("*tmp*")
+ * .find()
+ * .each(console.log); // array of files names NOT containing 'tmp'
+ */
- this.options = options
- this.loose = !!options.loose
- this.includePrerelease = !!options.includePrerelease
+ }, {
+ key: 'not',
+ value: function not() {
+ this.negateFilters = true;
+ return this;
+ }
- // First, split based on boolean or ||
- this.raw = range
- this.set = range.split(/\s*\|\|\s*/).map(function (range) {
- return this.parseRange(range.trim())
- }, this).filter(function (c) {
- // throw out any that are not relevant for whatever reason
- return c.length
- })
+ /**
+ * Filter to ignore hidden files
+ *
+ * @memberOf FileHound
+ * @instance
+ * @method
+ * ignoreHiddenFiles
+ * @return a FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * filehound
+ * .ignoreHiddenFiles()
+ * .find()
+ * .each(console.log); // array of files names that are not hidden files
+ */
- if (!this.set.length) {
- throw new TypeError('Invalid SemVer Range: ' + range)
- }
+ }, {
+ key: 'ignoreHiddenFiles',
+ value: function ignoreHiddenFiles() {
+ this.addFilter(function (file) {
+ return !file.isHiddenSync();
+ });
+ return this;
+ }
- this.format()
-}
+ /**
+ * Ignore hidden directories
+ *
+ * @memberOf FileHound
+ * @instance
+ * @method
+ * ignoreHiddenDirectories
+ * @return a FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * filehound
+ * .ignoreHiddenDirectories()
+ * .find()
+ * .each(console.log); // array of files names that are not hidden directories
+ */
-Range.prototype.format = function () {
- this.range = this.set.map(function (comps) {
- return comps.join(' ').trim()
- }).join('||').trim()
- return this.range
-}
+ }, {
+ key: 'ignoreHiddenDirectories',
+ value: function ignoreHiddenDirectories() {
+ this._ignoreHiddenDirectories = true;
+ return this;
+ }
-Range.prototype.toString = function () {
- return this.range
-}
+ /**
+ * Include file stats
+ *
+ * @memberOf FileHound
+ * @instance
+ * @method
+ * includeFileStats
+ * @return a FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * filehound
+ * .includeFileStats()
+ * .find()
+ * .each(console.log); // array of file objects containing `path` and `stats` properties
+ */
-Range.prototype.parseRange = function (range) {
- var loose = this.options.loose
- range = range.trim()
- // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
- var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]
- range = range.replace(hr, hyphenReplace)
- debug('hyphen replace', range)
- // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
- range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)
- debug('comparator trim', range, re[COMPARATORTRIM])
+ }, {
+ key: 'includeFileStats',
+ value: function includeFileStats() {
+ this._includeStats = true;
+ return this;
+ }
- // `~ 1.2.3` => `~1.2.3`
- range = range.replace(re[TILDETRIM], tildeTrimReplace)
+ /**
+ * Find sub-directories
+ *
+ * @memberOf FileHound
+ * @instance
+ * @method
+ * directory
+ * @return a FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * filehound
+ * .directory()
+ * .find()
+ * .each(console.log); // array of matching sub-directories
+ */
- // `^ 1.2.3` => `^1.2.3`
- range = range.replace(re[CARETTRIM], caretTrimReplace)
+ }, {
+ key: 'directory',
+ value: function directory() {
+ this._directoriesOnly = true;
+ return this;
+ }
- // normalize spaces
- range = range.split(/\s+/).join(' ')
+ /**
+ * Find sockets
+ *
+ * @memberOf FileHound
+ * @instance
+ * @method
+ * socket
+ * @return a FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * filehound
+ * .socket()
+ * .find()
+ * .each(console.log); // array of matching sockets
+ */
- // At this point, the range is completely trimmed and
- // ready to be split into comparators.
-
- var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]
- var set = range.split(' ').map(function (comp) {
- return parseComparator(comp, this.options)
- }, this).join(' ').split(/\s+/)
- if (this.options.loose) {
- // in loose mode, throw out any that are not valid comparators
- set = set.filter(function (comp) {
- return !!comp.match(compRe)
- })
- }
- set = set.map(function (comp) {
- return new Comparator(comp, this.options)
- }, this)
-
- return set
-}
-
-Range.prototype.intersects = function (range, options) {
- if (!(range instanceof Range)) {
- throw new TypeError('a Range is required')
- }
+ }, {
+ key: 'socket',
+ value: function socket() {
+ this.addFilter(function (file) {
+ return file.isSocket();
+ });
+ return this;
+ }
- return this.set.some(function (thisComparators) {
- return thisComparators.every(function (thisComparator) {
- return range.set.some(function (rangeComparators) {
- return rangeComparators.every(function (rangeComparator) {
- return thisComparator.intersects(rangeComparator, options)
- })
- })
- })
- })
-}
+ /**
+ * Specify the directory search depth. If set to zero, recursive searching
+ * will be disabled
+ *
+ * @memberOf FileHound
+ * @instance
+ * @method
+ * depth
+ * @return a FileHound instance
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * filehound
+ * .depth(0)
+ * .find()
+ * .each(console.log); // array of files names only in the current directory
+ */
-// Mostly just for testing and legacy API reasons
-exports.toComparators = toComparators
-function toComparators (range, options) {
- return new Range(range, options).set.map(function (comp) {
- return comp.map(function (c) {
- return c.value
- }).join(' ').trim().split(' ')
- })
-}
+ }, {
+ key: 'depth',
+ value: function depth(_depth) {
+ this.maxDepth = _depth;
+ return this;
+ }
-// comprised of xranges, tildes, stars, and gtlt's at this point.
-// already replaced the hyphen ranges
-// turn into a set of JUST comparators.
-function parseComparator (comp, options) {
- debug('comp', comp, options)
- comp = replaceCarets(comp, options)
- debug('caret', comp)
- comp = replaceTildes(comp, options)
- debug('tildes', comp)
- comp = replaceXRanges(comp, options)
- debug('xrange', comp)
- comp = replaceStars(comp, options)
- debug('stars', comp)
- return comp
-}
+ /**
+ * Asynchronously executes a file search.
+ *
+ * @memberOf FileHound
+ * @instance
+ * @method
+ * find
+ * @param {function} function - Optionally accepts a callback function
+ * @return Returns a Promise of all matches. If the Promise fulfils,
+ * the fulfilment value is an array of all matching files
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * filehound
+ * .find()
+ * .each(console.log);
+ *
+ * // using a callback
+ * filehound
+ * .find((err, files) => {
+ * if (err) return console.error(err);
+ *
+ * console.log(files);
+ * });
+ */
-function isX (id) {
- return !id || id.toLowerCase() === 'x' || id === '*'
-}
+ }, {
+ key: 'find',
+ value: function find(cb) {
+ var _this3 = this;
-// ~, ~> --> * (any, kinda silly)
-// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
-// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
-// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
-// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
-// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
-function replaceTildes (comp, options) {
- return comp.trim().split(/\s+/).map(function (comp) {
- return replaceTilde(comp, options)
- }).join(' ')
-}
+ this._initFilters();
-function replaceTilde (comp, options) {
- var r = options.loose ? re[TILDELOOSE] : re[TILDE]
- return comp.replace(r, function (_, M, m, p, pr) {
- debug('tilde', comp, _, M, m, p, pr)
- var ret
+ var searchAsync = this._searchAsync.bind(this);
+ var searches = _bluebird2.default.map(this.getSearchPaths(), searchAsync);
- if (isX(M)) {
- ret = ''
- } else if (isX(m)) {
- ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
- } else if (isX(p)) {
- // ~1.2 == >=1.2.0 <1.3.0
- ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
- } else if (pr) {
- debug('replaceTilde pr', pr)
- ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
- ' <' + M + '.' + (+m + 1) + '.0'
- } else {
- // ~1.2.3 == >=1.2.3 <1.3.0
- ret = '>=' + M + '.' + m + '.' + p +
- ' <' + M + '.' + (+m + 1) + '.0'
+ return _bluebird2.default.all(searches).reduce(flatten).map(this.formatResult.bind(this)).catch(function (e) {
+ _this3.emit('error', e);
+ throw e;
+ }).finally(function () {
+ _this3.emit('end');
+ }).asCallback(cb);
}
- debug('tilde return', ret)
- return ret
- })
-}
+ /**
+ * Synchronously executes a file search.
+ *
+ * @memberOf FileHound
+ * @instance
+ * @method
+ * findSync
+ * @return Returns an array of all matching files
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.create();
+ * const files = filehound.findSync();
+ * console.log(files);
+ *
+ */
-// ^ --> * (any, kinda silly)
-// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
-// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
-// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
-// ^1.2.3 --> >=1.2.3 <2.0.0
-// ^1.2.0 --> >=1.2.0 <2.0.0
-function replaceCarets (comp, options) {
- return comp.trim().split(/\s+/).map(function (comp) {
- return replaceCaret(comp, options)
- }).join(' ')
-}
+ }, {
+ key: 'findSync',
+ value: function findSync() {
+ this._initFilters();
-function replaceCaret (comp, options) {
- debug('caret', comp, options)
- var r = options.loose ? re[CARETLOOSE] : re[CARET]
- return comp.replace(r, function (_, M, m, p, pr) {
- debug('caret', comp, _, M, m, p, pr)
- var ret
+ var searchSync = this._searchSync.bind(this);
- if (isX(M)) {
- ret = ''
- } else if (isX(m)) {
- ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
- } else if (isX(p)) {
- if (M === '0') {
- ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
- } else {
- ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'
- }
- } else if (pr) {
- debug('replaceCaret pr', pr)
- if (M === '0') {
- if (m === '0') {
- ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
- ' <' + M + '.' + m + '.' + (+p + 1)
- } else {
- ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
- ' <' + M + '.' + (+m + 1) + '.0'
- }
- } else {
- ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
- ' <' + (+M + 1) + '.0.0'
- }
- } else {
- debug('no pr')
- if (M === '0') {
- if (m === '0') {
- ret = '>=' + M + '.' + m + '.' + p +
- ' <' + M + '.' + m + '.' + (+p + 1)
- } else {
- ret = '>=' + M + '.' + m + '.' + p +
- ' <' + M + '.' + (+m + 1) + '.0'
- }
- } else {
- ret = '>=' + M + '.' + m + '.' + p +
- ' <' + (+M + 1) + '.0.0'
+ return this.getSearchPaths().map(searchSync).reduce(flatten).map(this.formatResult.bind(this));
+ }
+ }, {
+ key: '_atMaxDepth',
+ value: function _atMaxDepth(root, dir) {
+ var depth = dir.getDepthSync() - root.getDepthSync();
+ return isDefined(this.maxDepth) && depth > this.maxDepth;
+ }
+ }, {
+ key: '_shouldFilterDirectory',
+ value: function _shouldFilterDirectory(root, dir) {
+ return this._atMaxDepth(root, dir) || this._ignoreHiddenDirectories && dir.isHiddenSync();
+ }
+ }, {
+ key: '_newMatcher',
+ value: function _newMatcher() {
+ var isMatch = (0, _functions.compose)(this._filters);
+ if (this.negateFilters) {
+ return (0, _functions.negate)(isMatch);
}
+ return isMatch;
}
+ }, {
+ key: '_initFilters',
+ value: function _initFilters() {
+ this._isMatch = this._newMatcher();
+ }
+ }, {
+ key: '_searchSync',
+ value: function _searchSync(dir) {
+ this._sync = true;
+ var root = _fileJs2.default.create(dir);
+ var trackedPaths = [];
+ var files = this._search(root, root, trackedPaths);
+ return this._directoriesOnly ? trackedPaths.filter(this._isMatch) : files;
+ }
+ }, {
+ key: '_searchAsync',
+ value: function _searchAsync(dir) {
+ var _this4 = this;
- debug('caret return', ret)
- return ret
- })
-}
-
-function replaceXRanges (comp, options) {
- debug('replaceXRanges', comp, options)
- return comp.split(/\s+/).map(function (comp) {
- return replaceXRange(comp, options)
- }).join(' ')
-}
+ var root = _fileJs2.default.create(dir);
+ var trackedPaths = [];
+ var pending = this._search(root, root, trackedPaths);
-function replaceXRange (comp, options) {
- comp = comp.trim()
- var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]
- return comp.replace(r, function (ret, gtlt, M, m, p, pr) {
- debug('xRange', comp, ret, gtlt, M, m, p, pr)
- var xM = isX(M)
- var xm = xM || isX(m)
- var xp = xm || isX(p)
- var anyX = xp
+ return pending.then(function (files) {
+ if (_this4._directoriesOnly) return trackedPaths.filter(_this4._isMatch);
- if (gtlt === '=' && anyX) {
- gtlt = ''
+ files.forEach(function (file) {
+ _this4.emit('match', file.getName());
+ });
+ return files;
+ });
}
+ }, {
+ key: '_search',
+ value: function _search(root, path, trackedPaths) {
+ var _this5 = this;
- if (xM) {
- if (gtlt === '>' || gtlt === '<') {
- // nothing is allowed
- ret = '<0.0.0'
- } else {
- // nothing is forbidden
- ret = '*'
- }
- } else if (gtlt && anyX) {
- // we know patch is an x, because we have any x at all.
- // replace X with 0
- if (xm) {
- m = 0
- }
- p = 0
+ if (this._shouldFilterDirectory(root, path)) return [];
- if (gtlt === '>') {
- // >1 => >=2.0.0
- // >1.2 => >=1.3.0
- // >1.2.3 => >= 1.2.4
- gtlt = '>='
- if (xm) {
- M = +M + 1
- m = 0
- p = 0
- } else {
- m = +m + 1
- p = 0
- }
- } else if (gtlt === '<=') {
- // <=0.7.x is actually <0.8.0, since any 0.7.x should
- // pass. Similarly, <=7.x is actually <8.0.0, etc.
- gtlt = '<'
- if (xm) {
- M = +M + 1
- } else {
- m = +m + 1
+ var getFiles = this._sync ? path.getFilesSync.bind(path) : path.getFiles.bind(path);
+ return getFiles().map(function (file) {
+ var isDir = false;
+ try {
+ isDir = file.isDirectorySync();
+ // eslint-disable-next-line no-empty
+ } catch (e) {}
+
+ if (isDir) {
+ if (!_this5._shouldFilterDirectory(root, file)) trackedPaths.push(file);
+ return _this5._search(root, file, trackedPaths);
}
+ return file;
+ }).reduce(flatten, []).filter(this._isMatch);
+ }
+ }, {
+ key: 'formatResult',
+ value: function formatResult(file) {
+ if (this._includeStats) {
+ return {
+ path: file.getName(),
+ stats: file._getStatsSync()
+ };
}
+ return file.getName();
+ }
+ }, {
+ key: 'getSearchPaths',
+ value: function getSearchPaths() {
+ var paths = isDefined(this.maxDepth) ? this._searchPaths : (0, _files.reducePaths)(this._searchPaths);
- ret = gtlt + M + '.' + m + '.' + p
- } else if (xm) {
- ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
- } else if (xp) {
- ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
+ return (0, _arrays.copy)(paths);
+ }
+ }], [{
+ key: 'create',
+ value: function create() {
+ return new FileHound();
}
- debug('xRange return', ret)
+ /**
+ * Returns all matches from one of more FileHound instances
+ *
+ * @static
+ * @memberOf FileHound
+ * @method
+ * any
+ * @return a promise containing all matches. If the Promise fulfils,
+ * the fulfilment value is an array of all matching files.
+ * @example
+ * import FileHound from 'filehound';
+ *
+ * const filehound = FileHound.any(fh1, fh2);
+ */
- return ret
- })
-}
+ }, {
+ key: 'any',
+ value: function any() {
+ var args = (0, _arrays.from)(arguments);
+ return _bluebird2.default.all(args).reduce(flatten, []);
+ }
+ }]);
-// Because * is AND-ed with everything else in the comparator,
-// and '' means "any version", just remove the *s entirely.
-function replaceStars (comp, options) {
- debug('replaceStars', comp, options)
- // Looseness is ignored here. star is always as loose as it gets!
- return comp.trim().replace(re[STAR], '')
-}
+ return FileHound;
+}(_events.EventEmitter);
-// This function is passed to string.replace(re[HYPHENRANGE])
-// M, m, patch, prerelease, build
-// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
-// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
-// 1.2 - 3.4 => >=1.2.0 <3.5.0
-function hyphenReplace ($0,
- from, fM, fm, fp, fpr, fb,
- to, tM, tm, tp, tpr, tb) {
- if (isX(fM)) {
- from = ''
- } else if (isX(fm)) {
- from = '>=' + fM + '.0.0'
- } else if (isX(fp)) {
- from = '>=' + fM + '.' + fm + '.0'
- } else {
- from = '>=' + from
- }
+exports.default = FileHound;
- if (isX(tM)) {
- to = ''
- } else if (isX(tm)) {
- to = '<' + (+tM + 1) + '.0.0'
- } else if (isX(tp)) {
- to = '<' + tM + '.' + (+tm + 1) + '.0'
- } else if (tpr) {
- to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr
- } else {
- to = '<=' + to
- }
+/***/ }),
- return (from + ' ' + to).trim()
-}
+/***/ 93:
+/***/ (function(module, __unusedexports, __webpack_require__) {
-// if ANY of the sets match ALL of its comparators, then pass
-Range.prototype.test = function (version) {
- if (!version) {
- return false
- }
+var Stream = __webpack_require__(413).Stream
- if (typeof version === 'string') {
- version = new SemVer(version, this.options)
- }
+module.exports = legacy
- for (var i = 0; i < this.set.length; i++) {
- if (testSet(this.set[i], version, this.options)) {
- return true
- }
+function legacy (fs) {
+ return {
+ ReadStream: ReadStream,
+ WriteStream: WriteStream
}
- return false
-}
-function testSet (set, version, options) {
- for (var i = 0; i < set.length; i++) {
- if (!set[i].test(version)) {
- return false
- }
- }
+ function ReadStream (path, options) {
+ if (!(this instanceof ReadStream)) return new ReadStream(path, options);
- if (version.prerelease.length && !options.includePrerelease) {
- // Find the set of versions that are allowed to have prereleases
- // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
- // That should allow `1.2.3-pr.2` to pass.
- // However, `1.2.4-alpha.notready` should NOT be allowed,
- // even though it's within the range set by the comparators.
- for (i = 0; i < set.length; i++) {
- debug(set[i].semver)
- if (set[i].semver === ANY) {
- continue
- }
+ Stream.call(this);
- if (set[i].semver.prerelease.length > 0) {
- var allowed = set[i].semver
- if (allowed.major === version.major &&
- allowed.minor === version.minor &&
- allowed.patch === version.patch) {
- return true
- }
- }
- }
+ var self = this;
- // Version has a -pre, but it's not one of the ones we like.
- return false
- }
+ this.path = path;
+ this.fd = null;
+ this.readable = true;
+ this.paused = false;
- return true
-}
+ this.flags = 'r';
+ this.mode = 438; /*=0666*/
+ this.bufferSize = 64 * 1024;
-exports.satisfies = satisfies
-function satisfies (version, range, options) {
- try {
- range = new Range(range, options)
- } catch (er) {
- return false
- }
- return range.test(version)
-}
+ options = options || {};
-exports.maxSatisfying = maxSatisfying
-function maxSatisfying (versions, range, options) {
- var max = null
- var maxSV = null
- try {
- var rangeObj = new Range(range, options)
- } catch (er) {
- return null
- }
- versions.forEach(function (v) {
- if (rangeObj.test(v)) {
- // satisfies(v, range, options)
- if (!max || maxSV.compare(v) === -1) {
- // compare(max, v, true)
- max = v
- maxSV = new SemVer(max, options)
- }
+ // Mixin options into this
+ var keys = Object.keys(options);
+ for (var index = 0, length = keys.length; index < length; index++) {
+ var key = keys[index];
+ this[key] = options[key];
}
- })
- return max
-}
-exports.minSatisfying = minSatisfying
-function minSatisfying (versions, range, options) {
- var min = null
- var minSV = null
- try {
- var rangeObj = new Range(range, options)
- } catch (er) {
- return null
- }
- versions.forEach(function (v) {
- if (rangeObj.test(v)) {
- // satisfies(v, range, options)
- if (!min || minSV.compare(v) === 1) {
- // compare(min, v, true)
- min = v
- minSV = new SemVer(min, options)
- }
- }
- })
- return min
-}
+ if (this.encoding) this.setEncoding(this.encoding);
-exports.minVersion = minVersion
-function minVersion (range, loose) {
- range = new Range(range, loose)
+ if (this.start !== undefined) {
+ if ('number' !== typeof this.start) {
+ throw TypeError('start must be a Number');
+ }
+ if (this.end === undefined) {
+ this.end = Infinity;
+ } else if ('number' !== typeof this.end) {
+ throw TypeError('end must be a Number');
+ }
- var minver = new SemVer('0.0.0')
- if (range.test(minver)) {
- return minver
- }
+ if (this.start > this.end) {
+ throw new Error('start must be <= end');
+ }
- minver = new SemVer('0.0.0-0')
- if (range.test(minver)) {
- return minver
- }
+ this.pos = this.start;
+ }
- minver = null
- for (var i = 0; i < range.set.length; ++i) {
- var comparators = range.set[i]
+ if (this.fd !== null) {
+ process.nextTick(function() {
+ self._read();
+ });
+ return;
+ }
- comparators.forEach(function (comparator) {
- // Clone to avoid manipulating the comparator's semver object.
- var compver = new SemVer(comparator.semver.version)
- switch (comparator.operator) {
- case '>':
- if (compver.prerelease.length === 0) {
- compver.patch++
- } else {
- compver.prerelease.push(0)
- }
- compver.raw = compver.format()
- /* fallthrough */
- case '':
- case '>=':
- if (!minver || gt(minver, compver)) {
- minver = compver
- }
- break
- case '<':
- case '<=':
- /* Ignore maximum versions */
- break
- /* istanbul ignore next */
- default:
- throw new Error('Unexpected operation: ' + comparator.operator)
+ fs.open(this.path, this.flags, this.mode, function (err, fd) {
+ if (err) {
+ self.emit('error', err);
+ self.readable = false;
+ return;
}
- })
- }
-
- if (minver && range.test(minver)) {
- return minver
- }
-
- return null
-}
-exports.validRange = validRange
-function validRange (range, options) {
- try {
- // Return '*' instead of '' so that truthiness works.
- // This will throw if it's invalid anyway
- return new Range(range, options).range || '*'
- } catch (er) {
- return null
+ self.fd = fd;
+ self.emit('open', fd);
+ self._read();
+ })
}
-}
-
-// Determine if version is less than all the versions possible in the range
-exports.ltr = ltr
-function ltr (version, range, options) {
- return outside(version, range, '<', options)
-}
-
-// Determine if version is greater than all the versions possible in the range.
-exports.gtr = gtr
-function gtr (version, range, options) {
- return outside(version, range, '>', options)
-}
-exports.outside = outside
-function outside (version, range, hilo, options) {
- version = new SemVer(version, options)
- range = new Range(range, options)
+ function WriteStream (path, options) {
+ if (!(this instanceof WriteStream)) return new WriteStream(path, options);
- var gtfn, ltefn, ltfn, comp, ecomp
- switch (hilo) {
- case '>':
- gtfn = gt
- ltefn = lte
- ltfn = lt
- comp = '>'
- ecomp = '>='
- break
- case '<':
- gtfn = lt
- ltefn = gte
- ltfn = gt
- comp = '<'
- ecomp = '<='
- break
- default:
- throw new TypeError('Must provide a hilo val of "<" or ">"')
- }
+ Stream.call(this);
- // If it satisifes the range it is not outside
- if (satisfies(version, range, options)) {
- return false
- }
+ this.path = path;
+ this.fd = null;
+ this.writable = true;
- // From now on, variable terms are as if we're in "gtr" mode.
- // but note that everything is flipped for the "ltr" function.
+ this.flags = 'w';
+ this.encoding = 'binary';
+ this.mode = 438; /*=0666*/
+ this.bytesWritten = 0;
- for (var i = 0; i < range.set.length; ++i) {
- var comparators = range.set[i]
+ options = options || {};
- var high = null
- var low = null
+ // Mixin options into this
+ var keys = Object.keys(options);
+ for (var index = 0, length = keys.length; index < length; index++) {
+ var key = keys[index];
+ this[key] = options[key];
+ }
- comparators.forEach(function (comparator) {
- if (comparator.semver === ANY) {
- comparator = new Comparator('>=0.0.0')
+ if (this.start !== undefined) {
+ if ('number' !== typeof this.start) {
+ throw TypeError('start must be a Number');
}
- high = high || comparator
- low = low || comparator
- if (gtfn(comparator.semver, high.semver, options)) {
- high = comparator
- } else if (ltfn(comparator.semver, low.semver, options)) {
- low = comparator
+ if (this.start < 0) {
+ throw new Error('start must be >= zero');
}
- })
- // If the edge version comparator has a operator then our version
- // isn't outside it
- if (high.operator === comp || high.operator === ecomp) {
- return false
+ this.pos = this.start;
}
- // If the lowest version comparator has an operator and our version
- // is less than it then it isn't higher than the range
- if ((!low.operator || low.operator === comp) &&
- ltefn(version, low.semver)) {
- return false
- } else if (low.operator === ecomp && ltfn(version, low.semver)) {
- return false
+ this.busy = false;
+ this._queue = [];
+
+ if (this.fd === null) {
+ this._open = fs.open;
+ this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);
+ this.flush();
}
}
- return true
}
-exports.prerelease = prerelease
-function prerelease (version, options) {
- var parsed = parse(version, options)
- return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
-}
-exports.intersects = intersects
-function intersects (r1, r2, options) {
- r1 = new Range(r1, options)
- r2 = new Range(r2, options)
- return r1.intersects(r2)
-}
+/***/ }),
-exports.coerce = coerce
-function coerce (version) {
- if (version instanceof SemVer) {
- return version
- }
+/***/ 95:
+/***/ (function(module, __unusedexports, __webpack_require__) {
- if (typeof version !== 'string') {
- return null
- }
+"use strict";
- var match = version.match(re[COERCE])
- if (match == null) {
- return null
- }
+const fs = __webpack_require__(598)
+const path = __webpack_require__(622)
+const copySync = __webpack_require__(43).copySync
+const removeSync = __webpack_require__(723).removeSync
+const mkdirpSync = __webpack_require__(727).mkdirpSync
+const stat = __webpack_require__(127)
- return parse(match[1] +
- '.' + (match[2] || '0') +
- '.' + (match[3] || '0'))
-}
+function moveSync (src, dest, opts) {
+ opts = opts || {}
+ const overwrite = opts.overwrite || opts.clobber || false
+ const { srcStat } = stat.checkPathsSync(src, dest, 'move')
+ stat.checkParentPathsSync(src, srcStat, dest, 'move')
+ mkdirpSync(path.dirname(dest))
+ return doRename(src, dest, overwrite)
+}
-/***/ }),
-/* 49 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+function doRename (src, dest, overwrite) {
+ if (overwrite) {
+ removeSync(dest)
+ return rename(src, dest, overwrite)
+ }
+ if (fs.existsSync(dest)) throw new Error('dest already exists.')
+ return rename(src, dest, overwrite)
+}
-"use strict";
+function rename (src, dest, overwrite) {
+ try {
+ fs.renameSync(src, dest)
+ } catch (err) {
+ if (err.code !== 'EXDEV') throw err
+ return moveAcrossDevice(src, dest, overwrite)
+ }
+}
-const os = __webpack_require__(87);
-const execa = __webpack_require__(955);
-
-// Reference: https://www.gaijin.at/en/lstwinver.php
-const names = new Map([
- ['10.0', '10'],
- ['6.3', '8.1'],
- ['6.2', '8'],
- ['6.1', '7'],
- ['6.0', 'Vista'],
- ['5.2', 'Server 2003'],
- ['5.1', 'XP'],
- ['5.0', '2000'],
- ['4.9', 'ME'],
- ['4.1', '98'],
- ['4.0', '95']
-]);
-
-const windowsRelease = release => {
- const version = /\d+\.\d/.exec(release || os.release());
-
- if (release && !version) {
- throw new Error('`release` argument doesn\'t match `n.n`');
- }
+function moveAcrossDevice (src, dest, overwrite) {
+ const opts = {
+ overwrite,
+ errorOnExist: true
+ }
+ copySync(src, dest, opts)
+ return removeSync(src)
+}
- const ver = (version || [])[0];
-
- // Server 2008, 2012, 2016, and 2019 versions are ambiguous with desktop versions and must be detected at runtime.
- // If `release` is omitted or we're on a Windows system, and the version number is an ambiguous version
- // then use `wmic` to get the OS caption: https://msdn.microsoft.com/en-us/library/aa394531(v=vs.85).aspx
- // If `wmic` is obsoloete (later versions of Windows 10), use PowerShell instead.
- // If the resulting caption contains the year 2008, 2012, 2016 or 2019, it is a server version, so return a server OS name.
- if ((!release || release === os.release()) && ['6.1', '6.2', '6.3', '10.0'].includes(ver)) {
- let stdout;
- try {
- stdout = execa.sync('powershell', ['(Get-CimInstance -ClassName Win32_OperatingSystem).caption']).stdout || '';
- } catch (_) {
- stdout = execa.sync('wmic', ['os', 'get', 'Caption']).stdout || '';
- }
+module.exports = moveSync
- const year = (stdout.match(/2008|2012|2016|2019/) || [])[0];
- if (year) {
- return `Server ${year}`;
- }
- }
+/***/ }),
- return names.get(ver);
-};
+/***/ 102:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
-module.exports = windowsRelease;
+"use strict";
+// For internal use, subject to change.
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+ result["default"] = mod;
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+// We use any as a valid input type
+/* eslint-disable @typescript-eslint/no-explicit-any */
+const fs = __importStar(__webpack_require__(747));
+const os = __importStar(__webpack_require__(87));
+const utils_1 = __webpack_require__(82);
+function issueCommand(command, message) {
+ const filePath = process.env[`GITHUB_${command}`];
+ if (!filePath) {
+ throw new Error(`Unable to find environment variable for file command ${command}`);
+ }
+ if (!fs.existsSync(filePath)) {
+ throw new Error(`Missing file at path: ${filePath}`);
+ }
+ fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, {
+ encoding: 'utf8'
+ });
+}
+exports.issueCommand = issueCommand;
+//# sourceMappingURL=file-command.js.map
/***/ }),
-/* 50 */,
-/* 51 */,
-/* 52 */,
-/* 53 */,
-/* 54 */
+
+/***/ 110:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
-// Adapted from https://github.com/sindresorhus/make-dir
-// Copyright (c) Sindre Sorhus (sindresorhus.com)
-// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-const fs = __webpack_require__(869)
+
+const fs = __webpack_require__(598)
const path = __webpack_require__(622)
-const atLeastNode = __webpack_require__(159)
+const mkdirsSync = __webpack_require__(727).mkdirsSync
+const utimesMillisSync = __webpack_require__(916).utimesMillisSync
+const stat = __webpack_require__(127)
-const useNativeRecursiveOption = atLeastNode('10.12.0')
+function copySync (src, dest, opts) {
+ if (typeof opts === 'function') {
+ opts = { filter: opts }
+ }
-// https://github.com/nodejs/node/issues/8987
-// https://github.com/libuv/libuv/pull/1088
-const checkPath = pth => {
- if (process.platform === 'win32') {
- const pathHasInvalidWinCharacters = /[<>:"|?*]/.test(pth.replace(path.parse(pth).root, ''))
+ opts = opts || {}
+ opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now
+ opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber
- if (pathHasInvalidWinCharacters) {
- const error = new Error(`Path contains invalid characters: ${pth}`)
- error.code = 'EINVAL'
- throw error
- }
+ // Warn about using preserveTimestamps on 32-bit node
+ if (opts.preserveTimestamps && process.arch === 'ia32') {
+ console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n
+ see https://github.com/jprichardson/node-fs-extra/issues/269`)
}
+
+ const { srcStat, destStat } = stat.checkPathsSync(src, dest, 'copy')
+ stat.checkParentPathsSync(src, srcStat, dest, 'copy')
+ return handleFilterAndCopy(destStat, src, dest, opts)
}
-const processOptions = options => {
- // Must be defined here so we get fresh process.umask()
- const defaults = { mode: 0o777 & (~process.umask()) }
- if (typeof options === 'number') options = { mode: options }
- return { ...defaults, ...options }
+function handleFilterAndCopy (destStat, src, dest, opts) {
+ if (opts.filter && !opts.filter(src, dest)) return
+ const destParent = path.dirname(dest)
+ if (!fs.existsSync(destParent)) mkdirsSync(destParent)
+ return startCopy(destStat, src, dest, opts)
}
-const permissionError = pth => {
- // This replicates the exception of `fs.mkdir` with native the
- // `recusive` option when run on an invalid drive under Windows.
- const error = new Error(`operation not permitted, mkdir '${pth}'`)
- error.code = 'EPERM'
- error.errno = -4048
- error.path = pth
- error.syscall = 'mkdir'
- return error
+function startCopy (destStat, src, dest, opts) {
+ if (opts.filter && !opts.filter(src, dest)) return
+ return getStats(destStat, src, dest, opts)
}
-module.exports.makeDir = async (input, options) => {
- checkPath(input)
- options = processOptions(options)
+function getStats (destStat, src, dest, opts) {
+ const statSync = opts.dereference ? fs.statSync : fs.lstatSync
+ const srcStat = statSync(src)
- if (useNativeRecursiveOption) {
- const pth = path.resolve(input)
+ if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)
+ else if (srcStat.isFile() ||
+ srcStat.isCharacterDevice() ||
+ srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts)
+ else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)
+}
- return fs.mkdir(pth, {
- mode: options.mode,
- recursive: true
- })
+function onFile (srcStat, destStat, src, dest, opts) {
+ if (!destStat) return copyFile(srcStat, src, dest, opts)
+ return mayCopyFile(srcStat, src, dest, opts)
+}
+
+function mayCopyFile (srcStat, src, dest, opts) {
+ if (opts.overwrite) {
+ fs.unlinkSync(dest)
+ return copyFile(srcStat, src, dest, opts)
+ } else if (opts.errorOnExist) {
+ throw new Error(`'${dest}' already exists`)
}
+}
- const make = async pth => {
- try {
- await fs.mkdir(pth, options.mode)
- } catch (error) {
- if (error.code === 'EPERM') {
- throw error
- }
+function copyFile (srcStat, src, dest, opts) {
+ fs.copyFileSync(src, dest)
+ if (opts.preserveTimestamps) handleTimestamps(srcStat.mode, src, dest)
+ return setDestMode(dest, srcStat.mode)
+}
- if (error.code === 'ENOENT') {
- if (path.dirname(pth) === pth) {
- throw permissionError(pth)
- }
+function handleTimestamps (srcMode, src, dest) {
+ // Make sure the file is writable before setting the timestamp
+ // otherwise open fails with EPERM when invoked with 'r+'
+ // (through utimes call)
+ if (fileIsNotWritable(srcMode)) makeFileWritable(dest, srcMode)
+ return setDestTimestamps(src, dest)
+}
- if (error.message.includes('null bytes')) {
- throw error
- }
+function fileIsNotWritable (srcMode) {
+ return (srcMode & 0o200) === 0
+}
- await make(path.dirname(pth))
- return make(pth)
- }
+function makeFileWritable (dest, srcMode) {
+ return setDestMode(dest, srcMode | 0o200)
+}
- try {
- const stats = await fs.stat(pth)
- if (!stats.isDirectory()) {
- // This error is never exposed to the user
- // it is caught below, and the original error is thrown
- throw new Error('The path is not a directory')
- }
- } catch {
- throw error
- }
- }
+function setDestMode (dest, srcMode) {
+ return fs.chmodSync(dest, srcMode)
+}
+
+function setDestTimestamps (src, dest) {
+ // The initial srcStat.atime cannot be trusted
+ // because it is modified by the read(2) system call
+ // (See https://nodejs.org/api/fs.html#fs_stat_time_values)
+ const updatedSrcStat = fs.statSync(src)
+ return utimesMillisSync(dest, updatedSrcStat.atime, updatedSrcStat.mtime)
+}
+
+function onDir (srcStat, destStat, src, dest, opts) {
+ if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts)
+ if (destStat && !destStat.isDirectory()) {
+ throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)
}
+ return copyDir(src, dest, opts)
+}
- return make(path.resolve(input))
+function mkDirAndCopy (srcMode, src, dest, opts) {
+ fs.mkdirSync(dest)
+ copyDir(src, dest, opts)
+ return setDestMode(dest, srcMode)
}
-module.exports.makeDirSync = (input, options) => {
- checkPath(input)
- options = processOptions(options)
+function copyDir (src, dest, opts) {
+ fs.readdirSync(src).forEach(item => copyDirItem(item, src, dest, opts))
+}
- if (useNativeRecursiveOption) {
- const pth = path.resolve(input)
+function copyDirItem (item, src, dest, opts) {
+ const srcItem = path.join(src, item)
+ const destItem = path.join(dest, item)
+ const { destStat } = stat.checkPathsSync(srcItem, destItem, 'copy')
+ return startCopy(destStat, srcItem, destItem, opts)
+}
- return fs.mkdirSync(pth, {
- mode: options.mode,
- recursive: true
- })
+function onLink (destStat, src, dest, opts) {
+ let resolvedSrc = fs.readlinkSync(src)
+ if (opts.dereference) {
+ resolvedSrc = path.resolve(process.cwd(), resolvedSrc)
}
- const make = pth => {
+ if (!destStat) {
+ return fs.symlinkSync(resolvedSrc, dest)
+ } else {
+ let resolvedDest
try {
- fs.mkdirSync(pth, options.mode)
- } catch (error) {
- if (error.code === 'EPERM') {
- throw error
- }
-
- if (error.code === 'ENOENT') {
- if (path.dirname(pth) === pth) {
- throw permissionError(pth)
- }
-
- if (error.message.includes('null bytes')) {
- throw error
- }
-
- make(path.dirname(pth))
- return make(pth)
- }
+ resolvedDest = fs.readlinkSync(dest)
+ } catch (err) {
+ // dest exists and is a regular file or directory,
+ // Windows may throw UNKNOWN error. If dest already exists,
+ // fs throws error anyway, so no need to guard against it here.
+ if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlinkSync(resolvedSrc, dest)
+ throw err
+ }
+ if (opts.dereference) {
+ resolvedDest = path.resolve(process.cwd(), resolvedDest)
+ }
+ if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {
+ throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)
+ }
- try {
- if (!fs.statSync(pth).isDirectory()) {
- // This error is never exposed to the user
- // it is caught below, and the original error is thrown
- throw new Error('The path is not a directory')
- }
- } catch {
- throw error
- }
+ // prevent copy if src is a subdir of dest since unlinking
+ // dest in this case would result in removing src contents
+ // and therefore a broken symlink would be created.
+ if (fs.statSync(dest).isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {
+ throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)
}
+ return copyLink(resolvedSrc, dest)
}
+}
- return make(path.resolve(input))
+function copyLink (resolvedSrc, dest) {
+ fs.unlinkSync(dest)
+ return fs.symlinkSync(resolvedSrc, dest)
}
+module.exports = copySync
+
/***/ }),
-/* 55 */,
-/* 56 */,
-/* 57 */,
-/* 58 */,
-/* 59 */,
-/* 60 */,
-/* 61 */,
-/* 62 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
+
+/***/ 120:
+/***/ (function(module) {
"use strict";
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-Object.defineProperty(exports, "v1", {
- enumerable: true,
- get: function () {
- return _v.default;
- }
-});
-Object.defineProperty(exports, "v3", {
- enumerable: true,
- get: function () {
- return _v2.default;
- }
-});
-Object.defineProperty(exports, "v4", {
- enumerable: true,
- get: function () {
- return _v3.default;
- }
-});
-Object.defineProperty(exports, "v5", {
- enumerable: true,
- get: function () {
- return _v4.default;
- }
-});
+function createError(msg, code, props) {
+ var err = msg instanceof Error ? msg : new Error(msg);
+ var key;
-var _v = _interopRequireDefault(__webpack_require__(893));
+ if (typeof code === 'object') {
+ props = code;
+ } else if (code != null) {
+ err.code = code;
+ }
-var _v2 = _interopRequireDefault(__webpack_require__(209));
+ if (props) {
+ for (key in props) {
+ err[key] = props[key];
+ }
+ }
-var _v3 = _interopRequireDefault(__webpack_require__(733));
+ return err;
+}
-var _v4 = _interopRequireDefault(__webpack_require__(384));
+module.exports = createError;
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/***/ }),
-/* 63 */,
-/* 64 */,
-/* 65 */,
-/* 66 */,
-/* 67 */,
-/* 68 */,
-/* 69 */,
-/* 70 */,
-/* 71 */,
-/* 72 */,
-/* 73 */,
-/* 74 */,
-/* 75 */,
-/* 76 */,
-/* 77 */,
-/* 78 */,
-/* 79 */,
-/* 80 */,
-/* 81 */,
-/* 82 */,
-/* 83 */,
-/* 84 */,
-/* 85 */,
-/* 86 */,
-/* 87 */
-/***/ (function(module) {
-
-module.exports = require("os");
-/***/ }),
-/* 88 */,
-/* 89 */,
-/* 90 */
+/***/ 125:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+Object.defineProperty(exports, '__esModule', { value: true });
-var _lodash = __webpack_require__(557);
+var authToken = __webpack_require__(813);
-var _lodash2 = _interopRequireDefault(_lodash);
+const createActionAuth = function createActionAuth() {
+ if (!process.env.GITHUB_ACTION) {
+ throw new Error("[@octokit/auth-action] `GITHUB_ACTION` environment variable is not set. @octokit/auth-action is meant to be used in GitHub Actions only.");
+ }
-var _bluebird = __webpack_require__(440);
+ const definitions = [process.env.GITHUB_TOKEN, process.env.INPUT_GITHUB_TOKEN, process.env.INPUT_TOKEN].filter(Boolean);
-var _bluebird2 = _interopRequireDefault(_bluebird);
+ if (definitions.length === 0) {
+ throw new Error("[@octokit/auth-action] `GITHUB_TOKEN` variable is not set. It must be set on either `env:` or `with:`. See https://github.com/octokit/auth-action.js#createactionauth");
+ }
-var _path = __webpack_require__(622);
+ if (definitions.length > 1) {
+ throw new Error("[@octokit/auth-action] The token variable is specified more than once. Use either `with.token`, `with.GITHUB_TOKEN`, or `env.GITHUB_TOKEN`. See https://github.com/octokit/auth-action.js#createactionauth");
+ }
-var _path2 = _interopRequireDefault(_path);
+ const token = definitions.pop();
+ return authToken.createTokenAuth(token);
+};
-var _fileJs = __webpack_require__(202);
+exports.createActionAuth = createActionAuth;
+//# sourceMappingURL=index.js.map
-var _fileJs2 = _interopRequireDefault(_fileJs);
-var _functions = __webpack_require__(942);
+/***/ }),
-var _files = __webpack_require__(770);
+/***/ 127:
+/***/ (function(module, __unusedexports, __webpack_require__) {
-var _arrays = __webpack_require__(947);
+"use strict";
-var _unitCompare = __webpack_require__(535);
-var _events = __webpack_require__(614);
+const fs = __webpack_require__(869)
+const path = __webpack_require__(622)
+const util = __webpack_require__(669)
+const atLeastNode = __webpack_require__(159)
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+const nodeSupportsBigInt = atLeastNode('10.5.0')
+const stat = (file) => nodeSupportsBigInt ? fs.stat(file, { bigint: true }) : fs.stat(file)
+const statSync = (file) => nodeSupportsBigInt ? fs.statSync(file, { bigint: true }) : fs.statSync(file)
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+function getStats (src, dest) {
+ return Promise.all([
+ stat(src),
+ stat(dest).catch(err => {
+ if (err.code === 'ENOENT') return null
+ throw err
+ })
+ ]).then(([srcStat, destStat]) => ({ srcStat, destStat }))
+}
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+function getStatsSync (src, dest) {
+ let destStat
+ const srcStat = statSync(src)
+ try {
+ destStat = statSync(dest)
+ } catch (err) {
+ if (err.code === 'ENOENT') return { srcStat, destStat: null }
+ throw err
+ }
+ return { srcStat, destStat }
+}
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+function checkPaths (src, dest, funcName, cb) {
+ util.callbackify(getStats)(src, dest, (err, stats) => {
+ if (err) return cb(err)
+ const { srcStat, destStat } = stats
+ if (destStat && areIdentical(srcStat, destStat)) {
+ return cb(new Error('Source and destination must not be the same.'))
+ }
+ if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
+ return cb(new Error(errMsg(src, dest, funcName)))
+ }
+ return cb(null, { srcStat, destStat })
+ })
+}
-function isDefined(value) {
- return value !== undefined;
+function checkPathsSync (src, dest, funcName) {
+ const { srcStat, destStat } = getStatsSync(src, dest)
+ if (destStat && areIdentical(srcStat, destStat)) {
+ throw new Error('Source and destination must not be the same.')
+ }
+ if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
+ throw new Error(errMsg(src, dest, funcName))
+ }
+ return { srcStat, destStat }
}
-function flatten(a, b) {
- return a.concat(b);
+// recursively check if dest parent is a subdirectory of src.
+// It works for all file types including symlinks since it
+// checks the src and dest inodes. It starts from the deepest
+// parent and stops once it reaches the src parent or the root path.
+function checkParentPaths (src, srcStat, dest, funcName, cb) {
+ const srcParent = path.resolve(path.dirname(src))
+ const destParent = path.resolve(path.dirname(dest))
+ if (destParent === srcParent || destParent === path.parse(destParent).root) return cb()
+ const callback = (err, destStat) => {
+ if (err) {
+ if (err.code === 'ENOENT') return cb()
+ return cb(err)
+ }
+ if (areIdentical(srcStat, destStat)) {
+ return cb(new Error(errMsg(src, dest, funcName)))
+ }
+ return checkParentPaths(src, srcStat, destParent, funcName, cb)
+ }
+ if (nodeSupportsBigInt) fs.stat(destParent, { bigint: true }, callback)
+ else fs.stat(destParent, callback)
}
-function isRegExpMatch(pattern) {
- return function (file) {
- return new RegExp(pattern).test(file.getName());
- };
+function checkParentPathsSync (src, srcStat, dest, funcName) {
+ const srcParent = path.resolve(path.dirname(src))
+ const destParent = path.resolve(path.dirname(dest))
+ if (destParent === srcParent || destParent === path.parse(destParent).root) return
+ let destStat
+ try {
+ destStat = statSync(destParent)
+ } catch (err) {
+ if (err.code === 'ENOENT') return
+ throw err
+ }
+ if (areIdentical(srcStat, destStat)) {
+ throw new Error(errMsg(src, dest, funcName))
+ }
+ return checkParentPathsSync(src, srcStat, destParent, funcName)
}
-function cleanExtension(ext) {
- if (_lodash2.default.startsWith(ext, '.')) {
- return ext.slice(1);
+function areIdentical (srcStat, destStat) {
+ if (destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev) {
+ if (nodeSupportsBigInt || destStat.ino < Number.MAX_SAFE_INTEGER) {
+ // definitive answer
+ return true
+ }
+ // Use additional heuristics if we can't use 'bigint'.
+ // Different 'ino' could be represented the same if they are >= Number.MAX_SAFE_INTEGER
+ // See issue 657
+ if (destStat.size === srcStat.size &&
+ destStat.mode === srcStat.mode &&
+ destStat.nlink === srcStat.nlink &&
+ destStat.atimeMs === srcStat.atimeMs &&
+ destStat.mtimeMs === srcStat.mtimeMs &&
+ destStat.ctimeMs === srcStat.ctimeMs &&
+ destStat.birthtimeMs === srcStat.birthtimeMs) {
+ // heuristic answer
+ return true
+ }
}
- return ext;
+ return false
}
-/** @class */
+// return true if dest is a subdir of src, otherwise false.
+// It only checks the path strings.
+function isSrcSubdir (src, dest) {
+ const srcArr = path.resolve(src).split(path.sep).filter(i => i)
+ const destArr = path.resolve(dest).split(path.sep).filter(i => i)
+ return srcArr.reduce((acc, cur, i) => acc && destArr[i] === cur, true)
+}
-var FileHound = function (_EventEmitter) {
- _inherits(FileHound, _EventEmitter);
+function errMsg (src, dest, funcName) {
+ return `Cannot ${funcName} '${src}' to a subdirectory of itself, '${dest}'.`
+}
- function FileHound() {
- _classCallCheck(this, FileHound);
+module.exports = {
+ checkPaths,
+ checkPathsSync,
+ checkParentPaths,
+ checkParentPathsSync,
+ isSrcSubdir
+}
- var _this = _possibleConstructorReturn(this, (FileHound.__proto__ || Object.getPrototypeOf(FileHound)).call(this));
- _this._filters = [];
- _this._searchPaths = [];
- _this._searchPaths.push(process.cwd());
- _this._ignoreHiddenDirectories = false;
- _this._isMatch = _lodash2.default.noop;
- _this._sync = false;
- _this._directoriesOnly = false;
- _this._includeStats = false;
- return _this;
- }
+/***/ }),
- /**
- * Static factory method to create an instance of FileHound
- *
- * @static
- * @memberOf FileHound
- * @method
- * create
- * @return FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- */
+/***/ 129:
+/***/ (function(module) {
+module.exports = require("child_process");
- _createClass(FileHound, [{
- key: 'modified',
+/***/ }),
+/***/ 141:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- /**
- * Filters by modifiction time
- *
- * @memberOf FileHound
- * @method
- * modified
- * @param {string} dateExpression - date expression
- * @return a FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * filehound
- * .modified("< 2 days")
- * .find()
- * .each(console.log);
- */
- value: function modified(pattern) {
- this.addFilter(function (file) {
- var modified = file.lastModifiedSync();
- return (0, _unitCompare.isDate)(modified).assert(pattern);
- });
- return this;
- }
+"use strict";
- /**
- * Filters by file access time
- *
- * @memberOf FileHound
- * @method
- * accessed
- * @param {string} dateExpression - date expression
- * @return a FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * filehound
- * .accessed("< 10 minutes")
- * .find()
- * .each(console.log);
- */
- }, {
- key: 'accessed',
- value: function accessed(pattern) {
- this.addFilter(function (file) {
- var accessed = file.lastAccessedSync();
- return (0, _unitCompare.isDate)(accessed).assert(pattern);
- });
- return this;
- }
+var net = __webpack_require__(631);
+var tls = __webpack_require__(16);
+var http = __webpack_require__(605);
+var https = __webpack_require__(211);
+var events = __webpack_require__(614);
+var assert = __webpack_require__(357);
+var util = __webpack_require__(669);
- /**
- * Filters change time
- *
- * @memberOf FileHound
- * @instance
- * @method
- * changed
- * @param {string} dateExpression - date expression
- * @return a FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * filehound
- * .changed("< 10 minutes")
- * .find()
- * .each(console.log);
- */
- }, {
- key: 'changed',
- value: function changed(pattern) {
- this.addFilter(function (file) {
- var changed = file.lastChangedSync();
- return (0, _unitCompare.isDate)(changed).assert(pattern);
- });
- return this;
- }
+exports.httpOverHttp = httpOverHttp;
+exports.httpsOverHttp = httpsOverHttp;
+exports.httpOverHttps = httpOverHttps;
+exports.httpsOverHttps = httpsOverHttps;
- /**
- *
- * @memberOf FileHound
- * @instance
- * @method
- * addFilter
- * @param {function} function - custom filter function
- * @return a FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * filehound
- * .addFilter(customFilter)
- * .find()
- * .each(console.log);
- */
- }, {
- key: 'addFilter',
- value: function addFilter(filter) {
- this._filters.push(filter);
- return this;
- }
+function httpOverHttp(options) {
+ var agent = new TunnelingAgent(options);
+ agent.request = http.request;
+ return agent;
+}
- /**
- * Defines the search paths
- *
- * @memberOf FileHound
- * @instance
- * @method
- * paths
- * @param {array} path - array of paths
- * @return a FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * filehound
- * .paths("/tmp", "/etc") // or ["/tmp", "/etc"]
- * .find()
- * .each(console.log);
- */
+function httpsOverHttp(options) {
+ var agent = new TunnelingAgent(options);
+ agent.request = http.request;
+ agent.createSocket = createSecureSocket;
+ agent.defaultPort = 443;
+ return agent;
+}
- }, {
- key: 'paths',
- value: function paths() {
- this._searchPaths = _lodash2.default.uniq((0, _arrays.from)(arguments)).map(_path2.default.normalize);
- return this;
- }
+function httpOverHttps(options) {
+ var agent = new TunnelingAgent(options);
+ agent.request = https.request;
+ return agent;
+}
- /**
- * Define the search path
- *
- * @memberOf FileHound
- * @instance
- * @method
- * path
- * @param {string} path - path
- * @return a FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * filehound
- * .path("/tmp")
- * .find()
- * .each(console.log);
- */
+function httpsOverHttps(options) {
+ var agent = new TunnelingAgent(options);
+ agent.request = https.request;
+ agent.createSocket = createSecureSocket;
+ agent.defaultPort = 443;
+ return agent;
+}
- }, {
- key: 'path',
- value: function path() {
- return this.paths((0, _arrays.fromFirst)(arguments));
- }
- /**
- * Ignores files or sub-directories matching pattern
- *
- * @memberOf FileHound
- * @instance
- * @method
- * discard
- * @param {string|array} regex - regex or array of regex
- * @return a FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * filehound
- * .discard("*.tmp*")
- * .find()
- * .each(console.log);
- */
-
- }, {
- key: 'discard',
- value: function discard() {
- var _this2 = this;
+function TunnelingAgent(options) {
+ var self = this;
+ self.options = options || {};
+ self.proxyOptions = self.options.proxy || {};
+ self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets;
+ self.requests = [];
+ self.sockets = [];
- var patterns = (0, _arrays.from)(arguments);
- patterns.forEach(function (pattern) {
- _this2.addFilter((0, _functions.negate)(isRegExpMatch(pattern)));
- });
- return this;
+ self.on('free', function onFree(socket, host, port, localAddress) {
+ var options = toOptions(host, port, localAddress);
+ for (var i = 0, len = self.requests.length; i < len; ++i) {
+ var pending = self.requests[i];
+ if (pending.host === options.host && pending.port === options.port) {
+ // Detect the request to connect same origin server,
+ // reuse the connection.
+ self.requests.splice(i, 1);
+ pending.request.onSocket(socket);
+ return;
+ }
}
+ socket.destroy();
+ self.removeSocket(socket);
+ });
+}
+util.inherits(TunnelingAgent, events.EventEmitter);
- /**
- * Filter on file extension
- *
- * @memberOf FileHound
- * @instance
- * @method
- * ext
- * @param {string|array} extensions - extension or an array of extensions
- * @return a FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * let filehound = FileHound.create();
- * filehound
- * .ext(".json")
- * .find()
- * .each(console.log);
- *
- * // array of extensions to filter by
- * filehound = FileHound.create();
- * filehound
- * .ext([".json", ".txt"])
- * .find()
- * .each(console.log);
- *
- * // supports var args
- * filehound = FileHound.create();
- * filehound
- * .ext(".json", ".txt")
- * .find()
- * .each(console.log);
- */
+TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) {
+ var self = this;
+ var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress));
- }, {
- key: 'ext',
- value: function ext() {
- var extensions = (0, _arrays.from)(arguments).map(cleanExtension);
+ if (self.sockets.length >= this.maxSockets) {
+ // We are over limit so we'll add it to the queue.
+ self.requests.push(options);
+ return;
+ }
- this.addFilter(function (file) {
- return _lodash2.default.includes(extensions, file.getPathExtension());
- });
- return this;
- }
+ // If we are under maxSockets create a new one.
+ self.createSocket(options, function(socket) {
+ socket.on('free', onFree);
+ socket.on('close', onCloseOrRemove);
+ socket.on('agentRemove', onCloseOrRemove);
+ req.onSocket(socket);
- /**
- * Filter by file size
- *
- * @memberOf FileHound
- * @instance
- * @method
- * size
- * @param {string} sizeExpression - a size expression
- * @return a FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * filehound
- * .size("<10kb")
- * .find()
- * .each(console.log);
- */
+ function onFree() {
+ self.emit('free', socket, options);
+ }
- }, {
- key: 'size',
- value: function size(sizeExpression) {
- this.addFilter(function (file) {
- var size = file.sizeSync();
- return (0, _unitCompare.isNumber)(size).assert(sizeExpression);
- });
- return this;
+ function onCloseOrRemove(err) {
+ self.removeSocket(socket);
+ socket.removeListener('free', onFree);
+ socket.removeListener('close', onCloseOrRemove);
+ socket.removeListener('agentRemove', onCloseOrRemove);
}
+ });
+};
- /**
- * Filter by zero length files
- *
- * @memberOf FileHound
- * @instance
- * @method
- * isEmpty
- * @param {string} path - path
- * @return a FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * filehound
- * .size("<10kb")
- * .find()
- * .each(console.log);
- */
+TunnelingAgent.prototype.createSocket = function createSocket(options, cb) {
+ var self = this;
+ var placeholder = {};
+ self.sockets.push(placeholder);
- }, {
- key: 'isEmpty',
- value: function isEmpty() {
- this.size(0);
- return this;
+ var connectOptions = mergeOptions({}, self.proxyOptions, {
+ method: 'CONNECT',
+ path: options.host + ':' + options.port,
+ agent: false,
+ headers: {
+ host: options.host + ':' + options.port
}
+ });
+ if (options.localAddress) {
+ connectOptions.localAddress = options.localAddress;
+ }
+ if (connectOptions.proxyAuth) {
+ connectOptions.headers = connectOptions.headers || {};
+ connectOptions.headers['Proxy-Authorization'] = 'Basic ' +
+ new Buffer(connectOptions.proxyAuth).toString('base64');
+ }
- /**
- * Filter by a file glob
- *
- * @memberOf FileHound
- * @instance
- * @method
- * glob
- * @param {array} glob - array of globs
- * @return a FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * filehound
- * .glob(['*tmp*']) // .glob('*tmp*') || .glob('*tmp1*','*tmp2*')
- * .find()
- * .each(console.log); // array of files names all containing 'tmp'
- */
+ debug('making CONNECT request');
+ var connectReq = self.request(connectOptions);
+ connectReq.useChunkedEncodingByDefault = false; // for v0.6
+ connectReq.once('response', onResponse); // for v0.6
+ connectReq.once('upgrade', onUpgrade); // for v0.6
+ connectReq.once('connect', onConnect); // for v0.7 or later
+ connectReq.once('error', onError);
+ connectReq.end();
- }, {
- key: 'glob',
- value: function glob() {
- return this.match((0, _arrays.from)(arguments));
- }
+ function onResponse(res) {
+ // Very hacky. This is necessary to avoid http-parser leaks.
+ res.upgrade = true;
+ }
- /**
- * Same as glob
- * @see glob
- */
+ function onUpgrade(res, socket, head) {
+ // Hacky.
+ process.nextTick(function() {
+ onConnect(res, socket, head);
+ });
+ }
- }, {
- key: 'match',
- value: function match(globPatterns) {
- if (_lodash2.default.isArray(globPatterns)) {
- this.addFilter(function (file) {
- var isMatch = globPatterns.filter(function (globPattern) {
- return file.isMatch(globPattern);
- })[0];
- return isMatch ? true : false;
- });
- } else {
- this.addFilter(function (file) {
- return file.isMatch(globPatterns);
- });
- }
- return this;
+ function onConnect(res, socket, head) {
+ connectReq.removeAllListeners();
+ socket.removeAllListeners();
+
+ if (res.statusCode !== 200) {
+ debug('tunneling socket could not be established, statusCode=%d',
+ res.statusCode);
+ socket.destroy();
+ var error = new Error('tunneling socket could not be established, ' +
+ 'statusCode=' + res.statusCode);
+ error.code = 'ECONNRESET';
+ options.request.emit('error', error);
+ self.removeSocket(placeholder);
+ return;
+ }
+ if (head.length > 0) {
+ debug('got illegal response body from proxy');
+ socket.destroy();
+ var error = new Error('got illegal response body from proxy');
+ error.code = 'ECONNRESET';
+ options.request.emit('error', error);
+ self.removeSocket(placeholder);
+ return;
}
+ debug('tunneling connection has established');
+ self.sockets[self.sockets.indexOf(placeholder)] = socket;
+ return cb(socket);
+ }
- /**
- * Negates filters
- *
- * @memberOf FileHound
- * @instance
- * @method
- * not
- * @param {string} glob - file glob
- * @return a FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * filehound
- * .not()
- * .glob("*tmp*")
- * .find()
- * .each(console.log); // array of files names NOT containing 'tmp'
- */
+ function onError(cause) {
+ connectReq.removeAllListeners();
- }, {
- key: 'not',
- value: function not() {
- this.negateFilters = true;
- return this;
- }
+ debug('tunneling socket could not be established, cause=%s\n',
+ cause.message, cause.stack);
+ var error = new Error('tunneling socket could not be established, ' +
+ 'cause=' + cause.message);
+ error.code = 'ECONNRESET';
+ options.request.emit('error', error);
+ self.removeSocket(placeholder);
+ }
+};
- /**
- * Filter to ignore hidden files
- *
- * @memberOf FileHound
- * @instance
- * @method
- * ignoreHiddenFiles
- * @return a FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * filehound
- * .ignoreHiddenFiles()
- * .find()
- * .each(console.log); // array of files names that are not hidden files
- */
+TunnelingAgent.prototype.removeSocket = function removeSocket(socket) {
+ var pos = this.sockets.indexOf(socket)
+ if (pos === -1) {
+ return;
+ }
+ this.sockets.splice(pos, 1);
- }, {
- key: 'ignoreHiddenFiles',
- value: function ignoreHiddenFiles() {
- this.addFilter(function (file) {
- return !file.isHiddenSync();
- });
- return this;
- }
+ var pending = this.requests.shift();
+ if (pending) {
+ // If we have pending requests and a socket gets closed a new one
+ // needs to be created to take over in the pool for the one that closed.
+ this.createSocket(pending, function(socket) {
+ pending.request.onSocket(socket);
+ });
+ }
+};
- /**
- * Ignore hidden directories
- *
- * @memberOf FileHound
- * @instance
- * @method
- * ignoreHiddenDirectories
- * @return a FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * filehound
- * .ignoreHiddenDirectories()
- * .find()
- * .each(console.log); // array of files names that are not hidden directories
- */
+function createSecureSocket(options, cb) {
+ var self = this;
+ TunnelingAgent.prototype.createSocket.call(self, options, function(socket) {
+ var hostHeader = options.request.getHeader('host');
+ var tlsOptions = mergeOptions({}, self.options, {
+ socket: socket,
+ servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host
+ });
- }, {
- key: 'ignoreHiddenDirectories',
- value: function ignoreHiddenDirectories() {
- this._ignoreHiddenDirectories = true;
- return this;
- }
+ // 0 is dummy port for v0.6
+ var secureSocket = tls.connect(0, tlsOptions);
+ self.sockets[self.sockets.indexOf(socket)] = secureSocket;
+ cb(secureSocket);
+ });
+}
- /**
- * Include file stats
- *
- * @memberOf FileHound
- * @instance
- * @method
- * includeFileStats
- * @return a FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * filehound
- * .includeFileStats()
- * .find()
- * .each(console.log); // array of file objects containing `path` and `stats` properties
- */
- }, {
- key: 'includeFileStats',
- value: function includeFileStats() {
- this._includeStats = true;
- return this;
+function toOptions(host, port, localAddress) {
+ if (typeof host === 'string') { // since v0.10
+ return {
+ host: host,
+ port: port,
+ localAddress: localAddress
+ };
+ }
+ return host; // for v0.11 or later
+}
+
+function mergeOptions(target) {
+ for (var i = 1, len = arguments.length; i < len; ++i) {
+ var overrides = arguments[i];
+ if (typeof overrides === 'object') {
+ var keys = Object.keys(overrides);
+ for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {
+ var k = keys[j];
+ if (overrides[k] !== undefined) {
+ target[k] = overrides[k];
+ }
+ }
}
+ }
+ return target;
+}
- /**
- * Find sub-directories
- *
- * @memberOf FileHound
- * @instance
- * @method
- * directory
- * @return a FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * filehound
- * .directory()
- * .find()
- * .each(console.log); // array of matching sub-directories
- */
- }, {
- key: 'directory',
- value: function directory() {
- this._directoriesOnly = true;
- return this;
+var debug;
+if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) {
+ debug = function() {
+ var args = Array.prototype.slice.call(arguments);
+ if (typeof args[0] === 'string') {
+ args[0] = 'TUNNEL: ' + args[0];
+ } else {
+ args.unshift('TUNNEL:');
}
+ console.error.apply(console, args);
+ }
+} else {
+ debug = function() {};
+}
+exports.debug = debug; // for test
- /**
- * Find sockets
- *
- * @memberOf FileHound
- * @instance
- * @method
- * socket
- * @return a FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * filehound
- * .socket()
- * .find()
- * .each(console.log); // array of matching sockets
- */
- }, {
- key: 'socket',
- value: function socket() {
- this.addFilter(function (file) {
- return file.isSocket();
- });
- return this;
- }
+/***/ }),
- /**
- * Specify the directory search depth. If set to zero, recursive searching
- * will be disabled
- *
- * @memberOf FileHound
- * @instance
- * @method
- * depth
- * @return a FileHound instance
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * filehound
- * .depth(0)
- * .find()
- * .each(console.log); // array of files names only in the current directory
- */
+/***/ 147:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- }, {
- key: 'depth',
- value: function depth(_depth) {
- this.maxDepth = _depth;
- return this;
- }
+"use strict";
- /**
- * Asynchronously executes a file search.
- *
- * @memberOf FileHound
- * @instance
- * @method
- * find
- * @param {function} function - Optionally accepts a callback function
- * @return Returns a Promise of all matches. If the Promise fulfils,
- * the fulfilment value is an array of all matching files
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * filehound
- * .find()
- * .each(console.log);
- *
- * // using a callback
- * filehound
- * .find((err, files) => {
- * if (err) return console.error(err);
- *
- * console.log(files);
- * });
- */
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.GithubManager = void 0;
+const core = __importStar(__webpack_require__(470));
+const util_1 = __webpack_require__(669);
+const uuid_1 = __webpack_require__(62);
+const path_1 = __importDefault(__webpack_require__(622));
+const fs_1 = __importDefault(__webpack_require__(747));
+const io = __importStar(__webpack_require__(1));
+const toolCache = __importStar(__webpack_require__(533));
+const assert_1 = __importDefault(__webpack_require__(357));
+const IS_WINDOWS = process.platform === "win32";
+class GithubManager {
+ constructor(octokit) {
+ this.octokit = octokit;
+ }
+ get branch() {
+ return {
+ create: (owner, repo, sha, syncBranch) => __awaiter(this, void 0, void 0, function* () {
+ try {
+ core.debug(`Creating branch ${syncBranch}`);
+ yield this.octokit.git.createRef({
+ ref: `refs/heads/${syncBranch}`,
+ sha,
+ owner,
+ repo,
+ });
+ }
+ catch (error) {
+ throw new Error(`Failed to create branch ${syncBranch}; ${util_1.inspect(error)}`);
+ }
+ }),
+ delete: (owner, repo, branch) => __awaiter(this, void 0, void 0, function* () {
+ try {
+ core.debug(`Delete branch ${branch}`);
+ yield this.octokit.git.deleteRef({
+ owner,
+ repo,
+ ref: `refs/heads/${branch}`,
+ });
+ }
+ catch (error) {
+ throw new Error(`Failed to delete branch ${branch}; ${util_1.inspect(error)}`);
+ }
+ }),
+ get: (owner, repo, branch) => __awaiter(this, void 0, void 0, function* () {
+ try {
+ return yield this.octokit.git.getRef({
+ owner,
+ repo,
+ ref: `heads/${branch}`,
+ });
+ }
+ catch (error) {
+ throw new Error(`Failed to get branch ${branch}; ${util_1.inspect(error)}`);
+ }
+ }),
+ has: (owner, repo, branch) => __awaiter(this, void 0, void 0, function* () {
+ try {
+ yield this.octokit.repos.getBranch({
+ owner,
+ repo,
+ branch,
+ });
+ return true;
+ }
+ catch (error) {
+ const err = error;
+ if (err.name === "HttpError" && err.status === 404) {
+ return false;
+ }
+ throw new Error(`Failed to check if branch ${branch} exist; ${util_1.inspect(err)}`);
+ }
+ }),
+ };
+ }
+ get pulls() {
+ return {
+ create: (owner, repo, head, base, title, body) => __awaiter(this, void 0, void 0, function* () {
+ try {
+ yield this.octokit.pulls.create({
+ owner,
+ repo,
+ title,
+ head,
+ base,
+ body,
+ });
+ }
+ catch (error) {
+ const err = error;
+ core.debug(util_1.inspect(err));
+ if (err.name === "HttpError" &&
+ (err.message.includes("No commits between") ||
+ err.message.includes("A pull request already exists for"))) {
+ core.info(err.message);
+ process.exit(0); // there is currently no neutral exit code
+ }
+ else {
+ throw new Error(`Failed to create a pull request; ${util_1.inspect(error)}`);
+ }
+ }
+ }),
+ };
+ }
+ get repos() {
+ const getArchiveLink = (owner, repo, ref) => __awaiter(this, void 0, void 0, function* () {
+ const response = yield this.octokit.repos.getArchiveLink({
+ owner,
+ repo,
+ archive_format: IS_WINDOWS ? "zipball" : "tarball",
+ ref,
+ });
+ if (response.status !== 200) {
+ throw new Error(`Unexpected response from GitHub API. Status: ${response.status}, Data: ${response.data}`);
+ }
+ return Buffer.from(response.data); // response.data is ArrayBuffer
+ });
+ return {
+ get: (owner, repo) => __awaiter(this, void 0, void 0, function* () {
+ try {
+ return yield this.octokit.repos.get({
+ owner,
+ repo,
+ });
+ }
+ catch (error) {
+ throw new Error(`Failed to get repository; ${util_1.inspect(error)}`);
+ }
+ }),
+ getArchiveLink,
+ downloadRepository: (owner, repo, ref) => __awaiter(this, void 0, void 0, function* () {
+ const repositoryPath = `${owner}_${repo}`;
+ // Download the archive
+ core.info("Downloading the archive");
+ let archiveData = yield getArchiveLink(owner, repo, ref);
+ // Write archive to disk
+ core.info("Writing archive to disk");
+ const uniqueId = uuid_1.v4();
+ const archivePath = path_1.default.join(repositoryPath, `${uniqueId}.tar.gz`);
+ yield fs_1.default.promises.writeFile(archivePath, archiveData);
+ archiveData = Buffer.from(""); // Free memory
+ // Extract archive
+ core.info("Extracting the archive");
+ const extractPath = path_1.default.join(repositoryPath, uniqueId);
+ yield io.mkdirP(extractPath);
+ if (IS_WINDOWS) {
+ yield toolCache.extractZip(archivePath, extractPath);
+ }
+ else {
+ yield toolCache.extractTar(archivePath, extractPath);
+ }
+ io.rmRF(archivePath);
+ // Determine the path of the repository content. The archive contains
+ // a top-level folder and the repository content is inside.
+ const archiveFileNames = yield fs_1.default.promises.readdir(extractPath);
+ assert_1.default.ok(archiveFileNames.length === 1, "Expected exactly one directory inside archive");
+ const archiveVersion = archiveFileNames[0]; // The top-level folder name includes the short SHA
+ core.info(`Resolved version ${archiveVersion}`);
+ const tempRepositoryPath = path_1.default.join(extractPath, archiveVersion);
+ // Move the files
+ for (const fileName of yield fs_1.default.promises.readdir(tempRepositoryPath)) {
+ const sourcePath = path_1.default.join(tempRepositoryPath, fileName);
+ const targetPath = path_1.default.join(repositoryPath, fileName);
+ if (IS_WINDOWS) {
+ yield io.cp(sourcePath, targetPath, { recursive: true }); // Copy on Windows (Windows Defender may have a lock)
+ }
+ else {
+ yield io.mv(sourcePath, targetPath);
+ }
+ }
+ io.rmRF(extractPath);
+ }),
+ };
+ }
+}
+exports.GithubManager = GithubManager;
- }, {
- key: 'find',
- value: function find(cb) {
- var _this3 = this;
- this._initFilters();
+/***/ }),
- var searchAsync = this._searchAsync.bind(this);
- var searches = _bluebird2.default.map(this.getSearchPaths(), searchAsync);
+/***/ 149:
+/***/ (function(module, __unusedexports, __webpack_require__) {
- return _bluebird2.default.all(searches).reduce(flatten).map(this.formatResult.bind(this)).catch(function (e) {
- _this3.emit('error', e);
- throw e;
- }).finally(function () {
- _this3.emit('end');
- }).asCallback(cb);
- }
+"use strict";
- /**
- * Synchronously executes a file search.
- *
- * @memberOf FileHound
- * @instance
- * @method
- * findSync
- * @return Returns an array of all matching files
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.create();
- * const files = filehound.findSync();
- * console.log(files);
- *
- */
- }, {
- key: 'findSync',
- value: function findSync() {
- this._initFilters();
+const u = __webpack_require__(676).fromCallback
+const path = __webpack_require__(622)
+const fs = __webpack_require__(598)
+const mkdir = __webpack_require__(727)
- var searchSync = this._searchSync.bind(this);
+function createFile (file, callback) {
+ function makeFile () {
+ fs.writeFile(file, '', err => {
+ if (err) return callback(err)
+ callback()
+ })
+ }
- return this.getSearchPaths().map(searchSync).reduce(flatten).map(this.formatResult.bind(this));
- }
- }, {
- key: '_atMaxDepth',
- value: function _atMaxDepth(root, dir) {
- var depth = dir.getDepthSync() - root.getDepthSync();
- return isDefined(this.maxDepth) && depth > this.maxDepth;
- }
- }, {
- key: '_shouldFilterDirectory',
- value: function _shouldFilterDirectory(root, dir) {
- return this._atMaxDepth(root, dir) || this._ignoreHiddenDirectories && dir.isHiddenSync();
- }
- }, {
- key: '_newMatcher',
- value: function _newMatcher() {
- var isMatch = (0, _functions.compose)(this._filters);
- if (this.negateFilters) {
- return (0, _functions.negate)(isMatch);
+ fs.stat(file, (err, stats) => { // eslint-disable-line handle-callback-err
+ if (!err && stats.isFile()) return callback()
+ const dir = path.dirname(file)
+ fs.stat(dir, (err, stats) => {
+ if (err) {
+ // if the directory doesn't exist, make it
+ if (err.code === 'ENOENT') {
+ return mkdir.mkdirs(dir, err => {
+ if (err) return callback(err)
+ makeFile()
+ })
+ }
+ return callback(err)
}
- return isMatch;
- }
- }, {
- key: '_initFilters',
- value: function _initFilters() {
- this._isMatch = this._newMatcher();
- }
- }, {
- key: '_searchSync',
- value: function _searchSync(dir) {
- this._sync = true;
- var root = _fileJs2.default.create(dir);
- var trackedPaths = [];
- var files = this._search(root, root, trackedPaths);
- return this._directoriesOnly ? trackedPaths.filter(this._isMatch) : files;
- }
- }, {
- key: '_searchAsync',
- value: function _searchAsync(dir) {
- var _this4 = this;
- var root = _fileJs2.default.create(dir);
- var trackedPaths = [];
- var pending = this._search(root, root, trackedPaths);
+ if (stats.isDirectory()) makeFile()
+ else {
+ // parent is not a directory
+ // This is just to cause an internal ENOTDIR error to be thrown
+ fs.readdir(dir, err => {
+ if (err) return callback(err)
+ })
+ }
+ })
+ })
+}
- return pending.then(function (files) {
- if (_this4._directoriesOnly) return trackedPaths.filter(_this4._isMatch);
+function createFileSync (file) {
+ let stats
+ try {
+ stats = fs.statSync(file)
+ } catch {}
+ if (stats && stats.isFile()) return
- files.forEach(function (file) {
- _this4.emit('match', file.getName());
- });
- return files;
- });
+ const dir = path.dirname(file)
+ try {
+ if (!fs.statSync(dir).isDirectory()) {
+ // parent is not a directory
+ // This is just to cause an internal ENOTDIR error to be thrown
+ fs.readdirSync(dir)
}
- }, {
- key: '_search',
- value: function _search(root, path, trackedPaths) {
- var _this5 = this;
+ } catch (err) {
+ // If the stat call above failed because the directory doesn't exist, create it
+ if (err && err.code === 'ENOENT') mkdir.mkdirsSync(dir)
+ else throw err
+ }
- if (this._shouldFilterDirectory(root, path)) return [];
+ fs.writeFileSync(file, '')
+}
- var getFiles = this._sync ? path.getFilesSync.bind(path) : path.getFiles.bind(path);
- return getFiles().map(function (file) {
- var isDir = false;
- try {
- isDir = file.isDirectorySync();
- // eslint-disable-next-line no-empty
- } catch (e) {}
+module.exports = {
+ createFile: u(createFile),
+ createFileSync
+}
- if (isDir) {
- if (!_this5._shouldFilterDirectory(root, file)) trackedPaths.push(file);
- return _this5._search(root, file, trackedPaths);
- }
- return file;
- }).reduce(flatten, []).filter(this._isMatch);
- }
- }, {
- key: 'formatResult',
- value: function formatResult(file) {
- if (this._includeStats) {
- return {
- path: file.getName(),
- stats: file._getStatsSync()
- };
- }
- return file.getName();
- }
- }, {
- key: 'getSearchPaths',
- value: function getSearchPaths() {
- var paths = isDefined(this.maxDepth) ? this._searchPaths : (0, _files.reducePaths)(this._searchPaths);
- return (0, _arrays.copy)(paths);
- }
- }], [{
- key: 'create',
- value: function create() {
- return new FileHound();
- }
+/***/ }),
- /**
- * Returns all matches from one of more FileHound instances
- *
- * @static
- * @memberOf FileHound
- * @method
- * any
- * @return a promise containing all matches. If the Promise fulfils,
- * the fulfilment value is an array of all matching files.
- * @example
- * import FileHound from 'filehound';
- *
- * const filehound = FileHound.any(fh1, fh2);
- */
+/***/ 153:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- }, {
- key: 'any',
- value: function any() {
- var args = (0, _arrays.from)(arguments);
- return _bluebird2.default.all(args).reduce(flatten, []);
- }
- }]);
+"use strict";
- return FileHound;
-}(_events.EventEmitter);
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.setSshKnownHostsPath = exports.setSshKeyPath = exports.setTemplateRepositoryPath = exports.SshKnownHostsPath = exports.SshKeyPath = exports.RepositoryPath = exports.TemplateRepositoryPath = exports.IsPost = void 0;
+const coreCommand = __importStar(__webpack_require__(431));
+/**
+ * Indicates whether the POST action is running.
+ */
+exports.IsPost = !!process.env["STATE_isPost"];
+/**
+ * The template repository path for the POST action. The value is empty during the MAIN action.
+ */
+exports.TemplateRepositoryPath = process.env["STATE_template_repository_path"] || "";
+/**
+ * The repository path for the POST action. The value is empty during the MAIN action.
+ */
+exports.RepositoryPath = process.env["STATE_repositoryPath"] || "";
+/**
+ * The SSH key path for the POST action. The value is empty during the MAIN action.
+ */
+exports.SshKeyPath = process.env["STATE_template_ssh_key_path"] || "";
+/**
+ * The SSH known hosts path for the POST action. The value is empty during the MAIN action.
+ */
+exports.SshKnownHostsPath = process.env["STATE_template_ssh_known_hosts_path"] || "";
+/**
+ * Save the repository path so the POST action can retrieve the value.
+ *
+ * @param {string} repositoryPath - Path to repository.
+ */
+function setTemplateRepositoryPath(repositoryPath) {
+ coreCommand.issueCommand("save-state", { name: "template_repository_path" }, repositoryPath);
+}
+exports.setTemplateRepositoryPath = setTemplateRepositoryPath;
+/**
+ * Save the SSH key path so the POST action can retrieve the value.
+ *
+ * @param {string} sshKeyPath - The ssh key path.
+ */
+function setSshKeyPath(sshKeyPath) {
+ coreCommand.issueCommand("save-state", { name: "template_ssh_key_path" }, sshKeyPath);
+}
+exports.setSshKeyPath = setSshKeyPath;
+/**
+ * Save the SSH known hosts path so the POST action can retrieve the value.
+ *
+ * @param {string} sshKnownHostsPath - The ssh known hosts path.
+ */
+function setSshKnownHostsPath(sshKnownHostsPath) {
+ coreCommand.issueCommand("save-state", { name: "template_ssh_known_hosts_path" }, sshKnownHostsPath);
+}
+exports.setSshKnownHostsPath = setSshKnownHostsPath;
+// Publish a variable so that when the POST action runs, it can determine it should run the cleanup logic.
+// This is necessary since we don't have a separate entry point.
+if (!exports.IsPost) {
+ coreCommand.issueCommand("save-state", { name: "isPost" }, "true");
+}
-exports.default = FileHound;
/***/ }),
-/* 91 */,
-/* 92 */,
-/* 93 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-var Stream = __webpack_require__(413).Stream
+/***/ 154:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
-module.exports = legacy
+"use strict";
-function legacy (fs) {
- return {
- ReadStream: ReadStream,
- WriteStream: WriteStream
- }
- function ReadStream (path, options) {
- if (!(this instanceof ReadStream)) return new ReadStream(path, options);
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.normalise = normalise;
- Stream.call(this);
+var _unitNormaliser = __webpack_require__(450);
- var self = this;
+var _unitNormaliser2 = _interopRequireDefault(_unitNormaliser);
- this.path = path;
- this.fd = null;
- this.readable = true;
- this.paused = false;
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- this.flags = 'r';
- this.mode = 438; /*=0666*/
- this.bufferSize = 64 * 1024;
-
- options = options || {};
-
- // Mixin options into this
- var keys = Object.keys(options);
- for (var index = 0, length = keys.length; index < length; index++) {
- var key = keys[index];
- this[key] = options[key];
- }
+var normaliser = new _unitNormaliser2.default();
+normaliser.addAlias('hours', 'hour');
+normaliser.addAlias('hours', 'h');
+normaliser.addAlias('days', 'd');
+normaliser.addAlias('days', 'day');
+normaliser.addAlias('minutes', 'm');
+normaliser.addAlias('minutes', 'minute');
+normaliser.addAlias('minutes', 'min');
+normaliser.addAlias('minutes', 'mins');
- if (this.encoding) this.setEncoding(this.encoding);
+function normalise(name) {
+ return normaliser.normalise(name);
+}
- if (this.start !== undefined) {
- if ('number' !== typeof this.start) {
- throw TypeError('start must be a Number');
- }
- if (this.end === undefined) {
- this.end = Infinity;
- } else if ('number' !== typeof this.end) {
- throw TypeError('end must be a Number');
- }
+/***/ }),
- if (this.start > this.end) {
- throw new Error('start must be <= end');
- }
+/***/ 159:
+/***/ (function(module) {
- this.pos = this.start;
- }
+module.exports = r => {
+ const n = process.versions.node.split('.').map(x => parseInt(x, 10))
+ r = r.split('.').map(x => parseInt(x, 10))
+ return n[0] > r[0] || (n[0] === r[0] && (n[1] > r[1] || (n[1] === r[1] && n[2] >= r[2])))
+}
- if (this.fd !== null) {
- process.nextTick(function() {
- self._read();
- });
- return;
- }
- fs.open(this.path, this.flags, this.mode, function (err, fd) {
- if (err) {
- self.emit('error', err);
- self.readable = false;
- return;
- }
+/***/ }),
- self.fd = fd;
- self.emit('open', fd);
- self._read();
- })
- }
+/***/ 171:
+/***/ (function(module, __unusedexports, __webpack_require__) {
- function WriteStream (path, options) {
- if (!(this instanceof WriteStream)) return new WriteStream(path, options);
+"use strict";
- Stream.call(this);
- this.path = path;
- this.fd = null;
- this.writable = true;
+const u = __webpack_require__(676).fromPromise
+const jsonFile = __webpack_require__(469)
- this.flags = 'w';
- this.encoding = 'binary';
- this.mode = 438; /*=0666*/
- this.bytesWritten = 0;
+jsonFile.outputJson = u(__webpack_require__(695))
+jsonFile.outputJsonSync = __webpack_require__(628)
+// aliases
+jsonFile.outputJSON = jsonFile.outputJson
+jsonFile.outputJSONSync = jsonFile.outputJsonSync
+jsonFile.writeJSON = jsonFile.writeJson
+jsonFile.writeJSONSync = jsonFile.writeJsonSync
+jsonFile.readJSON = jsonFile.readJson
+jsonFile.readJSONSync = jsonFile.readJsonSync
- options = options || {};
+module.exports = jsonFile
- // Mixin options into this
- var keys = Object.keys(options);
- for (var index = 0, length = keys.length; index < length; index++) {
- var key = keys[index];
- this[key] = options[key];
- }
- if (this.start !== undefined) {
- if ('number' !== typeof this.start) {
- throw TypeError('start must be a Number');
- }
- if (this.start < 0) {
- throw new Error('start must be >= zero');
- }
+/***/ }),
- this.pos = this.start;
- }
+/***/ 198:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- this.busy = false;
- this._queue = [];
+"use strict";
- if (this.fd === null) {
- this._open = fs.open;
- this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);
- this.flush();
- }
- }
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const path_1 = __importDefault(__webpack_require__(622));
+const fs_extra_1 = __importDefault(__webpack_require__(226));
+const core = __importStar(__webpack_require__(470));
+const coreCommand = __importStar(__webpack_require__(431));
+const io = __importStar(__webpack_require__(1));
+const util_1 = __webpack_require__(669);
+const filehound_1 = __importDefault(__webpack_require__(687));
+const settings_1 = __webpack_require__(648);
+const github_action_context_1 = __webpack_require__(821);
+const gitSourceProvider = __importStar(__webpack_require__(293));
+const github_manager_1 = __webpack_require__(147);
+const git_command_manager_1 = __webpack_require__(289);
+const octokit_1 = __webpack_require__(448);
+const stateHelper = __importStar(__webpack_require__(153));
+const refHelper = __importStar(__webpack_require__(227));
+const github_action_cleanup_1 = __webpack_require__(495);
+const USER_EMAIL = "user.email";
+const USER_NAME = "user.name";
+const filehound = filehound_1.default.create();
+function run() {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ const context = new github_action_context_1.GithubActionContext();
+ let settings = new settings_1.Settings(context);
+ const githubManager = new github_manager_1.GithubManager(octokit_1.octokit(settings));
+ settings = yield prepareTemplateSettings(settings, githubManager);
+ core.debug(`Used settings: ${util_1.inspect(settings)}`);
+ try {
+ // Register problem matcher
+ coreCommand.issueCommand("add-matcher", {}, path_1.default.join(__dirname, "problem-matcher.json"));
+ if (!(yield githubManager.branch.has(settings.repositoryOwner, settings.repositoryName, settings.syncBranchName))) {
+ const baseBranch = yield githubManager.branch.get(settings.repositoryOwner, settings.repositoryName, settings.ref.replace(/^refs\/heads\//, ""));
+ yield githubManager.branch.create(settings.repositoryOwner, settings.repositoryName, baseBranch.data.object.sha, settings.syncBranchName);
+ }
+ const mainGitCommandManager = yield git_command_manager_1.createCommandManager(settings.repositoryPath);
+ const ref = `refs/heads/${settings.syncBranchName}`;
+ yield mainGitCommandManager.fetch(0, refHelper.getRefSpec(ref));
+ const checkoutInfo = yield refHelper.getCheckoutInfo(mainGitCommandManager, ref);
+ yield mainGitCommandManager.checkout(checkoutInfo.ref, checkoutInfo.startPoint);
+ // download the template repo
+ yield gitSourceProvider.getSource(githubManager, settings, settings.templateRepositoryUrl, settings.templateRepositoryPath, settings.templateRepositoryRef);
+ // find all files
+ const files = filehound
+ .path(settings.templateRepositoryPath)
+ .discard(settings.ignoreList)
+ .findSync();
+ core.debug(`List of found files ${util_1.inspect(files)}`);
+ for (const file of files) {
+ fs_extra_1.default.copySync(file, path_1.default.join(settings.githubWorkspacePath, file.replace(settings.templateRepositoryPath, "")), {
+ overwrite: true,
+ });
+ }
+ yield io.rmRF(settings.templateRepositoryPath);
+ try {
+ core.startGroup("Setting up git user and email");
+ yield mainGitCommandManager.config(USER_EMAIL, settings.authorEmail, true);
+ yield mainGitCommandManager.config(USER_NAME, settings.authorName, true);
+ core.endGroup();
+ core.startGroup("Adding all changed files to main repository");
+ yield mainGitCommandManager.addAll();
+ core.endGroup();
+ core.startGroup("Checking if changes exist that needs to applied");
+ if ((yield mainGitCommandManager.status(["--porcelain"])) === "") {
+ core.setOutput("Git status", `No changes found for ${settings.templateRepositoryUrl}`);
+ process.exit(0); // there is currently no neutral exit code
+ }
+ core.endGroup();
+ core.startGroup("Creating a commit");
+ yield mainGitCommandManager.commit(settings.messageHead);
+ core.endGroup();
+ core.startGroup("Pushing new commit");
+ yield mainGitCommandManager.push(settings.syncBranchName);
+ core.endGroup();
+ // Dump some info about the checked out commit
+ yield mainGitCommandManager.log1();
+ }
+ finally {
+ yield mainGitCommandManager.tryConfigUnset(USER_EMAIL, true);
+ yield mainGitCommandManager.tryConfigUnset(USER_NAME, true);
+ }
+ core.startGroup("Creating Pull request");
+ yield githubManager.pulls.create(settings.repositoryOwner, settings.repositoryName, settings.syncBranchName, settings.ref, settings.messageHead, settings.messageBody);
+ core.endGroup();
+ }
+ finally {
+ // Unregister problem matcher
+ coreCommand.issueCommand("remove-matcher", { owner: "checkout-git" }, "");
+ }
+ }
+ catch (error) {
+ core.setFailed(error.message);
+ }
+ });
+}
+function prepareTemplateSettings(settings, githubManager) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let template = core.getInput("template_repository", { required: false });
+ if (!template) {
+ const repoData = yield githubManager.repos.get(settings.repositoryOwner, settings.repositoryName);
+ if (repoData.data.template_repository !== undefined) {
+ template = repoData.data.template_repository.full_name;
+ }
+ else {
+ core.setFailed('Template repository not found, please provide "template_repository" key, that you want to check');
+ process.exit(1); // there is currently no neutral exit code
+ }
+ }
+ else {
+ const [templateRepositoryOwner, templateRepositoryName] = template.split("/");
+ const repoData = yield githubManager.repos.get(templateRepositoryOwner, templateRepositoryName);
+ if (repoData.data.template_repository === undefined) {
+ core.setFailed('You need to provide a github template repository for "template_repository"');
+ process.exit(1); // there is currently no neutral exit code
+ }
+ }
+ settings.templateRepository = template;
+ const [templateRepositoryOwner, templateRepositoryName] = template.split("/");
+ settings.templateRepositoryPath = path_1.default.resolve(settings.githubWorkspacePath, `${encodeURIComponent(templateRepositoryOwner)}/${encodeURIComponent(templateRepositoryName)}`);
+ if (!(settings.templateRepositoryPath + path_1.default.sep).startsWith(settings.githubWorkspacePath + path_1.default.sep)) {
+ throw new Error(`Repository path '${settings.templateRepositoryPath}' is not under '${settings.githubWorkspacePath}'`);
+ }
+ if (settings.sshKey) {
+ settings.templateRepositoryUrl = `git@${settings.serverUrl.hostname}:${settings.templateRepository}.git`;
+ }
+ else {
+ // "origin" is SCHEME://HOSTNAME[:PORT]
+ settings.templateRepositoryUrl = `${settings.serverUrl.origin}/${settings.templateRepository}`;
+ }
+ return settings;
+ });
+}
+if (!stateHelper.IsPost) {
+ run();
+}
+else {
+ github_action_cleanup_1.cleanup(stateHelper.TemplateRepositoryPath);
}
/***/ }),
-/* 94 */,
-/* 95 */
+
+/***/ 202:
/***/ (function(module, __unusedexports, __webpack_require__) {
-"use strict";
+module.exports = __webpack_require__(441);
-const fs = __webpack_require__(598)
-const path = __webpack_require__(622)
-const copySync = __webpack_require__(43).copySync
-const removeSync = __webpack_require__(723).removeSync
-const mkdirpSync = __webpack_require__(727).mkdirpSync
-const stat = __webpack_require__(127)
+/***/ }),
-function moveSync (src, dest, opts) {
- opts = opts || {}
- const overwrite = opts.overwrite || opts.clobber || false
+/***/ 209:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- const { srcStat } = stat.checkPathsSync(src, dest, 'move')
- stat.checkParentPathsSync(src, srcStat, dest, 'move')
- mkdirpSync(path.dirname(dest))
- return doRename(src, dest, overwrite)
-}
+"use strict";
-function doRename (src, dest, overwrite) {
- if (overwrite) {
- removeSync(dest)
- return rename(src, dest, overwrite)
- }
- if (fs.existsSync(dest)) throw new Error('dest already exists.')
- return rename(src, dest, overwrite)
-}
-function rename (src, dest, overwrite) {
- try {
- fs.renameSync(src, dest)
- } catch (err) {
- if (err.code !== 'EXDEV') throw err
- return moveAcrossDevice(src, dest, overwrite)
- }
-}
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
-function moveAcrossDevice (src, dest, overwrite) {
- const opts = {
- overwrite,
- errorOnExist: true
- }
- copySync(src, dest, opts)
- return removeSync(src)
-}
+var _v = _interopRequireDefault(__webpack_require__(212));
-module.exports = moveSync
+var _md = _interopRequireDefault(__webpack_require__(803));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+const v3 = (0, _v.default)('v3', 0x30, _md.default);
+var _default = v3;
+exports.default = _default;
/***/ }),
-/* 96 */,
-/* 97 */,
-/* 98 */,
-/* 99 */,
-/* 100 */,
-/* 101 */,
-/* 102 */,
-/* 103 */,
-/* 104 */,
-/* 105 */,
-/* 106 */,
-/* 107 */,
-/* 108 */,
-/* 109 */,
-/* 110 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-"use strict";
+/***/ 211:
+/***/ (function(module) {
+module.exports = require("https");
-const fs = __webpack_require__(598)
-const path = __webpack_require__(622)
-const mkdirsSync = __webpack_require__(727).mkdirsSync
-const utimesMillisSync = __webpack_require__(916).utimesMillisSync
-const stat = __webpack_require__(127)
+/***/ }),
-function copySync (src, dest, opts) {
- if (typeof opts === 'function') {
- opts = { filter: opts }
- }
+/***/ 212:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- opts = opts || {}
- opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now
- opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber
+"use strict";
- // Warn about using preserveTimestamps on 32-bit node
- if (opts.preserveTimestamps && process.arch === 'ia32') {
- console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n
- see https://github.com/jprichardson/node-fs-extra/issues/269`)
- }
- const { srcStat, destStat } = stat.checkPathsSync(src, dest, 'copy')
- stat.checkParentPathsSync(src, srcStat, dest, 'copy')
- return handleFilterAndCopy(destStat, src, dest, opts)
-}
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = _default;
+exports.URL = exports.DNS = void 0;
-function handleFilterAndCopy (destStat, src, dest, opts) {
- if (opts.filter && !opts.filter(src, dest)) return
- const destParent = path.dirname(dest)
- if (!fs.existsSync(destParent)) mkdirsSync(destParent)
- return startCopy(destStat, src, dest, opts)
-}
+var _stringify = _interopRequireDefault(__webpack_require__(411));
-function startCopy (destStat, src, dest, opts) {
- if (opts.filter && !opts.filter(src, dest)) return
- return getStats(destStat, src, dest, opts)
-}
+var _parse = _interopRequireDefault(__webpack_require__(22));
-function getStats (destStat, src, dest, opts) {
- const statSync = opts.dereference ? fs.statSync : fs.lstatSync
- const srcStat = statSync(src)
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)
- else if (srcStat.isFile() ||
- srcStat.isCharacterDevice() ||
- srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts)
- else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)
-}
+function stringToBytes(str) {
+ str = unescape(encodeURIComponent(str)); // UTF8 escape
-function onFile (srcStat, destStat, src, dest, opts) {
- if (!destStat) return copyFile(srcStat, src, dest, opts)
- return mayCopyFile(srcStat, src, dest, opts)
-}
+ const bytes = [];
-function mayCopyFile (srcStat, src, dest, opts) {
- if (opts.overwrite) {
- fs.unlinkSync(dest)
- return copyFile(srcStat, src, dest, opts)
- } else if (opts.errorOnExist) {
- throw new Error(`'${dest}' already exists`)
+ for (let i = 0; i < str.length; ++i) {
+ bytes.push(str.charCodeAt(i));
}
-}
-function copyFile (srcStat, src, dest, opts) {
- fs.copyFileSync(src, dest)
- if (opts.preserveTimestamps) handleTimestamps(srcStat.mode, src, dest)
- return setDestMode(dest, srcStat.mode)
-}
-
-function handleTimestamps (srcMode, src, dest) {
- // Make sure the file is writable before setting the timestamp
- // otherwise open fails with EPERM when invoked with 'r+'
- // (through utimes call)
- if (fileIsNotWritable(srcMode)) makeFileWritable(dest, srcMode)
- return setDestTimestamps(src, dest)
-}
-
-function fileIsNotWritable (srcMode) {
- return (srcMode & 0o200) === 0
+ return bytes;
}
-function makeFileWritable (dest, srcMode) {
- return setDestMode(dest, srcMode | 0o200)
-}
+const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
+exports.DNS = DNS;
+const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';
+exports.URL = URL;
-function setDestMode (dest, srcMode) {
- return fs.chmodSync(dest, srcMode)
-}
+function _default(name, version, hashfunc) {
+ function generateUUID(value, namespace, buf, offset) {
+ if (typeof value === 'string') {
+ value = stringToBytes(value);
+ }
-function setDestTimestamps (src, dest) {
- // The initial srcStat.atime cannot be trusted
- // because it is modified by the read(2) system call
- // (See https://nodejs.org/api/fs.html#fs_stat_time_values)
- const updatedSrcStat = fs.statSync(src)
- return utimesMillisSync(dest, updatedSrcStat.atime, updatedSrcStat.mtime)
-}
+ if (typeof namespace === 'string') {
+ namespace = (0, _parse.default)(namespace);
+ }
-function onDir (srcStat, destStat, src, dest, opts) {
- if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts)
- if (destStat && !destStat.isDirectory()) {
- throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)
- }
- return copyDir(src, dest, opts)
-}
+ if (namespace.length !== 16) {
+ throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');
+ } // Compute hash of namespace and value, Per 4.3
+ // Future: Use spread syntax when supported on all platforms, e.g. `bytes =
+ // hashfunc([...namespace, ... value])`
-function mkDirAndCopy (srcMode, src, dest, opts) {
- fs.mkdirSync(dest)
- copyDir(src, dest, opts)
- return setDestMode(dest, srcMode)
-}
-function copyDir (src, dest, opts) {
- fs.readdirSync(src).forEach(item => copyDirItem(item, src, dest, opts))
-}
+ let bytes = new Uint8Array(16 + value.length);
+ bytes.set(namespace);
+ bytes.set(value, namespace.length);
+ bytes = hashfunc(bytes);
+ bytes[6] = bytes[6] & 0x0f | version;
+ bytes[8] = bytes[8] & 0x3f | 0x80;
-function copyDirItem (item, src, dest, opts) {
- const srcItem = path.join(src, item)
- const destItem = path.join(dest, item)
- const { destStat } = stat.checkPathsSync(srcItem, destItem, 'copy')
- return startCopy(destStat, srcItem, destItem, opts)
-}
+ if (buf) {
+ offset = offset || 0;
-function onLink (destStat, src, dest, opts) {
- let resolvedSrc = fs.readlinkSync(src)
- if (opts.dereference) {
- resolvedSrc = path.resolve(process.cwd(), resolvedSrc)
- }
+ for (let i = 0; i < 16; ++i) {
+ buf[offset + i] = bytes[i];
+ }
- if (!destStat) {
- return fs.symlinkSync(resolvedSrc, dest)
- } else {
- let resolvedDest
- try {
- resolvedDest = fs.readlinkSync(dest)
- } catch (err) {
- // dest exists and is a regular file or directory,
- // Windows may throw UNKNOWN error. If dest already exists,
- // fs throws error anyway, so no need to guard against it here.
- if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlinkSync(resolvedSrc, dest)
- throw err
- }
- if (opts.dereference) {
- resolvedDest = path.resolve(process.cwd(), resolvedDest)
- }
- if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {
- throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)
+ return buf;
}
- // prevent copy if src is a subdir of dest since unlinking
- // dest in this case would result in removing src contents
- // and therefore a broken symlink would be created.
- if (fs.statSync(dest).isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {
- throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)
- }
- return copyLink(resolvedSrc, dest)
- }
-}
+ return (0, _stringify.default)(bytes);
+ } // Function#name is not settable on some platforms (#270)
-function copyLink (resolvedSrc, dest) {
- fs.unlinkSync(dest)
- return fs.symlinkSync(resolvedSrc, dest)
-}
-module.exports = copySync
+ try {
+ generateUUID.name = name; // eslint-disable-next-line no-empty
+ } catch (err) {} // For CommonJS default export support
+
+ generateUUID.DNS = DNS;
+ generateUUID.URL = URL;
+ return generateUUID;
+}
/***/ }),
-/* 111 */,
-/* 112 */,
-/* 113 */,
-/* 114 */,
-/* 115 */,
-/* 116 */,
-/* 117 */,
-/* 118 */
+
+/***/ 220:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
-const os = __webpack_require__(87);
-
-const nameMap = new Map([
- [19, 'Catalina'],
- [18, 'Mojave'],
- [17, 'High Sierra'],
- [16, 'Sierra'],
- [15, 'El Capitan'],
- [14, 'Yosemite'],
- [13, 'Mavericks'],
- [12, 'Mountain Lion'],
- [11, 'Lion'],
- [10, 'Snow Leopard'],
- [9, 'Leopard'],
- [8, 'Tiger'],
- [7, 'Panther'],
- [6, 'Jaguar'],
- [5, 'Puma']
-]);
-
-const macosRelease = release => {
- release = Number((release || os.release()).split('.')[0]);
- return {
- name: nameMap.get(release),
- version: '10.' + (release - 4)
- };
-};
-
-module.exports = macosRelease;
-// TODO: remove this in the next major version
-module.exports.default = macosRelease;
-
-
-/***/ }),
-/* 119 */,
-/* 120 */
-/***/ (function(module) {
-
-"use strict";
+module.exports = function(Promise,
+ PromiseArray,
+ apiRejection,
+ tryConvertToPromise,
+ INTERNAL,
+ debug) {
+var util = __webpack_require__(248);
+var tryCatch = util.tryCatch;
+var errorObj = util.errorObj;
+var async = Promise._async;
-
-function createError(msg, code, props) {
- var err = msg instanceof Error ? msg : new Error(msg);
- var key;
-
- if (typeof code === 'object') {
- props = code;
- } else if (code != null) {
- err.code = code;
- }
-
- if (props) {
- for (key in props) {
- err[key] = props[key];
+function MappingPromiseArray(promises, fn, limit, _filter) {
+ this.constructor$(promises);
+ this._promise._captureStackTrace();
+ var context = Promise._getContext();
+ this._callback = util.contextBind(context, fn);
+ this._preservedValues = _filter === INTERNAL
+ ? new Array(this.length())
+ : null;
+ this._limit = limit;
+ this._inFlight = 0;
+ this._queue = [];
+ async.invoke(this._asyncInit, this, undefined);
+ if (util.isArray(promises)) {
+ for (var i = 0; i < promises.length; ++i) {
+ var maybePromise = promises[i];
+ if (maybePromise instanceof Promise) {
+ maybePromise.suppressUnhandledRejections();
+ }
}
}
-
- return err;
}
+util.inherits(MappingPromiseArray, PromiseArray);
-module.exports = createError;
-
-
-/***/ }),
-/* 121 */,
-/* 122 */,
-/* 123 */,
-/* 124 */,
-/* 125 */,
-/* 126 */,
-/* 127 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-"use strict";
-
+MappingPromiseArray.prototype._asyncInit = function() {
+ this._init$(undefined, -2);
+};
-const fs = __webpack_require__(869)
-const path = __webpack_require__(622)
-const util = __webpack_require__(669)
-const atLeastNode = __webpack_require__(159)
+MappingPromiseArray.prototype._init = function () {};
-const nodeSupportsBigInt = atLeastNode('10.5.0')
-const stat = (file) => nodeSupportsBigInt ? fs.stat(file, { bigint: true }) : fs.stat(file)
-const statSync = (file) => nodeSupportsBigInt ? fs.statSync(file, { bigint: true }) : fs.statSync(file)
+MappingPromiseArray.prototype._promiseFulfilled = function (value, index) {
+ var values = this._values;
+ var length = this.length();
+ var preservedValues = this._preservedValues;
+ var limit = this._limit;
-function getStats (src, dest) {
- return Promise.all([
- stat(src),
- stat(dest).catch(err => {
- if (err.code === 'ENOENT') return null
- throw err
- })
- ]).then(([srcStat, destStat]) => ({ srcStat, destStat }))
-}
+ if (index < 0) {
+ index = (index * -1) - 1;
+ values[index] = value;
+ if (limit >= 1) {
+ this._inFlight--;
+ this._drainQueue();
+ if (this._isResolved()) return true;
+ }
+ } else {
+ if (limit >= 1 && this._inFlight >= limit) {
+ values[index] = value;
+ this._queue.push(index);
+ return false;
+ }
+ if (preservedValues !== null) preservedValues[index] = value;
-function getStatsSync (src, dest) {
- let destStat
- const srcStat = statSync(src)
- try {
- destStat = statSync(dest)
- } catch (err) {
- if (err.code === 'ENOENT') return { srcStat, destStat: null }
- throw err
- }
- return { srcStat, destStat }
-}
+ var promise = this._promise;
+ var callback = this._callback;
+ var receiver = promise._boundValue();
+ promise._pushContext();
+ var ret = tryCatch(callback).call(receiver, value, index, length);
+ var promiseCreated = promise._popContext();
+ debug.checkForgottenReturns(
+ ret,
+ promiseCreated,
+ preservedValues !== null ? "Promise.filter" : "Promise.map",
+ promise
+ );
+ if (ret === errorObj) {
+ this._reject(ret.e);
+ return true;
+ }
-function checkPaths (src, dest, funcName, cb) {
- util.callbackify(getStats)(src, dest, (err, stats) => {
- if (err) return cb(err)
- const { srcStat, destStat } = stats
- if (destStat && areIdentical(srcStat, destStat)) {
- return cb(new Error('Source and destination must not be the same.'))
+ var maybePromise = tryConvertToPromise(ret, this._promise);
+ if (maybePromise instanceof Promise) {
+ maybePromise = maybePromise._target();
+ var bitField = maybePromise._bitField;
+ ;
+ if (((bitField & 50397184) === 0)) {
+ if (limit >= 1) this._inFlight++;
+ values[index] = maybePromise;
+ maybePromise._proxy(this, (index + 1) * -1);
+ return false;
+ } else if (((bitField & 33554432) !== 0)) {
+ ret = maybePromise._value();
+ } else if (((bitField & 16777216) !== 0)) {
+ this._reject(maybePromise._reason());
+ return true;
+ } else {
+ this._cancel();
+ return true;
+ }
+ }
+ values[index] = ret;
}
- if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
- return cb(new Error(errMsg(src, dest, funcName)))
+ var totalResolved = ++this._totalResolved;
+ if (totalResolved >= length) {
+ if (preservedValues !== null) {
+ this._filter(values, preservedValues);
+ } else {
+ this._resolve(values);
+ }
+ return true;
}
- return cb(null, { srcStat, destStat })
- })
-}
-
-function checkPathsSync (src, dest, funcName) {
- const { srcStat, destStat } = getStatsSync(src, dest)
- if (destStat && areIdentical(srcStat, destStat)) {
- throw new Error('Source and destination must not be the same.')
- }
- if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
- throw new Error(errMsg(src, dest, funcName))
- }
- return { srcStat, destStat }
-}
+ return false;
+};
-// recursively check if dest parent is a subdirectory of src.
-// It works for all file types including symlinks since it
-// checks the src and dest inodes. It starts from the deepest
-// parent and stops once it reaches the src parent or the root path.
-function checkParentPaths (src, srcStat, dest, funcName, cb) {
- const srcParent = path.resolve(path.dirname(src))
- const destParent = path.resolve(path.dirname(dest))
- if (destParent === srcParent || destParent === path.parse(destParent).root) return cb()
- const callback = (err, destStat) => {
- if (err) {
- if (err.code === 'ENOENT') return cb()
- return cb(err)
+MappingPromiseArray.prototype._drainQueue = function () {
+ var queue = this._queue;
+ var limit = this._limit;
+ var values = this._values;
+ while (queue.length > 0 && this._inFlight < limit) {
+ if (this._isResolved()) return;
+ var index = queue.pop();
+ this._promiseFulfilled(values[index], index);
}
- if (areIdentical(srcStat, destStat)) {
- return cb(new Error(errMsg(src, dest, funcName)))
+};
+
+MappingPromiseArray.prototype._filter = function (booleans, values) {
+ var len = values.length;
+ var ret = new Array(len);
+ var j = 0;
+ for (var i = 0; i < len; ++i) {
+ if (booleans[i]) ret[j++] = values[i];
}
- return checkParentPaths(src, srcStat, destParent, funcName, cb)
- }
- if (nodeSupportsBigInt) fs.stat(destParent, { bigint: true }, callback)
- else fs.stat(destParent, callback)
-}
+ ret.length = j;
+ this._resolve(ret);
+};
-function checkParentPathsSync (src, srcStat, dest, funcName) {
- const srcParent = path.resolve(path.dirname(src))
- const destParent = path.resolve(path.dirname(dest))
- if (destParent === srcParent || destParent === path.parse(destParent).root) return
- let destStat
- try {
- destStat = statSync(destParent)
- } catch (err) {
- if (err.code === 'ENOENT') return
- throw err
- }
- if (areIdentical(srcStat, destStat)) {
- throw new Error(errMsg(src, dest, funcName))
- }
- return checkParentPathsSync(src, srcStat, destParent, funcName)
-}
+MappingPromiseArray.prototype.preservedValues = function () {
+ return this._preservedValues;
+};
-function areIdentical (srcStat, destStat) {
- if (destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev) {
- if (nodeSupportsBigInt || destStat.ino < Number.MAX_SAFE_INTEGER) {
- // definitive answer
- return true
- }
- // Use additional heuristics if we can't use 'bigint'.
- // Different 'ino' could be represented the same if they are >= Number.MAX_SAFE_INTEGER
- // See issue 657
- if (destStat.size === srcStat.size &&
- destStat.mode === srcStat.mode &&
- destStat.nlink === srcStat.nlink &&
- destStat.atimeMs === srcStat.atimeMs &&
- destStat.mtimeMs === srcStat.mtimeMs &&
- destStat.ctimeMs === srcStat.ctimeMs &&
- destStat.birthtimeMs === srcStat.birthtimeMs) {
- // heuristic answer
- return true
+function map(promises, fn, options, _filter) {
+ if (typeof fn !== "function") {
+ return apiRejection("expecting a function but got " + util.classString(fn));
}
- }
- return false
-}
-// return true if dest is a subdir of src, otherwise false.
-// It only checks the path strings.
-function isSrcSubdir (src, dest) {
- const srcArr = path.resolve(src).split(path.sep).filter(i => i)
- const destArr = path.resolve(dest).split(path.sep).filter(i => i)
- return srcArr.reduce((acc, cur, i) => acc && destArr[i] === cur, true)
+ var limit = 0;
+ if (options !== undefined) {
+ if (typeof options === "object" && options !== null) {
+ if (typeof options.concurrency !== "number") {
+ return Promise.reject(
+ new TypeError("'concurrency' must be a number but it is " +
+ util.classString(options.concurrency)));
+ }
+ limit = options.concurrency;
+ } else {
+ return Promise.reject(new TypeError(
+ "options argument must be an object but it is " +
+ util.classString(options)));
+ }
+ }
+ limit = typeof limit === "number" &&
+ isFinite(limit) && limit >= 1 ? limit : 0;
+ return new MappingPromiseArray(promises, fn, limit, _filter).promise();
}
-function errMsg (src, dest, funcName) {
- return `Cannot ${funcName} '${src}' to a subdirectory of itself, '${dest}'.`
-}
+Promise.prototype.map = function (fn, options) {
+ return map(this, fn, options, null);
+};
-module.exports = {
- checkPaths,
- checkPathsSync,
- checkParentPaths,
- checkParentPathsSync,
- isSrcSubdir
-}
+Promise.map = function (promises, fn, options, _filter) {
+ return map(promises, fn, options, _filter);
+};
-/***/ }),
-/* 128 */,
-/* 129 */
-/***/ (function(module) {
+};
-module.exports = require("child_process");
/***/ }),
-/* 130 */,
-/* 131 */,
-/* 132 */,
-/* 133 */,
-/* 134 */,
-/* 135 */,
-/* 136 */,
-/* 137 */,
-/* 138 */,
-/* 139 */,
-/* 140 */,
-/* 141 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
-
-"use strict";
-
-
-var net = __webpack_require__(631);
-var tls = __webpack_require__(16);
-var http = __webpack_require__(605);
-var https = __webpack_require__(211);
-var events = __webpack_require__(614);
-var assert = __webpack_require__(357);
-var util = __webpack_require__(669);
+/***/ 226:
+/***/ (function(module, __unusedexports, __webpack_require__) {
-exports.httpOverHttp = httpOverHttp;
-exports.httpsOverHttp = httpsOverHttp;
-exports.httpOverHttps = httpOverHttps;
-exports.httpsOverHttps = httpsOverHttps;
+"use strict";
-function httpOverHttp(options) {
- var agent = new TunnelingAgent(options);
- agent.request = http.request;
- return agent;
+module.exports = {
+ // Export promiseified graceful-fs:
+ ...__webpack_require__(869),
+ // Export extra methods:
+ ...__webpack_require__(43),
+ ...__webpack_require__(774),
+ ...__webpack_require__(615),
+ ...__webpack_require__(472),
+ ...__webpack_require__(171),
+ ...__webpack_require__(727),
+ ...__webpack_require__(959),
+ ...__webpack_require__(353),
+ ...__webpack_require__(517),
+ ...__webpack_require__(322),
+ ...__webpack_require__(723)
}
-function httpsOverHttp(options) {
- var agent = new TunnelingAgent(options);
- agent.request = http.request;
- agent.createSocket = createSecureSocket;
- agent.defaultPort = 443;
- return agent;
+// Export fs.promises as a getter property so that we don't trigger
+// ExperimentalWarning before fs.promises is actually accessed.
+const fs = __webpack_require__(747)
+if (Object.getOwnPropertyDescriptor(fs, 'promises')) {
+ Object.defineProperty(module.exports, 'promises', {
+ get () { return fs.promises }
+ })
}
-function httpOverHttps(options) {
- var agent = new TunnelingAgent(options);
- agent.request = https.request;
- return agent;
-}
-function httpsOverHttps(options) {
- var agent = new TunnelingAgent(options);
- agent.request = https.request;
- agent.createSocket = createSecureSocket;
- agent.defaultPort = 443;
- return agent;
-}
+/***/ }),
+/***/ 227:
+/***/ (function(__unusedmodule, exports) {
-function TunnelingAgent(options) {
- var self = this;
- self.options = options || {};
- self.proxyOptions = self.options.proxy || {};
- self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets;
- self.requests = [];
- self.sockets = [];
+"use strict";
- self.on('free', function onFree(socket, host, port, localAddress) {
- var options = toOptions(host, port, localAddress);
- for (var i = 0, len = self.requests.length; i < len; ++i) {
- var pending = self.requests[i];
- if (pending.host === options.host && pending.port === options.port) {
- // Detect the request to connect same origin server,
- // reuse the connection.
- self.requests.splice(i, 1);
- pending.request.onSocket(socket);
- return;
- }
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getRefSpec = exports.getCheckoutInfo = void 0;
+function getCheckoutInfo(git, ref) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!git) {
+ throw new Error("Arg git cannot be empty");
+ }
+ if (!ref) {
+ throw new Error("Args ref cannot be empty");
+ }
+ const result = {};
+ const upperRef = (ref || "").toUpperCase();
+ // refs/heads/
+ if (upperRef.startsWith("REFS/HEADS/")) {
+ const branch = ref.substring("refs/heads/".length);
+ result.ref = branch;
+ result.startPoint = `refs/remotes/origin/${branch}`;
+ }
+ // refs/pull/
+ else if (upperRef.startsWith("REFS/PULL/")) {
+ const branch = ref.substring("refs/pull/".length);
+ result.ref = `refs/remotes/pull/${branch}`;
+ }
+ // refs/tags/
+ else if (upperRef.startsWith("REFS/")) {
+ result.ref = ref;
+ }
+ // Unqualified ref, check for a matching ref or tag
+ else {
+ if (yield git.branchExists(true, `origin/${ref}`)) {
+ result.ref = ref;
+ result.startPoint = `refs/remotes/origin/${ref}`;
+ }
+ else if (yield git.tagExists(`${ref}`)) {
+ result.ref = `refs/tags/${ref}`;
+ }
+ else {
+ throw new Error(`A branch or tag with the name '${ref}' could not be found`);
+ }
+ }
+ return result;
+ });
+}
+exports.getCheckoutInfo = getCheckoutInfo;
+function getRefSpec(ref) {
+ if (!ref) {
+ throw new Error("Arg ref cannot be empty");
+ }
+ const upperRef = (ref || "").toUpperCase();
+ // Unqualified ref, check for a matching ref or tag
+ if (!upperRef.startsWith("REFS/")) {
+ return [`+refs/heads/${ref}*:refs/remotes/origin/${ref}*`, `+refs/tags/${ref}*:refs/tags/${ref}*`];
+ }
+ // refs/heads/
+ else if (upperRef.startsWith("REFS/HEADS/")) {
+ const branch = ref.substring("refs/heads/".length);
+ return [`+${ref}:refs/remotes/origin/${branch}`];
+ }
+ // refs/pull/
+ else if (upperRef.startsWith("REFS/PULL/")) {
+ const branch = ref.substring("refs/pull/".length);
+ return [`+${ref}:refs/remotes/pull/${branch}`];
+ }
+ // refs/tags/
+ else {
+ return [`+${ref}:${ref}`];
}
- socket.destroy();
- self.removeSocket(socket);
- });
}
-util.inherits(TunnelingAgent, events.EventEmitter);
+exports.getRefSpec = getRefSpec;
-TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) {
- var self = this;
- var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress));
- if (self.sockets.length >= this.maxSockets) {
- // We are over limit so we'll add it to the queue.
- self.requests.push(options);
- return;
- }
+/***/ }),
- // If we are under maxSockets create a new one.
- self.createSocket(options, function(socket) {
- socket.on('free', onFree);
- socket.on('close', onCloseOrRemove);
- socket.on('agentRemove', onCloseOrRemove);
- req.onSocket(socket);
+/***/ 246:
+/***/ (function(module, __unusedexports, __webpack_require__) {
- function onFree() {
- self.emit('free', socket, options);
+"use strict";
+
+module.exports = function(Promise, INTERNAL, tryConvertToPromise,
+ apiRejection, Proxyable) {
+var util = __webpack_require__(248);
+var isArray = util.isArray;
+
+function toResolutionValue(val) {
+ switch(val) {
+ case -2: return [];
+ case -3: return {};
+ case -6: return new Map();
}
+}
- function onCloseOrRemove(err) {
- self.removeSocket(socket);
- socket.removeListener('free', onFree);
- socket.removeListener('close', onCloseOrRemove);
- socket.removeListener('agentRemove', onCloseOrRemove);
+function PromiseArray(values) {
+ var promise = this._promise = new Promise(INTERNAL);
+ if (values instanceof Promise) {
+ promise._propagateFrom(values, 3);
+ values.suppressUnhandledRejections();
}
- });
-};
+ promise._setOnCancel(this);
+ this._values = values;
+ this._length = 0;
+ this._totalResolved = 0;
+ this._init(undefined, -2);
+}
+util.inherits(PromiseArray, Proxyable);
-TunnelingAgent.prototype.createSocket = function createSocket(options, cb) {
- var self = this;
- var placeholder = {};
- self.sockets.push(placeholder);
+PromiseArray.prototype.length = function () {
+ return this._length;
+};
- var connectOptions = mergeOptions({}, self.proxyOptions, {
- method: 'CONNECT',
- path: options.host + ':' + options.port,
- agent: false,
- headers: {
- host: options.host + ':' + options.port
- }
- });
- if (options.localAddress) {
- connectOptions.localAddress = options.localAddress;
- }
- if (connectOptions.proxyAuth) {
- connectOptions.headers = connectOptions.headers || {};
- connectOptions.headers['Proxy-Authorization'] = 'Basic ' +
- new Buffer(connectOptions.proxyAuth).toString('base64');
- }
+PromiseArray.prototype.promise = function () {
+ return this._promise;
+};
- debug('making CONNECT request');
- var connectReq = self.request(connectOptions);
- connectReq.useChunkedEncodingByDefault = false; // for v0.6
- connectReq.once('response', onResponse); // for v0.6
- connectReq.once('upgrade', onUpgrade); // for v0.6
- connectReq.once('connect', onConnect); // for v0.7 or later
- connectReq.once('error', onError);
- connectReq.end();
+PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {
+ var values = tryConvertToPromise(this._values, this._promise);
+ if (values instanceof Promise) {
+ values = values._target();
+ var bitField = values._bitField;
+ ;
+ this._values = values;
- function onResponse(res) {
- // Very hacky. This is necessary to avoid http-parser leaks.
- res.upgrade = true;
- }
+ if (((bitField & 50397184) === 0)) {
+ this._promise._setAsyncGuaranteed();
+ return values._then(
+ init,
+ this._reject,
+ undefined,
+ this,
+ resolveValueIfEmpty
+ );
+ } else if (((bitField & 33554432) !== 0)) {
+ values = values._value();
+ } else if (((bitField & 16777216) !== 0)) {
+ return this._reject(values._reason());
+ } else {
+ return this._cancel();
+ }
+ }
+ values = util.asArray(values);
+ if (values === null) {
+ var err = apiRejection(
+ "expecting an array or an iterable object but got " + util.classString(values)).reason();
+ this._promise._rejectCallback(err, false);
+ return;
+ }
- function onUpgrade(res, socket, head) {
- // Hacky.
- process.nextTick(function() {
- onConnect(res, socket, head);
- });
- }
+ if (values.length === 0) {
+ if (resolveValueIfEmpty === -5) {
+ this._resolveEmptyArray();
+ }
+ else {
+ this._resolve(toResolutionValue(resolveValueIfEmpty));
+ }
+ return;
+ }
+ this._iterate(values);
+};
- function onConnect(res, socket, head) {
- connectReq.removeAllListeners();
- socket.removeAllListeners();
+PromiseArray.prototype._iterate = function(values) {
+ var len = this.getActualLength(values.length);
+ this._length = len;
+ this._values = this.shouldCopyValues() ? new Array(len) : this._values;
+ var result = this._promise;
+ var isResolved = false;
+ var bitField = null;
+ for (var i = 0; i < len; ++i) {
+ var maybePromise = tryConvertToPromise(values[i], result);
- if (res.statusCode !== 200) {
- debug('tunneling socket could not be established, statusCode=%d',
- res.statusCode);
- socket.destroy();
- var error = new Error('tunneling socket could not be established, ' +
- 'statusCode=' + res.statusCode);
- error.code = 'ECONNRESET';
- options.request.emit('error', error);
- self.removeSocket(placeholder);
- return;
- }
- if (head.length > 0) {
- debug('got illegal response body from proxy');
- socket.destroy();
- var error = new Error('got illegal response body from proxy');
- error.code = 'ECONNRESET';
- options.request.emit('error', error);
- self.removeSocket(placeholder);
- return;
- }
- debug('tunneling connection has established');
- self.sockets[self.sockets.indexOf(placeholder)] = socket;
- return cb(socket);
- }
+ if (maybePromise instanceof Promise) {
+ maybePromise = maybePromise._target();
+ bitField = maybePromise._bitField;
+ } else {
+ bitField = null;
+ }
- function onError(cause) {
- connectReq.removeAllListeners();
+ if (isResolved) {
+ if (bitField !== null) {
+ maybePromise.suppressUnhandledRejections();
+ }
+ } else if (bitField !== null) {
+ if (((bitField & 50397184) === 0)) {
+ maybePromise._proxy(this, i);
+ this._values[i] = maybePromise;
+ } else if (((bitField & 33554432) !== 0)) {
+ isResolved = this._promiseFulfilled(maybePromise._value(), i);
+ } else if (((bitField & 16777216) !== 0)) {
+ isResolved = this._promiseRejected(maybePromise._reason(), i);
+ } else {
+ isResolved = this._promiseCancelled(i);
+ }
+ } else {
+ isResolved = this._promiseFulfilled(maybePromise, i);
+ }
+ }
+ if (!isResolved) result._setAsyncGuaranteed();
+};
- debug('tunneling socket could not be established, cause=%s\n',
- cause.message, cause.stack);
- var error = new Error('tunneling socket could not be established, ' +
- 'cause=' + cause.message);
- error.code = 'ECONNRESET';
- options.request.emit('error', error);
- self.removeSocket(placeholder);
- }
+PromiseArray.prototype._isResolved = function () {
+ return this._values === null;
};
-TunnelingAgent.prototype.removeSocket = function removeSocket(socket) {
- var pos = this.sockets.indexOf(socket)
- if (pos === -1) {
- return;
- }
- this.sockets.splice(pos, 1);
+PromiseArray.prototype._resolve = function (value) {
+ this._values = null;
+ this._promise._fulfill(value);
+};
- var pending = this.requests.shift();
- if (pending) {
- // If we have pending requests and a socket gets closed a new one
- // needs to be created to take over in the pool for the one that closed.
- this.createSocket(pending, function(socket) {
- pending.request.onSocket(socket);
- });
- }
+PromiseArray.prototype._cancel = function() {
+ if (this._isResolved() || !this._promise._isCancellable()) return;
+ this._values = null;
+ this._promise._cancel();
};
-function createSecureSocket(options, cb) {
- var self = this;
- TunnelingAgent.prototype.createSocket.call(self, options, function(socket) {
- var hostHeader = options.request.getHeader('host');
- var tlsOptions = mergeOptions({}, self.options, {
- socket: socket,
- servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host
- });
+PromiseArray.prototype._reject = function (reason) {
+ this._values = null;
+ this._promise._rejectCallback(reason, false);
+};
- // 0 is dummy port for v0.6
- var secureSocket = tls.connect(0, tlsOptions);
- self.sockets[self.sockets.indexOf(socket)] = secureSocket;
- cb(secureSocket);
- });
-}
+PromiseArray.prototype._promiseFulfilled = function (value, index) {
+ this._values[index] = value;
+ var totalResolved = ++this._totalResolved;
+ if (totalResolved >= this._length) {
+ this._resolve(this._values);
+ return true;
+ }
+ return false;
+};
+PromiseArray.prototype._promiseCancelled = function() {
+ this._cancel();
+ return true;
+};
-function toOptions(host, port, localAddress) {
- if (typeof host === 'string') { // since v0.10
- return {
- host: host,
- port: port,
- localAddress: localAddress
- };
- }
- return host; // for v0.11 or later
-}
+PromiseArray.prototype._promiseRejected = function (reason) {
+ this._totalResolved++;
+ this._reject(reason);
+ return true;
+};
-function mergeOptions(target) {
- for (var i = 1, len = arguments.length; i < len; ++i) {
- var overrides = arguments[i];
- if (typeof overrides === 'object') {
- var keys = Object.keys(overrides);
- for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {
- var k = keys[j];
- if (overrides[k] !== undefined) {
- target[k] = overrides[k];
+PromiseArray.prototype._resultCancelled = function() {
+ if (this._isResolved()) return;
+ var values = this._values;
+ this._cancel();
+ if (values instanceof Promise) {
+ values.cancel();
+ } else {
+ for (var i = 0; i < values.length; ++i) {
+ if (values[i] instanceof Promise) {
+ values[i].cancel();
+ }
}
- }
}
- }
- return target;
-}
+};
+PromiseArray.prototype.shouldCopyValues = function () {
+ return true;
+};
-var debug;
-if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) {
- debug = function() {
- var args = Array.prototype.slice.call(arguments);
- if (typeof args[0] === 'string') {
- args[0] = 'TUNNEL: ' + args[0];
- } else {
- args.unshift('TUNNEL:');
- }
- console.error.apply(console, args);
- }
-} else {
- debug = function() {};
-}
-exports.debug = debug; // for test
+PromiseArray.prototype.getActualLength = function (len) {
+ return len;
+};
+
+return PromiseArray;
+};
/***/ }),
-/* 142 */,
-/* 143 */,
-/* 144 */,
-/* 145 */
+
+/***/ 248:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
-const pump = __webpack_require__(453);
-const bufferStream = __webpack_require__(966);
+var es5 = __webpack_require__(883);
+var canEvaluate = typeof navigator == "undefined";
-class MaxBufferError extends Error {
- constructor() {
- super('maxBuffer exceeded');
- this.name = 'MaxBufferError';
- }
-}
+var errorObj = {e: {}};
+var tryCatchTarget;
+var globalObject = typeof self !== "undefined" ? self :
+ typeof window !== "undefined" ? window :
+ typeof global !== "undefined" ? global :
+ this !== undefined ? this : null;
-function getStream(inputStream, options) {
- if (!inputStream) {
- return Promise.reject(new Error('Expected a stream'));
- }
+function tryCatcher() {
+ try {
+ var target = tryCatchTarget;
+ tryCatchTarget = null;
+ return target.apply(this, arguments);
+ } catch (e) {
+ errorObj.e = e;
+ return errorObj;
+ }
+}
+function tryCatch(fn) {
+ tryCatchTarget = fn;
+ return tryCatcher;
+}
- options = Object.assign({maxBuffer: Infinity}, options);
+var inherits = function(Child, Parent) {
+ var hasProp = {}.hasOwnProperty;
- const {maxBuffer} = options;
+ function T() {
+ this.constructor = Child;
+ this.constructor$ = Parent;
+ for (var propertyName in Parent.prototype) {
+ if (hasProp.call(Parent.prototype, propertyName) &&
+ propertyName.charAt(propertyName.length-1) !== "$"
+ ) {
+ this[propertyName + "$"] = Parent.prototype[propertyName];
+ }
+ }
+ }
+ T.prototype = Parent.prototype;
+ Child.prototype = new T();
+ return Child.prototype;
+};
- let stream;
- return new Promise((resolve, reject) => {
- const rejectPromise = error => {
- if (error) { // A null check
- error.bufferedData = stream.getBufferedValue();
- }
- reject(error);
- };
- stream = pump(inputStream, bufferStream(options), error => {
- if (error) {
- rejectPromise(error);
- return;
- }
+function isPrimitive(val) {
+ return val == null || val === true || val === false ||
+ typeof val === "string" || typeof val === "number";
- resolve();
- });
+}
- stream.on('data', () => {
- if (stream.getBufferedLength() > maxBuffer) {
- rejectPromise(new MaxBufferError());
- }
- });
- }).then(() => stream.getBufferedValue());
+function isObject(value) {
+ return typeof value === "function" ||
+ typeof value === "object" && value !== null;
}
-module.exports = getStream;
-module.exports.buffer = (stream, options) => getStream(stream, Object.assign({}, options, {encoding: 'buffer'}));
-module.exports.array = (stream, options) => getStream(stream, Object.assign({}, options, {array: true}));
-module.exports.MaxBufferError = MaxBufferError;
+function maybeWrapAsError(maybeError) {
+ if (!isPrimitive(maybeError)) return maybeError;
+ return new Error(safeToString(maybeError));
+}
-/***/ }),
-/* 146 */,
-/* 147 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
+function withAppended(target, appendee) {
+ var len = target.length;
+ var ret = new Array(len + 1);
+ var i;
+ for (i = 0; i < len; ++i) {
+ ret[i] = target[i];
+ }
+ ret[i] = appendee;
+ return ret;
+}
-"use strict";
+function getDataPropertyOrDefault(obj, key, defaultValue) {
+ if (es5.isES5) {
+ var desc = Object.getOwnPropertyDescriptor(obj, key);
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.GithubManager = void 0;
-const core = __importStar(__webpack_require__(470));
-const util_1 = __webpack_require__(669);
-const uuid_1 = __webpack_require__(62);
-const path_1 = __importDefault(__webpack_require__(622));
-const fs_1 = __importDefault(__webpack_require__(747));
-const io = __importStar(__webpack_require__(1));
-const toolCache = __importStar(__webpack_require__(533));
-const assert_1 = __importDefault(__webpack_require__(357));
-const IS_WINDOWS = process.platform === 'win32';
-class GithubManager {
- constructor(octokit) {
- this.octokit = octokit;
+ if (desc != null) {
+ return desc.get == null && desc.set == null
+ ? desc.value
+ : defaultValue;
+ }
+ } else {
+ return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;
}
- get branch() {
- return {
- create: (owner, repo, sha, syncBranch) => __awaiter(this, void 0, void 0, function* () {
- try {
- core.debug(`Creating branch ${syncBranch}`);
- yield this.octokit.git.createRef({
- ref: `refs/heads/${syncBranch}`,
- sha,
- owner,
- repo
- });
- }
- catch (error) {
- throw new Error(`Failed to create branch ${syncBranch}; ${util_1.inspect(error)}`);
- }
- }),
- delete: (owner, repo, branch) => __awaiter(this, void 0, void 0, function* () {
- try {
- core.debug(`Delete branch ${branch}`);
- yield this.octokit.git.deleteRef({
- owner,
- repo,
- ref: `refs/heads/${branch}`
- });
- }
- catch (error) {
- throw new Error(`Failed to delete branch ${branch}; ${util_1.inspect(error)}`);
- }
- }),
- get: (owner, repo, branch) => __awaiter(this, void 0, void 0, function* () {
+}
+
+function notEnumerableProp(obj, name, value) {
+ if (isPrimitive(obj)) return obj;
+ var descriptor = {
+ value: value,
+ configurable: true,
+ enumerable: false,
+ writable: true
+ };
+ es5.defineProperty(obj, name, descriptor);
+ return obj;
+}
+
+function thrower(r) {
+ throw r;
+}
+
+var inheritedDataKeys = (function() {
+ var excludedPrototypes = [
+ Array.prototype,
+ Object.prototype,
+ Function.prototype
+ ];
+
+ var isExcludedProto = function(val) {
+ for (var i = 0; i < excludedPrototypes.length; ++i) {
+ if (excludedPrototypes[i] === val) {
+ return true;
+ }
+ }
+ return false;
+ };
+
+ if (es5.isES5) {
+ var getKeys = Object.getOwnPropertyNames;
+ return function(obj) {
+ var ret = [];
+ var visitedKeys = Object.create(null);
+ while (obj != null && !isExcludedProto(obj)) {
+ var keys;
try {
- return yield this.octokit.git.getRef({
- owner,
- repo,
- ref: `heads/${branch}`
- });
- }
- catch (error) {
- throw new Error(`Failed to get branch ${branch}; ${util_1.inspect(error)}`);
+ keys = getKeys(obj);
+ } catch (e) {
+ return ret;
}
- }),
- has: (owner, repo, branch) => __awaiter(this, void 0, void 0, function* () {
- try {
- yield this.octokit.repos.getBranch({
- owner,
- repo,
- branch
- });
- return true;
+ for (var i = 0; i < keys.length; ++i) {
+ var key = keys[i];
+ if (visitedKeys[key]) continue;
+ visitedKeys[key] = true;
+ var desc = Object.getOwnPropertyDescriptor(obj, key);
+ if (desc != null && desc.get == null && desc.set == null) {
+ ret.push(key);
+ }
}
- catch (error) {
- const err = error;
- if (err.name === 'HttpError' && err.status === 404) {
- return false;
+ obj = es5.getPrototypeOf(obj);
+ }
+ return ret;
+ };
+ } else {
+ var hasProp = {}.hasOwnProperty;
+ return function(obj) {
+ if (isExcludedProto(obj)) return [];
+ var ret = [];
+
+ /*jshint forin:false */
+ enumeration: for (var key in obj) {
+ if (hasProp.call(obj, key)) {
+ ret.push(key);
+ } else {
+ for (var i = 0; i < excludedPrototypes.length; ++i) {
+ if (hasProp.call(excludedPrototypes[i], key)) {
+ continue enumeration;
+ }
}
- throw new Error(`Failed to check if branch ${branch} exist; ${util_1.inspect(err)}`);
+ ret.push(key);
}
- })
+ }
+ return ret;
};
}
- get pulls() {
- return {
- create: (owner, repo, head, base, title, body) => __awaiter(this, void 0, void 0, function* () {
- try {
- yield this.octokit.pulls.create({
- owner,
- repo,
- title,
- head,
- base,
- body
- });
- }
- catch (error) {
- const err = error;
- core.debug(util_1.inspect(err));
- if (err.name === 'HttpError' &&
- (err.message.includes('No commits between') ||
- err.message.includes('A pull request already exists for'))) {
- core.info(err.message);
- process.exit(0); // there is currently no neutral exit code
- }
- else {
- throw new Error(`Failed to create a pull request; ${util_1.inspect(error)}`);
- }
- }
- })
- };
- }
- get repos() {
- const getArchiveLink = (owner, repo, ref) => __awaiter(this, void 0, void 0, function* () {
- const response = yield this.octokit.repos.getArchiveLink({
- owner,
- repo,
- archive_format: IS_WINDOWS ? 'zipball' : 'tarball',
- ref
- });
- if (response.status !== 200) {
- throw new Error(`Unexpected response from GitHub API. Status: ${response.status}, Data: ${response.data}`);
- }
- return Buffer.from(response.data); // response.data is ArrayBuffer
- });
- return {
- get: (owner, repo
- // @ts-ignore
- ) => __awaiter(this, void 0, void 0, function* () {
- try {
- return yield this.octokit.repos.get({
- owner,
- repo
- });
- }
- catch (error) {
- throw new Error(`Failed to get repository; ${util_1.inspect(error)}`);
- }
- }),
- getArchiveLink,
- downloadRepository: (owner, repo, ref) => __awaiter(this, void 0, void 0, function* () {
- const repositoryPath = `${owner}_${repo}`;
- // Download the archive
- core.info('Downloading the archive');
- let archiveData = yield getArchiveLink(owner, repo, ref);
- // Write archive to disk
- core.info('Writing archive to disk');
- const uniqueId = uuid_1.v4();
- const archivePath = path_1.default.join(repositoryPath, `${uniqueId}.tar.gz`);
- yield fs_1.default.promises.writeFile(archivePath, archiveData);
- archiveData = Buffer.from(''); // Free memory
- // Extract archive
- core.info('Extracting the archive');
- const extractPath = path_1.default.join(repositoryPath, uniqueId);
- yield io.mkdirP(extractPath);
- if (IS_WINDOWS) {
- yield toolCache.extractZip(archivePath, extractPath);
- }
- else {
- yield toolCache.extractTar(archivePath, extractPath);
- }
- io.rmRF(archivePath);
- // Determine the path of the repository content. The archive contains
- // a top-level folder and the repository content is inside.
- const archiveFileNames = yield fs_1.default.promises.readdir(extractPath);
- assert_1.default.ok(archiveFileNames.length === 1, 'Expected exactly one directory inside archive');
- const archiveVersion = archiveFileNames[0]; // The top-level folder name includes the short SHA
- core.info(`Resolved version ${archiveVersion}`);
- const tempRepositoryPath = path_1.default.join(extractPath, archiveVersion);
- // Move the files
- for (const fileName of yield fs_1.default.promises.readdir(tempRepositoryPath)) {
- const sourcePath = path_1.default.join(tempRepositoryPath, fileName);
- const targetPath = path_1.default.join(repositoryPath, fileName);
- if (IS_WINDOWS) {
- yield io.cp(sourcePath, targetPath, { recursive: true }); // Copy on Windows (Windows Defender may have a lock)
- }
- else {
- yield io.mv(sourcePath, targetPath);
- }
- }
- io.rmRF(extractPath);
- })
- };
- }
-}
-exports.GithubManager = GithubManager;
-
-
-/***/ }),
-/* 148 */,
-/* 149 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-"use strict";
+})();
-const u = __webpack_require__(676).fromCallback
-const path = __webpack_require__(622)
-const fs = __webpack_require__(598)
-const mkdir = __webpack_require__(727)
+var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/;
+function isClass(fn) {
+ try {
+ if (typeof fn === "function") {
+ var keys = es5.names(fn.prototype);
-function createFile (file, callback) {
- function makeFile () {
- fs.writeFile(file, '', err => {
- if (err) return callback(err)
- callback()
- })
- }
+ var hasMethods = es5.isES5 && keys.length > 1;
+ var hasMethodsOtherThanConstructor = keys.length > 0 &&
+ !(keys.length === 1 && keys[0] === "constructor");
+ var hasThisAssignmentAndStaticMethods =
+ thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0;
- fs.stat(file, (err, stats) => { // eslint-disable-line handle-callback-err
- if (!err && stats.isFile()) return callback()
- const dir = path.dirname(file)
- fs.stat(dir, (err, stats) => {
- if (err) {
- // if the directory doesn't exist, make it
- if (err.code === 'ENOENT') {
- return mkdir.mkdirs(dir, err => {
- if (err) return callback(err)
- makeFile()
- })
+ if (hasMethods || hasMethodsOtherThanConstructor ||
+ hasThisAssignmentAndStaticMethods) {
+ return true;
+ }
}
- return callback(err)
- }
-
- if (stats.isDirectory()) makeFile()
- else {
- // parent is not a directory
- // This is just to cause an internal ENOTDIR error to be thrown
- fs.readdir(dir, err => {
- if (err) return callback(err)
- })
- }
- })
- })
+ return false;
+ } catch (e) {
+ return false;
+ }
}
-function createFileSync (file) {
- let stats
- try {
- stats = fs.statSync(file)
- } catch {}
- if (stats && stats.isFile()) return
-
- const dir = path.dirname(file)
- try {
- if (!fs.statSync(dir).isDirectory()) {
- // parent is not a directory
- // This is just to cause an internal ENOTDIR error to be thrown
- fs.readdirSync(dir)
+function toFastProperties(obj) {
+ /*jshint -W027,-W055,-W031*/
+ function FakeConstructor() {}
+ FakeConstructor.prototype = obj;
+ var receiver = new FakeConstructor();
+ function ic() {
+ return typeof receiver.foo;
}
- } catch (err) {
- // If the stat call above failed because the directory doesn't exist, create it
- if (err && err.code === 'ENOENT') mkdir.mkdirsSync(dir)
- else throw err
- }
-
- fs.writeFileSync(file, '')
+ ic();
+ ic();
+ return obj;
+ eval(obj);
}
-module.exports = {
- createFile: u(createFile),
- createFileSync
+var rident = /^[a-z$_][a-z$_0-9]*$/i;
+function isIdentifier(str) {
+ return rident.test(str);
}
+function filledRange(count, prefix, suffix) {
+ var ret = new Array(count);
+ for(var i = 0; i < count; ++i) {
+ ret[i] = prefix + i + suffix;
+ }
+ return ret;
+}
-/***/ }),
-/* 150 */,
-/* 151 */,
-/* 152 */,
-/* 153 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
-
-"use strict";
+function safeToString(obj) {
+ try {
+ return obj + "";
+ } catch (e) {
+ return "[no string representation]";
+ }
+}
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.setSshKnownHostsPath = exports.setSshKeyPath = exports.setTemplateRepositoryPath = exports.SshKnownHostsPath = exports.SshKeyPath = exports.RepositoryPath = exports.TemplateRepositoryPath = exports.IsPost = void 0;
-const coreCommand = __importStar(__webpack_require__(431));
-/**
- * Indicates whether the POST action is running.
- */
-exports.IsPost = !!process.env['STATE_isPost'];
-/**
- * The template repository path for the POST action. The value is empty during the MAIN action.
- */
-exports.TemplateRepositoryPath = process.env['STATE_template_repository_path'] || '';
-/**
- * The repository path for the POST action. The value is empty during the MAIN action.
- */
-exports.RepositoryPath = process.env['STATE_repositoryPath'] || '';
-/**
- * The SSH key path for the POST action. The value is empty during the MAIN action.
- */
-exports.SshKeyPath = process.env['STATE_template_ssh_key_path'] || '';
-/**
- * The SSH known hosts path for the POST action. The value is empty during the MAIN action.
- */
-exports.SshKnownHostsPath = process.env['STATE_template_ssh_known_hosts_path'] || '';
-/**
- * Save the repository path so the POST action can retrieve the value.
- *
- * @param {string} repositoryPath - Path to repository.
- */
-function setTemplateRepositoryPath(repositoryPath) {
- coreCommand.issueCommand('save-state', { name: 'template_repository_path' }, repositoryPath);
+function isError(obj) {
+ return obj instanceof Error ||
+ (obj !== null &&
+ typeof obj === "object" &&
+ typeof obj.message === "string" &&
+ typeof obj.name === "string");
}
-exports.setTemplateRepositoryPath = setTemplateRepositoryPath;
-/**
- * Save the SSH key path so the POST action can retrieve the value.
- *
- * @param {string} sshKeyPath - The ssh key path.
- */
-function setSshKeyPath(sshKeyPath) {
- coreCommand.issueCommand('save-state', { name: 'template_ssh_key_path' }, sshKeyPath);
+
+function markAsOriginatingFromRejection(e) {
+ try {
+ notEnumerableProp(e, "isOperational", true);
+ }
+ catch(ignore) {}
}
-exports.setSshKeyPath = setSshKeyPath;
-/**
- * Save the SSH known hosts path so the POST action can retrieve the value.
- *
- * @param {string} sshKnownHostsPath - The ssh known hosts path.
- */
-function setSshKnownHostsPath(sshKnownHostsPath) {
- coreCommand.issueCommand('save-state', { name: 'template_ssh_known_hosts_path' }, sshKnownHostsPath);
+
+function originatesFromRejection(e) {
+ if (e == null) return false;
+ return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) ||
+ e["isOperational"] === true);
}
-exports.setSshKnownHostsPath = setSshKnownHostsPath;
-// Publish a variable so that when the POST action runs, it can determine it should run the cleanup logic.
-// This is necessary since we don't have a separate entry point.
-if (!exports.IsPost) {
- coreCommand.issueCommand('save-state', { name: 'isPost' }, 'true');
+
+function canAttachTrace(obj) {
+ return isError(obj) && es5.propertyIsWritable(obj, "stack");
}
+var ensureErrorObject = (function() {
+ if (!("stack" in new Error())) {
+ return function(value) {
+ if (canAttachTrace(value)) return value;
+ try {throw new Error(safeToString(value));}
+ catch(err) {return err;}
+ };
+ } else {
+ return function(value) {
+ if (canAttachTrace(value)) return value;
+ return new Error(safeToString(value));
+ };
+ }
+})();
-/***/ }),
-/* 154 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
+function classString(obj) {
+ return {}.toString.call(obj);
+}
-"use strict";
+function copyDescriptors(from, to, filter) {
+ var keys = es5.names(from);
+ for (var i = 0; i < keys.length; ++i) {
+ var key = keys[i];
+ if (filter(key)) {
+ try {
+ es5.defineProperty(to, key, es5.getDescriptor(from, key));
+ } catch (ignore) {}
+ }
+ }
+}
+var asArray = function(v) {
+ if (es5.isArray(v)) {
+ return v;
+ }
+ return null;
+};
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.normalise = normalise;
+if (typeof Symbol !== "undefined" && Symbol.iterator) {
+ var ArrayFrom = typeof Array.from === "function" ? function(v) {
+ return Array.from(v);
+ } : function(v) {
+ var ret = [];
+ var it = v[Symbol.iterator]();
+ var itResult;
+ while (!((itResult = it.next()).done)) {
+ ret.push(itResult.value);
+ }
+ return ret;
+ };
-var _unitNormaliser = __webpack_require__(450);
+ asArray = function(v) {
+ if (es5.isArray(v)) {
+ return v;
+ } else if (v != null && typeof v[Symbol.iterator] === "function") {
+ return ArrayFrom(v);
+ }
+ return null;
+ };
+}
-var _unitNormaliser2 = _interopRequireDefault(_unitNormaliser);
+var isNode = typeof process !== "undefined" &&
+ classString(process).toLowerCase() === "[object process]";
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var hasEnvVariables = typeof process !== "undefined" &&
+ typeof process.env !== "undefined";
-var normaliser = new _unitNormaliser2.default();
-normaliser.addAlias('hours', 'hour');
-normaliser.addAlias('hours', 'h');
-normaliser.addAlias('days', 'd');
-normaliser.addAlias('days', 'day');
-normaliser.addAlias('minutes', 'm');
-normaliser.addAlias('minutes', 'minute');
-normaliser.addAlias('minutes', 'min');
-normaliser.addAlias('minutes', 'mins');
+function env(key) {
+ return hasEnvVariables ? process.env[key] : undefined;
+}
-function normalise(name) {
- return normaliser.normalise(name);
+function getNativePromise() {
+ if (typeof Promise === "function") {
+ try {
+ var promise = new Promise(function(){});
+ if (classString(promise) === "[object Promise]") {
+ return Promise;
+ }
+ } catch (e) {}
+ }
}
-/***/ }),
-/* 155 */,
-/* 156 */,
-/* 157 */,
-/* 158 */,
-/* 159 */
-/***/ (function(module) {
+var reflectHandler;
+function contextBind(ctx, cb) {
+ if (ctx === null ||
+ typeof cb !== "function" ||
+ cb === reflectHandler) {
+ return cb;
+ }
-module.exports = r => {
- const n = process.versions.node.split('.').map(x => parseInt(x, 10))
- r = r.split('.').map(x => parseInt(x, 10))
- return n[0] > r[0] || (n[0] === r[0] && (n[1] > r[1] || (n[1] === r[1] && n[2] >= r[2])))
-}
+ if (ctx.domain !== null) {
+ cb = ctx.domain.bind(cb);
+ }
+ var async = ctx.async;
+ if (async !== null) {
+ var old = cb;
+ cb = function() {
+ var $_len = arguments.length + 2;var args = new Array($_len); for(var $_i = 2; $_i < $_len ; ++$_i) {args[$_i] = arguments[$_i - 2];};
+ args[0] = old;
+ args[1] = this;
+ return async.runInAsyncScope.apply(async, args);
+ };
+ }
+ return cb;
+}
-/***/ }),
-/* 160 */,
-/* 161 */,
-/* 162 */,
-/* 163 */,
-/* 164 */,
-/* 165 */,
-/* 166 */,
-/* 167 */,
-/* 168 */
-/***/ (function(module) {
+var ret = {
+ setReflectHandler: function(fn) {
+ reflectHandler = fn;
+ },
+ isClass: isClass,
+ isIdentifier: isIdentifier,
+ inheritedDataKeys: inheritedDataKeys,
+ getDataPropertyOrDefault: getDataPropertyOrDefault,
+ thrower: thrower,
+ isArray: es5.isArray,
+ asArray: asArray,
+ notEnumerableProp: notEnumerableProp,
+ isPrimitive: isPrimitive,
+ isObject: isObject,
+ isError: isError,
+ canEvaluate: canEvaluate,
+ errorObj: errorObj,
+ tryCatch: tryCatch,
+ inherits: inherits,
+ withAppended: withAppended,
+ maybeWrapAsError: maybeWrapAsError,
+ toFastProperties: toFastProperties,
+ filledRange: filledRange,
+ toString: safeToString,
+ canAttachTrace: canAttachTrace,
+ ensureErrorObject: ensureErrorObject,
+ originatesFromRejection: originatesFromRejection,
+ markAsOriginatingFromRejection: markAsOriginatingFromRejection,
+ classString: classString,
+ copyDescriptors: copyDescriptors,
+ isNode: isNode,
+ hasEnvVariables: hasEnvVariables,
+ env: env,
+ global: globalObject,
+ getNativePromise: getNativePromise,
+ contextBind: contextBind
+};
+ret.isRecentNode = ret.isNode && (function() {
+ var version;
+ if (process.versions && process.versions.node) {
+ version = process.versions.node.split(".").map(Number);
+ } else if (process.version) {
+ version = process.version.split(".").map(Number);
+ }
+ return (version[0] === 0 && version[1] > 10) || (version[0] > 0);
+})();
+ret.nodeSupportsAsyncResource = ret.isNode && (function() {
+ var supportsAsync = false;
+ try {
+ var res = __webpack_require__(303).AsyncResource;
+ supportsAsync = typeof res.prototype.runInAsyncScope === "function";
+ } catch (e) {
+ supportsAsync = false;
+ }
+ return supportsAsync;
+})();
-"use strict";
+if (ret.isNode) ret.toFastProperties(process);
-const alias = ['stdin', 'stdout', 'stderr'];
+try {throw new Error(); } catch (e) {ret.lastLineError = e;}
+module.exports = ret;
-const hasAlias = opts => alias.some(x => Boolean(opts[x]));
-module.exports = opts => {
- if (!opts) {
- return null;
- }
+/***/ }),
- if (opts.stdio && hasAlias(opts)) {
- throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${alias.map(x => `\`${x}\``).join(', ')}`);
- }
+/***/ 250:
+/***/ (function(module, __unusedexports, __webpack_require__) {
- if (typeof opts.stdio === 'string') {
- return opts.stdio;
- }
+var constants = __webpack_require__(619)
- const stdio = opts.stdio || [];
+var origCwd = process.cwd
+var cwd = null
- if (!Array.isArray(stdio)) {
- throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof stdio}\``);
- }
+var platform = process.env.GRACEFUL_FS_PLATFORM || process.platform
- const result = [];
- const len = Math.max(stdio.length, alias.length);
+process.cwd = function() {
+ if (!cwd)
+ cwd = origCwd.call(process)
+ return cwd
+}
+try {
+ process.cwd()
+} catch (er) {}
- for (let i = 0; i < len; i++) {
- let value = null;
+// This check is needed until node.js 12 is required
+if (typeof process.chdir === 'function') {
+ var chdir = process.chdir
+ process.chdir = function (d) {
+ cwd = null
+ chdir.call(process, d)
+ }
+ if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)
+}
- if (stdio[i] !== undefined) {
- value = stdio[i];
- } else if (opts[alias[i]] !== undefined) {
- value = opts[alias[i]];
- }
+module.exports = patch
- result[i] = value;
- }
+function patch (fs) {
+ // (re-)implement some things that are known busted or missing.
- return result;
-};
+ // lchmod, broken prior to 0.6.2
+ // back-port the fix here.
+ if (constants.hasOwnProperty('O_SYMLINK') &&
+ process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
+ patchLchmod(fs)
+ }
+ // lutimes implementation, or no-op
+ if (!fs.lutimes) {
+ patchLutimes(fs)
+ }
-/***/ }),
-/* 169 */,
-/* 170 */,
-/* 171 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+ // https://github.com/isaacs/node-graceful-fs/issues/4
+ // Chown should not fail on einval or eperm if non-root.
+ // It should not fail on enosys ever, as this just indicates
+ // that a fs doesn't support the intended operation.
-"use strict";
+ fs.chown = chownFix(fs.chown)
+ fs.fchown = chownFix(fs.fchown)
+ fs.lchown = chownFix(fs.lchown)
+ fs.chmod = chmodFix(fs.chmod)
+ fs.fchmod = chmodFix(fs.fchmod)
+ fs.lchmod = chmodFix(fs.lchmod)
-const u = __webpack_require__(676).fromPromise
-const jsonFile = __webpack_require__(469)
+ fs.chownSync = chownFixSync(fs.chownSync)
+ fs.fchownSync = chownFixSync(fs.fchownSync)
+ fs.lchownSync = chownFixSync(fs.lchownSync)
-jsonFile.outputJson = u(__webpack_require__(695))
-jsonFile.outputJsonSync = __webpack_require__(628)
-// aliases
-jsonFile.outputJSON = jsonFile.outputJson
-jsonFile.outputJSONSync = jsonFile.outputJsonSync
-jsonFile.writeJSON = jsonFile.writeJson
-jsonFile.writeJSONSync = jsonFile.writeJsonSync
-jsonFile.readJSON = jsonFile.readJson
-jsonFile.readJSONSync = jsonFile.readJsonSync
-
-module.exports = jsonFile
-
-
-/***/ }),
-/* 172 */,
-/* 173 */,
-/* 174 */,
-/* 175 */,
-/* 176 */,
-/* 177 */,
-/* 178 */,
-/* 179 */,
-/* 180 */,
-/* 181 */,
-/* 182 */,
-/* 183 */,
-/* 184 */,
-/* 185 */,
-/* 186 */,
-/* 187 */,
-/* 188 */,
-/* 189 */,
-/* 190 */,
-/* 191 */,
-/* 192 */,
-/* 193 */,
-/* 194 */,
-/* 195 */,
-/* 196 */,
-/* 197 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-module.exports = isexe
-isexe.sync = sync
+ fs.chmodSync = chmodFixSync(fs.chmodSync)
+ fs.fchmodSync = chmodFixSync(fs.fchmodSync)
+ fs.lchmodSync = chmodFixSync(fs.lchmodSync)
-var fs = __webpack_require__(747)
+ fs.stat = statFix(fs.stat)
+ fs.fstat = statFix(fs.fstat)
+ fs.lstat = statFix(fs.lstat)
-function isexe (path, options, cb) {
- fs.stat(path, function (er, stat) {
- cb(er, er ? false : checkStat(stat, options))
- })
-}
+ fs.statSync = statFixSync(fs.statSync)
+ fs.fstatSync = statFixSync(fs.fstatSync)
+ fs.lstatSync = statFixSync(fs.lstatSync)
-function sync (path, options) {
- return checkStat(fs.statSync(path), options)
-}
+ // if lchmod/lchown do not exist, then make them no-ops
+ if (!fs.lchmod) {
+ fs.lchmod = function (path, mode, cb) {
+ if (cb) process.nextTick(cb)
+ }
+ fs.lchmodSync = function () {}
+ }
+ if (!fs.lchown) {
+ fs.lchown = function (path, uid, gid, cb) {
+ if (cb) process.nextTick(cb)
+ }
+ fs.lchownSync = function () {}
+ }
-function checkStat (stat, options) {
- return stat.isFile() && checkMode(stat, options)
-}
+ // on Windows, A/V software can lock the directory, causing this
+ // to fail with an EACCES or EPERM if the directory contains newly
+ // created files. Try again on failure, for up to 60 seconds.
-function checkMode (stat, options) {
- var mod = stat.mode
- var uid = stat.uid
- var gid = stat.gid
+ // Set the timeout this long because some Windows Anti-Virus, such as Parity
+ // bit9, may lock files for up to a minute, causing npm package install
+ // failures. Also, take care to yield the scheduler. Windows scheduling gives
+ // CPU to a busy looping process, which can cause the program causing the lock
+ // contention to be starved of CPU by node, so the contention doesn't resolve.
+ if (platform === "win32") {
+ fs.rename = (function (fs$rename) { return function (from, to, cb) {
+ var start = Date.now()
+ var backoff = 0;
+ fs$rename(from, to, function CB (er) {
+ if (er
+ && (er.code === "EACCES" || er.code === "EPERM")
+ && Date.now() - start < 60000) {
+ setTimeout(function() {
+ fs.stat(to, function (stater, st) {
+ if (stater && stater.code === "ENOENT")
+ fs$rename(from, to, CB);
+ else
+ cb(er)
+ })
+ }, backoff)
+ if (backoff < 100)
+ backoff += 10;
+ return;
+ }
+ if (cb) cb(er)
+ })
+ }})(fs.rename)
+ }
- var myUid = options.uid !== undefined ?
- options.uid : process.getuid && process.getuid()
- var myGid = options.gid !== undefined ?
- options.gid : process.getgid && process.getgid()
+ // if read() returns EAGAIN, then just try it again.
+ fs.read = (function (fs$read) {
+ function read (fd, buffer, offset, length, position, callback_) {
+ var callback
+ if (callback_ && typeof callback_ === 'function') {
+ var eagCounter = 0
+ callback = function (er, _, __) {
+ if (er && er.code === 'EAGAIN' && eagCounter < 10) {
+ eagCounter ++
+ return fs$read.call(fs, fd, buffer, offset, length, position, callback)
+ }
+ callback_.apply(this, arguments)
+ }
+ }
+ return fs$read.call(fs, fd, buffer, offset, length, position, callback)
+ }
- var u = parseInt('100', 8)
- var g = parseInt('010', 8)
- var o = parseInt('001', 8)
- var ug = u | g
+ // This ensures `util.promisify` works as it does for native `fs.read`.
+ if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)
+ return read
+ })(fs.read)
- var ret = (mod & o) ||
- (mod & g) && gid === myGid ||
- (mod & u) && uid === myUid ||
- (mod & ug) && myUid === 0
+ fs.readSync = (function (fs$readSync) { return function (fd, buffer, offset, length, position) {
+ var eagCounter = 0
+ while (true) {
+ try {
+ return fs$readSync.call(fs, fd, buffer, offset, length, position)
+ } catch (er) {
+ if (er.code === 'EAGAIN' && eagCounter < 10) {
+ eagCounter ++
+ continue
+ }
+ throw er
+ }
+ }
+ }})(fs.readSync)
- return ret
-}
+ function patchLchmod (fs) {
+ fs.lchmod = function (path, mode, callback) {
+ fs.open( path
+ , constants.O_WRONLY | constants.O_SYMLINK
+ , mode
+ , function (err, fd) {
+ if (err) {
+ if (callback) callback(err)
+ return
+ }
+ // prefer to return the chmod error, if one occurs,
+ // but still try to close, and report closing errors if they occur.
+ fs.fchmod(fd, mode, function (err) {
+ fs.close(fd, function(err2) {
+ if (callback) callback(err || err2)
+ })
+ })
+ })
+ }
+ fs.lchmodSync = function (path, mode) {
+ var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)
-/***/ }),
-/* 198 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
+ // prefer to return the chmod error, if one occurs,
+ // but still try to close, and report closing errors if they occur.
+ var threw = true
+ var ret
+ try {
+ ret = fs.fchmodSync(fd, mode)
+ threw = false
+ } finally {
+ if (threw) {
+ try {
+ fs.closeSync(fd)
+ } catch (er) {}
+ } else {
+ fs.closeSync(fd)
+ }
+ }
+ return ret
+ }
+ }
-"use strict";
+ function patchLutimes (fs) {
+ if (constants.hasOwnProperty("O_SYMLINK")) {
+ fs.lutimes = function (path, at, mt, cb) {
+ fs.open(path, constants.O_SYMLINK, function (er, fd) {
+ if (er) {
+ if (cb) cb(er)
+ return
+ }
+ fs.futimes(fd, at, mt, function (er) {
+ fs.close(fd, function (er2) {
+ if (cb) cb(er || er2)
+ })
+ })
+ })
+ }
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const path_1 = __importDefault(__webpack_require__(622));
-const fs_extra_1 = __importDefault(__webpack_require__(226));
-const core = __importStar(__webpack_require__(470));
-const coreCommand = __importStar(__webpack_require__(431));
-const io = __importStar(__webpack_require__(1));
-const util_1 = __webpack_require__(669);
-const filehound_1 = __importDefault(__webpack_require__(687));
-const settings_1 = __webpack_require__(648);
-const github_action_context_1 = __webpack_require__(821);
-const gitSourceProvider = __importStar(__webpack_require__(293));
-const github_manager_1 = __webpack_require__(147);
-const git_command_manager_1 = __webpack_require__(289);
-const octokit_1 = __webpack_require__(448);
-const stateHelper = __importStar(__webpack_require__(153));
-const refHelper = __importStar(__webpack_require__(227));
-const github_action_cleanup_1 = __webpack_require__(495);
-const USER_EMAIL = 'user.email';
-const USER_NAME = 'user.name';
-const filehound = filehound_1.default.create();
-function run() {
- return __awaiter(this, void 0, void 0, function* () {
+ fs.lutimesSync = function (path, at, mt) {
+ var fd = fs.openSync(path, constants.O_SYMLINK)
+ var ret
+ var threw = true
try {
- const context = new github_action_context_1.GithubActionContext();
- let settings = new settings_1.Settings(context);
- const githubManager = new github_manager_1.GithubManager(octokit_1.octokit(settings));
- settings = yield prepareTemplateSettings(settings, githubManager);
- core.debug(`Used settings: ${util_1.inspect(settings)}`);
+ ret = fs.futimesSync(fd, at, mt)
+ threw = false
+ } finally {
+ if (threw) {
try {
- // Register problem matcher
- coreCommand.issueCommand('add-matcher', {}, path_1.default.join(__dirname, 'problem-matcher.json'));
- if (!(yield githubManager.branch.has(settings.repositoryOwner, settings.repositoryName, settings.syncBranchName))) {
- const baseBranch = yield githubManager.branch.get(settings.repositoryOwner, settings.repositoryName, settings.ref.replace(/^refs\/heads\//, ''));
- yield githubManager.branch.create(settings.repositoryOwner, settings.repositoryName, baseBranch.data.object.sha, settings.syncBranchName);
- }
- const mainGitCommandManager = yield git_command_manager_1.createCommandManager(settings.repositoryPath);
- const ref = `refs/heads/${settings.syncBranchName}`;
- yield mainGitCommandManager.fetch(0, refHelper.getRefSpec(ref));
- const checkoutInfo = yield refHelper.getCheckoutInfo(mainGitCommandManager, ref);
- yield mainGitCommandManager.checkout(checkoutInfo.ref, checkoutInfo.startPoint);
- // download the template repo
- yield gitSourceProvider.getSource(githubManager, settings, settings.templateRepositoryUrl, settings.templateRepositoryPath, settings.templateRepositoryRef);
- // find all files
- const files = filehound
- .path(settings.templateRepositoryPath)
- .discard(settings.ignoreList)
- .findSync();
- core.debug(`List of found files ${util_1.inspect(files)}`);
- for (const file of files) {
- fs_extra_1.default.copySync(file, path_1.default.join(settings.githubWorkspacePath, file.replace(settings.templateRepositoryPath, '')), {
- overwrite: true
- });
- }
- yield io.rmRF(settings.templateRepositoryPath);
- try {
- core.startGroup('Setting up git user and email');
- yield mainGitCommandManager.config(USER_EMAIL, settings.authorEmail, true);
- yield mainGitCommandManager.config(USER_NAME, settings.authorName, true);
- core.endGroup();
- core.startGroup('Adding all changed files to main repository');
- yield mainGitCommandManager.addAll();
- core.endGroup();
- core.startGroup('Checking if changes exist that needs to applied');
- if ((yield mainGitCommandManager.status(['--porcelain'])) === '') {
- core.setOutput('Git status', `No changes found for ${settings.templateRepositoryUrl}`);
- process.exit(0); // there is currently no neutral exit code
- }
- core.endGroup();
- core.startGroup('Creating a commit');
- yield mainGitCommandManager.commit(settings.messageHead);
- core.endGroup();
- core.startGroup('Pushing new commit');
- yield mainGitCommandManager.push(settings.syncBranchName);
- core.endGroup();
- // Dump some info about the checked out commit
- yield mainGitCommandManager.log1();
- }
- finally {
- yield mainGitCommandManager.tryConfigUnset(USER_EMAIL, true);
- yield mainGitCommandManager.tryConfigUnset(USER_NAME, true);
- }
- core.startGroup('Creating Pull request');
- yield githubManager.pulls.create(settings.repositoryOwner, settings.repositoryName, settings.syncBranchName, settings.ref, settings.messageHead, settings.messageBody);
- core.endGroup();
- }
- finally {
- // Unregister problem matcher
- coreCommand.issueCommand('remove-matcher', { owner: 'checkout-git' }, '');
- }
- }
- catch (error) {
- core.setFailed(error.message);
- }
- });
-}
-function prepareTemplateSettings(settings, githubManager) {
- return __awaiter(this, void 0, void 0, function* () {
- let template = core.getInput('template_repository', { required: false });
- if (!template) {
- const repoData = yield githubManager.repos.get(settings.repositoryOwner, settings.repositoryName);
- if (repoData.data.template_repository !== undefined) {
- template = repoData.data.template_repository.full_name;
- }
- else {
- core.setFailed('Template repository not found, please provide "template_repository" key, that you want to check');
- process.exit(1); // there is currently no neutral exit code
- }
- }
- else {
- const [templateRepositoryOwner, templateRepositoryName] = template.split('/');
- const repoData = yield githubManager.repos.get(templateRepositoryOwner, templateRepositoryName);
- if (repoData.data.template_repository === undefined) {
- core.setFailed('You need to provide a github template repository for "template_repository"');
- process.exit(1); // there is currently no neutral exit code
- }
- }
- settings.templateRepository = template;
- const [templateRepositoryOwner, templateRepositoryName] = template.split('/');
- settings.templateRepositoryPath = path_1.default.resolve(settings.githubWorkspacePath, `${encodeURIComponent(templateRepositoryOwner)}/${encodeURIComponent(templateRepositoryName)}`);
- if (!(settings.templateRepositoryPath + path_1.default.sep).startsWith(settings.githubWorkspacePath + path_1.default.sep)) {
- throw new Error(`Repository path '${settings.templateRepositoryPath}' is not under '${settings.githubWorkspacePath}'`);
- }
- if (settings.sshKey) {
- settings.templateRepositoryUrl = `git@${settings.serverUrl.hostname}:${settings.templateRepository}.git`;
- }
- else {
- // "origin" is SCHEME://HOSTNAME[:PORT]
- settings.templateRepositoryUrl = `${settings.serverUrl.origin}/${settings.templateRepository}`;
+ fs.closeSync(fd)
+ } catch (er) {}
+ } else {
+ fs.closeSync(fd)
+ }
}
- return settings;
- });
-}
-if (!stateHelper.IsPost) {
- run();
-}
-else {
- github_action_cleanup_1.cleanup(stateHelper.TemplateRepositoryPath);
-}
+ return ret
+ }
+ } else {
+ fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }
+ fs.lutimesSync = function () {}
+ }
+ }
-/***/ }),
-/* 199 */,
-/* 200 */,
-/* 201 */,
-/* 202 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+ function chmodFix (orig) {
+ if (!orig) return orig
+ return function (target, mode, cb) {
+ return orig.call(fs, target, mode, function (er) {
+ if (chownErOk(er)) er = null
+ if (cb) cb.apply(this, arguments)
+ })
+ }
+ }
-module.exports = __webpack_require__(441);
+ function chmodFixSync (orig) {
+ if (!orig) return orig
+ return function (target, mode) {
+ try {
+ return orig.call(fs, target, mode)
+ } catch (er) {
+ if (!chownErOk(er)) throw er
+ }
+ }
+ }
-/***/ }),
-/* 203 */,
-/* 204 */,
-/* 205 */,
-/* 206 */,
-/* 207 */
-/***/ (function(module) {
+ function chownFix (orig) {
+ if (!orig) return orig
+ return function (target, uid, gid, cb) {
+ return orig.call(fs, target, uid, gid, function (er) {
+ if (chownErOk(er)) er = null
+ if (cb) cb.apply(this, arguments)
+ })
+ }
+ }
-"use strict";
+ function chownFixSync (orig) {
+ if (!orig) return orig
+ return function (target, uid, gid) {
+ try {
+ return orig.call(fs, target, uid, gid)
+ } catch (er) {
+ if (!chownErOk(er)) throw er
+ }
+ }
+ }
+ function statFix (orig) {
+ if (!orig) return orig
+ // Older versions of Node erroneously returned signed integers for
+ // uid + gid.
+ return function (target, options, cb) {
+ if (typeof options === 'function') {
+ cb = options
+ options = null
+ }
+ function callback (er, stats) {
+ if (stats) {
+ if (stats.uid < 0) stats.uid += 0x100000000
+ if (stats.gid < 0) stats.gid += 0x100000000
+ }
+ if (cb) cb.apply(this, arguments)
+ }
+ return options ? orig.call(fs, target, options, callback)
+ : orig.call(fs, target, callback)
+ }
+ }
-var isStream = module.exports = function (stream) {
- return stream !== null && typeof stream === 'object' && typeof stream.pipe === 'function';
-};
+ function statFixSync (orig) {
+ if (!orig) return orig
+ // Older versions of Node erroneously returned signed integers for
+ // uid + gid.
+ return function (target, options) {
+ var stats = options ? orig.call(fs, target, options)
+ : orig.call(fs, target)
+ if (stats.uid < 0) stats.uid += 0x100000000
+ if (stats.gid < 0) stats.gid += 0x100000000
+ return stats;
+ }
+ }
-isStream.writable = function (stream) {
- return isStream(stream) && stream.writable !== false && typeof stream._write === 'function' && typeof stream._writableState === 'object';
-};
+ // ENOSYS means that the fs doesn't support the op. Just ignore
+ // that, because it doesn't matter.
+ //
+ // if there's no getuid, or if getuid() is something other
+ // than 0, and the error is EINVAL or EPERM, then just ignore
+ // it.
+ //
+ // This specific case is a silent failure in cp, install, tar,
+ // and most other unix tools that manage permissions.
+ //
+ // When running as root, or if other types of errors are
+ // encountered, then it's strict.
+ function chownErOk (er) {
+ if (!er)
+ return true
-isStream.readable = function (stream) {
- return isStream(stream) && stream.readable !== false && typeof stream._read === 'function' && typeof stream._readableState === 'object';
-};
+ if (er.code === "ENOSYS")
+ return true
-isStream.duplex = function (stream) {
- return isStream.writable(stream) && isStream.readable(stream);
-};
+ var nonroot = !process.getuid || process.getuid() !== 0
+ if (nonroot) {
+ if (er.code === "EINVAL" || er.code === "EPERM")
+ return true
+ }
-isStream.transform = function (stream) {
- return isStream.duplex(stream) && typeof stream._transform === 'function' && typeof stream._transformState === 'object';
-};
+ return false
+ }
+}
/***/ }),
-/* 208 */,
-/* 209 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
-"use strict";
+/***/ 253:
+/***/ (function(module, __unusedexports, __webpack_require__) {
+"use strict";
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.default = void 0;
+module.exports = function(NEXT_FILTER) {
+var util = __webpack_require__(248);
+var getKeys = __webpack_require__(883).keys;
+var tryCatch = util.tryCatch;
+var errorObj = util.errorObj;
-var _v = _interopRequireDefault(__webpack_require__(212));
+function catchFilter(instances, cb, promise) {
+ return function(e) {
+ var boundTo = promise._boundValue();
+ predicateLoop: for (var i = 0; i < instances.length; ++i) {
+ var item = instances[i];
-var _md = _interopRequireDefault(__webpack_require__(803));
+ if (item === Error ||
+ (item != null && item.prototype instanceof Error)) {
+ if (e instanceof item) {
+ return tryCatch(cb).call(boundTo, e);
+ }
+ } else if (typeof item === "function") {
+ var matchesPredicate = tryCatch(item).call(boundTo, e);
+ if (matchesPredicate === errorObj) {
+ return matchesPredicate;
+ } else if (matchesPredicate) {
+ return tryCatch(cb).call(boundTo, e);
+ }
+ } else if (util.isObject(e)) {
+ var keys = getKeys(item);
+ for (var j = 0; j < keys.length; ++j) {
+ var key = keys[j];
+ if (item[key] != e[key]) {
+ continue predicateLoop;
+ }
+ }
+ return tryCatch(cb).call(boundTo, e);
+ }
+ }
+ return NEXT_FILTER;
+ };
+}
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+return catchFilter;
+};
-const v3 = (0, _v.default)('v3', 0x30, _md.default);
-var _default = v3;
-exports.default = _default;
/***/ }),
-/* 210 */,
-/* 211 */
-/***/ (function(module) {
-
-module.exports = require("https");
-/***/ }),
-/* 212 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
+/***/ 272:
+/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
+module.exports = function(Promise, Context,
+ enableAsyncHooks, disableAsyncHooks) {
+var async = Promise._async;
+var Warning = __webpack_require__(607).Warning;
+var util = __webpack_require__(248);
+var es5 = __webpack_require__(883);
+var canAttachTrace = util.canAttachTrace;
+var unhandledRejectionHandled;
+var possiblyUnhandledRejection;
+var bluebirdFramePattern =
+ /[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/;
+var nodeFramePattern = /\((?:timers\.js):\d+:\d+\)/;
+var parseLinePattern = /[\/<\(](.+?):(\d+):(\d+)\)?\s*$/;
+var stackFramePattern = null;
+var formatStack = null;
+var indentStackFrames = false;
+var printWarning;
+var debugging = !!(util.env("BLUEBIRD_DEBUG") != 0 &&
+ ( false ||
+ util.env("BLUEBIRD_DEBUG") ||
+ util.env("NODE_ENV") === "development"));
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.default = _default;
-exports.URL = exports.DNS = void 0;
-
-var _bytesToUuid = _interopRequireDefault(__webpack_require__(390));
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function uuidToBytes(uuid) {
- // Note: We assume we're being passed a valid uuid string
- var bytes = [];
- uuid.replace(/[a-fA-F0-9]{2}/g, function (hex) {
- bytes.push(parseInt(hex, 16));
- });
- return bytes;
-}
-
-function stringToBytes(str) {
- str = unescape(encodeURIComponent(str)); // UTF8 escape
-
- var bytes = new Array(str.length);
-
- for (var i = 0; i < str.length; i++) {
- bytes[i] = str.charCodeAt(i);
- }
+var warnings = !!(util.env("BLUEBIRD_WARNINGS") != 0 &&
+ (debugging || util.env("BLUEBIRD_WARNINGS")));
- return bytes;
-}
+var longStackTraces = !!(util.env("BLUEBIRD_LONG_STACK_TRACES") != 0 &&
+ (debugging || util.env("BLUEBIRD_LONG_STACK_TRACES")));
-const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
-exports.DNS = DNS;
-const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';
-exports.URL = URL;
+var wForgottenReturn = util.env("BLUEBIRD_W_FORGOTTEN_RETURN") != 0 &&
+ (warnings || !!util.env("BLUEBIRD_W_FORGOTTEN_RETURN"));
-function _default(name, version, hashfunc) {
- var generateUUID = function (value, namespace, buf, offset) {
- var off = buf && offset || 0;
- if (typeof value == 'string') value = stringToBytes(value);
- if (typeof namespace == 'string') namespace = uuidToBytes(namespace);
- if (!Array.isArray(value)) throw TypeError('value must be an array of bytes');
- if (!Array.isArray(namespace) || namespace.length !== 16) throw TypeError('namespace must be uuid string or an Array of 16 byte values'); // Per 4.3
-
- var bytes = hashfunc(namespace.concat(value));
- bytes[6] = bytes[6] & 0x0f | version;
- bytes[8] = bytes[8] & 0x3f | 0x80;
+var deferUnhandledRejectionCheck;
+(function() {
+ var promises = [];
- if (buf) {
- for (var idx = 0; idx < 16; ++idx) {
- buf[off + idx] = bytes[idx];
- }
+ function unhandledRejectionCheck() {
+ for (var i = 0; i < promises.length; ++i) {
+ promises[i]._notifyUnhandledRejection();
+ }
+ unhandledRejectionClear();
}
- return buf || (0, _bytesToUuid.default)(bytes);
- }; // Function#name is not settable on some platforms (#270)
+ function unhandledRejectionClear() {
+ promises.length = 0;
+ }
+ deferUnhandledRejectionCheck = function(promise) {
+ promises.push(promise);
+ setTimeout(unhandledRejectionCheck, 1);
+ };
- try {
- generateUUID.name = name;
- } catch (err) {} // For CommonJS default export support
+ es5.defineProperty(Promise, "_unhandledRejectionCheck", {
+ value: unhandledRejectionCheck
+ });
+ es5.defineProperty(Promise, "_unhandledRejectionClear", {
+ value: unhandledRejectionClear
+ });
+})();
+Promise.prototype.suppressUnhandledRejections = function() {
+ var target = this._target();
+ target._bitField = ((target._bitField & (~1048576)) |
+ 524288);
+};
- generateUUID.DNS = DNS;
- generateUUID.URL = URL;
- return generateUUID;
-}
+Promise.prototype._ensurePossibleRejectionHandled = function () {
+ if ((this._bitField & 524288) !== 0) return;
+ this._setRejectionIsUnhandled();
+ deferUnhandledRejectionCheck(this);
+};
-/***/ }),
-/* 213 */,
-/* 214 */,
-/* 215 */,
-/* 216 */,
-/* 217 */,
-/* 218 */,
-/* 219 */,
-/* 220 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+Promise.prototype._notifyUnhandledRejectionIsHandled = function () {
+ fireRejectionEvent("rejectionHandled",
+ unhandledRejectionHandled, undefined, this);
+};
-"use strict";
+Promise.prototype._setReturnedNonUndefined = function() {
+ this._bitField = this._bitField | 268435456;
+};
-module.exports = function(Promise,
- PromiseArray,
- apiRejection,
- tryConvertToPromise,
- INTERNAL,
- debug) {
-var util = __webpack_require__(248);
-var tryCatch = util.tryCatch;
-var errorObj = util.errorObj;
-var async = Promise._async;
+Promise.prototype._returnedNonUndefined = function() {
+ return (this._bitField & 268435456) !== 0;
+};
-function MappingPromiseArray(promises, fn, limit, _filter) {
- this.constructor$(promises);
- this._promise._captureStackTrace();
- var context = Promise._getContext();
- this._callback = util.contextBind(context, fn);
- this._preservedValues = _filter === INTERNAL
- ? new Array(this.length())
- : null;
- this._limit = limit;
- this._inFlight = 0;
- this._queue = [];
- async.invoke(this._asyncInit, this, undefined);
- if (util.isArray(promises)) {
- for (var i = 0; i < promises.length; ++i) {
- var maybePromise = promises[i];
- if (maybePromise instanceof Promise) {
- maybePromise.suppressUnhandledRejections();
- }
- }
+Promise.prototype._notifyUnhandledRejection = function () {
+ if (this._isRejectionUnhandled()) {
+ var reason = this._settledValue();
+ this._setUnhandledRejectionIsNotified();
+ fireRejectionEvent("unhandledRejection",
+ possiblyUnhandledRejection, reason, this);
}
-}
-util.inherits(MappingPromiseArray, PromiseArray);
-
-MappingPromiseArray.prototype._asyncInit = function() {
- this._init$(undefined, -2);
};
-MappingPromiseArray.prototype._init = function () {};
+Promise.prototype._setUnhandledRejectionIsNotified = function () {
+ this._bitField = this._bitField | 262144;
+};
-MappingPromiseArray.prototype._promiseFulfilled = function (value, index) {
- var values = this._values;
- var length = this.length();
- var preservedValues = this._preservedValues;
- var limit = this._limit;
+Promise.prototype._unsetUnhandledRejectionIsNotified = function () {
+ this._bitField = this._bitField & (~262144);
+};
- if (index < 0) {
- index = (index * -1) - 1;
- values[index] = value;
- if (limit >= 1) {
- this._inFlight--;
- this._drainQueue();
- if (this._isResolved()) return true;
- }
- } else {
- if (limit >= 1 && this._inFlight >= limit) {
- values[index] = value;
- this._queue.push(index);
- return false;
- }
- if (preservedValues !== null) preservedValues[index] = value;
+Promise.prototype._isUnhandledRejectionNotified = function () {
+ return (this._bitField & 262144) > 0;
+};
- var promise = this._promise;
- var callback = this._callback;
- var receiver = promise._boundValue();
- promise._pushContext();
- var ret = tryCatch(callback).call(receiver, value, index, length);
- var promiseCreated = promise._popContext();
- debug.checkForgottenReturns(
- ret,
- promiseCreated,
- preservedValues !== null ? "Promise.filter" : "Promise.map",
- promise
- );
- if (ret === errorObj) {
- this._reject(ret.e);
- return true;
- }
+Promise.prototype._setRejectionIsUnhandled = function () {
+ this._bitField = this._bitField | 1048576;
+};
- var maybePromise = tryConvertToPromise(ret, this._promise);
- if (maybePromise instanceof Promise) {
- maybePromise = maybePromise._target();
- var bitField = maybePromise._bitField;
- ;
- if (((bitField & 50397184) === 0)) {
- if (limit >= 1) this._inFlight++;
- values[index] = maybePromise;
- maybePromise._proxy(this, (index + 1) * -1);
- return false;
- } else if (((bitField & 33554432) !== 0)) {
- ret = maybePromise._value();
- } else if (((bitField & 16777216) !== 0)) {
- this._reject(maybePromise._reason());
- return true;
- } else {
- this._cancel();
- return true;
- }
- }
- values[index] = ret;
- }
- var totalResolved = ++this._totalResolved;
- if (totalResolved >= length) {
- if (preservedValues !== null) {
- this._filter(values, preservedValues);
- } else {
- this._resolve(values);
- }
- return true;
+Promise.prototype._unsetRejectionIsUnhandled = function () {
+ this._bitField = this._bitField & (~1048576);
+ if (this._isUnhandledRejectionNotified()) {
+ this._unsetUnhandledRejectionIsNotified();
+ this._notifyUnhandledRejectionIsHandled();
}
- return false;
};
-MappingPromiseArray.prototype._drainQueue = function () {
- var queue = this._queue;
- var limit = this._limit;
- var values = this._values;
- while (queue.length > 0 && this._inFlight < limit) {
- if (this._isResolved()) return;
- var index = queue.pop();
- this._promiseFulfilled(values[index], index);
- }
+Promise.prototype._isRejectionUnhandled = function () {
+ return (this._bitField & 1048576) > 0;
};
-MappingPromiseArray.prototype._filter = function (booleans, values) {
- var len = values.length;
- var ret = new Array(len);
- var j = 0;
- for (var i = 0; i < len; ++i) {
- if (booleans[i]) ret[j++] = values[i];
- }
- ret.length = j;
- this._resolve(ret);
+Promise.prototype._warn = function(message, shouldUseOwnTrace, promise) {
+ return warn(message, shouldUseOwnTrace, promise || this);
};
-MappingPromiseArray.prototype.preservedValues = function () {
- return this._preservedValues;
+Promise.onPossiblyUnhandledRejection = function (fn) {
+ var context = Promise._getContext();
+ possiblyUnhandledRejection = util.contextBind(context, fn);
};
-function map(promises, fn, options, _filter) {
- if (typeof fn !== "function") {
- return apiRejection("expecting a function but got " + util.classString(fn));
- }
+Promise.onUnhandledRejectionHandled = function (fn) {
+ var context = Promise._getContext();
+ unhandledRejectionHandled = util.contextBind(context, fn);
+};
- var limit = 0;
- if (options !== undefined) {
- if (typeof options === "object" && options !== null) {
- if (typeof options.concurrency !== "number") {
- return Promise.reject(
- new TypeError("'concurrency' must be a number but it is " +
- util.classString(options.concurrency)));
+var disableLongStackTraces = function() {};
+Promise.longStackTraces = function () {
+ if (async.haveItemsQueued() && !config.longStackTraces) {
+ throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a");
+ }
+ if (!config.longStackTraces && longStackTracesIsSupported()) {
+ var Promise_captureStackTrace = Promise.prototype._captureStackTrace;
+ var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace;
+ var Promise_dereferenceTrace = Promise.prototype._dereferenceTrace;
+ config.longStackTraces = true;
+ disableLongStackTraces = function() {
+ if (async.haveItemsQueued() && !config.longStackTraces) {
+ throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a");
}
- limit = options.concurrency;
- } else {
- return Promise.reject(new TypeError(
- "options argument must be an object but it is " +
- util.classString(options)));
- }
+ Promise.prototype._captureStackTrace = Promise_captureStackTrace;
+ Promise.prototype._attachExtraTrace = Promise_attachExtraTrace;
+ Promise.prototype._dereferenceTrace = Promise_dereferenceTrace;
+ Context.deactivateLongStackTraces();
+ config.longStackTraces = false;
+ };
+ Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace;
+ Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace;
+ Promise.prototype._dereferenceTrace = longStackTracesDereferenceTrace;
+ Context.activateLongStackTraces();
}
- limit = typeof limit === "number" &&
- isFinite(limit) && limit >= 1 ? limit : 0;
- return new MappingPromiseArray(promises, fn, limit, _filter).promise();
-}
-
-Promise.prototype.map = function (fn, options) {
- return map(this, fn, options, null);
};
-Promise.map = function (promises, fn, options, _filter) {
- return map(promises, fn, options, _filter);
+Promise.hasLongStackTraces = function () {
+ return config.longStackTraces && longStackTracesIsSupported();
};
+var legacyHandlers = {
+ unhandledrejection: {
+ before: function() {
+ var ret = util.global.onunhandledrejection;
+ util.global.onunhandledrejection = null;
+ return ret;
+ },
+ after: function(fn) {
+ util.global.onunhandledrejection = fn;
+ }
+ },
+ rejectionhandled: {
+ before: function() {
+ var ret = util.global.onrejectionhandled;
+ util.global.onrejectionhandled = null;
+ return ret;
+ },
+ after: function(fn) {
+ util.global.onrejectionhandled = fn;
+ }
+ }
};
+var fireDomEvent = (function() {
+ var dispatch = function(legacy, e) {
+ if (legacy) {
+ var fn;
+ try {
+ fn = legacy.before();
+ return !util.global.dispatchEvent(e);
+ } finally {
+ legacy.after(fn);
+ }
+ } else {
+ return !util.global.dispatchEvent(e);
+ }
+ };
+ try {
+ if (typeof CustomEvent === "function") {
+ var event = new CustomEvent("CustomEvent");
+ util.global.dispatchEvent(event);
+ return function(name, event) {
+ name = name.toLowerCase();
+ var eventData = {
+ detail: event,
+ cancelable: true
+ };
+ var domEvent = new CustomEvent(name, eventData);
+ es5.defineProperty(
+ domEvent, "promise", {value: event.promise});
+ es5.defineProperty(
+ domEvent, "reason", {value: event.reason});
-/***/ }),
-/* 221 */,
-/* 222 */,
-/* 223 */,
-/* 224 */,
-/* 225 */,
-/* 226 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-"use strict";
-
+ return dispatch(legacyHandlers[name], domEvent);
+ };
+ } else if (typeof Event === "function") {
+ var event = new Event("CustomEvent");
+ util.global.dispatchEvent(event);
+ return function(name, event) {
+ name = name.toLowerCase();
+ var domEvent = new Event(name, {
+ cancelable: true
+ });
+ domEvent.detail = event;
+ es5.defineProperty(domEvent, "promise", {value: event.promise});
+ es5.defineProperty(domEvent, "reason", {value: event.reason});
+ return dispatch(legacyHandlers[name], domEvent);
+ };
+ } else {
+ var event = document.createEvent("CustomEvent");
+ event.initCustomEvent("testingtheevent", false, true, {});
+ util.global.dispatchEvent(event);
+ return function(name, event) {
+ name = name.toLowerCase();
+ var domEvent = document.createEvent("CustomEvent");
+ domEvent.initCustomEvent(name, false, true,
+ event);
+ return dispatch(legacyHandlers[name], domEvent);
+ };
+ }
+ } catch (e) {}
+ return function() {
+ return false;
+ };
+})();
-module.exports = {
- // Export promiseified graceful-fs:
- ...__webpack_require__(869),
- // Export extra methods:
- ...__webpack_require__(43),
- ...__webpack_require__(774),
- ...__webpack_require__(615),
- ...__webpack_require__(472),
- ...__webpack_require__(171),
- ...__webpack_require__(727),
- ...__webpack_require__(959),
- ...__webpack_require__(353),
- ...__webpack_require__(517),
- ...__webpack_require__(322),
- ...__webpack_require__(723)
-}
+var fireGlobalEvent = (function() {
+ if (util.isNode) {
+ return function() {
+ return process.emit.apply(process, arguments);
+ };
+ } else {
+ if (!util.global) {
+ return function() {
+ return false;
+ };
+ }
+ return function(name) {
+ var methodName = "on" + name.toLowerCase();
+ var method = util.global[methodName];
+ if (!method) return false;
+ method.apply(util.global, [].slice.call(arguments, 1));
+ return true;
+ };
+ }
+})();
-// Export fs.promises as a getter property so that we don't trigger
-// ExperimentalWarning before fs.promises is actually accessed.
-const fs = __webpack_require__(747)
-if (Object.getOwnPropertyDescriptor(fs, 'promises')) {
- Object.defineProperty(module.exports, 'promises', {
- get () { return fs.promises }
- })
+function generatePromiseLifecycleEventObject(name, promise) {
+ return {promise: promise};
}
+var eventToObjectGenerator = {
+ promiseCreated: generatePromiseLifecycleEventObject,
+ promiseFulfilled: generatePromiseLifecycleEventObject,
+ promiseRejected: generatePromiseLifecycleEventObject,
+ promiseResolved: generatePromiseLifecycleEventObject,
+ promiseCancelled: generatePromiseLifecycleEventObject,
+ promiseChained: function(name, promise, child) {
+ return {promise: promise, child: child};
+ },
+ warning: function(name, warning) {
+ return {warning: warning};
+ },
+ unhandledRejection: function (name, reason, promise) {
+ return {reason: reason, promise: promise};
+ },
+ rejectionHandled: generatePromiseLifecycleEventObject
+};
-/***/ }),
-/* 227 */
-/***/ (function(__unusedmodule, exports) {
+var activeFireEvent = function (name) {
+ var globalEventFired = false;
+ try {
+ globalEventFired = fireGlobalEvent.apply(null, arguments);
+ } catch (e) {
+ async.throwLater(e);
+ globalEventFired = true;
+ }
-"use strict";
+ var domEventFired = false;
+ try {
+ domEventFired = fireDomEvent(name,
+ eventToObjectGenerator[name].apply(null, arguments));
+ } catch (e) {
+ async.throwLater(e);
+ domEventFired = true;
+ }
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
+ return domEventFired || globalEventFired;
};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.getRefSpec = exports.getCheckoutInfo = void 0;
-function getCheckoutInfo(git, ref) {
- return __awaiter(this, void 0, void 0, function* () {
- if (!git) {
- throw new Error('Arg git cannot be empty');
+
+Promise.config = function(opts) {
+ opts = Object(opts);
+ if ("longStackTraces" in opts) {
+ if (opts.longStackTraces) {
+ Promise.longStackTraces();
+ } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) {
+ disableLongStackTraces();
}
- if (!ref) {
- throw new Error('Args ref cannot be empty');
+ }
+ if ("warnings" in opts) {
+ var warningsOption = opts.warnings;
+ config.warnings = !!warningsOption;
+ wForgottenReturn = config.warnings;
+
+ if (util.isObject(warningsOption)) {
+ if ("wForgottenReturn" in warningsOption) {
+ wForgottenReturn = !!warningsOption.wForgottenReturn;
+ }
}
- const result = {};
- const upperRef = (ref || '').toUpperCase();
- // refs/heads/
- if (upperRef.startsWith('REFS/HEADS/')) {
- const branch = ref.substring('refs/heads/'.length);
- result.ref = branch;
- result.startPoint = `refs/remotes/origin/${branch}`;
+ }
+ if ("cancellation" in opts && opts.cancellation && !config.cancellation) {
+ if (async.haveItemsQueued()) {
+ throw new Error(
+ "cannot enable cancellation after promises are in use");
}
- // refs/pull/
- else if (upperRef.startsWith('REFS/PULL/')) {
- const branch = ref.substring('refs/pull/'.length);
- result.ref = `refs/remotes/pull/${branch}`;
- }
- // refs/tags/
- else if (upperRef.startsWith('REFS/')) {
- result.ref = ref;
+ Promise.prototype._clearCancellationData =
+ cancellationClearCancellationData;
+ Promise.prototype._propagateFrom = cancellationPropagateFrom;
+ Promise.prototype._onCancel = cancellationOnCancel;
+ Promise.prototype._setOnCancel = cancellationSetOnCancel;
+ Promise.prototype._attachCancellationCallback =
+ cancellationAttachCancellationCallback;
+ Promise.prototype._execute = cancellationExecute;
+ propagateFromFunction = cancellationPropagateFrom;
+ config.cancellation = true;
+ }
+ if ("monitoring" in opts) {
+ if (opts.monitoring && !config.monitoring) {
+ config.monitoring = true;
+ Promise.prototype._fireEvent = activeFireEvent;
+ } else if (!opts.monitoring && config.monitoring) {
+ config.monitoring = false;
+ Promise.prototype._fireEvent = defaultFireEvent;
}
- // Unqualified ref, check for a matching ref or tag
- else {
- if (yield git.branchExists(true, `origin/${ref}`)) {
- result.ref = ref;
- result.startPoint = `refs/remotes/origin/${ref}`;
- }
- else if (yield git.tagExists(`${ref}`)) {
- result.ref = `refs/tags/${ref}`;
- }
- else {
- throw new Error(`A branch or tag with the name '${ref}' could not be found`);
+ }
+ if ("asyncHooks" in opts && util.nodeSupportsAsyncResource) {
+ var prev = config.asyncHooks;
+ var cur = !!opts.asyncHooks;
+ if (prev !== cur) {
+ config.asyncHooks = cur;
+ if (cur) {
+ enableAsyncHooks();
+ } else {
+ disableAsyncHooks();
}
}
- return result;
- });
-}
-exports.getCheckoutInfo = getCheckoutInfo;
-function getRefSpec(ref) {
- if (!ref) {
- throw new Error('Arg ref cannot be empty');
}
- const upperRef = (ref || '').toUpperCase();
- // Unqualified ref, check for a matching ref or tag
- if (!upperRef.startsWith('REFS/')) {
- return [
- `+refs/heads/${ref}*:refs/remotes/origin/${ref}*`,
- `+refs/tags/${ref}*:refs/tags/${ref}*`
- ];
- }
- // refs/heads/
- else if (upperRef.startsWith('REFS/HEADS/')) {
- const branch = ref.substring('refs/heads/'.length);
- return [`+${ref}:refs/remotes/origin/${branch}`];
- }
- // refs/pull/
- else if (upperRef.startsWith('REFS/PULL/')) {
- const branch = ref.substring('refs/pull/'.length);
- return [`+${ref}:refs/remotes/pull/${branch}`];
- }
- // refs/tags/
- else {
- return [`+${ref}:${ref}`];
- }
-}
-exports.getRefSpec = getRefSpec;
-
-
-/***/ }),
-/* 228 */,
-/* 229 */,
-/* 230 */,
-/* 231 */,
-/* 232 */,
-/* 233 */,
-/* 234 */,
-/* 235 */,
-/* 236 */,
-/* 237 */,
-/* 238 */,
-/* 239 */,
-/* 240 */,
-/* 241 */,
-/* 242 */,
-/* 243 */,
-/* 244 */,
-/* 245 */,
-/* 246 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+ return Promise;
+};
-"use strict";
+function defaultFireEvent() { return false; }
-module.exports = function(Promise, INTERNAL, tryConvertToPromise,
- apiRejection, Proxyable) {
-var util = __webpack_require__(248);
-var isArray = util.isArray;
+Promise.prototype._fireEvent = defaultFireEvent;
+Promise.prototype._execute = function(executor, resolve, reject) {
+ try {
+ executor(resolve, reject);
+ } catch (e) {
+ return e;
+ }
+};
+Promise.prototype._onCancel = function () {};
+Promise.prototype._setOnCancel = function (handler) { ; };
+Promise.prototype._attachCancellationCallback = function(onCancel) {
+ ;
+};
+Promise.prototype._captureStackTrace = function () {};
+Promise.prototype._attachExtraTrace = function () {};
+Promise.prototype._dereferenceTrace = function () {};
+Promise.prototype._clearCancellationData = function() {};
+Promise.prototype._propagateFrom = function (parent, flags) {
+ ;
+ ;
+};
-function toResolutionValue(val) {
- switch(val) {
- case -2: return [];
- case -3: return {};
- case -6: return new Map();
+function cancellationExecute(executor, resolve, reject) {
+ var promise = this;
+ try {
+ executor(resolve, reject, function(onCancel) {
+ if (typeof onCancel !== "function") {
+ throw new TypeError("onCancel must be a function, got: " +
+ util.toString(onCancel));
+ }
+ promise._attachCancellationCallback(onCancel);
+ });
+ } catch (e) {
+ return e;
}
}
-function PromiseArray(values) {
- var promise = this._promise = new Promise(INTERNAL);
- if (values instanceof Promise) {
- promise._propagateFrom(values, 3);
- values.suppressUnhandledRejections();
+function cancellationAttachCancellationCallback(onCancel) {
+ if (!this._isCancellable()) return this;
+
+ var previousOnCancel = this._onCancel();
+ if (previousOnCancel !== undefined) {
+ if (util.isArray(previousOnCancel)) {
+ previousOnCancel.push(onCancel);
+ } else {
+ this._setOnCancel([previousOnCancel, onCancel]);
+ }
+ } else {
+ this._setOnCancel(onCancel);
}
- promise._setOnCancel(this);
- this._values = values;
- this._length = 0;
- this._totalResolved = 0;
- this._init(undefined, -2);
}
-util.inherits(PromiseArray, Proxyable);
-PromiseArray.prototype.length = function () {
- return this._length;
-};
+function cancellationOnCancel() {
+ return this._onCancelField;
+}
-PromiseArray.prototype.promise = function () {
- return this._promise;
-};
+function cancellationSetOnCancel(onCancel) {
+ this._onCancelField = onCancel;
+}
-PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {
- var values = tryConvertToPromise(this._values, this._promise);
- if (values instanceof Promise) {
- values = values._target();
- var bitField = values._bitField;
- ;
- this._values = values;
+function cancellationClearCancellationData() {
+ this._cancellationParent = undefined;
+ this._onCancelField = undefined;
+}
- if (((bitField & 50397184) === 0)) {
- this._promise._setAsyncGuaranteed();
- return values._then(
- init,
- this._reject,
- undefined,
- this,
- resolveValueIfEmpty
- );
- } else if (((bitField & 33554432) !== 0)) {
- values = values._value();
- } else if (((bitField & 16777216) !== 0)) {
- return this._reject(values._reason());
- } else {
- return this._cancel();
+function cancellationPropagateFrom(parent, flags) {
+ if ((flags & 1) !== 0) {
+ this._cancellationParent = parent;
+ var branchesRemainingToCancel = parent._branchesRemainingToCancel;
+ if (branchesRemainingToCancel === undefined) {
+ branchesRemainingToCancel = 0;
}
+ parent._branchesRemainingToCancel = branchesRemainingToCancel + 1;
}
- values = util.asArray(values);
- if (values === null) {
- var err = apiRejection(
- "expecting an array or an iterable object but got " + util.classString(values)).reason();
- this._promise._rejectCallback(err, false);
- return;
+ if ((flags & 2) !== 0 && parent._isBound()) {
+ this._setBoundTo(parent._boundTo);
}
+}
- if (values.length === 0) {
- if (resolveValueIfEmpty === -5) {
- this._resolveEmptyArray();
- }
- else {
- this._resolve(toResolutionValue(resolveValueIfEmpty));
- }
- return;
+function bindingPropagateFrom(parent, flags) {
+ if ((flags & 2) !== 0 && parent._isBound()) {
+ this._setBoundTo(parent._boundTo);
}
- this._iterate(values);
-};
-
-PromiseArray.prototype._iterate = function(values) {
- var len = this.getActualLength(values.length);
- this._length = len;
- this._values = this.shouldCopyValues() ? new Array(len) : this._values;
- var result = this._promise;
- var isResolved = false;
- var bitField = null;
- for (var i = 0; i < len; ++i) {
- var maybePromise = tryConvertToPromise(values[i], result);
-
- if (maybePromise instanceof Promise) {
- maybePromise = maybePromise._target();
- bitField = maybePromise._bitField;
- } else {
- bitField = null;
- }
+}
+var propagateFromFunction = bindingPropagateFrom;
- if (isResolved) {
- if (bitField !== null) {
- maybePromise.suppressUnhandledRejections();
- }
- } else if (bitField !== null) {
- if (((bitField & 50397184) === 0)) {
- maybePromise._proxy(this, i);
- this._values[i] = maybePromise;
- } else if (((bitField & 33554432) !== 0)) {
- isResolved = this._promiseFulfilled(maybePromise._value(), i);
- } else if (((bitField & 16777216) !== 0)) {
- isResolved = this._promiseRejected(maybePromise._reason(), i);
+function boundValueFunction() {
+ var ret = this._boundTo;
+ if (ret !== undefined) {
+ if (ret instanceof Promise) {
+ if (ret.isFulfilled()) {
+ return ret.value();
} else {
- isResolved = this._promiseCancelled(i);
+ return undefined;
}
- } else {
- isResolved = this._promiseFulfilled(maybePromise, i);
}
}
- if (!isResolved) result._setAsyncGuaranteed();
-};
+ return ret;
+}
-PromiseArray.prototype._isResolved = function () {
- return this._values === null;
-};
+function longStackTracesCaptureStackTrace() {
+ this._trace = new CapturedTrace(this._peekContext());
+}
-PromiseArray.prototype._resolve = function (value) {
- this._values = null;
- this._promise._fulfill(value);
-};
+function longStackTracesAttachExtraTrace(error, ignoreSelf) {
+ if (canAttachTrace(error)) {
+ var trace = this._trace;
+ if (trace !== undefined) {
+ if (ignoreSelf) trace = trace._parent;
+ }
+ if (trace !== undefined) {
+ trace.attachExtraTrace(error);
+ } else if (!error.__stackCleaned__) {
+ var parsed = parseStackAndMessage(error);
+ util.notEnumerableProp(error, "stack",
+ parsed.message + "\n" + parsed.stack.join("\n"));
+ util.notEnumerableProp(error, "__stackCleaned__", true);
+ }
+ }
+}
-PromiseArray.prototype._cancel = function() {
- if (this._isResolved() || !this._promise._isCancellable()) return;
- this._values = null;
- this._promise._cancel();
-};
+function longStackTracesDereferenceTrace() {
+ this._trace = undefined;
+}
-PromiseArray.prototype._reject = function (reason) {
- this._values = null;
- this._promise._rejectCallback(reason, false);
-};
+function checkForgottenReturns(returnValue, promiseCreated, name, promise,
+ parent) {
+ if (returnValue === undefined && promiseCreated !== null &&
+ wForgottenReturn) {
+ if (parent !== undefined && parent._returnedNonUndefined()) return;
+ if ((promise._bitField & 65535) === 0) return;
-PromiseArray.prototype._promiseFulfilled = function (value, index) {
- this._values[index] = value;
- var totalResolved = ++this._totalResolved;
- if (totalResolved >= this._length) {
- this._resolve(this._values);
- return true;
- }
- return false;
-};
+ if (name) name = name + " ";
+ var handlerLine = "";
+ var creatorLine = "";
+ if (promiseCreated._trace) {
+ var traceLines = promiseCreated._trace.stack.split("\n");
+ var stack = cleanStack(traceLines);
+ for (var i = stack.length - 1; i >= 0; --i) {
+ var line = stack[i];
+ if (!nodeFramePattern.test(line)) {
+ var lineMatches = line.match(parseLinePattern);
+ if (lineMatches) {
+ handlerLine = "at " + lineMatches[1] +
+ ":" + lineMatches[2] + ":" + lineMatches[3] + " ";
+ }
+ break;
+ }
+ }
-PromiseArray.prototype._promiseCancelled = function() {
- this._cancel();
- return true;
-};
+ if (stack.length > 0) {
+ var firstUserLine = stack[0];
+ for (var i = 0; i < traceLines.length; ++i) {
-PromiseArray.prototype._promiseRejected = function (reason) {
- this._totalResolved++;
- this._reject(reason);
- return true;
-};
+ if (traceLines[i] === firstUserLine) {
+ if (i > 0) {
+ creatorLine = "\n" + traceLines[i - 1];
+ }
+ break;
+ }
+ }
-PromiseArray.prototype._resultCancelled = function() {
- if (this._isResolved()) return;
- var values = this._values;
- this._cancel();
- if (values instanceof Promise) {
- values.cancel();
- } else {
- for (var i = 0; i < values.length; ++i) {
- if (values[i] instanceof Promise) {
- values[i].cancel();
}
}
+ var msg = "a promise was created in a " + name +
+ "handler " + handlerLine + "but was not returned from it, " +
+ "see http://goo.gl/rRqMUw" +
+ creatorLine;
+ promise._warn(msg, true, promiseCreated);
}
-};
-
-PromiseArray.prototype.shouldCopyValues = function () {
- return true;
-};
-
-PromiseArray.prototype.getActualLength = function (len) {
- return len;
-};
-
-return PromiseArray;
-};
-
-
-/***/ }),
-/* 247 */,
-/* 248 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-"use strict";
+}
-var es5 = __webpack_require__(883);
-var canEvaluate = typeof navigator == "undefined";
+function deprecated(name, replacement) {
+ var message = name +
+ " is deprecated and will be removed in a future version.";
+ if (replacement) message += " Use " + replacement + " instead.";
+ return warn(message);
+}
-var errorObj = {e: {}};
-var tryCatchTarget;
-var globalObject = typeof self !== "undefined" ? self :
- typeof window !== "undefined" ? window :
- typeof global !== "undefined" ? global :
- this !== undefined ? this : null;
+function warn(message, shouldUseOwnTrace, promise) {
+ if (!config.warnings) return;
+ var warning = new Warning(message);
+ var ctx;
+ if (shouldUseOwnTrace) {
+ promise._attachExtraTrace(warning);
+ } else if (config.longStackTraces && (ctx = Promise._peekContext())) {
+ ctx.attachExtraTrace(warning);
+ } else {
+ var parsed = parseStackAndMessage(warning);
+ warning.stack = parsed.message + "\n" + parsed.stack.join("\n");
+ }
-function tryCatcher() {
- try {
- var target = tryCatchTarget;
- tryCatchTarget = null;
- return target.apply(this, arguments);
- } catch (e) {
- errorObj.e = e;
- return errorObj;
+ if (!activeFireEvent("warning", warning)) {
+ formatAndLogError(warning, "", true);
}
}
-function tryCatch(fn) {
- tryCatchTarget = fn;
- return tryCatcher;
-}
-var inherits = function(Child, Parent) {
- var hasProp = {}.hasOwnProperty;
-
- function T() {
- this.constructor = Child;
- this.constructor$ = Parent;
- for (var propertyName in Parent.prototype) {
- if (hasProp.call(Parent.prototype, propertyName) &&
- propertyName.charAt(propertyName.length-1) !== "$"
- ) {
- this[propertyName + "$"] = Parent.prototype[propertyName];
- }
- }
+function reconstructStack(message, stacks) {
+ for (var i = 0; i < stacks.length - 1; ++i) {
+ stacks[i].push("From previous event:");
+ stacks[i] = stacks[i].join("\n");
}
- T.prototype = Parent.prototype;
- Child.prototype = new T();
- return Child.prototype;
-};
-
-
-function isPrimitive(val) {
- return val == null || val === true || val === false ||
- typeof val === "string" || typeof val === "number";
-
+ if (i < stacks.length) {
+ stacks[i] = stacks[i].join("\n");
+ }
+ return message + "\n" + stacks.join("\n");
}
-function isObject(value) {
- return typeof value === "function" ||
- typeof value === "object" && value !== null;
+function removeDuplicateOrEmptyJumps(stacks) {
+ for (var i = 0; i < stacks.length; ++i) {
+ if (stacks[i].length === 0 ||
+ ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {
+ stacks.splice(i, 1);
+ i--;
+ }
+ }
}
-function maybeWrapAsError(maybeError) {
- if (!isPrimitive(maybeError)) return maybeError;
+function removeCommonRoots(stacks) {
+ var current = stacks[0];
+ for (var i = 1; i < stacks.length; ++i) {
+ var prev = stacks[i];
+ var currentLastIndex = current.length - 1;
+ var currentLastLine = current[currentLastIndex];
+ var commonRootMeetPoint = -1;
- return new Error(safeToString(maybeError));
-}
+ for (var j = prev.length - 1; j >= 0; --j) {
+ if (prev[j] === currentLastLine) {
+ commonRootMeetPoint = j;
+ break;
+ }
+ }
-function withAppended(target, appendee) {
- var len = target.length;
- var ret = new Array(len + 1);
- var i;
- for (i = 0; i < len; ++i) {
- ret[i] = target[i];
+ for (var j = commonRootMeetPoint; j >= 0; --j) {
+ var line = prev[j];
+ if (current[currentLastIndex] === line) {
+ current.pop();
+ currentLastIndex--;
+ } else {
+ break;
+ }
+ }
+ current = prev;
}
- ret[i] = appendee;
- return ret;
}
-function getDataPropertyOrDefault(obj, key, defaultValue) {
- if (es5.isES5) {
- var desc = Object.getOwnPropertyDescriptor(obj, key);
-
- if (desc != null) {
- return desc.get == null && desc.set == null
- ? desc.value
- : defaultValue;
+function cleanStack(stack) {
+ var ret = [];
+ for (var i = 0; i < stack.length; ++i) {
+ var line = stack[i];
+ var isTraceLine = " (No stack trace)" === line ||
+ stackFramePattern.test(line);
+ var isInternalFrame = isTraceLine && shouldIgnore(line);
+ if (isTraceLine && !isInternalFrame) {
+ if (indentStackFrames && line.charAt(0) !== " ") {
+ line = " " + line;
+ }
+ ret.push(line);
}
- } else {
- return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;
}
+ return ret;
}
-function notEnumerableProp(obj, name, value) {
- if (isPrimitive(obj)) return obj;
- var descriptor = {
- value: value,
- configurable: true,
- enumerable: false,
- writable: true
- };
- es5.defineProperty(obj, name, descriptor);
- return obj;
+function stackFramesAsArray(error) {
+ var stack = error.stack.replace(/\s+$/g, "").split("\n");
+ for (var i = 0; i < stack.length; ++i) {
+ var line = stack[i];
+ if (" (No stack trace)" === line || stackFramePattern.test(line)) {
+ break;
+ }
+ }
+ if (i > 0 && error.name != "SyntaxError") {
+ stack = stack.slice(i);
+ }
+ return stack;
}
-function thrower(r) {
- throw r;
+function parseStackAndMessage(error) {
+ var stack = error.stack;
+ var message = error.toString();
+ stack = typeof stack === "string" && stack.length > 0
+ ? stackFramesAsArray(error) : [" (No stack trace)"];
+ return {
+ message: message,
+ stack: error.name == "SyntaxError" ? stack : cleanStack(stack)
+ };
}
-var inheritedDataKeys = (function() {
- var excludedPrototypes = [
- Array.prototype,
- Object.prototype,
- Function.prototype
- ];
-
- var isExcludedProto = function(val) {
- for (var i = 0; i < excludedPrototypes.length; ++i) {
- if (excludedPrototypes[i] === val) {
- return true;
- }
+function formatAndLogError(error, title, isSoft) {
+ if (typeof console !== "undefined") {
+ var message;
+ if (util.isObject(error)) {
+ var stack = error.stack;
+ message = title + formatStack(stack, error);
+ } else {
+ message = title + String(error);
+ }
+ if (typeof printWarning === "function") {
+ printWarning(message, isSoft);
+ } else if (typeof console.log === "function" ||
+ typeof console.log === "object") {
+ console.log(message);
}
- return false;
- };
-
- if (es5.isES5) {
- var getKeys = Object.getOwnPropertyNames;
- return function(obj) {
- var ret = [];
- var visitedKeys = Object.create(null);
- while (obj != null && !isExcludedProto(obj)) {
- var keys;
- try {
- keys = getKeys(obj);
- } catch (e) {
- return ret;
- }
- for (var i = 0; i < keys.length; ++i) {
- var key = keys[i];
- if (visitedKeys[key]) continue;
- visitedKeys[key] = true;
- var desc = Object.getOwnPropertyDescriptor(obj, key);
- if (desc != null && desc.get == null && desc.set == null) {
- ret.push(key);
- }
- }
- obj = es5.getPrototypeOf(obj);
- }
- return ret;
- };
- } else {
- var hasProp = {}.hasOwnProperty;
- return function(obj) {
- if (isExcludedProto(obj)) return [];
- var ret = [];
-
- /*jshint forin:false */
- enumeration: for (var key in obj) {
- if (hasProp.call(obj, key)) {
- ret.push(key);
- } else {
- for (var i = 0; i < excludedPrototypes.length; ++i) {
- if (hasProp.call(excludedPrototypes[i], key)) {
- continue enumeration;
- }
- }
- ret.push(key);
- }
- }
- return ret;
- };
}
+}
-})();
-
-var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/;
-function isClass(fn) {
+function fireRejectionEvent(name, localHandler, reason, promise) {
+ var localEventFired = false;
try {
- if (typeof fn === "function") {
- var keys = es5.names(fn.prototype);
-
- var hasMethods = es5.isES5 && keys.length > 1;
- var hasMethodsOtherThanConstructor = keys.length > 0 &&
- !(keys.length === 1 && keys[0] === "constructor");
- var hasThisAssignmentAndStaticMethods =
- thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0;
-
- if (hasMethods || hasMethodsOtherThanConstructor ||
- hasThisAssignmentAndStaticMethods) {
- return true;
+ if (typeof localHandler === "function") {
+ localEventFired = true;
+ if (name === "rejectionHandled") {
+ localHandler(promise);
+ } else {
+ localHandler(reason, promise);
}
}
- return false;
} catch (e) {
- return false;
+ async.throwLater(e);
}
-}
-function toFastProperties(obj) {
- /*jshint -W027,-W055,-W031*/
- function FakeConstructor() {}
- FakeConstructor.prototype = obj;
- var receiver = new FakeConstructor();
- function ic() {
- return typeof receiver.foo;
+ if (name === "unhandledRejection") {
+ if (!activeFireEvent(name, reason, promise) && !localEventFired) {
+ formatAndLogError(reason, "Unhandled rejection ");
+ }
+ } else {
+ activeFireEvent(name, promise);
}
- ic();
- ic();
- return obj;
- eval(obj);
}
-var rident = /^[a-z$_][a-z$_0-9]*$/i;
-function isIdentifier(str) {
- return rident.test(str);
-}
+function formatNonError(obj) {
+ var str;
+ if (typeof obj === "function") {
+ str = "[function " +
+ (obj.name || "anonymous") +
+ "]";
+ } else {
+ str = obj && typeof obj.toString === "function"
+ ? obj.toString() : util.toString(obj);
+ var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/;
+ if (ruselessToString.test(str)) {
+ try {
+ var newStr = JSON.stringify(obj);
+ str = newStr;
+ }
+ catch(e) {
-function filledRange(count, prefix, suffix) {
- var ret = new Array(count);
- for(var i = 0; i < count; ++i) {
- ret[i] = prefix + i + suffix;
+ }
+ }
+ if (str.length === 0) {
+ str = "(empty array)";
+ }
}
- return ret;
+ return ("(<" + snip(str) + ">, no stack trace)");
}
-function safeToString(obj) {
- try {
- return obj + "";
- } catch (e) {
- return "[no string representation]";
+function snip(str) {
+ var maxChars = 41;
+ if (str.length < maxChars) {
+ return str;
}
+ return str.substr(0, maxChars - 3) + "...";
}
-function isError(obj) {
- return obj instanceof Error ||
- (obj !== null &&
- typeof obj === "object" &&
- typeof obj.message === "string" &&
- typeof obj.name === "string");
+function longStackTracesIsSupported() {
+ return typeof captureStackTrace === "function";
}
-function markAsOriginatingFromRejection(e) {
- try {
- notEnumerableProp(e, "isOperational", true);
+var shouldIgnore = function() { return false; };
+var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;
+function parseLineInfo(line) {
+ var matches = line.match(parseLineInfoRegex);
+ if (matches) {
+ return {
+ fileName: matches[1],
+ line: parseInt(matches[2], 10)
+ };
}
- catch(ignore) {}
}
-function originatesFromRejection(e) {
- if (e == null) return false;
- return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) ||
- e["isOperational"] === true);
+function setBounds(firstLineError, lastLineError) {
+ if (!longStackTracesIsSupported()) return;
+ var firstStackLines = (firstLineError.stack || "").split("\n");
+ var lastStackLines = (lastLineError.stack || "").split("\n");
+ var firstIndex = -1;
+ var lastIndex = -1;
+ var firstFileName;
+ var lastFileName;
+ for (var i = 0; i < firstStackLines.length; ++i) {
+ var result = parseLineInfo(firstStackLines[i]);
+ if (result) {
+ firstFileName = result.fileName;
+ firstIndex = result.line;
+ break;
+ }
+ }
+ for (var i = 0; i < lastStackLines.length; ++i) {
+ var result = parseLineInfo(lastStackLines[i]);
+ if (result) {
+ lastFileName = result.fileName;
+ lastIndex = result.line;
+ break;
+ }
+ }
+ if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||
+ firstFileName !== lastFileName || firstIndex >= lastIndex) {
+ return;
+ }
+
+ shouldIgnore = function(line) {
+ if (bluebirdFramePattern.test(line)) return true;
+ var info = parseLineInfo(line);
+ if (info) {
+ if (info.fileName === firstFileName &&
+ (firstIndex <= info.line && info.line <= lastIndex)) {
+ return true;
+ }
+ }
+ return false;
+ };
}
-function canAttachTrace(obj) {
- return isError(obj) && es5.propertyIsWritable(obj, "stack");
+function CapturedTrace(parent) {
+ this._parent = parent;
+ this._promisesCreated = 0;
+ var length = this._length = 1 + (parent === undefined ? 0 : parent._length);
+ captureStackTrace(this, CapturedTrace);
+ if (length > 32) this.uncycle();
}
+util.inherits(CapturedTrace, Error);
+Context.CapturedTrace = CapturedTrace;
-var ensureErrorObject = (function() {
- if (!("stack" in new Error())) {
- return function(value) {
- if (canAttachTrace(value)) return value;
- try {throw new Error(safeToString(value));}
- catch(err) {return err;}
- };
- } else {
- return function(value) {
- if (canAttachTrace(value)) return value;
- return new Error(safeToString(value));
- };
- }
-})();
+CapturedTrace.prototype.uncycle = function() {
+ var length = this._length;
+ if (length < 2) return;
+ var nodes = [];
+ var stackToIndex = {};
-function classString(obj) {
- return {}.toString.call(obj);
-}
+ for (var i = 0, node = this; node !== undefined; ++i) {
+ nodes.push(node);
+ node = node._parent;
+ }
+ length = this._length = i;
+ for (var i = length - 1; i >= 0; --i) {
+ var stack = nodes[i].stack;
+ if (stackToIndex[stack] === undefined) {
+ stackToIndex[stack] = i;
+ }
+ }
+ for (var i = 0; i < length; ++i) {
+ var currentStack = nodes[i].stack;
+ var index = stackToIndex[currentStack];
+ if (index !== undefined && index !== i) {
+ if (index > 0) {
+ nodes[index - 1]._parent = undefined;
+ nodes[index - 1]._length = 1;
+ }
+ nodes[i]._parent = undefined;
+ nodes[i]._length = 1;
+ var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;
-function copyDescriptors(from, to, filter) {
- var keys = es5.names(from);
- for (var i = 0; i < keys.length; ++i) {
- var key = keys[i];
- if (filter(key)) {
- try {
- es5.defineProperty(to, key, es5.getDescriptor(from, key));
- } catch (ignore) {}
+ if (index < length - 1) {
+ cycleEdgeNode._parent = nodes[index + 1];
+ cycleEdgeNode._parent.uncycle();
+ cycleEdgeNode._length =
+ cycleEdgeNode._parent._length + 1;
+ } else {
+ cycleEdgeNode._parent = undefined;
+ cycleEdgeNode._length = 1;
+ }
+ var currentChildLength = cycleEdgeNode._length + 1;
+ for (var j = i - 2; j >= 0; --j) {
+ nodes[j]._length = currentChildLength;
+ currentChildLength++;
+ }
+ return;
}
}
-}
+};
-var asArray = function(v) {
- if (es5.isArray(v)) {
- return v;
+CapturedTrace.prototype.attachExtraTrace = function(error) {
+ if (error.__stackCleaned__) return;
+ this.uncycle();
+ var parsed = parseStackAndMessage(error);
+ var message = parsed.message;
+ var stacks = [parsed.stack];
+
+ var trace = this;
+ while (trace !== undefined) {
+ stacks.push(cleanStack(trace.stack.split("\n")));
+ trace = trace._parent;
}
- return null;
+ removeCommonRoots(stacks);
+ removeDuplicateOrEmptyJumps(stacks);
+ util.notEnumerableProp(error, "stack", reconstructStack(message, stacks));
+ util.notEnumerableProp(error, "__stackCleaned__", true);
};
-if (typeof Symbol !== "undefined" && Symbol.iterator) {
- var ArrayFrom = typeof Array.from === "function" ? function(v) {
- return Array.from(v);
- } : function(v) {
- var ret = [];
- var it = v[Symbol.iterator]();
- var itResult;
- while (!((itResult = it.next()).done)) {
- ret.push(itResult.value);
- }
- return ret;
- };
+var captureStackTrace = (function stackDetection() {
+ var v8stackFramePattern = /^\s*at\s*/;
+ var v8stackFormatter = function(stack, error) {
+ if (typeof stack === "string") return stack;
- asArray = function(v) {
- if (es5.isArray(v)) {
- return v;
- } else if (v != null && typeof v[Symbol.iterator] === "function") {
- return ArrayFrom(v);
+ if (error.name !== undefined &&
+ error.message !== undefined) {
+ return error.toString();
}
- return null;
+ return formatNonError(error);
};
-}
-
-var isNode = typeof process !== "undefined" &&
- classString(process).toLowerCase() === "[object process]";
-var hasEnvVariables = typeof process !== "undefined" &&
- typeof process.env !== "undefined";
-
-function env(key) {
- return hasEnvVariables ? process.env[key] : undefined;
-}
+ if (typeof Error.stackTraceLimit === "number" &&
+ typeof Error.captureStackTrace === "function") {
+ Error.stackTraceLimit += 6;
+ stackFramePattern = v8stackFramePattern;
+ formatStack = v8stackFormatter;
+ var captureStackTrace = Error.captureStackTrace;
-function getNativePromise() {
- if (typeof Promise === "function") {
- try {
- var promise = new Promise(function(){});
- if (classString(promise) === "[object Promise]") {
- return Promise;
- }
- } catch (e) {}
+ shouldIgnore = function(line) {
+ return bluebirdFramePattern.test(line);
+ };
+ return function(receiver, ignoreUntil) {
+ Error.stackTraceLimit += 6;
+ captureStackTrace(receiver, ignoreUntil);
+ Error.stackTraceLimit -= 6;
+ };
}
-}
+ var err = new Error();
-var reflectHandler;
-function contextBind(ctx, cb) {
- if (ctx === null ||
- typeof cb !== "function" ||
- cb === reflectHandler) {
- return cb;
+ if (typeof err.stack === "string" &&
+ err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) {
+ stackFramePattern = /@/;
+ formatStack = v8stackFormatter;
+ indentStackFrames = true;
+ return function captureStackTrace(o) {
+ o.stack = new Error().stack;
+ };
}
- if (ctx.domain !== null) {
- cb = ctx.domain.bind(cb);
+ var hasStackAfterThrow;
+ try { throw new Error(); }
+ catch(e) {
+ hasStackAfterThrow = ("stack" in e);
+ }
+ if (!("stack" in err) && hasStackAfterThrow &&
+ typeof Error.stackTraceLimit === "number") {
+ stackFramePattern = v8stackFramePattern;
+ formatStack = v8stackFormatter;
+ return function captureStackTrace(o) {
+ Error.stackTraceLimit += 6;
+ try { throw new Error(); }
+ catch(e) { o.stack = e.stack; }
+ Error.stackTraceLimit -= 6;
+ };
}
- var async = ctx.async;
- if (async !== null) {
- var old = cb;
- cb = function() {
- var $_len = arguments.length + 2;var args = new Array($_len); for(var $_i = 2; $_i < $_len ; ++$_i) {args[$_i] = arguments[$_i - 2];};
- args[0] = old;
- args[1] = this;
- return async.runInAsyncScope.apply(async, args);
+ formatStack = function(stack, error) {
+ if (typeof stack === "string") return stack;
+
+ if ((typeof error === "object" ||
+ typeof error === "function") &&
+ error.name !== undefined &&
+ error.message !== undefined) {
+ return error.toString();
+ }
+ return formatNonError(error);
+ };
+
+ return null;
+
+})([]);
+
+if (typeof console !== "undefined" && typeof console.warn !== "undefined") {
+ printWarning = function (message) {
+ console.warn(message);
+ };
+ if (util.isNode && process.stderr.isTTY) {
+ printWarning = function(message, isSoft) {
+ var color = isSoft ? "\u001b[33m" : "\u001b[31m";
+ console.warn(color + message + "\u001b[0m\n");
+ };
+ } else if (!util.isNode && typeof (new Error().stack) === "string") {
+ printWarning = function(message, isSoft) {
+ console.warn("%c" + message,
+ isSoft ? "color: darkorange" : "color: red");
};
}
- return cb;
}
-var ret = {
- setReflectHandler: function(fn) {
- reflectHandler = fn;
+var config = {
+ warnings: warnings,
+ longStackTraces: false,
+ cancellation: false,
+ monitoring: false,
+ asyncHooks: false
+};
+
+if (longStackTraces) Promise.longStackTraces();
+
+return {
+ asyncHooks: function() {
+ return config.asyncHooks;
},
- isClass: isClass,
- isIdentifier: isIdentifier,
- inheritedDataKeys: inheritedDataKeys,
- getDataPropertyOrDefault: getDataPropertyOrDefault,
- thrower: thrower,
- isArray: es5.isArray,
- asArray: asArray,
- notEnumerableProp: notEnumerableProp,
- isPrimitive: isPrimitive,
- isObject: isObject,
- isError: isError,
- canEvaluate: canEvaluate,
- errorObj: errorObj,
- tryCatch: tryCatch,
- inherits: inherits,
- withAppended: withAppended,
- maybeWrapAsError: maybeWrapAsError,
- toFastProperties: toFastProperties,
- filledRange: filledRange,
- toString: safeToString,
- canAttachTrace: canAttachTrace,
- ensureErrorObject: ensureErrorObject,
- originatesFromRejection: originatesFromRejection,
- markAsOriginatingFromRejection: markAsOriginatingFromRejection,
- classString: classString,
- copyDescriptors: copyDescriptors,
- isNode: isNode,
- hasEnvVariables: hasEnvVariables,
- env: env,
- global: globalObject,
- getNativePromise: getNativePromise,
- contextBind: contextBind
+ longStackTraces: function() {
+ return config.longStackTraces;
+ },
+ warnings: function() {
+ return config.warnings;
+ },
+ cancellation: function() {
+ return config.cancellation;
+ },
+ monitoring: function() {
+ return config.monitoring;
+ },
+ propagateFromFunction: function() {
+ return propagateFromFunction;
+ },
+ boundValueFunction: function() {
+ return boundValueFunction;
+ },
+ checkForgottenReturns: checkForgottenReturns,
+ setBounds: setBounds,
+ warn: warn,
+ deprecated: deprecated,
+ CapturedTrace: CapturedTrace,
+ fireDomEvent: fireDomEvent,
+ fireGlobalEvent: fireGlobalEvent
+};
};
-ret.isRecentNode = ret.isNode && (function() {
- var version;
- if (process.versions && process.versions.node) {
- version = process.versions.node.split(".").map(Number);
- } else if (process.version) {
- version = process.version.split(".").map(Number);
- }
- return (version[0] === 0 && version[1] > 10) || (version[0] > 0);
-})();
-ret.nodeSupportsAsyncResource = ret.isNode && (function() {
- var supportsAsync = false;
- try {
- var res = __webpack_require__(303).AsyncResource;
- supportsAsync = typeof res.prototype.runInAsyncScope === "function";
- } catch (e) {
- supportsAsync = false;
- }
- return supportsAsync;
-})();
-
-if (ret.isNode) ret.toFastProperties(process);
-
-try {throw new Error(); } catch (e) {ret.lastLineError = e;}
-module.exports = ret;
/***/ }),
-/* 249 */,
-/* 250 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-var constants = __webpack_require__(619)
-
-var origCwd = process.cwd
-var cwd = null
-
-var platform = process.env.GRACEFUL_FS_PLATFORM || process.platform
-
-process.cwd = function() {
- if (!cwd)
- cwd = origCwd.call(process)
- return cwd
-}
-try {
- process.cwd()
-} catch (er) {}
-
-var chdir = process.chdir
-process.chdir = function(d) {
- cwd = null
- chdir.call(process, d)
-}
-module.exports = patch
+/***/ 280:
+/***/ (function(module) {
-function patch (fs) {
- // (re-)implement some things that are known busted or missing.
+module.exports = register;
- // lchmod, broken prior to 0.6.2
- // back-port the fix here.
- if (constants.hasOwnProperty('O_SYMLINK') &&
- process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
- patchLchmod(fs)
+function register(state, name, method, options) {
+ if (typeof method !== "function") {
+ throw new Error("method for before hook must be a function");
}
- // lutimes implementation, or no-op
- if (!fs.lutimes) {
- patchLutimes(fs)
+ if (!options) {
+ options = {};
}
- // https://github.com/isaacs/node-graceful-fs/issues/4
- // Chown should not fail on einval or eperm if non-root.
- // It should not fail on enosys ever, as this just indicates
- // that a fs doesn't support the intended operation.
+ if (Array.isArray(name)) {
+ return name.reverse().reduce(function (callback, name) {
+ return register.bind(null, state, name, callback, options);
+ }, method)();
+ }
- fs.chown = chownFix(fs.chown)
- fs.fchown = chownFix(fs.fchown)
- fs.lchown = chownFix(fs.lchown)
+ return Promise.resolve().then(function () {
+ if (!state.registry[name]) {
+ return method(options);
+ }
- fs.chmod = chmodFix(fs.chmod)
- fs.fchmod = chmodFix(fs.fchmod)
- fs.lchmod = chmodFix(fs.lchmod)
+ return state.registry[name].reduce(function (method, registered) {
+ return registered.hook.bind(null, method, options);
+ }, method)();
+ });
+}
- fs.chownSync = chownFixSync(fs.chownSync)
- fs.fchownSync = chownFixSync(fs.fchownSync)
- fs.lchownSync = chownFixSync(fs.lchownSync)
- fs.chmodSync = chmodFixSync(fs.chmodSync)
- fs.fchmodSync = chmodFixSync(fs.fchmodSync)
- fs.lchmodSync = chmodFixSync(fs.lchmodSync)
+/***/ }),
- fs.stat = statFix(fs.stat)
- fs.fstat = statFix(fs.fstat)
- fs.lstat = statFix(fs.lstat)
+/***/ 287:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- fs.statSync = statFixSync(fs.statSync)
- fs.fstatSync = statFixSync(fs.fstatSync)
- fs.lstatSync = statFixSync(fs.lstatSync)
+"use strict";
- // if lchmod/lchown do not exist, then make them no-ops
- if (!fs.lchmod) {
- fs.lchmod = function (path, mode, cb) {
- if (cb) process.nextTick(cb)
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.GitAuthHelper = void 0;
+const assert = __importStar(__webpack_require__(357));
+const core = __importStar(__webpack_require__(470));
+const coreCommand = __importStar(__webpack_require__(431));
+const exec = __importStar(__webpack_require__(986));
+const fs = __importStar(__webpack_require__(747));
+const io = __importStar(__webpack_require__(1));
+const os = __importStar(__webpack_require__(87));
+const path = __importStar(__webpack_require__(622));
+const uuid_1 = __webpack_require__(62);
+const url_1 = __webpack_require__(835);
+const stateHelper = __importStar(__webpack_require__(153));
+const IS_WINDOWS = process.platform === "win32";
+const SSH_COMMAND_KEY = "core.sshCommand";
+class GitAuthHelper {
+ constructor(git, settings) {
+ this.sshCommand = "";
+ this.sshKeyPath = "";
+ this.sshKnownHostsPath = "";
+ this.git = git;
+ this.settings = settings;
+ // Token auth header
+ const serverUrl = new url_1.URL(process.env["GITHUB_URL"] || "https://github.com");
+ this.tokenConfigKey = `http.${serverUrl.origin}/.extraheader`; // "origin" is SCHEME://HOSTNAME[:PORT]
+ const basicCredential = Buffer.from(`x-access-token:${this.settings.authToken}`, "utf8").toString("base64");
+ core.setSecret(basicCredential);
+ this.tokenPlaceholderConfigValue = `AUTHORIZATION: basic ***`;
+ this.tokenConfigValue = `AUTHORIZATION: basic ${basicCredential}`;
+ // Instead of SSH URL
+ this.insteadOfKey = `url.${serverUrl.origin}/.insteadOf`; // "origin" is SCHEME://HOSTNAME[:PORT]
+ this.insteadOfValue = `git@${serverUrl.hostname}:`;
}
- fs.lchmodSync = function () {}
- }
- if (!fs.lchown) {
- fs.lchown = function (path, uid, gid, cb) {
- if (cb) process.nextTick(cb)
+ configureAuth() {
+ return __awaiter(this, void 0, void 0, function* () {
+ // Remove possible previous values
+ yield this.removeAuth();
+ // Configure new values
+ yield this.configureSsh();
+ yield this.configureToken();
+ });
}
- fs.lchownSync = function () {}
- }
-
- // on Windows, A/V software can lock the directory, causing this
- // to fail with an EACCES or EPERM if the directory contains newly
- // created files. Try again on failure, for up to 60 seconds.
-
- // Set the timeout this long because some Windows Anti-Virus, such as Parity
- // bit9, may lock files for up to a minute, causing npm package install
- // failures. Also, take care to yield the scheduler. Windows scheduling gives
- // CPU to a busy looping process, which can cause the program causing the lock
- // contention to be starved of CPU by node, so the contention doesn't resolve.
- if (platform === "win32") {
- fs.rename = (function (fs$rename) { return function (from, to, cb) {
- var start = Date.now()
- var backoff = 0;
- fs$rename(from, to, function CB (er) {
- if (er
- && (er.code === "EACCES" || er.code === "EPERM")
- && Date.now() - start < 60000) {
- setTimeout(function() {
- fs.stat(to, function (stater, st) {
- if (stater && stater.code === "ENOENT")
- fs$rename(from, to, CB);
- else
- cb(er)
- })
- }, backoff)
- if (backoff < 100)
- backoff += 10;
- return;
- }
- if (cb) cb(er)
- })
- }})(fs.rename)
- }
-
- // if read() returns EAGAIN, then just try it again.
- fs.read = (function (fs$read) {
- function read (fd, buffer, offset, length, position, callback_) {
- var callback
- if (callback_ && typeof callback_ === 'function') {
- var eagCounter = 0
- callback = function (er, _, __) {
- if (er && er.code === 'EAGAIN' && eagCounter < 10) {
- eagCounter ++
- return fs$read.call(fs, fd, buffer, offset, length, position, callback)
- }
- callback_.apply(this, arguments)
- }
- }
- return fs$read.call(fs, fd, buffer, offset, length, position, callback)
+ removeAuth() {
+ return __awaiter(this, void 0, void 0, function* () {
+ yield this.removeSsh();
+ yield this.removeToken();
+ });
}
-
- // This ensures `util.promisify` works as it does for native `fs.read`.
- read.__proto__ = fs$read
- return read
- })(fs.read)
-
- fs.readSync = (function (fs$readSync) { return function (fd, buffer, offset, length, position) {
- var eagCounter = 0
- while (true) {
- try {
- return fs$readSync.call(fs, fd, buffer, offset, length, position)
- } catch (er) {
- if (er.code === 'EAGAIN' && eagCounter < 10) {
- eagCounter ++
- continue
- }
- throw er
- }
+ configureSsh() {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!this.settings.sshKey) {
+ return;
+ }
+ // Write key
+ const runnerTemp = process.env["RUNNER_TEMP"] || "";
+ assert.ok(runnerTemp, "RUNNER_TEMP is not defined");
+ const uniqueId = uuid_1.v4();
+ stateHelper.setSshKeyPath(path.join(runnerTemp, uniqueId));
+ coreCommand.issueCommand("save-state", { name: "sshKeyPath" }, this.sshKeyPath);
+ yield fs.promises.mkdir(runnerTemp, { recursive: true });
+ yield fs.promises.writeFile(this.sshKeyPath, `${this.settings.sshKey.trim()}\n`, { mode: 0o600 });
+ // Remove inherited permissions on Windows
+ if (IS_WINDOWS) {
+ const icacls = yield io.which("icacls.exe");
+ yield exec.exec(`"${icacls}" "${this.sshKeyPath}" /grant:r "${process.env["USERDOMAIN"]}\\${process.env["USERNAME"]}:F"`);
+ yield exec.exec(`"${icacls}" "${this.sshKeyPath}" /inheritance:r`);
+ }
+ // Write known hosts
+ const userKnownHostsPath = path.join(os.homedir(), ".ssh", "known_hosts");
+ let userKnownHosts = "";
+ try {
+ userKnownHosts = (yield fs.promises.readFile(userKnownHostsPath)).toString();
+ }
+ catch (err) {
+ if (err.code !== "ENOENT") {
+ throw err;
+ }
+ }
+ let knownHosts = "";
+ if (userKnownHosts) {
+ knownHosts += `# Begin from ${userKnownHostsPath}\n${userKnownHosts}\n# End from ${userKnownHostsPath}\n`;
+ }
+ if (this.settings.sshKnownHosts) {
+ knownHosts += `# Begin from input known hosts\n${this.settings.sshKnownHosts}\n# end from input known hosts\n`;
+ }
+ knownHosts += `# Begin implicitly added github.com\ngithub.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==\n# End implicitly added github.com\n`;
+ this.sshKnownHostsPath = path.join(runnerTemp, `${uniqueId}_known_hosts`);
+ stateHelper.setSshKnownHostsPath(this.sshKnownHostsPath);
+ coreCommand.issueCommand("save-state", { name: "sshKnownHostsPath" }, this.sshKnownHostsPath);
+ yield fs.promises.writeFile(this.sshKnownHostsPath, knownHosts);
+ // Configure GIT_SSH_COMMAND
+ const sshPath = yield io.which("ssh", true);
+ this.sshCommand = `"${sshPath}" -i "$RUNNER_TEMP/${path.basename(this.sshKeyPath)}"`;
+ if (this.settings.sshStrict) {
+ this.sshCommand += " -o StrictHostKeyChecking=yes -o CheckHostIP=no";
+ }
+ this.sshCommand += ` -o "UserKnownHostsFile=$RUNNER_TEMP/${path.basename(this.sshKnownHostsPath)}"`;
+ core.info(`Temporarily overriding GIT_SSH_COMMAND=${this.sshCommand}`);
+ this.git.setEnvironmentVariable("GIT_SSH_COMMAND", this.sshCommand);
+ // Configure core.sshCommand
+ if (this.settings.persistCredentials) {
+ yield this.git.config(SSH_COMMAND_KEY, this.sshCommand);
+ }
+ });
}
- }})(fs.readSync)
-
- function patchLchmod (fs) {
- fs.lchmod = function (path, mode, callback) {
- fs.open( path
- , constants.O_WRONLY | constants.O_SYMLINK
- , mode
- , function (err, fd) {
- if (err) {
- if (callback) callback(err)
- return
- }
- // prefer to return the chmod error, if one occurs,
- // but still try to close, and report closing errors if they occur.
- fs.fchmod(fd, mode, function (err) {
- fs.close(fd, function(err2) {
- if (callback) callback(err || err2)
- })
- })
- })
+ configureToken(configPath, globalConfig) {
+ return __awaiter(this, void 0, void 0, function* () {
+ // Validate args
+ assert.ok((configPath && globalConfig) || (!configPath && !globalConfig), "Unexpected configureToken parameter combinations");
+ // Default config path
+ if (!configPath && !globalConfig) {
+ configPath = path.join(this.git.getWorkingDirectory(), ".git", "config");
+ }
+ // Configure a placeholder value. This approach avoids the credential being captured
+ // by process creation audit events, which are commonly logged. For more information,
+ // refer to https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/command-line-process-auditing
+ yield this.git.config(this.tokenConfigKey, this.tokenPlaceholderConfigValue, globalConfig);
+ // Replace the placeholder
+ yield this.replaceTokenPlaceholder(configPath || "");
+ });
}
-
- fs.lchmodSync = function (path, mode) {
- var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)
-
- // prefer to return the chmod error, if one occurs,
- // but still try to close, and report closing errors if they occur.
- var threw = true
- var ret
- try {
- ret = fs.fchmodSync(fd, mode)
- threw = false
- } finally {
- if (threw) {
- try {
- fs.closeSync(fd)
- } catch (er) {}
- } else {
- fs.closeSync(fd)
- }
- }
- return ret
+ replaceTokenPlaceholder(configPath) {
+ return __awaiter(this, void 0, void 0, function* () {
+ assert.ok(configPath, "configPath is not defined");
+ let content = (yield fs.promises.readFile(configPath)).toString();
+ const placeholderIndex = content.indexOf(this.tokenPlaceholderConfigValue);
+ if (placeholderIndex < 0 || placeholderIndex !== content.lastIndexOf(this.tokenPlaceholderConfigValue)) {
+ throw new Error(`Unable to replace auth placeholder in ${configPath}`);
+ }
+ assert.ok(this.tokenConfigValue, "tokenConfigValue is not defined");
+ content = content.replace(this.tokenPlaceholderConfigValue, this.tokenConfigValue);
+ yield fs.promises.writeFile(configPath, content);
+ });
}
- }
-
- function patchLutimes (fs) {
- if (constants.hasOwnProperty("O_SYMLINK")) {
- fs.lutimes = function (path, at, mt, cb) {
- fs.open(path, constants.O_SYMLINK, function (er, fd) {
- if (er) {
- if (cb) cb(er)
- return
- }
- fs.futimes(fd, at, mt, function (er) {
- fs.close(fd, function (er2) {
- if (cb) cb(er || er2)
- })
- })
- })
- }
-
- fs.lutimesSync = function (path, at, mt) {
- var fd = fs.openSync(path, constants.O_SYMLINK)
- var ret
- var threw = true
- try {
- ret = fs.futimesSync(fd, at, mt)
- threw = false
- } finally {
- if (threw) {
- try {
- fs.closeSync(fd)
- } catch (er) {}
- } else {
- fs.closeSync(fd)
- }
- }
- return ret
- }
-
- } else {
- fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }
- fs.lutimesSync = function () {}
+ removeSsh() {
+ return __awaiter(this, void 0, void 0, function* () {
+ // SSH key
+ const keyPath = this.sshKeyPath || stateHelper.SshKeyPath;
+ if (keyPath) {
+ try {
+ yield io.rmRF(keyPath);
+ }
+ catch (err) {
+ core.debug(err.message);
+ core.warning(`Failed to remove SSH key '${keyPath}'`);
+ }
+ }
+ // SSH known hosts
+ const knownHostsPath = this.sshKnownHostsPath || stateHelper.SshKnownHostsPath;
+ if (knownHostsPath) {
+ try {
+ yield io.rmRF(knownHostsPath);
+ }
+ catch (_a) {
+ // Intentionally empty
+ }
+ }
+ // SSH command
+ yield this.removeGitConfig(SSH_COMMAND_KEY);
+ });
}
- }
-
- function chmodFix (orig) {
- if (!orig) return orig
- return function (target, mode, cb) {
- return orig.call(fs, target, mode, function (er) {
- if (chownErOk(er)) er = null
- if (cb) cb.apply(this, arguments)
- })
+ removeToken() {
+ return __awaiter(this, void 0, void 0, function* () {
+ // HTTP extra header
+ yield this.removeGitConfig(this.tokenConfigKey);
+ });
}
- }
-
- function chmodFixSync (orig) {
- if (!orig) return orig
- return function (target, mode) {
- try {
- return orig.call(fs, target, mode)
- } catch (er) {
- if (!chownErOk(er)) throw er
- }
+ removeGitConfig(configKey, submoduleOnly = false) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!submoduleOnly) {
+ if ((yield this.git.configExists(configKey)) && !(yield this.git.tryConfigUnset(configKey))) {
+ // Load the config contents
+ core.warning(`Failed to remove '${configKey}' from the git config`);
+ }
+ }
+ });
}
- }
+}
+exports.GitAuthHelper = GitAuthHelper;
- function chownFix (orig) {
- if (!orig) return orig
- return function (target, uid, gid, cb) {
- return orig.call(fs, target, uid, gid, function (er) {
- if (chownErOk(er)) er = null
- if (cb) cb.apply(this, arguments)
- })
- }
- }
+/***/ }),
- function chownFixSync (orig) {
- if (!orig) return orig
- return function (target, uid, gid) {
- try {
- return orig.call(fs, target, uid, gid)
- } catch (er) {
- if (!chownErOk(er)) throw er
- }
- }
- }
+/***/ 289:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- function statFix (orig) {
- if (!orig) return orig
- // Older versions of Node erroneously returned signed integers for
- // uid + gid.
- return function (target, options, cb) {
- if (typeof options === 'function') {
- cb = options
- options = null
- }
- function callback (er, stats) {
- if (stats) {
- if (stats.uid < 0) stats.uid += 0x100000000
- if (stats.gid < 0) stats.gid += 0x100000000
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.GitCommandManager = exports.createCommandManager = exports.MinimumGitVersion = void 0;
+const git_version_1 = __webpack_require__(559);
+const core = __importStar(__webpack_require__(470));
+const exec = __importStar(__webpack_require__(986));
+const io = __importStar(__webpack_require__(1));
+const fs_extra_1 = __importDefault(__webpack_require__(226));
+const path_1 = __importDefault(__webpack_require__(622));
+const retry_helper_1 = __webpack_require__(587);
+const retryHelper = new retry_helper_1.RetryHelper();
+// Auth header not supported before 2.9
+// Wire protocol v2 not supported before 2.18
+exports.MinimumGitVersion = new git_version_1.GitVersion("2.18");
+function createCommandManager(workingDirectory) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return yield GitCommandManager.createCommandManager(workingDirectory);
+ });
+}
+exports.createCommandManager = createCommandManager;
+class GitCommandManager {
+ constructor() {
+ this.gitEnv = {
+ GIT_TERMINAL_PROMPT: "0",
+ GCM_INTERACTIVE: "Never",
+ };
+ this.workingDirectory = "";
+ this.gitPath = "";
+ this.gitVersion = undefined;
+ }
+ static createCommandManager(workingDirectory) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const result = new GitCommandManager();
+ yield result.initializeCommandManager(workingDirectory);
+ return result;
+ });
+ }
+ initializeCommandManager(workingDirectory) {
+ return __awaiter(this, void 0, void 0, function* () {
+ this.workingDirectory = workingDirectory;
+ this.gitPath = yield io.which("git", true);
+ // Git version
+ core.debug("Getting git version");
+ this.gitVersion = new git_version_1.GitVersion();
+ const gitOutput = yield this.execGit(["version"]);
+ const stdout = gitOutput.stdout.trim();
+ if (!stdout.includes("\n")) {
+ const match = stdout.match(/\d+\.\d+(\.\d+)?/);
+ if (match) {
+ this.gitVersion = new git_version_1.GitVersion(match[0]);
+ }
+ }
+ if (!this.gitVersion.isValid()) {
+ throw new Error("Unable to determine git version");
+ }
+ // Set the user agent
+ const gitHttpUserAgent = `git/${this.gitVersion} (github-actions-checkout)`;
+ core.debug(`Set git useragent to: ${gitHttpUserAgent}`);
+ this.gitEnv["GIT_HTTP_USER_AGENT"] = gitHttpUserAgent;
+ });
+ }
+ checkGitVersion() {
+ if (this.gitVersion === undefined) {
+ throw new Error("Init the git command manager");
+ }
+ if (!this.gitVersion.checkMinimum(exports.MinimumGitVersion)) {
+ throw new Error(`Minimum required git version is ${exports.MinimumGitVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}`);
}
- if (cb) cb.apply(this, arguments)
- }
- return options ? orig.call(fs, target, options, callback)
- : orig.call(fs, target, callback)
}
- }
-
- function statFixSync (orig) {
- if (!orig) return orig
- // Older versions of Node erroneously returned signed integers for
- // uid + gid.
- return function (target, options) {
- var stats = options ? orig.call(fs, target, options)
- : orig.call(fs, target)
- if (stats.uid < 0) stats.uid += 0x100000000
- if (stats.gid < 0) stats.gid += 0x100000000
- return stats;
+ getWorkingDirectory() {
+ return this.workingDirectory;
}
- }
-
- // ENOSYS means that the fs doesn't support the op. Just ignore
- // that, because it doesn't matter.
- //
- // if there's no getuid, or if getuid() is something other
- // than 0, and the error is EINVAL or EPERM, then just ignore
- // it.
- //
- // This specific case is a silent failure in cp, install, tar,
- // and most other unix tools that manage permissions.
- //
- // When running as root, or if other types of errors are
- // encountered, then it's strict.
- function chownErOk (er) {
- if (!er)
- return true
-
- if (er.code === "ENOSYS")
- return true
-
- var nonroot = !process.getuid || process.getuid() !== 0
- if (nonroot) {
- if (er.code === "EINVAL" || er.code === "EPERM")
- return true
+ init() {
+ return __awaiter(this, void 0, void 0, function* () {
+ yield this.execGit(["init", this.workingDirectory]);
+ });
+ }
+ fetch(fetchDepth, refSpec) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const args = [
+ "-c",
+ "protocol.version=2",
+ "fetch",
+ "--no-tags",
+ "--prune",
+ "--progress",
+ "--no-recurse-submodules",
+ ];
+ if (fetchDepth > 0) {
+ args.push(`--depth=${fetchDepth}`);
+ }
+ else if (fs_extra_1.default.existsSync(path_1.default.join(this.workingDirectory, ".git", "shallow"))) {
+ args.push("--unshallow");
+ }
+ args.push("origin");
+ for (const arg of refSpec) {
+ args.push(arg);
+ }
+ const that = this;
+ yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () {
+ yield that.execGit(args);
+ }));
+ });
+ }
+ checkout(ref, startPoint) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const args = ["checkout", "--progress", "--force"];
+ if (startPoint) {
+ args.push("-B", ref, startPoint);
+ }
+ else {
+ args.push(ref);
+ }
+ yield this.execGit(args);
+ });
+ }
+ sha(type) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const output = yield this.execGit(["rev-parse", "--verify", type]);
+ return output.stdout.trim();
+ });
+ }
+ status(args = []) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const output = yield this.execGit(["status"].concat(args));
+ return output.stdout.trim();
+ });
+ }
+ log1() {
+ return __awaiter(this, void 0, void 0, function* () {
+ yield this.execGit(["log", "-1"]);
+ });
+ }
+ config(configKey, configValue, globalConfig) {
+ return __awaiter(this, void 0, void 0, function* () {
+ yield this.execGit(["config", globalConfig ? "--global" : "--local", configKey, configValue]);
+ });
+ }
+ configExists(configKey, globalConfig) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const pattern = configKey.replace(/[^a-zA-Z0-9_]/g, (x) => {
+ return `\\${x}`;
+ });
+ const output = yield this.execGit(["config", globalConfig ? "--global" : "--local", "--name-only", "--get-regexp", pattern], true);
+ return output.exitCode === 0;
+ });
+ }
+ tryConfigUnset(configKey, globalConfig) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const output = yield this.execGit(["config", globalConfig ? "--global" : "--local", "--unset-all", configKey], true);
+ return output.exitCode === 0;
+ });
+ }
+ removeEnvironmentVariable(name) {
+ delete this.gitEnv[name];
+ }
+ setEnvironmentVariable(name, value) {
+ this.gitEnv[name] = value;
+ }
+ tryDisableAutomaticGarbageCollection() {
+ return __awaiter(this, void 0, void 0, function* () {
+ const output = yield this.execGit(["config", "--local", "gc.auto", "0"], true);
+ return output.exitCode === 0;
+ });
+ }
+ remoteAdd(remoteName, remoteUrl) {
+ return __awaiter(this, void 0, void 0, function* () {
+ yield this.execGit(["remote", "add", remoteName, remoteUrl]);
+ });
+ }
+ branchExists(remote, pattern) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const args = ["branch", "--list"];
+ if (remote) {
+ args.push("--remote");
+ }
+ args.push(pattern);
+ const output = yield this.execGit(args);
+ return !!output.stdout.trim();
+ });
+ }
+ tagExists(pattern) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const output = yield this.execGit(["tag", "--list", pattern]);
+ return !!output.stdout.trim();
+ });
+ }
+ addAll() {
+ return __awaiter(this, void 0, void 0, function* () {
+ const output = yield this.execGit(["add", "--all"]);
+ return Boolean(output.exitCode);
+ });
+ }
+ commit(message) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const output = yield this.execGit(["commit", "-m", `"${message}"`]);
+ return Boolean(output.exitCode);
+ });
+ }
+ push(ref) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const output = yield this.execGit(["push", "-u", "origin", ref]);
+ return Boolean(output.exitCode);
+ });
+ }
+ execGit(args, allowAllExitCodes = false) {
+ return __awaiter(this, void 0, void 0, function* () {
+ fs_extra_1.default.existsSync(this.workingDirectory);
+ const result = new GitOutput();
+ const env = {};
+ for (const key of Object.keys(process.env)) {
+ env[key] = process.env[key];
+ }
+ for (const key of Object.keys(this.gitEnv)) {
+ env[key] = this.gitEnv[key];
+ }
+ const stdout = [];
+ const options = {
+ cwd: this.workingDirectory,
+ env,
+ ignoreReturnCode: allowAllExitCodes,
+ listeners: {
+ stdout: (data) => {
+ stdout.push(data.toString());
+ },
+ },
+ };
+ result.exitCode = yield exec.exec(`"${this.gitPath}"`, args, options);
+ result.stdout = stdout.join("");
+ return result;
+ });
+ }
+}
+exports.GitCommandManager = GitCommandManager;
+class GitOutput {
+ constructor() {
+ this.stdout = "";
+ this.exitCode = 0;
}
-
- return false
- }
}
/***/ }),
-/* 251 */,
-/* 252 */,
-/* 253 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-"use strict";
-module.exports = function(NEXT_FILTER) {
-var util = __webpack_require__(248);
-var getKeys = __webpack_require__(883).keys;
-var tryCatch = util.tryCatch;
-var errorObj = util.errorObj;
+/***/ 293:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
-function catchFilter(instances, cb, promise) {
- return function(e) {
- var boundTo = promise._boundValue();
- predicateLoop: for (var i = 0; i < instances.length; ++i) {
- var item = instances[i];
+"use strict";
- if (item === Error ||
- (item != null && item.prototype instanceof Error)) {
- if (e instanceof item) {
- return tryCatch(cb).call(boundTo, e);
- }
- } else if (typeof item === "function") {
- var matchesPredicate = tryCatch(item).call(boundTo, e);
- if (matchesPredicate === errorObj) {
- return matchesPredicate;
- } else if (matchesPredicate) {
- return tryCatch(cb).call(boundTo, e);
- }
- } else if (util.isObject(e)) {
- var keys = getKeys(item);
- for (var j = 0; j < keys.length; ++j) {
- var key = keys[j];
- if (item[key] != e[key]) {
- continue predicateLoop;
- }
- }
- return tryCatch(cb).call(boundTo, e);
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getSource = void 0;
+const core = __importStar(__webpack_require__(470));
+const io = __importStar(__webpack_require__(1));
+const path = __importStar(__webpack_require__(622));
+const fs_extra_1 = __importDefault(__webpack_require__(226));
+const git_command_manager_1 = __webpack_require__(289);
+const git_auth_helper_1 = __webpack_require__(287);
+const refHelper = __importStar(__webpack_require__(227));
+const stateHelper = __importStar(__webpack_require__(153));
+function getSource(githubManager, settings, repositoryUrl, repositoryPath, ref, // ref
+fetchDepth = 0) {
+ return __awaiter(this, void 0, void 0, function* () {
+ // Repository URL
+ core.info(`Cloning repository: ${repositoryUrl}`);
+ // Remove conflicting file path
+ if (fs_extra_1.default.existsSync(repositoryPath)) {
+ yield io.rmRF(repositoryPath);
+ }
+ // Create directory
+ let isExisting = true;
+ if (!fs_extra_1.default.existsSync(repositoryPath)) {
+ isExisting = false;
+ yield io.mkdirP(repositoryPath);
+ }
+ // Git command manager
+ core.startGroup("Getting Git version info");
+ const git = yield gitCommandManager(repositoryPath);
+ core.endGroup();
+ // Prepare existing directory, otherwise recreate
+ if (isExisting) {
+ core.info(`Deleting the contents of '${repositoryPath}'`);
+ for (const file of yield fs_extra_1.default.promises.readdir(repositoryPath)) {
+ yield io.rmRF(path.join(repositoryPath, file));
}
}
- return NEXT_FILTER;
- };
+ if (!git) {
+ // Downloading using REST API
+ core.info(`The repository will be downloaded using the GitHub REST API`);
+ core.info(`To create a local Git repository instead, add Git ${git_command_manager_1.MinimumGitVersion} or higher to the PATH`);
+ if (settings.sshKey) {
+ throw new Error(`Input 'ssh-key' not supported when falling back to download using the GitHub REST API. To create a local Git repository instead, add Git ${git_command_manager_1.MinimumGitVersion} or higher to the PATH.`);
+ }
+ const [templateRepositoryOwner, templateRepositoryName] = repositoryPath.split("/");
+ yield githubManager.repos.downloadRepository(templateRepositoryOwner, templateRepositoryName, ref);
+ return;
+ }
+ // Save state for POST action
+ stateHelper.setTemplateRepositoryPath(repositoryPath);
+ // Initialize the repository
+ if (!fs_extra_1.default.existsSync(path.join(repositoryPath, ".git"))) {
+ core.startGroup("Initializing the repository");
+ yield git.init();
+ yield git.remoteAdd("origin", repositoryUrl);
+ core.endGroup();
+ }
+ // Disable automatic garbage collection
+ core.startGroup("Disabling automatic garbage collection");
+ if (!(yield git.tryDisableAutomaticGarbageCollection())) {
+ core.warning(`Unable to turn off git automatic garbage collection. The git fetch operation may trigger garbage collection and cause a delay.`);
+ }
+ core.endGroup();
+ const authHelper = new git_auth_helper_1.GitAuthHelper(git, settings);
+ try {
+ // Configure auth
+ core.startGroup("Setting up auth");
+ yield authHelper.configureAuth();
+ core.endGroup();
+ // Fetch
+ core.startGroup("Fetching the repository");
+ const refSpec = refHelper.getRefSpec(ref);
+ yield git.fetch(fetchDepth, refSpec);
+ core.endGroup();
+ // Checkout info
+ core.startGroup("Determining the checkout info");
+ const checkoutInfo = yield refHelper.getCheckoutInfo(git, ref);
+ core.endGroup();
+ // Checkout
+ core.startGroup("Checking out the ref");
+ yield git.checkout(checkoutInfo.ref, checkoutInfo.startPoint);
+ core.endGroup();
+ // Dump some info about the checked out commit
+ yield git.log1();
+ }
+ finally {
+ // Remove auth
+ if (!settings.persistCredentials) {
+ core.startGroup("Removing auth");
+ yield authHelper.removeAuth();
+ core.endGroup();
+ }
+ }
+ });
+}
+exports.getSource = getSource;
+function gitCommandManager(repositoryPath) {
+ return __awaiter(this, void 0, void 0, function* () {
+ core.info(`Working directory is '${repositoryPath}'`);
+ try {
+ const manager = yield git_command_manager_1.createCommandManager(repositoryPath);
+ manager.checkGitVersion();
+ return manager;
+ }
+ catch (err) {
+ // Otherwise fallback to REST API
+ return undefined;
+ }
+ });
}
-
-return catchFilter;
-};
/***/ }),
-/* 254 */,
-/* 255 */,
-/* 256 */,
-/* 257 */,
-/* 258 */,
-/* 259 */,
-/* 260 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-// Note: since nyc uses this module to output coverage, any lines
-// that are in the direct sync flow of nyc's outputCoverage are
-// ignored, since we can never get coverage for them.
-var assert = __webpack_require__(357)
-var signals = __webpack_require__(654)
-var isWin = /^win/i.test(process.platform)
+/***/ 299:
+/***/ (function(__unusedmodule, exports) {
-var EE = __webpack_require__(614)
-/* istanbul ignore if */
-if (typeof EE !== 'function') {
- EE = EE.EventEmitter
-}
+"use strict";
-var emitter
-if (process.__signal_exit_emitter__) {
- emitter = process.__signal_exit_emitter__
-} else {
- emitter = process.__signal_exit_emitter__ = new EE()
- emitter.count = 0
- emitter.emitted = {}
-}
-// Because this emitter is a global, we have to check to see if a
-// previous version of this library failed to enable infinite listeners.
-// I know what you're about to say. But literally everything about
-// signal-exit is a compromise with evil. Get used to it.
-if (!emitter.infinite) {
- emitter.setMaxListeners(Infinity)
- emitter.infinite = true
-}
+Object.defineProperty(exports, '__esModule', { value: true });
-module.exports = function (cb, opts) {
- assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')
+const VERSION = "2.10.0";
- if (loaded === false) {
- load()
- }
+/**
+ * Some “list” response that can be paginated have a different response structure
+ *
+ * They have a `total_count` key in the response (search also has `incomplete_results`,
+ * /installation/repositories also has `repository_selection`), as well as a key with
+ * the list of the items which name varies from endpoint to endpoint.
+ *
+ * Octokit normalizes these responses so that paginated results are always returned following
+ * the same structure. One challenge is that if the list response has only one page, no Link
+ * header is provided, so this header alone is not sufficient to check wether a response is
+ * paginated or not.
+ *
+ * We check if a "total_count" key is present in the response data, but also make sure that
+ * a "url" property is not, as the "Get the combined status for a specific ref" endpoint would
+ * otherwise match: https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref
+ */
+function normalizePaginatedListResponse(response) {
+ const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data);
+ if (!responseNeedsNormalization) return response; // keep the additional properties intact as there is currently no other way
+ // to retrieve the same information.
- var ev = 'exit'
- if (opts && opts.alwaysLast) {
- ev = 'afterexit'
- }
+ const incompleteResults = response.data.incomplete_results;
+ const repositorySelection = response.data.repository_selection;
+ const totalCount = response.data.total_count;
+ delete response.data.incomplete_results;
+ delete response.data.repository_selection;
+ delete response.data.total_count;
+ const namespaceKey = Object.keys(response.data)[0];
+ const data = response.data[namespaceKey];
+ response.data = data;
- var remove = function () {
- emitter.removeListener(ev, cb)
- if (emitter.listeners('exit').length === 0 &&
- emitter.listeners('afterexit').length === 0) {
- unload()
- }
+ if (typeof incompleteResults !== "undefined") {
+ response.data.incomplete_results = incompleteResults;
}
- emitter.on(ev, cb)
-
- return remove
-}
-module.exports.unload = unload
-function unload () {
- if (!loaded) {
- return
+ if (typeof repositorySelection !== "undefined") {
+ response.data.repository_selection = repositorySelection;
}
- loaded = false
- signals.forEach(function (sig) {
- try {
- process.removeListener(sig, sigListeners[sig])
- } catch (er) {}
- })
- process.emit = originalProcessEmit
- process.reallyExit = originalProcessReallyExit
- emitter.count -= 1
+ response.data.total_count = totalCount;
+ return response;
}
-function emit (event, code, signal) {
- if (emitter.emitted[event]) {
- return
- }
- emitter.emitted[event] = true
- emitter.emit(event, code, signal)
-}
-
-// { : , ... }
-var sigListeners = {}
-signals.forEach(function (sig) {
- sigListeners[sig] = function listener () {
- // If there are no other listeners, an exit is coming!
- // Simplest way: remove us and then re-send the signal.
- // We know that this will kill the process, so we can
- // safely emit now.
- var listeners = process.listeners(sig)
- if (listeners.length === emitter.count) {
- unload()
- emit('exit', null, sig)
- /* istanbul ignore next */
- emit('afterexit', null, sig)
- /* istanbul ignore next */
- if (isWin && sig === 'SIGHUP') {
- // "SIGHUP" throws an `ENOSYS` error on Windows,
- // so use a supported signal instead
- sig = 'SIGINT'
- }
- process.kill(process.pid, sig)
- }
- }
-})
+function iterator(octokit, route, parameters) {
+ const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters);
+ const requestMethod = typeof route === "function" ? route : octokit.request;
+ const method = options.method;
+ const headers = options.headers;
+ let url = options.url;
+ return {
+ [Symbol.asyncIterator]: () => ({
+ async next() {
+ if (!url) return {
+ done: true
+ };
+ const response = await requestMethod({
+ method,
+ url,
+ headers
+ });
+ const normalizedResponse = normalizePaginatedListResponse(response); // `response.headers.link` format:
+ // '; rel="next", ; rel="last"'
+ // sets `url` to undefined if "next" URL is not present or `link` header is not set
-module.exports.signals = function () {
- return signals
-}
+ url = ((normalizedResponse.headers.link || "").match(/<([^>]+)>;\s*rel="next"/) || [])[1];
+ return {
+ value: normalizedResponse
+ };
+ }
-module.exports.load = load
-
-var loaded = false
+ })
+ };
+}
-function load () {
- if (loaded) {
- return
+function paginate(octokit, route, parameters, mapFn) {
+ if (typeof parameters === "function") {
+ mapFn = parameters;
+ parameters = undefined;
}
- loaded = true
- // This is the number of onSignalExit's that are in play.
- // It's important so that we can count the correct number of
- // listeners on signals, and don't wait for the other one to
- // handle it instead of us.
- emitter.count += 1
+ return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn);
+}
- signals = signals.filter(function (sig) {
- try {
- process.on(sig, sigListeners[sig])
- return true
- } catch (er) {
- return false
+function gather(octokit, results, iterator, mapFn) {
+ return iterator.next().then(result => {
+ if (result.done) {
+ return results;
}
- })
- process.emit = processEmit
- process.reallyExit = processReallyExit
-}
+ let earlyExit = false;
-var originalProcessReallyExit = process.reallyExit
-function processReallyExit (code) {
- process.exitCode = code || 0
- emit('exit', process.exitCode, null)
- /* istanbul ignore next */
- emit('afterexit', process.exitCode, null)
- /* istanbul ignore next */
- originalProcessReallyExit.call(process, process.exitCode)
-}
+ function done() {
+ earlyExit = true;
+ }
-var originalProcessEmit = process.emit
-function processEmit (ev, arg) {
- if (ev === 'exit') {
- if (arg !== undefined) {
- process.exitCode = arg
+ results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data);
+
+ if (earlyExit) {
+ return results;
}
- var ret = originalProcessEmit.apply(this, arguments)
- emit('exit', process.exitCode, null)
- /* istanbul ignore next */
- emit('afterexit', process.exitCode, null)
- return ret
- } else {
- return originalProcessEmit.apply(this, arguments)
- }
+
+ return gather(octokit, results, iterator, mapFn);
+ });
+}
+
+const composePaginateRest = Object.assign(paginate, {
+ iterator
+});
+
+/**
+ * @param octokit Octokit instance
+ * @param options Options passed to Octokit constructor
+ */
+
+function paginateRest(octokit) {
+ return {
+ paginate: Object.assign(paginate.bind(null, octokit), {
+ iterator: iterator.bind(null, octokit)
+ })
+ };
}
+paginateRest.VERSION = VERSION;
+
+exports.composePaginateRest = composePaginateRest;
+exports.paginateRest = paginateRest;
+//# sourceMappingURL=index.js.map
+
+
+/***/ }),
+
+/***/ 303:
+/***/ (function(module) {
+module.exports = require("async_hooks");
/***/ }),
-/* 261 */,
-/* 262 */,
-/* 263 */,
-/* 264 */,
-/* 265 */,
-/* 266 */
+
+/***/ 306:
/***/ (function(module, __unusedexports, __webpack_require__) {
-module.exports = which
-which.sync = whichSync
+var concatMap = __webpack_require__(896);
+var balanced = __webpack_require__(621);
-var isWindows = process.platform === 'win32' ||
- process.env.OSTYPE === 'cygwin' ||
- process.env.OSTYPE === 'msys'
+module.exports = expandTop;
-var path = __webpack_require__(622)
-var COLON = isWindows ? ';' : ':'
-var isexe = __webpack_require__(742)
+var escSlash = '\0SLASH'+Math.random()+'\0';
+var escOpen = '\0OPEN'+Math.random()+'\0';
+var escClose = '\0CLOSE'+Math.random()+'\0';
+var escComma = '\0COMMA'+Math.random()+'\0';
+var escPeriod = '\0PERIOD'+Math.random()+'\0';
-function getNotFoundError (cmd) {
- var er = new Error('not found: ' + cmd)
- er.code = 'ENOENT'
+function numeric(str) {
+ return parseInt(str, 10) == str
+ ? parseInt(str, 10)
+ : str.charCodeAt(0);
+}
- return er
+function escapeBraces(str) {
+ return str.split('\\\\').join(escSlash)
+ .split('\\{').join(escOpen)
+ .split('\\}').join(escClose)
+ .split('\\,').join(escComma)
+ .split('\\.').join(escPeriod);
}
-function getPathInfo (cmd, opt) {
- var colon = opt.colon || COLON
- var pathEnv = opt.path || process.env.PATH || ''
- var pathExt = ['']
+function unescapeBraces(str) {
+ return str.split(escSlash).join('\\')
+ .split(escOpen).join('{')
+ .split(escClose).join('}')
+ .split(escComma).join(',')
+ .split(escPeriod).join('.');
+}
- pathEnv = pathEnv.split(colon)
- var pathExtExe = ''
- if (isWindows) {
- pathEnv.unshift(process.cwd())
- pathExtExe = (opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM')
- pathExt = pathExtExe.split(colon)
+// Basically just str.split(","), but handling cases
+// where we have nested braced sections, which should be
+// treated as individual members, like {a,{b,c},d}
+function parseCommaParts(str) {
+ if (!str)
+ return [''];
+ var parts = [];
+ var m = balanced('{', '}', str);
- // Always test the cmd itself first. isexe will check to make sure
- // it's found in the pathExt set.
- if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')
- pathExt.unshift('')
- }
+ if (!m)
+ return str.split(',');
- // If it has a slash, then we don't bother searching the pathenv.
- // just check the file itself, and that's it.
- if (cmd.match(/\//) || isWindows && cmd.match(/\\/))
- pathEnv = ['']
+ var pre = m.pre;
+ var body = m.body;
+ var post = m.post;
+ var p = pre.split(',');
- return {
- env: pathEnv,
- ext: pathExt,
- extExe: pathExtExe
+ p[p.length-1] += '{' + body + '}';
+ var postParts = parseCommaParts(post);
+ if (post.length) {
+ p[p.length-1] += postParts.shift();
+ p.push.apply(p, postParts);
}
+
+ parts.push.apply(parts, p);
+
+ return parts;
}
-function which (cmd, opt, cb) {
- if (typeof opt === 'function') {
- cb = opt
- opt = {}
+function expandTop(str) {
+ if (!str)
+ return [];
+
+ // I don't know why Bash 4.3 does this, but it does.
+ // Anything starting with {} will have the first two bytes preserved
+ // but *only* at the top level, so {},a}b will not expand to anything,
+ // but a{},b}c will be expanded to [a}c,abc].
+ // One could argue that this is a bug in Bash, but since the goal of
+ // this module is to match Bash's rules, we escape a leading {}
+ if (str.substr(0, 2) === '{}') {
+ str = '\\{\\}' + str.substr(2);
}
- var info = getPathInfo(cmd, opt)
- var pathEnv = info.env
- var pathExt = info.ext
- var pathExtExe = info.extExe
- var found = []
+ return expand(escapeBraces(str), true).map(unescapeBraces);
+}
- ;(function F (i, l) {
- if (i === l) {
- if (opt.all && found.length)
- return cb(null, found)
- else
- return cb(getNotFoundError(cmd))
- }
+function identity(e) {
+ return e;
+}
- var pathPart = pathEnv[i]
- if (pathPart.charAt(0) === '"' && pathPart.slice(-1) === '"')
- pathPart = pathPart.slice(1, -1)
+function embrace(str) {
+ return '{' + str + '}';
+}
+function isPadded(el) {
+ return /^-?0\d/.test(el);
+}
- var p = path.join(pathPart, cmd)
- if (!pathPart && (/^\.[\\\/]/).test(cmd)) {
- p = cmd.slice(0, 2) + p
- }
- ;(function E (ii, ll) {
- if (ii === ll) return F(i + 1, l)
- var ext = pathExt[ii]
- isexe(p + ext, { pathExt: pathExtExe }, function (er, is) {
- if (!er && is) {
- if (opt.all)
- found.push(p + ext)
- else
- return cb(null, p + ext)
- }
- return E(ii + 1, ll)
- })
- })(0, pathExt.length)
- })(0, pathEnv.length)
+function lte(i, y) {
+ return i <= y;
+}
+function gte(i, y) {
+ return i >= y;
}
-function whichSync (cmd, opt) {
- opt = opt || {}
+function expand(str, isTop) {
+ var expansions = [];
- var info = getPathInfo(cmd, opt)
- var pathEnv = info.env
- var pathExt = info.ext
- var pathExtExe = info.extExe
- var found = []
+ var m = balanced('{', '}', str);
+ if (!m || /\$$/.test(m.pre)) return [str];
- for (var i = 0, l = pathEnv.length; i < l; i ++) {
- var pathPart = pathEnv[i]
- if (pathPart.charAt(0) === '"' && pathPart.slice(-1) === '"')
- pathPart = pathPart.slice(1, -1)
+ var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
+ var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
+ var isSequence = isNumericSequence || isAlphaSequence;
+ var isOptions = m.body.indexOf(',') >= 0;
+ if (!isSequence && !isOptions) {
+ // {a},b}
+ if (m.post.match(/,.*\}/)) {
+ str = m.pre + '{' + m.body + escClose + m.post;
+ return expand(str);
+ }
+ return [str];
+ }
- var p = path.join(pathPart, cmd)
- if (!pathPart && /^\.[\\\/]/.test(cmd)) {
- p = cmd.slice(0, 2) + p
+ var n;
+ if (isSequence) {
+ n = m.body.split(/\.\./);
+ } else {
+ n = parseCommaParts(m.body);
+ if (n.length === 1) {
+ // x{{a,b}}y ==> x{a}y x{b}y
+ n = expand(n[0], false).map(embrace);
+ if (n.length === 1) {
+ var post = m.post.length
+ ? expand(m.post, false)
+ : [''];
+ return post.map(function(p) {
+ return m.pre + n[0] + p;
+ });
+ }
}
- for (var j = 0, ll = pathExt.length; j < ll; j ++) {
- var cur = p + pathExt[j]
- var is
- try {
- is = isexe.sync(cur, { pathExt: pathExtExe })
- if (is) {
- if (opt.all)
- found.push(cur)
- else
- return cur
+ }
+
+ // at this point, n is the parts, and we know it's not a comma set
+ // with a single entry.
+
+ // no need to expand pre, since it is guaranteed to be free of brace-sets
+ var pre = m.pre;
+ var post = m.post.length
+ ? expand(m.post, false)
+ : [''];
+
+ var N;
+
+ if (isSequence) {
+ var x = numeric(n[0]);
+ var y = numeric(n[1]);
+ var width = Math.max(n[0].length, n[1].length)
+ var incr = n.length == 3
+ ? Math.abs(numeric(n[2]))
+ : 1;
+ var test = lte;
+ var reverse = y < x;
+ if (reverse) {
+ incr *= -1;
+ test = gte;
+ }
+ var pad = n.some(isPadded);
+
+ N = [];
+
+ for (var i = x; test(i, y); i += incr) {
+ var c;
+ if (isAlphaSequence) {
+ c = String.fromCharCode(i);
+ if (c === '\\')
+ c = '';
+ } else {
+ c = String(i);
+ if (pad) {
+ var need = width - c.length;
+ if (need > 0) {
+ var z = new Array(need + 1).join('0');
+ if (i < 0)
+ c = '-' + z + c.slice(1);
+ else
+ c = z + c;
+ }
}
- } catch (ex) {}
+ }
+ N.push(c);
+ }
+ } else {
+ N = concatMap(n, function(el) { return expand(el, false) });
+ }
+
+ for (var j = 0; j < N.length; j++) {
+ for (var k = 0; k < post.length; k++) {
+ var expansion = pre + N[j] + post[k];
+ if (!isTop || isSequence || expansion)
+ expansions.push(expansion);
}
}
- if (opt.all && found.length)
- return found
+ return expansions;
+}
- if (opt.nothrow)
- return null
- throw getNotFoundError(cmd)
+
+/***/ }),
+
+/***/ 315:
+/***/ (function(module) {
+
+"use strict";
+
+module.exports = function(Promise) {
+function returner() {
+ return this.value;
+}
+function thrower() {
+ throw this.reason;
}
+Promise.prototype["return"] =
+Promise.prototype.thenReturn = function (value) {
+ if (value instanceof Promise) value.suppressUnhandledRejections();
+ return this._then(
+ returner, undefined, undefined, {value: value}, undefined);
+};
+
+Promise.prototype["throw"] =
+Promise.prototype.thenThrow = function (reason) {
+ return this._then(
+ thrower, undefined, undefined, {reason: reason}, undefined);
+};
+
+Promise.prototype.catchThrow = function (reason) {
+ if (arguments.length <= 1) {
+ return this._then(
+ undefined, thrower, undefined, {reason: reason}, undefined);
+ } else {
+ var _reason = arguments[1];
+ var handler = function() {throw _reason;};
+ return this.caught(reason, handler);
+ }
+};
+
+Promise.prototype.catchReturn = function (value) {
+ if (arguments.length <= 1) {
+ if (value instanceof Promise) value.suppressUnhandledRejections();
+ return this._then(
+ undefined, returner, undefined, {value: value}, undefined);
+ } else {
+ var _value = arguments[1];
+ if (_value instanceof Promise) _value.suppressUnhandledRejections();
+ var handler = function() {return _value;};
+ return this.caught(value, handler);
+ }
+};
+};
+
/***/ }),
-/* 267 */,
-/* 268 */,
-/* 269 */,
-/* 270 */,
-/* 271 */,
-/* 272 */
+
+/***/ 321:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
-module.exports = function(Promise, Context,
- enableAsyncHooks, disableAsyncHooks) {
-var async = Promise._async;
-var Warning = __webpack_require__(607).Warning;
+module.exports = function(
+ Promise, PromiseArray, tryConvertToPromise, apiRejection) {
var util = __webpack_require__(248);
+var isObject = util.isObject;
var es5 = __webpack_require__(883);
-var canAttachTrace = util.canAttachTrace;
-var unhandledRejectionHandled;
-var possiblyUnhandledRejection;
-var bluebirdFramePattern =
- /[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/;
-var nodeFramePattern = /\((?:timers\.js):\d+:\d+\)/;
-var parseLinePattern = /[\/<\(](.+?):(\d+):(\d+)\)?\s*$/;
-var stackFramePattern = null;
-var formatStack = null;
-var indentStackFrames = false;
-var printWarning;
-var debugging = !!(util.env("BLUEBIRD_DEBUG") != 0 &&
- ( false ||
- util.env("BLUEBIRD_DEBUG") ||
- util.env("NODE_ENV") === "development"));
-
-var warnings = !!(util.env("BLUEBIRD_WARNINGS") != 0 &&
- (debugging || util.env("BLUEBIRD_WARNINGS")));
+var Es6Map;
+if (typeof Map === "function") Es6Map = Map;
-var longStackTraces = !!(util.env("BLUEBIRD_LONG_STACK_TRACES") != 0 &&
- (debugging || util.env("BLUEBIRD_LONG_STACK_TRACES")));
+var mapToEntries = (function() {
+ var index = 0;
+ var size = 0;
-var wForgottenReturn = util.env("BLUEBIRD_W_FORGOTTEN_RETURN") != 0 &&
- (warnings || !!util.env("BLUEBIRD_W_FORGOTTEN_RETURN"));
+ function extractEntry(value, key) {
+ this[index] = value;
+ this[index + size] = key;
+ index++;
+ }
-var deferUnhandledRejectionCheck;
-(function() {
- var promises = [];
+ return function mapToEntries(map) {
+ size = map.size;
+ index = 0;
+ var ret = new Array(map.size * 2);
+ map.forEach(extractEntry, ret);
+ return ret;
+ };
+})();
- function unhandledRejectionCheck() {
- for (var i = 0; i < promises.length; ++i) {
- promises[i]._notifyUnhandledRejection();
- }
- unhandledRejectionClear();
+var entriesToMap = function(entries) {
+ var ret = new Es6Map();
+ var length = entries.length / 2 | 0;
+ for (var i = 0; i < length; ++i) {
+ var key = entries[length + i];
+ var value = entries[i];
+ ret.set(key, value);
}
+ return ret;
+};
- function unhandledRejectionClear() {
- promises.length = 0;
+function PropertiesPromiseArray(obj) {
+ var isMap = false;
+ var entries;
+ if (Es6Map !== undefined && obj instanceof Es6Map) {
+ entries = mapToEntries(obj);
+ isMap = true;
+ } else {
+ var keys = es5.keys(obj);
+ var len = keys.length;
+ entries = new Array(len * 2);
+ for (var i = 0; i < len; ++i) {
+ var key = keys[i];
+ entries[i] = obj[key];
+ entries[i + len] = key;
+ }
}
+ this.constructor$(entries);
+ this._isMap = isMap;
+ this._init$(undefined, isMap ? -6 : -3);
+}
+util.inherits(PropertiesPromiseArray, PromiseArray);
- deferUnhandledRejectionCheck = function(promise) {
- promises.push(promise);
- setTimeout(unhandledRejectionCheck, 1);
- };
-
- es5.defineProperty(Promise, "_unhandledRejectionCheck", {
- value: unhandledRejectionCheck
- });
- es5.defineProperty(Promise, "_unhandledRejectionClear", {
- value: unhandledRejectionClear
- });
-})();
+PropertiesPromiseArray.prototype._init = function () {};
-Promise.prototype.suppressUnhandledRejections = function() {
- var target = this._target();
- target._bitField = ((target._bitField & (~1048576)) |
- 524288);
+PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {
+ this._values[index] = value;
+ var totalResolved = ++this._totalResolved;
+ if (totalResolved >= this._length) {
+ var val;
+ if (this._isMap) {
+ val = entriesToMap(this._values);
+ } else {
+ val = {};
+ var keyOffset = this.length();
+ for (var i = 0, len = this.length(); i < len; ++i) {
+ val[this._values[i + keyOffset]] = this._values[i];
+ }
+ }
+ this._resolve(val);
+ return true;
+ }
+ return false;
};
-Promise.prototype._ensurePossibleRejectionHandled = function () {
- if ((this._bitField & 524288) !== 0) return;
- this._setRejectionIsUnhandled();
- deferUnhandledRejectionCheck(this);
+PropertiesPromiseArray.prototype.shouldCopyValues = function () {
+ return false;
};
-Promise.prototype._notifyUnhandledRejectionIsHandled = function () {
- fireRejectionEvent("rejectionHandled",
- unhandledRejectionHandled, undefined, this);
+PropertiesPromiseArray.prototype.getActualLength = function (len) {
+ return len >> 1;
};
-Promise.prototype._setReturnedNonUndefined = function() {
- this._bitField = this._bitField | 268435456;
-};
+function props(promises) {
+ var ret;
+ var castValue = tryConvertToPromise(promises);
-Promise.prototype._returnedNonUndefined = function() {
- return (this._bitField & 268435456) !== 0;
-};
+ if (!isObject(castValue)) {
+ return apiRejection("cannot await properties of a non-object\u000a\u000a See http://goo.gl/MqrFmX\u000a");
+ } else if (castValue instanceof Promise) {
+ ret = castValue._then(
+ Promise.props, undefined, undefined, undefined, undefined);
+ } else {
+ ret = new PropertiesPromiseArray(castValue).promise();
+ }
-Promise.prototype._notifyUnhandledRejection = function () {
- if (this._isRejectionUnhandled()) {
- var reason = this._settledValue();
- this._setUnhandledRejectionIsNotified();
- fireRejectionEvent("unhandledRejection",
- possiblyUnhandledRejection, reason, this);
+ if (castValue instanceof Promise) {
+ ret._propagateFrom(castValue, 2);
}
-};
+ return ret;
+}
-Promise.prototype._setUnhandledRejectionIsNotified = function () {
- this._bitField = this._bitField | 262144;
+Promise.prototype.props = function () {
+ return props(this);
};
-Promise.prototype._unsetUnhandledRejectionIsNotified = function () {
- this._bitField = this._bitField & (~262144);
+Promise.props = function (promises) {
+ return props(promises);
};
-
-Promise.prototype._isUnhandledRejectionNotified = function () {
- return (this._bitField & 262144) > 0;
};
-Promise.prototype._setRejectionIsUnhandled = function () {
- this._bitField = this._bitField | 1048576;
-};
-Promise.prototype._unsetRejectionIsUnhandled = function () {
- this._bitField = this._bitField & (~1048576);
- if (this._isUnhandledRejectionNotified()) {
- this._unsetUnhandledRejectionIsNotified();
- this._notifyUnhandledRejectionIsHandled();
- }
-};
+/***/ }),
-Promise.prototype._isRejectionUnhandled = function () {
- return (this._bitField & 1048576) > 0;
-};
+/***/ 322:
+/***/ (function(module, __unusedexports, __webpack_require__) {
-Promise.prototype._warn = function(message, shouldUseOwnTrace, promise) {
- return warn(message, shouldUseOwnTrace, promise || this);
-};
+"use strict";
-Promise.onPossiblyUnhandledRejection = function (fn) {
- var context = Promise._getContext();
- possiblyUnhandledRejection = util.contextBind(context, fn);
-};
+const u = __webpack_require__(676).fromPromise
+const fs = __webpack_require__(869)
-Promise.onUnhandledRejectionHandled = function (fn) {
- var context = Promise._getContext();
- unhandledRejectionHandled = util.contextBind(context, fn);
-};
+function pathExists (path) {
+ return fs.access(path).then(() => true).catch(() => false)
+}
-var disableLongStackTraces = function() {};
-Promise.longStackTraces = function () {
- if (async.haveItemsQueued() && !config.longStackTraces) {
- throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a");
- }
- if (!config.longStackTraces && longStackTracesIsSupported()) {
- var Promise_captureStackTrace = Promise.prototype._captureStackTrace;
- var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace;
- var Promise_dereferenceTrace = Promise.prototype._dereferenceTrace;
- config.longStackTraces = true;
- disableLongStackTraces = function() {
- if (async.haveItemsQueued() && !config.longStackTraces) {
- throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a");
- }
- Promise.prototype._captureStackTrace = Promise_captureStackTrace;
- Promise.prototype._attachExtraTrace = Promise_attachExtraTrace;
- Promise.prototype._dereferenceTrace = Promise_dereferenceTrace;
- Context.deactivateLongStackTraces();
- config.longStackTraces = false;
- };
- Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace;
- Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace;
- Promise.prototype._dereferenceTrace = longStackTracesDereferenceTrace;
- Context.activateLongStackTraces();
- }
-};
+module.exports = {
+ pathExists: u(pathExists),
+ pathExistsSync: fs.existsSync
+}
-Promise.hasLongStackTraces = function () {
- return config.longStackTraces && longStackTracesIsSupported();
-};
+/***/ }),
-var legacyHandlers = {
- unhandledrejection: {
- before: function() {
- var ret = util.global.onunhandledrejection;
- util.global.onunhandledrejection = null;
- return ret;
- },
- after: function(fn) {
- util.global.onunhandledrejection = fn;
- }
- },
- rejectionhandled: {
- before: function() {
- var ret = util.global.onrejectionhandled;
- util.global.onrejectionhandled = null;
- return ret;
- },
- after: function(fn) {
- util.global.onrejectionhandled = fn;
- }
- }
-};
+/***/ 323:
+/***/ (function(module, __unusedexports, __webpack_require__) {
-var fireDomEvent = (function() {
- var dispatch = function(legacy, e) {
- if (legacy) {
- var fn;
- try {
- fn = legacy.before();
- return !util.global.dispatchEvent(e);
- } finally {
- legacy.after(fn);
- }
- } else {
- return !util.global.dispatchEvent(e);
- }
- };
- try {
- if (typeof CustomEvent === "function") {
- var event = new CustomEvent("CustomEvent");
- util.global.dispatchEvent(event);
- return function(name, event) {
- name = name.toLowerCase();
- var eventData = {
- detail: event,
- cancelable: true
- };
- var domEvent = new CustomEvent(name, eventData);
- es5.defineProperty(
- domEvent, "promise", {value: event.promise});
- es5.defineProperty(
- domEvent, "reason", {value: event.reason});
+"use strict";
- return dispatch(legacyHandlers[name], domEvent);
- };
- } else if (typeof Event === "function") {
- var event = new Event("CustomEvent");
- util.global.dispatchEvent(event);
- return function(name, event) {
- name = name.toLowerCase();
- var domEvent = new Event(name, {
- cancelable: true
- });
- domEvent.detail = event;
- es5.defineProperty(domEvent, "promise", {value: event.promise});
- es5.defineProperty(domEvent, "reason", {value: event.reason});
- return dispatch(legacyHandlers[name], domEvent);
- };
- } else {
- var event = document.createEvent("CustomEvent");
- event.initCustomEvent("testingtheevent", false, true, {});
- util.global.dispatchEvent(event);
- return function(name, event) {
- name = name.toLowerCase();
- var domEvent = document.createEvent("CustomEvent");
- domEvent.initCustomEvent(name, false, true,
- event);
- return dispatch(legacyHandlers[name], domEvent);
- };
- }
- } catch (e) {}
- return function() {
- return false;
- };
-})();
+module.exports =
+function(Promise, PromiseArray, apiRejection) {
+var util = __webpack_require__(248);
+var RangeError = __webpack_require__(607).RangeError;
+var AggregateError = __webpack_require__(607).AggregateError;
+var isArray = util.isArray;
+var CANCELLATION = {};
-var fireGlobalEvent = (function() {
- if (util.isNode) {
- return function() {
- return process.emit.apply(process, arguments);
- };
- } else {
- if (!util.global) {
- return function() {
- return false;
- };
- }
- return function(name) {
- var methodName = "on" + name.toLowerCase();
- var method = util.global[methodName];
- if (!method) return false;
- method.apply(util.global, [].slice.call(arguments, 1));
- return true;
- };
- }
-})();
-function generatePromiseLifecycleEventObject(name, promise) {
- return {promise: promise};
+function SomePromiseArray(values) {
+ this.constructor$(values);
+ this._howMany = 0;
+ this._unwrap = false;
+ this._initialized = false;
}
+util.inherits(SomePromiseArray, PromiseArray);
-var eventToObjectGenerator = {
- promiseCreated: generatePromiseLifecycleEventObject,
- promiseFulfilled: generatePromiseLifecycleEventObject,
- promiseRejected: generatePromiseLifecycleEventObject,
- promiseResolved: generatePromiseLifecycleEventObject,
- promiseCancelled: generatePromiseLifecycleEventObject,
- promiseChained: function(name, promise, child) {
- return {promise: promise, child: child};
- },
- warning: function(name, warning) {
- return {warning: warning};
- },
- unhandledRejection: function (name, reason, promise) {
- return {reason: reason, promise: promise};
- },
- rejectionHandled: generatePromiseLifecycleEventObject
+SomePromiseArray.prototype._init = function () {
+ if (!this._initialized) {
+ return;
+ }
+ if (this._howMany === 0) {
+ this._resolve([]);
+ return;
+ }
+ this._init$(undefined, -5);
+ var isArrayResolved = isArray(this._values);
+ if (!this._isResolved() &&
+ isArrayResolved &&
+ this._howMany > this._canPossiblyFulfill()) {
+ this._reject(this._getRangeError(this.length()));
+ }
};
-var activeFireEvent = function (name) {
- var globalEventFired = false;
- try {
- globalEventFired = fireGlobalEvent.apply(null, arguments);
- } catch (e) {
- async.throwLater(e);
- globalEventFired = true;
- }
+SomePromiseArray.prototype.init = function () {
+ this._initialized = true;
+ this._init();
+};
- var domEventFired = false;
- try {
- domEventFired = fireDomEvent(name,
- eventToObjectGenerator[name].apply(null, arguments));
- } catch (e) {
- async.throwLater(e);
- domEventFired = true;
- }
+SomePromiseArray.prototype.setUnwrap = function () {
+ this._unwrap = true;
+};
- return domEventFired || globalEventFired;
+SomePromiseArray.prototype.howMany = function () {
+ return this._howMany;
};
-Promise.config = function(opts) {
- opts = Object(opts);
- if ("longStackTraces" in opts) {
- if (opts.longStackTraces) {
- Promise.longStackTraces();
- } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) {
- disableLongStackTraces();
- }
- }
- if ("warnings" in opts) {
- var warningsOption = opts.warnings;
- config.warnings = !!warningsOption;
- wForgottenReturn = config.warnings;
+SomePromiseArray.prototype.setHowMany = function (count) {
+ this._howMany = count;
+};
- if (util.isObject(warningsOption)) {
- if ("wForgottenReturn" in warningsOption) {
- wForgottenReturn = !!warningsOption.wForgottenReturn;
- }
- }
- }
- if ("cancellation" in opts && opts.cancellation && !config.cancellation) {
- if (async.haveItemsQueued()) {
- throw new Error(
- "cannot enable cancellation after promises are in use");
+SomePromiseArray.prototype._promiseFulfilled = function (value) {
+ this._addFulfilled(value);
+ if (this._fulfilled() === this.howMany()) {
+ this._values.length = this.howMany();
+ if (this.howMany() === 1 && this._unwrap) {
+ this._resolve(this._values[0]);
+ } else {
+ this._resolve(this._values);
}
- Promise.prototype._clearCancellationData =
- cancellationClearCancellationData;
- Promise.prototype._propagateFrom = cancellationPropagateFrom;
- Promise.prototype._onCancel = cancellationOnCancel;
- Promise.prototype._setOnCancel = cancellationSetOnCancel;
- Promise.prototype._attachCancellationCallback =
- cancellationAttachCancellationCallback;
- Promise.prototype._execute = cancellationExecute;
- propagateFromFunction = cancellationPropagateFrom;
- config.cancellation = true;
+ return true;
}
- if ("monitoring" in opts) {
- if (opts.monitoring && !config.monitoring) {
- config.monitoring = true;
- Promise.prototype._fireEvent = activeFireEvent;
- } else if (!opts.monitoring && config.monitoring) {
- config.monitoring = false;
- Promise.prototype._fireEvent = defaultFireEvent;
- }
+ return false;
+
+};
+SomePromiseArray.prototype._promiseRejected = function (reason) {
+ this._addRejected(reason);
+ return this._checkOutcome();
+};
+
+SomePromiseArray.prototype._promiseCancelled = function () {
+ if (this._values instanceof Promise || this._values == null) {
+ return this._cancel();
}
- if ("asyncHooks" in opts && util.nodeSupportsAsyncResource) {
- var prev = config.asyncHooks;
- var cur = !!opts.asyncHooks;
- if (prev !== cur) {
- config.asyncHooks = cur;
- if (cur) {
- enableAsyncHooks();
- } else {
- disableAsyncHooks();
+ this._addRejected(CANCELLATION);
+ return this._checkOutcome();
+};
+
+SomePromiseArray.prototype._checkOutcome = function() {
+ if (this.howMany() > this._canPossiblyFulfill()) {
+ var e = new AggregateError();
+ for (var i = this.length(); i < this._values.length; ++i) {
+ if (this._values[i] !== CANCELLATION) {
+ e.push(this._values[i]);
}
}
+ if (e.length > 0) {
+ this._reject(e);
+ } else {
+ this._cancel();
+ }
+ return true;
}
- return Promise;
+ return false;
};
-function defaultFireEvent() { return false; }
+SomePromiseArray.prototype._fulfilled = function () {
+ return this._totalResolved;
+};
-Promise.prototype._fireEvent = defaultFireEvent;
-Promise.prototype._execute = function(executor, resolve, reject) {
- try {
- executor(resolve, reject);
- } catch (e) {
- return e;
- }
+SomePromiseArray.prototype._rejected = function () {
+ return this._values.length - this.length();
};
-Promise.prototype._onCancel = function () {};
-Promise.prototype._setOnCancel = function (handler) { ; };
-Promise.prototype._attachCancellationCallback = function(onCancel) {
- ;
+
+SomePromiseArray.prototype._addRejected = function (reason) {
+ this._values.push(reason);
};
-Promise.prototype._captureStackTrace = function () {};
-Promise.prototype._attachExtraTrace = function () {};
-Promise.prototype._dereferenceTrace = function () {};
-Promise.prototype._clearCancellationData = function() {};
-Promise.prototype._propagateFrom = function (parent, flags) {
- ;
- ;
+
+SomePromiseArray.prototype._addFulfilled = function (value) {
+ this._values[this._totalResolved++] = value;
};
-function cancellationExecute(executor, resolve, reject) {
- var promise = this;
- try {
- executor(resolve, reject, function(onCancel) {
- if (typeof onCancel !== "function") {
- throw new TypeError("onCancel must be a function, got: " +
- util.toString(onCancel));
- }
- promise._attachCancellationCallback(onCancel);
- });
- } catch (e) {
- return e;
- }
-}
+SomePromiseArray.prototype._canPossiblyFulfill = function () {
+ return this.length() - this._rejected();
+};
-function cancellationAttachCancellationCallback(onCancel) {
- if (!this._isCancellable()) return this;
+SomePromiseArray.prototype._getRangeError = function (count) {
+ var message = "Input array must contain at least " +
+ this._howMany + " items but contains only " + count + " items";
+ return new RangeError(message);
+};
- var previousOnCancel = this._onCancel();
- if (previousOnCancel !== undefined) {
- if (util.isArray(previousOnCancel)) {
- previousOnCancel.push(onCancel);
- } else {
- this._setOnCancel([previousOnCancel, onCancel]);
- }
- } else {
- this._setOnCancel(onCancel);
+SomePromiseArray.prototype._resolveEmptyArray = function () {
+ this._reject(this._getRangeError(0));
+};
+
+function some(promises, howMany) {
+ if ((howMany | 0) !== howMany || howMany < 0) {
+ return apiRejection("expecting a positive integer\u000a\u000a See http://goo.gl/MqrFmX\u000a");
}
+ var ret = new SomePromiseArray(promises);
+ var promise = ret.promise();
+ ret.setHowMany(howMany);
+ ret.init();
+ return promise;
}
-function cancellationOnCancel() {
- return this._onCancelField;
-}
+Promise.some = function (promises, howMany) {
+ return some(promises, howMany);
+};
-function cancellationSetOnCancel(onCancel) {
- this._onCancelField = onCancel;
-}
+Promise.prototype.some = function (howMany) {
+ return some(this, howMany);
+};
-function cancellationClearCancellationData() {
- this._cancellationParent = undefined;
- this._onCancelField = undefined;
-}
+Promise._SomePromiseArray = SomePromiseArray;
+};
-function cancellationPropagateFrom(parent, flags) {
- if ((flags & 1) !== 0) {
- this._cancellationParent = parent;
- var branchesRemainingToCancel = parent._branchesRemainingToCancel;
- if (branchesRemainingToCancel === undefined) {
- branchesRemainingToCancel = 0;
- }
- parent._branchesRemainingToCancel = branchesRemainingToCancel + 1;
- }
- if ((flags & 2) !== 0 && parent._isBound()) {
- this._setBoundTo(parent._boundTo);
- }
-}
-function bindingPropagateFrom(parent, flags) {
- if ((flags & 2) !== 0 && parent._isBound()) {
- this._setBoundTo(parent._boundTo);
- }
-}
-var propagateFromFunction = bindingPropagateFrom;
+/***/ }),
-function boundValueFunction() {
- var ret = this._boundTo;
- if (ret !== undefined) {
- if (ret instanceof Promise) {
- if (ret.isFulfilled()) {
- return ret.value();
- } else {
- return undefined;
- }
- }
- }
- return ret;
-}
+/***/ 327:
+/***/ (function(__unusedmodule, exports) {
-function longStackTracesCaptureStackTrace() {
- this._trace = new CapturedTrace(this._peekContext());
-}
+"use strict";
-function longStackTracesAttachExtraTrace(error, ignoreSelf) {
- if (canAttachTrace(error)) {
- var trace = this._trace;
- if (trace !== undefined) {
- if (ignoreSelf) trace = trace._parent;
- }
- if (trace !== undefined) {
- trace.attachExtraTrace(error);
- } else if (!error.__stackCleaned__) {
- var parsed = parseStackAndMessage(error);
- util.notEnumerableProp(error, "stack",
- parsed.message + "\n" + parsed.stack.join("\n"));
- util.notEnumerableProp(error, "__stackCleaned__", true);
- }
- }
-}
-function longStackTracesDereferenceTrace() {
- this._trace = undefined;
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+var _default = '00000000-0000-0000-0000-000000000000';
+exports.default = _default;
+
+/***/ }),
+
+/***/ 353:
+/***/ (function(module, __unusedexports, __webpack_require__) {
+
+"use strict";
+
+
+const u = __webpack_require__(676).fromCallback
+module.exports = {
+ move: u(__webpack_require__(500))
}
-function checkForgottenReturns(returnValue, promiseCreated, name, promise,
- parent) {
- if (returnValue === undefined && promiseCreated !== null &&
- wForgottenReturn) {
- if (parent !== undefined && parent._returnedNonUndefined()) return;
- if ((promise._bitField & 65535) === 0) return;
- if (name) name = name + " ";
- var handlerLine = "";
- var creatorLine = "";
- if (promiseCreated._trace) {
- var traceLines = promiseCreated._trace.stack.split("\n");
- var stack = cleanStack(traceLines);
- for (var i = stack.length - 1; i >= 0; --i) {
- var line = stack[i];
- if (!nodeFramePattern.test(line)) {
- var lineMatches = line.match(parseLinePattern);
- if (lineMatches) {
- handlerLine = "at " + lineMatches[1] +
- ":" + lineMatches[2] + ":" + lineMatches[3] + " ";
- }
- break;
- }
- }
+/***/ }),
- if (stack.length > 0) {
- var firstUserLine = stack[0];
- for (var i = 0; i < traceLines.length; ++i) {
+/***/ 356:
+/***/ (function(module) {
- if (traceLines[i] === firstUserLine) {
- if (i > 0) {
- creatorLine = "\n" + traceLines[i - 1];
- }
- break;
- }
- }
+function stringify (obj, { EOL = '\n', finalEOL = true, replacer = null, spaces } = {}) {
+ const EOF = finalEOL ? EOL : ''
+ const str = JSON.stringify(obj, replacer, spaces)
- }
- }
- var msg = "a promise was created in a " + name +
- "handler " + handlerLine + "but was not returned from it, " +
- "see http://goo.gl/rRqMUw" +
- creatorLine;
- promise._warn(msg, true, promiseCreated);
- }
+ return str.replace(/\n/g, EOL) + EOF
}
-function deprecated(name, replacement) {
- var message = name +
- " is deprecated and will be removed in a future version.";
- if (replacement) message += " Use " + replacement + " instead.";
- return warn(message);
+function stripBom (content) {
+ // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified
+ if (Buffer.isBuffer(content)) content = content.toString('utf8')
+ return content.replace(/^\uFEFF/, '')
}
-function warn(message, shouldUseOwnTrace, promise) {
- if (!config.warnings) return;
- var warning = new Warning(message);
- var ctx;
- if (shouldUseOwnTrace) {
- promise._attachExtraTrace(warning);
- } else if (config.longStackTraces && (ctx = Promise._peekContext())) {
- ctx.attachExtraTrace(warning);
- } else {
- var parsed = parseStackAndMessage(warning);
- warning.stack = parsed.message + "\n" + parsed.stack.join("\n");
- }
+module.exports = { stringify, stripBom }
- if (!activeFireEvent("warning", warning)) {
- formatAndLogError(warning, "", true);
- }
-}
-function reconstructStack(message, stacks) {
- for (var i = 0; i < stacks.length - 1; ++i) {
- stacks[i].push("From previous event:");
- stacks[i] = stacks[i].join("\n");
- }
- if (i < stacks.length) {
- stacks[i] = stacks[i].join("\n");
- }
- return message + "\n" + stacks.join("\n");
-}
+/***/ }),
-function removeDuplicateOrEmptyJumps(stacks) {
- for (var i = 0; i < stacks.length; ++i) {
- if (stacks[i].length === 0 ||
- ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {
- stacks.splice(i, 1);
- i--;
- }
- }
-}
+/***/ 357:
+/***/ (function(module) {
-function removeCommonRoots(stacks) {
- var current = stacks[0];
- for (var i = 1; i < stacks.length; ++i) {
- var prev = stacks[i];
- var currentLastIndex = current.length - 1;
- var currentLastLine = current[currentLastIndex];
- var commonRootMeetPoint = -1;
+module.exports = require("assert");
- for (var j = prev.length - 1; j >= 0; --j) {
- if (prev[j] === currentLastLine) {
- commonRootMeetPoint = j;
- break;
- }
- }
+/***/ }),
- for (var j = commonRootMeetPoint; j >= 0; --j) {
- var line = prev[j];
- if (current[currentLastIndex] === line) {
- current.pop();
- currentLastIndex--;
- } else {
- break;
- }
- }
- current = prev;
- }
-}
+/***/ 374:
+/***/ (function(module) {
-function cleanStack(stack) {
- var ret = [];
- for (var i = 0; i < stack.length; ++i) {
- var line = stack[i];
- var isTraceLine = " (No stack trace)" === line ||
- stackFramePattern.test(line);
- var isInternalFrame = isTraceLine && shouldIgnore(line);
- if (isTraceLine && !isInternalFrame) {
- if (indentStackFrames && line.charAt(0) !== " ") {
- line = " " + line;
- }
- ret.push(line);
- }
- }
- return ret;
-}
+"use strict";
-function stackFramesAsArray(error) {
- var stack = error.stack.replace(/\s+$/g, "").split("\n");
- for (var i = 0; i < stack.length; ++i) {
- var line = stack[i];
- if (" (No stack trace)" === line || stackFramePattern.test(line)) {
- break;
+
+var hasOwn = Object.prototype.hasOwnProperty;
+var toStr = Object.prototype.toString;
+var defineProperty = Object.defineProperty;
+var gOPD = Object.getOwnPropertyDescriptor;
+
+var isArray = function isArray(arr) {
+ if (typeof Array.isArray === 'function') {
+ return Array.isArray(arr);
+ }
+
+ return toStr.call(arr) === '[object Array]';
+};
+
+var isPlainObject = function isPlainObject(obj) {
+ if (!obj || toStr.call(obj) !== '[object Object]') {
+ return false;
+ }
+
+ var hasOwnConstructor = hasOwn.call(obj, 'constructor');
+ var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');
+ // Not own constructor property must be Object
+ if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {
+ return false;
+ }
+
+ // Own properties are enumerated firstly, so to speed up,
+ // if last one is own, then all properties are own.
+ var key;
+ for (key in obj) { /**/ }
+
+ return typeof key === 'undefined' || hasOwn.call(obj, key);
+};
+
+// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target
+var setProperty = function setProperty(target, options) {
+ if (defineProperty && options.name === '__proto__') {
+ defineProperty(target, options.name, {
+ enumerable: true,
+ configurable: true,
+ value: options.newValue,
+ writable: true
+ });
+ } else {
+ target[options.name] = options.newValue;
+ }
+};
+
+// Return undefined instead of __proto__ if '__proto__' is not an own property
+var getProperty = function getProperty(obj, name) {
+ if (name === '__proto__') {
+ if (!hasOwn.call(obj, name)) {
+ return void 0;
+ } else if (gOPD) {
+ // In early versions of node, obj['__proto__'] is buggy when obj has
+ // __proto__ as an own property. Object.getOwnPropertyDescriptor() works.
+ return gOPD(obj, name).value;
+ }
+ }
+
+ return obj[name];
+};
+
+module.exports = function extend() {
+ var options, name, src, copy, copyIsArray, clone;
+ var target = arguments[0];
+ var i = 1;
+ var length = arguments.length;
+ var deep = false;
+
+ // Handle a deep copy situation
+ if (typeof target === 'boolean') {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+ if (target == null || (typeof target !== 'object' && typeof target !== 'function')) {
+ target = {};
+ }
+
+ for (; i < length; ++i) {
+ options = arguments[i];
+ // Only deal with non-null/undefined values
+ if (options != null) {
+ // Extend the base object
+ for (name in options) {
+ src = getProperty(target, name);
+ copy = getProperty(options, name);
+
+ // Prevent never-ending loop
+ if (target !== copy) {
+ // Recurse if we're merging plain objects or arrays
+ if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {
+ if (copyIsArray) {
+ copyIsArray = false;
+ clone = src && isArray(src) ? src : [];
+ } else {
+ clone = src && isPlainObject(src) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ setProperty(target, { name: name, newValue: extend(deep, clone, copy) });
+
+ // Don't bring in undefined values
+ } else if (typeof copy !== 'undefined') {
+ setProperty(target, { name: name, newValue: copy });
+ }
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+
+/***/ }),
+
+/***/ 377:
+/***/ (function(module, __unusedexports, __webpack_require__) {
+
+"use strict";
+
+module.exports = function(Promise, INTERNAL) {
+var util = __webpack_require__(248);
+var errorObj = util.errorObj;
+var isObject = util.isObject;
+
+function tryConvertToPromise(obj, context) {
+ if (isObject(obj)) {
+ if (obj instanceof Promise) return obj;
+ var then = getThen(obj);
+ if (then === errorObj) {
+ if (context) context._pushContext();
+ var ret = Promise.reject(then.e);
+ if (context) context._popContext();
+ return ret;
+ } else if (typeof then === "function") {
+ if (isAnyBluebirdPromise(obj)) {
+ var ret = new Promise(INTERNAL);
+ obj._then(
+ ret._fulfill,
+ ret._reject,
+ undefined,
+ ret,
+ null
+ );
+ return ret;
+ }
+ return doThenable(obj, then, context);
}
}
- if (i > 0 && error.name != "SyntaxError") {
- stack = stack.slice(i);
- }
- return stack;
+ return obj;
}
-function parseStackAndMessage(error) {
- var stack = error.stack;
- var message = error.toString();
- stack = typeof stack === "string" && stack.length > 0
- ? stackFramesAsArray(error) : [" (No stack trace)"];
- return {
- message: message,
- stack: error.name == "SyntaxError" ? stack : cleanStack(stack)
- };
+function doGetThen(obj) {
+ return obj.then;
}
-function formatAndLogError(error, title, isSoft) {
- if (typeof console !== "undefined") {
- var message;
- if (util.isObject(error)) {
- var stack = error.stack;
- message = title + formatStack(stack, error);
- } else {
- message = title + String(error);
- }
- if (typeof printWarning === "function") {
- printWarning(message, isSoft);
- } else if (typeof console.log === "function" ||
- typeof console.log === "object") {
- console.log(message);
- }
+function getThen(obj) {
+ try {
+ return doGetThen(obj);
+ } catch (e) {
+ errorObj.e = e;
+ return errorObj;
}
}
-function fireRejectionEvent(name, localHandler, reason, promise) {
- var localEventFired = false;
+var hasProp = {}.hasOwnProperty;
+function isAnyBluebirdPromise(obj) {
try {
- if (typeof localHandler === "function") {
- localEventFired = true;
- if (name === "rejectionHandled") {
- localHandler(promise);
- } else {
- localHandler(reason, promise);
- }
- }
+ return hasProp.call(obj, "_promise0");
} catch (e) {
- async.throwLater(e);
- }
-
- if (name === "unhandledRejection") {
- if (!activeFireEvent(name, reason, promise) && !localEventFired) {
- formatAndLogError(reason, "Unhandled rejection ");
- }
- } else {
- activeFireEvent(name, promise);
+ return false;
}
}
-function formatNonError(obj) {
- var str;
- if (typeof obj === "function") {
- str = "[function " +
- (obj.name || "anonymous") +
- "]";
- } else {
- str = obj && typeof obj.toString === "function"
- ? obj.toString() : util.toString(obj);
- var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/;
- if (ruselessToString.test(str)) {
- try {
- var newStr = JSON.stringify(obj);
- str = newStr;
- }
- catch(e) {
+function doThenable(x, then, context) {
+ var promise = new Promise(INTERNAL);
+ var ret = promise;
+ if (context) context._pushContext();
+ promise._captureStackTrace();
+ if (context) context._popContext();
+ var synchronous = true;
+ var result = util.tryCatch(then).call(x, resolve, reject);
+ synchronous = false;
- }
- }
- if (str.length === 0) {
- str = "(empty array)";
- }
+ if (promise && result === errorObj) {
+ promise._rejectCallback(result.e, true, true);
+ promise = null;
}
- return ("(<" + snip(str) + ">, no stack trace)");
-}
-function snip(str) {
- var maxChars = 41;
- if (str.length < maxChars) {
- return str;
+ function resolve(value) {
+ if (!promise) return;
+ promise._resolveCallback(value);
+ promise = null;
}
- return str.substr(0, maxChars - 3) + "...";
-}
-
-function longStackTracesIsSupported() {
- return typeof captureStackTrace === "function";
-}
-var shouldIgnore = function() { return false; };
-var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;
-function parseLineInfo(line) {
- var matches = line.match(parseLineInfoRegex);
- if (matches) {
- return {
- fileName: matches[1],
- line: parseInt(matches[2], 10)
- };
+ function reject(reason) {
+ if (!promise) return;
+ promise._rejectCallback(reason, synchronous, true);
+ promise = null;
}
+ return ret;
}
-function setBounds(firstLineError, lastLineError) {
- if (!longStackTracesIsSupported()) return;
- var firstStackLines = (firstLineError.stack || "").split("\n");
- var lastStackLines = (lastLineError.stack || "").split("\n");
- var firstIndex = -1;
- var lastIndex = -1;
- var firstFileName;
- var lastFileName;
- for (var i = 0; i < firstStackLines.length; ++i) {
- var result = parseLineInfo(firstStackLines[i]);
- if (result) {
- firstFileName = result.fileName;
- firstIndex = result.line;
- break;
- }
- }
- for (var i = 0; i < lastStackLines.length; ++i) {
- var result = parseLineInfo(lastStackLines[i]);
- if (result) {
- lastFileName = result.fileName;
- lastIndex = result.line;
- break;
- }
- }
- if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||
- firstFileName !== lastFileName || firstIndex >= lastIndex) {
- return;
- }
+return tryConvertToPromise;
+};
- shouldIgnore = function(line) {
- if (bluebirdFramePattern.test(line)) return true;
- var info = parseLineInfo(line);
- if (info) {
- if (info.fileName === firstFileName &&
- (firstIndex <= info.line && info.line <= lastIndex)) {
- return true;
- }
- }
- return false;
- };
-}
-function CapturedTrace(parent) {
- this._parent = parent;
- this._promisesCreated = 0;
- var length = this._length = 1 + (parent === undefined ? 0 : parent._length);
- captureStackTrace(this, CapturedTrace);
- if (length > 32) this.uncycle();
-}
-util.inherits(CapturedTrace, Error);
-Context.CapturedTrace = CapturedTrace;
+/***/ }),
-CapturedTrace.prototype.uncycle = function() {
- var length = this._length;
- if (length < 2) return;
- var nodes = [];
- var stackToIndex = {};
+/***/ 384:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- for (var i = 0, node = this; node !== undefined; ++i) {
- nodes.push(node);
- node = node._parent;
- }
- length = this._length = i;
- for (var i = length - 1; i >= 0; --i) {
- var stack = nodes[i].stack;
- if (stackToIndex[stack] === undefined) {
- stackToIndex[stack] = i;
- }
- }
- for (var i = 0; i < length; ++i) {
- var currentStack = nodes[i].stack;
- var index = stackToIndex[currentStack];
- if (index !== undefined && index !== i) {
- if (index > 0) {
- nodes[index - 1]._parent = undefined;
- nodes[index - 1]._length = 1;
- }
- nodes[i]._parent = undefined;
- nodes[i]._length = 1;
- var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;
+"use strict";
- if (index < length - 1) {
- cycleEdgeNode._parent = nodes[index + 1];
- cycleEdgeNode._parent.uncycle();
- cycleEdgeNode._length =
- cycleEdgeNode._parent._length + 1;
- } else {
- cycleEdgeNode._parent = undefined;
- cycleEdgeNode._length = 1;
- }
- var currentChildLength = cycleEdgeNode._length + 1;
- for (var j = i - 2; j >= 0; --j) {
- nodes[j]._length = currentChildLength;
- currentChildLength++;
- }
- return;
- }
- }
-};
-CapturedTrace.prototype.attachExtraTrace = function(error) {
- if (error.__stackCleaned__) return;
- this.uncycle();
- var parsed = parseStackAndMessage(error);
- var message = parsed.message;
- var stacks = [parsed.stack];
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
- var trace = this;
- while (trace !== undefined) {
- stacks.push(cleanStack(trace.stack.split("\n")));
- trace = trace._parent;
- }
- removeCommonRoots(stacks);
- removeDuplicateOrEmptyJumps(stacks);
- util.notEnumerableProp(error, "stack", reconstructStack(message, stacks));
- util.notEnumerableProp(error, "__stackCleaned__", true);
-};
+var _v = _interopRequireDefault(__webpack_require__(212));
-var captureStackTrace = (function stackDetection() {
- var v8stackFramePattern = /^\s*at\s*/;
- var v8stackFormatter = function(stack, error) {
- if (typeof stack === "string") return stack;
+var _sha = _interopRequireDefault(__webpack_require__(498));
- if (error.name !== undefined &&
- error.message !== undefined) {
- return error.toString();
- }
- return formatNonError(error);
- };
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- if (typeof Error.stackTraceLimit === "number" &&
- typeof Error.captureStackTrace === "function") {
- Error.stackTraceLimit += 6;
- stackFramePattern = v8stackFramePattern;
- formatStack = v8stackFormatter;
- var captureStackTrace = Error.captureStackTrace;
+const v5 = (0, _v.default)('v5', 0x50, _sha.default);
+var _default = v5;
+exports.default = _default;
- shouldIgnore = function(line) {
- return bluebirdFramePattern.test(line);
- };
- return function(receiver, ignoreUntil) {
- Error.stackTraceLimit += 6;
- captureStackTrace(receiver, ignoreUntil);
- Error.stackTraceLimit -= 6;
- };
- }
- var err = new Error();
+/***/ }),
- if (typeof err.stack === "string" &&
- err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) {
- stackFramePattern = /@/;
- formatStack = v8stackFormatter;
- indentStackFrames = true;
- return function captureStackTrace(o) {
- o.stack = new Error().stack;
- };
- }
+/***/ 385:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- var hasStackAfterThrow;
- try { throw new Error(); }
- catch(e) {
- hasStackAfterThrow = ("stack" in e);
- }
- if (!("stack" in err) && hasStackAfterThrow &&
- typeof Error.stackTraceLimit === "number") {
- stackFramePattern = v8stackFramePattern;
- formatStack = v8stackFormatter;
- return function captureStackTrace(o) {
- Error.stackTraceLimit += 6;
- try { throw new Error(); }
- catch(e) { o.stack = e.stack; }
- Error.stackTraceLimit -= 6;
- };
- }
+"use strict";
- formatStack = function(stack, error) {
- if (typeof stack === "string") return stack;
- if ((typeof error === "object" ||
- typeof error === "function") &&
- error.name !== undefined &&
- error.message !== undefined) {
- return error.toString();
- }
- return formatNonError(error);
- };
+Object.defineProperty(exports, '__esModule', { value: true });
- return null;
+var isPlainObject = __webpack_require__(3);
+var universalUserAgent = __webpack_require__(796);
-})([]);
+function lowercaseKeys(object) {
+ if (!object) {
+ return {};
+ }
-if (typeof console !== "undefined" && typeof console.warn !== "undefined") {
- printWarning = function (message) {
- console.warn(message);
- };
- if (util.isNode && process.stderr.isTTY) {
- printWarning = function(message, isSoft) {
- var color = isSoft ? "\u001b[33m" : "\u001b[31m";
- console.warn(color + message + "\u001b[0m\n");
- };
- } else if (!util.isNode && typeof (new Error().stack) === "string") {
- printWarning = function(message, isSoft) {
- console.warn("%c" + message,
- isSoft ? "color: darkorange" : "color: red");
- };
+ return Object.keys(object).reduce((newObj, key) => {
+ newObj[key.toLowerCase()] = object[key];
+ return newObj;
+ }, {});
+}
+
+function mergeDeep(defaults, options) {
+ const result = Object.assign({}, defaults);
+ Object.keys(options).forEach(key => {
+ if (isPlainObject.isPlainObject(options[key])) {
+ if (!(key in defaults)) Object.assign(result, {
+ [key]: options[key]
+ });else result[key] = mergeDeep(defaults[key], options[key]);
+ } else {
+ Object.assign(result, {
+ [key]: options[key]
+ });
}
+ });
+ return result;
}
-var config = {
- warnings: warnings,
- longStackTraces: false,
- cancellation: false,
- monitoring: false,
- asyncHooks: false
-};
+function removeUndefinedProperties(obj) {
+ for (const key in obj) {
+ if (obj[key] === undefined) {
+ delete obj[key];
+ }
+ }
-if (longStackTraces) Promise.longStackTraces();
+ return obj;
+}
-return {
- asyncHooks: function() {
- return config.asyncHooks;
- },
- longStackTraces: function() {
- return config.longStackTraces;
- },
- warnings: function() {
- return config.warnings;
- },
- cancellation: function() {
- return config.cancellation;
- },
- monitoring: function() {
- return config.monitoring;
- },
- propagateFromFunction: function() {
- return propagateFromFunction;
- },
- boundValueFunction: function() {
- return boundValueFunction;
- },
- checkForgottenReturns: checkForgottenReturns,
- setBounds: setBounds,
- warn: warn,
- deprecated: deprecated,
- CapturedTrace: CapturedTrace,
- fireDomEvent: fireDomEvent,
- fireGlobalEvent: fireGlobalEvent
-};
-};
+function merge(defaults, route, options) {
+ if (typeof route === "string") {
+ let [method, url] = route.split(" ");
+ options = Object.assign(url ? {
+ method,
+ url
+ } : {
+ url: method
+ }, options);
+ } else {
+ options = Object.assign({}, route);
+ } // lowercase header names before merging with defaults to avoid duplicates
-/***/ }),
-/* 273 */,
-/* 274 */,
-/* 275 */,
-/* 276 */,
-/* 277 */,
-/* 278 */,
-/* 279 */,
-/* 280 */
-/***/ (function(module, exports) {
+ options.headers = lowercaseKeys(options.headers); // remove properties with undefined values before merging
-exports = module.exports = SemVer
+ removeUndefinedProperties(options);
+ removeUndefinedProperties(options.headers);
+ const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten
-var debug
-/* istanbul ignore next */
-if (typeof process === 'object' &&
- process.env &&
- process.env.NODE_DEBUG &&
- /\bsemver\b/i.test(process.env.NODE_DEBUG)) {
- debug = function () {
- var args = Array.prototype.slice.call(arguments, 0)
- args.unshift('SEMVER')
- console.log.apply(console, args)
+ if (defaults && defaults.mediaType.previews.length) {
+ mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews);
}
-} else {
- debug = function () {}
+
+ mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, ""));
+ return mergedOptions;
}
-// Note: this is the semver.org version of the spec that it implements
-// Not necessarily the package version of this code.
-exports.SEMVER_SPEC_VERSION = '2.0.0'
+function addQueryParameters(url, parameters) {
+ const separator = /\?/.test(url) ? "&" : "?";
+ const names = Object.keys(parameters);
-var MAX_LENGTH = 256
-var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||
- /* istanbul ignore next */ 9007199254740991
+ if (names.length === 0) {
+ return url;
+ }
-// Max safe segment length for coercion.
-var MAX_SAFE_COMPONENT_LENGTH = 16
+ return url + separator + names.map(name => {
+ if (name === "q") {
+ return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+");
+ }
-// The actual regexps go on exports.re
-var re = exports.re = []
-var src = exports.src = []
-var t = exports.tokens = {}
-var R = 0
+ return `${name}=${encodeURIComponent(parameters[name])}`;
+ }).join("&");
+}
-function tok (n) {
- t[n] = R++
+const urlVariableRegex = /\{[^}]+\}/g;
+
+function removeNonChars(variableName) {
+ return variableName.replace(/^\W+|\W+$/g, "").split(/,/);
}
-// The following Regular Expressions can be used for tokenizing,
-// validating, and parsing SemVer version strings.
+function extractUrlVariableNames(url) {
+ const matches = url.match(urlVariableRegex);
-// ## Numeric Identifier
-// A single `0`, or a non-zero digit followed by zero or more digits.
+ if (!matches) {
+ return [];
+ }
-tok('NUMERICIDENTIFIER')
-src[t.NUMERICIDENTIFIER] = '0|[1-9]\\d*'
-tok('NUMERICIDENTIFIERLOOSE')
-src[t.NUMERICIDENTIFIERLOOSE] = '[0-9]+'
+ return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);
+}
-// ## Non-numeric Identifier
-// Zero or more digits, followed by a letter or hyphen, and then zero or
-// more letters, digits, or hyphens.
+function omit(object, keysToOmit) {
+ return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => {
+ obj[key] = object[key];
+ return obj;
+ }, {});
+}
-tok('NONNUMERICIDENTIFIER')
-src[t.NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'
+// Based on https://github.com/bramstein/url-template, licensed under BSD
+// TODO: create separate package.
+//
+// Copyright (c) 2012-2014, Bram Stein
+// All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+// 3. The name of the author may not be used to endorse or promote products
+// derived from this software without specific prior written permission.
+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-// ## Main Version
-// Three dot-separated numeric identifiers.
+/* istanbul ignore file */
+function encodeReserved(str) {
+ return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) {
+ if (!/%[0-9A-Fa-f]/.test(part)) {
+ part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]");
+ }
-tok('MAINVERSION')
-src[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\.' +
- '(' + src[t.NUMERICIDENTIFIER] + ')\\.' +
- '(' + src[t.NUMERICIDENTIFIER] + ')'
+ return part;
+ }).join("");
+}
-tok('MAINVERSIONLOOSE')
-src[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' +
- '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' +
- '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')'
+function encodeUnreserved(str) {
+ return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
+ return "%" + c.charCodeAt(0).toString(16).toUpperCase();
+ });
+}
-// ## Pre-release Version Identifier
-// A numeric identifier, or a non-numeric identifier.
+function encodeValue(operator, value, key) {
+ value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value);
-tok('PRERELEASEIDENTIFIER')
-src[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] +
- '|' + src[t.NONNUMERICIDENTIFIER] + ')'
+ if (key) {
+ return encodeUnreserved(key) + "=" + value;
+ } else {
+ return value;
+ }
+}
-tok('PRERELEASEIDENTIFIERLOOSE')
-src[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] +
- '|' + src[t.NONNUMERICIDENTIFIER] + ')'
+function isDefined(value) {
+ return value !== undefined && value !== null;
+}
-// ## Pre-release Version
-// Hyphen, followed by one or more dot-separated pre-release version
-// identifiers.
+function isKeyOperator(operator) {
+ return operator === ";" || operator === "&" || operator === "?";
+}
-tok('PRERELEASE')
-src[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] +
- '(?:\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))'
+function getValues(context, operator, key, modifier) {
+ var value = context[key],
+ result = [];
-tok('PRERELEASELOOSE')
-src[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] +
- '(?:\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))'
+ if (isDefined(value) && value !== "") {
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
+ value = value.toString();
-// ## Build Metadata Identifier
-// Any combination of digits, letters, or hyphens.
+ if (modifier && modifier !== "*") {
+ value = value.substring(0, parseInt(modifier, 10));
+ }
-tok('BUILDIDENTIFIER')
-src[t.BUILDIDENTIFIER] = '[0-9A-Za-z-]+'
+ result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
+ } else {
+ if (modifier === "*") {
+ if (Array.isArray(value)) {
+ value.filter(isDefined).forEach(function (value) {
+ result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
+ });
+ } else {
+ Object.keys(value).forEach(function (k) {
+ if (isDefined(value[k])) {
+ result.push(encodeValue(operator, value[k], k));
+ }
+ });
+ }
+ } else {
+ const tmp = [];
-// ## Build Metadata
-// Plus sign, followed by one or more period-separated build metadata
-// identifiers.
+ if (Array.isArray(value)) {
+ value.filter(isDefined).forEach(function (value) {
+ tmp.push(encodeValue(operator, value));
+ });
+ } else {
+ Object.keys(value).forEach(function (k) {
+ if (isDefined(value[k])) {
+ tmp.push(encodeUnreserved(k));
+ tmp.push(encodeValue(operator, value[k].toString()));
+ }
+ });
+ }
-tok('BUILD')
-src[t.BUILD] = '(?:\\+(' + src[t.BUILDIDENTIFIER] +
- '(?:\\.' + src[t.BUILDIDENTIFIER] + ')*))'
+ if (isKeyOperator(operator)) {
+ result.push(encodeUnreserved(key) + "=" + tmp.join(","));
+ } else if (tmp.length !== 0) {
+ result.push(tmp.join(","));
+ }
+ }
+ }
+ } else {
+ if (operator === ";") {
+ if (isDefined(value)) {
+ result.push(encodeUnreserved(key));
+ }
+ } else if (value === "" && (operator === "&" || operator === "?")) {
+ result.push(encodeUnreserved(key) + "=");
+ } else if (value === "") {
+ result.push("");
+ }
+ }
-// ## Full Version String
-// A main version, followed optionally by a pre-release version and
-// build metadata.
+ return result;
+}
-// Note that the only major, minor, patch, and pre-release sections of
-// the version string are capturing groups. The build metadata is not a
-// capturing group, because it should not ever be used in version
-// comparison.
+function parseUrl(template) {
+ return {
+ expand: expand.bind(null, template)
+ };
+}
-tok('FULL')
-tok('FULLPLAIN')
-src[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] +
- src[t.PRERELEASE] + '?' +
- src[t.BUILD] + '?'
+function expand(template, context) {
+ var operators = ["+", "#", ".", "/", ";", "?", "&"];
+ return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) {
+ if (expression) {
+ let operator = "";
+ const values = [];
-src[t.FULL] = '^' + src[t.FULLPLAIN] + '$'
+ if (operators.indexOf(expression.charAt(0)) !== -1) {
+ operator = expression.charAt(0);
+ expression = expression.substr(1);
+ }
-// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
-// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
-// common in the npm registry.
-tok('LOOSEPLAIN')
-src[t.LOOSEPLAIN] = '[v=\\s]*' + src[t.MAINVERSIONLOOSE] +
- src[t.PRERELEASELOOSE] + '?' +
- src[t.BUILD] + '?'
+ expression.split(/,/g).forEach(function (variable) {
+ var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable);
+ values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));
+ });
-tok('LOOSE')
-src[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$'
+ if (operator && operator !== "+") {
+ var separator = ",";
-tok('GTLT')
-src[t.GTLT] = '((?:<|>)?=?)'
+ if (operator === "?") {
+ separator = "&";
+ } else if (operator !== "#") {
+ separator = operator;
+ }
-// Something like "2.*" or "1.2.x".
-// Note that "x.x" is a valid xRange identifer, meaning "any version"
-// Only the first item is strictly required.
-tok('XRANGEIDENTIFIERLOOSE')
-src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'
-tok('XRANGEIDENTIFIER')
-src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\*'
+ return (values.length !== 0 ? operator : "") + values.join(separator);
+ } else {
+ return values.join(",");
+ }
+ } else {
+ return encodeReserved(literal);
+ }
+ });
+}
-tok('XRANGEPLAIN')
-src[t.XRANGEPLAIN] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' +
- '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' +
- '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' +
- '(?:' + src[t.PRERELEASE] + ')?' +
- src[t.BUILD] + '?' +
- ')?)?'
+function parse(options) {
+ // https://fetch.spec.whatwg.org/#methods
+ let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible
-tok('XRANGEPLAINLOOSE')
-src[t.XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +
- '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +
- '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +
- '(?:' + src[t.PRERELEASELOOSE] + ')?' +
- src[t.BUILD] + '?' +
- ')?)?'
+ let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}");
+ let headers = Object.assign({}, options.headers);
+ let body;
+ let parameters = omit(options, ["method", "baseUrl", "url", "headers", "request", "mediaType"]); // extract variable names from URL to calculate remaining variables later
-tok('XRANGE')
-src[t.XRANGE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAIN] + '$'
-tok('XRANGELOOSE')
-src[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAINLOOSE] + '$'
+ const urlVariableNames = extractUrlVariableNames(url);
+ url = parseUrl(url).expand(parameters);
-// Coercion.
-// Extract anything that could conceivably be a part of a valid semver
-tok('COERCE')
-src[t.COERCE] = '(^|[^\\d])' +
- '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
- '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
- '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
- '(?:$|[^\\d])'
-tok('COERCERTL')
-re[t.COERCERTL] = new RegExp(src[t.COERCE], 'g')
+ if (!/^http/.test(url)) {
+ url = options.baseUrl + url;
+ }
-// Tilde ranges.
-// Meaning is "reasonably at or greater than"
-tok('LONETILDE')
-src[t.LONETILDE] = '(?:~>?)'
+ const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat("baseUrl");
+ const remainingParameters = omit(parameters, omittedParameters);
+ const isBinaryRequest = /application\/octet-stream/i.test(headers.accept);
-tok('TILDETRIM')
-src[t.TILDETRIM] = '(\\s*)' + src[t.LONETILDE] + '\\s+'
-re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g')
-var tildeTrimReplace = '$1~'
+ if (!isBinaryRequest) {
+ if (options.mediaType.format) {
+ // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw
+ headers.accept = headers.accept.split(/,/).map(preview => preview.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(",");
+ }
-tok('TILDE')
-src[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$'
-tok('TILDELOOSE')
-src[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$'
+ if (options.mediaType.previews.length) {
+ const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || [];
+ headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map(preview => {
+ const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json";
+ return `application/vnd.github.${preview}-preview${format}`;
+ }).join(",");
+ }
+ } // for GET/HEAD requests, set URL query parameters from remaining parameters
+ // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters
-// Caret ranges.
-// Meaning is "at least and backwards compatible with"
-tok('LONECARET')
-src[t.LONECARET] = '(?:\\^)'
-tok('CARETTRIM')
-src[t.CARETTRIM] = '(\\s*)' + src[t.LONECARET] + '\\s+'
-re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g')
-var caretTrimReplace = '$1^'
+ if (["GET", "HEAD"].includes(method)) {
+ url = addQueryParameters(url, remainingParameters);
+ } else {
+ if ("data" in remainingParameters) {
+ body = remainingParameters.data;
+ } else {
+ if (Object.keys(remainingParameters).length) {
+ body = remainingParameters;
+ } else {
+ headers["content-length"] = 0;
+ }
+ }
+ } // default content-type for JSON if body is set
-tok('CARET')
-src[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$'
-tok('CARETLOOSE')
-src[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$'
-// A simple gt/lt/eq thing, or just "" to indicate "any version"
-tok('COMPARATORLOOSE')
-src[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\s*(' + src[t.LOOSEPLAIN] + ')$|^$'
-tok('COMPARATOR')
-src[t.COMPARATOR] = '^' + src[t.GTLT] + '\\s*(' + src[t.FULLPLAIN] + ')$|^$'
+ if (!headers["content-type"] && typeof body !== "undefined") {
+ headers["content-type"] = "application/json; charset=utf-8";
+ } // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body.
+ // fetch does not allow to set `content-length` header, but we can set body to an empty string
-// An expression to strip any whitespace between the gtlt and the thing
-// it modifies, so that `> 1.2.3` ==> `>1.2.3`
-tok('COMPARATORTRIM')
-src[t.COMPARATORTRIM] = '(\\s*)' + src[t.GTLT] +
- '\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')'
-// this one has to use the /g flag
-re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g')
-var comparatorTrimReplace = '$1$2$3'
+ if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") {
+ body = "";
+ } // Only return body/request keys if present
-// Something like `1.2.3 - 1.2.4`
-// Note that these all use the loose form, because they'll be
-// checked against either the strict or loose comparator form
-// later.
-tok('HYPHENRANGE')
-src[t.HYPHENRANGE] = '^\\s*(' + src[t.XRANGEPLAIN] + ')' +
- '\\s+-\\s+' +
- '(' + src[t.XRANGEPLAIN] + ')' +
- '\\s*$'
-tok('HYPHENRANGELOOSE')
-src[t.HYPHENRANGELOOSE] = '^\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' +
- '\\s+-\\s+' +
- '(' + src[t.XRANGEPLAINLOOSE] + ')' +
- '\\s*$'
+ return Object.assign({
+ method,
+ url,
+ headers
+ }, typeof body !== "undefined" ? {
+ body
+ } : null, options.request ? {
+ request: options.request
+ } : null);
+}
-// Star ranges basically just allow anything at all.
-tok('STAR')
-src[t.STAR] = '(<|>)?=?\\s*\\*'
+function endpointWithDefaults(defaults, route, options) {
+ return parse(merge(defaults, route, options));
+}
-// Compile to actual regexp objects.
-// All are flag-free, unless they were created above with a flag.
-for (var i = 0; i < R; i++) {
- debug(i, src[i])
- if (!re[i]) {
- re[i] = new RegExp(src[i])
- }
+function withDefaults(oldDefaults, newDefaults) {
+ const DEFAULTS = merge(oldDefaults, newDefaults);
+ const endpoint = endpointWithDefaults.bind(null, DEFAULTS);
+ return Object.assign(endpoint, {
+ DEFAULTS,
+ defaults: withDefaults.bind(null, DEFAULTS),
+ merge: merge.bind(null, DEFAULTS),
+ parse
+ });
}
-exports.parse = parse
-function parse (version, options) {
- if (!options || typeof options !== 'object') {
- options = {
- loose: !!options,
- includePrerelease: false
- }
- }
+const VERSION = "6.0.11";
- if (version instanceof SemVer) {
- return version
- }
+const userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`; // DEFAULTS has all properties set that EndpointOptions has, except url.
+// So we use RequestParameters and add method as additional required property.
- if (typeof version !== 'string') {
- return null
+const DEFAULTS = {
+ method: "GET",
+ baseUrl: "https://api.github.com",
+ headers: {
+ accept: "application/vnd.github.v3+json",
+ "user-agent": userAgent
+ },
+ mediaType: {
+ format: "",
+ previews: []
}
+};
- if (version.length > MAX_LENGTH) {
- return null
- }
+const endpoint = withDefaults(null, DEFAULTS);
- var r = options.loose ? re[t.LOOSE] : re[t.FULL]
- if (!r.test(version)) {
- return null
- }
+exports.endpoint = endpoint;
+//# sourceMappingURL=index.js.map
- try {
- return new SemVer(version, options)
- } catch (er) {
- return null
- }
-}
-exports.valid = valid
-function valid (version, options) {
- var v = parse(version, options)
- return v ? v.version : null
-}
+/***/ }),
-exports.clean = clean
-function clean (version, options) {
- var s = parse(version.trim().replace(/^[=v]+/, ''), options)
- return s ? s.version : null
+/***/ 409:
+/***/ (function(module, __unusedexports, __webpack_require__) {
+
+"use strict";
+
+module.exports = function(Promise, INTERNAL, debug) {
+var util = __webpack_require__(248);
+var TimeoutError = Promise.TimeoutError;
+
+function HandleWrapper(handle) {
+ this.handle = handle;
}
-exports.SemVer = SemVer
+HandleWrapper.prototype._resultCancelled = function() {
+ clearTimeout(this.handle);
+};
-function SemVer (version, options) {
- if (!options || typeof options !== 'object') {
- options = {
- loose: !!options,
- includePrerelease: false
+var afterValue = function(value) { return delay(+this).thenReturn(value); };
+var delay = Promise.delay = function (ms, value) {
+ var ret;
+ var handle;
+ if (value !== undefined) {
+ ret = Promise.resolve(value)
+ ._then(afterValue, null, null, ms, undefined);
+ if (debug.cancellation() && value instanceof Promise) {
+ ret._setOnCancel(value);
+ }
+ } else {
+ ret = new Promise(INTERNAL);
+ handle = setTimeout(function() { ret._fulfill(); }, +ms);
+ if (debug.cancellation()) {
+ ret._setOnCancel(new HandleWrapper(handle));
+ }
+ ret._captureStackTrace();
}
- }
- if (version instanceof SemVer) {
- if (version.loose === options.loose) {
- return version
+ ret._setAsyncGuaranteed();
+ return ret;
+};
+
+Promise.prototype.delay = function (ms) {
+ return delay(ms, this);
+};
+
+var afterTimeout = function (promise, message, parent) {
+ var err;
+ if (typeof message !== "string") {
+ if (message instanceof Error) {
+ err = message;
+ } else {
+ err = new TimeoutError("operation timed out");
+ }
} else {
- version = version.version
+ err = new TimeoutError(message);
}
- } else if (typeof version !== 'string') {
- throw new TypeError('Invalid Version: ' + version)
- }
+ util.markAsOriginatingFromRejection(err);
+ promise._attachExtraTrace(err);
+ promise._reject(err);
- if (version.length > MAX_LENGTH) {
- throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')
- }
+ if (parent != null) {
+ parent.cancel();
+ }
+};
- if (!(this instanceof SemVer)) {
- return new SemVer(version, options)
- }
+function successClear(value) {
+ clearTimeout(this.handle);
+ return value;
+}
- debug('SemVer', version, options)
- this.options = options
- this.loose = !!options.loose
+function failureClear(reason) {
+ clearTimeout(this.handle);
+ throw reason;
+}
- var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])
+Promise.prototype.timeout = function (ms, message) {
+ ms = +ms;
+ var ret, parent;
- if (!m) {
- throw new TypeError('Invalid Version: ' + version)
- }
+ var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() {
+ if (ret.isPending()) {
+ afterTimeout(ret, message, parent);
+ }
+ }, ms));
- this.raw = version
+ if (debug.cancellation()) {
+ parent = this.then();
+ ret = parent._then(successClear, failureClear,
+ undefined, handleWrapper, undefined);
+ ret._setOnCancel(handleWrapper);
+ } else {
+ ret = this._then(successClear, failureClear,
+ undefined, handleWrapper, undefined);
+ }
- // these are actually numbers
- this.major = +m[1]
- this.minor = +m[2]
- this.patch = +m[3]
+ return ret;
+};
- if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
- throw new TypeError('Invalid major version')
- }
+};
- if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
- throw new TypeError('Invalid minor version')
- }
- if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
- throw new TypeError('Invalid patch version')
- }
+/***/ }),
- // numberify any prerelease numeric ids
- if (!m[4]) {
- this.prerelease = []
- } else {
- this.prerelease = m[4].split('.').map(function (id) {
- if (/^[0-9]+$/.test(id)) {
- var num = +id
- if (num >= 0 && num < MAX_SAFE_INTEGER) {
- return num
- }
- }
- return id
- })
- }
+/***/ 411:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- this.build = m[5] ? m[5].split('.') : []
- this.format()
-}
+"use strict";
-SemVer.prototype.format = function () {
- this.version = this.major + '.' + this.minor + '.' + this.patch
- if (this.prerelease.length) {
- this.version += '-' + this.prerelease.join('.')
- }
- return this.version
-}
-SemVer.prototype.toString = function () {
- return this.version
-}
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
-SemVer.prototype.compare = function (other) {
- debug('SemVer.compare', this.version, this.options, other)
- if (!(other instanceof SemVer)) {
- other = new SemVer(other, this.options)
- }
+var _validate = _interopRequireDefault(__webpack_require__(78));
- return this.compareMain(other) || this.comparePre(other)
-}
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-SemVer.prototype.compareMain = function (other) {
- if (!(other instanceof SemVer)) {
- other = new SemVer(other, this.options)
- }
+/**
+ * Convert array of 16 byte values to UUID string format of the form:
+ * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
+ */
+const byteToHex = [];
- return compareIdentifiers(this.major, other.major) ||
- compareIdentifiers(this.minor, other.minor) ||
- compareIdentifiers(this.patch, other.patch)
+for (let i = 0; i < 256; ++i) {
+ byteToHex.push((i + 0x100).toString(16).substr(1));
}
-SemVer.prototype.comparePre = function (other) {
- if (!(other instanceof SemVer)) {
- other = new SemVer(other, this.options)
- }
+function stringify(arr, offset = 0) {
+ // Note: Be careful editing this code! It's been tuned for performance
+ // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
+ const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one
+ // of the following:
+ // - One or more input array values don't map to a hex octet (leading to
+ // "undefined" in the uuid)
+ // - Invalid input values for the RFC `version` or `variant` fields
- // NOT having a prerelease is > having one
- if (this.prerelease.length && !other.prerelease.length) {
- return -1
- } else if (!this.prerelease.length && other.prerelease.length) {
- return 1
- } else if (!this.prerelease.length && !other.prerelease.length) {
- return 0
+ if (!(0, _validate.default)(uuid)) {
+ throw TypeError('Stringified UUID is invalid');
}
- var i = 0
- do {
- var a = this.prerelease[i]
- var b = other.prerelease[i]
- debug('prerelease compare', i, a, b)
- if (a === undefined && b === undefined) {
- return 0
- } else if (b === undefined) {
- return 1
- } else if (a === undefined) {
- return -1
- } else if (a === b) {
- continue
- } else {
- return compareIdentifiers(a, b)
- }
- } while (++i)
+ return uuid;
}
-SemVer.prototype.compareBuild = function (other) {
- if (!(other instanceof SemVer)) {
- other = new SemVer(other, this.options)
- }
+var _default = stringify;
+exports.default = _default;
- var i = 0
- do {
- var a = this.build[i]
- var b = other.build[i]
- debug('prerelease compare', i, a, b)
- if (a === undefined && b === undefined) {
- return 0
- } else if (b === undefined) {
- return 1
- } else if (a === undefined) {
- return -1
- } else if (a === b) {
- continue
- } else {
- return compareIdentifiers(a, b)
- }
- } while (++i)
-}
+/***/ }),
-// preminor will bump the version up to the next minor release, and immediately
-// down to pre-release. premajor and prepatch work the same way.
-SemVer.prototype.inc = function (release, identifier) {
- switch (release) {
- case 'premajor':
- this.prerelease.length = 0
- this.patch = 0
- this.minor = 0
- this.major++
- this.inc('pre', identifier)
- break
- case 'preminor':
- this.prerelease.length = 0
- this.patch = 0
- this.minor++
- this.inc('pre', identifier)
- break
- case 'prepatch':
- // If this is already a prerelease, it will bump to the next version
- // drop any prereleases that might already exist, since they are not
- // relevant at this point.
- this.prerelease.length = 0
- this.inc('patch', identifier)
- this.inc('pre', identifier)
- break
- // If the input is a non-prerelease version, this acts the same as
- // prepatch.
- case 'prerelease':
- if (this.prerelease.length === 0) {
- this.inc('patch', identifier)
- }
- this.inc('pre', identifier)
- break
+/***/ 413:
+/***/ (function(module) {
- case 'major':
- // If this is a pre-major version, bump up to the same major version.
- // Otherwise increment major.
- // 1.0.0-5 bumps to 1.0.0
- // 1.1.0 bumps to 2.0.0
- if (this.minor !== 0 ||
- this.patch !== 0 ||
- this.prerelease.length === 0) {
- this.major++
- }
- this.minor = 0
- this.patch = 0
- this.prerelease = []
- break
- case 'minor':
- // If this is a pre-minor version, bump up to the same minor version.
- // Otherwise increment minor.
- // 1.2.0-5 bumps to 1.2.0
- // 1.2.1 bumps to 1.3.0
- if (this.patch !== 0 || this.prerelease.length === 0) {
- this.minor++
- }
- this.patch = 0
- this.prerelease = []
- break
- case 'patch':
- // If this is not a pre-release version, it will increment the patch.
- // If it is a pre-release it will bump up to the same patch version.
- // 1.2.0-5 patches to 1.2.0
- // 1.2.0 patches to 1.2.1
- if (this.prerelease.length === 0) {
- this.patch++
- }
- this.prerelease = []
- break
- // This probably shouldn't be used publicly.
- // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
- case 'pre':
- if (this.prerelease.length === 0) {
- this.prerelease = [0]
- } else {
- var i = this.prerelease.length
- while (--i >= 0) {
- if (typeof this.prerelease[i] === 'number') {
- this.prerelease[i]++
- i = -2
- }
- }
- if (i === -1) {
- // didn't increment anything
- this.prerelease.push(0)
- }
- }
- if (identifier) {
- // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
- // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
- if (this.prerelease[0] === identifier) {
- if (isNaN(this.prerelease[1])) {
- this.prerelease = [identifier, 0]
- }
- } else {
- this.prerelease = [identifier, 0]
- }
- }
- break
+module.exports = require("stream");
- default:
- throw new Error('invalid increment argument: ' + release)
- }
- this.format()
- this.raw = this.version
- return this
-}
+/***/ }),
-exports.inc = inc
-function inc (version, release, loose, identifier) {
- if (typeof (loose) === 'string') {
- identifier = loose
- loose = undefined
- }
+/***/ 414:
+/***/ (function(module, __unusedexports, __webpack_require__) {
- try {
- return new SemVer(version, loose).inc(release, identifier).version
- } catch (er) {
- return null
- }
-}
+"use strict";
-exports.diff = diff
-function diff (version1, version2) {
- if (eq(version1, version2)) {
- return null
- } else {
- var v1 = parse(version1)
- var v2 = parse(version2)
- var prefix = ''
- if (v1.prerelease.length || v2.prerelease.length) {
- prefix = 'pre'
- var defaultResult = 'prerelease'
- }
- for (var key in v1) {
- if (key === 'major' || key === 'minor' || key === 'patch') {
- if (v1[key] !== v2[key]) {
- return prefix + key
- }
- }
- }
- return defaultResult // may be undefined
- }
+var cr = Object.create;
+if (cr) {
+ var callerCache = cr(null);
+ var getterCache = cr(null);
+ callerCache[" size"] = getterCache[" size"] = 0;
}
-exports.compareIdentifiers = compareIdentifiers
-
-var numeric = /^[0-9]+$/
-function compareIdentifiers (a, b) {
- var anum = numeric.test(a)
- var bnum = numeric.test(b)
-
- if (anum && bnum) {
- a = +a
- b = +b
- }
+module.exports = function(Promise) {
+var util = __webpack_require__(248);
+var canEvaluate = util.canEvaluate;
+var isIdentifier = util.isIdentifier;
- return a === b ? 0
- : (anum && !bnum) ? -1
- : (bnum && !anum) ? 1
- : a < b ? -1
- : 1
-}
+var getMethodCaller;
+var getGetter;
+if (true) {
+var makeMethodCaller = function (methodName) {
+ return new Function("ensureMethod", " \n\
+ return function(obj) { \n\
+ 'use strict' \n\
+ var len = this.length; \n\
+ ensureMethod(obj, 'methodName'); \n\
+ switch(len) { \n\
+ case 1: return obj.methodName(this[0]); \n\
+ case 2: return obj.methodName(this[0], this[1]); \n\
+ case 3: return obj.methodName(this[0], this[1], this[2]); \n\
+ case 0: return obj.methodName(); \n\
+ default: \n\
+ return obj.methodName.apply(obj, this); \n\
+ } \n\
+ }; \n\
+ ".replace(/methodName/g, methodName))(ensureMethod);
+};
-exports.rcompareIdentifiers = rcompareIdentifiers
-function rcompareIdentifiers (a, b) {
- return compareIdentifiers(b, a)
-}
+var makeGetter = function (propertyName) {
+ return new Function("obj", " \n\
+ 'use strict'; \n\
+ return obj.propertyName; \n\
+ ".replace("propertyName", propertyName));
+};
-exports.major = major
-function major (a, loose) {
- return new SemVer(a, loose).major
-}
+var getCompiled = function(name, compiler, cache) {
+ var ret = cache[name];
+ if (typeof ret !== "function") {
+ if (!isIdentifier(name)) {
+ return null;
+ }
+ ret = compiler(name);
+ cache[name] = ret;
+ cache[" size"]++;
+ if (cache[" size"] > 512) {
+ var keys = Object.keys(cache);
+ for (var i = 0; i < 256; ++i) delete cache[keys[i]];
+ cache[" size"] = keys.length - 256;
+ }
+ }
+ return ret;
+};
-exports.minor = minor
-function minor (a, loose) {
- return new SemVer(a, loose).minor
-}
+getMethodCaller = function(name) {
+ return getCompiled(name, makeMethodCaller, callerCache);
+};
-exports.patch = patch
-function patch (a, loose) {
- return new SemVer(a, loose).patch
+getGetter = function(name) {
+ return getCompiled(name, makeGetter, getterCache);
+};
}
-exports.compare = compare
-function compare (a, b, loose) {
- return new SemVer(a, loose).compare(new SemVer(b, loose))
+function ensureMethod(obj, methodName) {
+ var fn;
+ if (obj != null) fn = obj[methodName];
+ if (typeof fn !== "function") {
+ var message = "Object " + util.classString(obj) + " has no method '" +
+ util.toString(methodName) + "'";
+ throw new Promise.TypeError(message);
+ }
+ return fn;
}
-exports.compareLoose = compareLoose
-function compareLoose (a, b) {
- return compare(a, b, true)
+function caller(obj) {
+ var methodName = this.pop();
+ var fn = ensureMethod(obj, methodName);
+ return fn.apply(obj, this);
}
+Promise.prototype.call = function (methodName) {
+ var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];};
+ if (true) {
+ if (canEvaluate) {
+ var maybeCaller = getMethodCaller(methodName);
+ if (maybeCaller !== null) {
+ return this._then(
+ maybeCaller, undefined, undefined, args, undefined);
+ }
+ }
+ }
+ args.push(methodName);
+ return this._then(caller, undefined, undefined, args, undefined);
+};
-exports.compareBuild = compareBuild
-function compareBuild (a, b, loose) {
- var versionA = new SemVer(a, loose)
- var versionB = new SemVer(b, loose)
- return versionA.compare(versionB) || versionA.compareBuild(versionB)
+function namedGetter(obj) {
+ return obj[this];
}
-
-exports.rcompare = rcompare
-function rcompare (a, b, loose) {
- return compare(b, a, loose)
+function indexedGetter(obj) {
+ var index = +this;
+ if (index < 0) index = Math.max(0, index + obj.length);
+ return obj[index];
}
+Promise.prototype.get = function (propertyName) {
+ var isIndex = (typeof propertyName === "number");
+ var getter;
+ if (!isIndex) {
+ if (canEvaluate) {
+ var maybeGetter = getGetter(propertyName);
+ getter = maybeGetter !== null ? maybeGetter : namedGetter;
+ } else {
+ getter = namedGetter;
+ }
+ } else {
+ getter = indexedGetter;
+ }
+ return this._then(getter, undefined, undefined, propertyName, undefined);
+};
+};
-exports.sort = sort
-function sort (list, loose) {
- return list.sort(function (a, b) {
- return exports.compareBuild(a, b, loose)
- })
-}
-exports.rsort = rsort
-function rsort (list, loose) {
- return list.sort(function (a, b) {
- return exports.compareBuild(b, a, loose)
- })
-}
+/***/ }),
-exports.gt = gt
-function gt (a, b, loose) {
- return compare(a, b, loose) > 0
-}
+/***/ 417:
+/***/ (function(module) {
-exports.lt = lt
-function lt (a, b, loose) {
- return compare(a, b, loose) < 0
-}
+module.exports = require("crypto");
-exports.eq = eq
-function eq (a, b, loose) {
- return compare(a, b, loose) === 0
-}
+/***/ }),
-exports.neq = neq
-function neq (a, b, loose) {
- return compare(a, b, loose) !== 0
-}
+/***/ 431:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
-exports.gte = gte
-function gte (a, b, loose) {
- return compare(a, b, loose) >= 0
-}
+"use strict";
-exports.lte = lte
-function lte (a, b, loose) {
- return compare(a, b, loose) <= 0
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+ result["default"] = mod;
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const os = __importStar(__webpack_require__(87));
+const utils_1 = __webpack_require__(82);
+/**
+ * Commands
+ *
+ * Command Format:
+ * ::name key=value,key=value::message
+ *
+ * Examples:
+ * ::warning::This is the message
+ * ::set-env name=MY_VAR::some value
+ */
+function issueCommand(command, properties, message) {
+ const cmd = new Command(command, properties, message);
+ process.stdout.write(cmd.toString() + os.EOL);
}
+exports.issueCommand = issueCommand;
+function issue(name, message = '') {
+ issueCommand(name, {}, message);
+}
+exports.issue = issue;
+const CMD_STRING = '::';
+class Command {
+ constructor(command, properties, message) {
+ if (!command) {
+ command = 'missing.command';
+ }
+ this.command = command;
+ this.properties = properties;
+ this.message = message;
+ }
+ toString() {
+ let cmdStr = CMD_STRING + this.command;
+ if (this.properties && Object.keys(this.properties).length > 0) {
+ cmdStr += ' ';
+ let first = true;
+ for (const key in this.properties) {
+ if (this.properties.hasOwnProperty(key)) {
+ const val = this.properties[key];
+ if (val) {
+ if (first) {
+ first = false;
+ }
+ else {
+ cmdStr += ',';
+ }
+ cmdStr += `${key}=${escapeProperty(val)}`;
+ }
+ }
+ }
+ }
+ cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
+ return cmdStr;
+ }
+}
+function escapeData(s) {
+ return utils_1.toCommandValue(s)
+ .replace(/%/g, '%25')
+ .replace(/\r/g, '%0D')
+ .replace(/\n/g, '%0A');
+}
+function escapeProperty(s) {
+ return utils_1.toCommandValue(s)
+ .replace(/%/g, '%25')
+ .replace(/\r/g, '%0D')
+ .replace(/\n/g, '%0A')
+ .replace(/:/g, '%3A')
+ .replace(/,/g, '%2C');
+}
+//# sourceMappingURL=command.js.map
-exports.cmp = cmp
-function cmp (a, op, b, loose) {
- switch (op) {
- case '===':
- if (typeof a === 'object')
- a = a.version
- if (typeof b === 'object')
- b = b.version
- return a === b
-
- case '!==':
- if (typeof a === 'object')
- a = a.version
- if (typeof b === 'object')
- b = b.version
- return a !== b
+/***/ }),
- case '':
- case '=':
- case '==':
- return eq(a, b, loose)
+/***/ 440:
+/***/ (function(module, __unusedexports, __webpack_require__) {
- case '!=':
- return neq(a, b, loose)
+"use strict";
- case '>':
- return gt(a, b, loose)
+var old;
+if (typeof Promise !== "undefined") old = Promise;
+function noConflict() {
+ try { if (Promise === bluebird) Promise = old; }
+ catch (e) {}
+ return bluebird;
+}
+var bluebird = __webpack_require__(983)();
+bluebird.noConflict = noConflict;
+module.exports = bluebird;
- case '>=':
- return gte(a, b, loose)
- case '<':
- return lt(a, b, loose)
+/***/ }),
- case '<=':
- return lte(a, b, loose)
+/***/ 441:
+/***/ (function(module, __unusedexports, __webpack_require__) {
- default:
- throw new TypeError('Invalid operator: ' + op)
- }
-}
+"use strict";
-exports.Comparator = Comparator
-function Comparator (comp, options) {
- if (!options || typeof options !== 'object') {
- options = {
- loose: !!options,
- includePrerelease: false
- }
- }
- if (comp instanceof Comparator) {
- if (comp.loose === !!options.loose) {
- return comp
- } else {
- comp = comp.value
- }
- }
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
- if (!(this instanceof Comparator)) {
- return new Comparator(comp, options)
- }
+var _bluebird = __webpack_require__(440);
- debug('comparator', comp, options)
- this.options = options
- this.loose = !!options.loose
- this.parse(comp)
+var _bluebird2 = _interopRequireDefault(_bluebird);
- if (this.semver === ANY) {
- this.value = ''
- } else {
- this.value = this.operator + this.semver.version
- }
+var _path = __webpack_require__(622);
- debug('comp', this)
-}
+var _path2 = _interopRequireDefault(_path);
-var ANY = {}
-Comparator.prototype.parse = function (comp) {
- var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
- var m = comp.match(r)
+var _minimatch = __webpack_require__(571);
- if (!m) {
- throw new TypeError('Invalid comparator: ' + comp)
- }
+var _minimatch2 = _interopRequireDefault(_minimatch);
- this.operator = m[1] !== undefined ? m[1] : ''
- if (this.operator === '=') {
- this.operator = ''
- }
+var _fsp = __webpack_require__(981);
- // if it literally is just '>' or '' then allow anything.
- if (!m[2]) {
- this.semver = ANY
- } else {
- this.semver = new SemVer(m[2], this.options.loose)
- }
-}
+var _fsp2 = _interopRequireDefault(_fsp);
-Comparator.prototype.toString = function () {
- return this.value
-}
+var _lock = __webpack_require__(859);
-Comparator.prototype.test = function (version) {
- debug('Comparator.test', version, this.options.loose)
+var _lock2 = _interopRequireDefault(_lock);
- if (this.semver === ANY || version === ANY) {
- return true
- }
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- if (typeof version === 'string') {
- try {
- version = new SemVer(version, this.options)
- } catch (er) {
- return false
- }
- }
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- return cmp(version, this.operator, this.semver, this.options)
+function joinWith(dir) {
+ return function (file) {
+ return _path2.default.join(dir, file);
+ };
}
-Comparator.prototype.intersects = function (comp, options) {
- if (!(comp instanceof Comparator)) {
- throw new TypeError('a Comparator is required')
- }
+/**
+ * @class
+ */
- if (!options || typeof options !== 'object') {
- options = {
- loose: !!options,
- includePrerelease: false
- }
- }
+var File = function () {
+ function File(pathname) {
+ _classCallCheck(this, File);
- var rangeTmp
+ this._dir = process.cwd();
+ this._pathname = pathname;
+ }
- if (this.operator === '') {
- if (this.value === '') {
- return true
+ _createClass(File, [{
+ key: '_getStatsSync',
+ value: function _getStatsSync() {
+ return _fsp2.default.statSync(this._pathname);
}
- rangeTmp = new Range(comp.value, options)
- return satisfies(this.value, rangeTmp, options)
- } else if (comp.operator === '') {
- if (comp.value === '') {
- return true
+ }, {
+ key: '_getStats',
+ value: function _getStats() {
+ return _fsp2.default.statAsync(this._pathname);
}
- rangeTmp = new Range(this.value, options)
- return satisfies(comp.semver, rangeTmp, options)
- }
-
- var sameDirectionIncreasing =
- (this.operator === '>=' || this.operator === '>') &&
- (comp.operator === '>=' || comp.operator === '>')
- var sameDirectionDecreasing =
- (this.operator === '<=' || this.operator === '<') &&
- (comp.operator === '<=' || comp.operator === '<')
- var sameSemVer = this.semver.version === comp.semver.version
- var differentDirectionsInclusive =
- (this.operator === '>=' || this.operator === '<=') &&
- (comp.operator === '>=' || comp.operator === '<=')
- var oppositeDirectionsLessThan =
- cmp(this.semver, '<', comp.semver, options) &&
- ((this.operator === '>=' || this.operator === '>') &&
- (comp.operator === '<=' || comp.operator === '<'))
- var oppositeDirectionsGreaterThan =
- cmp(this.semver, '>', comp.semver, options) &&
- ((this.operator === '<=' || this.operator === '<') &&
- (comp.operator === '>=' || comp.operator === '>'))
-
- return sameDirectionIncreasing || sameDirectionDecreasing ||
- (sameSemVer && differentDirectionsInclusive) ||
- oppositeDirectionsLessThan || oppositeDirectionsGreaterThan
-}
-
-exports.Range = Range
-function Range (range, options) {
- if (!options || typeof options !== 'object') {
- options = {
- loose: !!options,
- includePrerelease: false
+ }, {
+ key: '_isHiddenFile',
+ value: function _isHiddenFile() {
+ return (/^\./.test(_path2.default.basename(this._pathname))
+ );
}
- }
+ }, {
+ key: '_isHiddenDirectory',
+ value: function _isHiddenDirectory() {
+ return (/(^|\/)\.[^\/\.]/g.test(this._pathname)
+ );
+ }
+ }, {
+ key: '_depth',
+ value: function _depth(pathname) {
+ return pathname.split(_path2.default.sep).length - 1;
+ }
+ }, {
+ key: '_access',
+ value: function _access(permission) {
+ var hasPermission = true;
- if (range instanceof Range) {
- if (range.loose === !!options.loose &&
- range.includePrerelease === !!options.includePrerelease) {
- return range
- } else {
- return new Range(range.raw, options)
+ return _fsp2.default.accessAsync(this._pathname, permission).catch(function () {
+ return hasPermission = false;
+ }).then(function () {
+ return hasPermission;
+ });
+ }
+ }, {
+ key: '_checkAsyncStats',
+ value: function _checkAsyncStats(type) {
+ return this._getStats().then(function (stats) {
+ return stats[type]();
+ });
}
- }
- if (range instanceof Comparator) {
- return new Range(range.value, options)
- }
+ /**
+ * Synchronously determine if pathname is a directory
+ *
+ * @instance
+ * @memberOf File
+ * @method
+ * isDirectorySync
+ * @return boolean
+ * @example
+ * import File from 'file-js';
+ *
+ * const file = File.create('myDirectory');
+ * if (file.isDirectorySync()) {
+ * console.log('processing directory');
+ * }
+ */
- if (!(this instanceof Range)) {
- return new Range(range, options)
- }
+ }, {
+ key: 'isDirectorySync',
+ value: function isDirectorySync() {
+ return this._getStatsSync().isDirectory();
+ }
- this.options = options
- this.loose = !!options.loose
- this.includePrerelease = !!options.includePrerelease
+ /**
+ * Synchronously determine if pathname is a socket
+ *
+ * @instance
+ * @memberOf File
+ * @method
+ * isSocketSync
+ * @return boolean
+ * @example
+ * import File from 'file-js';
+ *
+ * const file = File.create('mysocket');
+ * if (file.isSocketSync()) {
+ * console.log('processing socket');
+ * }
+ */
- // First, split based on boolean or ||
- this.raw = range
- this.set = range.split(/\s*\|\|\s*/).map(function (range) {
- return this.parseRange(range.trim())
- }, this).filter(function (c) {
- // throw out any that are not relevant for whatever reason
- return c.length
- })
+ }, {
+ key: 'isSocketSync',
+ value: function isSocketSync() {
+ return this._getStatsSync().isSocket();
+ }
- if (!this.set.length) {
- throw new TypeError('Invalid SemVer Range: ' + range)
- }
+ /**
+ * Synchronously determine if pathname is a file
+ *
+ * @instance
+ * @memberOf File
+ * @method
+ * isFileSync
+ * @return boolean
+ * @example
+ * import File from 'file-js';
+ *
+ * const file = File.create('myDirectory');
+ * if (file.isFileSync()) {
+ * console.log('processing file');
+ * }
+ */
- this.format()
-}
+ }, {
+ key: 'isFileSync',
+ value: function isFileSync() {
+ return this._getStatsSync().isFile();
+ }
-Range.prototype.format = function () {
- this.range = this.set.map(function (comps) {
- return comps.join(' ').trim()
- }).join('||').trim()
- return this.range
-}
+ /**
+ * Determine if pathname is a directory
+ *
+ * @instance
+ * @memberOf File
+ * @method
+ * isDirectory
+ * @return If the Promise fulfils, the fulfilment value is
+ * a boolean indicating if the pathname is a directory
+ * @example
+ * import File from 'file-js';
+ *
+ * const file = File.create('myDirectory');
+ * file.isDirectory((isDirectory) => {
+ * console.log(isDirectory);
+ * });
+ *
+ */
-Range.prototype.toString = function () {
- return this.range
-}
+ }, {
+ key: 'isDirectory',
+ value: function isDirectory() {
+ return this._checkAsyncStats('isDirectory');
+ }
-Range.prototype.parseRange = function (range) {
- var loose = this.options.loose
- range = range.trim()
- // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
- var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]
- range = range.replace(hr, hyphenReplace)
- debug('hyphen replace', range)
- // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
- range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)
- debug('comparator trim', range, re[t.COMPARATORTRIM])
+ /**
+ * Determine if pathname is a Socket
+ *
+ * @instance
+ * @memberOf File
+ * @method
+ * isSocket
+ * @return If the Promise fulfils, the fulfilment value is
+ * a boolean indicating if the pathname is a Socket
+ * @example
+ * import File from 'file-js';
+ *
+ * const file = File.create('mySocket');
+ * file.isSocket((isSocket) => {
+ * console.log(isSocket);
+ * });
+ *
+ */
- // `~ 1.2.3` => `~1.2.3`
- range = range.replace(re[t.TILDETRIM], tildeTrimReplace)
+ }, {
+ key: 'isSocket',
+ value: function isSocket() {
+ return this._checkAsyncStats('isSocket');
+ }
- // `^ 1.2.3` => `^1.2.3`
- range = range.replace(re[t.CARETTRIM], caretTrimReplace)
+ /**
+ * Determine if pathname is a file
+ *
+ * @instance
+ * @memberOf File
+ * @method
+ * isDirectory
+ * @return If the Promise fulfils, the fulfilment value is
+ * a boolean indicating if the pathname is a file
+ * @example
+ * import File from 'file-js';
+ *
+ * const file = File.create('myDirectory');
+ * file.isFile((isFile) => {
+ * console.log(isFile);
+ * });
+ */
- // normalize spaces
- range = range.split(/\s+/).join(' ')
+ }, {
+ key: 'isFile',
+ value: function isFile() {
+ return this._checkAsyncStats('isFile');
+ }
- // At this point, the range is completely trimmed and
- // ready to be split into comparators.
+ /**
+ * Synchronously determine if pathname is a hidden file
+ *
+ * @instance
+ * @memberOf File
+ * @method
+ * isHiddenSync
+ * @return boolean
+ * @example
+ * import File from 'file-js';
+ *
+ * const file = File.create('./myHiddenFile');
+ * if (file.isHiddenSync()) {
+ * console.log('processing hidden file');
+ * }
+ */
- var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
- var set = range.split(' ').map(function (comp) {
- return parseComparator(comp, this.options)
- }, this).join(' ').split(/\s+/)
- if (this.options.loose) {
- // in loose mode, throw out any that are not valid comparators
- set = set.filter(function (comp) {
- return !!comp.match(compRe)
- })
- }
- set = set.map(function (comp) {
- return new Comparator(comp, this.options)
- }, this)
+ }, {
+ key: 'isHiddenSync',
+ value: function isHiddenSync() {
+ if (!this.isDirectorySync()) {
+ return this._isHiddenFile();
+ }
+ return this._isHiddenDirectory();
+ }
- return set
-}
+ /**
+ * Determine if pathname is a file
+ *
+ * @instance
+ * @memberOf File
+ * @method
+ * isDirectory
+ * @return If the Promise fulfils, the fulfilment value is
+ * a boolean indicating if the pathname is a file
+ * @example
+ * import File from 'file-js';
+ *
+ * const file = File.create('myDirectory');
+ * file.isFile((isFile) => {
+ * console.log(isFile);
+ * });
+ */
-Range.prototype.intersects = function (range, options) {
- if (!(range instanceof Range)) {
- throw new TypeError('a Range is required')
- }
+ }, {
+ key: 'isHidden',
+ value: function isHidden() {
+ var _this = this;
- return this.set.some(function (thisComparators) {
- return (
- isSatisfiable(thisComparators, options) &&
- range.set.some(function (rangeComparators) {
- return (
- isSatisfiable(rangeComparators, options) &&
- thisComparators.every(function (thisComparator) {
- return rangeComparators.every(function (rangeComparator) {
- return thisComparator.intersects(rangeComparator, options)
- })
- })
- )
- })
- )
- })
-}
+ this.isDirectory().then(function (isDirectory) {
+ if (!isDirectory) {
+ return _this._isHiddenFile();
+ }
+ return _this._isHiddenDirectory();
+ });
+ }
-// take a set of comparators and determine whether there
-// exists a version which can satisfy it
-function isSatisfiable (comparators, options) {
- var result = true
- var remainingComparators = comparators.slice()
- var testComparator = remainingComparators.pop()
+ /**
+ * Renames the abstract pathname
+ *
+ * @instance
+ * @memberOf File
+ * @param {string|File} pathname - pathname either as a string or File instance
+ * @method
+ * rename
+ * @return If the Promise fulfils, the fulfilment value is undefined
+ * @example
+ * import File from 'file-js';
+ *
+ * const original = File.create('fileA');
+ * const renameTo = File.create('fileB');
+ * original
+ * .rename(renameTo)
+ * .then(() => {
+ * console.log(original.getName()) // prints fileA
+ * });
+ */
- while (result && remainingComparators.length) {
- result = remainingComparators.every(function (otherComparator) {
- return testComparator.intersects(otherComparator, options)
- })
+ }, {
+ key: 'rename',
+ value: function rename(pathname) {
+ var _this2 = this;
- testComparator = remainingComparators.pop()
- }
+ var newname = pathname instanceof File ? pathname.getName() : pathname;
- return result
-}
+ return _fsp2.default.renameAsync(this._pathname, newname).then(function () {
+ _this2._pathname = newname;
+ });
+ }
-// Mostly just for testing and legacy API reasons
-exports.toComparators = toComparators
-function toComparators (range, options) {
- return new Range(range, options).set.map(function (comp) {
- return comp.map(function (c) {
- return c.value
- }).join(' ').trim().split(' ')
- })
-}
+ /**
+ * Synchronously get list of files, if pathname is a directory
+ *
+ * @instance
+ * @memberOf File
+ * @method
+ * getListSync
+ * @return array of files
+ * @example
+ * import File from 'file-js';
+ *
+ * const file = File.create('./myHiddenFile');
+ * const files = file.getListSync();
+ * console.log(files);
+ */
-// comprised of xranges, tildes, stars, and gtlt's at this point.
-// already replaced the hyphen ranges
-// turn into a set of JUST comparators.
-function parseComparator (comp, options) {
- debug('comp', comp, options)
- comp = replaceCarets(comp, options)
- debug('caret', comp)
- comp = replaceTildes(comp, options)
- debug('tildes', comp)
- comp = replaceXRanges(comp, options)
- debug('xrange', comp)
- comp = replaceStars(comp, options)
- debug('stars', comp)
- return comp
-}
+ }, {
+ key: 'getListSync',
+ value: function getListSync() {
+ var _this3 = this;
-function isX (id) {
- return !id || id.toLowerCase() === 'x' || id === '*'
-}
+ if (this.isDirectorySync()) {
+ return _fsp2.default.readdirSync(this._pathname).map(function (file) {
+ return _path2.default.join(_this3._pathname, file);
+ });
+ }
+ return null;
+ }
-// ~, ~> --> * (any, kinda silly)
-// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
-// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
-// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
-// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
-// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
-function replaceTildes (comp, options) {
- return comp.trim().split(/\s+/).map(function (comp) {
- return replaceTilde(comp, options)
- }).join(' ')
-}
+ /**
+ * Get list of file objects, if pathname is a directory
+ *
+ * @instance
+ * @memberOf File
+ * @method
+ * getList
+ * @param {string=} glob - file glob
+ * @return a promise. If the Promise fulfils, the fulfilment value is
+ * a list of pathnames
+ * @example
+ * import File from 'file-js';
+ *
+ * // get all json files
+ * const file = File.create('./myDirectory');
+ * file.getFiles('*.json')
+ * .then((jsonFiles) => {
+ * console.log(jsonFiles);
+ * });
+ */
-function replaceTilde (comp, options) {
- var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]
- return comp.replace(r, function (_, M, m, p, pr) {
- debug('tilde', comp, _, M, m, p, pr)
- var ret
+ }, {
+ key: 'getList',
+ value: function getList(glob) {
+ return this.getFiles(glob).then(function (list) {
+ if (!list) return [];
- if (isX(M)) {
- ret = ''
- } else if (isX(m)) {
- ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
- } else if (isX(p)) {
- // ~1.2 == >=1.2.0 <1.3.0
- ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
- } else if (pr) {
- debug('replaceTilde pr', pr)
- ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
- ' <' + M + '.' + (+m + 1) + '.0'
- } else {
- // ~1.2.3 == >=1.2.3 <1.3.0
- ret = '>=' + M + '.' + m + '.' + p +
- ' <' + M + '.' + (+m + 1) + '.0'
+ return list.map(function (pathname) {
+ return pathname.getName();
+ });
+ });
}
- debug('tilde return', ret)
- return ret
- })
-}
-
-// ^ --> * (any, kinda silly)
-// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
-// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
-// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
-// ^1.2.3 --> >=1.2.3 <2.0.0
-// ^1.2.0 --> >=1.2.0 <2.0.0
-function replaceCarets (comp, options) {
- return comp.trim().split(/\s+/).map(function (comp) {
- return replaceCaret(comp, options)
- }).join(' ')
-}
+ /**
+ * Get list of file objects, if pathname is a directory
+ *
+ * @instance
+ * @memberOf File
+ * @param {string=} glob - file glob
+ * @method
+ * getFiles
+ * @return a promise. If the Promise fulfils, the fulfilment value is
+ * a list of File objects
+ * @example
+ * import File from 'file-js';
+ *
+ * // get last modified time of all json files
+ * const file = File.create('./myDirectory');
+ * file.getFiles('*.json')
+ * .then((jsonFiles) => {
+ * console.log(jsonFiles.map(file => file.lastModifiedSync()));
+ * });
+ */
-function replaceCaret (comp, options) {
- debug('caret', comp, options)
- var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]
- return comp.replace(r, function (_, M, m, p, pr) {
- debug('caret', comp, _, M, m, p, pr)
- var ret
+ }, {
+ key: 'getFiles',
+ value: function getFiles(glob) {
+ if (!this.isDirectory()) return _bluebird2.default.resolve(null);
- if (isX(M)) {
- ret = ''
- } else if (isX(m)) {
- ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
- } else if (isX(p)) {
- if (M === '0') {
- ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
- } else {
- ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'
- }
- } else if (pr) {
- debug('replaceCaret pr', pr)
- if (M === '0') {
- if (m === '0') {
- ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
- ' <' + M + '.' + m + '.' + (+p + 1)
- } else {
- ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
- ' <' + M + '.' + (+m + 1) + '.0'
- }
- } else {
- ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
- ' <' + (+M + 1) + '.0.0'
- }
- } else {
- debug('no pr')
- if (M === '0') {
- if (m === '0') {
- ret = '>=' + M + '.' + m + '.' + p +
- ' <' + M + '.' + m + '.' + (+p + 1)
- } else {
- ret = '>=' + M + '.' + m + '.' + p +
- ' <' + M + '.' + (+m + 1) + '.0'
- }
- } else {
- ret = '>=' + M + '.' + m + '.' + p +
- ' <' + (+M + 1) + '.0.0'
- }
- }
+ var results = _fsp2.default.readdirAsync(this._pathname).map(joinWith(this._pathname)).then(function (list) {
+ if (!list) return _bluebird2.default.resolve(null);
- debug('caret return', ret)
- return ret
- })
-}
+ return list.map(function (pathname) {
+ return File.create(pathname);
+ });
+ });
-function replaceXRanges (comp, options) {
- debug('replaceXRanges', comp, options)
- return comp.split(/\s+/).map(function (comp) {
- return replaceXRange(comp, options)
- }).join(' ')
-}
+ if (glob) return results.filter(function (file) {
+ return file.isMatch(glob);
+ });
-function replaceXRange (comp, options) {
- comp = comp.trim()
- var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]
- return comp.replace(r, function (ret, gtlt, M, m, p, pr) {
- debug('xRange', comp, ret, gtlt, M, m, p, pr)
- var xM = isX(M)
- var xm = xM || isX(m)
- var xp = xm || isX(p)
- var anyX = xp
+ return results;
+ }
- if (gtlt === '=' && anyX) {
- gtlt = ''
- }
+ /**
+ * Synchronously get list of file objects, if pathname is a directory
+ *
+ * @instance
+ * @memberOf File
+ * @method
+ * getFileSync
+ * @return array of files
+ * @example
+ * import File from 'file-js';
+ *
+ * const file = File.create('./myHiddenFile');
+ * const files = file.getFileSync();
+ * console.log(files);
+ */
- // if we're including prereleases in the match, then we need
- // to fix this to -0, the lowest possible prerelease value
- pr = options.includePrerelease ? '-0' : ''
+ }, {
+ key: 'getFilesSync',
+ value: function getFilesSync(glob) {
+ if (this.isDirectorySync()) {
+ var files = this.getListSync().map(function (pathname) {
+ return File.create(pathname);
+ });
- if (xM) {
- if (gtlt === '>' || gtlt === '<') {
- // nothing is allowed
- ret = '<0.0.0-0'
- } else {
- // nothing is forbidden
- ret = '*'
- }
- } else if (gtlt && anyX) {
- // we know patch is an x, because we have any x at all.
- // replace X with 0
- if (xm) {
- m = 0
- }
- p = 0
+ if (glob) return files.filter(function (file) {
+ return file.isMatch(glob);
+ });
- if (gtlt === '>') {
- // >1 => >=2.0.0
- // >1.2 => >=1.3.0
- // >1.2.3 => >= 1.2.4
- gtlt = '>='
- if (xm) {
- M = +M + 1
- m = 0
- p = 0
- } else {
- m = +m + 1
- p = 0
- }
- } else if (gtlt === '<=') {
- // <=0.7.x is actually <0.8.0, since any 0.7.x should
- // pass. Similarly, <=7.x is actually <8.0.0, etc.
- gtlt = '<'
- if (xm) {
- M = +M + 1
- } else {
- m = +m + 1
- }
+ return files;
}
-
- ret = gtlt + M + '.' + m + '.' + p + pr
- } else if (xm) {
- ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr
- } else if (xp) {
- ret = '>=' + M + '.' + m + '.0' + pr +
- ' <' + M + '.' + (+m + 1) + '.0' + pr
+ return null;
}
- debug('xRange return', ret)
+ /**
+ * Synchronously caculate the depth of a directory
+ *
+ * @instance
+ * @memberOf File
+ * @method
+ * getDepthSync
+ * @return boolean
+ * @example
+ * import File from 'file-js';
+ *
+ * const file = File.create('myDirectory');
+ * console.log(file.getDepthSync());
+ */
- return ret
- })
-}
+ }, {
+ key: 'getDepthSync',
+ value: function getDepthSync() {
+ if (!this.isDirectorySync()) {
+ return this._depth(_path2.default.dirname(this._pathname));
+ }
+ return this._depth(this._pathname);
+ }
-// Because * is AND-ed with everything else in the comparator,
-// and '' means "any version", just remove the *s entirely.
-function replaceStars (comp, options) {
- debug('replaceStars', comp, options)
- // Looseness is ignored here. star is always as loose as it gets!
- return comp.trim().replace(re[t.STAR], '')
-}
+ /**
+ * Returns the pathname as a string
+ *
+ * @instance
+ * @memberOf File
+ * @method
+ * getName
+ * @return String
+ * @example
+ * import File from 'file-js';
+ *
+ * const file = File.create('myDirectory');
+ * console.log(file.getName());
+ */
-// This function is passed to string.replace(re[t.HYPHENRANGE])
-// M, m, patch, prerelease, build
-// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
-// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
-// 1.2 - 3.4 => >=1.2.0 <3.5.0
-function hyphenReplace ($0,
- from, fM, fm, fp, fpr, fb,
- to, tM, tm, tp, tpr, tb) {
- if (isX(fM)) {
- from = ''
- } else if (isX(fm)) {
- from = '>=' + fM + '.0.0'
- } else if (isX(fp)) {
- from = '>=' + fM + '.' + fm + '.0'
- } else {
- from = '>=' + from
- }
+ }, {
+ key: 'getName',
+ value: function getName() {
+ return this._pathname;
+ }
- if (isX(tM)) {
- to = ''
- } else if (isX(tm)) {
- to = '<' + (+tM + 1) + '.0.0'
- } else if (isX(tp)) {
- to = '<' + tM + '.' + (+tm + 1) + '.0'
- } else if (tpr) {
- to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr
- } else {
- to = '<=' + to
- }
+ /**
+ * Returns the absolutePath
+ *
+ * @instance
+ * @memberOf File
+ * @method
+ * getAbsolutePath
+ * @return String
+ * @example
+ * import File from 'file-js';
+ *
+ * const file = File.create('myFile');
+ * console.log(file.getAbsolutePath());
+ */
- return (from + ' ' + to).trim()
-}
+ }, {
+ key: 'getAbsolutePath',
+ value: function getAbsolutePath() {
+ if (_path2.default.isAbsolute(this._pathname)) {
+ return this._pathname;
+ }
+ return [this._dir, this._pathname].join(_path2.default.sep);
+ }
-// if ANY of the sets match ALL of its comparators, then pass
-Range.prototype.test = function (version) {
- if (!version) {
- return false
- }
+ /**
+ * Returns the canonical path
+ *
+ * @instance
+ * @memberOf File
+ * @method
+ * getCanonicalPath
+ * @return String
+ * @example
+ * import File from 'file-js';
+ *
+ * const file = File.create('myFile');
+ * console.log(file.getCanonicalPath());
+ */
- if (typeof version === 'string') {
- try {
- version = new SemVer(version, this.options)
- } catch (er) {
- return false
+ }, {
+ key: 'getCanonicalPath',
+ value: function getCanonicalPath() {
+ return _path2.default.normalize(this.getAbsolutePath());
}
- }
- for (var i = 0; i < this.set.length; i++) {
- if (testSet(this.set[i], version, this.options)) {
- return true
+ /**
+ * Returns the file extension.
+ *
+ * @instance
+ * @memberOf File
+ * @method
+ * getPathExtension
+ * @return String
+ * @example
+ * import File from 'file-js';
+ *
+ * const file = File.create('./tmp.sh');
+ * console.log(file.getPathExtension()); // sh
+ */
+
+ }, {
+ key: 'getPathExtension',
+ value: function getPathExtension() {
+ return _path2.default.extname(this._pathname).substring(1);
+ }
+ }, {
+ key: 'isMatch',
+ value: function isMatch(globPattern) {
+ var glob = new _minimatch2.default.Minimatch(globPattern, {
+ matchBase: true
+ });
+ return glob.match(this._pathname);
+ }
+ }, {
+ key: 'lastModifiedSync',
+ value: function lastModifiedSync() {
+ return this._getStatsSync()['mtime'];
+ }
+ }, {
+ key: 'lastAccessedSync',
+ value: function lastAccessedSync() {
+ return this._getStatsSync()['atime'];
+ }
+ }, {
+ key: 'lastChangedSync',
+ value: function lastChangedSync() {
+ return this._getStatsSync()['ctime'];
+ }
+ }, {
+ key: 'sizeSync',
+ value: function sizeSync() {
+ return this._getStatsSync().size;
+ }
+ }, {
+ key: 'isWritable',
+ value: function isWritable() {
+ return this._access(_fsp2.default.W_OK);
+ }
+ }, {
+ key: 'isReadable',
+ value: function isReadable() {
+ return this._access(_fsp2.default.R_OK);
+ }
+ }, {
+ key: 'isExecutable',
+ value: function isExecutable() {
+ return this._access(_fsp2.default.X_OK);
+ }
+ }, {
+ key: 'delete',
+ value: function _delete() {
+ return _fsp2.default.unlinkAsync(this._pathname);
}
- }
- return false
-}
-function testSet (set, version, options) {
- for (var i = 0; i < set.length; i++) {
- if (!set[i].test(version)) {
- return false
+ /**
+ * Locks the pathname
+ *
+ * @instance
+ * @memberOf File
+ * @method
+ * withLock
+ * @return returning value of function
+ * @example
+ * import File from 'file-js';
+ *
+ * const file = File.create('myFile');
+ * file.with(() => {
+ * if (file.isFileSync()) {
+ * file.delete();
+ * }
+ * });
+ */
+
+ }, {
+ key: 'withLock',
+ value: function withLock(fn) {
+ var _this4 = this;
+
+ return _lock2.default.lockAsync(this._pathname).then(function () {
+ return fn();
+ }).finally(function () {
+ _lock2.default.unlockAsync(_this4._pathname);
+ });
}
- }
- if (version.prerelease.length && !options.includePrerelease) {
- // Find the set of versions that are allowed to have prereleases
- // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
- // That should allow `1.2.3-pr.2` to pass.
- // However, `1.2.4-alpha.notready` should NOT be allowed,
- // even though it's within the range set by the comparators.
- for (i = 0; i < set.length; i++) {
- debug(set[i].semver)
- if (set[i].semver === ANY) {
- continue
- }
+ /**
+ * Static factory method to create an instance of File
+ *
+ * @static
+ * @memberOf File
+ * @method
+ * create
+ * @return File instance
+ * @example
+ * import File from 'file-js';
+ *
+ * const file = File.create();
+ */
- if (set[i].semver.prerelease.length > 0) {
- var allowed = set[i].semver
- if (allowed.major === version.major &&
- allowed.minor === version.minor &&
- allowed.patch === version.patch) {
- return true
- }
- }
+ }], [{
+ key: 'create',
+ value: function create(filename) {
+ return new File(filename);
}
+ }]);
- // Version has a -pre, but it's not one of the ones we like.
- return false
- }
+ return File;
+}();
- return true
-}
+module.exports.create = File.create;
-exports.satisfies = satisfies
-function satisfies (version, range, options) {
- try {
- range = new Range(range, options)
- } catch (er) {
- return false
- }
- return range.test(version)
-}
+/***/ }),
-exports.maxSatisfying = maxSatisfying
-function maxSatisfying (versions, range, options) {
- var max = null
- var maxSV = null
- try {
- var rangeObj = new Range(range, options)
- } catch (er) {
- return null
- }
- versions.forEach(function (v) {
- if (rangeObj.test(v)) {
- // satisfies(v, range, options)
- if (!max || maxSV.compare(v) === -1) {
- // compare(max, v, true)
- max = v
- maxSV = new SemVer(max, options)
- }
- }
- })
- return max
-}
+/***/ 448:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
-exports.minSatisfying = minSatisfying
-function minSatisfying (versions, range, options) {
- var min = null
- var minSV = null
- try {
- var rangeObj = new Range(range, options)
- } catch (er) {
- return null
- }
- versions.forEach(function (v) {
- if (rangeObj.test(v)) {
- // satisfies(v, range, options)
- if (!min || minSV.compare(v) === 1) {
- // compare(min, v, true)
- min = v
- minSV = new SemVer(min, options)
- }
- }
- })
- return min
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.octokit = void 0;
+const action_1 = __webpack_require__(725);
+const plugin_retry_1 = __webpack_require__(524);
+// plugins for octokit
+const MyOctokit = action_1.Octokit.plugin(plugin_retry_1.retry);
+function octokit(setting) {
+ return new MyOctokit({
+ auth: setting.authToken,
+ baseUrl: setting.apiUrl,
+ previews: [
+ "baptiste",
+ "lydian",
+ ],
+ });
}
+exports.octokit = octokit;
-exports.minVersion = minVersion
-function minVersion (range, loose) {
- range = new Range(range, loose)
- var minver = new SemVer('0.0.0')
- if (range.test(minver)) {
- return minver
- }
+/***/ }),
- minver = new SemVer('0.0.0-0')
- if (range.test(minver)) {
- return minver
- }
+/***/ 450:
+/***/ (function(__unusedmodule, exports) {
- minver = null
- for (var i = 0; i < range.set.length; ++i) {
- var comparators = range.set[i]
+"use strict";
- comparators.forEach(function (comparator) {
- // Clone to avoid manipulating the comparator's semver object.
- var compver = new SemVer(comparator.semver.version)
- switch (comparator.operator) {
- case '>':
- if (compver.prerelease.length === 0) {
- compver.patch++
- } else {
- compver.prerelease.push(0)
- }
- compver.raw = compver.format()
- /* fallthrough */
- case '':
- case '>=':
- if (!minver || gt(minver, compver)) {
- minver = compver
- }
- break
- case '<':
- case '<=':
- /* Ignore maximum versions */
- break
- /* istanbul ignore next */
- default:
- throw new Error('Unexpected operation: ' + comparator.operator)
- }
- })
- }
- if (minver && range.test(minver)) {
- return minver
- }
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
- return null
-}
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-exports.validRange = validRange
-function validRange (range, options) {
- try {
- // Return '*' instead of '' so that truthiness works.
- // This will throw if it's invalid anyway
- return new Range(range, options).range || '*'
- } catch (er) {
- return null
- }
-}
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-// Determine if version is less than all the versions possible in the range
-exports.ltr = ltr
-function ltr (version, range, options) {
- return outside(version, range, '<', options)
-}
+var UnitNormaliser = function () {
+ function UnitNormaliser() {
+ _classCallCheck(this, UnitNormaliser);
-// Determine if version is greater than all the versions possible in the range.
-exports.gtr = gtr
-function gtr (version, range, options) {
- return outside(version, range, '>', options)
-}
+ this.namesVarients = {};
+ }
-exports.outside = outside
-function outside (version, range, hilo, options) {
- version = new SemVer(version, options)
- range = new Range(range, options)
+ _createClass(UnitNormaliser, [{
+ key: 'addAlias',
+ value: function addAlias(unitName, alias) {
+ if (!unitName) throw new Error('absent name!');
+ if (!alias) throw new Error('absent alias!');
- var gtfn, ltefn, ltfn, comp, ecomp
- switch (hilo) {
- case '>':
- gtfn = gt
- ltefn = lte
- ltfn = lt
- comp = '>'
- ecomp = '>='
- break
- case '<':
- gtfn = lt
- ltefn = gte
- ltfn = gt
- comp = '<'
- ecomp = '<='
- break
- default:
- throw new TypeError('Must provide a hilo val of "<" or ">"')
- }
+ if (!this.namesVarients[unitName]) {
+ this.namesVarients[unitName] = unitName;
+ }
+ this.namesVarients[alias.toLowerCase()] = unitName;
+ }
+ }, {
+ key: 'normalise',
+ value: function normalise(alias) {
+ if (!alias) return;
+ return this.namesVarients[alias.toLowerCase()];
+ }
+ }]);
- // If it satisifes the range it is not outside
- if (satisfies(version, range, options)) {
- return false
- }
+ return UnitNormaliser;
+}();
- // From now on, variable terms are as if we're in "gtr" mode.
- // but note that everything is flipped for the "ltr" function.
+exports.default = UnitNormaliser;
- for (var i = 0; i < range.set.length; ++i) {
- var comparators = range.set[i]
+/***/ }),
- var high = null
- var low = null
+/***/ 454:
+/***/ (function(module, exports, __webpack_require__) {
- comparators.forEach(function (comparator) {
- if (comparator.semver === ANY) {
- comparator = new Comparator('>=0.0.0')
- }
- high = high || comparator
- low = low || comparator
- if (gtfn(comparator.semver, high.semver, options)) {
- high = comparator
- } else if (ltfn(comparator.semver, low.semver, options)) {
- low = comparator
- }
- })
+"use strict";
- // If the edge version comparator has a operator then our version
- // isn't outside it
- if (high.operator === comp || high.operator === ecomp) {
- return false
- }
- // If the lowest version comparator has an operator and our version
- // is less than it then it isn't higher than the range
- if ((!low.operator || low.operator === comp) &&
- ltefn(version, low.semver)) {
- return false
- } else if (low.operator === ecomp && ltfn(version, low.semver)) {
- return false
- }
- }
- return true
-}
+Object.defineProperty(exports, '__esModule', { value: true });
-exports.prerelease = prerelease
-function prerelease (version, options) {
- var parsed = parse(version, options)
- return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
-}
+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
-exports.intersects = intersects
-function intersects (r1, r2, options) {
- r1 = new Range(r1, options)
- r2 = new Range(r2, options)
- return r1.intersects(r2)
+var Stream = _interopDefault(__webpack_require__(413));
+var http = _interopDefault(__webpack_require__(605));
+var Url = _interopDefault(__webpack_require__(835));
+var https = _interopDefault(__webpack_require__(211));
+var zlib = _interopDefault(__webpack_require__(761));
+
+// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
+
+// fix for "Readable" isn't a named export issue
+const Readable = Stream.Readable;
+
+const BUFFER = Symbol('buffer');
+const TYPE = Symbol('type');
+
+class Blob {
+ constructor() {
+ this[TYPE] = '';
+
+ const blobParts = arguments[0];
+ const options = arguments[1];
+
+ const buffers = [];
+ let size = 0;
+
+ if (blobParts) {
+ const a = blobParts;
+ const length = Number(a.length);
+ for (let i = 0; i < length; i++) {
+ const element = a[i];
+ let buffer;
+ if (element instanceof Buffer) {
+ buffer = element;
+ } else if (ArrayBuffer.isView(element)) {
+ buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);
+ } else if (element instanceof ArrayBuffer) {
+ buffer = Buffer.from(element);
+ } else if (element instanceof Blob) {
+ buffer = element[BUFFER];
+ } else {
+ buffer = Buffer.from(typeof element === 'string' ? element : String(element));
+ }
+ size += buffer.length;
+ buffers.push(buffer);
+ }
+ }
+
+ this[BUFFER] = Buffer.concat(buffers);
+
+ let type = options && options.type !== undefined && String(options.type).toLowerCase();
+ if (type && !/[^\u0020-\u007E]/.test(type)) {
+ this[TYPE] = type;
+ }
+ }
+ get size() {
+ return this[BUFFER].length;
+ }
+ get type() {
+ return this[TYPE];
+ }
+ text() {
+ return Promise.resolve(this[BUFFER].toString());
+ }
+ arrayBuffer() {
+ const buf = this[BUFFER];
+ const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
+ return Promise.resolve(ab);
+ }
+ stream() {
+ const readable = new Readable();
+ readable._read = function () {};
+ readable.push(this[BUFFER]);
+ readable.push(null);
+ return readable;
+ }
+ toString() {
+ return '[object Blob]';
+ }
+ slice() {
+ const size = this.size;
+
+ const start = arguments[0];
+ const end = arguments[1];
+ let relativeStart, relativeEnd;
+ if (start === undefined) {
+ relativeStart = 0;
+ } else if (start < 0) {
+ relativeStart = Math.max(size + start, 0);
+ } else {
+ relativeStart = Math.min(start, size);
+ }
+ if (end === undefined) {
+ relativeEnd = size;
+ } else if (end < 0) {
+ relativeEnd = Math.max(size + end, 0);
+ } else {
+ relativeEnd = Math.min(end, size);
+ }
+ const span = Math.max(relativeEnd - relativeStart, 0);
+
+ const buffer = this[BUFFER];
+ const slicedBuffer = buffer.slice(relativeStart, relativeStart + span);
+ const blob = new Blob([], { type: arguments[2] });
+ blob[BUFFER] = slicedBuffer;
+ return blob;
+ }
}
-exports.coerce = coerce
-function coerce (version, options) {
- if (version instanceof SemVer) {
- return version
- }
+Object.defineProperties(Blob.prototype, {
+ size: { enumerable: true },
+ type: { enumerable: true },
+ slice: { enumerable: true }
+});
- if (typeof version === 'number') {
- version = String(version)
- }
+Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
+ value: 'Blob',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
- if (typeof version !== 'string') {
- return null
- }
+/**
+ * fetch-error.js
+ *
+ * FetchError interface for operational errors
+ */
- options = options || {}
+/**
+ * Create FetchError instance
+ *
+ * @param String message Error message for human
+ * @param String type Error type for machine
+ * @param String systemError For Node.js system error
+ * @return FetchError
+ */
+function FetchError(message, type, systemError) {
+ Error.call(this, message);
- var match = null
- if (!options.rtl) {
- match = version.match(re[t.COERCE])
- } else {
- // Find the right-most coercible string that does not share
- // a terminus with a more left-ward coercible string.
- // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
- //
- // Walk through the string checking with a /g regexp
- // Manually set the index so as to pick up overlapping matches.
- // Stop when we get a match that ends at the string end, since no
- // coercible string can be more right-ward without the same terminus.
- var next
- while ((next = re[t.COERCERTL].exec(version)) &&
- (!match || match.index + match[0].length !== version.length)
- ) {
- if (!match ||
- next.index + next[0].length !== match.index + match[0].length) {
- match = next
- }
- re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length
- }
- // leave it in a clean state
- re[t.COERCERTL].lastIndex = -1
- }
+ this.message = message;
+ this.type = type;
- if (match === null) {
- return null
+ // when err.type is `system`, err.code contains system error code
+ if (systemError) {
+ this.code = this.errno = systemError.code;
}
- return parse(match[2] +
- '.' + (match[3] || '0') +
- '.' + (match[4] || '0'), options)
+ // hide custom error implementation details from end-users
+ Error.captureStackTrace(this, this.constructor);
}
+FetchError.prototype = Object.create(Error.prototype);
+FetchError.prototype.constructor = FetchError;
+FetchError.prototype.name = 'FetchError';
-/***/ }),
-/* 281 */,
-/* 282 */,
-/* 283 */,
-/* 284 */,
-/* 285 */,
-/* 286 */,
-/* 287 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
+let convert;
+try {
+ convert = __webpack_require__(18).convert;
+} catch (e) {}
-"use strict";
+const INTERNALS = Symbol('Body internals');
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.GitAuthHelper = void 0;
-const assert = __importStar(__webpack_require__(357));
-const core = __importStar(__webpack_require__(470));
-const coreCommand = __importStar(__webpack_require__(431));
-const exec = __importStar(__webpack_require__(986));
-const fs = __importStar(__webpack_require__(747));
-const io = __importStar(__webpack_require__(1));
-const os = __importStar(__webpack_require__(87));
-const path = __importStar(__webpack_require__(622));
-const uuid_1 = __webpack_require__(62);
-const url_1 = __webpack_require__(835);
-const stateHelper = __importStar(__webpack_require__(153));
-const IS_WINDOWS = process.platform === 'win32';
-const SSH_COMMAND_KEY = 'core.sshCommand';
-class GitAuthHelper {
- constructor(git, settings) {
- this.sshCommand = '';
- this.sshKeyPath = '';
- this.sshKnownHostsPath = '';
- this.git = git;
- this.settings = settings;
- // Token auth header
- const serverUrl = new url_1.URL(process.env['GITHUB_URL'] || 'https://github.com');
- this.tokenConfigKey = `http.${serverUrl.origin}/.extraheader`; // "origin" is SCHEME://HOSTNAME[:PORT]
- const basicCredential = Buffer.from(`x-access-token:${this.settings.authToken}`, 'utf8').toString('base64');
- core.setSecret(basicCredential);
- this.tokenPlaceholderConfigValue = `AUTHORIZATION: basic ***`;
- this.tokenConfigValue = `AUTHORIZATION: basic ${basicCredential}`;
- // Instead of SSH URL
- this.insteadOfKey = `url.${serverUrl.origin}/.insteadOf`; // "origin" is SCHEME://HOSTNAME[:PORT]
- this.insteadOfValue = `git@${serverUrl.hostname}:`;
- }
- configureAuth() {
- return __awaiter(this, void 0, void 0, function* () {
- // Remove possible previous values
- yield this.removeAuth();
- // Configure new values
- yield this.configureSsh();
- yield this.configureToken();
- });
- }
- removeAuth() {
- return __awaiter(this, void 0, void 0, function* () {
- yield this.removeSsh();
- yield this.removeToken();
- });
- }
- configureSsh() {
- return __awaiter(this, void 0, void 0, function* () {
- if (!this.settings.sshKey) {
- return;
- }
- // Write key
- const runnerTemp = process.env['RUNNER_TEMP'] || '';
- assert.ok(runnerTemp, 'RUNNER_TEMP is not defined');
- const uniqueId = uuid_1.v4();
- stateHelper.setSshKeyPath(path.join(runnerTemp, uniqueId));
- coreCommand.issueCommand('save-state', { name: 'sshKeyPath' }, this.sshKeyPath);
- yield fs.promises.mkdir(runnerTemp, { recursive: true });
- yield fs.promises.writeFile(this.sshKeyPath, `${this.settings.sshKey.trim()}\n`, { mode: 0o600 });
- // Remove inherited permissions on Windows
- if (IS_WINDOWS) {
- const icacls = yield io.which('icacls.exe');
- yield exec.exec(`"${icacls}" "${this.sshKeyPath}" /grant:r "${process.env['USERDOMAIN']}\\${process.env['USERNAME']}:F"`);
- yield exec.exec(`"${icacls}" "${this.sshKeyPath}" /inheritance:r`);
- }
- // Write known hosts
- const userKnownHostsPath = path.join(os.homedir(), '.ssh', 'known_hosts');
- let userKnownHosts = '';
- try {
- userKnownHosts = (yield fs.promises.readFile(userKnownHostsPath)).toString();
- }
- catch (err) {
- if (err.code !== 'ENOENT') {
- throw err;
- }
- }
- let knownHosts = '';
- if (userKnownHosts) {
- knownHosts += `# Begin from ${userKnownHostsPath}\n${userKnownHosts}\n# End from ${userKnownHostsPath}\n`;
- }
- if (this.settings.sshKnownHosts) {
- knownHosts += `# Begin from input known hosts\n${this.settings.sshKnownHosts}\n# end from input known hosts\n`;
- }
- knownHosts += `# Begin implicitly added github.com\ngithub.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==\n# End implicitly added github.com\n`;
- this.sshKnownHostsPath = path.join(runnerTemp, `${uniqueId}_known_hosts`);
- stateHelper.setSshKnownHostsPath(this.sshKnownHostsPath);
- coreCommand.issueCommand('save-state', { name: 'sshKnownHostsPath' }, this.sshKnownHostsPath);
- yield fs.promises.writeFile(this.sshKnownHostsPath, knownHosts);
- // Configure GIT_SSH_COMMAND
- const sshPath = yield io.which('ssh', true);
- this.sshCommand = `"${sshPath}" -i "$RUNNER_TEMP/${path.basename(this.sshKeyPath)}"`;
- if (this.settings.sshStrict) {
- this.sshCommand += ' -o StrictHostKeyChecking=yes -o CheckHostIP=no';
- }
- this.sshCommand += ` -o "UserKnownHostsFile=$RUNNER_TEMP/${path.basename(this.sshKnownHostsPath)}"`;
- core.info(`Temporarily overriding GIT_SSH_COMMAND=${this.sshCommand}`);
- this.git.setEnvironmentVariable('GIT_SSH_COMMAND', this.sshCommand);
- // Configure core.sshCommand
- if (this.settings.persistCredentials) {
- yield this.git.config(SSH_COMMAND_KEY, this.sshCommand);
- }
- });
- }
- configureToken(configPath, globalConfig) {
- return __awaiter(this, void 0, void 0, function* () {
- // Validate args
- assert.ok((configPath && globalConfig) || (!configPath && !globalConfig), 'Unexpected configureToken parameter combinations');
- // Default config path
- if (!configPath && !globalConfig) {
- configPath = path.join(this.git.getWorkingDirectory(), '.git', 'config');
- }
- // Configure a placeholder value. This approach avoids the credential being captured
- // by process creation audit events, which are commonly logged. For more information,
- // refer to https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/command-line-process-auditing
- yield this.git.config(this.tokenConfigKey, this.tokenPlaceholderConfigValue, globalConfig);
- // Replace the placeholder
- yield this.replaceTokenPlaceholder(configPath || '');
- });
- }
- replaceTokenPlaceholder(configPath) {
- return __awaiter(this, void 0, void 0, function* () {
- assert.ok(configPath, 'configPath is not defined');
- let content = (yield fs.promises.readFile(configPath)).toString();
- const placeholderIndex = content.indexOf(this.tokenPlaceholderConfigValue);
- if (placeholderIndex < 0 ||
- placeholderIndex !== content.lastIndexOf(this.tokenPlaceholderConfigValue)) {
- throw new Error(`Unable to replace auth placeholder in ${configPath}`);
- }
- assert.ok(this.tokenConfigValue, 'tokenConfigValue is not defined');
- content = content.replace(this.tokenPlaceholderConfigValue, this.tokenConfigValue);
- yield fs.promises.writeFile(configPath, content);
- });
- }
- removeSsh() {
- return __awaiter(this, void 0, void 0, function* () {
- // SSH key
- const keyPath = this.sshKeyPath || stateHelper.SshKeyPath;
- if (keyPath) {
- try {
- yield io.rmRF(keyPath);
- }
- catch (err) {
- core.debug(err.message);
- core.warning(`Failed to remove SSH key '${keyPath}'`);
- }
- }
- // SSH known hosts
- const knownHostsPath = this.sshKnownHostsPath || stateHelper.SshKnownHostsPath;
- if (knownHostsPath) {
- try {
- yield io.rmRF(knownHostsPath);
- }
- catch (_a) {
- // Intentionally empty
- }
- }
- // SSH command
- yield this.removeGitConfig(SSH_COMMAND_KEY);
- });
- }
- removeToken() {
- return __awaiter(this, void 0, void 0, function* () {
- // HTTP extra header
- yield this.removeGitConfig(this.tokenConfigKey);
- });
- }
- removeGitConfig(configKey, submoduleOnly = false) {
- return __awaiter(this, void 0, void 0, function* () {
- if (!submoduleOnly) {
- if ((yield this.git.configExists(configKey)) &&
- !(yield this.git.tryConfigUnset(configKey))) {
- // Load the config contents
- core.warning(`Failed to remove '${configKey}' from the git config`);
- }
- }
- });
- }
-}
-exports.GitAuthHelper = GitAuthHelper;
+// fix an issue where "PassThrough" isn't a named export for node <10
+const PassThrough = Stream.PassThrough;
+/**
+ * Body mixin
+ *
+ * Ref: https://fetch.spec.whatwg.org/#body
+ *
+ * @param Stream body Readable stream
+ * @param Object opts Response options
+ * @return Void
+ */
+function Body(body) {
+ var _this = this;
-/***/ }),
-/* 288 */,
-/* 289 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
+ _ref$size = _ref.size;
-"use strict";
+ let size = _ref$size === undefined ? 0 : _ref$size;
+ var _ref$timeout = _ref.timeout;
+ let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.GitCommandManager = exports.createCommandManager = exports.MinimumGitVersion = void 0;
-const git_version_1 = __webpack_require__(559);
-const core = __importStar(__webpack_require__(470));
-const exec = __importStar(__webpack_require__(986));
-const io = __importStar(__webpack_require__(1));
-const fs_extra_1 = __importDefault(__webpack_require__(226));
-const path_1 = __importDefault(__webpack_require__(622));
-const retry_helper_1 = __webpack_require__(587);
-const retryHelper = new retry_helper_1.RetryHelper();
-// Auth header not supported before 2.9
-// Wire protocol v2 not supported before 2.18
-exports.MinimumGitVersion = new git_version_1.GitVersion('2.18');
-function createCommandManager(workingDirectory) {
- return __awaiter(this, void 0, void 0, function* () {
- return yield GitCommandManager.createCommandManager(workingDirectory);
- });
-}
-exports.createCommandManager = createCommandManager;
-class GitCommandManager {
- constructor() {
- this.gitEnv = {
- GIT_TERMINAL_PROMPT: '0',
- GCM_INTERACTIVE: 'Never' // Disable prompting for git credential manager
- };
- this.workingDirectory = '';
- this.gitPath = '';
- this.gitVersion = undefined;
- }
- static createCommandManager(workingDirectory) {
- return __awaiter(this, void 0, void 0, function* () {
- const result = new GitCommandManager();
- yield result.initializeCommandManager(workingDirectory);
- return result;
- });
- }
- initializeCommandManager(workingDirectory) {
- return __awaiter(this, void 0, void 0, function* () {
- this.workingDirectory = workingDirectory;
- this.gitPath = yield io.which('git', true);
- // Git version
- core.debug('Getting git version');
- this.gitVersion = new git_version_1.GitVersion();
- const gitOutput = yield this.execGit(['version']);
- const stdout = gitOutput.stdout.trim();
- if (!stdout.includes('\n')) {
- const match = stdout.match(/\d+\.\d+(\.\d+)?/);
- if (match) {
- this.gitVersion = new git_version_1.GitVersion(match[0]);
- }
- }
- if (!this.gitVersion.isValid()) {
- throw new Error('Unable to determine git version');
- }
- // Set the user agent
- const gitHttpUserAgent = `git/${this.gitVersion} (github-actions-checkout)`;
- core.debug(`Set git useragent to: ${gitHttpUserAgent}`);
- this.gitEnv['GIT_HTTP_USER_AGENT'] = gitHttpUserAgent;
- });
- }
- checkGitVersion() {
- if (this.gitVersion === undefined) {
- throw new Error('Init the git command manager');
- }
- if (!this.gitVersion.checkMinimum(exports.MinimumGitVersion)) {
- throw new Error(`Minimum required git version is ${exports.MinimumGitVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}`);
- }
- }
- getWorkingDirectory() {
- return this.workingDirectory;
- }
- init() {
- return __awaiter(this, void 0, void 0, function* () {
- yield this.execGit(['init', this.workingDirectory]);
- });
- }
- fetch(fetchDepth, refSpec) {
- return __awaiter(this, void 0, void 0, function* () {
- const args = [
- '-c',
- 'protocol.version=2',
- 'fetch',
- '--no-tags',
- '--prune',
- '--progress',
- '--no-recurse-submodules'
- ];
- if (fetchDepth > 0) {
- args.push(`--depth=${fetchDepth}`);
- }
- else if (fs_extra_1.default.existsSync(path_1.default.join(this.workingDirectory, '.git', 'shallow'))) {
- args.push('--unshallow');
- }
- args.push('origin');
- for (const arg of refSpec) {
- args.push(arg);
- }
- const that = this;
- yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () {
- yield that.execGit(args);
- }));
- });
- }
- checkout(ref, startPoint) {
- return __awaiter(this, void 0, void 0, function* () {
- const args = ['checkout', '--progress', '--force'];
- if (startPoint) {
- args.push('-B', ref, startPoint);
- }
- else {
- args.push(ref);
- }
- yield this.execGit(args);
- });
- }
- sha(type) {
- return __awaiter(this, void 0, void 0, function* () {
- const output = yield this.execGit(['rev-parse', '--verify', type]);
- return output.stdout.trim();
- });
- }
- status(args = []) {
- return __awaiter(this, void 0, void 0, function* () {
- const output = yield this.execGit(['status'].concat(args));
- return output.stdout.trim();
- });
- }
- log1() {
- return __awaiter(this, void 0, void 0, function* () {
- yield this.execGit(['log', '-1']);
- });
- }
- config(configKey, configValue, globalConfig) {
- return __awaiter(this, void 0, void 0, function* () {
- yield this.execGit([
- 'config',
- globalConfig ? '--global' : '--local',
- configKey,
- configValue
- ]);
- });
- }
- configExists(configKey, globalConfig) {
- return __awaiter(this, void 0, void 0, function* () {
- const pattern = configKey.replace(/[^a-zA-Z0-9_]/g, x => {
- return `\\${x}`;
- });
- const output = yield this.execGit([
- 'config',
- globalConfig ? '--global' : '--local',
- '--name-only',
- '--get-regexp',
- pattern
- ], true);
- return output.exitCode === 0;
- });
- }
- tryConfigUnset(configKey, globalConfig) {
- return __awaiter(this, void 0, void 0, function* () {
- const output = yield this.execGit([
- 'config',
- globalConfig ? '--global' : '--local',
- '--unset-all',
- configKey
- ], true);
- return output.exitCode === 0;
- });
- }
- removeEnvironmentVariable(name) {
- delete this.gitEnv[name];
- }
- setEnvironmentVariable(name, value) {
- this.gitEnv[name] = value;
- }
- tryDisableAutomaticGarbageCollection() {
- return __awaiter(this, void 0, void 0, function* () {
- const output = yield this.execGit(['config', '--local', 'gc.auto', '0'], true);
- return output.exitCode === 0;
- });
- }
- remoteAdd(remoteName, remoteUrl) {
- return __awaiter(this, void 0, void 0, function* () {
- yield this.execGit(['remote', 'add', remoteName, remoteUrl]);
- });
- }
- branchExists(remote, pattern) {
- return __awaiter(this, void 0, void 0, function* () {
- const args = ['branch', '--list'];
- if (remote) {
- args.push('--remote');
- }
- args.push(pattern);
- const output = yield this.execGit(args);
- return !!output.stdout.trim();
- });
- }
- tagExists(pattern) {
- return __awaiter(this, void 0, void 0, function* () {
- const output = yield this.execGit(['tag', '--list', pattern]);
- return !!output.stdout.trim();
- });
- }
- addAll() {
- return __awaiter(this, void 0, void 0, function* () {
- const output = yield this.execGit(['add', '--all']);
- return Boolean(output.exitCode);
- });
- }
- commit(message) {
- return __awaiter(this, void 0, void 0, function* () {
- const output = yield this.execGit(['commit', '-m', `"${message}"`]);
- return Boolean(output.exitCode);
- });
- }
- push(ref) {
- return __awaiter(this, void 0, void 0, function* () {
- const output = yield this.execGit(['push', '-u', 'origin', ref]);
- return Boolean(output.exitCode);
- });
- }
- execGit(args, allowAllExitCodes = false) {
- return __awaiter(this, void 0, void 0, function* () {
- fs_extra_1.default.existsSync(this.workingDirectory);
- const result = new GitOutput();
- const env = {};
- for (const key of Object.keys(process.env)) {
- env[key] = process.env[key];
- }
- for (const key of Object.keys(this.gitEnv)) {
- env[key] = this.gitEnv[key];
- }
- const stdout = [];
- const options = {
- cwd: this.workingDirectory,
- env,
- ignoreReturnCode: allowAllExitCodes,
- listeners: {
- stdout: (data) => {
- stdout.push(data.toString());
- }
- }
- };
- result.exitCode = yield exec.exec(`"${this.gitPath}"`, args, options);
- result.stdout = stdout.join('');
- return result;
- });
- }
-}
-exports.GitCommandManager = GitCommandManager;
-class GitOutput {
- constructor() {
- this.stdout = '';
- this.exitCode = 0;
- }
-}
-
-
-/***/ }),
-/* 290 */,
-/* 291 */,
-/* 292 */,
-/* 293 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
-
-"use strict";
+ if (body == null) {
+ // body is undefined or null
+ body = null;
+ } else if (isURLSearchParams(body)) {
+ // body is a URLSearchParams
+ body = Buffer.from(body.toString());
+ } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
+ // body is ArrayBuffer
+ body = Buffer.from(body);
+ } else if (ArrayBuffer.isView(body)) {
+ // body is ArrayBufferView
+ body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
+ } else if (body instanceof Stream) ; else {
+ // none of the above
+ // coerce to string then buffer
+ body = Buffer.from(String(body));
+ }
+ this[INTERNALS] = {
+ body,
+ disturbed: false,
+ error: null
+ };
+ this.size = size;
+ this.timeout = timeout;
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.getSource = void 0;
-const core = __importStar(__webpack_require__(470));
-const io = __importStar(__webpack_require__(1));
-const path = __importStar(__webpack_require__(622));
-const fs_extra_1 = __importDefault(__webpack_require__(226));
-const git_command_manager_1 = __webpack_require__(289);
-const git_auth_helper_1 = __webpack_require__(287);
-const refHelper = __importStar(__webpack_require__(227));
-const stateHelper = __importStar(__webpack_require__(153));
-function getSource(githubManager, settings, repositoryUrl, repositoryPath, ref, // ref
-fetchDepth = 0) {
- return __awaiter(this, void 0, void 0, function* () {
- // Repository URL
- core.info(`Cloning repository: ${repositoryUrl}`);
- // Remove conflicting file path
- if (fs_extra_1.default.existsSync(repositoryPath)) {
- yield io.rmRF(repositoryPath);
- }
- // Create directory
- let isExisting = true;
- if (!fs_extra_1.default.existsSync(repositoryPath)) {
- isExisting = false;
- yield io.mkdirP(repositoryPath);
- }
- // Git command manager
- core.startGroup('Getting Git version info');
- const git = yield gitCommandManager(repositoryPath);
- core.endGroup();
- // Prepare existing directory, otherwise recreate
- if (isExisting) {
- core.info(`Deleting the contents of '${repositoryPath}'`);
- for (const file of yield fs_extra_1.default.promises.readdir(repositoryPath)) {
- yield io.rmRF(path.join(repositoryPath, file));
- }
- }
- if (!git) {
- // Downloading using REST API
- core.info(`The repository will be downloaded using the GitHub REST API`);
- core.info(`To create a local Git repository instead, add Git ${git_command_manager_1.MinimumGitVersion} or higher to the PATH`);
- if (settings.sshKey) {
- throw new Error(`Input 'ssh-key' not supported when falling back to download using the GitHub REST API. To create a local Git repository instead, add Git ${git_command_manager_1.MinimumGitVersion} or higher to the PATH.`);
- }
- const [templateRepositoryOwner, templateRepositoryName] = repositoryPath.split('/');
- yield githubManager.repos.downloadRepository(templateRepositoryOwner, templateRepositoryName, ref);
- return;
- }
- // Save state for POST action
- stateHelper.setTemplateRepositoryPath(repositoryPath);
- // Initialize the repository
- if (!fs_extra_1.default.existsSync(path.join(repositoryPath, '.git'))) {
- core.startGroup('Initializing the repository');
- yield git.init();
- yield git.remoteAdd('origin', repositoryUrl);
- core.endGroup();
- }
- // Disable automatic garbage collection
- core.startGroup('Disabling automatic garbage collection');
- if (!(yield git.tryDisableAutomaticGarbageCollection())) {
- core.warning(`Unable to turn off git automatic garbage collection. The git fetch operation may trigger garbage collection and cause a delay.`);
- }
- core.endGroup();
- const authHelper = new git_auth_helper_1.GitAuthHelper(git, settings);
- try {
- // Configure auth
- core.startGroup('Setting up auth');
- yield authHelper.configureAuth();
- core.endGroup();
- // Fetch
- core.startGroup('Fetching the repository');
- const refSpec = refHelper.getRefSpec(ref);
- yield git.fetch(fetchDepth, refSpec);
- core.endGroup();
- // Checkout info
- core.startGroup('Determining the checkout info');
- const checkoutInfo = yield refHelper.getCheckoutInfo(git, ref);
- core.endGroup();
- // Checkout
- core.startGroup('Checking out the ref');
- yield git.checkout(checkoutInfo.ref, checkoutInfo.startPoint);
- core.endGroup();
- // Dump some info about the checked out commit
- yield git.log1();
- }
- finally {
- // Remove auth
- if (!settings.persistCredentials) {
- core.startGroup('Removing auth');
- yield authHelper.removeAuth();
- core.endGroup();
- }
- }
- });
-}
-exports.getSource = getSource;
-function gitCommandManager(repositoryPath) {
- return __awaiter(this, void 0, void 0, function* () {
- core.info(`Working directory is '${repositoryPath}'`);
- try {
- const manager = yield git_command_manager_1.createCommandManager(repositoryPath);
- manager.checkGitVersion();
- return manager;
- }
- catch (err) {
- // Otherwise fallback to REST API
- return undefined;
- }
- });
+ if (body instanceof Stream) {
+ body.on('error', function (err) {
+ const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);
+ _this[INTERNALS].error = error;
+ });
+ }
}
+Body.prototype = {
+ get body() {
+ return this[INTERNALS].body;
+ },
-/***/ }),
-/* 294 */,
-/* 295 */,
-/* 296 */,
-/* 297 */,
-/* 298 */
-/***/ (function(module) {
+ get bodyUsed() {
+ return this[INTERNALS].disturbed;
+ },
-"use strict";
+ /**
+ * Decode response as ArrayBuffer
+ *
+ * @return Promise
+ */
+ arrayBuffer() {
+ return consumeBody.call(this).then(function (buf) {
+ return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
+ });
+ },
+ /**
+ * Return raw response as Blob
+ *
+ * @return Promise
+ */
+ blob() {
+ let ct = this.headers && this.headers.get('content-type') || '';
+ return consumeBody.call(this).then(function (buf) {
+ return Object.assign(
+ // Prevent copying
+ new Blob([], {
+ type: ct.toLowerCase()
+ }), {
+ [BUFFER]: buf
+ });
+ });
+ },
-/**
- * Tries to execute a function and discards any error that occurs.
- * @param {Function} fn - Function that might or might not throw an error.
- * @returns {?*} Return-value of the function when no error occurred.
- */
-module.exports = function(fn) {
+ /**
+ * Decode response as json
+ *
+ * @return Promise
+ */
+ json() {
+ var _this2 = this;
- try { return fn() } catch (e) {}
+ return consumeBody.call(this).then(function (buffer) {
+ try {
+ return JSON.parse(buffer.toString());
+ } catch (err) {
+ return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));
+ }
+ });
+ },
-}
+ /**
+ * Decode response as text
+ *
+ * @return Promise
+ */
+ text() {
+ return consumeBody.call(this).then(function (buffer) {
+ return buffer.toString();
+ });
+ },
-/***/ }),
-/* 299 */
-/***/ (function(__unusedmodule, exports) {
+ /**
+ * Decode response as buffer (non-spec api)
+ *
+ * @return Promise
+ */
+ buffer() {
+ return consumeBody.call(this);
+ },
-"use strict";
+ /**
+ * Decode response as text, while automatically detecting the encoding and
+ * trying to decode to UTF-8 (non-spec api)
+ *
+ * @return Promise
+ */
+ textConverted() {
+ var _this3 = this;
+ return consumeBody.call(this).then(function (buffer) {
+ return convertBody(buffer, _this3.headers);
+ });
+ }
+};
-Object.defineProperty(exports, '__esModule', { value: true });
+// In browsers, all properties are enumerable.
+Object.defineProperties(Body.prototype, {
+ body: { enumerable: true },
+ bodyUsed: { enumerable: true },
+ arrayBuffer: { enumerable: true },
+ blob: { enumerable: true },
+ json: { enumerable: true },
+ text: { enumerable: true }
+});
-const VERSION = "2.2.0";
+Body.mixIn = function (proto) {
+ for (const name of Object.getOwnPropertyNames(Body.prototype)) {
+ // istanbul ignore else: future proof
+ if (!(name in proto)) {
+ const desc = Object.getOwnPropertyDescriptor(Body.prototype, name);
+ Object.defineProperty(proto, name, desc);
+ }
+ }
+};
/**
- * Some “list” response that can be paginated have a different response structure
- *
- * They have a `total_count` key in the response (search also has `incomplete_results`,
- * /installation/repositories also has `repository_selection`), as well as a key with
- * the list of the items which name varies from endpoint to endpoint.
+ * Consume and convert an entire Body to a Buffer.
*
- * Octokit normalizes these responses so that paginated results are always returned following
- * the same structure. One challenge is that if the list response has only one page, no Link
- * header is provided, so this header alone is not sufficient to check wether a response is
- * paginated or not.
+ * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
*
- * We check if a "total_count" key is present in the response data, but also make sure that
- * a "url" property is not, as the "Get the combined status for a specific ref" endpoint would
- * otherwise match: https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref
+ * @return Promise
*/
-function normalizePaginatedListResponse(response) {
- const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data);
- if (!responseNeedsNormalization) return response; // keep the additional properties intact as there is currently no other way
- // to retrieve the same information.
-
- const incompleteResults = response.data.incomplete_results;
- const repositorySelection = response.data.repository_selection;
- const totalCount = response.data.total_count;
- delete response.data.incomplete_results;
- delete response.data.repository_selection;
- delete response.data.total_count;
- const namespaceKey = Object.keys(response.data)[0];
- const data = response.data[namespaceKey];
- response.data = data;
+function consumeBody() {
+ var _this4 = this;
- if (typeof incompleteResults !== "undefined") {
- response.data.incomplete_results = incompleteResults;
- }
+ if (this[INTERNALS].disturbed) {
+ return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));
+ }
- if (typeof repositorySelection !== "undefined") {
- response.data.repository_selection = repositorySelection;
- }
+ this[INTERNALS].disturbed = true;
- response.data.total_count = totalCount;
- return response;
-}
+ if (this[INTERNALS].error) {
+ return Body.Promise.reject(this[INTERNALS].error);
+ }
-function iterator(octokit, route, parameters) {
- const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters);
- const requestMethod = typeof route === "function" ? route : octokit.request;
- const method = options.method;
- const headers = options.headers;
- let url = options.url;
- return {
- [Symbol.asyncIterator]: () => ({
- next() {
- if (!url) {
- return Promise.resolve({
- done: true
- });
- }
+ let body = this.body;
- return requestMethod({
- method,
- url,
- headers
- }).then(normalizePaginatedListResponse).then(response => {
- // `response.headers.link` format:
- // '; rel="next", ; rel="last"'
- // sets `url` to undefined if "next" URL is not present or `link` header is not set
- url = ((response.headers.link || "").match(/<([^>]+)>;\s*rel="next"/) || [])[1];
- return {
- value: response
- };
- });
- }
+ // body is null
+ if (body === null) {
+ return Body.Promise.resolve(Buffer.alloc(0));
+ }
- })
- };
-}
+ // body is blob
+ if (isBlob(body)) {
+ body = body.stream();
+ }
-function paginate(octokit, route, parameters, mapFn) {
- if (typeof parameters === "function") {
- mapFn = parameters;
- parameters = undefined;
- }
+ // body is buffer
+ if (Buffer.isBuffer(body)) {
+ return Body.Promise.resolve(body);
+ }
- return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn);
-}
+ // istanbul ignore if: should never happen
+ if (!(body instanceof Stream)) {
+ return Body.Promise.resolve(Buffer.alloc(0));
+ }
-function gather(octokit, results, iterator, mapFn) {
- return iterator.next().then(result => {
- if (result.done) {
- return results;
- }
+ // body is stream
+ // get ready to actually consume the body
+ let accum = [];
+ let accumBytes = 0;
+ let abort = false;
- let earlyExit = false;
+ return new Body.Promise(function (resolve, reject) {
+ let resTimeout;
- function done() {
- earlyExit = true;
- }
+ // allow timeout on slow response body
+ if (_this4.timeout) {
+ resTimeout = setTimeout(function () {
+ abort = true;
+ reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));
+ }, _this4.timeout);
+ }
- results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data);
+ // handle stream errors
+ body.on('error', function (err) {
+ if (err.name === 'AbortError') {
+ // if the request was aborted, reject with this Error
+ abort = true;
+ reject(err);
+ } else {
+ // other errors, such as incorrect content-encoding
+ reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));
+ }
+ });
- if (earlyExit) {
- return results;
- }
+ body.on('data', function (chunk) {
+ if (abort || chunk === null) {
+ return;
+ }
- return gather(octokit, results, iterator, mapFn);
- });
+ if (_this4.size && accumBytes + chunk.length > _this4.size) {
+ abort = true;
+ reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));
+ return;
+ }
+
+ accumBytes += chunk.length;
+ accum.push(chunk);
+ });
+
+ body.on('end', function () {
+ if (abort) {
+ return;
+ }
+
+ clearTimeout(resTimeout);
+
+ try {
+ resolve(Buffer.concat(accum, accumBytes));
+ } catch (err) {
+ // handle streams that have accumulated too much data (issue #414)
+ reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));
+ }
+ });
+ });
}
/**
- * @param octokit Octokit instance
- * @param options Options passed to Octokit constructor
+ * Detect buffer encoding and convert to target encoding
+ * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
+ *
+ * @param Buffer buffer Incoming buffer
+ * @param String encoding Target encoding
+ * @return String
*/
+function convertBody(buffer, headers) {
+ if (typeof convert !== 'function') {
+ throw new Error('The package `encoding` must be installed to use the textConverted() function');
+ }
-function paginateRest(octokit) {
- return {
- paginate: Object.assign(paginate.bind(null, octokit), {
- iterator: iterator.bind(null, octokit)
- })
- };
-}
-paginateRest.VERSION = VERSION;
+ const ct = headers.get('content-type');
+ let charset = 'utf-8';
+ let res, str;
-exports.paginateRest = paginateRest;
-//# sourceMappingURL=index.js.map
+ // header
+ if (ct) {
+ res = /charset=([^;]*)/i.exec(ct);
+ }
+ // no charset in content type, peek at response body for at most 1024 bytes
+ str = buffer.slice(0, 1024).toString();
-/***/ }),
-/* 300 */,
-/* 301 */,
-/* 302 */,
-/* 303 */
-/***/ (function(module) {
+ // html5
+ if (!res && str) {
+ res = /= y;
+
+function validateValue(value) {
+ value = `${value}`;
+ if (invalidHeaderCharRegex.test(value)) {
+ throw new TypeError(`${value} is not a legal HTTP header value`);
+ }
}
-function expand(str, isTop) {
- var expansions = [];
+/**
+ * Find the key in the map object given a header name.
+ *
+ * Returns undefined if not found.
+ *
+ * @param String name Header name
+ * @return String|Undefined
+ */
+function find(map, name) {
+ name = name.toLowerCase();
+ for (const key in map) {
+ if (key.toLowerCase() === name) {
+ return key;
+ }
+ }
+ return undefined;
+}
- var m = balanced('{', '}', str);
- if (!m || /\$$/.test(m.pre)) return [str];
+const MAP = Symbol('map');
+class Headers {
+ /**
+ * Headers class
+ *
+ * @param Object headers Response headers
+ * @return Void
+ */
+ constructor() {
+ let init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
- var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
- var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
- var isSequence = isNumericSequence || isAlphaSequence;
- var isOptions = m.body.indexOf(',') >= 0;
- if (!isSequence && !isOptions) {
- // {a},b}
- if (m.post.match(/,.*\}/)) {
- str = m.pre + '{' + m.body + escClose + m.post;
- return expand(str);
- }
- return [str];
- }
+ this[MAP] = Object.create(null);
- var n;
- if (isSequence) {
- n = m.body.split(/\.\./);
- } else {
- n = parseCommaParts(m.body);
- if (n.length === 1) {
- // x{{a,b}}y ==> x{a}y x{b}y
- n = expand(n[0], false).map(embrace);
- if (n.length === 1) {
- var post = m.post.length
- ? expand(m.post, false)
- : [''];
- return post.map(function(p) {
- return m.pre + n[0] + p;
- });
- }
- }
- }
+ if (init instanceof Headers) {
+ const rawHeaders = init.raw();
+ const headerNames = Object.keys(rawHeaders);
- // at this point, n is the parts, and we know it's not a comma set
- // with a single entry.
+ for (const headerName of headerNames) {
+ for (const value of rawHeaders[headerName]) {
+ this.append(headerName, value);
+ }
+ }
- // no need to expand pre, since it is guaranteed to be free of brace-sets
- var pre = m.pre;
- var post = m.post.length
- ? expand(m.post, false)
- : [''];
+ return;
+ }
- var N;
+ // We don't worry about converting prop to ByteString here as append()
+ // will handle it.
+ if (init == null) ; else if (typeof init === 'object') {
+ const method = init[Symbol.iterator];
+ if (method != null) {
+ if (typeof method !== 'function') {
+ throw new TypeError('Header pairs must be iterable');
+ }
- if (isSequence) {
- var x = numeric(n[0]);
- var y = numeric(n[1]);
- var width = Math.max(n[0].length, n[1].length)
- var incr = n.length == 3
- ? Math.abs(numeric(n[2]))
- : 1;
- var test = lte;
- var reverse = y < x;
- if (reverse) {
- incr *= -1;
- test = gte;
- }
- var pad = n.some(isPadded);
+ // sequence>
+ // Note: per spec we have to first exhaust the lists then process them
+ const pairs = [];
+ for (const pair of init) {
+ if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {
+ throw new TypeError('Each header pair must be iterable');
+ }
+ pairs.push(Array.from(pair));
+ }
- N = [];
+ for (const pair of pairs) {
+ if (pair.length !== 2) {
+ throw new TypeError('Each header pair must be a name/value tuple');
+ }
+ this.append(pair[0], pair[1]);
+ }
+ } else {
+ // record
+ for (const key of Object.keys(init)) {
+ const value = init[key];
+ this.append(key, value);
+ }
+ }
+ } else {
+ throw new TypeError('Provided initializer must be an object');
+ }
+ }
- for (var i = x; test(i, y); i += incr) {
- var c;
- if (isAlphaSequence) {
- c = String.fromCharCode(i);
- if (c === '\\')
- c = '';
- } else {
- c = String(i);
- if (pad) {
- var need = width - c.length;
- if (need > 0) {
- var z = new Array(need + 1).join('0');
- if (i < 0)
- c = '-' + z + c.slice(1);
- else
- c = z + c;
- }
- }
- }
- N.push(c);
- }
- } else {
- N = concatMap(n, function(el) { return expand(el, false) });
- }
+ /**
+ * Return combined header value given name
+ *
+ * @param String name Header name
+ * @return Mixed
+ */
+ get(name) {
+ name = `${name}`;
+ validateName(name);
+ const key = find(this[MAP], name);
+ if (key === undefined) {
+ return null;
+ }
- for (var j = 0; j < N.length; j++) {
- for (var k = 0; k < post.length; k++) {
- var expansion = pre + N[j] + post[k];
- if (!isTop || isSequence || expansion)
- expansions.push(expansion);
- }
- }
+ return this[MAP][key].join(', ');
+ }
- return expansions;
-}
+ /**
+ * Iterate over all headers
+ *
+ * @param Function callback Executed for each item with parameters (value, name, thisArg)
+ * @param Boolean thisArg `this` context for callback function
+ * @return Void
+ */
+ forEach(callback) {
+ let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
+ let pairs = getHeaders(this);
+ let i = 0;
+ while (i < pairs.length) {
+ var _pairs$i = pairs[i];
+ const name = _pairs$i[0],
+ value = _pairs$i[1];
+ callback.call(thisArg, value, name, this);
+ pairs = getHeaders(this);
+ i++;
+ }
+ }
-/***/ }),
-/* 307 */,
-/* 308 */,
-/* 309 */,
-/* 310 */,
-/* 311 */,
-/* 312 */,
-/* 313 */,
-/* 314 */,
-/* 315 */
-/***/ (function(module) {
+ /**
+ * Overwrite header values given name
+ *
+ * @param String name Header name
+ * @param String value Header value
+ * @return Void
+ */
+ set(name, value) {
+ name = `${name}`;
+ value = `${value}`;
+ validateName(name);
+ validateValue(value);
+ const key = find(this[MAP], name);
+ this[MAP][key !== undefined ? key : name] = [value];
+ }
-"use strict";
+ /**
+ * Append a value onto existing header
+ *
+ * @param String name Header name
+ * @param String value Header value
+ * @return Void
+ */
+ append(name, value) {
+ name = `${name}`;
+ value = `${value}`;
+ validateName(name);
+ validateValue(value);
+ const key = find(this[MAP], name);
+ if (key !== undefined) {
+ this[MAP][key].push(value);
+ } else {
+ this[MAP][name] = [value];
+ }
+ }
-module.exports = function(Promise) {
-function returner() {
- return this.value;
-}
-function thrower() {
- throw this.reason;
-}
+ /**
+ * Check for header name existence
+ *
+ * @param String name Header name
+ * @return Boolean
+ */
+ has(name) {
+ name = `${name}`;
+ validateName(name);
+ return find(this[MAP], name) !== undefined;
+ }
-Promise.prototype["return"] =
-Promise.prototype.thenReturn = function (value) {
- if (value instanceof Promise) value.suppressUnhandledRejections();
- return this._then(
- returner, undefined, undefined, {value: value}, undefined);
-};
+ /**
+ * Delete all header values given name
+ *
+ * @param String name Header name
+ * @return Void
+ */
+ delete(name) {
+ name = `${name}`;
+ validateName(name);
+ const key = find(this[MAP], name);
+ if (key !== undefined) {
+ delete this[MAP][key];
+ }
+ }
-Promise.prototype["throw"] =
-Promise.prototype.thenThrow = function (reason) {
- return this._then(
- thrower, undefined, undefined, {reason: reason}, undefined);
-};
+ /**
+ * Return raw headers (non-spec api)
+ *
+ * @return Object
+ */
+ raw() {
+ return this[MAP];
+ }
-Promise.prototype.catchThrow = function (reason) {
- if (arguments.length <= 1) {
- return this._then(
- undefined, thrower, undefined, {reason: reason}, undefined);
- } else {
- var _reason = arguments[1];
- var handler = function() {throw _reason;};
- return this.caught(reason, handler);
- }
-};
+ /**
+ * Get an iterator on keys.
+ *
+ * @return Iterator
+ */
+ keys() {
+ return createHeadersIterator(this, 'key');
+ }
-Promise.prototype.catchReturn = function (value) {
- if (arguments.length <= 1) {
- if (value instanceof Promise) value.suppressUnhandledRejections();
- return this._then(
- undefined, returner, undefined, {value: value}, undefined);
- } else {
- var _value = arguments[1];
- if (_value instanceof Promise) _value.suppressUnhandledRejections();
- var handler = function() {return _value;};
- return this.caught(value, handler);
- }
-};
-};
+ /**
+ * Get an iterator on values.
+ *
+ * @return Iterator
+ */
+ values() {
+ return createHeadersIterator(this, 'value');
+ }
+ /**
+ * Get an iterator on entries.
+ *
+ * This is the default iterator of the Headers object.
+ *
+ * @return Iterator
+ */
+ [Symbol.iterator]() {
+ return createHeadersIterator(this, 'key+value');
+ }
+}
+Headers.prototype.entries = Headers.prototype[Symbol.iterator];
-/***/ }),
-/* 316 */,
-/* 317 */,
-/* 318 */,
-/* 319 */,
-/* 320 */,
-/* 321 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+Object.defineProperty(Headers.prototype, Symbol.toStringTag, {
+ value: 'Headers',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
-"use strict";
+Object.defineProperties(Headers.prototype, {
+ get: { enumerable: true },
+ forEach: { enumerable: true },
+ set: { enumerable: true },
+ append: { enumerable: true },
+ has: { enumerable: true },
+ delete: { enumerable: true },
+ keys: { enumerable: true },
+ values: { enumerable: true },
+ entries: { enumerable: true }
+});
-module.exports = function(
- Promise, PromiseArray, tryConvertToPromise, apiRejection) {
-var util = __webpack_require__(248);
-var isObject = util.isObject;
-var es5 = __webpack_require__(883);
-var Es6Map;
-if (typeof Map === "function") Es6Map = Map;
+function getHeaders(headers) {
+ let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
-var mapToEntries = (function() {
- var index = 0;
- var size = 0;
+ const keys = Object.keys(headers[MAP]).sort();
+ return keys.map(kind === 'key' ? function (k) {
+ return k.toLowerCase();
+ } : kind === 'value' ? function (k) {
+ return headers[MAP][k].join(', ');
+ } : function (k) {
+ return [k.toLowerCase(), headers[MAP][k].join(', ')];
+ });
+}
- function extractEntry(value, key) {
- this[index] = value;
- this[index + size] = key;
- index++;
- }
+const INTERNAL = Symbol('internal');
- return function mapToEntries(map) {
- size = map.size;
- index = 0;
- var ret = new Array(map.size * 2);
- map.forEach(extractEntry, ret);
- return ret;
- };
-})();
+function createHeadersIterator(target, kind) {
+ const iterator = Object.create(HeadersIteratorPrototype);
+ iterator[INTERNAL] = {
+ target,
+ kind,
+ index: 0
+ };
+ return iterator;
+}
-var entriesToMap = function(entries) {
- var ret = new Es6Map();
- var length = entries.length / 2 | 0;
- for (var i = 0; i < length; ++i) {
- var key = entries[length + i];
- var value = entries[i];
- ret.set(key, value);
- }
- return ret;
-};
+const HeadersIteratorPrototype = Object.setPrototypeOf({
+ next() {
+ // istanbul ignore if
+ if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {
+ throw new TypeError('Value of `this` is not a HeadersIterator');
+ }
-function PropertiesPromiseArray(obj) {
- var isMap = false;
- var entries;
- if (Es6Map !== undefined && obj instanceof Es6Map) {
- entries = mapToEntries(obj);
- isMap = true;
- } else {
- var keys = es5.keys(obj);
- var len = keys.length;
- entries = new Array(len * 2);
- for (var i = 0; i < len; ++i) {
- var key = keys[i];
- entries[i] = obj[key];
- entries[i + len] = key;
- }
- }
- this.constructor$(entries);
- this._isMap = isMap;
- this._init$(undefined, isMap ? -6 : -3);
-}
-util.inherits(PropertiesPromiseArray, PromiseArray);
+ var _INTERNAL = this[INTERNAL];
+ const target = _INTERNAL.target,
+ kind = _INTERNAL.kind,
+ index = _INTERNAL.index;
-PropertiesPromiseArray.prototype._init = function () {};
+ const values = getHeaders(target, kind);
+ const len = values.length;
+ if (index >= len) {
+ return {
+ value: undefined,
+ done: true
+ };
+ }
-PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {
- this._values[index] = value;
- var totalResolved = ++this._totalResolved;
- if (totalResolved >= this._length) {
- var val;
- if (this._isMap) {
- val = entriesToMap(this._values);
- } else {
- val = {};
- var keyOffset = this.length();
- for (var i = 0, len = this.length(); i < len; ++i) {
- val[this._values[i + keyOffset]] = this._values[i];
- }
- }
- this._resolve(val);
- return true;
- }
- return false;
-};
+ this[INTERNAL].index = index + 1;
-PropertiesPromiseArray.prototype.shouldCopyValues = function () {
- return false;
-};
+ return {
+ value: values[index],
+ done: false
+ };
+ }
+}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
-PropertiesPromiseArray.prototype.getActualLength = function (len) {
- return len >> 1;
-};
+Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {
+ value: 'HeadersIterator',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
-function props(promises) {
- var ret;
- var castValue = tryConvertToPromise(promises);
+/**
+ * Export the Headers object in a form that Node.js can consume.
+ *
+ * @param Headers headers
+ * @return Object
+ */
+function exportNodeCompatibleHeaders(headers) {
+ const obj = Object.assign({ __proto__: null }, headers[MAP]);
- if (!isObject(castValue)) {
- return apiRejection("cannot await properties of a non-object\u000a\u000a See http://goo.gl/MqrFmX\u000a");
- } else if (castValue instanceof Promise) {
- ret = castValue._then(
- Promise.props, undefined, undefined, undefined, undefined);
- } else {
- ret = new PropertiesPromiseArray(castValue).promise();
- }
+ // http.request() only supports string as Host header. This hack makes
+ // specifying custom Host header possible.
+ const hostHeaderKey = find(headers[MAP], 'Host');
+ if (hostHeaderKey !== undefined) {
+ obj[hostHeaderKey] = obj[hostHeaderKey][0];
+ }
- if (castValue instanceof Promise) {
- ret._propagateFrom(castValue, 2);
- }
- return ret;
+ return obj;
}
-Promise.prototype.props = function () {
- return props(this);
-};
-
-Promise.props = function (promises) {
- return props(promises);
-};
-};
+/**
+ * Create a Headers object from an object of headers, ignoring those that do
+ * not conform to HTTP grammar productions.
+ *
+ * @param Object obj Object of headers
+ * @return Headers
+ */
+function createHeadersLenient(obj) {
+ const headers = new Headers();
+ for (const name of Object.keys(obj)) {
+ if (invalidTokenRegex.test(name)) {
+ continue;
+ }
+ if (Array.isArray(obj[name])) {
+ for (const val of obj[name]) {
+ if (invalidHeaderCharRegex.test(val)) {
+ continue;
+ }
+ if (headers[MAP][name] === undefined) {
+ headers[MAP][name] = [val];
+ } else {
+ headers[MAP][name].push(val);
+ }
+ }
+ } else if (!invalidHeaderCharRegex.test(obj[name])) {
+ headers[MAP][name] = [obj[name]];
+ }
+ }
+ return headers;
+}
+const INTERNALS$1 = Symbol('Response internals');
-/***/ }),
-/* 322 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+// fix an issue where "STATUS_CODES" aren't a named export for node <10
+const STATUS_CODES = http.STATUS_CODES;
-"use strict";
+/**
+ * Response class
+ *
+ * @param Stream body Readable stream
+ * @param Object opts Response options
+ * @return Void
+ */
+class Response {
+ constructor() {
+ let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
+ let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-const u = __webpack_require__(676).fromPromise
-const fs = __webpack_require__(869)
+ Body.call(this, body, opts);
-function pathExists (path) {
- return fs.access(path).then(() => true).catch(() => false)
-}
+ const status = opts.status || 200;
+ const headers = new Headers(opts.headers);
-module.exports = {
- pathExists: u(pathExists),
- pathExistsSync: fs.existsSync
-}
+ if (body != null && !headers.has('Content-Type')) {
+ const contentType = extractContentType(body);
+ if (contentType) {
+ headers.append('Content-Type', contentType);
+ }
+ }
+ this[INTERNALS$1] = {
+ url: opts.url,
+ status,
+ statusText: opts.statusText || STATUS_CODES[status],
+ headers,
+ counter: opts.counter
+ };
+ }
-/***/ }),
-/* 323 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+ get url() {
+ return this[INTERNALS$1].url || '';
+ }
-"use strict";
+ get status() {
+ return this[INTERNALS$1].status;
+ }
-module.exports =
-function(Promise, PromiseArray, apiRejection) {
-var util = __webpack_require__(248);
-var RangeError = __webpack_require__(607).RangeError;
-var AggregateError = __webpack_require__(607).AggregateError;
-var isArray = util.isArray;
-var CANCELLATION = {};
+ /**
+ * Convenience property representing if the request ended normally
+ */
+ get ok() {
+ return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
+ }
+ get redirected() {
+ return this[INTERNALS$1].counter > 0;
+ }
-function SomePromiseArray(values) {
- this.constructor$(values);
- this._howMany = 0;
- this._unwrap = false;
- this._initialized = false;
+ get statusText() {
+ return this[INTERNALS$1].statusText;
+ }
+
+ get headers() {
+ return this[INTERNALS$1].headers;
+ }
+
+ /**
+ * Clone this response
+ *
+ * @return Response
+ */
+ clone() {
+ return new Response(clone(this), {
+ url: this.url,
+ status: this.status,
+ statusText: this.statusText,
+ headers: this.headers,
+ ok: this.ok,
+ redirected: this.redirected
+ });
+ }
}
-util.inherits(SomePromiseArray, PromiseArray);
-SomePromiseArray.prototype._init = function () {
- if (!this._initialized) {
- return;
- }
- if (this._howMany === 0) {
- this._resolve([]);
- return;
- }
- this._init$(undefined, -5);
- var isArrayResolved = isArray(this._values);
- if (!this._isResolved() &&
- isArrayResolved &&
- this._howMany > this._canPossiblyFulfill()) {
- this._reject(this._getRangeError(this.length()));
- }
-};
+Body.mixIn(Response.prototype);
-SomePromiseArray.prototype.init = function () {
- this._initialized = true;
- this._init();
-};
+Object.defineProperties(Response.prototype, {
+ url: { enumerable: true },
+ status: { enumerable: true },
+ ok: { enumerable: true },
+ redirected: { enumerable: true },
+ statusText: { enumerable: true },
+ headers: { enumerable: true },
+ clone: { enumerable: true }
+});
-SomePromiseArray.prototype.setUnwrap = function () {
- this._unwrap = true;
-};
+Object.defineProperty(Response.prototype, Symbol.toStringTag, {
+ value: 'Response',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
-SomePromiseArray.prototype.howMany = function () {
- return this._howMany;
-};
+const INTERNALS$2 = Symbol('Request internals');
-SomePromiseArray.prototype.setHowMany = function (count) {
- this._howMany = count;
-};
+// fix an issue where "format", "parse" aren't a named export for node <10
+const parse_url = Url.parse;
+const format_url = Url.format;
-SomePromiseArray.prototype._promiseFulfilled = function (value) {
- this._addFulfilled(value);
- if (this._fulfilled() === this.howMany()) {
- this._values.length = this.howMany();
- if (this.howMany() === 1 && this._unwrap) {
- this._resolve(this._values[0]);
- } else {
- this._resolve(this._values);
- }
- return true;
- }
- return false;
+const streamDestructionSupported = 'destroy' in Stream.Readable.prototype;
-};
-SomePromiseArray.prototype._promiseRejected = function (reason) {
- this._addRejected(reason);
- return this._checkOutcome();
-};
+/**
+ * Check if a value is an instance of Request.
+ *
+ * @param Mixed input
+ * @return Boolean
+ */
+function isRequest(input) {
+ return typeof input === 'object' && typeof input[INTERNALS$2] === 'object';
+}
-SomePromiseArray.prototype._promiseCancelled = function () {
- if (this._values instanceof Promise || this._values == null) {
- return this._cancel();
- }
- this._addRejected(CANCELLATION);
- return this._checkOutcome();
-};
+function isAbortSignal(signal) {
+ const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
+ return !!(proto && proto.constructor.name === 'AbortSignal');
+}
-SomePromiseArray.prototype._checkOutcome = function() {
- if (this.howMany() > this._canPossiblyFulfill()) {
- var e = new AggregateError();
- for (var i = this.length(); i < this._values.length; ++i) {
- if (this._values[i] !== CANCELLATION) {
- e.push(this._values[i]);
- }
- }
- if (e.length > 0) {
- this._reject(e);
- } else {
- this._cancel();
- }
- return true;
- }
- return false;
-};
+/**
+ * Request class
+ *
+ * @param Mixed input Url or Request instance
+ * @param Object init Custom options
+ * @return Void
+ */
+class Request {
+ constructor(input) {
+ let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-SomePromiseArray.prototype._fulfilled = function () {
- return this._totalResolved;
-};
+ let parsedURL;
-SomePromiseArray.prototype._rejected = function () {
- return this._values.length - this.length();
-};
+ // normalize input
+ if (!isRequest(input)) {
+ if (input && input.href) {
+ // in order to support Node.js' Url objects; though WHATWG's URL objects
+ // will fall into this branch also (since their `toString()` will return
+ // `href` property anyway)
+ parsedURL = parse_url(input.href);
+ } else {
+ // coerce input to a string before attempting to parse
+ parsedURL = parse_url(`${input}`);
+ }
+ input = {};
+ } else {
+ parsedURL = parse_url(input.url);
+ }
-SomePromiseArray.prototype._addRejected = function (reason) {
- this._values.push(reason);
-};
+ let method = init.method || input.method || 'GET';
+ method = method.toUpperCase();
-SomePromiseArray.prototype._addFulfilled = function (value) {
- this._values[this._totalResolved++] = value;
-};
+ if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
+ throw new TypeError('Request with GET/HEAD method cannot have body');
+ }
-SomePromiseArray.prototype._canPossiblyFulfill = function () {
- return this.length() - this._rejected();
-};
+ let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;
-SomePromiseArray.prototype._getRangeError = function (count) {
- var message = "Input array must contain at least " +
- this._howMany + " items but contains only " + count + " items";
- return new RangeError(message);
-};
+ Body.call(this, inputBody, {
+ timeout: init.timeout || input.timeout || 0,
+ size: init.size || input.size || 0
+ });
-SomePromiseArray.prototype._resolveEmptyArray = function () {
- this._reject(this._getRangeError(0));
-};
+ const headers = new Headers(init.headers || input.headers || {});
-function some(promises, howMany) {
- if ((howMany | 0) !== howMany || howMany < 0) {
- return apiRejection("expecting a positive integer\u000a\u000a See http://goo.gl/MqrFmX\u000a");
- }
- var ret = new SomePromiseArray(promises);
- var promise = ret.promise();
- ret.setHowMany(howMany);
- ret.init();
- return promise;
-}
+ if (inputBody != null && !headers.has('Content-Type')) {
+ const contentType = extractContentType(inputBody);
+ if (contentType) {
+ headers.append('Content-Type', contentType);
+ }
+ }
-Promise.some = function (promises, howMany) {
- return some(promises, howMany);
-};
+ let signal = isRequest(input) ? input.signal : null;
+ if ('signal' in init) signal = init.signal;
-Promise.prototype.some = function (howMany) {
- return some(this, howMany);
-};
+ if (signal != null && !isAbortSignal(signal)) {
+ throw new TypeError('Expected signal to be an instanceof AbortSignal');
+ }
-Promise._SomePromiseArray = SomePromiseArray;
-};
+ this[INTERNALS$2] = {
+ method,
+ redirect: init.redirect || input.redirect || 'follow',
+ headers,
+ parsedURL,
+ signal
+ };
+ // node-fetch-only options
+ this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;
+ this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;
+ this.counter = init.counter || input.counter || 0;
+ this.agent = init.agent || input.agent;
+ }
-/***/ }),
-/* 324 */,
-/* 325 */,
-/* 326 */,
-/* 327 */,
-/* 328 */,
-/* 329 */,
-/* 330 */,
-/* 331 */,
-/* 332 */,
-/* 333 */,
-/* 334 */,
-/* 335 */,
-/* 336 */,
-/* 337 */,
-/* 338 */,
-/* 339 */,
-/* 340 */,
-/* 341 */,
-/* 342 */,
-/* 343 */,
-/* 344 */,
-/* 345 */,
-/* 346 */,
-/* 347 */,
-/* 348 */,
-/* 349 */,
-/* 350 */,
-/* 351 */,
-/* 352 */,
-/* 353 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+ get method() {
+ return this[INTERNALS$2].method;
+ }
-"use strict";
+ get url() {
+ return format_url(this[INTERNALS$2].parsedURL);
+ }
+ get headers() {
+ return this[INTERNALS$2].headers;
+ }
-const u = __webpack_require__(676).fromCallback
-module.exports = {
- move: u(__webpack_require__(500))
-}
+ get redirect() {
+ return this[INTERNALS$2].redirect;
+ }
+ get signal() {
+ return this[INTERNALS$2].signal;
+ }
-/***/ }),
-/* 354 */,
-/* 355 */,
-/* 356 */
-/***/ (function(module) {
+ /**
+ * Clone this request
+ *
+ * @return Request
+ */
+ clone() {
+ return new Request(this);
+ }
+}
-function stringify (obj, options = {}) {
- const EOL = options.EOL || '\n'
+Body.mixIn(Request.prototype);
- const str = JSON.stringify(obj, options ? options.replacer : null, options.spaces)
+Object.defineProperty(Request.prototype, Symbol.toStringTag, {
+ value: 'Request',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
- return str.replace(/\n/g, EOL) + EOL
-}
+Object.defineProperties(Request.prototype, {
+ method: { enumerable: true },
+ url: { enumerable: true },
+ headers: { enumerable: true },
+ redirect: { enumerable: true },
+ clone: { enumerable: true },
+ signal: { enumerable: true }
+});
-function stripBom (content) {
- // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified
- if (Buffer.isBuffer(content)) content = content.toString('utf8')
- return content.replace(/^\uFEFF/, '')
-}
+/**
+ * Convert a Request to Node.js http request options.
+ *
+ * @param Request A Request instance
+ * @return Object The options object to be passed to http.request
+ */
+function getNodeRequestOptions(request) {
+ const parsedURL = request[INTERNALS$2].parsedURL;
+ const headers = new Headers(request[INTERNALS$2].headers);
-module.exports = { stringify, stripBom }
+ // fetch step 1.3
+ if (!headers.has('Accept')) {
+ headers.set('Accept', '*/*');
+ }
+ // Basic fetch
+ if (!parsedURL.protocol || !parsedURL.hostname) {
+ throw new TypeError('Only absolute URLs are supported');
+ }
-/***/ }),
-/* 357 */
-/***/ (function(module) {
+ if (!/^https?:$/.test(parsedURL.protocol)) {
+ throw new TypeError('Only HTTP(S) protocols are supported');
+ }
-module.exports = require("assert");
+ if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {
+ throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
+ }
-/***/ }),
-/* 358 */,
-/* 359 */,
-/* 360 */,
-/* 361 */,
-/* 362 */,
-/* 363 */
-/***/ (function(module) {
+ // HTTP-network-or-cache fetch steps 2.4-2.7
+ let contentLengthValue = null;
+ if (request.body == null && /^(POST|PUT)$/i.test(request.method)) {
+ contentLengthValue = '0';
+ }
+ if (request.body != null) {
+ const totalBytes = getTotalBytes(request);
+ if (typeof totalBytes === 'number') {
+ contentLengthValue = String(totalBytes);
+ }
+ }
+ if (contentLengthValue) {
+ headers.set('Content-Length', contentLengthValue);
+ }
-module.exports = register
+ // HTTP-network-or-cache fetch step 2.11
+ if (!headers.has('User-Agent')) {
+ headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
+ }
-function register (state, name, method, options) {
- if (typeof method !== 'function') {
- throw new Error('method for before hook must be a function')
- }
+ // HTTP-network-or-cache fetch step 2.15
+ if (request.compress && !headers.has('Accept-Encoding')) {
+ headers.set('Accept-Encoding', 'gzip,deflate');
+ }
- if (!options) {
- options = {}
- }
+ let agent = request.agent;
+ if (typeof agent === 'function') {
+ agent = agent(parsedURL);
+ }
- if (Array.isArray(name)) {
- return name.reverse().reduce(function (callback, name) {
- return register.bind(null, state, name, callback, options)
- }, method)()
- }
+ if (!headers.has('Connection') && !agent) {
+ headers.set('Connection', 'close');
+ }
- return Promise.resolve()
- .then(function () {
- if (!state.registry[name]) {
- return method(options)
- }
+ // HTTP-network fetch step 4.2
+ // chunked encoding is handled by Node.js
- return (state.registry[name]).reduce(function (method, registered) {
- return registered.hook.bind(null, method, options)
- }, method)()
- })
+ return Object.assign({}, parsedURL, {
+ method: request.method,
+ headers: exportNodeCompatibleHeaders(headers),
+ agent
+ });
}
+/**
+ * abort-error.js
+ *
+ * AbortError interface for cancelled requests
+ */
-/***/ }),
-/* 364 */,
-/* 365 */,
-/* 366 */,
-/* 367 */,
-/* 368 */,
-/* 369 */,
-/* 370 */,
-/* 371 */,
-/* 372 */,
-/* 373 */,
-/* 374 */
-/***/ (function(module) {
+/**
+ * Create AbortError instance
+ *
+ * @param String message Error message for human
+ * @return AbortError
+ */
+function AbortError(message) {
+ Error.call(this, message);
-"use strict";
+ this.type = 'aborted';
+ this.message = message;
+ // hide custom error implementation details from end-users
+ Error.captureStackTrace(this, this.constructor);
+}
-var hasOwn = Object.prototype.hasOwnProperty;
-var toStr = Object.prototype.toString;
-var defineProperty = Object.defineProperty;
-var gOPD = Object.getOwnPropertyDescriptor;
+AbortError.prototype = Object.create(Error.prototype);
+AbortError.prototype.constructor = AbortError;
+AbortError.prototype.name = 'AbortError';
-var isArray = function isArray(arr) {
- if (typeof Array.isArray === 'function') {
- return Array.isArray(arr);
- }
+// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
+const PassThrough$1 = Stream.PassThrough;
+const resolve_url = Url.resolve;
- return toStr.call(arr) === '[object Array]';
-};
+/**
+ * Fetch function
+ *
+ * @param Mixed url Absolute url or Request instance
+ * @param Object opts Fetch options
+ * @return Promise
+ */
+function fetch(url, opts) {
-var isPlainObject = function isPlainObject(obj) {
- if (!obj || toStr.call(obj) !== '[object Object]') {
- return false;
+ // allow custom promise
+ if (!fetch.Promise) {
+ throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
}
- var hasOwnConstructor = hasOwn.call(obj, 'constructor');
- var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');
- // Not own constructor property must be Object
- if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {
- return false;
- }
+ Body.Promise = fetch.Promise;
- // Own properties are enumerated firstly, so to speed up,
- // if last one is own, then all properties are own.
- var key;
- for (key in obj) { /**/ }
+ // wrap http.request into fetch
+ return new fetch.Promise(function (resolve, reject) {
+ // build request object
+ const request = new Request(url, opts);
+ const options = getNodeRequestOptions(request);
- return typeof key === 'undefined' || hasOwn.call(obj, key);
-};
+ const send = (options.protocol === 'https:' ? https : http).request;
+ const signal = request.signal;
-// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target
-var setProperty = function setProperty(target, options) {
- if (defineProperty && options.name === '__proto__') {
- defineProperty(target, options.name, {
- enumerable: true,
- configurable: true,
- value: options.newValue,
- writable: true
- });
- } else {
- target[options.name] = options.newValue;
- }
-};
+ let response = null;
-// Return undefined instead of __proto__ if '__proto__' is not an own property
-var getProperty = function getProperty(obj, name) {
- if (name === '__proto__') {
- if (!hasOwn.call(obj, name)) {
- return void 0;
- } else if (gOPD) {
- // In early versions of node, obj['__proto__'] is buggy when obj has
- // __proto__ as an own property. Object.getOwnPropertyDescriptor() works.
- return gOPD(obj, name).value;
+ const abort = function abort() {
+ let error = new AbortError('The user aborted a request.');
+ reject(error);
+ if (request.body && request.body instanceof Stream.Readable) {
+ request.body.destroy(error);
+ }
+ if (!response || !response.body) return;
+ response.body.emit('error', error);
+ };
+
+ if (signal && signal.aborted) {
+ abort();
+ return;
}
- }
- return obj[name];
-};
+ const abortAndFinalize = function abortAndFinalize() {
+ abort();
+ finalize();
+ };
-module.exports = function extend() {
- var options, name, src, copy, copyIsArray, clone;
- var target = arguments[0];
- var i = 1;
- var length = arguments.length;
- var deep = false;
+ // send request
+ const req = send(options);
+ let reqTimeout;
- // Handle a deep copy situation
- if (typeof target === 'boolean') {
- deep = target;
- target = arguments[1] || {};
- // skip the boolean and the target
- i = 2;
- }
- if (target == null || (typeof target !== 'object' && typeof target !== 'function')) {
- target = {};
- }
+ if (signal) {
+ signal.addEventListener('abort', abortAndFinalize);
+ }
- for (; i < length; ++i) {
- options = arguments[i];
- // Only deal with non-null/undefined values
- if (options != null) {
- // Extend the base object
- for (name in options) {
- src = getProperty(target, name);
- copy = getProperty(options, name);
+ function finalize() {
+ req.abort();
+ if (signal) signal.removeEventListener('abort', abortAndFinalize);
+ clearTimeout(reqTimeout);
+ }
- // Prevent never-ending loop
- if (target !== copy) {
- // Recurse if we're merging plain objects or arrays
- if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {
- if (copyIsArray) {
- copyIsArray = false;
- clone = src && isArray(src) ? src : [];
- } else {
- clone = src && isPlainObject(src) ? src : {};
+ if (request.timeout) {
+ req.once('socket', function (socket) {
+ reqTimeout = setTimeout(function () {
+ reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));
+ finalize();
+ }, request.timeout);
+ });
+ }
+
+ req.on('error', function (err) {
+ reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
+ finalize();
+ });
+
+ req.on('response', function (res) {
+ clearTimeout(reqTimeout);
+
+ const headers = createHeadersLenient(res.headers);
+
+ // HTTP fetch step 5
+ if (fetch.isRedirect(res.statusCode)) {
+ // HTTP fetch step 5.2
+ const location = headers.get('Location');
+
+ // HTTP fetch step 5.3
+ const locationURL = location === null ? null : resolve_url(request.url, location);
+
+ // HTTP fetch step 5.5
+ switch (request.redirect) {
+ case 'error':
+ reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));
+ finalize();
+ return;
+ case 'manual':
+ // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
+ if (locationURL !== null) {
+ // handle corrupted header
+ try {
+ headers.set('Location', locationURL);
+ } catch (err) {
+ // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request
+ reject(err);
+ }
+ }
+ break;
+ case 'follow':
+ // HTTP-redirect fetch step 2
+ if (locationURL === null) {
+ break;
}
- // Never move original objects, clone them
- setProperty(target, { name: name, newValue: extend(deep, clone, copy) });
+ // HTTP-redirect fetch step 5
+ if (request.counter >= request.follow) {
+ reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));
+ finalize();
+ return;
+ }
- // Don't bring in undefined values
- } else if (typeof copy !== 'undefined') {
- setProperty(target, { name: name, newValue: copy });
- }
- }
- }
- }
- }
+ // HTTP-redirect fetch step 6 (counter increment)
+ // Create a new Request object.
+ const requestOpts = {
+ headers: new Headers(request.headers),
+ follow: request.follow,
+ counter: request.counter + 1,
+ agent: request.agent,
+ compress: request.compress,
+ method: request.method,
+ body: request.body,
+ signal: request.signal,
+ timeout: request.timeout,
+ size: request.size
+ };
- // Return the modified object
- return target;
-};
+ // HTTP-redirect fetch step 9
+ if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
+ reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
+ finalize();
+ return;
+ }
+ // HTTP-redirect fetch step 11
+ if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {
+ requestOpts.method = 'GET';
+ requestOpts.body = undefined;
+ requestOpts.headers.delete('content-length');
+ }
-/***/ }),
-/* 375 */,
-/* 376 */,
-/* 377 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+ // HTTP-redirect fetch step 15
+ resolve(fetch(new Request(locationURL, requestOpts)));
+ finalize();
+ return;
+ }
+ }
-"use strict";
+ // prepare response
+ res.once('end', function () {
+ if (signal) signal.removeEventListener('abort', abortAndFinalize);
+ });
+ let body = res.pipe(new PassThrough$1());
-module.exports = function(Promise, INTERNAL) {
-var util = __webpack_require__(248);
-var errorObj = util.errorObj;
-var isObject = util.isObject;
+ const response_options = {
+ url: request.url,
+ status: res.statusCode,
+ statusText: res.statusMessage,
+ headers: headers,
+ size: request.size,
+ timeout: request.timeout,
+ counter: request.counter
+ };
-function tryConvertToPromise(obj, context) {
- if (isObject(obj)) {
- if (obj instanceof Promise) return obj;
- var then = getThen(obj);
- if (then === errorObj) {
- if (context) context._pushContext();
- var ret = Promise.reject(then.e);
- if (context) context._popContext();
- return ret;
- } else if (typeof then === "function") {
- if (isAnyBluebirdPromise(obj)) {
- var ret = new Promise(INTERNAL);
- obj._then(
- ret._fulfill,
- ret._reject,
- undefined,
- ret,
- null
- );
- return ret;
- }
- return doThenable(obj, then, context);
- }
- }
- return obj;
-}
+ // HTTP-network fetch step 12.1.1.3
+ const codings = headers.get('Content-Encoding');
-function doGetThen(obj) {
- return obj.then;
-}
+ // HTTP-network fetch step 12.1.1.4: handle content codings
-function getThen(obj) {
- try {
- return doGetThen(obj);
- } catch (e) {
- errorObj.e = e;
- return errorObj;
- }
-}
+ // in following scenarios we ignore compression support
+ // 1. compression support is disabled
+ // 2. HEAD request
+ // 3. no Content-Encoding header
+ // 4. no content response (204)
+ // 5. content not modified response (304)
+ if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {
+ response = new Response(body, response_options);
+ resolve(response);
+ return;
+ }
-var hasProp = {}.hasOwnProperty;
-function isAnyBluebirdPromise(obj) {
- try {
- return hasProp.call(obj, "_promise0");
- } catch (e) {
- return false;
- }
-}
+ // For Node v6+
+ // Be less strict when decoding compressed responses, since sometimes
+ // servers send slightly invalid responses that are still accepted
+ // by common browsers.
+ // Always using Z_SYNC_FLUSH is what cURL does.
+ const zlibOptions = {
+ flush: zlib.Z_SYNC_FLUSH,
+ finishFlush: zlib.Z_SYNC_FLUSH
+ };
-function doThenable(x, then, context) {
- var promise = new Promise(INTERNAL);
- var ret = promise;
- if (context) context._pushContext();
- promise._captureStackTrace();
- if (context) context._popContext();
- var synchronous = true;
- var result = util.tryCatch(then).call(x, resolve, reject);
- synchronous = false;
+ // for gzip
+ if (codings == 'gzip' || codings == 'x-gzip') {
+ body = body.pipe(zlib.createGunzip(zlibOptions));
+ response = new Response(body, response_options);
+ resolve(response);
+ return;
+ }
- if (promise && result === errorObj) {
- promise._rejectCallback(result.e, true, true);
- promise = null;
- }
+ // for deflate
+ if (codings == 'deflate' || codings == 'x-deflate') {
+ // handle the infamous raw deflate response from old servers
+ // a hack for old IIS and Apache servers
+ const raw = res.pipe(new PassThrough$1());
+ raw.once('data', function (chunk) {
+ // see http://stackoverflow.com/questions/37519828
+ if ((chunk[0] & 0x0F) === 0x08) {
+ body = body.pipe(zlib.createInflate());
+ } else {
+ body = body.pipe(zlib.createInflateRaw());
+ }
+ response = new Response(body, response_options);
+ resolve(response);
+ });
+ return;
+ }
- function resolve(value) {
- if (!promise) return;
- promise._resolveCallback(value);
- promise = null;
- }
+ // for br
+ if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {
+ body = body.pipe(zlib.createBrotliDecompress());
+ response = new Response(body, response_options);
+ resolve(response);
+ return;
+ }
- function reject(reason) {
- if (!promise) return;
- promise._rejectCallback(reason, synchronous, true);
- promise = null;
- }
- return ret;
-}
+ // otherwise, use response as-is
+ response = new Response(body, response_options);
+ resolve(response);
+ });
-return tryConvertToPromise;
+ writeToStream(req, request);
+ });
+}
+/**
+ * Redirect code matching
+ *
+ * @param Number code Status code
+ * @return Boolean
+ */
+fetch.isRedirect = function (code) {
+ return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
};
+// expose Promise
+fetch.Promise = global.Promise;
+
+module.exports = exports = fetch;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = exports;
+exports.Headers = Headers;
+exports.Request = Request;
+exports.Response = Response;
+exports.FetchError = FetchError;
+
/***/ }),
-/* 378 */,
-/* 379 */,
-/* 380 */,
-/* 381 */,
-/* 382 */,
-/* 383 */,
-/* 384 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
+
+/***/ 456:
+/***/ (function(__unusedmodule, exports) {
"use strict";
@@ -11928,19 +11539,12 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
-
-var _v = _interopRequireDefault(__webpack_require__(212));
-
-var _sha = _interopRequireDefault(__webpack_require__(498));
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-const v5 = (0, _v.default)('v5', 0x50, _sha.default);
-var _default = v5;
+var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
exports.default = _default;
/***/ }),
-/* 385 */
+
+/***/ 463:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -11950,12075 +11554,10133 @@ Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
-var isPlainObject = _interopDefault(__webpack_require__(696));
-var universalUserAgent = __webpack_require__(796);
-
-function lowercaseKeys(object) {
- if (!object) {
- return {};
- }
-
- return Object.keys(object).reduce((newObj, key) => {
- newObj[key.toLowerCase()] = object[key];
- return newObj;
- }, {});
-}
-
-function mergeDeep(defaults, options) {
- const result = Object.assign({}, defaults);
- Object.keys(options).forEach(key => {
- if (isPlainObject(options[key])) {
- if (!(key in defaults)) Object.assign(result, {
- [key]: options[key]
- });else result[key] = mergeDeep(defaults[key], options[key]);
- } else {
- Object.assign(result, {
- [key]: options[key]
- });
- }
- });
- return result;
-}
-
-function merge(defaults, route, options) {
- if (typeof route === "string") {
- let [method, url] = route.split(" ");
- options = Object.assign(url ? {
- method,
- url
- } : {
- url: method
- }, options);
- } else {
- options = Object.assign({}, route);
- } // lowercase header names before merging with defaults to avoid duplicates
-
-
- options.headers = lowercaseKeys(options.headers);
- const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten
-
- if (defaults && defaults.mediaType.previews.length) {
- mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews);
- }
+var deprecation = __webpack_require__(692);
+var once = _interopDefault(__webpack_require__(49));
- mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, ""));
- return mergedOptions;
-}
+const logOnce = once(deprecation => console.warn(deprecation));
+/**
+ * Error with extra properties to help with debugging
+ */
-function addQueryParameters(url, parameters) {
- const separator = /\?/.test(url) ? "&" : "?";
- const names = Object.keys(parameters);
+class RequestError extends Error {
+ constructor(message, statusCode, options) {
+ super(message); // Maintains proper stack trace (only available on V8)
- if (names.length === 0) {
- return url;
- }
+ /* istanbul ignore next */
- return url + separator + names.map(name => {
- if (name === "q") {
- return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+");
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, this.constructor);
}
- return `${name}=${encodeURIComponent(parameters[name])}`;
- }).join("&");
-}
+ this.name = "HttpError";
+ this.status = statusCode;
+ Object.defineProperty(this, "code", {
+ get() {
+ logOnce(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`."));
+ return statusCode;
+ }
-const urlVariableRegex = /\{[^}]+\}/g;
+ });
+ this.headers = options.headers || {}; // redact request credentials without mutating original request options
-function removeNonChars(variableName) {
- return variableName.replace(/^\W+|\W+$/g, "").split(/,/);
-}
+ const requestCopy = Object.assign({}, options.request);
-function extractUrlVariableNames(url) {
- const matches = url.match(urlVariableRegex);
+ if (options.request.headers.authorization) {
+ requestCopy.headers = Object.assign({}, options.request.headers, {
+ authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]")
+ });
+ }
- if (!matches) {
- return [];
+ requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit
+ // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications
+ .replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended
+ // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header
+ .replace(/\baccess_token=\w+/g, "access_token=[REDACTED]");
+ this.request = requestCopy;
}
- return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);
-}
-
-function omit(object, keysToOmit) {
- return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => {
- obj[key] = object[key];
- return obj;
- }, {});
}
-// Based on https://github.com/bramstein/url-template, licensed under BSD
-// TODO: create separate package.
-//
-// Copyright (c) 2012-2014, Bram Stein
-// All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// 1. Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// 2. Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// 3. The name of the author may not be used to endorse or promote products
-// derived from this software without specific prior written permission.
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+exports.RequestError = RequestError;
+//# sourceMappingURL=index.js.map
-/* istanbul ignore file */
-function encodeReserved(str) {
- return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) {
- if (!/%[0-9A-Fa-f]/.test(part)) {
- part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]");
- }
- return part;
- }).join("");
-}
+/***/ }),
-function encodeUnreserved(str) {
- return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
- return "%" + c.charCodeAt(0).toString(16).toUpperCase();
- });
-}
+/***/ 469:
+/***/ (function(module, __unusedexports, __webpack_require__) {
-function encodeValue(operator, value, key) {
- value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value);
+"use strict";
- if (key) {
- return encodeUnreserved(key) + "=" + value;
- } else {
- return value;
- }
-}
-function isDefined(value) {
- return value !== undefined && value !== null;
-}
+const jsonFile = __webpack_require__(666)
-function isKeyOperator(operator) {
- return operator === ";" || operator === "&" || operator === "?";
+module.exports = {
+ // jsonfile exports
+ readJson: jsonFile.readFile,
+ readJsonSync: jsonFile.readFileSync,
+ writeJson: jsonFile.writeFile,
+ writeJsonSync: jsonFile.writeFileSync
}
-function getValues(context, operator, key, modifier) {
- var value = context[key],
- result = [];
- if (isDefined(value) && value !== "") {
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
- value = value.toString();
+/***/ }),
- if (modifier && modifier !== "*") {
- value = value.substring(0, parseInt(modifier, 10));
- }
+/***/ 470:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
- } else {
- if (modifier === "*") {
- if (Array.isArray(value)) {
- value.filter(isDefined).forEach(function (value) {
- result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
- });
- } else {
- Object.keys(value).forEach(function (k) {
- if (isDefined(value[k])) {
- result.push(encodeValue(operator, value[k], k));
- }
- });
- }
- } else {
- const tmp = [];
+"use strict";
- if (Array.isArray(value)) {
- value.filter(isDefined).forEach(function (value) {
- tmp.push(encodeValue(operator, value));
- });
- } else {
- Object.keys(value).forEach(function (k) {
- if (isDefined(value[k])) {
- tmp.push(encodeUnreserved(k));
- tmp.push(encodeValue(operator, value[k].toString()));
- }
- });
- }
-
- if (isKeyOperator(operator)) {
- result.push(encodeUnreserved(key) + "=" + tmp.join(","));
- } else if (tmp.length !== 0) {
- result.push(tmp.join(","));
- }
- }
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+ result["default"] = mod;
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const command_1 = __webpack_require__(431);
+const file_command_1 = __webpack_require__(102);
+const utils_1 = __webpack_require__(82);
+const os = __importStar(__webpack_require__(87));
+const path = __importStar(__webpack_require__(622));
+/**
+ * The code to exit an action
+ */
+var ExitCode;
+(function (ExitCode) {
+ /**
+ * A code indicating that the action was successful
+ */
+ ExitCode[ExitCode["Success"] = 0] = "Success";
+ /**
+ * A code indicating that the action was a failure
+ */
+ ExitCode[ExitCode["Failure"] = 1] = "Failure";
+})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
+//-----------------------------------------------------------------------
+// Variables
+//-----------------------------------------------------------------------
+/**
+ * Sets env variable for this action and future actions in the job
+ * @param name the name of the variable to set
+ * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
+ */
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+function exportVariable(name, val) {
+ const convertedVal = utils_1.toCommandValue(val);
+ process.env[name] = convertedVal;
+ const filePath = process.env['GITHUB_ENV'] || '';
+ if (filePath) {
+ const delimiter = '_GitHubActionsFileCommandDelimeter_';
+ const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`;
+ file_command_1.issueCommand('ENV', commandValue);
}
- } else {
- if (operator === ";") {
- if (isDefined(value)) {
- result.push(encodeUnreserved(key));
- }
- } else if (value === "" && (operator === "&" || operator === "?")) {
- result.push(encodeUnreserved(key) + "=");
- } else if (value === "") {
- result.push("");
+ else {
+ command_1.issueCommand('set-env', { name }, convertedVal);
}
- }
-
- return result;
-}
-
-function parseUrl(template) {
- return {
- expand: expand.bind(null, template)
- };
}
-
-function expand(template, context) {
- var operators = ["+", "#", ".", "/", ";", "?", "&"];
- return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) {
- if (expression) {
- let operator = "";
- const values = [];
-
- if (operators.indexOf(expression.charAt(0)) !== -1) {
- operator = expression.charAt(0);
- expression = expression.substr(1);
- }
-
- expression.split(/,/g).forEach(function (variable) {
- var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable);
- values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));
- });
-
- if (operator && operator !== "+") {
- var separator = ",";
-
- if (operator === "?") {
- separator = "&";
- } else if (operator !== "#") {
- separator = operator;
- }
-
- return (values.length !== 0 ? operator : "") + values.join(separator);
- } else {
- return values.join(",");
- }
- } else {
- return encodeReserved(literal);
- }
- });
+exports.exportVariable = exportVariable;
+/**
+ * Registers a secret which will get masked from logs
+ * @param secret value of the secret
+ */
+function setSecret(secret) {
+ command_1.issueCommand('add-mask', {}, secret);
}
-
-function parse(options) {
- // https://fetch.spec.whatwg.org/#methods
- let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible
-
- let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{+$1}");
- let headers = Object.assign({}, options.headers);
- let body;
- let parameters = omit(options, ["method", "baseUrl", "url", "headers", "request", "mediaType"]); // extract variable names from URL to calculate remaining variables later
-
- const urlVariableNames = extractUrlVariableNames(url);
- url = parseUrl(url).expand(parameters);
-
- if (!/^http/.test(url)) {
- url = options.baseUrl + url;
- }
-
- const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat("baseUrl");
- const remainingParameters = omit(parameters, omittedParameters);
- const isBinaryRequset = /application\/octet-stream/i.test(headers.accept);
-
- if (!isBinaryRequset) {
- if (options.mediaType.format) {
- // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw
- headers.accept = headers.accept.split(/,/).map(preview => preview.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(",");
+exports.setSecret = setSecret;
+/**
+ * Prepends inputPath to the PATH (for this action and future actions)
+ * @param inputPath
+ */
+function addPath(inputPath) {
+ const filePath = process.env['GITHUB_PATH'] || '';
+ if (filePath) {
+ file_command_1.issueCommand('PATH', inputPath);
}
-
- if (options.mediaType.previews.length) {
- const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || [];
- headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map(preview => {
- const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json";
- return `application/vnd.github.${preview}-preview${format}`;
- }).join(",");
+ else {
+ command_1.issueCommand('add-path', {}, inputPath);
}
- } // for GET/HEAD requests, set URL query parameters from remaining parameters
- // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters
-
-
- if (["GET", "HEAD"].includes(method)) {
- url = addQueryParameters(url, remainingParameters);
- } else {
- if ("data" in remainingParameters) {
- body = remainingParameters.data;
- } else {
- if (Object.keys(remainingParameters).length) {
- body = remainingParameters;
- } else {
- headers["content-length"] = 0;
- }
+ process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
+}
+exports.addPath = addPath;
+/**
+ * Gets the value of an input. The value is also trimmed.
+ *
+ * @param name name of the input to get
+ * @param options optional. See InputOptions.
+ * @returns string
+ */
+function getInput(name, options) {
+ const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
+ if (options && options.required && !val) {
+ throw new Error(`Input required and not supplied: ${name}`);
}
- } // default content-type for JSON if body is set
-
-
- if (!headers["content-type"] && typeof body !== "undefined") {
- headers["content-type"] = "application/json; charset=utf-8";
- } // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body.
- // fetch does not allow to set `content-length` header, but we can set body to an empty string
-
-
- if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") {
- body = "";
- } // Only return body/request keys if present
-
-
- return Object.assign({
- method,
- url,
- headers
- }, typeof body !== "undefined" ? {
- body
- } : null, options.request ? {
- request: options.request
- } : null);
+ return val.trim();
}
-
-function endpointWithDefaults(defaults, route, options) {
- return parse(merge(defaults, route, options));
+exports.getInput = getInput;
+/**
+ * Sets the value of an output.
+ *
+ * @param name name of the output to set
+ * @param value value to store. Non-string values will be converted to a string via JSON.stringify
+ */
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+function setOutput(name, value) {
+ command_1.issueCommand('set-output', { name }, value);
}
-
-function withDefaults(oldDefaults, newDefaults) {
- const DEFAULTS = merge(oldDefaults, newDefaults);
- const endpoint = endpointWithDefaults.bind(null, DEFAULTS);
- return Object.assign(endpoint, {
- DEFAULTS,
- defaults: withDefaults.bind(null, DEFAULTS),
- merge: merge.bind(null, DEFAULTS),
- parse
- });
+exports.setOutput = setOutput;
+/**
+ * Enables or disables the echoing of commands into stdout for the rest of the step.
+ * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
+ *
+ */
+function setCommandEcho(enabled) {
+ command_1.issue('echo', enabled ? 'on' : 'off');
+}
+exports.setCommandEcho = setCommandEcho;
+//-----------------------------------------------------------------------
+// Results
+//-----------------------------------------------------------------------
+/**
+ * Sets the action status to failed.
+ * When the action exits it will be with an exit code of 1
+ * @param message add error issue message
+ */
+function setFailed(message) {
+ process.exitCode = ExitCode.Failure;
+ error(message);
+}
+exports.setFailed = setFailed;
+//-----------------------------------------------------------------------
+// Logging Commands
+//-----------------------------------------------------------------------
+/**
+ * Gets whether Actions Step Debug is on or not
+ */
+function isDebug() {
+ return process.env['RUNNER_DEBUG'] === '1';
+}
+exports.isDebug = isDebug;
+/**
+ * Writes debug message to user log
+ * @param message debug message
+ */
+function debug(message) {
+ command_1.issueCommand('debug', {}, message);
+}
+exports.debug = debug;
+/**
+ * Adds an error issue
+ * @param message error issue message. Errors will be converted to string via toString()
+ */
+function error(message) {
+ command_1.issue('error', message instanceof Error ? message.toString() : message);
+}
+exports.error = error;
+/**
+ * Adds an warning issue
+ * @param message warning issue message. Errors will be converted to string via toString()
+ */
+function warning(message) {
+ command_1.issue('warning', message instanceof Error ? message.toString() : message);
+}
+exports.warning = warning;
+/**
+ * Writes info to log with console.log.
+ * @param message info message
+ */
+function info(message) {
+ process.stdout.write(message + os.EOL);
+}
+exports.info = info;
+/**
+ * Begin an output group.
+ *
+ * Output until the next `groupEnd` will be foldable in this group
+ *
+ * @param name The name of the output group
+ */
+function startGroup(name) {
+ command_1.issue('group', name);
+}
+exports.startGroup = startGroup;
+/**
+ * End an output group.
+ */
+function endGroup() {
+ command_1.issue('endgroup');
+}
+exports.endGroup = endGroup;
+/**
+ * Wrap an asynchronous function call in a group.
+ *
+ * Returns the same type as the function itself.
+ *
+ * @param name The name of the group
+ * @param fn The function to wrap in the group
+ */
+function group(name, fn) {
+ return __awaiter(this, void 0, void 0, function* () {
+ startGroup(name);
+ let result;
+ try {
+ result = yield fn();
+ }
+ finally {
+ endGroup();
+ }
+ return result;
+ });
+}
+exports.group = group;
+//-----------------------------------------------------------------------
+// Wrapper action state
+//-----------------------------------------------------------------------
+/**
+ * Saves state for current action, the state can only be retrieved by this action's post job execution.
+ *
+ * @param name name of the state to store
+ * @param value value to store. Non-string values will be converted to a string via JSON.stringify
+ */
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+function saveState(name, value) {
+ command_1.issueCommand('save-state', { name }, value);
+}
+exports.saveState = saveState;
+/**
+ * Gets the value of an state set by this action's main execution.
+ *
+ * @param name name of the state to get
+ * @returns string
+ */
+function getState(name) {
+ return process.env[`STATE_${name}`] || '';
}
+exports.getState = getState;
+//# sourceMappingURL=core.js.map
-const VERSION = "6.0.1";
+/***/ }),
-const userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`; // DEFAULTS has all properties set that EndpointOptions has, except url.
-// So we use RequestParameters and add method as additional required property.
+/***/ 472:
+/***/ (function(module, __unusedexports, __webpack_require__) {
-const DEFAULTS = {
- method: "GET",
- baseUrl: "https://api.github.com",
- headers: {
- accept: "application/vnd.github.v3+json",
- "user-agent": userAgent
- },
- mediaType: {
- format: "",
- previews: []
- }
-};
+"use strict";
-const endpoint = withDefaults(null, DEFAULTS);
-exports.endpoint = endpoint;
-//# sourceMappingURL=index.js.map
+const file = __webpack_require__(149)
+const link = __webpack_require__(900)
+const symlink = __webpack_require__(849)
+
+module.exports = {
+ // file
+ createFile: file.createFile,
+ createFileSync: file.createFileSync,
+ ensureFile: file.createFile,
+ ensureFileSync: file.createFileSync,
+ // link
+ createLink: link.createLink,
+ createLinkSync: link.createLinkSync,
+ ensureLink: link.createLink,
+ ensureLinkSync: link.createLinkSync,
+ // symlink
+ createSymlink: symlink.createSymlink,
+ createSymlinkSync: symlink.createSymlinkSync,
+ ensureSymlink: symlink.createSymlink,
+ ensureSymlinkSync: symlink.createSymlinkSync
+}
/***/ }),
-/* 386 */,
-/* 387 */,
-/* 388 */,
-/* 389 */
+
+/***/ 474:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
-const fs = __webpack_require__(747);
-const shebangCommand = __webpack_require__(866);
-
-function readShebang(command) {
- // Read the first 150 bytes from the file
- const size = 150;
- let buffer;
-
- if (Buffer.alloc) {
- // Node.js v4.5+ / v5.10+
- buffer = Buffer.alloc(size);
- } else {
- // Old Node.js API
- buffer = new Buffer(size);
- buffer.fill(0); // zero-fill
- }
+const fs = __webpack_require__(598)
+const path = __webpack_require__(622)
+const assert = __webpack_require__(357)
- let fd;
+const isWindows = (process.platform === 'win32')
- try {
- fd = fs.openSync(command, 'r');
- fs.readSync(fd, buffer, 0, size, 0);
- fs.closeSync(fd);
- } catch (e) { /* Empty */ }
+function defaults (options) {
+ const methods = [
+ 'unlink',
+ 'chmod',
+ 'stat',
+ 'lstat',
+ 'rmdir',
+ 'readdir'
+ ]
+ methods.forEach(m => {
+ options[m] = options[m] || fs[m]
+ m = m + 'Sync'
+ options[m] = options[m] || fs[m]
+ })
- // Attempt to extract shebang (null is returned if not a shebang)
- return shebangCommand(buffer.toString());
+ options.maxBusyTries = options.maxBusyTries || 3
}
-module.exports = readShebang;
-
+function rimraf (p, options, cb) {
+ let busyTries = 0
-/***/ }),
-/* 390 */
-/***/ (function(__unusedmodule, exports) {
+ if (typeof options === 'function') {
+ cb = options
+ options = {}
+ }
-"use strict";
+ assert(p, 'rimraf: missing path')
+ assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')
+ assert.strictEqual(typeof cb, 'function', 'rimraf: callback function required')
+ assert(options, 'rimraf: invalid options argument provided')
+ assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')
+ defaults(options)
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.default = void 0;
+ rimraf_(p, options, function CB (er) {
+ if (er) {
+ if ((er.code === 'EBUSY' || er.code === 'ENOTEMPTY' || er.code === 'EPERM') &&
+ busyTries < options.maxBusyTries) {
+ busyTries++
+ const time = busyTries * 100
+ // try again, with the same exact callback as this one.
+ return setTimeout(() => rimraf_(p, options, CB), time)
+ }
-/**
- * Convert array of 16 byte values to UUID string format of the form:
- * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
- */
-var byteToHex = [];
+ // already gone
+ if (er.code === 'ENOENT') er = null
+ }
-for (var i = 0; i < 256; ++i) {
- byteToHex[i] = (i + 0x100).toString(16).substr(1);
+ cb(er)
+ })
}
-function bytesToUuid(buf, offset) {
- var i = offset || 0;
- var bth = byteToHex; // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4
-
- return [bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]]].join('');
-}
+// Two possible strategies.
+// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR
+// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR
+//
+// Both result in an extra syscall when you guess wrong. However, there
+// are likely far more normal files in the world than directories. This
+// is based on the assumption that a the average number of files per
+// directory is >= 1.
+//
+// If anyone ever complains about this, then I guess the strategy could
+// be made configurable somehow. But until then, YAGNI.
+function rimraf_ (p, options, cb) {
+ assert(p)
+ assert(options)
+ assert(typeof cb === 'function')
-var _default = bytesToUuid;
-exports.default = _default;
+ // sunos lets the root user unlink directories, which is... weird.
+ // so we have to lstat here and make sure it's not a dir.
+ options.lstat(p, (er, st) => {
+ if (er && er.code === 'ENOENT') {
+ return cb(null)
+ }
-/***/ }),
-/* 391 */,
-/* 392 */,
-/* 393 */,
-/* 394 */,
-/* 395 */,
-/* 396 */,
-/* 397 */,
-/* 398 */,
-/* 399 */,
-/* 400 */,
-/* 401 */,
-/* 402 */,
-/* 403 */,
-/* 404 */,
-/* 405 */,
-/* 406 */,
-/* 407 */,
-/* 408 */,
-/* 409 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+ // Windows can EPERM on stat. Life is suffering.
+ if (er && er.code === 'EPERM' && isWindows) {
+ return fixWinEPERM(p, options, er, cb)
+ }
-"use strict";
+ if (st && st.isDirectory()) {
+ return rmdir(p, options, er, cb)
+ }
-module.exports = function(Promise, INTERNAL, debug) {
-var util = __webpack_require__(248);
-var TimeoutError = Promise.TimeoutError;
-
-function HandleWrapper(handle) {
- this.handle = handle;
+ options.unlink(p, er => {
+ if (er) {
+ if (er.code === 'ENOENT') {
+ return cb(null)
+ }
+ if (er.code === 'EPERM') {
+ return (isWindows)
+ ? fixWinEPERM(p, options, er, cb)
+ : rmdir(p, options, er, cb)
+ }
+ if (er.code === 'EISDIR') {
+ return rmdir(p, options, er, cb)
+ }
+ }
+ return cb(er)
+ })
+ })
}
-HandleWrapper.prototype._resultCancelled = function() {
- clearTimeout(this.handle);
-};
+function fixWinEPERM (p, options, er, cb) {
+ assert(p)
+ assert(options)
+ assert(typeof cb === 'function')
-var afterValue = function(value) { return delay(+this).thenReturn(value); };
-var delay = Promise.delay = function (ms, value) {
- var ret;
- var handle;
- if (value !== undefined) {
- ret = Promise.resolve(value)
- ._then(afterValue, null, null, ms, undefined);
- if (debug.cancellation() && value instanceof Promise) {
- ret._setOnCancel(value);
- }
+ options.chmod(p, 0o666, er2 => {
+ if (er2) {
+ cb(er2.code === 'ENOENT' ? null : er)
} else {
- ret = new Promise(INTERNAL);
- handle = setTimeout(function() { ret._fulfill(); }, +ms);
- if (debug.cancellation()) {
- ret._setOnCancel(new HandleWrapper(handle));
+ options.stat(p, (er3, stats) => {
+ if (er3) {
+ cb(er3.code === 'ENOENT' ? null : er)
+ } else if (stats.isDirectory()) {
+ rmdir(p, options, er, cb)
+ } else {
+ options.unlink(p, cb)
}
- ret._captureStackTrace();
+ })
}
- ret._setAsyncGuaranteed();
- return ret;
-};
+ })
+}
-Promise.prototype.delay = function (ms) {
- return delay(ms, this);
-};
+function fixWinEPERMSync (p, options, er) {
+ let stats
-var afterTimeout = function (promise, message, parent) {
- var err;
- if (typeof message !== "string") {
- if (message instanceof Error) {
- err = message;
- } else {
- err = new TimeoutError("operation timed out");
- }
+ assert(p)
+ assert(options)
+
+ try {
+ options.chmodSync(p, 0o666)
+ } catch (er2) {
+ if (er2.code === 'ENOENT') {
+ return
} else {
- err = new TimeoutError(message);
+ throw er
}
- util.markAsOriginatingFromRejection(err);
- promise._attachExtraTrace(err);
- promise._reject(err);
+ }
- if (parent != null) {
- parent.cancel();
+ try {
+ stats = options.statSync(p)
+ } catch (er3) {
+ if (er3.code === 'ENOENT') {
+ return
+ } else {
+ throw er
}
-};
-
-function successClear(value) {
- clearTimeout(this.handle);
- return value;
-}
+ }
-function failureClear(reason) {
- clearTimeout(this.handle);
- throw reason;
+ if (stats.isDirectory()) {
+ rmdirSync(p, options, er)
+ } else {
+ options.unlinkSync(p)
+ }
}
-Promise.prototype.timeout = function (ms, message) {
- ms = +ms;
- var ret, parent;
-
- var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() {
- if (ret.isPending()) {
- afterTimeout(ret, message, parent);
- }
- }, ms));
+function rmdir (p, options, originalEr, cb) {
+ assert(p)
+ assert(options)
+ assert(typeof cb === 'function')
- if (debug.cancellation()) {
- parent = this.then();
- ret = parent._then(successClear, failureClear,
- undefined, handleWrapper, undefined);
- ret._setOnCancel(handleWrapper);
+ // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
+ // if we guessed wrong, and it's not a directory, then
+ // raise the original error.
+ options.rmdir(p, er => {
+ if (er && (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM')) {
+ rmkids(p, options, cb)
+ } else if (er && er.code === 'ENOTDIR') {
+ cb(originalEr)
} else {
- ret = this._then(successClear, failureClear,
- undefined, handleWrapper, undefined);
+ cb(er)
}
+ })
+}
- return ret;
-};
-
-};
-
-
-/***/ }),
-/* 410 */,
-/* 411 */,
-/* 412 */,
-/* 413 */
-/***/ (function(module) {
+function rmkids (p, options, cb) {
+ assert(p)
+ assert(options)
+ assert(typeof cb === 'function')
-module.exports = require("stream");
+ options.readdir(p, (er, files) => {
+ if (er) return cb(er)
-/***/ }),
-/* 414 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+ let n = files.length
+ let errState
-"use strict";
+ if (n === 0) return options.rmdir(p, cb)
-var cr = Object.create;
-if (cr) {
- var callerCache = cr(null);
- var getterCache = cr(null);
- callerCache[" size"] = getterCache[" size"] = 0;
+ files.forEach(f => {
+ rimraf(path.join(p, f), options, er => {
+ if (errState) {
+ return
+ }
+ if (er) return cb(errState = er)
+ if (--n === 0) {
+ options.rmdir(p, cb)
+ }
+ })
+ })
+ })
}
-module.exports = function(Promise) {
-var util = __webpack_require__(248);
-var canEvaluate = util.canEvaluate;
-var isIdentifier = util.isIdentifier;
+// this looks simpler, and is strictly *faster*, but will
+// tie up the JavaScript thread and fail on excessively
+// deep directory trees.
+function rimrafSync (p, options) {
+ let st
-var getMethodCaller;
-var getGetter;
-if (true) {
-var makeMethodCaller = function (methodName) {
- return new Function("ensureMethod", " \n\
- return function(obj) { \n\
- 'use strict' \n\
- var len = this.length; \n\
- ensureMethod(obj, 'methodName'); \n\
- switch(len) { \n\
- case 1: return obj.methodName(this[0]); \n\
- case 2: return obj.methodName(this[0], this[1]); \n\
- case 3: return obj.methodName(this[0], this[1], this[2]); \n\
- case 0: return obj.methodName(); \n\
- default: \n\
- return obj.methodName.apply(obj, this); \n\
- } \n\
- }; \n\
- ".replace(/methodName/g, methodName))(ensureMethod);
-};
+ options = options || {}
+ defaults(options)
-var makeGetter = function (propertyName) {
- return new Function("obj", " \n\
- 'use strict'; \n\
- return obj.propertyName; \n\
- ".replace("propertyName", propertyName));
-};
+ assert(p, 'rimraf: missing path')
+ assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')
+ assert(options, 'rimraf: missing options')
+ assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')
-var getCompiled = function(name, compiler, cache) {
- var ret = cache[name];
- if (typeof ret !== "function") {
- if (!isIdentifier(name)) {
- return null;
- }
- ret = compiler(name);
- cache[name] = ret;
- cache[" size"]++;
- if (cache[" size"] > 512) {
- var keys = Object.keys(cache);
- for (var i = 0; i < 256; ++i) delete cache[keys[i]];
- cache[" size"] = keys.length - 256;
- }
+ try {
+ st = options.lstatSync(p)
+ } catch (er) {
+ if (er.code === 'ENOENT') {
+ return
}
- return ret;
-};
-getMethodCaller = function(name) {
- return getCompiled(name, makeMethodCaller, callerCache);
-};
+ // Windows can EPERM on stat. Life is suffering.
+ if (er.code === 'EPERM' && isWindows) {
+ fixWinEPERMSync(p, options, er)
+ }
+ }
-getGetter = function(name) {
- return getCompiled(name, makeGetter, getterCache);
-};
+ try {
+ // sunos lets the root user unlink directories, which is... weird.
+ if (st && st.isDirectory()) {
+ rmdirSync(p, options, null)
+ } else {
+ options.unlinkSync(p)
+ }
+ } catch (er) {
+ if (er.code === 'ENOENT') {
+ return
+ } else if (er.code === 'EPERM') {
+ return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
+ } else if (er.code !== 'EISDIR') {
+ throw er
+ }
+ rmdirSync(p, options, er)
+ }
}
-function ensureMethod(obj, methodName) {
- var fn;
- if (obj != null) fn = obj[methodName];
- if (typeof fn !== "function") {
- var message = "Object " + util.classString(obj) + " has no method '" +
- util.toString(methodName) + "'";
- throw new Promise.TypeError(message);
+function rmdirSync (p, options, originalEr) {
+ assert(p)
+ assert(options)
+
+ try {
+ options.rmdirSync(p)
+ } catch (er) {
+ if (er.code === 'ENOTDIR') {
+ throw originalEr
+ } else if (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM') {
+ rmkidsSync(p, options)
+ } else if (er.code !== 'ENOENT') {
+ throw er
}
- return fn;
+ }
}
-function caller(obj) {
- var methodName = this.pop();
- var fn = ensureMethod(obj, methodName);
- return fn.apply(obj, this);
-}
-Promise.prototype.call = function (methodName) {
- var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];};
- if (true) {
- if (canEvaluate) {
- var maybeCaller = getMethodCaller(methodName);
- if (maybeCaller !== null) {
- return this._then(
- maybeCaller, undefined, undefined, args, undefined);
- }
- }
- }
- args.push(methodName);
- return this._then(caller, undefined, undefined, args, undefined);
-};
+function rmkidsSync (p, options) {
+ assert(p)
+ assert(options)
+ options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options))
-function namedGetter(obj) {
- return obj[this];
-}
-function indexedGetter(obj) {
- var index = +this;
- if (index < 0) index = Math.max(0, index + obj.length);
- return obj[index];
+ if (isWindows) {
+ // We only end up here once we got ENOTEMPTY at least once, and
+ // at this point, we are guaranteed to have removed all the kids.
+ // So, we know that it won't be ENOENT or ENOTDIR or anything else.
+ // try really hard to delete stuff on windows, because it has a
+ // PROFOUNDLY annoying habit of not closing handles promptly when
+ // files are deleted, resulting in spurious ENOTEMPTY errors.
+ const startTime = Date.now()
+ do {
+ try {
+ const ret = options.rmdirSync(p, options)
+ return ret
+ } catch {}
+ } while (Date.now() - startTime < 500) // give up after 500ms
+ } else {
+ const ret = options.rmdirSync(p, options)
+ return ret
+ }
}
-Promise.prototype.get = function (propertyName) {
- var isIndex = (typeof propertyName === "number");
- var getter;
- if (!isIndex) {
- if (canEvaluate) {
- var maybeGetter = getGetter(propertyName);
- getter = maybeGetter !== null ? maybeGetter : namedGetter;
- } else {
- getter = namedGetter;
- }
- } else {
- getter = indexedGetter;
- }
- return this._then(getter, undefined, undefined, propertyName, undefined);
-};
-};
-
-/***/ }),
-/* 415 */,
-/* 416 */,
-/* 417 */
-/***/ (function(module) {
+module.exports = rimraf
+rimraf.sync = rimrafSync
-module.exports = require("crypto");
/***/ }),
-/* 418 */,
-/* 419 */,
-/* 420 */,
-/* 421 */,
-/* 422 */,
-/* 423 */,
-/* 424 */,
-/* 425 */,
-/* 426 */,
-/* 427 */
+
+/***/ 476:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
-// Older verions of Node.js might not have `util.getSystemErrorName()`.
-// In that case, fall back to a deprecated internal.
-const util = __webpack_require__(669);
+var util = __webpack_require__(248);
+var schedule;
+var noAsyncScheduler = function() {
+ throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a");
+};
+var NativePromise = util.getNativePromise();
+if (util.isNode && typeof MutationObserver === "undefined") {
+ var GlobalSetImmediate = global.setImmediate;
+ var ProcessNextTick = process.nextTick;
+ schedule = util.isRecentNode
+ ? function(fn) { GlobalSetImmediate.call(global, fn); }
+ : function(fn) { ProcessNextTick.call(process, fn); };
+} else if (typeof NativePromise === "function" &&
+ typeof NativePromise.resolve === "function") {
+ var nativePromise = NativePromise.resolve();
+ schedule = function(fn) {
+ nativePromise.then(fn);
+ };
+} else if ((typeof MutationObserver !== "undefined") &&
+ !(typeof window !== "undefined" &&
+ window.navigator &&
+ (window.navigator.standalone || window.cordova)) &&
+ ("classList" in document.documentElement)) {
+ schedule = (function() {
+ var div = document.createElement("div");
+ var opts = {attributes: true};
+ var toggleScheduled = false;
+ var div2 = document.createElement("div");
+ var o2 = new MutationObserver(function() {
+ div.classList.toggle("foo");
+ toggleScheduled = false;
+ });
+ o2.observe(div2, opts);
-let uv;
+ var scheduleToggle = function() {
+ if (toggleScheduled) return;
+ toggleScheduled = true;
+ div2.classList.toggle("foo");
+ };
-if (typeof util.getSystemErrorName === 'function') {
- module.exports = util.getSystemErrorName;
+ return function schedule(fn) {
+ var o = new MutationObserver(function() {
+ o.disconnect();
+ fn();
+ });
+ o.observe(div, opts);
+ scheduleToggle();
+ };
+ })();
+} else if (typeof setImmediate !== "undefined") {
+ schedule = function (fn) {
+ setImmediate(fn);
+ };
+} else if (typeof setTimeout !== "undefined") {
+ schedule = function (fn) {
+ setTimeout(fn, 0);
+ };
} else {
- try {
- uv = process.binding('uv');
+ schedule = noAsyncScheduler;
+}
+module.exports = schedule;
- if (typeof uv.errname !== 'function') {
- throw new TypeError('uv.errname is not a function');
- }
- } catch (err) {
- console.error('execa/lib/errname: unable to establish process.binding(\'uv\')', err);
- uv = null;
- }
- module.exports = code => errname(uv, code);
-}
+/***/ }),
-// Used for testing the fallback behavior
-module.exports.__test__ = errname;
+/***/ 482:
+/***/ (function(module, __unusedexports, __webpack_require__) {
-function errname(uv, code) {
- if (uv) {
- return uv.errname(code);
- }
+/* module decorator */ module = __webpack_require__.nmd(module);
+//! moment.js
+//! version : 2.29.1
+//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
+//! license : MIT
+//! momentjs.com
- if (!(code < 0)) {
- throw new Error('err >= 0');
- }
+;(function (global, factory) {
+ true ? module.exports = factory() :
+ undefined
+}(this, (function () { 'use strict';
- return `Unknown system error ${code}`;
-}
+ var hookCallback;
+ function hooks() {
+ return hookCallback.apply(null, arguments);
+ }
+ // This is done to register the method called with moment()
+ // without creating circular dependencies.
+ function setHookCallback(callback) {
+ hookCallback = callback;
+ }
-/***/ }),
-/* 428 */,
-/* 429 */,
-/* 430 */,
-/* 431 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
+ function isArray(input) {
+ return (
+ input instanceof Array ||
+ Object.prototype.toString.call(input) === '[object Array]'
+ );
+ }
-"use strict";
+ function isObject(input) {
+ // IE8 will treat undefined and null as object if it wasn't for
+ // input != null
+ return (
+ input != null &&
+ Object.prototype.toString.call(input) === '[object Object]'
+ );
+ }
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
- result["default"] = mod;
- return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const os = __importStar(__webpack_require__(87));
-/**
- * Commands
- *
- * Command Format:
- * ::name key=value,key=value::message
- *
- * Examples:
- * ::warning::This is the message
- * ::set-env name=MY_VAR::some value
- */
-function issueCommand(command, properties, message) {
- const cmd = new Command(command, properties, message);
- process.stdout.write(cmd.toString() + os.EOL);
-}
-exports.issueCommand = issueCommand;
-function issue(name, message = '') {
- issueCommand(name, {}, message);
-}
-exports.issue = issue;
-const CMD_STRING = '::';
-class Command {
- constructor(command, properties, message) {
- if (!command) {
- command = 'missing.command';
- }
- this.command = command;
- this.properties = properties;
- this.message = message;
+ function hasOwnProp(a, b) {
+ return Object.prototype.hasOwnProperty.call(a, b);
}
- toString() {
- let cmdStr = CMD_STRING + this.command;
- if (this.properties && Object.keys(this.properties).length > 0) {
- cmdStr += ' ';
- let first = true;
- for (const key in this.properties) {
- if (this.properties.hasOwnProperty(key)) {
- const val = this.properties[key];
- if (val) {
- if (first) {
- first = false;
- }
- else {
- cmdStr += ',';
- }
- cmdStr += `${key}=${escapeProperty(val)}`;
- }
+
+ function isObjectEmpty(obj) {
+ if (Object.getOwnPropertyNames) {
+ return Object.getOwnPropertyNames(obj).length === 0;
+ } else {
+ var k;
+ for (k in obj) {
+ if (hasOwnProp(obj, k)) {
+ return false;
}
}
+ return true;
}
- cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
- return cmdStr;
- }
-}
-/**
- * Sanitizes an input into a string so it can be passed into issueCommand safely
- * @param input input to sanitize into a string
- */
-function toCommandValue(input) {
- if (input === null || input === undefined) {
- return '';
}
- else if (typeof input === 'string' || input instanceof String) {
- return input;
- }
- return JSON.stringify(input);
-}
-exports.toCommandValue = toCommandValue;
-function escapeData(s) {
- return toCommandValue(s)
- .replace(/%/g, '%25')
- .replace(/\r/g, '%0D')
- .replace(/\n/g, '%0A');
-}
-function escapeProperty(s) {
- return toCommandValue(s)
- .replace(/%/g, '%25')
- .replace(/\r/g, '%0D')
- .replace(/\n/g, '%0A')
- .replace(/:/g, '%3A')
- .replace(/,/g, '%2C');
-}
-//# sourceMappingURL=command.js.map
-
-/***/ }),
-/* 432 */,
-/* 433 */,
-/* 434 */,
-/* 435 */,
-/* 436 */,
-/* 437 */,
-/* 438 */,
-/* 439 */,
-/* 440 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-"use strict";
+ function isUndefined(input) {
+ return input === void 0;
+ }
-var old;
-if (typeof Promise !== "undefined") old = Promise;
-function noConflict() {
- try { if (Promise === bluebird) Promise = old; }
- catch (e) {}
- return bluebird;
-}
-var bluebird = __webpack_require__(983)();
-bluebird.noConflict = noConflict;
-module.exports = bluebird;
+ function isNumber(input) {
+ return (
+ typeof input === 'number' ||
+ Object.prototype.toString.call(input) === '[object Number]'
+ );
+ }
+ function isDate(input) {
+ return (
+ input instanceof Date ||
+ Object.prototype.toString.call(input) === '[object Date]'
+ );
+ }
-/***/ }),
-/* 441 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+ function map(arr, fn) {
+ var res = [],
+ i;
+ for (i = 0; i < arr.length; ++i) {
+ res.push(fn(arr[i], i));
+ }
+ return res;
+ }
-"use strict";
+ function extend(a, b) {
+ for (var i in b) {
+ if (hasOwnProp(b, i)) {
+ a[i] = b[i];
+ }
+ }
+ if (hasOwnProp(b, 'toString')) {
+ a.toString = b.toString;
+ }
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+ if (hasOwnProp(b, 'valueOf')) {
+ a.valueOf = b.valueOf;
+ }
-var _bluebird = __webpack_require__(440);
+ return a;
+ }
-var _bluebird2 = _interopRequireDefault(_bluebird);
+ function createUTC(input, format, locale, strict) {
+ return createLocalOrUTC(input, format, locale, strict, true).utc();
+ }
-var _path = __webpack_require__(622);
+ function defaultParsingFlags() {
+ // We need to deep clone this object.
+ return {
+ empty: false,
+ unusedTokens: [],
+ unusedInput: [],
+ overflow: -2,
+ charsLeftOver: 0,
+ nullInput: false,
+ invalidEra: null,
+ invalidMonth: null,
+ invalidFormat: false,
+ userInvalidated: false,
+ iso: false,
+ parsedDateParts: [],
+ era: null,
+ meridiem: null,
+ rfc2822: false,
+ weekdayMismatch: false,
+ };
+ }
-var _path2 = _interopRequireDefault(_path);
+ function getParsingFlags(m) {
+ if (m._pf == null) {
+ m._pf = defaultParsingFlags();
+ }
+ return m._pf;
+ }
-var _minimatch = __webpack_require__(571);
+ var some;
+ if (Array.prototype.some) {
+ some = Array.prototype.some;
+ } else {
+ some = function (fun) {
+ var t = Object(this),
+ len = t.length >>> 0,
+ i;
-var _minimatch2 = _interopRequireDefault(_minimatch);
+ for (i = 0; i < len; i++) {
+ if (i in t && fun.call(this, t[i], i, t)) {
+ return true;
+ }
+ }
-var _fsp = __webpack_require__(981);
+ return false;
+ };
+ }
-var _fsp2 = _interopRequireDefault(_fsp);
+ function isValid(m) {
+ if (m._isValid == null) {
+ var flags = getParsingFlags(m),
+ parsedParts = some.call(flags.parsedDateParts, function (i) {
+ return i != null;
+ }),
+ isNowValid =
+ !isNaN(m._d.getTime()) &&
+ flags.overflow < 0 &&
+ !flags.empty &&
+ !flags.invalidEra &&
+ !flags.invalidMonth &&
+ !flags.invalidWeekday &&
+ !flags.weekdayMismatch &&
+ !flags.nullInput &&
+ !flags.invalidFormat &&
+ !flags.userInvalidated &&
+ (!flags.meridiem || (flags.meridiem && parsedParts));
-var _lock = __webpack_require__(859);
+ if (m._strict) {
+ isNowValid =
+ isNowValid &&
+ flags.charsLeftOver === 0 &&
+ flags.unusedTokens.length === 0 &&
+ flags.bigHour === undefined;
+ }
-var _lock2 = _interopRequireDefault(_lock);
+ if (Object.isFrozen == null || !Object.isFrozen(m)) {
+ m._isValid = isNowValid;
+ } else {
+ return isNowValid;
+ }
+ }
+ return m._isValid;
+ }
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+ function createInvalid(flags) {
+ var m = createUTC(NaN);
+ if (flags != null) {
+ extend(getParsingFlags(m), flags);
+ } else {
+ getParsingFlags(m).userInvalidated = true;
+ }
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+ return m;
+ }
-function joinWith(dir) {
- return function (file) {
- return _path2.default.join(dir, file);
- };
-}
+ // Plugins that add properties should also add the key here (null value),
+ // so we can properly clone ourselves.
+ var momentProperties = (hooks.momentProperties = []),
+ updateInProgress = false;
-/**
- * @class
- */
+ function copyConfig(to, from) {
+ var i, prop, val;
-var File = function () {
- function File(pathname) {
- _classCallCheck(this, File);
+ if (!isUndefined(from._isAMomentObject)) {
+ to._isAMomentObject = from._isAMomentObject;
+ }
+ if (!isUndefined(from._i)) {
+ to._i = from._i;
+ }
+ if (!isUndefined(from._f)) {
+ to._f = from._f;
+ }
+ if (!isUndefined(from._l)) {
+ to._l = from._l;
+ }
+ if (!isUndefined(from._strict)) {
+ to._strict = from._strict;
+ }
+ if (!isUndefined(from._tzm)) {
+ to._tzm = from._tzm;
+ }
+ if (!isUndefined(from._isUTC)) {
+ to._isUTC = from._isUTC;
+ }
+ if (!isUndefined(from._offset)) {
+ to._offset = from._offset;
+ }
+ if (!isUndefined(from._pf)) {
+ to._pf = getParsingFlags(from);
+ }
+ if (!isUndefined(from._locale)) {
+ to._locale = from._locale;
+ }
- this._dir = process.cwd();
- this._pathname = pathname;
- }
+ if (momentProperties.length > 0) {
+ for (i = 0; i < momentProperties.length; i++) {
+ prop = momentProperties[i];
+ val = from[prop];
+ if (!isUndefined(val)) {
+ to[prop] = val;
+ }
+ }
+ }
- _createClass(File, [{
- key: '_getStatsSync',
- value: function _getStatsSync() {
- return _fsp2.default.statSync(this._pathname);
- }
- }, {
- key: '_getStats',
- value: function _getStats() {
- return _fsp2.default.statAsync(this._pathname);
- }
- }, {
- key: '_isHiddenFile',
- value: function _isHiddenFile() {
- return (/^\./.test(_path2.default.basename(this._pathname))
- );
- }
- }, {
- key: '_isHiddenDirectory',
- value: function _isHiddenDirectory() {
- return (/(^|\/)\.[^\/\.]/g.test(this._pathname)
- );
- }
- }, {
- key: '_depth',
- value: function _depth(pathname) {
- return pathname.split(_path2.default.sep).length - 1;
+ return to;
}
- }, {
- key: '_access',
- value: function _access(permission) {
- var hasPermission = true;
- return _fsp2.default.accessAsync(this._pathname, permission).catch(function () {
- return hasPermission = false;
- }).then(function () {
- return hasPermission;
- });
- }
- }, {
- key: '_checkAsyncStats',
- value: function _checkAsyncStats(type) {
- return this._getStats().then(function (stats) {
- return stats[type]();
- });
+ // Moment prototype object
+ function Moment(config) {
+ copyConfig(this, config);
+ this._d = new Date(config._d != null ? config._d.getTime() : NaN);
+ if (!this.isValid()) {
+ this._d = new Date(NaN);
+ }
+ // Prevent infinite loop in case updateOffset creates new moment
+ // objects.
+ if (updateInProgress === false) {
+ updateInProgress = true;
+ hooks.updateOffset(this);
+ updateInProgress = false;
+ }
}
- /**
- * Synchronously determine if pathname is a directory
- *
- * @instance
- * @memberOf File
- * @method
- * isDirectorySync
- * @return boolean
- * @example
- * import File from 'file-js';
- *
- * const file = File.create('myDirectory');
- * if (file.isDirectorySync()) {
- * console.log('processing directory');
- * }
- */
+ function isMoment(obj) {
+ return (
+ obj instanceof Moment || (obj != null && obj._isAMomentObject != null)
+ );
+ }
- }, {
- key: 'isDirectorySync',
- value: function isDirectorySync() {
- return this._getStatsSync().isDirectory();
+ function warn(msg) {
+ if (
+ hooks.suppressDeprecationWarnings === false &&
+ typeof console !== 'undefined' &&
+ console.warn
+ ) {
+ console.warn('Deprecation warning: ' + msg);
+ }
}
- /**
- * Synchronously determine if pathname is a socket
- *
- * @instance
- * @memberOf File
- * @method
- * isSocketSync
- * @return boolean
- * @example
- * import File from 'file-js';
- *
- * const file = File.create('mysocket');
- * if (file.isSocketSync()) {
- * console.log('processing socket');
- * }
- */
+ function deprecate(msg, fn) {
+ var firstTime = true;
- }, {
- key: 'isSocketSync',
- value: function isSocketSync() {
- return this._getStatsSync().isSocket();
+ return extend(function () {
+ if (hooks.deprecationHandler != null) {
+ hooks.deprecationHandler(null, msg);
+ }
+ if (firstTime) {
+ var args = [],
+ arg,
+ i,
+ key;
+ for (i = 0; i < arguments.length; i++) {
+ arg = '';
+ if (typeof arguments[i] === 'object') {
+ arg += '\n[' + i + '] ';
+ for (key in arguments[0]) {
+ if (hasOwnProp(arguments[0], key)) {
+ arg += key + ': ' + arguments[0][key] + ', ';
+ }
+ }
+ arg = arg.slice(0, -2); // Remove trailing comma and space
+ } else {
+ arg = arguments[i];
+ }
+ args.push(arg);
+ }
+ warn(
+ msg +
+ '\nArguments: ' +
+ Array.prototype.slice.call(args).join('') +
+ '\n' +
+ new Error().stack
+ );
+ firstTime = false;
+ }
+ return fn.apply(this, arguments);
+ }, fn);
}
- /**
- * Synchronously determine if pathname is a file
- *
- * @instance
- * @memberOf File
- * @method
- * isFileSync
- * @return boolean
- * @example
- * import File from 'file-js';
- *
- * const file = File.create('myDirectory');
- * if (file.isFileSync()) {
- * console.log('processing file');
- * }
- */
+ var deprecations = {};
- }, {
- key: 'isFileSync',
- value: function isFileSync() {
- return this._getStatsSync().isFile();
+ function deprecateSimple(name, msg) {
+ if (hooks.deprecationHandler != null) {
+ hooks.deprecationHandler(name, msg);
+ }
+ if (!deprecations[name]) {
+ warn(msg);
+ deprecations[name] = true;
+ }
}
- /**
- * Determine if pathname is a directory
- *
- * @instance
- * @memberOf File
- * @method
- * isDirectory
- * @return If the Promise fulfils, the fulfilment value is
- * a boolean indicating if the pathname is a directory
- * @example
- * import File from 'file-js';
- *
- * const file = File.create('myDirectory');
- * file.isDirectory((isDirectory) => {
- * console.log(isDirectory);
- * });
- *
- */
+ hooks.suppressDeprecationWarnings = false;
+ hooks.deprecationHandler = null;
- }, {
- key: 'isDirectory',
- value: function isDirectory() {
- return this._checkAsyncStats('isDirectory');
+ function isFunction(input) {
+ return (
+ (typeof Function !== 'undefined' && input instanceof Function) ||
+ Object.prototype.toString.call(input) === '[object Function]'
+ );
}
- /**
- * Determine if pathname is a Socket
- *
- * @instance
- * @memberOf File
- * @method
- * isSocket
- * @return If the Promise fulfils, the fulfilment value is
- * a boolean indicating if the pathname is a Socket
- * @example
- * import File from 'file-js';
- *
- * const file = File.create('mySocket');
- * file.isSocket((isSocket) => {
- * console.log(isSocket);
- * });
- *
- */
-
- }, {
- key: 'isSocket',
- value: function isSocket() {
- return this._checkAsyncStats('isSocket');
+ function set(config) {
+ var prop, i;
+ for (i in config) {
+ if (hasOwnProp(config, i)) {
+ prop = config[i];
+ if (isFunction(prop)) {
+ this[i] = prop;
+ } else {
+ this['_' + i] = prop;
+ }
+ }
+ }
+ this._config = config;
+ // Lenient ordinal parsing accepts just a number in addition to
+ // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
+ // TODO: Remove "ordinalParse" fallback in next major release.
+ this._dayOfMonthOrdinalParseLenient = new RegExp(
+ (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
+ '|' +
+ /\d{1,2}/.source
+ );
}
- /**
- * Determine if pathname is a file
- *
- * @instance
- * @memberOf File
- * @method
- * isDirectory
- * @return If the Promise fulfils, the fulfilment value is
- * a boolean indicating if the pathname is a file
- * @example
- * import File from 'file-js';
- *
- * const file = File.create('myDirectory');
- * file.isFile((isFile) => {
- * console.log(isFile);
- * });
- */
+ function mergeConfigs(parentConfig, childConfig) {
+ var res = extend({}, parentConfig),
+ prop;
+ for (prop in childConfig) {
+ if (hasOwnProp(childConfig, prop)) {
+ if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
+ res[prop] = {};
+ extend(res[prop], parentConfig[prop]);
+ extend(res[prop], childConfig[prop]);
+ } else if (childConfig[prop] != null) {
+ res[prop] = childConfig[prop];
+ } else {
+ delete res[prop];
+ }
+ }
+ }
+ for (prop in parentConfig) {
+ if (
+ hasOwnProp(parentConfig, prop) &&
+ !hasOwnProp(childConfig, prop) &&
+ isObject(parentConfig[prop])
+ ) {
+ // make sure changes to properties don't modify parent config
+ res[prop] = extend({}, res[prop]);
+ }
+ }
+ return res;
+ }
- }, {
- key: 'isFile',
- value: function isFile() {
- return this._checkAsyncStats('isFile');
+ function Locale(config) {
+ if (config != null) {
+ this.set(config);
+ }
}
- /**
- * Synchronously determine if pathname is a hidden file
- *
- * @instance
- * @memberOf File
- * @method
- * isHiddenSync
- * @return boolean
- * @example
- * import File from 'file-js';
- *
- * const file = File.create('./myHiddenFile');
- * if (file.isHiddenSync()) {
- * console.log('processing hidden file');
- * }
- */
+ var keys;
- }, {
- key: 'isHiddenSync',
- value: function isHiddenSync() {
- if (!this.isDirectorySync()) {
- return this._isHiddenFile();
- }
- return this._isHiddenDirectory();
+ if (Object.keys) {
+ keys = Object.keys;
+ } else {
+ keys = function (obj) {
+ var i,
+ res = [];
+ for (i in obj) {
+ if (hasOwnProp(obj, i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ };
}
- /**
- * Determine if pathname is a file
- *
- * @instance
- * @memberOf File
- * @method
- * isDirectory
- * @return If the Promise fulfils, the fulfilment value is
- * a boolean indicating if the pathname is a file
- * @example
- * import File from 'file-js';
- *
- * const file = File.create('myDirectory');
- * file.isFile((isFile) => {
- * console.log(isFile);
- * });
- */
-
- }, {
- key: 'isHidden',
- value: function isHidden() {
- var _this = this;
+ var defaultCalendar = {
+ sameDay: '[Today at] LT',
+ nextDay: '[Tomorrow at] LT',
+ nextWeek: 'dddd [at] LT',
+ lastDay: '[Yesterday at] LT',
+ lastWeek: '[Last] dddd [at] LT',
+ sameElse: 'L',
+ };
- this.isDirectory().then(function (isDirectory) {
- if (!isDirectory) {
- return _this._isHiddenFile();
- }
- return _this._isHiddenDirectory();
- });
+ function calendar(key, mom, now) {
+ var output = this._calendar[key] || this._calendar['sameElse'];
+ return isFunction(output) ? output.call(mom, now) : output;
}
- /**
- * Renames the abstract pathname
- *
- * @instance
- * @memberOf File
- * @param {string|File} pathname - pathname either as a string or File instance
- * @method
- * rename
- * @return If the Promise fulfils, the fulfilment value is undefined
- * @example
- * import File from 'file-js';
- *
- * const original = File.create('fileA');
- * const renameTo = File.create('fileB');
- * original
- * .rename(renameTo)
- * .then(() => {
- * console.log(original.getName()) // prints fileA
- * });
- */
+ function zeroFill(number, targetLength, forceSign) {
+ var absNumber = '' + Math.abs(number),
+ zerosToFill = targetLength - absNumber.length,
+ sign = number >= 0;
+ return (
+ (sign ? (forceSign ? '+' : '') : '-') +
+ Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +
+ absNumber
+ );
+ }
- }, {
- key: 'rename',
- value: function rename(pathname) {
- var _this2 = this;
+ var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
+ localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
+ formatFunctions = {},
+ formatTokenFunctions = {};
- var newname = pathname instanceof File ? pathname.getName() : pathname;
+ // token: 'M'
+ // padded: ['MM', 2]
+ // ordinal: 'Mo'
+ // callback: function () { this.month() + 1 }
+ function addFormatToken(token, padded, ordinal, callback) {
+ var func = callback;
+ if (typeof callback === 'string') {
+ func = function () {
+ return this[callback]();
+ };
+ }
+ if (token) {
+ formatTokenFunctions[token] = func;
+ }
+ if (padded) {
+ formatTokenFunctions[padded[0]] = function () {
+ return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
+ };
+ }
+ if (ordinal) {
+ formatTokenFunctions[ordinal] = function () {
+ return this.localeData().ordinal(
+ func.apply(this, arguments),
+ token
+ );
+ };
+ }
+ }
- return _fsp2.default.renameAsync(this._pathname, newname).then(function () {
- _this2._pathname = newname;
- });
+ function removeFormattingTokens(input) {
+ if (input.match(/\[[\s\S]/)) {
+ return input.replace(/^\[|\]$/g, '');
+ }
+ return input.replace(/\\/g, '');
}
- /**
- * Synchronously get list of files, if pathname is a directory
- *
- * @instance
- * @memberOf File
- * @method
- * getListSync
- * @return array of files
- * @example
- * import File from 'file-js';
- *
- * const file = File.create('./myHiddenFile');
- * const files = file.getListSync();
- * console.log(files);
- */
+ function makeFormatFunction(format) {
+ var array = format.match(formattingTokens),
+ i,
+ length;
- }, {
- key: 'getListSync',
- value: function getListSync() {
- var _this3 = this;
+ for (i = 0, length = array.length; i < length; i++) {
+ if (formatTokenFunctions[array[i]]) {
+ array[i] = formatTokenFunctions[array[i]];
+ } else {
+ array[i] = removeFormattingTokens(array[i]);
+ }
+ }
- if (this.isDirectorySync()) {
- return _fsp2.default.readdirSync(this._pathname).map(function (file) {
- return _path2.default.join(_this3._pathname, file);
- });
- }
- return null;
+ return function (mom) {
+ var output = '',
+ i;
+ for (i = 0; i < length; i++) {
+ output += isFunction(array[i])
+ ? array[i].call(mom, format)
+ : array[i];
+ }
+ return output;
+ };
}
- /**
- * Get list of file objects, if pathname is a directory
- *
- * @instance
- * @memberOf File
- * @method
- * getList
- * @param {string=} glob - file glob
- * @return a promise. If the Promise fulfils, the fulfilment value is
- * a list of pathnames
- * @example
- * import File from 'file-js';
- *
- * // get all json files
- * const file = File.create('./myDirectory');
- * file.getFiles('*.json')
- * .then((jsonFiles) => {
- * console.log(jsonFiles);
- * });
- */
+ // format date using native date object
+ function formatMoment(m, format) {
+ if (!m.isValid()) {
+ return m.localeData().invalidDate();
+ }
- }, {
- key: 'getList',
- value: function getList(glob) {
- return this.getFiles(glob).then(function (list) {
- if (!list) return [];
+ format = expandFormat(format, m.localeData());
+ formatFunctions[format] =
+ formatFunctions[format] || makeFormatFunction(format);
- return list.map(function (pathname) {
- return pathname.getName();
- });
- });
+ return formatFunctions[format](m);
}
- /**
- * Get list of file objects, if pathname is a directory
- *
- * @instance
- * @memberOf File
- * @param {string=} glob - file glob
- * @method
- * getFiles
- * @return a promise. If the Promise fulfils, the fulfilment value is
- * a list of File objects
- * @example
- * import File from 'file-js';
- *
- * // get last modified time of all json files
- * const file = File.create('./myDirectory');
- * file.getFiles('*.json')
- * .then((jsonFiles) => {
- * console.log(jsonFiles.map(file => file.lastModifiedSync()));
- * });
- */
-
- }, {
- key: 'getFiles',
- value: function getFiles(glob) {
- if (!this.isDirectory()) return _bluebird2.default.resolve(null);
-
- var results = _fsp2.default.readdirAsync(this._pathname).map(joinWith(this._pathname)).then(function (list) {
- if (!list) return _bluebird2.default.resolve(null);
+ function expandFormat(format, locale) {
+ var i = 5;
- return list.map(function (pathname) {
- return File.create(pathname);
- });
- });
+ function replaceLongDateFormatTokens(input) {
+ return locale.longDateFormat(input) || input;
+ }
- if (glob) return results.filter(function (file) {
- return file.isMatch(glob);
- });
+ localFormattingTokens.lastIndex = 0;
+ while (i >= 0 && localFormattingTokens.test(format)) {
+ format = format.replace(
+ localFormattingTokens,
+ replaceLongDateFormatTokens
+ );
+ localFormattingTokens.lastIndex = 0;
+ i -= 1;
+ }
- return results;
+ return format;
}
- /**
- * Synchronously get list of file objects, if pathname is a directory
- *
- * @instance
- * @memberOf File
- * @method
- * getFileSync
- * @return array of files
- * @example
- * import File from 'file-js';
- *
- * const file = File.create('./myHiddenFile');
- * const files = file.getFileSync();
- * console.log(files);
- */
+ var defaultLongDateFormat = {
+ LTS: 'h:mm:ss A',
+ LT: 'h:mm A',
+ L: 'MM/DD/YYYY',
+ LL: 'MMMM D, YYYY',
+ LLL: 'MMMM D, YYYY h:mm A',
+ LLLL: 'dddd, MMMM D, YYYY h:mm A',
+ };
- }, {
- key: 'getFilesSync',
- value: function getFilesSync(glob) {
- if (this.isDirectorySync()) {
- var files = this.getListSync().map(function (pathname) {
- return File.create(pathname);
- });
+ function longDateFormat(key) {
+ var format = this._longDateFormat[key],
+ formatUpper = this._longDateFormat[key.toUpperCase()];
- if (glob) return files.filter(function (file) {
- return file.isMatch(glob);
- });
+ if (format || !formatUpper) {
+ return format;
+ }
- return files;
- }
- return null;
+ this._longDateFormat[key] = formatUpper
+ .match(formattingTokens)
+ .map(function (tok) {
+ if (
+ tok === 'MMMM' ||
+ tok === 'MM' ||
+ tok === 'DD' ||
+ tok === 'dddd'
+ ) {
+ return tok.slice(1);
+ }
+ return tok;
+ })
+ .join('');
+
+ return this._longDateFormat[key];
}
- /**
- * Synchronously caculate the depth of a directory
- *
- * @instance
- * @memberOf File
- * @method
- * getDepthSync
- * @return boolean
- * @example
- * import File from 'file-js';
- *
- * const file = File.create('myDirectory');
- * console.log(file.getDepthSync());
- */
+ var defaultInvalidDate = 'Invalid date';
- }, {
- key: 'getDepthSync',
- value: function getDepthSync() {
- if (!this.isDirectorySync()) {
- return this._depth(_path2.default.dirname(this._pathname));
- }
- return this._depth(this._pathname);
+ function invalidDate() {
+ return this._invalidDate;
}
- /**
- * Returns the pathname as a string
- *
- * @instance
- * @memberOf File
- * @method
- * getName
- * @return String
- * @example
- * import File from 'file-js';
- *
- * const file = File.create('myDirectory');
- * console.log(file.getName());
- */
+ var defaultOrdinal = '%d',
+ defaultDayOfMonthOrdinalParse = /\d{1,2}/;
- }, {
- key: 'getName',
- value: function getName() {
- return this._pathname;
+ function ordinal(number) {
+ return this._ordinal.replace('%d', number);
}
- /**
- * Returns the absolutePath
- *
- * @instance
- * @memberOf File
- * @method
- * getAbsolutePath
- * @return String
- * @example
- * import File from 'file-js';
- *
- * const file = File.create('myFile');
- * console.log(file.getAbsolutePath());
- */
+ var defaultRelativeTime = {
+ future: 'in %s',
+ past: '%s ago',
+ s: 'a few seconds',
+ ss: '%d seconds',
+ m: 'a minute',
+ mm: '%d minutes',
+ h: 'an hour',
+ hh: '%d hours',
+ d: 'a day',
+ dd: '%d days',
+ w: 'a week',
+ ww: '%d weeks',
+ M: 'a month',
+ MM: '%d months',
+ y: 'a year',
+ yy: '%d years',
+ };
- }, {
- key: 'getAbsolutePath',
- value: function getAbsolutePath() {
- if (_path2.default.isAbsolute(this._pathname)) {
- return this._pathname;
- }
- return [this._dir, this._pathname].join(_path2.default.sep);
+ function relativeTime(number, withoutSuffix, string, isFuture) {
+ var output = this._relativeTime[string];
+ return isFunction(output)
+ ? output(number, withoutSuffix, string, isFuture)
+ : output.replace(/%d/i, number);
}
- /**
- * Returns the canonical path
- *
- * @instance
- * @memberOf File
- * @method
- * getCanonicalPath
- * @return String
- * @example
- * import File from 'file-js';
- *
- * const file = File.create('myFile');
- * console.log(file.getCanonicalPath());
- */
+ function pastFuture(diff, output) {
+ var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
+ return isFunction(format) ? format(output) : format.replace(/%s/i, output);
+ }
- }, {
- key: 'getCanonicalPath',
- value: function getCanonicalPath() {
- return _path2.default.normalize(this.getAbsolutePath());
+ var aliases = {};
+
+ function addUnitAlias(unit, shorthand) {
+ var lowerCase = unit.toLowerCase();
+ aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
}
- /**
- * Returns the file extension.
- *
- * @instance
- * @memberOf File
- * @method
- * getPathExtension
- * @return String
- * @example
- * import File from 'file-js';
- *
- * const file = File.create('./tmp.sh');
- * console.log(file.getPathExtension()); // sh
- */
-
- }, {
- key: 'getPathExtension',
- value: function getPathExtension() {
- return _path2.default.extname(this._pathname).substring(1);
- }
- }, {
- key: 'isMatch',
- value: function isMatch(globPattern) {
- var glob = new _minimatch2.default.Minimatch(globPattern, {
- matchBase: true
- });
- return glob.match(this._pathname);
- }
- }, {
- key: 'lastModifiedSync',
- value: function lastModifiedSync() {
- return this._getStatsSync()['mtime'];
- }
- }, {
- key: 'lastAccessedSync',
- value: function lastAccessedSync() {
- return this._getStatsSync()['atime'];
- }
- }, {
- key: 'lastChangedSync',
- value: function lastChangedSync() {
- return this._getStatsSync()['ctime'];
- }
- }, {
- key: 'sizeSync',
- value: function sizeSync() {
- return this._getStatsSync().size;
- }
- }, {
- key: 'isWritable',
- value: function isWritable() {
- return this._access(_fsp2.default.W_OK);
- }
- }, {
- key: 'isReadable',
- value: function isReadable() {
- return this._access(_fsp2.default.R_OK);
- }
- }, {
- key: 'isExecutable',
- value: function isExecutable() {
- return this._access(_fsp2.default.X_OK);
- }
- }, {
- key: 'delete',
- value: function _delete() {
- return _fsp2.default.unlinkAsync(this._pathname);
+ function normalizeUnits(units) {
+ return typeof units === 'string'
+ ? aliases[units] || aliases[units.toLowerCase()]
+ : undefined;
}
- /**
- * Locks the pathname
- *
- * @instance
- * @memberOf File
- * @method
- * withLock
- * @return returning value of function
- * @example
- * import File from 'file-js';
- *
- * const file = File.create('myFile');
- * file.with(() => {
- * if (file.isFileSync()) {
- * file.delete();
- * }
- * });
- */
+ function normalizeObjectUnits(inputObject) {
+ var normalizedInput = {},
+ normalizedProp,
+ prop;
- }, {
- key: 'withLock',
- value: function withLock(fn) {
- var _this4 = this;
+ for (prop in inputObject) {
+ if (hasOwnProp(inputObject, prop)) {
+ normalizedProp = normalizeUnits(prop);
+ if (normalizedProp) {
+ normalizedInput[normalizedProp] = inputObject[prop];
+ }
+ }
+ }
- return _lock2.default.lockAsync(this._pathname).then(function () {
- return fn();
- }).finally(function () {
- _lock2.default.unlockAsync(_this4._pathname);
- });
+ return normalizedInput;
}
- /**
- * Static factory method to create an instance of File
- *
- * @static
- * @memberOf File
- * @method
- * create
- * @return File instance
- * @example
- * import File from 'file-js';
- *
- * const file = File.create();
- */
+ var priorities = {};
- }], [{
- key: 'create',
- value: function create(filename) {
- return new File(filename);
+ function addUnitPriority(unit, priority) {
+ priorities[unit] = priority;
}
- }]);
- return File;
-}();
-
-module.exports.create = File.create;
+ function getPrioritizedUnits(unitsObj) {
+ var units = [],
+ u;
+ for (u in unitsObj) {
+ if (hasOwnProp(unitsObj, u)) {
+ units.push({ unit: u, priority: priorities[u] });
+ }
+ }
+ units.sort(function (a, b) {
+ return a.priority - b.priority;
+ });
+ return units;
+ }
-/***/ }),
-/* 442 */,
-/* 443 */,
-/* 444 */,
-/* 445 */,
-/* 446 */,
-/* 447 */,
-/* 448 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
+ function isLeapYear(year) {
+ return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
+ }
-"use strict";
+ function absFloor(number) {
+ if (number < 0) {
+ // -0 -> 0
+ return Math.ceil(number) || 0;
+ } else {
+ return Math.floor(number);
+ }
+ }
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.octokit = void 0;
-const action_1 = __webpack_require__(725);
-const plugin_retry_1 = __webpack_require__(524);
-// plugins for octokit
-const MyOctokit = action_1.Octokit.plugin(plugin_retry_1.retry);
-function octokit(setting) {
- return new MyOctokit({
- auth: setting.authToken,
- baseUrl: setting.apiUrl,
- previews: [
- 'baptiste',
- 'lydian' // update pull request
- ]
- });
-}
-exports.octokit = octokit;
+ function toInt(argumentForCoercion) {
+ var coercedNumber = +argumentForCoercion,
+ value = 0;
+ if (coercedNumber !== 0 && isFinite(coercedNumber)) {
+ value = absFloor(coercedNumber);
+ }
-/***/ }),
-/* 449 */,
-/* 450 */
-/***/ (function(__unusedmodule, exports) {
+ return value;
+ }
-"use strict";
+ function makeGetSet(unit, keepTime) {
+ return function (value) {
+ if (value != null) {
+ set$1(this, unit, value);
+ hooks.updateOffset(this, keepTime);
+ return this;
+ } else {
+ return get(this, unit);
+ }
+ };
+ }
+ function get(mom, unit) {
+ return mom.isValid()
+ ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()
+ : NaN;
+ }
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
+ function set$1(mom, unit, value) {
+ if (mom.isValid() && !isNaN(value)) {
+ if (
+ unit === 'FullYear' &&
+ isLeapYear(mom.year()) &&
+ mom.month() === 1 &&
+ mom.date() === 29
+ ) {
+ value = toInt(value);
+ mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](
+ value,
+ mom.month(),
+ daysInMonth(value, mom.month())
+ );
+ } else {
+ mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
+ }
+ }
+ }
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+ // MOMENTS
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+ function stringGet(units) {
+ units = normalizeUnits(units);
+ if (isFunction(this[units])) {
+ return this[units]();
+ }
+ return this;
+ }
-var UnitNormaliser = function () {
- function UnitNormaliser() {
- _classCallCheck(this, UnitNormaliser);
+ function stringSet(units, value) {
+ if (typeof units === 'object') {
+ units = normalizeObjectUnits(units);
+ var prioritized = getPrioritizedUnits(units),
+ i;
+ for (i = 0; i < prioritized.length; i++) {
+ this[prioritized[i].unit](units[prioritized[i].unit]);
+ }
+ } else {
+ units = normalizeUnits(units);
+ if (isFunction(this[units])) {
+ return this[units](value);
+ }
+ }
+ return this;
+ }
- this.namesVarients = {};
- }
+ var match1 = /\d/, // 0 - 9
+ match2 = /\d\d/, // 00 - 99
+ match3 = /\d{3}/, // 000 - 999
+ match4 = /\d{4}/, // 0000 - 9999
+ match6 = /[+-]?\d{6}/, // -999999 - 999999
+ match1to2 = /\d\d?/, // 0 - 99
+ match3to4 = /\d\d\d\d?/, // 999 - 9999
+ match5to6 = /\d\d\d\d\d\d?/, // 99999 - 999999
+ match1to3 = /\d{1,3}/, // 0 - 999
+ match1to4 = /\d{1,4}/, // 0 - 9999
+ match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999
+ matchUnsigned = /\d+/, // 0 - inf
+ matchSigned = /[+-]?\d+/, // -inf - inf
+ matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
+ matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z
+ matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
+ // any word (or two) characters or numbers including two/three word month in arabic.
+ // includes scottish gaelic two word and hyphenated months
+ matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,
+ regexes;
- _createClass(UnitNormaliser, [{
- key: 'addAlias',
- value: function addAlias(unitName, alias) {
- if (!unitName) throw new Error('absent name!');
- if (!alias) throw new Error('absent alias!');
+ regexes = {};
- if (!this.namesVarients[unitName]) {
- this.namesVarients[unitName] = unitName;
- }
- this.namesVarients[alias.toLowerCase()] = unitName;
- }
- }, {
- key: 'normalise',
- value: function normalise(alias) {
- if (!alias) return;
- return this.namesVarients[alias.toLowerCase()];
+ function addRegexToken(token, regex, strictRegex) {
+ regexes[token] = isFunction(regex)
+ ? regex
+ : function (isStrict, localeData) {
+ return isStrict && strictRegex ? strictRegex : regex;
+ };
}
- }]);
- return UnitNormaliser;
-}();
+ function getParseRegexForToken(token, config) {
+ if (!hasOwnProp(regexes, token)) {
+ return new RegExp(unescapeFormat(token));
+ }
-exports.default = UnitNormaliser;
+ return regexes[token](config._strict, config._locale);
+ }
-/***/ }),
-/* 451 */,
-/* 452 */,
-/* 453 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+ // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
+ function unescapeFormat(s) {
+ return regexEscape(
+ s
+ .replace('\\', '')
+ .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (
+ matched,
+ p1,
+ p2,
+ p3,
+ p4
+ ) {
+ return p1 || p2 || p3 || p4;
+ })
+ );
+ }
-var once = __webpack_require__(969)
-var eos = __webpack_require__(562)
-var fs = __webpack_require__(747) // we only need fs to get the ReadStream and WriteStream prototypes
+ function regexEscape(s) {
+ return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+ }
-var noop = function () {}
-var ancient = /^v?\.0/.test(process.version)
+ var tokens = {};
-var isFn = function (fn) {
- return typeof fn === 'function'
-}
+ function addParseToken(token, callback) {
+ var i,
+ func = callback;
+ if (typeof token === 'string') {
+ token = [token];
+ }
+ if (isNumber(callback)) {
+ func = function (input, array) {
+ array[callback] = toInt(input);
+ };
+ }
+ for (i = 0; i < token.length; i++) {
+ tokens[token[i]] = func;
+ }
+ }
-var isFS = function (stream) {
- if (!ancient) return false // newer node version do not need to care about fs is a special way
- if (!fs) return false // browser
- return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close)
-}
+ function addWeekParseToken(token, callback) {
+ addParseToken(token, function (input, array, config, token) {
+ config._w = config._w || {};
+ callback(input, config._w, config, token);
+ });
+ }
-var isRequest = function (stream) {
- return stream.setHeader && isFn(stream.abort)
-}
+ function addTimeToArrayFromToken(token, input, config) {
+ if (input != null && hasOwnProp(tokens, token)) {
+ tokens[token](input, config._a, config, token);
+ }
+ }
-var destroyer = function (stream, reading, writing, callback) {
- callback = once(callback)
+ var YEAR = 0,
+ MONTH = 1,
+ DATE = 2,
+ HOUR = 3,
+ MINUTE = 4,
+ SECOND = 5,
+ MILLISECOND = 6,
+ WEEK = 7,
+ WEEKDAY = 8;
- var closed = false
- stream.on('close', function () {
- closed = true
- })
+ function mod(n, x) {
+ return ((n % x) + x) % x;
+ }
- eos(stream, {readable: reading, writable: writing}, function (err) {
- if (err) return callback(err)
- closed = true
- callback()
- })
+ var indexOf;
- var destroyed = false
- return function (err) {
- if (closed) return
- if (destroyed) return
- destroyed = true
+ if (Array.prototype.indexOf) {
+ indexOf = Array.prototype.indexOf;
+ } else {
+ indexOf = function (o) {
+ // I know
+ var i;
+ for (i = 0; i < this.length; ++i) {
+ if (this[i] === o) {
+ return i;
+ }
+ }
+ return -1;
+ };
+ }
- if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks
- if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want
+ function daysInMonth(year, month) {
+ if (isNaN(year) || isNaN(month)) {
+ return NaN;
+ }
+ var modMonth = mod(month, 12);
+ year += (month - modMonth) / 12;
+ return modMonth === 1
+ ? isLeapYear(year)
+ ? 29
+ : 28
+ : 31 - ((modMonth % 7) % 2);
+ }
- if (isFn(stream.destroy)) return stream.destroy()
+ // FORMATTING
- callback(err || new Error('stream was destroyed'))
- }
-}
+ addFormatToken('M', ['MM', 2], 'Mo', function () {
+ return this.month() + 1;
+ });
-var call = function (fn) {
- fn()
-}
+ addFormatToken('MMM', 0, 0, function (format) {
+ return this.localeData().monthsShort(this, format);
+ });
-var pipe = function (from, to) {
- return from.pipe(to)
-}
+ addFormatToken('MMMM', 0, 0, function (format) {
+ return this.localeData().months(this, format);
+ });
-var pump = function () {
- var streams = Array.prototype.slice.call(arguments)
- var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop
+ // ALIASES
- if (Array.isArray(streams[0])) streams = streams[0]
- if (streams.length < 2) throw new Error('pump requires two streams per minimum')
+ addUnitAlias('month', 'M');
- var error
- var destroys = streams.map(function (stream, i) {
- var reading = i < streams.length - 1
- var writing = i > 0
- return destroyer(stream, reading, writing, function (err) {
- if (!error) error = err
- if (err) destroys.forEach(call)
- if (reading) return
- destroys.forEach(call)
- callback(error)
- })
- })
+ // PRIORITY
- return streams.reduce(pipe)
-}
+ addUnitPriority('month', 8);
-module.exports = pump
+ // PARSING
+ addRegexToken('M', match1to2);
+ addRegexToken('MM', match1to2, match2);
+ addRegexToken('MMM', function (isStrict, locale) {
+ return locale.monthsShortRegex(isStrict);
+ });
+ addRegexToken('MMMM', function (isStrict, locale) {
+ return locale.monthsRegex(isStrict);
+ });
-/***/ }),
-/* 454 */
-/***/ (function(module, exports, __webpack_require__) {
+ addParseToken(['M', 'MM'], function (input, array) {
+ array[MONTH] = toInt(input) - 1;
+ });
-"use strict";
+ addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
+ var month = config._locale.monthsParse(input, token, config._strict);
+ // if we didn't find a month name, mark the date as invalid.
+ if (month != null) {
+ array[MONTH] = month;
+ } else {
+ getParsingFlags(config).invalidMonth = input;
+ }
+ });
+ // LOCALES
-Object.defineProperty(exports, '__esModule', { value: true });
+ var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+ '_'
+ ),
+ defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(
+ '_'
+ ),
+ MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
+ defaultMonthsShortRegex = matchWord,
+ defaultMonthsRegex = matchWord;
-function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
+ function localeMonths(m, format) {
+ if (!m) {
+ return isArray(this._months)
+ ? this._months
+ : this._months['standalone'];
+ }
+ return isArray(this._months)
+ ? this._months[m.month()]
+ : this._months[
+ (this._months.isFormat || MONTHS_IN_FORMAT).test(format)
+ ? 'format'
+ : 'standalone'
+ ][m.month()];
+ }
-var Stream = _interopDefault(__webpack_require__(413));
-var http = _interopDefault(__webpack_require__(605));
-var Url = _interopDefault(__webpack_require__(835));
-var https = _interopDefault(__webpack_require__(211));
-var zlib = _interopDefault(__webpack_require__(761));
+ function localeMonthsShort(m, format) {
+ if (!m) {
+ return isArray(this._monthsShort)
+ ? this._monthsShort
+ : this._monthsShort['standalone'];
+ }
+ return isArray(this._monthsShort)
+ ? this._monthsShort[m.month()]
+ : this._monthsShort[
+ MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'
+ ][m.month()];
+ }
-// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
+ function handleStrictParse(monthName, format, strict) {
+ var i,
+ ii,
+ mom,
+ llc = monthName.toLocaleLowerCase();
+ if (!this._monthsParse) {
+ // this is not used
+ this._monthsParse = [];
+ this._longMonthsParse = [];
+ this._shortMonthsParse = [];
+ for (i = 0; i < 12; ++i) {
+ mom = createUTC([2000, i]);
+ this._shortMonthsParse[i] = this.monthsShort(
+ mom,
+ ''
+ ).toLocaleLowerCase();
+ this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
+ }
+ }
-// fix for "Readable" isn't a named export issue
-const Readable = Stream.Readable;
+ if (strict) {
+ if (format === 'MMM') {
+ ii = indexOf.call(this._shortMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._longMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ } else {
+ if (format === 'MMM') {
+ ii = indexOf.call(this._shortMonthsParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._longMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._longMonthsParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._shortMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ }
+ }
-const BUFFER = Symbol('buffer');
-const TYPE = Symbol('type');
+ function localeMonthsParse(monthName, format, strict) {
+ var i, mom, regex;
-class Blob {
- constructor() {
- this[TYPE] = '';
+ if (this._monthsParseExact) {
+ return handleStrictParse.call(this, monthName, format, strict);
+ }
- const blobParts = arguments[0];
- const options = arguments[1];
+ if (!this._monthsParse) {
+ this._monthsParse = [];
+ this._longMonthsParse = [];
+ this._shortMonthsParse = [];
+ }
- const buffers = [];
- let size = 0;
+ // TODO: add sorting
+ // Sorting makes sure if one month (or abbr) is a prefix of another
+ // see sorting in computeMonthsParse
+ for (i = 0; i < 12; i++) {
+ // make the regex if we don't have it already
+ mom = createUTC([2000, i]);
+ if (strict && !this._longMonthsParse[i]) {
+ this._longMonthsParse[i] = new RegExp(
+ '^' + this.months(mom, '').replace('.', '') + '$',
+ 'i'
+ );
+ this._shortMonthsParse[i] = new RegExp(
+ '^' + this.monthsShort(mom, '').replace('.', '') + '$',
+ 'i'
+ );
+ }
+ if (!strict && !this._monthsParse[i]) {
+ regex =
+ '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
+ this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
+ }
+ // test the regex
+ if (
+ strict &&
+ format === 'MMMM' &&
+ this._longMonthsParse[i].test(monthName)
+ ) {
+ return i;
+ } else if (
+ strict &&
+ format === 'MMM' &&
+ this._shortMonthsParse[i].test(monthName)
+ ) {
+ return i;
+ } else if (!strict && this._monthsParse[i].test(monthName)) {
+ return i;
+ }
+ }
+ }
- if (blobParts) {
- const a = blobParts;
- const length = Number(a.length);
- for (let i = 0; i < length; i++) {
- const element = a[i];
- let buffer;
- if (element instanceof Buffer) {
- buffer = element;
- } else if (ArrayBuffer.isView(element)) {
- buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);
- } else if (element instanceof ArrayBuffer) {
- buffer = Buffer.from(element);
- } else if (element instanceof Blob) {
- buffer = element[BUFFER];
- } else {
- buffer = Buffer.from(typeof element === 'string' ? element : String(element));
- }
- size += buffer.length;
- buffers.push(buffer);
- }
- }
+ // MOMENTS
- this[BUFFER] = Buffer.concat(buffers);
+ function setMonth(mom, value) {
+ var dayOfMonth;
- let type = options && options.type !== undefined && String(options.type).toLowerCase();
- if (type && !/[^\u0020-\u007E]/.test(type)) {
- this[TYPE] = type;
- }
- }
- get size() {
- return this[BUFFER].length;
- }
- get type() {
- return this[TYPE];
- }
- text() {
- return Promise.resolve(this[BUFFER].toString());
- }
- arrayBuffer() {
- const buf = this[BUFFER];
- const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
- return Promise.resolve(ab);
- }
- stream() {
- const readable = new Readable();
- readable._read = function () {};
- readable.push(this[BUFFER]);
- readable.push(null);
- return readable;
- }
- toString() {
- return '[object Blob]';
- }
- slice() {
- const size = this.size;
+ if (!mom.isValid()) {
+ // No op
+ return mom;
+ }
- const start = arguments[0];
- const end = arguments[1];
- let relativeStart, relativeEnd;
- if (start === undefined) {
- relativeStart = 0;
- } else if (start < 0) {
- relativeStart = Math.max(size + start, 0);
- } else {
- relativeStart = Math.min(start, size);
- }
- if (end === undefined) {
- relativeEnd = size;
- } else if (end < 0) {
- relativeEnd = Math.max(size + end, 0);
- } else {
- relativeEnd = Math.min(end, size);
- }
- const span = Math.max(relativeEnd - relativeStart, 0);
+ if (typeof value === 'string') {
+ if (/^\d+$/.test(value)) {
+ value = toInt(value);
+ } else {
+ value = mom.localeData().monthsParse(value);
+ // TODO: Another silent failure?
+ if (!isNumber(value)) {
+ return mom;
+ }
+ }
+ }
- const buffer = this[BUFFER];
- const slicedBuffer = buffer.slice(relativeStart, relativeStart + span);
- const blob = new Blob([], { type: arguments[2] });
- blob[BUFFER] = slicedBuffer;
- return blob;
- }
-}
+ dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
+ mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
+ return mom;
+ }
-Object.defineProperties(Blob.prototype, {
- size: { enumerable: true },
- type: { enumerable: true },
- slice: { enumerable: true }
-});
+ function getSetMonth(value) {
+ if (value != null) {
+ setMonth(this, value);
+ hooks.updateOffset(this, true);
+ return this;
+ } else {
+ return get(this, 'Month');
+ }
+ }
-Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
- value: 'Blob',
- writable: false,
- enumerable: false,
- configurable: true
-});
+ function getDaysInMonth() {
+ return daysInMonth(this.year(), this.month());
+ }
-/**
- * fetch-error.js
- *
- * FetchError interface for operational errors
- */
+ function monthsShortRegex(isStrict) {
+ if (this._monthsParseExact) {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ computeMonthsParse.call(this);
+ }
+ if (isStrict) {
+ return this._monthsShortStrictRegex;
+ } else {
+ return this._monthsShortRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_monthsShortRegex')) {
+ this._monthsShortRegex = defaultMonthsShortRegex;
+ }
+ return this._monthsShortStrictRegex && isStrict
+ ? this._monthsShortStrictRegex
+ : this._monthsShortRegex;
+ }
+ }
-/**
- * Create FetchError instance
- *
- * @param String message Error message for human
- * @param String type Error type for machine
- * @param String systemError For Node.js system error
- * @return FetchError
- */
-function FetchError(message, type, systemError) {
- Error.call(this, message);
+ function monthsRegex(isStrict) {
+ if (this._monthsParseExact) {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ computeMonthsParse.call(this);
+ }
+ if (isStrict) {
+ return this._monthsStrictRegex;
+ } else {
+ return this._monthsRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ this._monthsRegex = defaultMonthsRegex;
+ }
+ return this._monthsStrictRegex && isStrict
+ ? this._monthsStrictRegex
+ : this._monthsRegex;
+ }
+ }
- this.message = message;
- this.type = type;
+ function computeMonthsParse() {
+ function cmpLenRev(a, b) {
+ return b.length - a.length;
+ }
- // when err.type is `system`, err.code contains system error code
- if (systemError) {
- this.code = this.errno = systemError.code;
- }
+ var shortPieces = [],
+ longPieces = [],
+ mixedPieces = [],
+ i,
+ mom;
+ for (i = 0; i < 12; i++) {
+ // make the regex if we don't have it already
+ mom = createUTC([2000, i]);
+ shortPieces.push(this.monthsShort(mom, ''));
+ longPieces.push(this.months(mom, ''));
+ mixedPieces.push(this.months(mom, ''));
+ mixedPieces.push(this.monthsShort(mom, ''));
+ }
+ // Sorting makes sure if one month (or abbr) is a prefix of another it
+ // will match the longer piece.
+ shortPieces.sort(cmpLenRev);
+ longPieces.sort(cmpLenRev);
+ mixedPieces.sort(cmpLenRev);
+ for (i = 0; i < 12; i++) {
+ shortPieces[i] = regexEscape(shortPieces[i]);
+ longPieces[i] = regexEscape(longPieces[i]);
+ }
+ for (i = 0; i < 24; i++) {
+ mixedPieces[i] = regexEscape(mixedPieces[i]);
+ }
- // hide custom error implementation details from end-users
- Error.captureStackTrace(this, this.constructor);
-}
+ this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+ this._monthsShortRegex = this._monthsRegex;
+ this._monthsStrictRegex = new RegExp(
+ '^(' + longPieces.join('|') + ')',
+ 'i'
+ );
+ this._monthsShortStrictRegex = new RegExp(
+ '^(' + shortPieces.join('|') + ')',
+ 'i'
+ );
+ }
-FetchError.prototype = Object.create(Error.prototype);
-FetchError.prototype.constructor = FetchError;
-FetchError.prototype.name = 'FetchError';
+ // FORMATTING
-let convert;
-try {
- convert = __webpack_require__(18).convert;
-} catch (e) {}
+ addFormatToken('Y', 0, 0, function () {
+ var y = this.year();
+ return y <= 9999 ? zeroFill(y, 4) : '+' + y;
+ });
-const INTERNALS = Symbol('Body internals');
+ addFormatToken(0, ['YY', 2], 0, function () {
+ return this.year() % 100;
+ });
-// fix an issue where "PassThrough" isn't a named export for node <10
-const PassThrough = Stream.PassThrough;
+ addFormatToken(0, ['YYYY', 4], 0, 'year');
+ addFormatToken(0, ['YYYYY', 5], 0, 'year');
+ addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
-/**
- * Body mixin
- *
- * Ref: https://fetch.spec.whatwg.org/#body
- *
- * @param Stream body Readable stream
- * @param Object opts Response options
- * @return Void
- */
-function Body(body) {
- var _this = this;
+ // ALIASES
- var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
- _ref$size = _ref.size;
+ addUnitAlias('year', 'y');
- let size = _ref$size === undefined ? 0 : _ref$size;
- var _ref$timeout = _ref.timeout;
- let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
+ // PRIORITIES
- if (body == null) {
- // body is undefined or null
- body = null;
- } else if (isURLSearchParams(body)) {
- // body is a URLSearchParams
- body = Buffer.from(body.toString());
- } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
- // body is ArrayBuffer
- body = Buffer.from(body);
- } else if (ArrayBuffer.isView(body)) {
- // body is ArrayBufferView
- body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
- } else if (body instanceof Stream) ; else {
- // none of the above
- // coerce to string then buffer
- body = Buffer.from(String(body));
- }
- this[INTERNALS] = {
- body,
- disturbed: false,
- error: null
- };
- this.size = size;
- this.timeout = timeout;
+ addUnitPriority('year', 1);
- if (body instanceof Stream) {
- body.on('error', function (err) {
- const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);
- _this[INTERNALS].error = error;
- });
- }
-}
+ // PARSING
-Body.prototype = {
- get body() {
- return this[INTERNALS].body;
- },
+ addRegexToken('Y', matchSigned);
+ addRegexToken('YY', match1to2, match2);
+ addRegexToken('YYYY', match1to4, match4);
+ addRegexToken('YYYYY', match1to6, match6);
+ addRegexToken('YYYYYY', match1to6, match6);
- get bodyUsed() {
- return this[INTERNALS].disturbed;
- },
+ addParseToken(['YYYYY', 'YYYYYY'], YEAR);
+ addParseToken('YYYY', function (input, array) {
+ array[YEAR] =
+ input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
+ });
+ addParseToken('YY', function (input, array) {
+ array[YEAR] = hooks.parseTwoDigitYear(input);
+ });
+ addParseToken('Y', function (input, array) {
+ array[YEAR] = parseInt(input, 10);
+ });
- /**
- * Decode response as ArrayBuffer
- *
- * @return Promise
- */
- arrayBuffer() {
- return consumeBody.call(this).then(function (buf) {
- return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
- });
- },
+ // HELPERS
- /**
- * Return raw response as Blob
- *
- * @return Promise
- */
- blob() {
- let ct = this.headers && this.headers.get('content-type') || '';
- return consumeBody.call(this).then(function (buf) {
- return Object.assign(
- // Prevent copying
- new Blob([], {
- type: ct.toLowerCase()
- }), {
- [BUFFER]: buf
- });
- });
- },
+ function daysInYear(year) {
+ return isLeapYear(year) ? 366 : 365;
+ }
- /**
- * Decode response as json
- *
- * @return Promise
- */
- json() {
- var _this2 = this;
+ // HOOKS
- return consumeBody.call(this).then(function (buffer) {
- try {
- return JSON.parse(buffer.toString());
- } catch (err) {
- return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));
- }
- });
- },
+ hooks.parseTwoDigitYear = function (input) {
+ return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
+ };
- /**
- * Decode response as text
- *
- * @return Promise
- */
- text() {
- return consumeBody.call(this).then(function (buffer) {
- return buffer.toString();
- });
- },
+ // MOMENTS
- /**
- * Decode response as buffer (non-spec api)
- *
- * @return Promise
- */
- buffer() {
- return consumeBody.call(this);
- },
+ var getSetYear = makeGetSet('FullYear', true);
- /**
- * Decode response as text, while automatically detecting the encoding and
- * trying to decode to UTF-8 (non-spec api)
- *
- * @return Promise
- */
- textConverted() {
- var _this3 = this;
+ function getIsLeapYear() {
+ return isLeapYear(this.year());
+ }
- return consumeBody.call(this).then(function (buffer) {
- return convertBody(buffer, _this3.headers);
- });
- }
-};
+ function createDate(y, m, d, h, M, s, ms) {
+ // can't just apply() to create a date:
+ // https://stackoverflow.com/q/181348
+ var date;
+ // the date constructor remaps years 0-99 to 1900-1999
+ if (y < 100 && y >= 0) {
+ // preserve leap years using a full 400 year cycle, then reset
+ date = new Date(y + 400, m, d, h, M, s, ms);
+ if (isFinite(date.getFullYear())) {
+ date.setFullYear(y);
+ }
+ } else {
+ date = new Date(y, m, d, h, M, s, ms);
+ }
-// In browsers, all properties are enumerable.
-Object.defineProperties(Body.prototype, {
- body: { enumerable: true },
- bodyUsed: { enumerable: true },
- arrayBuffer: { enumerable: true },
- blob: { enumerable: true },
- json: { enumerable: true },
- text: { enumerable: true }
-});
+ return date;
+ }
-Body.mixIn = function (proto) {
- for (const name of Object.getOwnPropertyNames(Body.prototype)) {
- // istanbul ignore else: future proof
- if (!(name in proto)) {
- const desc = Object.getOwnPropertyDescriptor(Body.prototype, name);
- Object.defineProperty(proto, name, desc);
- }
- }
-};
+ function createUTCDate(y) {
+ var date, args;
+ // the Date.UTC function remaps years 0-99 to 1900-1999
+ if (y < 100 && y >= 0) {
+ args = Array.prototype.slice.call(arguments);
+ // preserve leap years using a full 400 year cycle, then reset
+ args[0] = y + 400;
+ date = new Date(Date.UTC.apply(null, args));
+ if (isFinite(date.getUTCFullYear())) {
+ date.setUTCFullYear(y);
+ }
+ } else {
+ date = new Date(Date.UTC.apply(null, arguments));
+ }
-/**
- * Consume and convert an entire Body to a Buffer.
- *
- * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
- *
- * @return Promise
- */
-function consumeBody() {
- var _this4 = this;
+ return date;
+ }
- if (this[INTERNALS].disturbed) {
- return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));
- }
+ // start-of-first-week - start-of-year
+ function firstWeekOffset(year, dow, doy) {
+ var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
+ fwd = 7 + dow - doy,
+ // first-week day local weekday -- which local weekday is fwd
+ fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
- this[INTERNALS].disturbed = true;
+ return -fwdlw + fwd - 1;
+ }
- if (this[INTERNALS].error) {
- return Body.Promise.reject(this[INTERNALS].error);
- }
+ // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
+ function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
+ var localWeekday = (7 + weekday - dow) % 7,
+ weekOffset = firstWeekOffset(year, dow, doy),
+ dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
+ resYear,
+ resDayOfYear;
- let body = this.body;
+ if (dayOfYear <= 0) {
+ resYear = year - 1;
+ resDayOfYear = daysInYear(resYear) + dayOfYear;
+ } else if (dayOfYear > daysInYear(year)) {
+ resYear = year + 1;
+ resDayOfYear = dayOfYear - daysInYear(year);
+ } else {
+ resYear = year;
+ resDayOfYear = dayOfYear;
+ }
- // body is null
- if (body === null) {
- return Body.Promise.resolve(Buffer.alloc(0));
- }
+ return {
+ year: resYear,
+ dayOfYear: resDayOfYear,
+ };
+ }
- // body is blob
- if (isBlob(body)) {
- body = body.stream();
- }
+ function weekOfYear(mom, dow, doy) {
+ var weekOffset = firstWeekOffset(mom.year(), dow, doy),
+ week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
+ resWeek,
+ resYear;
- // body is buffer
- if (Buffer.isBuffer(body)) {
- return Body.Promise.resolve(body);
- }
+ if (week < 1) {
+ resYear = mom.year() - 1;
+ resWeek = week + weeksInYear(resYear, dow, doy);
+ } else if (week > weeksInYear(mom.year(), dow, doy)) {
+ resWeek = week - weeksInYear(mom.year(), dow, doy);
+ resYear = mom.year() + 1;
+ } else {
+ resYear = mom.year();
+ resWeek = week;
+ }
- // istanbul ignore if: should never happen
- if (!(body instanceof Stream)) {
- return Body.Promise.resolve(Buffer.alloc(0));
- }
+ return {
+ week: resWeek,
+ year: resYear,
+ };
+ }
- // body is stream
- // get ready to actually consume the body
- let accum = [];
- let accumBytes = 0;
- let abort = false;
+ function weeksInYear(year, dow, doy) {
+ var weekOffset = firstWeekOffset(year, dow, doy),
+ weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
+ return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
+ }
- return new Body.Promise(function (resolve, reject) {
- let resTimeout;
+ // FORMATTING
- // allow timeout on slow response body
- if (_this4.timeout) {
- resTimeout = setTimeout(function () {
- abort = true;
- reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));
- }, _this4.timeout);
- }
+ addFormatToken('w', ['ww', 2], 'wo', 'week');
+ addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
- // handle stream errors
- body.on('error', function (err) {
- if (err.name === 'AbortError') {
- // if the request was aborted, reject with this Error
- abort = true;
- reject(err);
- } else {
- // other errors, such as incorrect content-encoding
- reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));
- }
- });
+ // ALIASES
- body.on('data', function (chunk) {
- if (abort || chunk === null) {
- return;
- }
+ addUnitAlias('week', 'w');
+ addUnitAlias('isoWeek', 'W');
- if (_this4.size && accumBytes + chunk.length > _this4.size) {
- abort = true;
- reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));
- return;
- }
+ // PRIORITIES
- accumBytes += chunk.length;
- accum.push(chunk);
- });
+ addUnitPriority('week', 5);
+ addUnitPriority('isoWeek', 5);
- body.on('end', function () {
- if (abort) {
- return;
- }
+ // PARSING
- clearTimeout(resTimeout);
+ addRegexToken('w', match1to2);
+ addRegexToken('ww', match1to2, match2);
+ addRegexToken('W', match1to2);
+ addRegexToken('WW', match1to2, match2);
- try {
- resolve(Buffer.concat(accum, accumBytes));
- } catch (err) {
- // handle streams that have accumulated too much data (issue #414)
- reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));
- }
- });
- });
-}
+ addWeekParseToken(['w', 'ww', 'W', 'WW'], function (
+ input,
+ week,
+ config,
+ token
+ ) {
+ week[token.substr(0, 1)] = toInt(input);
+ });
-/**
- * Detect buffer encoding and convert to target encoding
- * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
- *
- * @param Buffer buffer Incoming buffer
- * @param String encoding Target encoding
- * @return String
- */
-function convertBody(buffer, headers) {
- if (typeof convert !== 'function') {
- throw new Error('The package `encoding` must be installed to use the textConverted() function');
- }
+ // HELPERS
- const ct = headers.get('content-type');
- let charset = 'utf-8';
- let res, str;
+ // LOCALES
- // header
- if (ct) {
- res = /charset=([^;]*)/i.exec(ct);
- }
+ function localeWeek(mom) {
+ return weekOfYear(mom, this._week.dow, this._week.doy).week;
+ }
- // no charset in content type, peek at response body for at most 1024 bytes
- str = buffer.slice(0, 1024).toString();
+ var defaultLocaleWeek = {
+ dow: 0, // Sunday is the first day of the week.
+ doy: 6, // The week that contains Jan 6th is the first week of the year.
+ };
- // html5
- if (!res && str) {
- res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined;
-
- this[MAP] = Object.create(null);
+ function localeWeekdays(m, format) {
+ var weekdays = isArray(this._weekdays)
+ ? this._weekdays
+ : this._weekdays[
+ m && m !== true && this._weekdays.isFormat.test(format)
+ ? 'format'
+ : 'standalone'
+ ];
+ return m === true
+ ? shiftWeekdays(weekdays, this._week.dow)
+ : m
+ ? weekdays[m.day()]
+ : weekdays;
+ }
- if (init instanceof Headers) {
- const rawHeaders = init.raw();
- const headerNames = Object.keys(rawHeaders);
+ function localeWeekdaysShort(m) {
+ return m === true
+ ? shiftWeekdays(this._weekdaysShort, this._week.dow)
+ : m
+ ? this._weekdaysShort[m.day()]
+ : this._weekdaysShort;
+ }
- for (const headerName of headerNames) {
- for (const value of rawHeaders[headerName]) {
- this.append(headerName, value);
- }
- }
+ function localeWeekdaysMin(m) {
+ return m === true
+ ? shiftWeekdays(this._weekdaysMin, this._week.dow)
+ : m
+ ? this._weekdaysMin[m.day()]
+ : this._weekdaysMin;
+ }
- return;
- }
+ function handleStrictParse$1(weekdayName, format, strict) {
+ var i,
+ ii,
+ mom,
+ llc = weekdayName.toLocaleLowerCase();
+ if (!this._weekdaysParse) {
+ this._weekdaysParse = [];
+ this._shortWeekdaysParse = [];
+ this._minWeekdaysParse = [];
- // We don't worry about converting prop to ByteString here as append()
- // will handle it.
- if (init == null) ; else if (typeof init === 'object') {
- const method = init[Symbol.iterator];
- if (method != null) {
- if (typeof method !== 'function') {
- throw new TypeError('Header pairs must be iterable');
- }
+ for (i = 0; i < 7; ++i) {
+ mom = createUTC([2000, 1]).day(i);
+ this._minWeekdaysParse[i] = this.weekdaysMin(
+ mom,
+ ''
+ ).toLocaleLowerCase();
+ this._shortWeekdaysParse[i] = this.weekdaysShort(
+ mom,
+ ''
+ ).toLocaleLowerCase();
+ this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
+ }
+ }
- // sequence>
- // Note: per spec we have to first exhaust the lists then process them
- const pairs = [];
- for (const pair of init) {
- if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {
- throw new TypeError('Each header pair must be iterable');
- }
- pairs.push(Array.from(pair));
- }
+ if (strict) {
+ if (format === 'dddd') {
+ ii = indexOf.call(this._weekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else if (format === 'ddd') {
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ } else {
+ if (format === 'dddd') {
+ ii = indexOf.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else if (format === 'ddd') {
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ }
+ }
- for (const pair of pairs) {
- if (pair.length !== 2) {
- throw new TypeError('Each header pair must be a name/value tuple');
- }
- this.append(pair[0], pair[1]);
- }
- } else {
- // record
- for (const key of Object.keys(init)) {
- const value = init[key];
- this.append(key, value);
- }
- }
- } else {
- throw new TypeError('Provided initializer must be an object');
- }
- }
+ function localeWeekdaysParse(weekdayName, format, strict) {
+ var i, mom, regex;
- /**
- * Return combined header value given name
- *
- * @param String name Header name
- * @return Mixed
- */
- get(name) {
- name = `${name}`;
- validateName(name);
- const key = find(this[MAP], name);
- if (key === undefined) {
- return null;
- }
+ if (this._weekdaysParseExact) {
+ return handleStrictParse$1.call(this, weekdayName, format, strict);
+ }
- return this[MAP][key].join(', ');
- }
+ if (!this._weekdaysParse) {
+ this._weekdaysParse = [];
+ this._minWeekdaysParse = [];
+ this._shortWeekdaysParse = [];
+ this._fullWeekdaysParse = [];
+ }
- /**
- * Iterate over all headers
- *
- * @param Function callback Executed for each item with parameters (value, name, thisArg)
- * @param Boolean thisArg `this` context for callback function
- * @return Void
- */
- forEach(callback) {
- let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
+ for (i = 0; i < 7; i++) {
+ // make the regex if we don't have it already
- let pairs = getHeaders(this);
- let i = 0;
- while (i < pairs.length) {
- var _pairs$i = pairs[i];
- const name = _pairs$i[0],
- value = _pairs$i[1];
+ mom = createUTC([2000, 1]).day(i);
+ if (strict && !this._fullWeekdaysParse[i]) {
+ this._fullWeekdaysParse[i] = new RegExp(
+ '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$',
+ 'i'
+ );
+ this._shortWeekdaysParse[i] = new RegExp(
+ '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$',
+ 'i'
+ );
+ this._minWeekdaysParse[i] = new RegExp(
+ '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$',
+ 'i'
+ );
+ }
+ if (!this._weekdaysParse[i]) {
+ regex =
+ '^' +
+ this.weekdays(mom, '') +
+ '|^' +
+ this.weekdaysShort(mom, '') +
+ '|^' +
+ this.weekdaysMin(mom, '');
+ this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
+ }
+ // test the regex
+ if (
+ strict &&
+ format === 'dddd' &&
+ this._fullWeekdaysParse[i].test(weekdayName)
+ ) {
+ return i;
+ } else if (
+ strict &&
+ format === 'ddd' &&
+ this._shortWeekdaysParse[i].test(weekdayName)
+ ) {
+ return i;
+ } else if (
+ strict &&
+ format === 'dd' &&
+ this._minWeekdaysParse[i].test(weekdayName)
+ ) {
+ return i;
+ } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
+ return i;
+ }
+ }
+ }
- callback.call(thisArg, value, name, this);
- pairs = getHeaders(this);
- i++;
- }
- }
+ // MOMENTS
- /**
- * Overwrite header values given name
- *
- * @param String name Header name
- * @param String value Header value
- * @return Void
- */
- set(name, value) {
- name = `${name}`;
- value = `${value}`;
- validateName(name);
- validateValue(value);
- const key = find(this[MAP], name);
- this[MAP][key !== undefined ? key : name] = [value];
- }
+ function getSetDayOfWeek(input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+ var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
+ if (input != null) {
+ input = parseWeekday(input, this.localeData());
+ return this.add(input - day, 'd');
+ } else {
+ return day;
+ }
+ }
- /**
- * Append a value onto existing header
- *
- * @param String name Header name
- * @param String value Header value
- * @return Void
- */
- append(name, value) {
- name = `${name}`;
- value = `${value}`;
- validateName(name);
- validateValue(value);
- const key = find(this[MAP], name);
- if (key !== undefined) {
- this[MAP][key].push(value);
- } else {
- this[MAP][name] = [value];
- }
- }
+ function getSetLocaleDayOfWeek(input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+ var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
+ return input == null ? weekday : this.add(input - weekday, 'd');
+ }
- /**
- * Check for header name existence
- *
- * @param String name Header name
- * @return Boolean
- */
- has(name) {
- name = `${name}`;
- validateName(name);
- return find(this[MAP], name) !== undefined;
- }
+ function getSetISODayOfWeek(input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
- /**
- * Delete all header values given name
- *
- * @param String name Header name
- * @return Void
- */
- delete(name) {
- name = `${name}`;
- validateName(name);
- const key = find(this[MAP], name);
- if (key !== undefined) {
- delete this[MAP][key];
- }
- }
+ // behaves the same as moment#day except
+ // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
+ // as a setter, sunday should belong to the previous week.
- /**
- * Return raw headers (non-spec api)
- *
- * @return Object
- */
- raw() {
- return this[MAP];
- }
+ if (input != null) {
+ var weekday = parseIsoWeekday(input, this.localeData());
+ return this.day(this.day() % 7 ? weekday : weekday - 7);
+ } else {
+ return this.day() || 7;
+ }
+ }
- /**
- * Get an iterator on keys.
- *
- * @return Iterator
- */
- keys() {
- return createHeadersIterator(this, 'key');
- }
+ function weekdaysRegex(isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysStrictRegex;
+ } else {
+ return this._weekdaysRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ this._weekdaysRegex = defaultWeekdaysRegex;
+ }
+ return this._weekdaysStrictRegex && isStrict
+ ? this._weekdaysStrictRegex
+ : this._weekdaysRegex;
+ }
+ }
- /**
- * Get an iterator on values.
- *
- * @return Iterator
- */
- values() {
- return createHeadersIterator(this, 'value');
- }
+ function weekdaysShortRegex(isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysShortStrictRegex;
+ } else {
+ return this._weekdaysShortRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysShortRegex')) {
+ this._weekdaysShortRegex = defaultWeekdaysShortRegex;
+ }
+ return this._weekdaysShortStrictRegex && isStrict
+ ? this._weekdaysShortStrictRegex
+ : this._weekdaysShortRegex;
+ }
+ }
- /**
- * Get an iterator on entries.
- *
- * This is the default iterator of the Headers object.
- *
- * @return Iterator
- */
- [Symbol.iterator]() {
- return createHeadersIterator(this, 'key+value');
- }
-}
-Headers.prototype.entries = Headers.prototype[Symbol.iterator];
+ function weekdaysMinRegex(isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysMinStrictRegex;
+ } else {
+ return this._weekdaysMinRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysMinRegex')) {
+ this._weekdaysMinRegex = defaultWeekdaysMinRegex;
+ }
+ return this._weekdaysMinStrictRegex && isStrict
+ ? this._weekdaysMinStrictRegex
+ : this._weekdaysMinRegex;
+ }
+ }
-Object.defineProperty(Headers.prototype, Symbol.toStringTag, {
- value: 'Headers',
- writable: false,
- enumerable: false,
- configurable: true
-});
+ function computeWeekdaysParse() {
+ function cmpLenRev(a, b) {
+ return b.length - a.length;
+ }
-Object.defineProperties(Headers.prototype, {
- get: { enumerable: true },
- forEach: { enumerable: true },
- set: { enumerable: true },
- append: { enumerable: true },
- has: { enumerable: true },
- delete: { enumerable: true },
- keys: { enumerable: true },
- values: { enumerable: true },
- entries: { enumerable: true }
-});
+ var minPieces = [],
+ shortPieces = [],
+ longPieces = [],
+ mixedPieces = [],
+ i,
+ mom,
+ minp,
+ shortp,
+ longp;
+ for (i = 0; i < 7; i++) {
+ // make the regex if we don't have it already
+ mom = createUTC([2000, 1]).day(i);
+ minp = regexEscape(this.weekdaysMin(mom, ''));
+ shortp = regexEscape(this.weekdaysShort(mom, ''));
+ longp = regexEscape(this.weekdays(mom, ''));
+ minPieces.push(minp);
+ shortPieces.push(shortp);
+ longPieces.push(longp);
+ mixedPieces.push(minp);
+ mixedPieces.push(shortp);
+ mixedPieces.push(longp);
+ }
+ // Sorting makes sure if one weekday (or abbr) is a prefix of another it
+ // will match the longer piece.
+ minPieces.sort(cmpLenRev);
+ shortPieces.sort(cmpLenRev);
+ longPieces.sort(cmpLenRev);
+ mixedPieces.sort(cmpLenRev);
-function getHeaders(headers) {
- let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
+ this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+ this._weekdaysShortRegex = this._weekdaysRegex;
+ this._weekdaysMinRegex = this._weekdaysRegex;
- const keys = Object.keys(headers[MAP]).sort();
- return keys.map(kind === 'key' ? function (k) {
- return k.toLowerCase();
- } : kind === 'value' ? function (k) {
- return headers[MAP][k].join(', ');
- } : function (k) {
- return [k.toLowerCase(), headers[MAP][k].join(', ')];
- });
-}
+ this._weekdaysStrictRegex = new RegExp(
+ '^(' + longPieces.join('|') + ')',
+ 'i'
+ );
+ this._weekdaysShortStrictRegex = new RegExp(
+ '^(' + shortPieces.join('|') + ')',
+ 'i'
+ );
+ this._weekdaysMinStrictRegex = new RegExp(
+ '^(' + minPieces.join('|') + ')',
+ 'i'
+ );
+ }
-const INTERNAL = Symbol('internal');
+ // FORMATTING
-function createHeadersIterator(target, kind) {
- const iterator = Object.create(HeadersIteratorPrototype);
- iterator[INTERNAL] = {
- target,
- kind,
- index: 0
- };
- return iterator;
-}
+ function hFormat() {
+ return this.hours() % 12 || 12;
+ }
-const HeadersIteratorPrototype = Object.setPrototypeOf({
- next() {
- // istanbul ignore if
- if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {
- throw new TypeError('Value of `this` is not a HeadersIterator');
- }
+ function kFormat() {
+ return this.hours() || 24;
+ }
- var _INTERNAL = this[INTERNAL];
- const target = _INTERNAL.target,
- kind = _INTERNAL.kind,
- index = _INTERNAL.index;
+ addFormatToken('H', ['HH', 2], 0, 'hour');
+ addFormatToken('h', ['hh', 2], 0, hFormat);
+ addFormatToken('k', ['kk', 2], 0, kFormat);
- const values = getHeaders(target, kind);
- const len = values.length;
- if (index >= len) {
- return {
- value: undefined,
- done: true
- };
- }
+ addFormatToken('hmm', 0, 0, function () {
+ return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
+ });
- this[INTERNAL].index = index + 1;
+ addFormatToken('hmmss', 0, 0, function () {
+ return (
+ '' +
+ hFormat.apply(this) +
+ zeroFill(this.minutes(), 2) +
+ zeroFill(this.seconds(), 2)
+ );
+ });
- return {
- value: values[index],
- done: false
- };
- }
-}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
+ addFormatToken('Hmm', 0, 0, function () {
+ return '' + this.hours() + zeroFill(this.minutes(), 2);
+ });
-Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {
- value: 'HeadersIterator',
- writable: false,
- enumerable: false,
- configurable: true
-});
+ addFormatToken('Hmmss', 0, 0, function () {
+ return (
+ '' +
+ this.hours() +
+ zeroFill(this.minutes(), 2) +
+ zeroFill(this.seconds(), 2)
+ );
+ });
-/**
- * Export the Headers object in a form that Node.js can consume.
- *
- * @param Headers headers
- * @return Object
- */
-function exportNodeCompatibleHeaders(headers) {
- const obj = Object.assign({ __proto__: null }, headers[MAP]);
+ function meridiem(token, lowercase) {
+ addFormatToken(token, 0, 0, function () {
+ return this.localeData().meridiem(
+ this.hours(),
+ this.minutes(),
+ lowercase
+ );
+ });
+ }
- // http.request() only supports string as Host header. This hack makes
- // specifying custom Host header possible.
- const hostHeaderKey = find(headers[MAP], 'Host');
- if (hostHeaderKey !== undefined) {
- obj[hostHeaderKey] = obj[hostHeaderKey][0];
- }
+ meridiem('a', true);
+ meridiem('A', false);
- return obj;
-}
+ // ALIASES
-/**
- * Create a Headers object from an object of headers, ignoring those that do
- * not conform to HTTP grammar productions.
- *
- * @param Object obj Object of headers
- * @return Headers
- */
-function createHeadersLenient(obj) {
- const headers = new Headers();
- for (const name of Object.keys(obj)) {
- if (invalidTokenRegex.test(name)) {
- continue;
- }
- if (Array.isArray(obj[name])) {
- for (const val of obj[name]) {
- if (invalidHeaderCharRegex.test(val)) {
- continue;
- }
- if (headers[MAP][name] === undefined) {
- headers[MAP][name] = [val];
- } else {
- headers[MAP][name].push(val);
- }
- }
- } else if (!invalidHeaderCharRegex.test(obj[name])) {
- headers[MAP][name] = [obj[name]];
- }
- }
- return headers;
-}
+ addUnitAlias('hour', 'h');
-const INTERNALS$1 = Symbol('Response internals');
+ // PRIORITY
+ addUnitPriority('hour', 13);
-// fix an issue where "STATUS_CODES" aren't a named export for node <10
-const STATUS_CODES = http.STATUS_CODES;
+ // PARSING
-/**
- * Response class
- *
- * @param Stream body Readable stream
- * @param Object opts Response options
- * @return Void
- */
-class Response {
- constructor() {
- let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
- let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+ function matchMeridiem(isStrict, locale) {
+ return locale._meridiemParse;
+ }
- Body.call(this, body, opts);
+ addRegexToken('a', matchMeridiem);
+ addRegexToken('A', matchMeridiem);
+ addRegexToken('H', match1to2);
+ addRegexToken('h', match1to2);
+ addRegexToken('k', match1to2);
+ addRegexToken('HH', match1to2, match2);
+ addRegexToken('hh', match1to2, match2);
+ addRegexToken('kk', match1to2, match2);
- const status = opts.status || 200;
- const headers = new Headers(opts.headers);
+ addRegexToken('hmm', match3to4);
+ addRegexToken('hmmss', match5to6);
+ addRegexToken('Hmm', match3to4);
+ addRegexToken('Hmmss', match5to6);
- if (body != null && !headers.has('Content-Type')) {
- const contentType = extractContentType(body);
- if (contentType) {
- headers.append('Content-Type', contentType);
- }
- }
+ addParseToken(['H', 'HH'], HOUR);
+ addParseToken(['k', 'kk'], function (input, array, config) {
+ var kInput = toInt(input);
+ array[HOUR] = kInput === 24 ? 0 : kInput;
+ });
+ addParseToken(['a', 'A'], function (input, array, config) {
+ config._isPm = config._locale.isPM(input);
+ config._meridiem = input;
+ });
+ addParseToken(['h', 'hh'], function (input, array, config) {
+ array[HOUR] = toInt(input);
+ getParsingFlags(config).bigHour = true;
+ });
+ addParseToken('hmm', function (input, array, config) {
+ var pos = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos));
+ array[MINUTE] = toInt(input.substr(pos));
+ getParsingFlags(config).bigHour = true;
+ });
+ addParseToken('hmmss', function (input, array, config) {
+ var pos1 = input.length - 4,
+ pos2 = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos1));
+ array[MINUTE] = toInt(input.substr(pos1, 2));
+ array[SECOND] = toInt(input.substr(pos2));
+ getParsingFlags(config).bigHour = true;
+ });
+ addParseToken('Hmm', function (input, array, config) {
+ var pos = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos));
+ array[MINUTE] = toInt(input.substr(pos));
+ });
+ addParseToken('Hmmss', function (input, array, config) {
+ var pos1 = input.length - 4,
+ pos2 = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos1));
+ array[MINUTE] = toInt(input.substr(pos1, 2));
+ array[SECOND] = toInt(input.substr(pos2));
+ });
- this[INTERNALS$1] = {
- url: opts.url,
- status,
- statusText: opts.statusText || STATUS_CODES[status],
- headers,
- counter: opts.counter
- };
- }
+ // LOCALES
- get url() {
- return this[INTERNALS$1].url || '';
- }
+ function localeIsPM(input) {
+ // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
+ // Using charAt should be more compatible.
+ return (input + '').toLowerCase().charAt(0) === 'p';
+ }
- get status() {
- return this[INTERNALS$1].status;
- }
+ var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
+ // Setting the hour should keep the time, because the user explicitly
+ // specified which hour they want. So trying to maintain the same hour (in
+ // a new timezone) makes sense. Adding/subtracting hours does not follow
+ // this rule.
+ getSetHour = makeGetSet('Hours', true);
- /**
- * Convenience property representing if the request ended normally
- */
- get ok() {
- return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
- }
+ function localeMeridiem(hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'pm' : 'PM';
+ } else {
+ return isLower ? 'am' : 'AM';
+ }
+ }
- get redirected() {
- return this[INTERNALS$1].counter > 0;
- }
+ var baseConfig = {
+ calendar: defaultCalendar,
+ longDateFormat: defaultLongDateFormat,
+ invalidDate: defaultInvalidDate,
+ ordinal: defaultOrdinal,
+ dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
+ relativeTime: defaultRelativeTime,
- get statusText() {
- return this[INTERNALS$1].statusText;
- }
+ months: defaultLocaleMonths,
+ monthsShort: defaultLocaleMonthsShort,
- get headers() {
- return this[INTERNALS$1].headers;
- }
+ week: defaultLocaleWeek,
- /**
- * Clone this response
- *
- * @return Response
- */
- clone() {
- return new Response(clone(this), {
- url: this.url,
- status: this.status,
- statusText: this.statusText,
- headers: this.headers,
- ok: this.ok,
- redirected: this.redirected
- });
- }
-}
+ weekdays: defaultLocaleWeekdays,
+ weekdaysMin: defaultLocaleWeekdaysMin,
+ weekdaysShort: defaultLocaleWeekdaysShort,
-Body.mixIn(Response.prototype);
+ meridiemParse: defaultLocaleMeridiemParse,
+ };
-Object.defineProperties(Response.prototype, {
- url: { enumerable: true },
- status: { enumerable: true },
- ok: { enumerable: true },
- redirected: { enumerable: true },
- statusText: { enumerable: true },
- headers: { enumerable: true },
- clone: { enumerable: true }
-});
+ // internal storage for locale config files
+ var locales = {},
+ localeFamilies = {},
+ globalLocale;
-Object.defineProperty(Response.prototype, Symbol.toStringTag, {
- value: 'Response',
- writable: false,
- enumerable: false,
- configurable: true
-});
+ function commonPrefix(arr1, arr2) {
+ var i,
+ minl = Math.min(arr1.length, arr2.length);
+ for (i = 0; i < minl; i += 1) {
+ if (arr1[i] !== arr2[i]) {
+ return i;
+ }
+ }
+ return minl;
+ }
-const INTERNALS$2 = Symbol('Request internals');
+ function normalizeLocale(key) {
+ return key ? key.toLowerCase().replace('_', '-') : key;
+ }
-// fix an issue where "format", "parse" aren't a named export for node <10
-const parse_url = Url.parse;
-const format_url = Url.format;
+ // pick the locale from the array
+ // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
+ // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
+ function chooseLocale(names) {
+ var i = 0,
+ j,
+ next,
+ locale,
+ split;
-const streamDestructionSupported = 'destroy' in Stream.Readable.prototype;
+ while (i < names.length) {
+ split = normalizeLocale(names[i]).split('-');
+ j = split.length;
+ next = normalizeLocale(names[i + 1]);
+ next = next ? next.split('-') : null;
+ while (j > 0) {
+ locale = loadLocale(split.slice(0, j).join('-'));
+ if (locale) {
+ return locale;
+ }
+ if (
+ next &&
+ next.length >= j &&
+ commonPrefix(split, next) >= j - 1
+ ) {
+ //the next array item is better than a shallower substring of this one
+ break;
+ }
+ j--;
+ }
+ i++;
+ }
+ return globalLocale;
+ }
-/**
- * Check if a value is an instance of Request.
- *
- * @param Mixed input
- * @return Boolean
- */
-function isRequest(input) {
- return typeof input === 'object' && typeof input[INTERNALS$2] === 'object';
-}
+ function loadLocale(name) {
+ var oldLocale = null,
+ aliasedRequire;
+ // TODO: Find a better way to register and load all the locales in Node
+ if (
+ locales[name] === undefined &&
+ "object" !== 'undefined' &&
+ module &&
+ module.exports
+ ) {
+ try {
+ oldLocale = globalLocale._abbr;
+ aliasedRequire = require;
+ aliasedRequire('./locale/' + name);
+ getSetGlobalLocale(oldLocale);
+ } catch (e) {
+ // mark as not found to avoid repeating expensive file require call causing high CPU
+ // when trying to find en-US, en_US, en-us for every format call
+ locales[name] = null; // null means not found
+ }
+ }
+ return locales[name];
+ }
-function isAbortSignal(signal) {
- const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
- return !!(proto && proto.constructor.name === 'AbortSignal');
-}
+ // This function will load locale and then set the global locale. If
+ // no arguments are passed in, it will simply return the current global
+ // locale key.
+ function getSetGlobalLocale(key, values) {
+ var data;
+ if (key) {
+ if (isUndefined(values)) {
+ data = getLocale(key);
+ } else {
+ data = defineLocale(key, values);
+ }
-/**
- * Request class
- *
- * @param Mixed input Url or Request instance
- * @param Object init Custom options
- * @return Void
- */
-class Request {
- constructor(input) {
- let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+ if (data) {
+ // moment.duration._locale = moment._locale = data;
+ globalLocale = data;
+ } else {
+ if (typeof console !== 'undefined' && console.warn) {
+ //warn user if arguments are passed but the locale could not be set
+ console.warn(
+ 'Locale ' + key + ' not found. Did you forget to load it?'
+ );
+ }
+ }
+ }
- let parsedURL;
+ return globalLocale._abbr;
+ }
- // normalize input
- if (!isRequest(input)) {
- if (input && input.href) {
- // in order to support Node.js' Url objects; though WHATWG's URL objects
- // will fall into this branch also (since their `toString()` will return
- // `href` property anyway)
- parsedURL = parse_url(input.href);
- } else {
- // coerce input to a string before attempting to parse
- parsedURL = parse_url(`${input}`);
- }
- input = {};
- } else {
- parsedURL = parse_url(input.url);
- }
+ function defineLocale(name, config) {
+ if (config !== null) {
+ var locale,
+ parentConfig = baseConfig;
+ config.abbr = name;
+ if (locales[name] != null) {
+ deprecateSimple(
+ 'defineLocaleOverride',
+ 'use moment.updateLocale(localeName, config) to change ' +
+ 'an existing locale. moment.defineLocale(localeName, ' +
+ 'config) should only be used for creating a new locale ' +
+ 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'
+ );
+ parentConfig = locales[name]._config;
+ } else if (config.parentLocale != null) {
+ if (locales[config.parentLocale] != null) {
+ parentConfig = locales[config.parentLocale]._config;
+ } else {
+ locale = loadLocale(config.parentLocale);
+ if (locale != null) {
+ parentConfig = locale._config;
+ } else {
+ if (!localeFamilies[config.parentLocale]) {
+ localeFamilies[config.parentLocale] = [];
+ }
+ localeFamilies[config.parentLocale].push({
+ name: name,
+ config: config,
+ });
+ return null;
+ }
+ }
+ }
+ locales[name] = new Locale(mergeConfigs(parentConfig, config));
- let method = init.method || input.method || 'GET';
- method = method.toUpperCase();
+ if (localeFamilies[name]) {
+ localeFamilies[name].forEach(function (x) {
+ defineLocale(x.name, x.config);
+ });
+ }
- if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
- throw new TypeError('Request with GET/HEAD method cannot have body');
- }
+ // backwards compat for now: also set the locale
+ // make sure we set the locale AFTER all child locales have been
+ // created, so we won't end up with the child locale set.
+ getSetGlobalLocale(name);
- let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;
-
- Body.call(this, inputBody, {
- timeout: init.timeout || input.timeout || 0,
- size: init.size || input.size || 0
- });
+ return locales[name];
+ } else {
+ // useful for testing
+ delete locales[name];
+ return null;
+ }
+ }
- const headers = new Headers(init.headers || input.headers || {});
+ function updateLocale(name, config) {
+ if (config != null) {
+ var locale,
+ tmpLocale,
+ parentConfig = baseConfig;
- if (inputBody != null && !headers.has('Content-Type')) {
- const contentType = extractContentType(inputBody);
- if (contentType) {
- headers.append('Content-Type', contentType);
- }
- }
+ if (locales[name] != null && locales[name].parentLocale != null) {
+ // Update existing child locale in-place to avoid memory-leaks
+ locales[name].set(mergeConfigs(locales[name]._config, config));
+ } else {
+ // MERGE
+ tmpLocale = loadLocale(name);
+ if (tmpLocale != null) {
+ parentConfig = tmpLocale._config;
+ }
+ config = mergeConfigs(parentConfig, config);
+ if (tmpLocale == null) {
+ // updateLocale is called for creating a new locale
+ // Set abbr so it will have a name (getters return
+ // undefined otherwise).
+ config.abbr = name;
+ }
+ locale = new Locale(config);
+ locale.parentLocale = locales[name];
+ locales[name] = locale;
+ }
- let signal = isRequest(input) ? input.signal : null;
- if ('signal' in init) signal = init.signal;
+ // backwards compat for now: also set the locale
+ getSetGlobalLocale(name);
+ } else {
+ // pass null for config to unupdate, useful for tests
+ if (locales[name] != null) {
+ if (locales[name].parentLocale != null) {
+ locales[name] = locales[name].parentLocale;
+ if (name === getSetGlobalLocale()) {
+ getSetGlobalLocale(name);
+ }
+ } else if (locales[name] != null) {
+ delete locales[name];
+ }
+ }
+ }
+ return locales[name];
+ }
- if (signal != null && !isAbortSignal(signal)) {
- throw new TypeError('Expected signal to be an instanceof AbortSignal');
- }
+ // returns locale data
+ function getLocale(key) {
+ var locale;
- this[INTERNALS$2] = {
- method,
- redirect: init.redirect || input.redirect || 'follow',
- headers,
- parsedURL,
- signal
- };
+ if (key && key._locale && key._locale._abbr) {
+ key = key._locale._abbr;
+ }
- // node-fetch-only options
- this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;
- this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;
- this.counter = init.counter || input.counter || 0;
- this.agent = init.agent || input.agent;
- }
+ if (!key) {
+ return globalLocale;
+ }
- get method() {
- return this[INTERNALS$2].method;
- }
+ if (!isArray(key)) {
+ //short-circuit everything else
+ locale = loadLocale(key);
+ if (locale) {
+ return locale;
+ }
+ key = [key];
+ }
- get url() {
- return format_url(this[INTERNALS$2].parsedURL);
- }
+ return chooseLocale(key);
+ }
- get headers() {
- return this[INTERNALS$2].headers;
- }
+ function listLocales() {
+ return keys(locales);
+ }
- get redirect() {
- return this[INTERNALS$2].redirect;
- }
+ function checkOverflow(m) {
+ var overflow,
+ a = m._a;
- get signal() {
- return this[INTERNALS$2].signal;
- }
+ if (a && getParsingFlags(m).overflow === -2) {
+ overflow =
+ a[MONTH] < 0 || a[MONTH] > 11
+ ? MONTH
+ : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])
+ ? DATE
+ : a[HOUR] < 0 ||
+ a[HOUR] > 24 ||
+ (a[HOUR] === 24 &&
+ (a[MINUTE] !== 0 ||
+ a[SECOND] !== 0 ||
+ a[MILLISECOND] !== 0))
+ ? HOUR
+ : a[MINUTE] < 0 || a[MINUTE] > 59
+ ? MINUTE
+ : a[SECOND] < 0 || a[SECOND] > 59
+ ? SECOND
+ : a[MILLISECOND] < 0 || a[MILLISECOND] > 999
+ ? MILLISECOND
+ : -1;
- /**
- * Clone this request
- *
- * @return Request
- */
- clone() {
- return new Request(this);
- }
-}
+ if (
+ getParsingFlags(m)._overflowDayOfYear &&
+ (overflow < YEAR || overflow > DATE)
+ ) {
+ overflow = DATE;
+ }
+ if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
+ overflow = WEEK;
+ }
+ if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
+ overflow = WEEKDAY;
+ }
-Body.mixIn(Request.prototype);
+ getParsingFlags(m).overflow = overflow;
+ }
-Object.defineProperty(Request.prototype, Symbol.toStringTag, {
- value: 'Request',
- writable: false,
- enumerable: false,
- configurable: true
-});
+ return m;
+ }
-Object.defineProperties(Request.prototype, {
- method: { enumerable: true },
- url: { enumerable: true },
- headers: { enumerable: true },
- redirect: { enumerable: true },
- clone: { enumerable: true },
- signal: { enumerable: true }
-});
+ // iso 8601 regex
+ // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
+ var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
+ basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
+ tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
+ isoDates = [
+ ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
+ ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
+ ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
+ ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
+ ['YYYY-DDD', /\d{4}-\d{3}/],
+ ['YYYY-MM', /\d{4}-\d\d/, false],
+ ['YYYYYYMMDD', /[+-]\d{10}/],
+ ['YYYYMMDD', /\d{8}/],
+ ['GGGG[W]WWE', /\d{4}W\d{3}/],
+ ['GGGG[W]WW', /\d{4}W\d{2}/, false],
+ ['YYYYDDD', /\d{7}/],
+ ['YYYYMM', /\d{6}/, false],
+ ['YYYY', /\d{4}/, false],
+ ],
+ // iso time formats and regexes
+ isoTimes = [
+ ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
+ ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
+ ['HH:mm:ss', /\d\d:\d\d:\d\d/],
+ ['HH:mm', /\d\d:\d\d/],
+ ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
+ ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
+ ['HHmmss', /\d\d\d\d\d\d/],
+ ['HHmm', /\d\d\d\d/],
+ ['HH', /\d\d/],
+ ],
+ aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
+ // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
+ rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
+ obsOffsets = {
+ UT: 0,
+ GMT: 0,
+ EDT: -4 * 60,
+ EST: -5 * 60,
+ CDT: -5 * 60,
+ CST: -6 * 60,
+ MDT: -6 * 60,
+ MST: -7 * 60,
+ PDT: -7 * 60,
+ PST: -8 * 60,
+ };
-/**
- * Convert a Request to Node.js http request options.
- *
- * @param Request A Request instance
- * @return Object The options object to be passed to http.request
- */
-function getNodeRequestOptions(request) {
- const parsedURL = request[INTERNALS$2].parsedURL;
- const headers = new Headers(request[INTERNALS$2].headers);
+ // date from iso format
+ function configFromISO(config) {
+ var i,
+ l,
+ string = config._i,
+ match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
+ allowTime,
+ dateFormat,
+ timeFormat,
+ tzFormat;
- // fetch step 1.3
- if (!headers.has('Accept')) {
- headers.set('Accept', '*/*');
- }
+ if (match) {
+ getParsingFlags(config).iso = true;
- // Basic fetch
- if (!parsedURL.protocol || !parsedURL.hostname) {
- throw new TypeError('Only absolute URLs are supported');
- }
+ for (i = 0, l = isoDates.length; i < l; i++) {
+ if (isoDates[i][1].exec(match[1])) {
+ dateFormat = isoDates[i][0];
+ allowTime = isoDates[i][2] !== false;
+ break;
+ }
+ }
+ if (dateFormat == null) {
+ config._isValid = false;
+ return;
+ }
+ if (match[3]) {
+ for (i = 0, l = isoTimes.length; i < l; i++) {
+ if (isoTimes[i][1].exec(match[3])) {
+ // match[2] should be 'T' or space
+ timeFormat = (match[2] || ' ') + isoTimes[i][0];
+ break;
+ }
+ }
+ if (timeFormat == null) {
+ config._isValid = false;
+ return;
+ }
+ }
+ if (!allowTime && timeFormat != null) {
+ config._isValid = false;
+ return;
+ }
+ if (match[4]) {
+ if (tzRegex.exec(match[4])) {
+ tzFormat = 'Z';
+ } else {
+ config._isValid = false;
+ return;
+ }
+ }
+ config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
+ configFromStringAndFormat(config);
+ } else {
+ config._isValid = false;
+ }
+ }
- if (!/^https?:$/.test(parsedURL.protocol)) {
- throw new TypeError('Only HTTP(S) protocols are supported');
- }
+ function extractFromRFC2822Strings(
+ yearStr,
+ monthStr,
+ dayStr,
+ hourStr,
+ minuteStr,
+ secondStr
+ ) {
+ var result = [
+ untruncateYear(yearStr),
+ defaultLocaleMonthsShort.indexOf(monthStr),
+ parseInt(dayStr, 10),
+ parseInt(hourStr, 10),
+ parseInt(minuteStr, 10),
+ ];
- if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {
- throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
- }
+ if (secondStr) {
+ result.push(parseInt(secondStr, 10));
+ }
- // HTTP-network-or-cache fetch steps 2.4-2.7
- let contentLengthValue = null;
- if (request.body == null && /^(POST|PUT)$/i.test(request.method)) {
- contentLengthValue = '0';
- }
- if (request.body != null) {
- const totalBytes = getTotalBytes(request);
- if (typeof totalBytes === 'number') {
- contentLengthValue = String(totalBytes);
- }
- }
- if (contentLengthValue) {
- headers.set('Content-Length', contentLengthValue);
- }
+ return result;
+ }
- // HTTP-network-or-cache fetch step 2.11
- if (!headers.has('User-Agent')) {
- headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
- }
+ function untruncateYear(yearStr) {
+ var year = parseInt(yearStr, 10);
+ if (year <= 49) {
+ return 2000 + year;
+ } else if (year <= 999) {
+ return 1900 + year;
+ }
+ return year;
+ }
- // HTTP-network-or-cache fetch step 2.15
- if (request.compress && !headers.has('Accept-Encoding')) {
- headers.set('Accept-Encoding', 'gzip,deflate');
- }
+ function preprocessRFC2822(s) {
+ // Remove comments and folding whitespace and replace multiple-spaces with a single space
+ return s
+ .replace(/\([^)]*\)|[\n\t]/g, ' ')
+ .replace(/(\s\s+)/g, ' ')
+ .replace(/^\s\s*/, '')
+ .replace(/\s\s*$/, '');
+ }
- let agent = request.agent;
- if (typeof agent === 'function') {
- agent = agent(parsedURL);
- }
+ function checkWeekday(weekdayStr, parsedInput, config) {
+ if (weekdayStr) {
+ // TODO: Replace the vanilla JS Date object with an independent day-of-week check.
+ var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
+ weekdayActual = new Date(
+ parsedInput[0],
+ parsedInput[1],
+ parsedInput[2]
+ ).getDay();
+ if (weekdayProvided !== weekdayActual) {
+ getParsingFlags(config).weekdayMismatch = true;
+ config._isValid = false;
+ return false;
+ }
+ }
+ return true;
+ }
- if (!headers.has('Connection') && !agent) {
- headers.set('Connection', 'close');
- }
+ function calculateOffset(obsOffset, militaryOffset, numOffset) {
+ if (obsOffset) {
+ return obsOffsets[obsOffset];
+ } else if (militaryOffset) {
+ // the only allowed military tz is Z
+ return 0;
+ } else {
+ var hm = parseInt(numOffset, 10),
+ m = hm % 100,
+ h = (hm - m) / 100;
+ return h * 60 + m;
+ }
+ }
- // HTTP-network fetch step 4.2
- // chunked encoding is handled by Node.js
+ // date and time from ref 2822 format
+ function configFromRFC2822(config) {
+ var match = rfc2822.exec(preprocessRFC2822(config._i)),
+ parsedArray;
+ if (match) {
+ parsedArray = extractFromRFC2822Strings(
+ match[4],
+ match[3],
+ match[2],
+ match[5],
+ match[6],
+ match[7]
+ );
+ if (!checkWeekday(match[1], parsedArray, config)) {
+ return;
+ }
- return Object.assign({}, parsedURL, {
- method: request.method,
- headers: exportNodeCompatibleHeaders(headers),
- agent
- });
-}
+ config._a = parsedArray;
+ config._tzm = calculateOffset(match[8], match[9], match[10]);
-/**
- * abort-error.js
- *
- * AbortError interface for cancelled requests
- */
+ config._d = createUTCDate.apply(null, config._a);
+ config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
-/**
- * Create AbortError instance
- *
- * @param String message Error message for human
- * @return AbortError
- */
-function AbortError(message) {
- Error.call(this, message);
+ getParsingFlags(config).rfc2822 = true;
+ } else {
+ config._isValid = false;
+ }
+ }
- this.type = 'aborted';
- this.message = message;
+ // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict
+ function configFromString(config) {
+ var matched = aspNetJsonRegex.exec(config._i);
+ if (matched !== null) {
+ config._d = new Date(+matched[1]);
+ return;
+ }
- // hide custom error implementation details from end-users
- Error.captureStackTrace(this, this.constructor);
-}
+ configFromISO(config);
+ if (config._isValid === false) {
+ delete config._isValid;
+ } else {
+ return;
+ }
-AbortError.prototype = Object.create(Error.prototype);
-AbortError.prototype.constructor = AbortError;
-AbortError.prototype.name = 'AbortError';
+ configFromRFC2822(config);
+ if (config._isValid === false) {
+ delete config._isValid;
+ } else {
+ return;
+ }
-// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
-const PassThrough$1 = Stream.PassThrough;
-const resolve_url = Url.resolve;
+ if (config._strict) {
+ config._isValid = false;
+ } else {
+ // Final attempt, use Input Fallback
+ hooks.createFromInputFallback(config);
+ }
+ }
-/**
- * Fetch function
- *
- * @param Mixed url Absolute url or Request instance
- * @param Object opts Fetch options
- * @return Promise
- */
-function fetch(url, opts) {
+ hooks.createFromInputFallback = deprecate(
+ 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
+ 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
+ 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',
+ function (config) {
+ config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
+ }
+ );
- // allow custom promise
- if (!fetch.Promise) {
- throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
- }
+ // Pick the first defined of two or three arguments.
+ function defaults(a, b, c) {
+ if (a != null) {
+ return a;
+ }
+ if (b != null) {
+ return b;
+ }
+ return c;
+ }
- Body.Promise = fetch.Promise;
-
- // wrap http.request into fetch
- return new fetch.Promise(function (resolve, reject) {
- // build request object
- const request = new Request(url, opts);
- const options = getNodeRequestOptions(request);
-
- const send = (options.protocol === 'https:' ? https : http).request;
- const signal = request.signal;
-
- let response = null;
-
- const abort = function abort() {
- let error = new AbortError('The user aborted a request.');
- reject(error);
- if (request.body && request.body instanceof Stream.Readable) {
- request.body.destroy(error);
- }
- if (!response || !response.body) return;
- response.body.emit('error', error);
- };
-
- if (signal && signal.aborted) {
- abort();
- return;
- }
-
- const abortAndFinalize = function abortAndFinalize() {
- abort();
- finalize();
- };
-
- // send request
- const req = send(options);
- let reqTimeout;
-
- if (signal) {
- signal.addEventListener('abort', abortAndFinalize);
- }
-
- function finalize() {
- req.abort();
- if (signal) signal.removeEventListener('abort', abortAndFinalize);
- clearTimeout(reqTimeout);
- }
-
- if (request.timeout) {
- req.once('socket', function (socket) {
- reqTimeout = setTimeout(function () {
- reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));
- finalize();
- }, request.timeout);
- });
- }
-
- req.on('error', function (err) {
- reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
- finalize();
- });
+ function currentDateArray(config) {
+ // hooks is actually the exported moment object
+ var nowValue = new Date(hooks.now());
+ if (config._useUTC) {
+ return [
+ nowValue.getUTCFullYear(),
+ nowValue.getUTCMonth(),
+ nowValue.getUTCDate(),
+ ];
+ }
+ return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
+ }
- req.on('response', function (res) {
- clearTimeout(reqTimeout);
+ // convert an array to a date.
+ // the array should mirror the parameters below
+ // note: all values past the year are optional and will default to the lowest possible value.
+ // [year, month, day , hour, minute, second, millisecond]
+ function configFromArray(config) {
+ var i,
+ date,
+ input = [],
+ currentDate,
+ expectedWeekday,
+ yearToUse;
- const headers = createHeadersLenient(res.headers);
+ if (config._d) {
+ return;
+ }
- // HTTP fetch step 5
- if (fetch.isRedirect(res.statusCode)) {
- // HTTP fetch step 5.2
- const location = headers.get('Location');
+ currentDate = currentDateArray(config);
- // HTTP fetch step 5.3
- const locationURL = location === null ? null : resolve_url(request.url, location);
+ //compute day of the year from weeks and weekdays
+ if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
+ dayOfYearFromWeekInfo(config);
+ }
- // HTTP fetch step 5.5
- switch (request.redirect) {
- case 'error':
- reject(new FetchError(`redirect mode is set to error: ${request.url}`, 'no-redirect'));
- finalize();
- return;
- case 'manual':
- // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
- if (locationURL !== null) {
- // handle corrupted header
- try {
- headers.set('Location', locationURL);
- } catch (err) {
- // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request
- reject(err);
- }
- }
- break;
- case 'follow':
- // HTTP-redirect fetch step 2
- if (locationURL === null) {
- break;
- }
+ //if the day of the year is set, figure out what it is
+ if (config._dayOfYear != null) {
+ yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
- // HTTP-redirect fetch step 5
- if (request.counter >= request.follow) {
- reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));
- finalize();
- return;
- }
+ if (
+ config._dayOfYear > daysInYear(yearToUse) ||
+ config._dayOfYear === 0
+ ) {
+ getParsingFlags(config)._overflowDayOfYear = true;
+ }
- // HTTP-redirect fetch step 6 (counter increment)
- // Create a new Request object.
- const requestOpts = {
- headers: new Headers(request.headers),
- follow: request.follow,
- counter: request.counter + 1,
- agent: request.agent,
- compress: request.compress,
- method: request.method,
- body: request.body,
- signal: request.signal,
- timeout: request.timeout
- };
+ date = createUTCDate(yearToUse, 0, config._dayOfYear);
+ config._a[MONTH] = date.getUTCMonth();
+ config._a[DATE] = date.getUTCDate();
+ }
- // HTTP-redirect fetch step 9
- if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
- reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
- finalize();
- return;
- }
+ // Default to current date.
+ // * if no year, month, day of month are given, default to today
+ // * if day of month is given, default month and year
+ // * if month is given, default only year
+ // * if year is given, don't default anything
+ for (i = 0; i < 3 && config._a[i] == null; ++i) {
+ config._a[i] = input[i] = currentDate[i];
+ }
- // HTTP-redirect fetch step 11
- if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {
- requestOpts.method = 'GET';
- requestOpts.body = undefined;
- requestOpts.headers.delete('content-length');
- }
+ // Zero out whatever was not defaulted, including time
+ for (; i < 7; i++) {
+ config._a[i] = input[i] =
+ config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];
+ }
- // HTTP-redirect fetch step 15
- resolve(fetch(new Request(locationURL, requestOpts)));
- finalize();
- return;
- }
- }
+ // Check for 24:00:00.000
+ if (
+ config._a[HOUR] === 24 &&
+ config._a[MINUTE] === 0 &&
+ config._a[SECOND] === 0 &&
+ config._a[MILLISECOND] === 0
+ ) {
+ config._nextDay = true;
+ config._a[HOUR] = 0;
+ }
- // prepare response
- res.once('end', function () {
- if (signal) signal.removeEventListener('abort', abortAndFinalize);
- });
- let body = res.pipe(new PassThrough$1());
+ config._d = (config._useUTC ? createUTCDate : createDate).apply(
+ null,
+ input
+ );
+ expectedWeekday = config._useUTC
+ ? config._d.getUTCDay()
+ : config._d.getDay();
- const response_options = {
- url: request.url,
- status: res.statusCode,
- statusText: res.statusMessage,
- headers: headers,
- size: request.size,
- timeout: request.timeout,
- counter: request.counter
- };
+ // Apply timezone offset from input. The actual utcOffset can be changed
+ // with parseZone.
+ if (config._tzm != null) {
+ config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
+ }
- // HTTP-network fetch step 12.1.1.3
- const codings = headers.get('Content-Encoding');
+ if (config._nextDay) {
+ config._a[HOUR] = 24;
+ }
- // HTTP-network fetch step 12.1.1.4: handle content codings
+ // check for mismatching day of week
+ if (
+ config._w &&
+ typeof config._w.d !== 'undefined' &&
+ config._w.d !== expectedWeekday
+ ) {
+ getParsingFlags(config).weekdayMismatch = true;
+ }
+ }
- // in following scenarios we ignore compression support
- // 1. compression support is disabled
- // 2. HEAD request
- // 3. no Content-Encoding header
- // 4. no content response (204)
- // 5. content not modified response (304)
- if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {
- response = new Response(body, response_options);
- resolve(response);
- return;
- }
+ function dayOfYearFromWeekInfo(config) {
+ var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;
- // For Node v6+
- // Be less strict when decoding compressed responses, since sometimes
- // servers send slightly invalid responses that are still accepted
- // by common browsers.
- // Always using Z_SYNC_FLUSH is what cURL does.
- const zlibOptions = {
- flush: zlib.Z_SYNC_FLUSH,
- finishFlush: zlib.Z_SYNC_FLUSH
- };
+ w = config._w;
+ if (w.GG != null || w.W != null || w.E != null) {
+ dow = 1;
+ doy = 4;
- // for gzip
- if (codings == 'gzip' || codings == 'x-gzip') {
- body = body.pipe(zlib.createGunzip(zlibOptions));
- response = new Response(body, response_options);
- resolve(response);
- return;
- }
+ // TODO: We need to take the current isoWeekYear, but that depends on
+ // how we interpret now (local, utc, fixed offset). So create
+ // a now version of current config (take local/utc/offset flags, and
+ // create now).
+ weekYear = defaults(
+ w.GG,
+ config._a[YEAR],
+ weekOfYear(createLocal(), 1, 4).year
+ );
+ week = defaults(w.W, 1);
+ weekday = defaults(w.E, 1);
+ if (weekday < 1 || weekday > 7) {
+ weekdayOverflow = true;
+ }
+ } else {
+ dow = config._locale._week.dow;
+ doy = config._locale._week.doy;
- // for deflate
- if (codings == 'deflate' || codings == 'x-deflate') {
- // handle the infamous raw deflate response from old servers
- // a hack for old IIS and Apache servers
- const raw = res.pipe(new PassThrough$1());
- raw.once('data', function (chunk) {
- // see http://stackoverflow.com/questions/37519828
- if ((chunk[0] & 0x0F) === 0x08) {
- body = body.pipe(zlib.createInflate());
- } else {
- body = body.pipe(zlib.createInflateRaw());
- }
- response = new Response(body, response_options);
- resolve(response);
- });
- return;
- }
+ curWeek = weekOfYear(createLocal(), dow, doy);
- // for br
- if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {
- body = body.pipe(zlib.createBrotliDecompress());
- response = new Response(body, response_options);
- resolve(response);
- return;
- }
+ weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
- // otherwise, use response as-is
- response = new Response(body, response_options);
- resolve(response);
- });
+ // Default to current week.
+ week = defaults(w.w, curWeek.week);
- writeToStream(req, request);
- });
-}
-/**
- * Redirect code matching
- *
- * @param Number code Status code
- * @return Boolean
- */
-fetch.isRedirect = function (code) {
- return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
-};
+ if (w.d != null) {
+ // weekday -- low day numbers are considered next week
+ weekday = w.d;
+ if (weekday < 0 || weekday > 6) {
+ weekdayOverflow = true;
+ }
+ } else if (w.e != null) {
+ // local weekday -- counting starts from beginning of week
+ weekday = w.e + dow;
+ if (w.e < 0 || w.e > 6) {
+ weekdayOverflow = true;
+ }
+ } else {
+ // default to beginning of week
+ weekday = dow;
+ }
+ }
+ if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
+ getParsingFlags(config)._overflowWeeks = true;
+ } else if (weekdayOverflow != null) {
+ getParsingFlags(config)._overflowWeekday = true;
+ } else {
+ temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
+ config._a[YEAR] = temp.year;
+ config._dayOfYear = temp.dayOfYear;
+ }
+ }
-// expose Promise
-fetch.Promise = global.Promise;
+ // constant that refers to the ISO standard
+ hooks.ISO_8601 = function () {};
-module.exports = exports = fetch;
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.default = exports;
-exports.Headers = Headers;
-exports.Request = Request;
-exports.Response = Response;
-exports.FetchError = FetchError;
+ // constant that refers to the RFC 2822 form
+ hooks.RFC_2822 = function () {};
+ // date from string and format string
+ function configFromStringAndFormat(config) {
+ // TODO: Move this to another part of the creation flow to prevent circular deps
+ if (config._f === hooks.ISO_8601) {
+ configFromISO(config);
+ return;
+ }
+ if (config._f === hooks.RFC_2822) {
+ configFromRFC2822(config);
+ return;
+ }
+ config._a = [];
+ getParsingFlags(config).empty = true;
-/***/ }),
-/* 455 */,
-/* 456 */,
-/* 457 */,
-/* 458 */,
-/* 459 */,
-/* 460 */,
-/* 461 */,
-/* 462 */
-/***/ (function(module) {
+ // This array is used to make a Date, either with `new Date` or `Date.UTC`
+ var string = '' + config._i,
+ i,
+ parsedInput,
+ tokens,
+ token,
+ skipped,
+ stringLength = string.length,
+ totalParsedInputLength = 0,
+ era;
-"use strict";
+ tokens =
+ expandFormat(config._f, config._locale).match(formattingTokens) || [];
+ for (i = 0; i < tokens.length; i++) {
+ token = tokens[i];
+ parsedInput = (string.match(getParseRegexForToken(token, config)) ||
+ [])[0];
+ if (parsedInput) {
+ skipped = string.substr(0, string.indexOf(parsedInput));
+ if (skipped.length > 0) {
+ getParsingFlags(config).unusedInput.push(skipped);
+ }
+ string = string.slice(
+ string.indexOf(parsedInput) + parsedInput.length
+ );
+ totalParsedInputLength += parsedInput.length;
+ }
+ // don't parse if it's not a known token
+ if (formatTokenFunctions[token]) {
+ if (parsedInput) {
+ getParsingFlags(config).empty = false;
+ } else {
+ getParsingFlags(config).unusedTokens.push(token);
+ }
+ addTimeToArrayFromToken(token, parsedInput, config);
+ } else if (config._strict && !parsedInput) {
+ getParsingFlags(config).unusedTokens.push(token);
+ }
+ }
-// See http://www.robvanderwoude.com/escapechars.php
-const metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g;
+ // add remaining unparsed input length to the string
+ getParsingFlags(config).charsLeftOver =
+ stringLength - totalParsedInputLength;
+ if (string.length > 0) {
+ getParsingFlags(config).unusedInput.push(string);
+ }
-function escapeCommand(arg) {
- // Escape meta chars
- arg = arg.replace(metaCharsRegExp, '^$1');
+ // clear _12h flag if hour is <= 12
+ if (
+ config._a[HOUR] <= 12 &&
+ getParsingFlags(config).bigHour === true &&
+ config._a[HOUR] > 0
+ ) {
+ getParsingFlags(config).bigHour = undefined;
+ }
- return arg;
-}
+ getParsingFlags(config).parsedDateParts = config._a.slice(0);
+ getParsingFlags(config).meridiem = config._meridiem;
+ // handle meridiem
+ config._a[HOUR] = meridiemFixWrap(
+ config._locale,
+ config._a[HOUR],
+ config._meridiem
+ );
-function escapeArgument(arg, doubleEscapeMetaChars) {
- // Convert to string
- arg = `${arg}`;
+ // handle era
+ era = getParsingFlags(config).era;
+ if (era !== null) {
+ config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
+ }
- // Algorithm below is based on https://qntm.org/cmd
+ configFromArray(config);
+ checkOverflow(config);
+ }
- // Sequence of backslashes followed by a double quote:
- // double up all the backslashes and escape the double quote
- arg = arg.replace(/(\\*)"/g, '$1$1\\"');
+ function meridiemFixWrap(locale, hour, meridiem) {
+ var isPm;
- // Sequence of backslashes followed by the end of the string
- // (which will become a double quote later):
- // double up all the backslashes
- arg = arg.replace(/(\\*)$/, '$1$1');
+ if (meridiem == null) {
+ // nothing to do
+ return hour;
+ }
+ if (locale.meridiemHour != null) {
+ return locale.meridiemHour(hour, meridiem);
+ } else if (locale.isPM != null) {
+ // Fallback
+ isPm = locale.isPM(meridiem);
+ if (isPm && hour < 12) {
+ hour += 12;
+ }
+ if (!isPm && hour === 12) {
+ hour = 0;
+ }
+ return hour;
+ } else {
+ // this is not supposed to happen
+ return hour;
+ }
+ }
- // All other backslashes occur literally
+ // date from string and array of format strings
+ function configFromStringAndArray(config) {
+ var tempConfig,
+ bestMoment,
+ scoreToBeat,
+ i,
+ currentScore,
+ validFormatFound,
+ bestFormatIsValid = false;
- // Quote the whole thing:
- arg = `"${arg}"`;
+ if (config._f.length === 0) {
+ getParsingFlags(config).invalidFormat = true;
+ config._d = new Date(NaN);
+ return;
+ }
- // Escape meta chars
- arg = arg.replace(metaCharsRegExp, '^$1');
+ for (i = 0; i < config._f.length; i++) {
+ currentScore = 0;
+ validFormatFound = false;
+ tempConfig = copyConfig({}, config);
+ if (config._useUTC != null) {
+ tempConfig._useUTC = config._useUTC;
+ }
+ tempConfig._f = config._f[i];
+ configFromStringAndFormat(tempConfig);
- // Double escape meta chars if necessary
- if (doubleEscapeMetaChars) {
- arg = arg.replace(metaCharsRegExp, '^$1');
- }
+ if (isValid(tempConfig)) {
+ validFormatFound = true;
+ }
- return arg;
-}
+ // if there is any input that was not parsed add a penalty for that format
+ currentScore += getParsingFlags(tempConfig).charsLeftOver;
-module.exports.command = escapeCommand;
-module.exports.argument = escapeArgument;
+ //or tokens
+ currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
+ getParsingFlags(tempConfig).score = currentScore;
-/***/ }),
-/* 463 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, '__esModule', { value: true });
+ if (!bestFormatIsValid) {
+ if (
+ scoreToBeat == null ||
+ currentScore < scoreToBeat ||
+ validFormatFound
+ ) {
+ scoreToBeat = currentScore;
+ bestMoment = tempConfig;
+ if (validFormatFound) {
+ bestFormatIsValid = true;
+ }
+ }
+ } else {
+ if (currentScore < scoreToBeat) {
+ scoreToBeat = currentScore;
+ bestMoment = tempConfig;
+ }
+ }
+ }
-function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
+ extend(config, bestMoment || tempConfig);
+ }
-var deprecation = __webpack_require__(692);
-var once = _interopDefault(__webpack_require__(969));
+ function configFromObject(config) {
+ if (config._d) {
+ return;
+ }
-const logOnce = once(deprecation => console.warn(deprecation));
-/**
- * Error with extra properties to help with debugging
- */
+ var i = normalizeObjectUnits(config._i),
+ dayOrDate = i.day === undefined ? i.date : i.day;
+ config._a = map(
+ [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
+ function (obj) {
+ return obj && parseInt(obj, 10);
+ }
+ );
-class RequestError extends Error {
- constructor(message, statusCode, options) {
- super(message); // Maintains proper stack trace (only available on V8)
+ configFromArray(config);
+ }
- /* istanbul ignore next */
+ function createFromConfig(config) {
+ var res = new Moment(checkOverflow(prepareConfig(config)));
+ if (res._nextDay) {
+ // Adding is smart enough around DST
+ res.add(1, 'd');
+ res._nextDay = undefined;
+ }
- if (Error.captureStackTrace) {
- Error.captureStackTrace(this, this.constructor);
+ return res;
}
- this.name = "HttpError";
- this.status = statusCode;
- Object.defineProperty(this, "code", {
- get() {
- logOnce(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`."));
- return statusCode;
- }
-
- });
- this.headers = options.headers || {}; // redact request credentials without mutating original request options
+ function prepareConfig(config) {
+ var input = config._i,
+ format = config._f;
- const requestCopy = Object.assign({}, options.request);
+ config._locale = config._locale || getLocale(config._l);
- if (options.request.headers.authorization) {
- requestCopy.headers = Object.assign({}, options.request.headers, {
- authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]")
- });
- }
+ if (input === null || (format === undefined && input === '')) {
+ return createInvalid({ nullInput: true });
+ }
- requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit
- // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications
- .replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended
- // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header
- .replace(/\baccess_token=\w+/g, "access_token=[REDACTED]");
- this.request = requestCopy;
- }
+ if (typeof input === 'string') {
+ config._i = input = config._locale.preparse(input);
+ }
-}
+ if (isMoment(input)) {
+ return new Moment(checkOverflow(input));
+ } else if (isDate(input)) {
+ config._d = input;
+ } else if (isArray(format)) {
+ configFromStringAndArray(config);
+ } else if (format) {
+ configFromStringAndFormat(config);
+ } else {
+ configFromInput(config);
+ }
-exports.RequestError = RequestError;
-//# sourceMappingURL=index.js.map
+ if (!isValid(config)) {
+ config._d = null;
+ }
+ return config;
+ }
-/***/ }),
-/* 464 */,
-/* 465 */,
-/* 466 */,
-/* 467 */,
-/* 468 */,
-/* 469 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+ function configFromInput(config) {
+ var input = config._i;
+ if (isUndefined(input)) {
+ config._d = new Date(hooks.now());
+ } else if (isDate(input)) {
+ config._d = new Date(input.valueOf());
+ } else if (typeof input === 'string') {
+ configFromString(config);
+ } else if (isArray(input)) {
+ config._a = map(input.slice(0), function (obj) {
+ return parseInt(obj, 10);
+ });
+ configFromArray(config);
+ } else if (isObject(input)) {
+ configFromObject(config);
+ } else if (isNumber(input)) {
+ // from milliseconds
+ config._d = new Date(input);
+ } else {
+ hooks.createFromInputFallback(config);
+ }
+ }
-"use strict";
+ function createLocalOrUTC(input, format, locale, strict, isUTC) {
+ var c = {};
+ if (format === true || format === false) {
+ strict = format;
+ format = undefined;
+ }
-const jsonFile = __webpack_require__(666)
+ if (locale === true || locale === false) {
+ strict = locale;
+ locale = undefined;
+ }
-module.exports = {
- // jsonfile exports
- readJson: jsonFile.readFile,
- readJsonSync: jsonFile.readFileSync,
- writeJson: jsonFile.writeFile,
- writeJsonSync: jsonFile.writeFileSync
-}
+ if (
+ (isObject(input) && isObjectEmpty(input)) ||
+ (isArray(input) && input.length === 0)
+ ) {
+ input = undefined;
+ }
+ // object construction must be done this way.
+ // https://github.com/moment/moment/issues/1423
+ c._isAMomentObject = true;
+ c._useUTC = c._isUTC = isUTC;
+ c._l = locale;
+ c._i = input;
+ c._f = format;
+ c._strict = strict;
+ return createFromConfig(c);
+ }
-/***/ }),
-/* 470 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
+ function createLocal(input, format, locale, strict) {
+ return createLocalOrUTC(input, format, locale, strict, false);
+ }
-"use strict";
+ var prototypeMin = deprecate(
+ 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
+ function () {
+ var other = createLocal.apply(null, arguments);
+ if (this.isValid() && other.isValid()) {
+ return other < this ? this : other;
+ } else {
+ return createInvalid();
+ }
+ }
+ ),
+ prototypeMax = deprecate(
+ 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
+ function () {
+ var other = createLocal.apply(null, arguments);
+ if (this.isValid() && other.isValid()) {
+ return other > this ? this : other;
+ } else {
+ return createInvalid();
+ }
+ }
+ );
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
- result["default"] = mod;
- return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const command_1 = __webpack_require__(431);
-const os = __importStar(__webpack_require__(87));
-const path = __importStar(__webpack_require__(622));
-/**
- * The code to exit an action
- */
-var ExitCode;
-(function (ExitCode) {
- /**
- * A code indicating that the action was successful
- */
- ExitCode[ExitCode["Success"] = 0] = "Success";
- /**
- * A code indicating that the action was a failure
- */
- ExitCode[ExitCode["Failure"] = 1] = "Failure";
-})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
-//-----------------------------------------------------------------------
-// Variables
-//-----------------------------------------------------------------------
-/**
- * Sets env variable for this action and future actions in the job
- * @param name the name of the variable to set
- * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
- */
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-function exportVariable(name, val) {
- const convertedVal = command_1.toCommandValue(val);
- process.env[name] = convertedVal;
- command_1.issueCommand('set-env', { name }, convertedVal);
-}
-exports.exportVariable = exportVariable;
-/**
- * Registers a secret which will get masked from logs
- * @param secret value of the secret
- */
-function setSecret(secret) {
- command_1.issueCommand('add-mask', {}, secret);
-}
-exports.setSecret = setSecret;
-/**
- * Prepends inputPath to the PATH (for this action and future actions)
- * @param inputPath
- */
-function addPath(inputPath) {
- command_1.issueCommand('add-path', {}, inputPath);
- process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
-}
-exports.addPath = addPath;
-/**
- * Gets the value of an input. The value is also trimmed.
- *
- * @param name name of the input to get
- * @param options optional. See InputOptions.
- * @returns string
- */
-function getInput(name, options) {
- const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
- if (options && options.required && !val) {
- throw new Error(`Input required and not supplied: ${name}`);
- }
- return val.trim();
-}
-exports.getInput = getInput;
-/**
- * Sets the value of an output.
- *
- * @param name name of the output to set
- * @param value value to store. Non-string values will be converted to a string via JSON.stringify
- */
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-function setOutput(name, value) {
- command_1.issueCommand('set-output', { name }, value);
-}
-exports.setOutput = setOutput;
-/**
- * Enables or disables the echoing of commands into stdout for the rest of the step.
- * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
- *
- */
-function setCommandEcho(enabled) {
- command_1.issue('echo', enabled ? 'on' : 'off');
-}
-exports.setCommandEcho = setCommandEcho;
-//-----------------------------------------------------------------------
-// Results
-//-----------------------------------------------------------------------
-/**
- * Sets the action status to failed.
- * When the action exits it will be with an exit code of 1
- * @param message add error issue message
- */
-function setFailed(message) {
- process.exitCode = ExitCode.Failure;
- error(message);
-}
-exports.setFailed = setFailed;
-//-----------------------------------------------------------------------
-// Logging Commands
-//-----------------------------------------------------------------------
-/**
- * Gets whether Actions Step Debug is on or not
- */
-function isDebug() {
- return process.env['RUNNER_DEBUG'] === '1';
-}
-exports.isDebug = isDebug;
-/**
- * Writes debug message to user log
- * @param message debug message
- */
-function debug(message) {
- command_1.issueCommand('debug', {}, message);
-}
-exports.debug = debug;
-/**
- * Adds an error issue
- * @param message error issue message. Errors will be converted to string via toString()
- */
-function error(message) {
- command_1.issue('error', message instanceof Error ? message.toString() : message);
-}
-exports.error = error;
-/**
- * Adds an warning issue
- * @param message warning issue message. Errors will be converted to string via toString()
- */
-function warning(message) {
- command_1.issue('warning', message instanceof Error ? message.toString() : message);
-}
-exports.warning = warning;
-/**
- * Writes info to log with console.log.
- * @param message info message
- */
-function info(message) {
- process.stdout.write(message + os.EOL);
-}
-exports.info = info;
-/**
- * Begin an output group.
- *
- * Output until the next `groupEnd` will be foldable in this group
- *
- * @param name The name of the output group
- */
-function startGroup(name) {
- command_1.issue('group', name);
-}
-exports.startGroup = startGroup;
-/**
- * End an output group.
- */
-function endGroup() {
- command_1.issue('endgroup');
-}
-exports.endGroup = endGroup;
-/**
- * Wrap an asynchronous function call in a group.
- *
- * Returns the same type as the function itself.
- *
- * @param name The name of the group
- * @param fn The function to wrap in the group
- */
-function group(name, fn) {
- return __awaiter(this, void 0, void 0, function* () {
- startGroup(name);
- let result;
- try {
- result = yield fn();
+ // Pick a moment m from moments so that m[fn](other) is true for all
+ // other. This relies on the function fn to be transitive.
+ //
+ // moments should either be an array of moment objects or an array, whose
+ // first element is an array of moment objects.
+ function pickBy(fn, moments) {
+ var res, i;
+ if (moments.length === 1 && isArray(moments[0])) {
+ moments = moments[0];
}
- finally {
- endGroup();
+ if (!moments.length) {
+ return createLocal();
}
- return result;
- });
-}
-exports.group = group;
-//-----------------------------------------------------------------------
-// Wrapper action state
-//-----------------------------------------------------------------------
-/**
- * Saves state for current action, the state can only be retrieved by this action's post job execution.
- *
- * @param name name of the state to store
- * @param value value to store. Non-string values will be converted to a string via JSON.stringify
- */
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-function saveState(name, value) {
- command_1.issueCommand('save-state', { name }, value);
-}
-exports.saveState = saveState;
-/**
- * Gets the value of an state set by this action's main execution.
- *
- * @param name name of the state to get
- * @returns string
- */
-function getState(name) {
- return process.env[`STATE_${name}`] || '';
-}
-exports.getState = getState;
-//# sourceMappingURL=core.js.map
+ res = moments[0];
+ for (i = 1; i < moments.length; ++i) {
+ if (!moments[i].isValid() || moments[i][fn](res)) {
+ res = moments[i];
+ }
+ }
+ return res;
+ }
-/***/ }),
-/* 471 */,
-/* 472 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+ // TODO: Use [].sort instead?
+ function min() {
+ var args = [].slice.call(arguments, 0);
-"use strict";
+ return pickBy('isBefore', args);
+ }
+ function max() {
+ var args = [].slice.call(arguments, 0);
-const file = __webpack_require__(149)
-const link = __webpack_require__(900)
-const symlink = __webpack_require__(849)
+ return pickBy('isAfter', args);
+ }
-module.exports = {
- // file
- createFile: file.createFile,
- createFileSync: file.createFileSync,
- ensureFile: file.createFile,
- ensureFileSync: file.createFileSync,
- // link
- createLink: link.createLink,
- createLinkSync: link.createLinkSync,
- ensureLink: link.createLink,
- ensureLinkSync: link.createLinkSync,
- // symlink
- createSymlink: symlink.createSymlink,
- createSymlinkSync: symlink.createSymlinkSync,
- ensureSymlink: symlink.createSymlink,
- ensureSymlinkSync: symlink.createSymlinkSync
-}
+ var now = function () {
+ return Date.now ? Date.now() : +new Date();
+ };
+ var ordering = [
+ 'year',
+ 'quarter',
+ 'month',
+ 'week',
+ 'day',
+ 'hour',
+ 'minute',
+ 'second',
+ 'millisecond',
+ ];
-/***/ }),
-/* 473 */,
-/* 474 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+ function isDurationValid(m) {
+ var key,
+ unitHasDecimal = false,
+ i;
+ for (key in m) {
+ if (
+ hasOwnProp(m, key) &&
+ !(
+ indexOf.call(ordering, key) !== -1 &&
+ (m[key] == null || !isNaN(m[key]))
+ )
+ ) {
+ return false;
+ }
+ }
-"use strict";
+ for (i = 0; i < ordering.length; ++i) {
+ if (m[ordering[i]]) {
+ if (unitHasDecimal) {
+ return false; // only allow non-integers for smallest unit
+ }
+ if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
+ unitHasDecimal = true;
+ }
+ }
+ }
+ return true;
+ }
-const fs = __webpack_require__(598)
-const path = __webpack_require__(622)
-const assert = __webpack_require__(357)
-
-const isWindows = (process.platform === 'win32')
-
-function defaults (options) {
- const methods = [
- 'unlink',
- 'chmod',
- 'stat',
- 'lstat',
- 'rmdir',
- 'readdir'
- ]
- methods.forEach(m => {
- options[m] = options[m] || fs[m]
- m = m + 'Sync'
- options[m] = options[m] || fs[m]
- })
+ function isValid$1() {
+ return this._isValid;
+ }
- options.maxBusyTries = options.maxBusyTries || 3
-}
+ function createInvalid$1() {
+ return createDuration(NaN);
+ }
-function rimraf (p, options, cb) {
- let busyTries = 0
+ function Duration(duration) {
+ var normalizedInput = normalizeObjectUnits(duration),
+ years = normalizedInput.year || 0,
+ quarters = normalizedInput.quarter || 0,
+ months = normalizedInput.month || 0,
+ weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
+ days = normalizedInput.day || 0,
+ hours = normalizedInput.hour || 0,
+ minutes = normalizedInput.minute || 0,
+ seconds = normalizedInput.second || 0,
+ milliseconds = normalizedInput.millisecond || 0;
- if (typeof options === 'function') {
- cb = options
- options = {}
- }
+ this._isValid = isDurationValid(normalizedInput);
- assert(p, 'rimraf: missing path')
- assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')
- assert.strictEqual(typeof cb, 'function', 'rimraf: callback function required')
- assert(options, 'rimraf: invalid options argument provided')
- assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')
+ // representation for dateAddRemove
+ this._milliseconds =
+ +milliseconds +
+ seconds * 1e3 + // 1000
+ minutes * 6e4 + // 1000 * 60
+ hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
+ // Because of dateAddRemove treats 24 hours as different from a
+ // day when working around DST, we need to store them separately
+ this._days = +days + weeks * 7;
+ // It is impossible to translate months into days without knowing
+ // which months you are are talking about, so we have to store
+ // it separately.
+ this._months = +months + quarters * 3 + years * 12;
- defaults(options)
+ this._data = {};
- rimraf_(p, options, function CB (er) {
- if (er) {
- if ((er.code === 'EBUSY' || er.code === 'ENOTEMPTY' || er.code === 'EPERM') &&
- busyTries < options.maxBusyTries) {
- busyTries++
- const time = busyTries * 100
- // try again, with the same exact callback as this one.
- return setTimeout(() => rimraf_(p, options, CB), time)
- }
+ this._locale = getLocale();
- // already gone
- if (er.code === 'ENOENT') er = null
+ this._bubble();
}
- cb(er)
- })
-}
-
-// Two possible strategies.
-// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR
-// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR
-//
-// Both result in an extra syscall when you guess wrong. However, there
-// are likely far more normal files in the world than directories. This
-// is based on the assumption that a the average number of files per
-// directory is >= 1.
-//
-// If anyone ever complains about this, then I guess the strategy could
-// be made configurable somehow. But until then, YAGNI.
-function rimraf_ (p, options, cb) {
- assert(p)
- assert(options)
- assert(typeof cb === 'function')
+ function isDuration(obj) {
+ return obj instanceof Duration;
+ }
- // sunos lets the root user unlink directories, which is... weird.
- // so we have to lstat here and make sure it's not a dir.
- options.lstat(p, (er, st) => {
- if (er && er.code === 'ENOENT') {
- return cb(null)
+ function absRound(number) {
+ if (number < 0) {
+ return Math.round(-1 * number) * -1;
+ } else {
+ return Math.round(number);
+ }
}
- // Windows can EPERM on stat. Life is suffering.
- if (er && er.code === 'EPERM' && isWindows) {
- return fixWinEPERM(p, options, er, cb)
+ // compare two arrays, return the number of differences
+ function compareArrays(array1, array2, dontConvert) {
+ var len = Math.min(array1.length, array2.length),
+ lengthDiff = Math.abs(array1.length - array2.length),
+ diffs = 0,
+ i;
+ for (i = 0; i < len; i++) {
+ if (
+ (dontConvert && array1[i] !== array2[i]) ||
+ (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))
+ ) {
+ diffs++;
+ }
+ }
+ return diffs + lengthDiff;
}
- if (st && st.isDirectory()) {
- return rmdir(p, options, er, cb)
+ // FORMATTING
+
+ function offset(token, separator) {
+ addFormatToken(token, 0, 0, function () {
+ var offset = this.utcOffset(),
+ sign = '+';
+ if (offset < 0) {
+ offset = -offset;
+ sign = '-';
+ }
+ return (
+ sign +
+ zeroFill(~~(offset / 60), 2) +
+ separator +
+ zeroFill(~~offset % 60, 2)
+ );
+ });
}
- options.unlink(p, er => {
- if (er) {
- if (er.code === 'ENOENT') {
- return cb(null)
- }
- if (er.code === 'EPERM') {
- return (isWindows)
- ? fixWinEPERM(p, options, er, cb)
- : rmdir(p, options, er, cb)
- }
- if (er.code === 'EISDIR') {
- return rmdir(p, options, er, cb)
- }
- }
- return cb(er)
- })
- })
-}
+ offset('Z', ':');
+ offset('ZZ', '');
-function fixWinEPERM (p, options, er, cb) {
- assert(p)
- assert(options)
- assert(typeof cb === 'function')
- if (er) {
- assert(er instanceof Error)
- }
+ // PARSING
- options.chmod(p, 0o666, er2 => {
- if (er2) {
- cb(er2.code === 'ENOENT' ? null : er)
- } else {
- options.stat(p, (er3, stats) => {
- if (er3) {
- cb(er3.code === 'ENOENT' ? null : er)
- } else if (stats.isDirectory()) {
- rmdir(p, options, er, cb)
- } else {
- options.unlink(p, cb)
- }
- })
- }
- })
-}
+ addRegexToken('Z', matchShortOffset);
+ addRegexToken('ZZ', matchShortOffset);
+ addParseToken(['Z', 'ZZ'], function (input, array, config) {
+ config._useUTC = true;
+ config._tzm = offsetFromString(matchShortOffset, input);
+ });
-function fixWinEPERMSync (p, options, er) {
- let stats
+ // HELPERS
- assert(p)
- assert(options)
- if (er) {
- assert(er instanceof Error)
- }
+ // timezone chunker
+ // '+10:00' > ['10', '00']
+ // '-1530' > ['-15', '30']
+ var chunkOffset = /([\+\-]|\d\d)/gi;
- try {
- options.chmodSync(p, 0o666)
- } catch (er2) {
- if (er2.code === 'ENOENT') {
- return
- } else {
- throw er
- }
- }
+ function offsetFromString(matcher, string) {
+ var matches = (string || '').match(matcher),
+ chunk,
+ parts,
+ minutes;
- try {
- stats = options.statSync(p)
- } catch (er3) {
- if (er3.code === 'ENOENT') {
- return
- } else {
- throw er
- }
- }
+ if (matches === null) {
+ return null;
+ }
- if (stats.isDirectory()) {
- rmdirSync(p, options, er)
- } else {
- options.unlinkSync(p)
- }
-}
+ chunk = matches[matches.length - 1] || [];
+ parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
+ minutes = +(parts[1] * 60) + toInt(parts[2]);
-function rmdir (p, options, originalEr, cb) {
- assert(p)
- assert(options)
- if (originalEr) {
- assert(originalEr instanceof Error)
- }
- assert(typeof cb === 'function')
+ return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;
+ }
- // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
- // if we guessed wrong, and it's not a directory, then
- // raise the original error.
- options.rmdir(p, er => {
- if (er && (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM')) {
- rmkids(p, options, cb)
- } else if (er && er.code === 'ENOTDIR') {
- cb(originalEr)
- } else {
- cb(er)
+ // Return a moment from input, that is local/utc/zone equivalent to model.
+ function cloneWithOffset(input, model) {
+ var res, diff;
+ if (model._isUTC) {
+ res = model.clone();
+ diff =
+ (isMoment(input) || isDate(input)
+ ? input.valueOf()
+ : createLocal(input).valueOf()) - res.valueOf();
+ // Use low-level api, because this fn is low-level api.
+ res._d.setTime(res._d.valueOf() + diff);
+ hooks.updateOffset(res, false);
+ return res;
+ } else {
+ return createLocal(input).local();
+ }
}
- })
-}
-function rmkids (p, options, cb) {
- assert(p)
- assert(options)
- assert(typeof cb === 'function')
+ function getDateOffset(m) {
+ // On Firefox.24 Date#getTimezoneOffset returns a floating point.
+ // https://github.com/moment/moment/pull/1871
+ return -Math.round(m._d.getTimezoneOffset());
+ }
- options.readdir(p, (er, files) => {
- if (er) return cb(er)
+ // HOOKS
- let n = files.length
- let errState
+ // This function will be called whenever a moment is mutated.
+ // It is intended to keep the offset in sync with the timezone.
+ hooks.updateOffset = function () {};
- if (n === 0) return options.rmdir(p, cb)
+ // MOMENTS
- files.forEach(f => {
- rimraf(path.join(p, f), options, er => {
- if (errState) {
- return
+ // keepLocalTime = true means only change the timezone, without
+ // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
+ // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
+ // +0200, so we adjust the time as needed, to be valid.
+ //
+ // Keeping the time actually adds/subtracts (one hour)
+ // from the actual represented time. That is why we call updateOffset
+ // a second time. In case it wants us to change the offset again
+ // _changeInProgress == true case, then we have to adjust, because
+ // there is no such time in the given timezone.
+ function getSetOffset(input, keepLocalTime, keepMinutes) {
+ var offset = this._offset || 0,
+ localAdjust;
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
}
- if (er) return cb(errState = er)
- if (--n === 0) {
- options.rmdir(p, cb)
+ if (input != null) {
+ if (typeof input === 'string') {
+ input = offsetFromString(matchShortOffset, input);
+ if (input === null) {
+ return this;
+ }
+ } else if (Math.abs(input) < 16 && !keepMinutes) {
+ input = input * 60;
+ }
+ if (!this._isUTC && keepLocalTime) {
+ localAdjust = getDateOffset(this);
+ }
+ this._offset = input;
+ this._isUTC = true;
+ if (localAdjust != null) {
+ this.add(localAdjust, 'm');
+ }
+ if (offset !== input) {
+ if (!keepLocalTime || this._changeInProgress) {
+ addSubtract(
+ this,
+ createDuration(input - offset, 'm'),
+ 1,
+ false
+ );
+ } else if (!this._changeInProgress) {
+ this._changeInProgress = true;
+ hooks.updateOffset(this, true);
+ this._changeInProgress = null;
+ }
+ }
+ return this;
+ } else {
+ return this._isUTC ? offset : getDateOffset(this);
}
- })
- })
- })
-}
-
-// this looks simpler, and is strictly *faster*, but will
-// tie up the JavaScript thread and fail on excessively
-// deep directory trees.
-function rimrafSync (p, options) {
- let st
+ }
- options = options || {}
- defaults(options)
+ function getSetZone(input, keepLocalTime) {
+ if (input != null) {
+ if (typeof input !== 'string') {
+ input = -input;
+ }
- assert(p, 'rimraf: missing path')
- assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')
- assert(options, 'rimraf: missing options')
- assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')
+ this.utcOffset(input, keepLocalTime);
- try {
- st = options.lstatSync(p)
- } catch (er) {
- if (er.code === 'ENOENT') {
- return
+ return this;
+ } else {
+ return -this.utcOffset();
+ }
}
- // Windows can EPERM on stat. Life is suffering.
- if (er.code === 'EPERM' && isWindows) {
- fixWinEPERMSync(p, options, er)
+ function setOffsetToUTC(keepLocalTime) {
+ return this.utcOffset(0, keepLocalTime);
}
- }
- try {
- // sunos lets the root user unlink directories, which is... weird.
- if (st && st.isDirectory()) {
- rmdirSync(p, options, null)
- } else {
- options.unlinkSync(p)
+ function setOffsetToLocal(keepLocalTime) {
+ if (this._isUTC) {
+ this.utcOffset(0, keepLocalTime);
+ this._isUTC = false;
+
+ if (keepLocalTime) {
+ this.subtract(getDateOffset(this), 'm');
+ }
+ }
+ return this;
}
- } catch (er) {
- if (er.code === 'ENOENT') {
- return
- } else if (er.code === 'EPERM') {
- return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
- } else if (er.code !== 'EISDIR') {
- throw er
+
+ function setOffsetToParsedOffset() {
+ if (this._tzm != null) {
+ this.utcOffset(this._tzm, false, true);
+ } else if (typeof this._i === 'string') {
+ var tZone = offsetFromString(matchOffset, this._i);
+ if (tZone != null) {
+ this.utcOffset(tZone);
+ } else {
+ this.utcOffset(0, true);
+ }
+ }
+ return this;
}
- rmdirSync(p, options, er)
- }
-}
-function rmdirSync (p, options, originalEr) {
- assert(p)
- assert(options)
- if (originalEr) {
- assert(originalEr instanceof Error)
- }
+ function hasAlignedHourOffset(input) {
+ if (!this.isValid()) {
+ return false;
+ }
+ input = input ? createLocal(input).utcOffset() : 0;
- try {
- options.rmdirSync(p)
- } catch (er) {
- if (er.code === 'ENOTDIR') {
- throw originalEr
- } else if (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM') {
- rmkidsSync(p, options)
- } else if (er.code !== 'ENOENT') {
- throw er
+ return (this.utcOffset() - input) % 60 === 0;
}
- }
-}
-function rmkidsSync (p, options) {
- assert(p)
- assert(options)
- options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options))
+ function isDaylightSavingTime() {
+ return (
+ this.utcOffset() > this.clone().month(0).utcOffset() ||
+ this.utcOffset() > this.clone().month(5).utcOffset()
+ );
+ }
- if (isWindows) {
- // We only end up here once we got ENOTEMPTY at least once, and
- // at this point, we are guaranteed to have removed all the kids.
- // So, we know that it won't be ENOENT or ENOTDIR or anything else.
- // try really hard to delete stuff on windows, because it has a
- // PROFOUNDLY annoying habit of not closing handles promptly when
- // files are deleted, resulting in spurious ENOTEMPTY errors.
- const startTime = Date.now()
- do {
- try {
- const ret = options.rmdirSync(p, options)
- return ret
- } catch {}
- } while (Date.now() - startTime < 500) // give up after 500ms
- } else {
- const ret = options.rmdirSync(p, options)
- return ret
- }
-}
+ function isDaylightSavingTimeShifted() {
+ if (!isUndefined(this._isDSTShifted)) {
+ return this._isDSTShifted;
+ }
-module.exports = rimraf
-rimraf.sync = rimrafSync
+ var c = {},
+ other;
+ copyConfig(c, this);
+ c = prepareConfig(c);
-/***/ }),
-/* 475 */,
-/* 476 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+ if (c._a) {
+ other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
+ this._isDSTShifted =
+ this.isValid() && compareArrays(c._a, other.toArray()) > 0;
+ } else {
+ this._isDSTShifted = false;
+ }
-"use strict";
+ return this._isDSTShifted;
+ }
-var util = __webpack_require__(248);
-var schedule;
-var noAsyncScheduler = function() {
- throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a");
-};
-var NativePromise = util.getNativePromise();
-if (util.isNode && typeof MutationObserver === "undefined") {
- var GlobalSetImmediate = global.setImmediate;
- var ProcessNextTick = process.nextTick;
- schedule = util.isRecentNode
- ? function(fn) { GlobalSetImmediate.call(global, fn); }
- : function(fn) { ProcessNextTick.call(process, fn); };
-} else if (typeof NativePromise === "function" &&
- typeof NativePromise.resolve === "function") {
- var nativePromise = NativePromise.resolve();
- schedule = function(fn) {
- nativePromise.then(fn);
- };
-} else if ((typeof MutationObserver !== "undefined") &&
- !(typeof window !== "undefined" &&
- window.navigator &&
- (window.navigator.standalone || window.cordova)) &&
- ("classList" in document.documentElement)) {
- schedule = (function() {
- var div = document.createElement("div");
- var opts = {attributes: true};
- var toggleScheduled = false;
- var div2 = document.createElement("div");
- var o2 = new MutationObserver(function() {
- div.classList.toggle("foo");
- toggleScheduled = false;
- });
- o2.observe(div2, opts);
+ function isLocal() {
+ return this.isValid() ? !this._isUTC : false;
+ }
- var scheduleToggle = function() {
- if (toggleScheduled) return;
- toggleScheduled = true;
- div2.classList.toggle("foo");
- };
+ function isUtcOffset() {
+ return this.isValid() ? this._isUTC : false;
+ }
- return function schedule(fn) {
- var o = new MutationObserver(function() {
- o.disconnect();
- fn();
- });
- o.observe(div, opts);
- scheduleToggle();
- };
- })();
-} else if (typeof setImmediate !== "undefined") {
- schedule = function (fn) {
- setImmediate(fn);
- };
-} else if (typeof setTimeout !== "undefined") {
- schedule = function (fn) {
- setTimeout(fn, 0);
- };
-} else {
- schedule = noAsyncScheduler;
-}
-module.exports = schedule;
+ function isUtc() {
+ return this.isValid() ? this._isUTC && this._offset === 0 : false;
+ }
+ // ASP.NET json date format regex
+ var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
+ // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
+ // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
+ // and further modified to allow for strings containing both week and day
+ isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
-/***/ }),
-/* 477 */,
-/* 478 */,
-/* 479 */,
-/* 480 */,
-/* 481 */,
-/* 482 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
+ function createDuration(input, key) {
+ var duration = input,
+ // matching against regexp is expensive, do it on demand
+ match = null,
+ sign,
+ ret,
+ diffRes;
-/* module decorator */ module = __webpack_require__.nmd(module);
-//! moment.js
-//! version : 2.25.3
-//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
-//! license : MIT
-//! momentjs.com
+ if (isDuration(input)) {
+ duration = {
+ ms: input._milliseconds,
+ d: input._days,
+ M: input._months,
+ };
+ } else if (isNumber(input) || !isNaN(+input)) {
+ duration = {};
+ if (key) {
+ duration[key] = +input;
+ } else {
+ duration.milliseconds = +input;
+ }
+ } else if ((match = aspNetRegex.exec(input))) {
+ sign = match[1] === '-' ? -1 : 1;
+ duration = {
+ y: 0,
+ d: toInt(match[DATE]) * sign,
+ h: toInt(match[HOUR]) * sign,
+ m: toInt(match[MINUTE]) * sign,
+ s: toInt(match[SECOND]) * sign,
+ ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match
+ };
+ } else if ((match = isoRegex.exec(input))) {
+ sign = match[1] === '-' ? -1 : 1;
+ duration = {
+ y: parseIso(match[2], sign),
+ M: parseIso(match[3], sign),
+ w: parseIso(match[4], sign),
+ d: parseIso(match[5], sign),
+ h: parseIso(match[6], sign),
+ m: parseIso(match[7], sign),
+ s: parseIso(match[8], sign),
+ };
+ } else if (duration == null) {
+ // checks for null or undefined
+ duration = {};
+ } else if (
+ typeof duration === 'object' &&
+ ('from' in duration || 'to' in duration)
+ ) {
+ diffRes = momentsDifference(
+ createLocal(duration.from),
+ createLocal(duration.to)
+ );
-;(function (global, factory) {
- true ? module.exports = factory() :
- undefined
-}(this, (function () { 'use strict';
+ duration = {};
+ duration.ms = diffRes.milliseconds;
+ duration.M = diffRes.months;
+ }
- var hookCallback;
+ ret = new Duration(duration);
- function hooks() {
- return hookCallback.apply(null, arguments);
- }
+ if (isDuration(input) && hasOwnProp(input, '_locale')) {
+ ret._locale = input._locale;
+ }
- // This is done to register the method called with moment()
- // without creating circular dependencies.
- function setHookCallback(callback) {
- hookCallback = callback;
- }
+ if (isDuration(input) && hasOwnProp(input, '_isValid')) {
+ ret._isValid = input._isValid;
+ }
- function isArray(input) {
- return (
- input instanceof Array ||
- Object.prototype.toString.call(input) === '[object Array]'
- );
+ return ret;
}
- function isObject(input) {
- // IE8 will treat undefined and null as object if it wasn't for
- // input != null
- return (
- input != null &&
- Object.prototype.toString.call(input) === '[object Object]'
- );
- }
+ createDuration.fn = Duration.prototype;
+ createDuration.invalid = createInvalid$1;
- function hasOwnProp(a, b) {
- return Object.prototype.hasOwnProperty.call(a, b);
+ function parseIso(inp, sign) {
+ // We'd normally use ~~inp for this, but unfortunately it also
+ // converts floats to ints.
+ // inp may be undefined, so careful calling replace on it.
+ var res = inp && parseFloat(inp.replace(',', '.'));
+ // apply sign while we're at it
+ return (isNaN(res) ? 0 : res) * sign;
}
- function isObjectEmpty(obj) {
- if (Object.getOwnPropertyNames) {
- return Object.getOwnPropertyNames(obj).length === 0;
- } else {
- var k;
- for (k in obj) {
- if (hasOwnProp(obj, k)) {
- return false;
- }
- }
- return true;
+ function positiveMomentsDifference(base, other) {
+ var res = {};
+
+ res.months =
+ other.month() - base.month() + (other.year() - base.year()) * 12;
+ if (base.clone().add(res.months, 'M').isAfter(other)) {
+ --res.months;
}
- }
- function isUndefined(input) {
- return input === void 0;
- }
+ res.milliseconds = +other - +base.clone().add(res.months, 'M');
- function isNumber(input) {
- return (
- typeof input === 'number' ||
- Object.prototype.toString.call(input) === '[object Number]'
- );
+ return res;
}
- function isDate(input) {
- return (
- input instanceof Date ||
- Object.prototype.toString.call(input) === '[object Date]'
- );
- }
+ function momentsDifference(base, other) {
+ var res;
+ if (!(base.isValid() && other.isValid())) {
+ return { milliseconds: 0, months: 0 };
+ }
- function map(arr, fn) {
- var res = [],
- i;
- for (i = 0; i < arr.length; ++i) {
- res.push(fn(arr[i], i));
+ other = cloneWithOffset(other, base);
+ if (base.isBefore(other)) {
+ res = positiveMomentsDifference(base, other);
+ } else {
+ res = positiveMomentsDifference(other, base);
+ res.milliseconds = -res.milliseconds;
+ res.months = -res.months;
}
+
return res;
}
- function extend(a, b) {
- for (var i in b) {
- if (hasOwnProp(b, i)) {
- a[i] = b[i];
+ // TODO: remove 'name' arg after deprecation is removed
+ function createAdder(direction, name) {
+ return function (val, period) {
+ var dur, tmp;
+ //invert the arguments, but complain about it
+ if (period !== null && !isNaN(+period)) {
+ deprecateSimple(
+ name,
+ 'moment().' +
+ name +
+ '(period, number) is deprecated. Please use moment().' +
+ name +
+ '(number, period). ' +
+ 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'
+ );
+ tmp = val;
+ val = period;
+ period = tmp;
}
- }
- if (hasOwnProp(b, 'toString')) {
- a.toString = b.toString;
- }
+ dur = createDuration(val, period);
+ addSubtract(this, dur, direction);
+ return this;
+ };
+ }
- if (hasOwnProp(b, 'valueOf')) {
- a.valueOf = b.valueOf;
+ function addSubtract(mom, duration, isAdding, updateOffset) {
+ var milliseconds = duration._milliseconds,
+ days = absRound(duration._days),
+ months = absRound(duration._months);
+
+ if (!mom.isValid()) {
+ // No op
+ return;
}
- return a;
- }
+ updateOffset = updateOffset == null ? true : updateOffset;
- function createUTC(input, format, locale, strict) {
- return createLocalOrUTC(input, format, locale, strict, true).utc();
+ if (months) {
+ setMonth(mom, get(mom, 'Month') + months * isAdding);
+ }
+ if (days) {
+ set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
+ }
+ if (milliseconds) {
+ mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
+ }
+ if (updateOffset) {
+ hooks.updateOffset(mom, days || months);
+ }
}
- function defaultParsingFlags() {
- // We need to deep clone this object.
- return {
- empty: false,
- unusedTokens: [],
- unusedInput: [],
- overflow: -2,
- charsLeftOver: 0,
- nullInput: false,
- invalidEra: null,
- invalidMonth: null,
- invalidFormat: false,
- userInvalidated: false,
- iso: false,
- parsedDateParts: [],
- era: null,
- meridiem: null,
- rfc2822: false,
- weekdayMismatch: false,
- };
+ var add = createAdder(1, 'add'),
+ subtract = createAdder(-1, 'subtract');
+
+ function isString(input) {
+ return typeof input === 'string' || input instanceof String;
}
- function getParsingFlags(m) {
- if (m._pf == null) {
- m._pf = defaultParsingFlags();
- }
- return m._pf;
+ // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined
+ function isMomentInput(input) {
+ return (
+ isMoment(input) ||
+ isDate(input) ||
+ isString(input) ||
+ isNumber(input) ||
+ isNumberOrStringArray(input) ||
+ isMomentInputObject(input) ||
+ input === null ||
+ input === undefined
+ );
}
- var some;
- if (Array.prototype.some) {
- some = Array.prototype.some;
- } else {
- some = function (fun) {
- var t = Object(this),
- len = t.length >>> 0,
- i;
+ function isMomentInputObject(input) {
+ var objectTest = isObject(input) && !isObjectEmpty(input),
+ propertyTest = false,
+ properties = [
+ 'years',
+ 'year',
+ 'y',
+ 'months',
+ 'month',
+ 'M',
+ 'days',
+ 'day',
+ 'd',
+ 'dates',
+ 'date',
+ 'D',
+ 'hours',
+ 'hour',
+ 'h',
+ 'minutes',
+ 'minute',
+ 'm',
+ 'seconds',
+ 'second',
+ 's',
+ 'milliseconds',
+ 'millisecond',
+ 'ms',
+ ],
+ i,
+ property;
- for (i = 0; i < len; i++) {
- if (i in t && fun.call(this, t[i], i, t)) {
- return true;
- }
- }
+ for (i = 0; i < properties.length; i += 1) {
+ property = properties[i];
+ propertyTest = propertyTest || hasOwnProp(input, property);
+ }
- return false;
- };
+ return objectTest && propertyTest;
}
- function isValid(m) {
- if (m._isValid == null) {
- var flags = getParsingFlags(m),
- parsedParts = some.call(flags.parsedDateParts, function (i) {
- return i != null;
- }),
- isNowValid =
- !isNaN(m._d.getTime()) &&
- flags.overflow < 0 &&
- !flags.empty &&
- !flags.invalidEra &&
- !flags.invalidMonth &&
- !flags.invalidWeekday &&
- !flags.weekdayMismatch &&
- !flags.nullInput &&
- !flags.invalidFormat &&
- !flags.userInvalidated &&
- (!flags.meridiem || (flags.meridiem && parsedParts));
+ function isNumberOrStringArray(input) {
+ var arrayTest = isArray(input),
+ dataTypeTest = false;
+ if (arrayTest) {
+ dataTypeTest =
+ input.filter(function (item) {
+ return !isNumber(item) && isString(input);
+ }).length === 0;
+ }
+ return arrayTest && dataTypeTest;
+ }
- if (m._strict) {
- isNowValid =
- isNowValid &&
- flags.charsLeftOver === 0 &&
- flags.unusedTokens.length === 0 &&
- flags.bigHour === undefined;
- }
+ function isCalendarSpec(input) {
+ var objectTest = isObject(input) && !isObjectEmpty(input),
+ propertyTest = false,
+ properties = [
+ 'sameDay',
+ 'nextDay',
+ 'lastDay',
+ 'nextWeek',
+ 'lastWeek',
+ 'sameElse',
+ ],
+ i,
+ property;
- if (Object.isFrozen == null || !Object.isFrozen(m)) {
- m._isValid = isNowValid;
- } else {
- return isNowValid;
- }
+ for (i = 0; i < properties.length; i += 1) {
+ property = properties[i];
+ propertyTest = propertyTest || hasOwnProp(input, property);
}
- return m._isValid;
+
+ return objectTest && propertyTest;
}
- function createInvalid(flags) {
- var m = createUTC(NaN);
- if (flags != null) {
- extend(getParsingFlags(m), flags);
- } else {
- getParsingFlags(m).userInvalidated = true;
+ function getCalendarFormat(myMoment, now) {
+ var diff = myMoment.diff(now, 'days', true);
+ return diff < -6
+ ? 'sameElse'
+ : diff < -1
+ ? 'lastWeek'
+ : diff < 0
+ ? 'lastDay'
+ : diff < 1
+ ? 'sameDay'
+ : diff < 2
+ ? 'nextDay'
+ : diff < 7
+ ? 'nextWeek'
+ : 'sameElse';
+ }
+
+ function calendar$1(time, formats) {
+ // Support for single parameter, formats only overload to the calendar function
+ if (arguments.length === 1) {
+ if (!arguments[0]) {
+ time = undefined;
+ formats = undefined;
+ } else if (isMomentInput(arguments[0])) {
+ time = arguments[0];
+ formats = undefined;
+ } else if (isCalendarSpec(arguments[0])) {
+ formats = arguments[0];
+ time = undefined;
+ }
}
+ // We want to compare the start of today, vs this.
+ // Getting start-of-today depends on whether we're local/utc/offset or not.
+ var now = time || createLocal(),
+ sod = cloneWithOffset(now, this).startOf('day'),
+ format = hooks.calendarFormat(this, sod) || 'sameElse',
+ output =
+ formats &&
+ (isFunction(formats[format])
+ ? formats[format].call(this, now)
+ : formats[format]);
- return m;
+ return this.format(
+ output || this.localeData().calendar(format, this, createLocal(now))
+ );
}
- // Plugins that add properties should also add the key here (null value),
- // so we can properly clone ourselves.
- var momentProperties = (hooks.momentProperties = []),
- updateInProgress = false;
-
- function copyConfig(to, from) {
- var i, prop, val;
+ function clone() {
+ return new Moment(this);
+ }
- if (!isUndefined(from._isAMomentObject)) {
- to._isAMomentObject = from._isAMomentObject;
+ function isAfter(input, units) {
+ var localInput = isMoment(input) ? input : createLocal(input);
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
}
- if (!isUndefined(from._i)) {
- to._i = from._i;
+ units = normalizeUnits(units) || 'millisecond';
+ if (units === 'millisecond') {
+ return this.valueOf() > localInput.valueOf();
+ } else {
+ return localInput.valueOf() < this.clone().startOf(units).valueOf();
}
- if (!isUndefined(from._f)) {
- to._f = from._f;
+ }
+
+ function isBefore(input, units) {
+ var localInput = isMoment(input) ? input : createLocal(input);
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
}
- if (!isUndefined(from._l)) {
- to._l = from._l;
- }
- if (!isUndefined(from._strict)) {
- to._strict = from._strict;
- }
- if (!isUndefined(from._tzm)) {
- to._tzm = from._tzm;
- }
- if (!isUndefined(from._isUTC)) {
- to._isUTC = from._isUTC;
+ units = normalizeUnits(units) || 'millisecond';
+ if (units === 'millisecond') {
+ return this.valueOf() < localInput.valueOf();
+ } else {
+ return this.clone().endOf(units).valueOf() < localInput.valueOf();
}
- if (!isUndefined(from._offset)) {
- to._offset = from._offset;
+ }
+
+ function isBetween(from, to, units, inclusivity) {
+ var localFrom = isMoment(from) ? from : createLocal(from),
+ localTo = isMoment(to) ? to : createLocal(to);
+ if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
+ return false;
}
- if (!isUndefined(from._pf)) {
- to._pf = getParsingFlags(from);
+ inclusivity = inclusivity || '()';
+ return (
+ (inclusivity[0] === '('
+ ? this.isAfter(localFrom, units)
+ : !this.isBefore(localFrom, units)) &&
+ (inclusivity[1] === ')'
+ ? this.isBefore(localTo, units)
+ : !this.isAfter(localTo, units))
+ );
+ }
+
+ function isSame(input, units) {
+ var localInput = isMoment(input) ? input : createLocal(input),
+ inputMs;
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
}
- if (!isUndefined(from._locale)) {
- to._locale = from._locale;
+ units = normalizeUnits(units) || 'millisecond';
+ if (units === 'millisecond') {
+ return this.valueOf() === localInput.valueOf();
+ } else {
+ inputMs = localInput.valueOf();
+ return (
+ this.clone().startOf(units).valueOf() <= inputMs &&
+ inputMs <= this.clone().endOf(units).valueOf()
+ );
}
+ }
- if (momentProperties.length > 0) {
- for (i = 0; i < momentProperties.length; i++) {
- prop = momentProperties[i];
- val = from[prop];
- if (!isUndefined(val)) {
- to[prop] = val;
- }
- }
- }
+ function isSameOrAfter(input, units) {
+ return this.isSame(input, units) || this.isAfter(input, units);
+ }
- return to;
+ function isSameOrBefore(input, units) {
+ return this.isSame(input, units) || this.isBefore(input, units);
}
- // Moment prototype object
- function Moment(config) {
- copyConfig(this, config);
- this._d = new Date(config._d != null ? config._d.getTime() : NaN);
+ function diff(input, units, asFloat) {
+ var that, zoneDelta, output;
+
if (!this.isValid()) {
- this._d = new Date(NaN);
- }
- // Prevent infinite loop in case updateOffset creates new moment
- // objects.
- if (updateInProgress === false) {
- updateInProgress = true;
- hooks.updateOffset(this);
- updateInProgress = false;
+ return NaN;
}
- }
- function isMoment(obj) {
- return (
- obj instanceof Moment || (obj != null && obj._isAMomentObject != null)
- );
- }
+ that = cloneWithOffset(input, this);
- function warn(msg) {
- if (
- hooks.suppressDeprecationWarnings === false &&
- typeof console !== 'undefined' &&
- console.warn
- ) {
- console.warn('Deprecation warning: ' + msg);
+ if (!that.isValid()) {
+ return NaN;
}
- }
- function deprecate(msg, fn) {
- var firstTime = true;
+ zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
- return extend(function () {
- if (hooks.deprecationHandler != null) {
- hooks.deprecationHandler(null, msg);
- }
- if (firstTime) {
- var args = [],
- arg,
- i,
- key;
- for (i = 0; i < arguments.length; i++) {
- arg = '';
- if (typeof arguments[i] === 'object') {
- arg += '\n[' + i + '] ';
- for (key in arguments[0]) {
- if (hasOwnProp(arguments[0], key)) {
- arg += key + ': ' + arguments[0][key] + ', ';
- }
- }
- arg = arg.slice(0, -2); // Remove trailing comma and space
- } else {
- arg = arguments[i];
- }
- args.push(arg);
- }
- warn(
- msg +
- '\nArguments: ' +
- Array.prototype.slice.call(args).join('') +
- '\n' +
- new Error().stack
- );
- firstTime = false;
- }
- return fn.apply(this, arguments);
- }, fn);
- }
+ units = normalizeUnits(units);
- var deprecations = {};
+ switch (units) {
+ case 'year':
+ output = monthDiff(this, that) / 12;
+ break;
+ case 'month':
+ output = monthDiff(this, that);
+ break;
+ case 'quarter':
+ output = monthDiff(this, that) / 3;
+ break;
+ case 'second':
+ output = (this - that) / 1e3;
+ break; // 1000
+ case 'minute':
+ output = (this - that) / 6e4;
+ break; // 1000 * 60
+ case 'hour':
+ output = (this - that) / 36e5;
+ break; // 1000 * 60 * 60
+ case 'day':
+ output = (this - that - zoneDelta) / 864e5;
+ break; // 1000 * 60 * 60 * 24, negate dst
+ case 'week':
+ output = (this - that - zoneDelta) / 6048e5;
+ break; // 1000 * 60 * 60 * 24 * 7, negate dst
+ default:
+ output = this - that;
+ }
- function deprecateSimple(name, msg) {
- if (hooks.deprecationHandler != null) {
- hooks.deprecationHandler(name, msg);
+ return asFloat ? output : absFloor(output);
+ }
+
+ function monthDiff(a, b) {
+ if (a.date() < b.date()) {
+ // end-of-month calculations work correct when the start month has more
+ // days than the end month.
+ return -monthDiff(b, a);
}
- if (!deprecations[name]) {
- warn(msg);
- deprecations[name] = true;
+ // difference in months
+ var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
+ // b is in (anchor - 1 month, anchor + 1 month)
+ anchor = a.clone().add(wholeMonthDiff, 'months'),
+ anchor2,
+ adjust;
+
+ if (b - anchor < 0) {
+ anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
+ // linear across the month
+ adjust = (b - anchor) / (anchor - anchor2);
+ } else {
+ anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
+ // linear across the month
+ adjust = (b - anchor) / (anchor2 - anchor);
}
+
+ //check for negative zero, return zero if negative zero
+ return -(wholeMonthDiff + adjust) || 0;
}
- hooks.suppressDeprecationWarnings = false;
- hooks.deprecationHandler = null;
+ hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
+ hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
- function isFunction(input) {
- return (
- (typeof Function !== 'undefined' && input instanceof Function) ||
- Object.prototype.toString.call(input) === '[object Function]'
- );
+ function toString() {
+ return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
}
- function set(config) {
- var prop, i;
- for (i in config) {
- if (hasOwnProp(config, i)) {
- prop = config[i];
- if (isFunction(prop)) {
- this[i] = prop;
- } else {
- this['_' + i] = prop;
- }
+ function toISOString(keepOffset) {
+ if (!this.isValid()) {
+ return null;
+ }
+ var utc = keepOffset !== true,
+ m = utc ? this.clone().utc() : this;
+ if (m.year() < 0 || m.year() > 9999) {
+ return formatMoment(
+ m,
+ utc
+ ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'
+ : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'
+ );
+ }
+ if (isFunction(Date.prototype.toISOString)) {
+ // native implementation is ~50x faster, use it when we can
+ if (utc) {
+ return this.toDate().toISOString();
+ } else {
+ return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)
+ .toISOString()
+ .replace('Z', formatMoment(m, 'Z'));
}
}
- this._config = config;
- // Lenient ordinal parsing accepts just a number in addition to
- // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
- // TODO: Remove "ordinalParse" fallback in next major release.
- this._dayOfMonthOrdinalParseLenient = new RegExp(
- (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
- '|' +
- /\d{1,2}/.source
+ return formatMoment(
+ m,
+ utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'
);
}
- function mergeConfigs(parentConfig, childConfig) {
- var res = extend({}, parentConfig),
- prop;
- for (prop in childConfig) {
- if (hasOwnProp(childConfig, prop)) {
- if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
- res[prop] = {};
- extend(res[prop], parentConfig[prop]);
- extend(res[prop], childConfig[prop]);
- } else if (childConfig[prop] != null) {
- res[prop] = childConfig[prop];
- } else {
- delete res[prop];
- }
- }
+ /**
+ * Return a human readable representation of a moment that can
+ * also be evaluated to get a new moment which is the same
+ *
+ * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
+ */
+ function inspect() {
+ if (!this.isValid()) {
+ return 'moment.invalid(/* ' + this._i + ' */)';
}
- for (prop in parentConfig) {
- if (
- hasOwnProp(parentConfig, prop) &&
- !hasOwnProp(childConfig, prop) &&
- isObject(parentConfig[prop])
- ) {
- // make sure changes to properties don't modify parent config
- res[prop] = extend({}, res[prop]);
- }
+ var func = 'moment',
+ zone = '',
+ prefix,
+ year,
+ datetime,
+ suffix;
+ if (!this.isLocal()) {
+ func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
+ zone = 'Z';
}
- return res;
+ prefix = '[' + func + '("]';
+ year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';
+ datetime = '-MM-DD[T]HH:mm:ss.SSS';
+ suffix = zone + '[")]';
+
+ return this.format(prefix + year + datetime + suffix);
}
- function Locale(config) {
- if (config != null) {
- this.set(config);
+ function format(inputString) {
+ if (!inputString) {
+ inputString = this.isUtc()
+ ? hooks.defaultFormatUtc
+ : hooks.defaultFormat;
}
+ var output = formatMoment(this, inputString);
+ return this.localeData().postformat(output);
}
- var keys;
-
- if (Object.keys) {
- keys = Object.keys;
- } else {
- keys = function (obj) {
- var i,
- res = [];
- for (i in obj) {
- if (hasOwnProp(obj, i)) {
- res.push(i);
- }
- }
- return res;
- };
+ function from(time, withoutSuffix) {
+ if (
+ this.isValid() &&
+ ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
+ ) {
+ return createDuration({ to: this, from: time })
+ .locale(this.locale())
+ .humanize(!withoutSuffix);
+ } else {
+ return this.localeData().invalidDate();
+ }
}
- var defaultCalendar = {
- sameDay: '[Today at] LT',
- nextDay: '[Tomorrow at] LT',
- nextWeek: 'dddd [at] LT',
- lastDay: '[Yesterday at] LT',
- lastWeek: '[Last] dddd [at] LT',
- sameElse: 'L',
- };
-
- function calendar(key, mom, now) {
- var output = this._calendar[key] || this._calendar['sameElse'];
- return isFunction(output) ? output.call(mom, now) : output;
+ function fromNow(withoutSuffix) {
+ return this.from(createLocal(), withoutSuffix);
}
- function zeroFill(number, targetLength, forceSign) {
- var absNumber = '' + Math.abs(number),
- zerosToFill = targetLength - absNumber.length,
- sign = number >= 0;
- return (
- (sign ? (forceSign ? '+' : '') : '-') +
- Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +
- absNumber
- );
+ function to(time, withoutSuffix) {
+ if (
+ this.isValid() &&
+ ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
+ ) {
+ return createDuration({ from: this, to: time })
+ .locale(this.locale())
+ .humanize(!withoutSuffix);
+ } else {
+ return this.localeData().invalidDate();
+ }
}
- var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
- localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
- formatFunctions = {},
- formatTokenFunctions = {};
-
- // token: 'M'
- // padded: ['MM', 2]
- // ordinal: 'Mo'
- // callback: function () { this.month() + 1 }
- function addFormatToken(token, padded, ordinal, callback) {
- var func = callback;
- if (typeof callback === 'string') {
- func = function () {
- return this[callback]();
- };
- }
- if (token) {
- formatTokenFunctions[token] = func;
- }
- if (padded) {
- formatTokenFunctions[padded[0]] = function () {
- return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
- };
- }
- if (ordinal) {
- formatTokenFunctions[ordinal] = function () {
- return this.localeData().ordinal(
- func.apply(this, arguments),
- token
- );
- };
- }
+ function toNow(withoutSuffix) {
+ return this.to(createLocal(), withoutSuffix);
}
- function removeFormattingTokens(input) {
- if (input.match(/\[[\s\S]/)) {
- return input.replace(/^\[|\]$/g, '');
+ // If passed a locale key, it will set the locale for this
+ // instance. Otherwise, it will return the locale configuration
+ // variables for this instance.
+ function locale(key) {
+ var newLocaleData;
+
+ if (key === undefined) {
+ return this._locale._abbr;
+ } else {
+ newLocaleData = getLocale(key);
+ if (newLocaleData != null) {
+ this._locale = newLocaleData;
+ }
+ return this;
}
- return input.replace(/\\/g, '');
}
- function makeFormatFunction(format) {
- var array = format.match(formattingTokens),
- i,
- length;
-
- for (i = 0, length = array.length; i < length; i++) {
- if (formatTokenFunctions[array[i]]) {
- array[i] = formatTokenFunctions[array[i]];
+ var lang = deprecate(
+ 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
+ function (key) {
+ if (key === undefined) {
+ return this.localeData();
} else {
- array[i] = removeFormattingTokens(array[i]);
+ return this.locale(key);
}
}
+ );
- return function (mom) {
- var output = '',
- i;
- for (i = 0; i < length; i++) {
- output += isFunction(array[i])
- ? array[i].call(mom, format)
- : array[i];
- }
- return output;
- };
+ function localeData() {
+ return this._locale;
}
- // format date using native date object
- function formatMoment(m, format) {
- if (!m.isValid()) {
- return m.localeData().invalidDate();
- }
-
- format = expandFormat(format, m.localeData());
- formatFunctions[format] =
- formatFunctions[format] || makeFormatFunction(format);
+ var MS_PER_SECOND = 1000,
+ MS_PER_MINUTE = 60 * MS_PER_SECOND,
+ MS_PER_HOUR = 60 * MS_PER_MINUTE,
+ MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;
- return formatFunctions[format](m);
+ // actual modulo - handles negative numbers (for dates before 1970):
+ function mod$1(dividend, divisor) {
+ return ((dividend % divisor) + divisor) % divisor;
}
- function expandFormat(format, locale) {
- var i = 5;
+ function localStartOfDate(y, m, d) {
+ // the date constructor remaps years 0-99 to 1900-1999
+ if (y < 100 && y >= 0) {
+ // preserve leap years using a full 400 year cycle, then reset
+ return new Date(y + 400, m, d) - MS_PER_400_YEARS;
+ } else {
+ return new Date(y, m, d).valueOf();
+ }
+ }
- function replaceLongDateFormatTokens(input) {
- return locale.longDateFormat(input) || input;
+ function utcStartOfDate(y, m, d) {
+ // Date.UTC remaps years 0-99 to 1900-1999
+ if (y < 100 && y >= 0) {
+ // preserve leap years using a full 400 year cycle, then reset
+ return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
+ } else {
+ return Date.UTC(y, m, d);
}
+ }
- localFormattingTokens.lastIndex = 0;
- while (i >= 0 && localFormattingTokens.test(format)) {
- format = format.replace(
- localFormattingTokens,
- replaceLongDateFormatTokens
- );
- localFormattingTokens.lastIndex = 0;
- i -= 1;
+ function startOf(units) {
+ var time, startOfDate;
+ units = normalizeUnits(units);
+ if (units === undefined || units === 'millisecond' || !this.isValid()) {
+ return this;
}
- return format;
- }
+ startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
- var defaultLongDateFormat = {
- LTS: 'h:mm:ss A',
- LT: 'h:mm A',
- L: 'MM/DD/YYYY',
- LL: 'MMMM D, YYYY',
- LLL: 'MMMM D, YYYY h:mm A',
- LLLL: 'dddd, MMMM D, YYYY h:mm A',
- };
+ switch (units) {
+ case 'year':
+ time = startOfDate(this.year(), 0, 1);
+ break;
+ case 'quarter':
+ time = startOfDate(
+ this.year(),
+ this.month() - (this.month() % 3),
+ 1
+ );
+ break;
+ case 'month':
+ time = startOfDate(this.year(), this.month(), 1);
+ break;
+ case 'week':
+ time = startOfDate(
+ this.year(),
+ this.month(),
+ this.date() - this.weekday()
+ );
+ break;
+ case 'isoWeek':
+ time = startOfDate(
+ this.year(),
+ this.month(),
+ this.date() - (this.isoWeekday() - 1)
+ );
+ break;
+ case 'day':
+ case 'date':
+ time = startOfDate(this.year(), this.month(), this.date());
+ break;
+ case 'hour':
+ time = this._d.valueOf();
+ time -= mod$1(
+ time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
+ MS_PER_HOUR
+ );
+ break;
+ case 'minute':
+ time = this._d.valueOf();
+ time -= mod$1(time, MS_PER_MINUTE);
+ break;
+ case 'second':
+ time = this._d.valueOf();
+ time -= mod$1(time, MS_PER_SECOND);
+ break;
+ }
- function longDateFormat(key) {
- var format = this._longDateFormat[key],
- formatUpper = this._longDateFormat[key.toUpperCase()];
+ this._d.setTime(time);
+ hooks.updateOffset(this, true);
+ return this;
+ }
- if (format || !formatUpper) {
- return format;
+ function endOf(units) {
+ var time, startOfDate;
+ units = normalizeUnits(units);
+ if (units === undefined || units === 'millisecond' || !this.isValid()) {
+ return this;
}
- this._longDateFormat[key] = formatUpper
- .match(formattingTokens)
- .map(function (tok) {
- if (
- tok === 'MMMM' ||
- tok === 'MM' ||
- tok === 'DD' ||
- tok === 'dddd'
- ) {
- return tok.slice(1);
- }
- return tok;
- })
- .join('');
+ startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
- return this._longDateFormat[key];
+ switch (units) {
+ case 'year':
+ time = startOfDate(this.year() + 1, 0, 1) - 1;
+ break;
+ case 'quarter':
+ time =
+ startOfDate(
+ this.year(),
+ this.month() - (this.month() % 3) + 3,
+ 1
+ ) - 1;
+ break;
+ case 'month':
+ time = startOfDate(this.year(), this.month() + 1, 1) - 1;
+ break;
+ case 'week':
+ time =
+ startOfDate(
+ this.year(),
+ this.month(),
+ this.date() - this.weekday() + 7
+ ) - 1;
+ break;
+ case 'isoWeek':
+ time =
+ startOfDate(
+ this.year(),
+ this.month(),
+ this.date() - (this.isoWeekday() - 1) + 7
+ ) - 1;
+ break;
+ case 'day':
+ case 'date':
+ time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
+ break;
+ case 'hour':
+ time = this._d.valueOf();
+ time +=
+ MS_PER_HOUR -
+ mod$1(
+ time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
+ MS_PER_HOUR
+ ) -
+ 1;
+ break;
+ case 'minute':
+ time = this._d.valueOf();
+ time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
+ break;
+ case 'second':
+ time = this._d.valueOf();
+ time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
+ break;
+ }
+
+ this._d.setTime(time);
+ hooks.updateOffset(this, true);
+ return this;
}
- var defaultInvalidDate = 'Invalid date';
+ function valueOf() {
+ return this._d.valueOf() - (this._offset || 0) * 60000;
+ }
- function invalidDate() {
- return this._invalidDate;
+ function unix() {
+ return Math.floor(this.valueOf() / 1000);
}
- var defaultOrdinal = '%d',
- defaultDayOfMonthOrdinalParse = /\d{1,2}/;
+ function toDate() {
+ return new Date(this.valueOf());
+ }
- function ordinal(number) {
- return this._ordinal.replace('%d', number);
+ function toArray() {
+ var m = this;
+ return [
+ m.year(),
+ m.month(),
+ m.date(),
+ m.hour(),
+ m.minute(),
+ m.second(),
+ m.millisecond(),
+ ];
}
- var defaultRelativeTime = {
- future: 'in %s',
- past: '%s ago',
- s: 'a few seconds',
- ss: '%d seconds',
- m: 'a minute',
- mm: '%d minutes',
- h: 'an hour',
- hh: '%d hours',
- d: 'a day',
- dd: '%d days',
- w: 'a week',
- ww: '%d weeks',
- M: 'a month',
- MM: '%d months',
- y: 'a year',
- yy: '%d years',
- };
+ function toObject() {
+ var m = this;
+ return {
+ years: m.year(),
+ months: m.month(),
+ date: m.date(),
+ hours: m.hours(),
+ minutes: m.minutes(),
+ seconds: m.seconds(),
+ milliseconds: m.milliseconds(),
+ };
+ }
- function relativeTime(number, withoutSuffix, string, isFuture) {
- var output = this._relativeTime[string];
- return isFunction(output)
- ? output(number, withoutSuffix, string, isFuture)
- : output.replace(/%d/i, number);
+ function toJSON() {
+ // new Date(NaN).toJSON() === null
+ return this.isValid() ? this.toISOString() : null;
}
- function pastFuture(diff, output) {
- var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
- return isFunction(format) ? format(output) : format.replace(/%s/i, output);
+ function isValid$2() {
+ return isValid(this);
}
- var aliases = {};
+ function parsingFlags() {
+ return extend({}, getParsingFlags(this));
+ }
- function addUnitAlias(unit, shorthand) {
- var lowerCase = unit.toLowerCase();
- aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
+ function invalidAt() {
+ return getParsingFlags(this).overflow;
}
- function normalizeUnits(units) {
- return typeof units === 'string'
- ? aliases[units] || aliases[units.toLowerCase()]
- : undefined;
+ function creationData() {
+ return {
+ input: this._i,
+ format: this._f,
+ locale: this._locale,
+ isUTC: this._isUTC,
+ strict: this._strict,
+ };
}
- function normalizeObjectUnits(inputObject) {
- var normalizedInput = {},
- normalizedProp,
- prop;
+ addFormatToken('N', 0, 0, 'eraAbbr');
+ addFormatToken('NN', 0, 0, 'eraAbbr');
+ addFormatToken('NNN', 0, 0, 'eraAbbr');
+ addFormatToken('NNNN', 0, 0, 'eraName');
+ addFormatToken('NNNNN', 0, 0, 'eraNarrow');
- for (prop in inputObject) {
- if (hasOwnProp(inputObject, prop)) {
- normalizedProp = normalizeUnits(prop);
- if (normalizedProp) {
- normalizedInput[normalizedProp] = inputObject[prop];
- }
- }
+ addFormatToken('y', ['y', 1], 'yo', 'eraYear');
+ addFormatToken('y', ['yy', 2], 0, 'eraYear');
+ addFormatToken('y', ['yyy', 3], 0, 'eraYear');
+ addFormatToken('y', ['yyyy', 4], 0, 'eraYear');
+
+ addRegexToken('N', matchEraAbbr);
+ addRegexToken('NN', matchEraAbbr);
+ addRegexToken('NNN', matchEraAbbr);
+ addRegexToken('NNNN', matchEraName);
+ addRegexToken('NNNNN', matchEraNarrow);
+
+ addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (
+ input,
+ array,
+ config,
+ token
+ ) {
+ var era = config._locale.erasParse(input, token, config._strict);
+ if (era) {
+ getParsingFlags(config).era = era;
+ } else {
+ getParsingFlags(config).invalidEra = input;
}
+ });
- return normalizedInput;
- }
+ addRegexToken('y', matchUnsigned);
+ addRegexToken('yy', matchUnsigned);
+ addRegexToken('yyy', matchUnsigned);
+ addRegexToken('yyyy', matchUnsigned);
+ addRegexToken('yo', matchEraYearOrdinal);
- var priorities = {};
+ addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);
+ addParseToken(['yo'], function (input, array, config, token) {
+ var match;
+ if (config._locale._eraYearOrdinalRegex) {
+ match = input.match(config._locale._eraYearOrdinalRegex);
+ }
- function addUnitPriority(unit, priority) {
- priorities[unit] = priority;
- }
+ if (config._locale.eraYearOrdinalParse) {
+ array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
+ } else {
+ array[YEAR] = parseInt(input, 10);
+ }
+ });
- function getPrioritizedUnits(unitsObj) {
- var units = [],
- u;
- for (u in unitsObj) {
- if (hasOwnProp(unitsObj, u)) {
- units.push({ unit: u, priority: priorities[u] });
+ function localeEras(m, format) {
+ var i,
+ l,
+ date,
+ eras = this._eras || getLocale('en')._eras;
+ for (i = 0, l = eras.length; i < l; ++i) {
+ switch (typeof eras[i].since) {
+ case 'string':
+ // truncate time
+ date = hooks(eras[i].since).startOf('day');
+ eras[i].since = date.valueOf();
+ break;
+ }
+
+ switch (typeof eras[i].until) {
+ case 'undefined':
+ eras[i].until = +Infinity;
+ break;
+ case 'string':
+ // truncate time
+ date = hooks(eras[i].until).startOf('day').valueOf();
+ eras[i].until = date.valueOf();
+ break;
}
}
- units.sort(function (a, b) {
- return a.priority - b.priority;
- });
- return units;
+ return eras;
}
- function isLeapYear(year) {
- return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
+ function localeErasParse(eraName, format, strict) {
+ var i,
+ l,
+ eras = this.eras(),
+ name,
+ abbr,
+ narrow;
+ eraName = eraName.toUpperCase();
+
+ for (i = 0, l = eras.length; i < l; ++i) {
+ name = eras[i].name.toUpperCase();
+ abbr = eras[i].abbr.toUpperCase();
+ narrow = eras[i].narrow.toUpperCase();
+
+ if (strict) {
+ switch (format) {
+ case 'N':
+ case 'NN':
+ case 'NNN':
+ if (abbr === eraName) {
+ return eras[i];
+ }
+ break;
+
+ case 'NNNN':
+ if (name === eraName) {
+ return eras[i];
+ }
+ break;
+
+ case 'NNNNN':
+ if (narrow === eraName) {
+ return eras[i];
+ }
+ break;
+ }
+ } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
+ return eras[i];
+ }
+ }
}
- function absFloor(number) {
- if (number < 0) {
- // -0 -> 0
- return Math.ceil(number) || 0;
+ function localeErasConvertYear(era, year) {
+ var dir = era.since <= era.until ? +1 : -1;
+ if (year === undefined) {
+ return hooks(era.since).year();
} else {
- return Math.floor(number);
+ return hooks(era.since).year() + (year - era.offset) * dir;
}
}
- function toInt(argumentForCoercion) {
- var coercedNumber = +argumentForCoercion,
- value = 0;
+ function getEraName() {
+ var i,
+ l,
+ val,
+ eras = this.localeData().eras();
+ for (i = 0, l = eras.length; i < l; ++i) {
+ // truncate time
+ val = this.clone().startOf('day').valueOf();
- if (coercedNumber !== 0 && isFinite(coercedNumber)) {
- value = absFloor(coercedNumber);
+ if (eras[i].since <= val && val <= eras[i].until) {
+ return eras[i].name;
+ }
+ if (eras[i].until <= val && val <= eras[i].since) {
+ return eras[i].name;
+ }
}
- return value;
+ return '';
}
- function makeGetSet(unit, keepTime) {
- return function (value) {
- if (value != null) {
- set$1(this, unit, value);
- hooks.updateOffset(this, keepTime);
- return this;
- } else {
- return get(this, unit);
+ function getEraNarrow() {
+ var i,
+ l,
+ val,
+ eras = this.localeData().eras();
+ for (i = 0, l = eras.length; i < l; ++i) {
+ // truncate time
+ val = this.clone().startOf('day').valueOf();
+
+ if (eras[i].since <= val && val <= eras[i].until) {
+ return eras[i].narrow;
}
- };
+ if (eras[i].until <= val && val <= eras[i].since) {
+ return eras[i].narrow;
+ }
+ }
+
+ return '';
}
- function get(mom, unit) {
- return mom.isValid()
- ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()
- : NaN;
+ function getEraAbbr() {
+ var i,
+ l,
+ val,
+ eras = this.localeData().eras();
+ for (i = 0, l = eras.length; i < l; ++i) {
+ // truncate time
+ val = this.clone().startOf('day').valueOf();
+
+ if (eras[i].since <= val && val <= eras[i].until) {
+ return eras[i].abbr;
+ }
+ if (eras[i].until <= val && val <= eras[i].since) {
+ return eras[i].abbr;
+ }
+ }
+
+ return '';
}
- function set$1(mom, unit, value) {
- if (mom.isValid() && !isNaN(value)) {
+ function getEraYear() {
+ var i,
+ l,
+ dir,
+ val,
+ eras = this.localeData().eras();
+ for (i = 0, l = eras.length; i < l; ++i) {
+ dir = eras[i].since <= eras[i].until ? +1 : -1;
+
+ // truncate time
+ val = this.clone().startOf('day').valueOf();
+
if (
- unit === 'FullYear' &&
- isLeapYear(mom.year()) &&
- mom.month() === 1 &&
- mom.date() === 29
+ (eras[i].since <= val && val <= eras[i].until) ||
+ (eras[i].until <= val && val <= eras[i].since)
) {
- value = toInt(value);
- mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](
- value,
- mom.month(),
- daysInMonth(value, mom.month())
+ return (
+ (this.year() - hooks(eras[i].since).year()) * dir +
+ eras[i].offset
);
- } else {
- mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
}
}
+
+ return this.year();
}
- // MOMENTS
+ function erasNameRegex(isStrict) {
+ if (!hasOwnProp(this, '_erasNameRegex')) {
+ computeErasParse.call(this);
+ }
+ return isStrict ? this._erasNameRegex : this._erasRegex;
+ }
- function stringGet(units) {
- units = normalizeUnits(units);
- if (isFunction(this[units])) {
- return this[units]();
+ function erasAbbrRegex(isStrict) {
+ if (!hasOwnProp(this, '_erasAbbrRegex')) {
+ computeErasParse.call(this);
}
- return this;
+ return isStrict ? this._erasAbbrRegex : this._erasRegex;
}
- function stringSet(units, value) {
- if (typeof units === 'object') {
- units = normalizeObjectUnits(units);
- var prioritized = getPrioritizedUnits(units),
- i;
- for (i = 0; i < prioritized.length; i++) {
- this[prioritized[i].unit](units[prioritized[i].unit]);
- }
- } else {
- units = normalizeUnits(units);
- if (isFunction(this[units])) {
- return this[units](value);
- }
+ function erasNarrowRegex(isStrict) {
+ if (!hasOwnProp(this, '_erasNarrowRegex')) {
+ computeErasParse.call(this);
}
- return this;
+ return isStrict ? this._erasNarrowRegex : this._erasRegex;
}
- var match1 = /\d/, // 0 - 9
- match2 = /\d\d/, // 00 - 99
- match3 = /\d{3}/, // 000 - 999
- match4 = /\d{4}/, // 0000 - 9999
- match6 = /[+-]?\d{6}/, // -999999 - 999999
- match1to2 = /\d\d?/, // 0 - 99
- match3to4 = /\d\d\d\d?/, // 999 - 9999
- match5to6 = /\d\d\d\d\d\d?/, // 99999 - 999999
- match1to3 = /\d{1,3}/, // 0 - 999
- match1to4 = /\d{1,4}/, // 0 - 9999
- match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999
- matchUnsigned = /\d+/, // 0 - inf
- matchSigned = /[+-]?\d+/, // -inf - inf
- matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
- matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z
- matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
- // any word (or two) characters or numbers including two/three word month in arabic.
- // includes scottish gaelic two word and hyphenated months
- matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,
- regexes;
-
- regexes = {};
+ function matchEraAbbr(isStrict, locale) {
+ return locale.erasAbbrRegex(isStrict);
+ }
- function addRegexToken(token, regex, strictRegex) {
- regexes[token] = isFunction(regex)
- ? regex
- : function (isStrict, localeData) {
- return isStrict && strictRegex ? strictRegex : regex;
- };
+ function matchEraName(isStrict, locale) {
+ return locale.erasNameRegex(isStrict);
}
- function getParseRegexForToken(token, config) {
- if (!hasOwnProp(regexes, token)) {
- return new RegExp(unescapeFormat(token));
- }
+ function matchEraNarrow(isStrict, locale) {
+ return locale.erasNarrowRegex(isStrict);
+ }
- return regexes[token](config._strict, config._locale);
+ function matchEraYearOrdinal(isStrict, locale) {
+ return locale._eraYearOrdinalRegex || matchUnsigned;
}
- // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
- function unescapeFormat(s) {
- return regexEscape(
- s
- .replace('\\', '')
- .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (
- matched,
- p1,
- p2,
- p3,
- p4
- ) {
- return p1 || p2 || p3 || p4;
- })
+ function computeErasParse() {
+ var abbrPieces = [],
+ namePieces = [],
+ narrowPieces = [],
+ mixedPieces = [],
+ i,
+ l,
+ eras = this.eras();
+
+ for (i = 0, l = eras.length; i < l; ++i) {
+ namePieces.push(regexEscape(eras[i].name));
+ abbrPieces.push(regexEscape(eras[i].abbr));
+ narrowPieces.push(regexEscape(eras[i].narrow));
+
+ mixedPieces.push(regexEscape(eras[i].name));
+ mixedPieces.push(regexEscape(eras[i].abbr));
+ mixedPieces.push(regexEscape(eras[i].narrow));
+ }
+
+ this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+ this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');
+ this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');
+ this._erasNarrowRegex = new RegExp(
+ '^(' + narrowPieces.join('|') + ')',
+ 'i'
);
}
- function regexEscape(s) {
- return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+ // FORMATTING
+
+ addFormatToken(0, ['gg', 2], 0, function () {
+ return this.weekYear() % 100;
+ });
+
+ addFormatToken(0, ['GG', 2], 0, function () {
+ return this.isoWeekYear() % 100;
+ });
+
+ function addWeekYearFormatToken(token, getter) {
+ addFormatToken(0, [token, token.length], 0, getter);
}
- var tokens = {};
+ addWeekYearFormatToken('gggg', 'weekYear');
+ addWeekYearFormatToken('ggggg', 'weekYear');
+ addWeekYearFormatToken('GGGG', 'isoWeekYear');
+ addWeekYearFormatToken('GGGGG', 'isoWeekYear');
- function addParseToken(token, callback) {
- var i,
- func = callback;
- if (typeof token === 'string') {
- token = [token];
- }
- if (isNumber(callback)) {
- func = function (input, array) {
- array[callback] = toInt(input);
- };
- }
- for (i = 0; i < token.length; i++) {
- tokens[token[i]] = func;
- }
+ // ALIASES
+
+ addUnitAlias('weekYear', 'gg');
+ addUnitAlias('isoWeekYear', 'GG');
+
+ // PRIORITY
+
+ addUnitPriority('weekYear', 1);
+ addUnitPriority('isoWeekYear', 1);
+
+ // PARSING
+
+ addRegexToken('G', matchSigned);
+ addRegexToken('g', matchSigned);
+ addRegexToken('GG', match1to2, match2);
+ addRegexToken('gg', match1to2, match2);
+ addRegexToken('GGGG', match1to4, match4);
+ addRegexToken('gggg', match1to4, match4);
+ addRegexToken('GGGGG', match1to6, match6);
+ addRegexToken('ggggg', match1to6, match6);
+
+ addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (
+ input,
+ week,
+ config,
+ token
+ ) {
+ week[token.substr(0, 2)] = toInt(input);
+ });
+
+ addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
+ week[token] = hooks.parseTwoDigitYear(input);
+ });
+
+ // MOMENTS
+
+ function getSetWeekYear(input) {
+ return getSetWeekYearHelper.call(
+ this,
+ input,
+ this.week(),
+ this.weekday(),
+ this.localeData()._week.dow,
+ this.localeData()._week.doy
+ );
}
- function addWeekParseToken(token, callback) {
- addParseToken(token, function (input, array, config, token) {
- config._w = config._w || {};
- callback(input, config._w, config, token);
- });
+ function getSetISOWeekYear(input) {
+ return getSetWeekYearHelper.call(
+ this,
+ input,
+ this.isoWeek(),
+ this.isoWeekday(),
+ 1,
+ 4
+ );
}
- function addTimeToArrayFromToken(token, input, config) {
- if (input != null && hasOwnProp(tokens, token)) {
- tokens[token](input, config._a, config, token);
- }
+ function getISOWeeksInYear() {
+ return weeksInYear(this.year(), 1, 4);
}
- var YEAR = 0,
- MONTH = 1,
- DATE = 2,
- HOUR = 3,
- MINUTE = 4,
- SECOND = 5,
- MILLISECOND = 6,
- WEEK = 7,
- WEEKDAY = 8;
+ function getISOWeeksInISOWeekYear() {
+ return weeksInYear(this.isoWeekYear(), 1, 4);
+ }
- function mod(n, x) {
- return ((n % x) + x) % x;
+ function getWeeksInYear() {
+ var weekInfo = this.localeData()._week;
+ return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
}
- var indexOf;
+ function getWeeksInWeekYear() {
+ var weekInfo = this.localeData()._week;
+ return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
+ }
- if (Array.prototype.indexOf) {
- indexOf = Array.prototype.indexOf;
- } else {
- indexOf = function (o) {
- // I know
- var i;
- for (i = 0; i < this.length; ++i) {
- if (this[i] === o) {
- return i;
- }
+ function getSetWeekYearHelper(input, week, weekday, dow, doy) {
+ var weeksTarget;
+ if (input == null) {
+ return weekOfYear(this, dow, doy).year;
+ } else {
+ weeksTarget = weeksInYear(input, dow, doy);
+ if (week > weeksTarget) {
+ week = weeksTarget;
}
- return -1;
- };
+ return setWeekAll.call(this, input, week, weekday, dow, doy);
+ }
}
- function daysInMonth(year, month) {
- if (isNaN(year) || isNaN(month)) {
- return NaN;
- }
- var modMonth = mod(month, 12);
- year += (month - modMonth) / 12;
- return modMonth === 1
- ? isLeapYear(year)
- ? 29
- : 28
- : 31 - ((modMonth % 7) % 2);
+ function setWeekAll(weekYear, week, weekday, dow, doy) {
+ var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
+ date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
+
+ this.year(date.getUTCFullYear());
+ this.month(date.getUTCMonth());
+ this.date(date.getUTCDate());
+ return this;
}
// FORMATTING
- addFormatToken('M', ['MM', 2], 'Mo', function () {
- return this.month() + 1;
- });
+ addFormatToken('Q', 0, 'Qo', 'quarter');
- addFormatToken('MMM', 0, 0, function (format) {
- return this.localeData().monthsShort(this, format);
- });
+ // ALIASES
- addFormatToken('MMMM', 0, 0, function (format) {
- return this.localeData().months(this, format);
+ addUnitAlias('quarter', 'Q');
+
+ // PRIORITY
+
+ addUnitPriority('quarter', 7);
+
+ // PARSING
+
+ addRegexToken('Q', match1);
+ addParseToken('Q', function (input, array) {
+ array[MONTH] = (toInt(input) - 1) * 3;
});
+ // MOMENTS
+
+ function getSetQuarter(input) {
+ return input == null
+ ? Math.ceil((this.month() + 1) / 3)
+ : this.month((input - 1) * 3 + (this.month() % 3));
+ }
+
+ // FORMATTING
+
+ addFormatToken('D', ['DD', 2], 'Do', 'date');
+
// ALIASES
- addUnitAlias('month', 'M');
+ addUnitAlias('date', 'D');
// PRIORITY
-
- addUnitPriority('month', 8);
+ addUnitPriority('date', 9);
// PARSING
- addRegexToken('M', match1to2);
- addRegexToken('MM', match1to2, match2);
- addRegexToken('MMM', function (isStrict, locale) {
- return locale.monthsShortRegex(isStrict);
- });
- addRegexToken('MMMM', function (isStrict, locale) {
- return locale.monthsRegex(isStrict);
+ addRegexToken('D', match1to2);
+ addRegexToken('DD', match1to2, match2);
+ addRegexToken('Do', function (isStrict, locale) {
+ // TODO: Remove "ordinalParse" fallback in next major release.
+ return isStrict
+ ? locale._dayOfMonthOrdinalParse || locale._ordinalParse
+ : locale._dayOfMonthOrdinalParseLenient;
});
- addParseToken(['M', 'MM'], function (input, array) {
- array[MONTH] = toInt(input) - 1;
+ addParseToken(['D', 'DD'], DATE);
+ addParseToken('Do', function (input, array) {
+ array[DATE] = toInt(input.match(match1to2)[0]);
});
- addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
- var month = config._locale.monthsParse(input, token, config._strict);
- // if we didn't find a month name, mark the date as invalid.
- if (month != null) {
- array[MONTH] = month;
- } else {
- getParsingFlags(config).invalidMonth = input;
- }
+ // MOMENTS
+
+ var getSetDayOfMonth = makeGetSet('Date', true);
+
+ // FORMATTING
+
+ addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
+
+ // ALIASES
+
+ addUnitAlias('dayOfYear', 'DDD');
+
+ // PRIORITY
+ addUnitPriority('dayOfYear', 4);
+
+ // PARSING
+
+ addRegexToken('DDD', match1to3);
+ addRegexToken('DDDD', match3);
+ addParseToken(['DDD', 'DDDD'], function (input, array, config) {
+ config._dayOfYear = toInt(input);
});
- // LOCALES
+ // HELPERS
- var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
- '_'
- ),
- defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(
- '_'
- ),
- MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
- defaultMonthsShortRegex = matchWord,
- defaultMonthsRegex = matchWord;
+ // MOMENTS
- function localeMonths(m, format) {
- if (!m) {
- return isArray(this._months)
- ? this._months
- : this._months['standalone'];
- }
- return isArray(this._months)
- ? this._months[m.month()]
- : this._months[
- (this._months.isFormat || MONTHS_IN_FORMAT).test(format)
- ? 'format'
- : 'standalone'
- ][m.month()];
+ function getSetDayOfYear(input) {
+ var dayOfYear =
+ Math.round(
+ (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5
+ ) + 1;
+ return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');
}
- function localeMonthsShort(m, format) {
- if (!m) {
- return isArray(this._monthsShort)
- ? this._monthsShort
- : this._monthsShort['standalone'];
- }
- return isArray(this._monthsShort)
- ? this._monthsShort[m.month()]
- : this._monthsShort[
- MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'
- ][m.month()];
- }
+ // FORMATTING
- function handleStrictParse(monthName, format, strict) {
- var i,
- ii,
- mom,
- llc = monthName.toLocaleLowerCase();
- if (!this._monthsParse) {
- // this is not used
- this._monthsParse = [];
- this._longMonthsParse = [];
- this._shortMonthsParse = [];
- for (i = 0; i < 12; ++i) {
- mom = createUTC([2000, i]);
- this._shortMonthsParse[i] = this.monthsShort(
- mom,
- ''
- ).toLocaleLowerCase();
- this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
- }
- }
+ addFormatToken('m', ['mm', 2], 0, 'minute');
- if (strict) {
- if (format === 'MMM') {
- ii = indexOf.call(this._shortMonthsParse, llc);
- return ii !== -1 ? ii : null;
- } else {
- ii = indexOf.call(this._longMonthsParse, llc);
- return ii !== -1 ? ii : null;
- }
- } else {
- if (format === 'MMM') {
- ii = indexOf.call(this._shortMonthsParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._longMonthsParse, llc);
- return ii !== -1 ? ii : null;
- } else {
- ii = indexOf.call(this._longMonthsParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._shortMonthsParse, llc);
- return ii !== -1 ? ii : null;
- }
- }
- }
+ // ALIASES
- function localeMonthsParse(monthName, format, strict) {
- var i, mom, regex;
+ addUnitAlias('minute', 'm');
- if (this._monthsParseExact) {
- return handleStrictParse.call(this, monthName, format, strict);
- }
+ // PRIORITY
- if (!this._monthsParse) {
- this._monthsParse = [];
- this._longMonthsParse = [];
- this._shortMonthsParse = [];
- }
+ addUnitPriority('minute', 14);
- // TODO: add sorting
- // Sorting makes sure if one month (or abbr) is a prefix of another
- // see sorting in computeMonthsParse
- for (i = 0; i < 12; i++) {
- // make the regex if we don't have it already
- mom = createUTC([2000, i]);
- if (strict && !this._longMonthsParse[i]) {
- this._longMonthsParse[i] = new RegExp(
- '^' + this.months(mom, '').replace('.', '') + '$',
- 'i'
- );
- this._shortMonthsParse[i] = new RegExp(
- '^' + this.monthsShort(mom, '').replace('.', '') + '$',
- 'i'
- );
- }
- if (!strict && !this._monthsParse[i]) {
- regex =
- '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
- this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
- }
- // test the regex
- if (
- strict &&
- format === 'MMMM' &&
- this._longMonthsParse[i].test(monthName)
- ) {
- return i;
- } else if (
- strict &&
- format === 'MMM' &&
- this._shortMonthsParse[i].test(monthName)
- ) {
- return i;
- } else if (!strict && this._monthsParse[i].test(monthName)) {
- return i;
- }
- }
- }
+ // PARSING
+
+ addRegexToken('m', match1to2);
+ addRegexToken('mm', match1to2, match2);
+ addParseToken(['m', 'mm'], MINUTE);
// MOMENTS
- function setMonth(mom, value) {
- var dayOfMonth;
+ var getSetMinute = makeGetSet('Minutes', false);
- if (!mom.isValid()) {
- // No op
- return mom;
- }
+ // FORMATTING
- if (typeof value === 'string') {
- if (/^\d+$/.test(value)) {
- value = toInt(value);
- } else {
- value = mom.localeData().monthsParse(value);
- // TODO: Another silent failure?
- if (!isNumber(value)) {
- return mom;
- }
- }
- }
+ addFormatToken('s', ['ss', 2], 0, 'second');
- dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
- mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
- return mom;
- }
+ // ALIASES
- function getSetMonth(value) {
- if (value != null) {
- setMonth(this, value);
- hooks.updateOffset(this, true);
- return this;
- } else {
- return get(this, 'Month');
- }
- }
+ addUnitAlias('second', 's');
- function getDaysInMonth() {
- return daysInMonth(this.year(), this.month());
- }
+ // PRIORITY
- function monthsShortRegex(isStrict) {
- if (this._monthsParseExact) {
- if (!hasOwnProp(this, '_monthsRegex')) {
- computeMonthsParse.call(this);
- }
- if (isStrict) {
- return this._monthsShortStrictRegex;
- } else {
- return this._monthsShortRegex;
- }
- } else {
- if (!hasOwnProp(this, '_monthsShortRegex')) {
- this._monthsShortRegex = defaultMonthsShortRegex;
- }
- return this._monthsShortStrictRegex && isStrict
- ? this._monthsShortStrictRegex
- : this._monthsShortRegex;
- }
- }
+ addUnitPriority('second', 15);
- function monthsRegex(isStrict) {
- if (this._monthsParseExact) {
- if (!hasOwnProp(this, '_monthsRegex')) {
- computeMonthsParse.call(this);
- }
- if (isStrict) {
- return this._monthsStrictRegex;
- } else {
- return this._monthsRegex;
- }
- } else {
- if (!hasOwnProp(this, '_monthsRegex')) {
- this._monthsRegex = defaultMonthsRegex;
- }
- return this._monthsStrictRegex && isStrict
- ? this._monthsStrictRegex
- : this._monthsRegex;
- }
- }
+ // PARSING
- function computeMonthsParse() {
- function cmpLenRev(a, b) {
- return b.length - a.length;
- }
+ addRegexToken('s', match1to2);
+ addRegexToken('ss', match1to2, match2);
+ addParseToken(['s', 'ss'], SECOND);
- var shortPieces = [],
- longPieces = [],
- mixedPieces = [],
- i,
- mom;
- for (i = 0; i < 12; i++) {
- // make the regex if we don't have it already
- mom = createUTC([2000, i]);
- shortPieces.push(this.monthsShort(mom, ''));
- longPieces.push(this.months(mom, ''));
- mixedPieces.push(this.months(mom, ''));
- mixedPieces.push(this.monthsShort(mom, ''));
- }
- // Sorting makes sure if one month (or abbr) is a prefix of another it
- // will match the longer piece.
- shortPieces.sort(cmpLenRev);
- longPieces.sort(cmpLenRev);
- mixedPieces.sort(cmpLenRev);
- for (i = 0; i < 12; i++) {
- shortPieces[i] = regexEscape(shortPieces[i]);
- longPieces[i] = regexEscape(longPieces[i]);
- }
- for (i = 0; i < 24; i++) {
- mixedPieces[i] = regexEscape(mixedPieces[i]);
- }
+ // MOMENTS
- this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
- this._monthsShortRegex = this._monthsRegex;
- this._monthsStrictRegex = new RegExp(
- '^(' + longPieces.join('|') + ')',
- 'i'
- );
- this._monthsShortStrictRegex = new RegExp(
- '^(' + shortPieces.join('|') + ')',
- 'i'
- );
- }
+ var getSetSecond = makeGetSet('Seconds', false);
// FORMATTING
- addFormatToken('Y', 0, 0, function () {
- var y = this.year();
- return y <= 9999 ? zeroFill(y, 4) : '+' + y;
+ addFormatToken('S', 0, 0, function () {
+ return ~~(this.millisecond() / 100);
});
- addFormatToken(0, ['YY', 2], 0, function () {
- return this.year() % 100;
+ addFormatToken(0, ['SS', 2], 0, function () {
+ return ~~(this.millisecond() / 10);
});
- addFormatToken(0, ['YYYY', 4], 0, 'year');
- addFormatToken(0, ['YYYYY', 5], 0, 'year');
- addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
+ addFormatToken(0, ['SSS', 3], 0, 'millisecond');
+ addFormatToken(0, ['SSSS', 4], 0, function () {
+ return this.millisecond() * 10;
+ });
+ addFormatToken(0, ['SSSSS', 5], 0, function () {
+ return this.millisecond() * 100;
+ });
+ addFormatToken(0, ['SSSSSS', 6], 0, function () {
+ return this.millisecond() * 1000;
+ });
+ addFormatToken(0, ['SSSSSSS', 7], 0, function () {
+ return this.millisecond() * 10000;
+ });
+ addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
+ return this.millisecond() * 100000;
+ });
+ addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
+ return this.millisecond() * 1000000;
+ });
// ALIASES
- addUnitAlias('year', 'y');
+ addUnitAlias('millisecond', 'ms');
- // PRIORITIES
+ // PRIORITY
- addUnitPriority('year', 1);
+ addUnitPriority('millisecond', 16);
// PARSING
- addRegexToken('Y', matchSigned);
- addRegexToken('YY', match1to2, match2);
- addRegexToken('YYYY', match1to4, match4);
- addRegexToken('YYYYY', match1to6, match6);
- addRegexToken('YYYYYY', match1to6, match6);
+ addRegexToken('S', match1to3, match1);
+ addRegexToken('SS', match1to3, match2);
+ addRegexToken('SSS', match1to3, match3);
- addParseToken(['YYYYY', 'YYYYYY'], YEAR);
- addParseToken('YYYY', function (input, array) {
- array[YEAR] =
- input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
- });
- addParseToken('YY', function (input, array) {
- array[YEAR] = hooks.parseTwoDigitYear(input);
- });
- addParseToken('Y', function (input, array) {
- array[YEAR] = parseInt(input, 10);
- });
+ var token, getSetMillisecond;
+ for (token = 'SSSS'; token.length <= 9; token += 'S') {
+ addRegexToken(token, matchUnsigned);
+ }
- // HELPERS
+ function parseMs(input, array) {
+ array[MILLISECOND] = toInt(('0.' + input) * 1000);
+ }
- function daysInYear(year) {
- return isLeapYear(year) ? 366 : 365;
+ for (token = 'S'; token.length <= 9; token += 'S') {
+ addParseToken(token, parseMs);
}
- // HOOKS
+ getSetMillisecond = makeGetSet('Milliseconds', false);
- hooks.parseTwoDigitYear = function (input) {
- return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
- };
+ // FORMATTING
+
+ addFormatToken('z', 0, 0, 'zoneAbbr');
+ addFormatToken('zz', 0, 0, 'zoneName');
// MOMENTS
- var getSetYear = makeGetSet('FullYear', true);
+ function getZoneAbbr() {
+ return this._isUTC ? 'UTC' : '';
+ }
- function getIsLeapYear() {
- return isLeapYear(this.year());
+ function getZoneName() {
+ return this._isUTC ? 'Coordinated Universal Time' : '';
}
- function createDate(y, m, d, h, M, s, ms) {
- // can't just apply() to create a date:
- // https://stackoverflow.com/q/181348
- var date;
- // the date constructor remaps years 0-99 to 1900-1999
- if (y < 100 && y >= 0) {
- // preserve leap years using a full 400 year cycle, then reset
- date = new Date(y + 400, m, d, h, M, s, ms);
- if (isFinite(date.getFullYear())) {
- date.setFullYear(y);
- }
- } else {
- date = new Date(y, m, d, h, M, s, ms);
- }
+ var proto = Moment.prototype;
- return date;
+ proto.add = add;
+ proto.calendar = calendar$1;
+ proto.clone = clone;
+ proto.diff = diff;
+ proto.endOf = endOf;
+ proto.format = format;
+ proto.from = from;
+ proto.fromNow = fromNow;
+ proto.to = to;
+ proto.toNow = toNow;
+ proto.get = stringGet;
+ proto.invalidAt = invalidAt;
+ proto.isAfter = isAfter;
+ proto.isBefore = isBefore;
+ proto.isBetween = isBetween;
+ proto.isSame = isSame;
+ proto.isSameOrAfter = isSameOrAfter;
+ proto.isSameOrBefore = isSameOrBefore;
+ proto.isValid = isValid$2;
+ proto.lang = lang;
+ proto.locale = locale;
+ proto.localeData = localeData;
+ proto.max = prototypeMax;
+ proto.min = prototypeMin;
+ proto.parsingFlags = parsingFlags;
+ proto.set = stringSet;
+ proto.startOf = startOf;
+ proto.subtract = subtract;
+ proto.toArray = toArray;
+ proto.toObject = toObject;
+ proto.toDate = toDate;
+ proto.toISOString = toISOString;
+ proto.inspect = inspect;
+ if (typeof Symbol !== 'undefined' && Symbol.for != null) {
+ proto[Symbol.for('nodejs.util.inspect.custom')] = function () {
+ return 'Moment<' + this.format() + '>';
+ };
}
+ proto.toJSON = toJSON;
+ proto.toString = toString;
+ proto.unix = unix;
+ proto.valueOf = valueOf;
+ proto.creationData = creationData;
+ proto.eraName = getEraName;
+ proto.eraNarrow = getEraNarrow;
+ proto.eraAbbr = getEraAbbr;
+ proto.eraYear = getEraYear;
+ proto.year = getSetYear;
+ proto.isLeapYear = getIsLeapYear;
+ proto.weekYear = getSetWeekYear;
+ proto.isoWeekYear = getSetISOWeekYear;
+ proto.quarter = proto.quarters = getSetQuarter;
+ proto.month = getSetMonth;
+ proto.daysInMonth = getDaysInMonth;
+ proto.week = proto.weeks = getSetWeek;
+ proto.isoWeek = proto.isoWeeks = getSetISOWeek;
+ proto.weeksInYear = getWeeksInYear;
+ proto.weeksInWeekYear = getWeeksInWeekYear;
+ proto.isoWeeksInYear = getISOWeeksInYear;
+ proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
+ proto.date = getSetDayOfMonth;
+ proto.day = proto.days = getSetDayOfWeek;
+ proto.weekday = getSetLocaleDayOfWeek;
+ proto.isoWeekday = getSetISODayOfWeek;
+ proto.dayOfYear = getSetDayOfYear;
+ proto.hour = proto.hours = getSetHour;
+ proto.minute = proto.minutes = getSetMinute;
+ proto.second = proto.seconds = getSetSecond;
+ proto.millisecond = proto.milliseconds = getSetMillisecond;
+ proto.utcOffset = getSetOffset;
+ proto.utc = setOffsetToUTC;
+ proto.local = setOffsetToLocal;
+ proto.parseZone = setOffsetToParsedOffset;
+ proto.hasAlignedHourOffset = hasAlignedHourOffset;
+ proto.isDST = isDaylightSavingTime;
+ proto.isLocal = isLocal;
+ proto.isUtcOffset = isUtcOffset;
+ proto.isUtc = isUtc;
+ proto.isUTC = isUtc;
+ proto.zoneAbbr = getZoneAbbr;
+ proto.zoneName = getZoneName;
+ proto.dates = deprecate(
+ 'dates accessor is deprecated. Use date instead.',
+ getSetDayOfMonth
+ );
+ proto.months = deprecate(
+ 'months accessor is deprecated. Use month instead',
+ getSetMonth
+ );
+ proto.years = deprecate(
+ 'years accessor is deprecated. Use year instead',
+ getSetYear
+ );
+ proto.zone = deprecate(
+ 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',
+ getSetZone
+ );
+ proto.isDSTShifted = deprecate(
+ 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',
+ isDaylightSavingTimeShifted
+ );
- function createUTCDate(y) {
- var date, args;
- // the Date.UTC function remaps years 0-99 to 1900-1999
- if (y < 100 && y >= 0) {
- args = Array.prototype.slice.call(arguments);
- // preserve leap years using a full 400 year cycle, then reset
- args[0] = y + 400;
- date = new Date(Date.UTC.apply(null, args));
- if (isFinite(date.getUTCFullYear())) {
- date.setUTCFullYear(y);
- }
- } else {
- date = new Date(Date.UTC.apply(null, arguments));
- }
-
- return date;
+ function createUnix(input) {
+ return createLocal(input * 1000);
}
- // start-of-first-week - start-of-year
- function firstWeekOffset(year, dow, doy) {
- var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
- fwd = 7 + dow - doy,
- // first-week day local weekday -- which local weekday is fwd
- fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
+ function createInZone() {
+ return createLocal.apply(null, arguments).parseZone();
+ }
- return -fwdlw + fwd - 1;
+ function preParsePostFormat(string) {
+ return string;
}
- // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
- function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
- var localWeekday = (7 + weekday - dow) % 7,
- weekOffset = firstWeekOffset(year, dow, doy),
- dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
- resYear,
- resDayOfYear;
+ var proto$1 = Locale.prototype;
- if (dayOfYear <= 0) {
- resYear = year - 1;
- resDayOfYear = daysInYear(resYear) + dayOfYear;
- } else if (dayOfYear > daysInYear(year)) {
- resYear = year + 1;
- resDayOfYear = dayOfYear - daysInYear(year);
- } else {
- resYear = year;
- resDayOfYear = dayOfYear;
- }
+ proto$1.calendar = calendar;
+ proto$1.longDateFormat = longDateFormat;
+ proto$1.invalidDate = invalidDate;
+ proto$1.ordinal = ordinal;
+ proto$1.preparse = preParsePostFormat;
+ proto$1.postformat = preParsePostFormat;
+ proto$1.relativeTime = relativeTime;
+ proto$1.pastFuture = pastFuture;
+ proto$1.set = set;
+ proto$1.eras = localeEras;
+ proto$1.erasParse = localeErasParse;
+ proto$1.erasConvertYear = localeErasConvertYear;
+ proto$1.erasAbbrRegex = erasAbbrRegex;
+ proto$1.erasNameRegex = erasNameRegex;
+ proto$1.erasNarrowRegex = erasNarrowRegex;
- return {
- year: resYear,
- dayOfYear: resDayOfYear,
- };
- }
+ proto$1.months = localeMonths;
+ proto$1.monthsShort = localeMonthsShort;
+ proto$1.monthsParse = localeMonthsParse;
+ proto$1.monthsRegex = monthsRegex;
+ proto$1.monthsShortRegex = monthsShortRegex;
+ proto$1.week = localeWeek;
+ proto$1.firstDayOfYear = localeFirstDayOfYear;
+ proto$1.firstDayOfWeek = localeFirstDayOfWeek;
- function weekOfYear(mom, dow, doy) {
- var weekOffset = firstWeekOffset(mom.year(), dow, doy),
- week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
- resWeek,
- resYear;
+ proto$1.weekdays = localeWeekdays;
+ proto$1.weekdaysMin = localeWeekdaysMin;
+ proto$1.weekdaysShort = localeWeekdaysShort;
+ proto$1.weekdaysParse = localeWeekdaysParse;
- if (week < 1) {
- resYear = mom.year() - 1;
- resWeek = week + weeksInYear(resYear, dow, doy);
- } else if (week > weeksInYear(mom.year(), dow, doy)) {
- resWeek = week - weeksInYear(mom.year(), dow, doy);
- resYear = mom.year() + 1;
- } else {
- resYear = mom.year();
- resWeek = week;
- }
+ proto$1.weekdaysRegex = weekdaysRegex;
+ proto$1.weekdaysShortRegex = weekdaysShortRegex;
+ proto$1.weekdaysMinRegex = weekdaysMinRegex;
- return {
- week: resWeek,
- year: resYear,
- };
- }
+ proto$1.isPM = localeIsPM;
+ proto$1.meridiem = localeMeridiem;
- function weeksInYear(year, dow, doy) {
- var weekOffset = firstWeekOffset(year, dow, doy),
- weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
- return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
+ function get$1(format, index, field, setter) {
+ var locale = getLocale(),
+ utc = createUTC().set(setter, index);
+ return locale[field](utc, format);
}
- // FORMATTING
-
- addFormatToken('w', ['ww', 2], 'wo', 'week');
- addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
+ function listMonthsImpl(format, index, field) {
+ if (isNumber(format)) {
+ index = format;
+ format = undefined;
+ }
- // ALIASES
+ format = format || '';
- addUnitAlias('week', 'w');
- addUnitAlias('isoWeek', 'W');
+ if (index != null) {
+ return get$1(format, index, field, 'month');
+ }
- // PRIORITIES
+ var i,
+ out = [];
+ for (i = 0; i < 12; i++) {
+ out[i] = get$1(format, i, field, 'month');
+ }
+ return out;
+ }
- addUnitPriority('week', 5);
- addUnitPriority('isoWeek', 5);
+ // ()
+ // (5)
+ // (fmt, 5)
+ // (fmt)
+ // (true)
+ // (true, 5)
+ // (true, fmt, 5)
+ // (true, fmt)
+ function listWeekdaysImpl(localeSorted, format, index, field) {
+ if (typeof localeSorted === 'boolean') {
+ if (isNumber(format)) {
+ index = format;
+ format = undefined;
+ }
- // PARSING
+ format = format || '';
+ } else {
+ format = localeSorted;
+ index = format;
+ localeSorted = false;
- addRegexToken('w', match1to2);
- addRegexToken('ww', match1to2, match2);
- addRegexToken('W', match1to2);
- addRegexToken('WW', match1to2, match2);
+ if (isNumber(format)) {
+ index = format;
+ format = undefined;
+ }
- addWeekParseToken(['w', 'ww', 'W', 'WW'], function (
- input,
- week,
- config,
- token
- ) {
- week[token.substr(0, 1)] = toInt(input);
- });
+ format = format || '';
+ }
- // HELPERS
+ var locale = getLocale(),
+ shift = localeSorted ? locale._week.dow : 0,
+ i,
+ out = [];
- // LOCALES
+ if (index != null) {
+ return get$1(format, (index + shift) % 7, field, 'day');
+ }
- function localeWeek(mom) {
- return weekOfYear(mom, this._week.dow, this._week.doy).week;
+ for (i = 0; i < 7; i++) {
+ out[i] = get$1(format, (i + shift) % 7, field, 'day');
+ }
+ return out;
}
- var defaultLocaleWeek = {
- dow: 0, // Sunday is the first day of the week.
- doy: 6, // The week that contains Jan 6th is the first week of the year.
- };
-
- function localeFirstDayOfWeek() {
- return this._week.dow;
+ function listMonths(format, index) {
+ return listMonthsImpl(format, index, 'months');
}
- function localeFirstDayOfYear() {
- return this._week.doy;
+ function listMonthsShort(format, index) {
+ return listMonthsImpl(format, index, 'monthsShort');
}
- // MOMENTS
-
- function getSetWeek(input) {
- var week = this.localeData().week(this);
- return input == null ? week : this.add((input - week) * 7, 'd');
+ function listWeekdays(localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
}
- function getSetISOWeek(input) {
- var week = weekOfYear(this, 1, 4).week;
- return input == null ? week : this.add((input - week) * 7, 'd');
+ function listWeekdaysShort(localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
}
- // FORMATTING
+ function listWeekdaysMin(localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
+ }
- addFormatToken('d', 0, 'do', 'day');
-
- addFormatToken('dd', 0, 0, function (format) {
- return this.localeData().weekdaysMin(this, format);
- });
-
- addFormatToken('ddd', 0, 0, function (format) {
- return this.localeData().weekdaysShort(this, format);
+ getSetGlobalLocale('en', {
+ eras: [
+ {
+ since: '0001-01-01',
+ until: +Infinity,
+ offset: 1,
+ name: 'Anno Domini',
+ narrow: 'AD',
+ abbr: 'AD',
+ },
+ {
+ since: '0000-12-31',
+ until: -Infinity,
+ offset: 1,
+ name: 'Before Christ',
+ narrow: 'BC',
+ abbr: 'BC',
+ },
+ ],
+ dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
+ ordinal: function (number) {
+ var b = number % 10,
+ output =
+ toInt((number % 100) / 10) === 1
+ ? 'th'
+ : b === 1
+ ? 'st'
+ : b === 2
+ ? 'nd'
+ : b === 3
+ ? 'rd'
+ : 'th';
+ return number + output;
+ },
});
- addFormatToken('dddd', 0, 0, function (format) {
- return this.localeData().weekdays(this, format);
- });
+ // Side effect imports
- addFormatToken('e', 0, 0, 'weekday');
- addFormatToken('E', 0, 0, 'isoWeekday');
+ hooks.lang = deprecate(
+ 'moment.lang is deprecated. Use moment.locale instead.',
+ getSetGlobalLocale
+ );
+ hooks.langData = deprecate(
+ 'moment.langData is deprecated. Use moment.localeData instead.',
+ getLocale
+ );
- // ALIASES
+ var mathAbs = Math.abs;
- addUnitAlias('day', 'd');
- addUnitAlias('weekday', 'e');
- addUnitAlias('isoWeekday', 'E');
+ function abs() {
+ var data = this._data;
- // PRIORITY
- addUnitPriority('day', 11);
- addUnitPriority('weekday', 11);
- addUnitPriority('isoWeekday', 11);
+ this._milliseconds = mathAbs(this._milliseconds);
+ this._days = mathAbs(this._days);
+ this._months = mathAbs(this._months);
- // PARSING
+ data.milliseconds = mathAbs(data.milliseconds);
+ data.seconds = mathAbs(data.seconds);
+ data.minutes = mathAbs(data.minutes);
+ data.hours = mathAbs(data.hours);
+ data.months = mathAbs(data.months);
+ data.years = mathAbs(data.years);
- addRegexToken('d', match1to2);
- addRegexToken('e', match1to2);
- addRegexToken('E', match1to2);
- addRegexToken('dd', function (isStrict, locale) {
- return locale.weekdaysMinRegex(isStrict);
- });
- addRegexToken('ddd', function (isStrict, locale) {
- return locale.weekdaysShortRegex(isStrict);
- });
- addRegexToken('dddd', function (isStrict, locale) {
- return locale.weekdaysRegex(isStrict);
- });
+ return this;
+ }
- addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
- var weekday = config._locale.weekdaysParse(input, token, config._strict);
- // if we didn't get a weekday name, mark the date as invalid
- if (weekday != null) {
- week.d = weekday;
- } else {
- getParsingFlags(config).invalidWeekday = input;
- }
- });
+ function addSubtract$1(duration, input, value, direction) {
+ var other = createDuration(input, value);
- addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
- week[token] = toInt(input);
- });
+ duration._milliseconds += direction * other._milliseconds;
+ duration._days += direction * other._days;
+ duration._months += direction * other._months;
- // HELPERS
+ return duration._bubble();
+ }
- function parseWeekday(input, locale) {
- if (typeof input !== 'string') {
- return input;
- }
+ // supports only 2.0-style add(1, 's') or add(duration)
+ function add$1(input, value) {
+ return addSubtract$1(this, input, value, 1);
+ }
- if (!isNaN(input)) {
- return parseInt(input, 10);
- }
+ // supports only 2.0-style subtract(1, 's') or subtract(duration)
+ function subtract$1(input, value) {
+ return addSubtract$1(this, input, value, -1);
+ }
- input = locale.weekdaysParse(input);
- if (typeof input === 'number') {
- return input;
+ function absCeil(number) {
+ if (number < 0) {
+ return Math.floor(number);
+ } else {
+ return Math.ceil(number);
}
-
- return null;
}
- function parseIsoWeekday(input, locale) {
- if (typeof input === 'string') {
- return locale.weekdaysParse(input) % 7 || 7;
+ function bubble() {
+ var milliseconds = this._milliseconds,
+ days = this._days,
+ months = this._months,
+ data = this._data,
+ seconds,
+ minutes,
+ hours,
+ years,
+ monthsFromDays;
+
+ // if we have a mix of positive and negative values, bubble down first
+ // check: https://github.com/moment/moment/issues/2166
+ if (
+ !(
+ (milliseconds >= 0 && days >= 0 && months >= 0) ||
+ (milliseconds <= 0 && days <= 0 && months <= 0)
+ )
+ ) {
+ milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
+ days = 0;
+ months = 0;
}
- return isNaN(input) ? null : input;
- }
- // LOCALES
- function shiftWeekdays(ws, n) {
- return ws.slice(n, 7).concat(ws.slice(0, n));
- }
+ // The following code bubbles up values, see the tests for
+ // examples of what that means.
+ data.milliseconds = milliseconds % 1000;
- var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
- '_'
- ),
- defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
- defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
- defaultWeekdaysRegex = matchWord,
- defaultWeekdaysShortRegex = matchWord,
- defaultWeekdaysMinRegex = matchWord;
+ seconds = absFloor(milliseconds / 1000);
+ data.seconds = seconds % 60;
- function localeWeekdays(m, format) {
- var weekdays = isArray(this._weekdays)
- ? this._weekdays
- : this._weekdays[
- m && m !== true && this._weekdays.isFormat.test(format)
- ? 'format'
- : 'standalone'
- ];
- return m === true
- ? shiftWeekdays(weekdays, this._week.dow)
- : m
- ? weekdays[m.day()]
- : weekdays;
- }
+ minutes = absFloor(seconds / 60);
+ data.minutes = minutes % 60;
- function localeWeekdaysShort(m) {
- return m === true
- ? shiftWeekdays(this._weekdaysShort, this._week.dow)
- : m
- ? this._weekdaysShort[m.day()]
- : this._weekdaysShort;
- }
+ hours = absFloor(minutes / 60);
+ data.hours = hours % 24;
- function localeWeekdaysMin(m) {
- return m === true
- ? shiftWeekdays(this._weekdaysMin, this._week.dow)
- : m
- ? this._weekdaysMin[m.day()]
- : this._weekdaysMin;
- }
+ days += absFloor(hours / 24);
- function handleStrictParse$1(weekdayName, format, strict) {
- var i,
- ii,
- mom,
- llc = weekdayName.toLocaleLowerCase();
- if (!this._weekdaysParse) {
- this._weekdaysParse = [];
- this._shortWeekdaysParse = [];
- this._minWeekdaysParse = [];
+ // convert days to months
+ monthsFromDays = absFloor(daysToMonths(days));
+ months += monthsFromDays;
+ days -= absCeil(monthsToDays(monthsFromDays));
- for (i = 0; i < 7; ++i) {
- mom = createUTC([2000, 1]).day(i);
- this._minWeekdaysParse[i] = this.weekdaysMin(
- mom,
- ''
- ).toLocaleLowerCase();
- this._shortWeekdaysParse[i] = this.weekdaysShort(
- mom,
- ''
- ).toLocaleLowerCase();
- this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
- }
- }
+ // 12 months -> 1 year
+ years = absFloor(months / 12);
+ months %= 12;
- if (strict) {
- if (format === 'dddd') {
- ii = indexOf.call(this._weekdaysParse, llc);
- return ii !== -1 ? ii : null;
- } else if (format === 'ddd') {
- ii = indexOf.call(this._shortWeekdaysParse, llc);
- return ii !== -1 ? ii : null;
- } else {
- ii = indexOf.call(this._minWeekdaysParse, llc);
- return ii !== -1 ? ii : null;
- }
- } else {
- if (format === 'dddd') {
- ii = indexOf.call(this._weekdaysParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._shortWeekdaysParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._minWeekdaysParse, llc);
- return ii !== -1 ? ii : null;
- } else if (format === 'ddd') {
- ii = indexOf.call(this._shortWeekdaysParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._weekdaysParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._minWeekdaysParse, llc);
- return ii !== -1 ? ii : null;
- } else {
- ii = indexOf.call(this._minWeekdaysParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._weekdaysParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._shortWeekdaysParse, llc);
- return ii !== -1 ? ii : null;
- }
- }
+ data.days = days;
+ data.months = months;
+ data.years = years;
+
+ return this;
}
- function localeWeekdaysParse(weekdayName, format, strict) {
- var i, mom, regex;
+ function daysToMonths(days) {
+ // 400 years have 146097 days (taking into account leap year rules)
+ // 400 years have 12 months === 4800
+ return (days * 4800) / 146097;
+ }
- if (this._weekdaysParseExact) {
- return handleStrictParse$1.call(this, weekdayName, format, strict);
- }
+ function monthsToDays(months) {
+ // the reverse of daysToMonths
+ return (months * 146097) / 4800;
+ }
- if (!this._weekdaysParse) {
- this._weekdaysParse = [];
- this._minWeekdaysParse = [];
- this._shortWeekdaysParse = [];
- this._fullWeekdaysParse = [];
+ function as(units) {
+ if (!this.isValid()) {
+ return NaN;
}
+ var days,
+ months,
+ milliseconds = this._milliseconds;
- for (i = 0; i < 7; i++) {
- // make the regex if we don't have it already
+ units = normalizeUnits(units);
- mom = createUTC([2000, 1]).day(i);
- if (strict && !this._fullWeekdaysParse[i]) {
- this._fullWeekdaysParse[i] = new RegExp(
- '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$',
- 'i'
- );
- this._shortWeekdaysParse[i] = new RegExp(
- '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$',
- 'i'
- );
- this._minWeekdaysParse[i] = new RegExp(
- '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$',
- 'i'
- );
- }
- if (!this._weekdaysParse[i]) {
- regex =
- '^' +
- this.weekdays(mom, '') +
- '|^' +
- this.weekdaysShort(mom, '') +
- '|^' +
- this.weekdaysMin(mom, '');
- this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
+ if (units === 'month' || units === 'quarter' || units === 'year') {
+ days = this._days + milliseconds / 864e5;
+ months = this._months + daysToMonths(days);
+ switch (units) {
+ case 'month':
+ return months;
+ case 'quarter':
+ return months / 3;
+ case 'year':
+ return months / 12;
}
- // test the regex
- if (
- strict &&
- format === 'dddd' &&
- this._fullWeekdaysParse[i].test(weekdayName)
- ) {
- return i;
- } else if (
- strict &&
- format === 'ddd' &&
- this._shortWeekdaysParse[i].test(weekdayName)
- ) {
- return i;
- } else if (
- strict &&
- format === 'dd' &&
- this._minWeekdaysParse[i].test(weekdayName)
- ) {
- return i;
- } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
- return i;
+ } else {
+ // handle milliseconds separately because of floating point math errors (issue #1867)
+ days = this._days + Math.round(monthsToDays(this._months));
+ switch (units) {
+ case 'week':
+ return days / 7 + milliseconds / 6048e5;
+ case 'day':
+ return days + milliseconds / 864e5;
+ case 'hour':
+ return days * 24 + milliseconds / 36e5;
+ case 'minute':
+ return days * 1440 + milliseconds / 6e4;
+ case 'second':
+ return days * 86400 + milliseconds / 1000;
+ // Math.floor prevents floating point math errors here
+ case 'millisecond':
+ return Math.floor(days * 864e5) + milliseconds;
+ default:
+ throw new Error('Unknown unit ' + units);
}
}
}
- // MOMENTS
-
- function getSetDayOfWeek(input) {
+ // TODO: Use this.as('ms')?
+ function valueOf$1() {
if (!this.isValid()) {
- return input != null ? this : NaN;
- }
- var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
- if (input != null) {
- input = parseWeekday(input, this.localeData());
- return this.add(input - day, 'd');
- } else {
- return day;
+ return NaN;
}
+ return (
+ this._milliseconds +
+ this._days * 864e5 +
+ (this._months % 12) * 2592e6 +
+ toInt(this._months / 12) * 31536e6
+ );
}
- function getSetLocaleDayOfWeek(input) {
- if (!this.isValid()) {
- return input != null ? this : NaN;
- }
- var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
- return input == null ? weekday : this.add(input - weekday, 'd');
+ function makeAs(alias) {
+ return function () {
+ return this.as(alias);
+ };
}
- function getSetISODayOfWeek(input) {
- if (!this.isValid()) {
- return input != null ? this : NaN;
- }
+ var asMilliseconds = makeAs('ms'),
+ asSeconds = makeAs('s'),
+ asMinutes = makeAs('m'),
+ asHours = makeAs('h'),
+ asDays = makeAs('d'),
+ asWeeks = makeAs('w'),
+ asMonths = makeAs('M'),
+ asQuarters = makeAs('Q'),
+ asYears = makeAs('y');
- // behaves the same as moment#day except
- // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
- // as a setter, sunday should belong to the previous week.
+ function clone$1() {
+ return createDuration(this);
+ }
- if (input != null) {
- var weekday = parseIsoWeekday(input, this.localeData());
- return this.day(this.day() % 7 ? weekday : weekday - 7);
- } else {
- return this.day() || 7;
- }
+ function get$2(units) {
+ units = normalizeUnits(units);
+ return this.isValid() ? this[units + 's']() : NaN;
}
- function weekdaysRegex(isStrict) {
- if (this._weekdaysParseExact) {
- if (!hasOwnProp(this, '_weekdaysRegex')) {
- computeWeekdaysParse.call(this);
- }
- if (isStrict) {
- return this._weekdaysStrictRegex;
- } else {
- return this._weekdaysRegex;
- }
- } else {
- if (!hasOwnProp(this, '_weekdaysRegex')) {
- this._weekdaysRegex = defaultWeekdaysRegex;
- }
- return this._weekdaysStrictRegex && isStrict
- ? this._weekdaysStrictRegex
- : this._weekdaysRegex;
- }
+ function makeGetter(name) {
+ return function () {
+ return this.isValid() ? this._data[name] : NaN;
+ };
}
- function weekdaysShortRegex(isStrict) {
- if (this._weekdaysParseExact) {
- if (!hasOwnProp(this, '_weekdaysRegex')) {
- computeWeekdaysParse.call(this);
- }
- if (isStrict) {
- return this._weekdaysShortStrictRegex;
- } else {
- return this._weekdaysShortRegex;
- }
- } else {
- if (!hasOwnProp(this, '_weekdaysShortRegex')) {
- this._weekdaysShortRegex = defaultWeekdaysShortRegex;
- }
- return this._weekdaysShortStrictRegex && isStrict
- ? this._weekdaysShortStrictRegex
- : this._weekdaysShortRegex;
- }
+ var milliseconds = makeGetter('milliseconds'),
+ seconds = makeGetter('seconds'),
+ minutes = makeGetter('minutes'),
+ hours = makeGetter('hours'),
+ days = makeGetter('days'),
+ months = makeGetter('months'),
+ years = makeGetter('years');
+
+ function weeks() {
+ return absFloor(this.days() / 7);
}
- function weekdaysMinRegex(isStrict) {
- if (this._weekdaysParseExact) {
- if (!hasOwnProp(this, '_weekdaysRegex')) {
- computeWeekdaysParse.call(this);
- }
- if (isStrict) {
- return this._weekdaysMinStrictRegex;
- } else {
- return this._weekdaysMinRegex;
- }
- } else {
- if (!hasOwnProp(this, '_weekdaysMinRegex')) {
- this._weekdaysMinRegex = defaultWeekdaysMinRegex;
- }
- return this._weekdaysMinStrictRegex && isStrict
- ? this._weekdaysMinStrictRegex
- : this._weekdaysMinRegex;
+ var round = Math.round,
+ thresholds = {
+ ss: 44, // a few seconds to seconds
+ s: 45, // seconds to minute
+ m: 45, // minutes to hour
+ h: 22, // hours to day
+ d: 26, // days to month/week
+ w: null, // weeks to month
+ M: 11, // months to year
+ };
+
+ // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
+ function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
+ return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
+ }
+
+ function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {
+ var duration = createDuration(posNegDuration).abs(),
+ seconds = round(duration.as('s')),
+ minutes = round(duration.as('m')),
+ hours = round(duration.as('h')),
+ days = round(duration.as('d')),
+ months = round(duration.as('M')),
+ weeks = round(duration.as('w')),
+ years = round(duration.as('y')),
+ a =
+ (seconds <= thresholds.ss && ['s', seconds]) ||
+ (seconds < thresholds.s && ['ss', seconds]) ||
+ (minutes <= 1 && ['m']) ||
+ (minutes < thresholds.m && ['mm', minutes]) ||
+ (hours <= 1 && ['h']) ||
+ (hours < thresholds.h && ['hh', hours]) ||
+ (days <= 1 && ['d']) ||
+ (days < thresholds.d && ['dd', days]);
+
+ if (thresholds.w != null) {
+ a =
+ a ||
+ (weeks <= 1 && ['w']) ||
+ (weeks < thresholds.w && ['ww', weeks]);
}
+ a = a ||
+ (months <= 1 && ['M']) ||
+ (months < thresholds.M && ['MM', months]) ||
+ (years <= 1 && ['y']) || ['yy', years];
+
+ a[2] = withoutSuffix;
+ a[3] = +posNegDuration > 0;
+ a[4] = locale;
+ return substituteTimeAgo.apply(null, a);
}
- function computeWeekdaysParse() {
- function cmpLenRev(a, b) {
- return b.length - a.length;
+ // This function allows you to set the rounding function for relative time strings
+ function getSetRelativeTimeRounding(roundingFunction) {
+ if (roundingFunction === undefined) {
+ return round;
}
+ if (typeof roundingFunction === 'function') {
+ round = roundingFunction;
+ return true;
+ }
+ return false;
+ }
- var minPieces = [],
- shortPieces = [],
- longPieces = [],
- mixedPieces = [],
- i,
- mom,
- minp,
- shortp,
- longp;
- for (i = 0; i < 7; i++) {
- // make the regex if we don't have it already
- mom = createUTC([2000, 1]).day(i);
- minp = regexEscape(this.weekdaysMin(mom, ''));
- shortp = regexEscape(this.weekdaysShort(mom, ''));
- longp = regexEscape(this.weekdays(mom, ''));
- minPieces.push(minp);
- shortPieces.push(shortp);
- longPieces.push(longp);
- mixedPieces.push(minp);
- mixedPieces.push(shortp);
- mixedPieces.push(longp);
+ // This function allows you to set a threshold for relative time strings
+ function getSetRelativeTimeThreshold(threshold, limit) {
+ if (thresholds[threshold] === undefined) {
+ return false;
}
- // Sorting makes sure if one weekday (or abbr) is a prefix of another it
- // will match the longer piece.
- minPieces.sort(cmpLenRev);
- shortPieces.sort(cmpLenRev);
- longPieces.sort(cmpLenRev);
- mixedPieces.sort(cmpLenRev);
+ if (limit === undefined) {
+ return thresholds[threshold];
+ }
+ thresholds[threshold] = limit;
+ if (threshold === 's') {
+ thresholds.ss = limit - 1;
+ }
+ return true;
+ }
- this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
- this._weekdaysShortRegex = this._weekdaysRegex;
- this._weekdaysMinRegex = this._weekdaysRegex;
+ function humanize(argWithSuffix, argThresholds) {
+ if (!this.isValid()) {
+ return this.localeData().invalidDate();
+ }
- this._weekdaysStrictRegex = new RegExp(
- '^(' + longPieces.join('|') + ')',
- 'i'
- );
- this._weekdaysShortStrictRegex = new RegExp(
- '^(' + shortPieces.join('|') + ')',
- 'i'
- );
- this._weekdaysMinStrictRegex = new RegExp(
- '^(' + minPieces.join('|') + ')',
- 'i'
- );
- }
+ var withSuffix = false,
+ th = thresholds,
+ locale,
+ output;
- // FORMATTING
+ if (typeof argWithSuffix === 'object') {
+ argThresholds = argWithSuffix;
+ argWithSuffix = false;
+ }
+ if (typeof argWithSuffix === 'boolean') {
+ withSuffix = argWithSuffix;
+ }
+ if (typeof argThresholds === 'object') {
+ th = Object.assign({}, thresholds, argThresholds);
+ if (argThresholds.s != null && argThresholds.ss == null) {
+ th.ss = argThresholds.s - 1;
+ }
+ }
- function hFormat() {
- return this.hours() % 12 || 12;
+ locale = this.localeData();
+ output = relativeTime$1(this, !withSuffix, th, locale);
+
+ if (withSuffix) {
+ output = locale.pastFuture(+this, output);
+ }
+
+ return locale.postformat(output);
}
- function kFormat() {
- return this.hours() || 24;
+ var abs$1 = Math.abs;
+
+ function sign(x) {
+ return (x > 0) - (x < 0) || +x;
}
- addFormatToken('H', ['HH', 2], 0, 'hour');
- addFormatToken('h', ['hh', 2], 0, hFormat);
- addFormatToken('k', ['kk', 2], 0, kFormat);
+ function toISOString$1() {
+ // for ISO strings we do not use the normal bubbling rules:
+ // * milliseconds bubble up until they become hours
+ // * days do not bubble at all
+ // * months bubble up until they become years
+ // This is because there is no context-free conversion between hours and days
+ // (think of clock changes)
+ // and also not between days and months (28-31 days per month)
+ if (!this.isValid()) {
+ return this.localeData().invalidDate();
+ }
- addFormatToken('hmm', 0, 0, function () {
- return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
- });
+ var seconds = abs$1(this._milliseconds) / 1000,
+ days = abs$1(this._days),
+ months = abs$1(this._months),
+ minutes,
+ hours,
+ years,
+ s,
+ total = this.asSeconds(),
+ totalSign,
+ ymSign,
+ daysSign,
+ hmsSign;
- addFormatToken('hmmss', 0, 0, function () {
- return (
- '' +
- hFormat.apply(this) +
- zeroFill(this.minutes(), 2) +
- zeroFill(this.seconds(), 2)
- );
- });
+ if (!total) {
+ // this is the same as C#'s (Noda) and python (isodate)...
+ // but not other JS (goog.date)
+ return 'P0D';
+ }
- addFormatToken('Hmm', 0, 0, function () {
- return '' + this.hours() + zeroFill(this.minutes(), 2);
- });
+ // 3600 seconds -> 60 minutes -> 1 hour
+ minutes = absFloor(seconds / 60);
+ hours = absFloor(minutes / 60);
+ seconds %= 60;
+ minutes %= 60;
+
+ // 12 months -> 1 year
+ years = absFloor(months / 12);
+ months %= 12;
+
+ // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
+ s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';
+
+ totalSign = total < 0 ? '-' : '';
+ ymSign = sign(this._months) !== sign(total) ? '-' : '';
+ daysSign = sign(this._days) !== sign(total) ? '-' : '';
+ hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';
- addFormatToken('Hmmss', 0, 0, function () {
return (
- '' +
- this.hours() +
- zeroFill(this.minutes(), 2) +
- zeroFill(this.seconds(), 2)
+ totalSign +
+ 'P' +
+ (years ? ymSign + years + 'Y' : '') +
+ (months ? ymSign + months + 'M' : '') +
+ (days ? daysSign + days + 'D' : '') +
+ (hours || minutes || seconds ? 'T' : '') +
+ (hours ? hmsSign + hours + 'H' : '') +
+ (minutes ? hmsSign + minutes + 'M' : '') +
+ (seconds ? hmsSign + s + 'S' : '')
);
- });
-
- function meridiem(token, lowercase) {
- addFormatToken(token, 0, 0, function () {
- return this.localeData().meridiem(
- this.hours(),
- this.minutes(),
- lowercase
- );
- });
}
- meridiem('a', true);
- meridiem('A', false);
+ var proto$2 = Duration.prototype;
- // ALIASES
+ proto$2.isValid = isValid$1;
+ proto$2.abs = abs;
+ proto$2.add = add$1;
+ proto$2.subtract = subtract$1;
+ proto$2.as = as;
+ proto$2.asMilliseconds = asMilliseconds;
+ proto$2.asSeconds = asSeconds;
+ proto$2.asMinutes = asMinutes;
+ proto$2.asHours = asHours;
+ proto$2.asDays = asDays;
+ proto$2.asWeeks = asWeeks;
+ proto$2.asMonths = asMonths;
+ proto$2.asQuarters = asQuarters;
+ proto$2.asYears = asYears;
+ proto$2.valueOf = valueOf$1;
+ proto$2._bubble = bubble;
+ proto$2.clone = clone$1;
+ proto$2.get = get$2;
+ proto$2.milliseconds = milliseconds;
+ proto$2.seconds = seconds;
+ proto$2.minutes = minutes;
+ proto$2.hours = hours;
+ proto$2.days = days;
+ proto$2.weeks = weeks;
+ proto$2.months = months;
+ proto$2.years = years;
+ proto$2.humanize = humanize;
+ proto$2.toISOString = toISOString$1;
+ proto$2.toString = toISOString$1;
+ proto$2.toJSON = toISOString$1;
+ proto$2.locale = locale;
+ proto$2.localeData = localeData;
- addUnitAlias('hour', 'h');
+ proto$2.toIsoString = deprecate(
+ 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',
+ toISOString$1
+ );
+ proto$2.lang = lang;
- // PRIORITY
- addUnitPriority('hour', 13);
+ // FORMATTING
+
+ addFormatToken('X', 0, 0, 'unix');
+ addFormatToken('x', 0, 0, 'valueOf');
// PARSING
- function matchMeridiem(isStrict, locale) {
- return locale._meridiemParse;
- }
+ addRegexToken('x', matchSigned);
+ addRegexToken('X', matchTimestamp);
+ addParseToken('X', function (input, array, config) {
+ config._d = new Date(parseFloat(input) * 1000);
+ });
+ addParseToken('x', function (input, array, config) {
+ config._d = new Date(toInt(input));
+ });
- addRegexToken('a', matchMeridiem);
- addRegexToken('A', matchMeridiem);
- addRegexToken('H', match1to2);
- addRegexToken('h', match1to2);
- addRegexToken('k', match1to2);
- addRegexToken('HH', match1to2, match2);
- addRegexToken('hh', match1to2, match2);
- addRegexToken('kk', match1to2, match2);
+ //! moment.js
- addRegexToken('hmm', match3to4);
- addRegexToken('hmmss', match5to6);
- addRegexToken('Hmm', match3to4);
- addRegexToken('Hmmss', match5to6);
+ hooks.version = '2.29.1';
- addParseToken(['H', 'HH'], HOUR);
- addParseToken(['k', 'kk'], function (input, array, config) {
- var kInput = toInt(input);
- array[HOUR] = kInput === 24 ? 0 : kInput;
- });
- addParseToken(['a', 'A'], function (input, array, config) {
- config._isPm = config._locale.isPM(input);
- config._meridiem = input;
- });
- addParseToken(['h', 'hh'], function (input, array, config) {
- array[HOUR] = toInt(input);
- getParsingFlags(config).bigHour = true;
- });
- addParseToken('hmm', function (input, array, config) {
- var pos = input.length - 2;
- array[HOUR] = toInt(input.substr(0, pos));
- array[MINUTE] = toInt(input.substr(pos));
- getParsingFlags(config).bigHour = true;
- });
- addParseToken('hmmss', function (input, array, config) {
- var pos1 = input.length - 4,
- pos2 = input.length - 2;
- array[HOUR] = toInt(input.substr(0, pos1));
- array[MINUTE] = toInt(input.substr(pos1, 2));
- array[SECOND] = toInt(input.substr(pos2));
- getParsingFlags(config).bigHour = true;
- });
- addParseToken('Hmm', function (input, array, config) {
- var pos = input.length - 2;
- array[HOUR] = toInt(input.substr(0, pos));
- array[MINUTE] = toInt(input.substr(pos));
- });
- addParseToken('Hmmss', function (input, array, config) {
- var pos1 = input.length - 4,
- pos2 = input.length - 2;
- array[HOUR] = toInt(input.substr(0, pos1));
- array[MINUTE] = toInt(input.substr(pos1, 2));
- array[SECOND] = toInt(input.substr(pos2));
- });
+ setHookCallback(createLocal);
- // LOCALES
+ hooks.fn = proto;
+ hooks.min = min;
+ hooks.max = max;
+ hooks.now = now;
+ hooks.utc = createUTC;
+ hooks.unix = createUnix;
+ hooks.months = listMonths;
+ hooks.isDate = isDate;
+ hooks.locale = getSetGlobalLocale;
+ hooks.invalid = createInvalid;
+ hooks.duration = createDuration;
+ hooks.isMoment = isMoment;
+ hooks.weekdays = listWeekdays;
+ hooks.parseZone = createInZone;
+ hooks.localeData = getLocale;
+ hooks.isDuration = isDuration;
+ hooks.monthsShort = listMonthsShort;
+ hooks.weekdaysMin = listWeekdaysMin;
+ hooks.defineLocale = defineLocale;
+ hooks.updateLocale = updateLocale;
+ hooks.locales = listLocales;
+ hooks.weekdaysShort = listWeekdaysShort;
+ hooks.normalizeUnits = normalizeUnits;
+ hooks.relativeTimeRounding = getSetRelativeTimeRounding;
+ hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
+ hooks.calendarFormat = getCalendarFormat;
+ hooks.prototype = proto;
- function localeIsPM(input) {
- // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
- // Using charAt should be more compatible.
- return (input + '').toLowerCase().charAt(0) === 'p';
- }
+ // currently HTML5 input type only supports 24-hour formats
+ hooks.HTML5_FMT = {
+ DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', //
+ DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', //
+ DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', //
+ DATE: 'YYYY-MM-DD', //
+ TIME: 'HH:mm', //
+ TIME_SECONDS: 'HH:mm:ss', //
+ TIME_MS: 'HH:mm:ss.SSS', //
+ WEEK: 'GGGG-[W]WW', //
+ MONTH: 'YYYY-MM', //
+ };
- var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
- // Setting the hour should keep the time, because the user explicitly
- // specified which hour they want. So trying to maintain the same hour (in
- // a new timezone) makes sense. Adding/subtracting hours does not follow
- // this rule.
- getSetHour = makeGetSet('Hours', true);
+ return hooks;
- function localeMeridiem(hours, minutes, isLower) {
- if (hours > 11) {
- return isLower ? 'pm' : 'PM';
- } else {
- return isLower ? 'am' : 'AM';
- }
- }
+})));
- var baseConfig = {
- calendar: defaultCalendar,
- longDateFormat: defaultLongDateFormat,
- invalidDate: defaultInvalidDate,
- ordinal: defaultOrdinal,
- dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
- relativeTime: defaultRelativeTime,
- months: defaultLocaleMonths,
- monthsShort: defaultLocaleMonthsShort,
+/***/ }),
- week: defaultLocaleWeek,
+/***/ 491:
+/***/ (function(module, __unusedexports, __webpack_require__) {
- weekdays: defaultLocaleWeekdays,
- weekdaysMin: defaultLocaleWeekdaysMin,
- weekdaysShort: defaultLocaleWeekdaysShort,
+"use strict";
- meridiemParse: defaultLocaleMeridiemParse,
- };
- // internal storage for locale config files
- var locales = {},
- localeFamilies = {},
- globalLocale;
+var fs = __webpack_require__(598);
+var path = __webpack_require__(622);
+var extend = __webpack_require__(374);
+var errcode = __webpack_require__(120);
+var retry = __webpack_require__(560);
+var syncFs = __webpack_require__(931);
- function commonPrefix(arr1, arr2) {
- var i,
- minl = Math.min(arr1.length, arr2.length);
- for (i = 0; i < minl; i += 1) {
- if (arr1[i] !== arr2[i]) {
- return i;
- }
- }
- return minl;
- }
+var locks = {};
- function normalizeLocale(key) {
- return key ? key.toLowerCase().replace('_', '-') : key;
+function getLockFile(file) {
+ return file + '.lock';
+}
+
+function canonicalPath(file, options, callback) {
+ if (!options.realpath) {
+ return callback(null, path.resolve(file));
}
- // pick the locale from the array
- // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
- // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
- function chooseLocale(names) {
- var i = 0,
- j,
- next,
- locale,
- split;
+ // Use realpath to resolve symlinks
+ // It also resolves relative paths
+ options.fs.realpath(file, callback);
+}
- while (i < names.length) {
- split = normalizeLocale(names[i]).split('-');
- j = split.length;
- next = normalizeLocale(names[i + 1]);
- next = next ? next.split('-') : null;
- while (j > 0) {
- locale = loadLocale(split.slice(0, j).join('-'));
- if (locale) {
- return locale;
- }
- if (
- next &&
- next.length >= j &&
- commonPrefix(split, next) >= j - 1
- ) {
- //the next array item is better than a shallower substring of this one
- break;
- }
- j--;
- }
- i++;
+function acquireLock(file, options, callback) {
+ // Use mkdir to create the lockfile (atomic operation)
+ options.fs.mkdir(getLockFile(file), function (err) {
+ // If successful, we are done
+ if (!err) {
+ return callback();
}
- return globalLocale;
- }
- function loadLocale(name) {
- var oldLocale = null,
- aliasedRequire;
- // TODO: Find a better way to register and load all the locales in Node
- if (
- locales[name] === undefined &&
- "object" !== 'undefined' &&
- module &&
- module.exports
- ) {
- try {
- oldLocale = globalLocale._abbr;
- aliasedRequire = require;
- aliasedRequire('./locale/' + name);
- getSetGlobalLocale(oldLocale);
- } catch (e) {
- // mark as not found to avoid repeating expensive file require call causing high CPU
- // when trying to find en-US, en_US, en-us for every format call
- locales[name] = null; // null means not found
- }
+ // If error is not EEXIST then some other error occurred while locking
+ if (err.code !== 'EEXIST') {
+ return callback(err);
}
- return locales[name];
- }
- // This function will load locale and then set the global locale. If
- // no arguments are passed in, it will simply return the current global
- // locale key.
- function getSetGlobalLocale(key, values) {
- var data;
- if (key) {
- if (isUndefined(values)) {
- data = getLocale(key);
- } else {
- data = defineLocale(key, values);
- }
+ // Otherwise, check if lock is stale by analyzing the file mtime
+ if (options.stale <= 0) {
+ return callback(errcode('Lock file is already being hold', 'ELOCKED', { file: file }));
+ }
- if (data) {
- // moment.duration._locale = moment._locale = data;
- globalLocale = data;
- } else {
- if (typeof console !== 'undefined' && console.warn) {
- //warn user if arguments are passed but the locale could not be set
- console.warn(
- 'Locale ' + key + ' not found. Did you forget to load it?'
- );
+ options.fs.stat(getLockFile(file), function (err, stat) {
+ if (err) {
+ // Retry if the lockfile has been removed (meanwhile)
+ // Skip stale check to avoid recursiveness
+ if (err.code === 'ENOENT') {
+ return acquireLock(file, extend({}, options, { stale: 0 }), callback);
}
+
+ return callback(err);
}
- }
- return globalLocale._abbr;
- }
+ if (!isLockStale(stat, options)) {
+ return callback(errcode('Lock file is already being hold', 'ELOCKED', { file: file }));
+ }
- function defineLocale(name, config) {
- if (config !== null) {
- var locale,
- parentConfig = baseConfig;
- config.abbr = name;
- if (locales[name] != null) {
- deprecateSimple(
- 'defineLocaleOverride',
- 'use moment.updateLocale(localeName, config) to change ' +
- 'an existing locale. moment.defineLocale(localeName, ' +
- 'config) should only be used for creating a new locale ' +
- 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'
- );
- parentConfig = locales[name]._config;
- } else if (config.parentLocale != null) {
- if (locales[config.parentLocale] != null) {
- parentConfig = locales[config.parentLocale]._config;
- } else {
- locale = loadLocale(config.parentLocale);
- if (locale != null) {
- parentConfig = locale._config;
- } else {
- if (!localeFamilies[config.parentLocale]) {
- localeFamilies[config.parentLocale] = [];
- }
- localeFamilies[config.parentLocale].push({
- name: name,
- config: config,
- });
- return null;
- }
+ // If it's stale, remove it and try again!
+ // Skip stale check to avoid recursiveness
+ removeLock(file, options, function (err) {
+ if (err) {
+ return callback(err);
}
- }
- locales[name] = new Locale(mergeConfigs(parentConfig, config));
- if (localeFamilies[name]) {
- localeFamilies[name].forEach(function (x) {
- defineLocale(x.name, x.config);
- });
- }
+ acquireLock(file, extend({}, options, { stale: 0 }), callback);
+ });
+ });
+ });
+}
- // backwards compat for now: also set the locale
- // make sure we set the locale AFTER all child locales have been
- // created, so we won't end up with the child locale set.
- getSetGlobalLocale(name);
+function isLockStale(stat, options) {
+ return stat.mtime.getTime() < Date.now() - options.stale;
+}
- return locales[name];
- } else {
- // useful for testing
- delete locales[name];
- return null;
+function removeLock(file, options, callback) {
+ // Remove lockfile, ignoring ENOENT errors
+ options.fs.rmdir(getLockFile(file), function (err) {
+ if (err && err.code !== 'ENOENT') {
+ return callback(err);
}
+
+ callback();
+ });
+}
+
+function updateLock(file, options) {
+ var lock = locks[file];
+
+ /* istanbul ignore next */
+ if (lock.updateTimeout) {
+ return;
}
- function updateLocale(name, config) {
- if (config != null) {
- var locale,
- tmpLocale,
- parentConfig = baseConfig;
+ lock.updateDelay = lock.updateDelay || options.update;
+ lock.updateTimeout = setTimeout(function () {
+ var mtime = Date.now() / 1000;
- if (locales[name] != null && locales[name].parentLocale != null) {
- // Update existing child locale in-place to avoid memory-leaks
- locales[name].set(mergeConfigs(locales[name]._config, config));
- } else {
- // MERGE
- tmpLocale = loadLocale(name);
- if (tmpLocale != null) {
- parentConfig = tmpLocale._config;
- }
- config = mergeConfigs(parentConfig, config);
- if (tmpLocale == null) {
- // updateLocale is called for creating a new locale
- // Set abbr so it will have a name (getters return
- // undefined otherwise).
- config.abbr = name;
- }
- locale = new Locale(config);
- locale.parentLocale = locales[name];
- locales[name] = locale;
- }
+ lock.updateTimeout = null;
- // backwards compat for now: also set the locale
- getSetGlobalLocale(name);
- } else {
- // pass null for config to unupdate, useful for tests
- if (locales[name] != null) {
- if (locales[name].parentLocale != null) {
- locales[name] = locales[name].parentLocale;
- if (name === getSetGlobalLocale()) {
- getSetGlobalLocale(name);
- }
- } else if (locales[name] != null) {
- delete locales[name];
- }
+ options.fs.utimes(getLockFile(file), mtime, mtime, function (err) {
+ // Ignore if the lock was released
+ if (lock.released) {
+ return;
}
- }
- return locales[name];
- }
- // returns locale data
- function getLocale(key) {
- var locale;
+ // Verify if we are within the stale threshold
+ if (lock.lastUpdate <= Date.now() - options.stale &&
+ lock.lastUpdate > Date.now() - options.stale * 2) {
+ return compromisedLock(file, lock,
+ errcode(lock.updateError || 'Unable to update lock within the stale threshold', 'ECOMPROMISED'));
+ }
- if (key && key._locale && key._locale._abbr) {
- key = key._locale._abbr;
- }
+ // If the file is older than (stale * 2), we assume the clock is moved manually,
+ // which we consider a valid case
- if (!key) {
- return globalLocale;
- }
+ // If it failed to update the lockfile, keep trying unless
+ // the lockfile was deleted!
+ if (err) {
+ if (err.code === 'ENOENT') {
+ return compromisedLock(file, lock, errcode(err, 'ECOMPROMISED'));
+ }
- if (!isArray(key)) {
- //short-circuit everything else
- locale = loadLocale(key);
- if (locale) {
- return locale;
+ lock.updateError = err;
+ lock.updateDelay = 1000;
+ return updateLock(file, options);
}
- key = [key];
- }
- return chooseLocale(key);
- }
+ // All ok, keep updating..
+ lock.lastUpdate = Date.now();
+ lock.updateError = null;
+ lock.updateDelay = null;
+ updateLock(file, options);
+ });
+ }, lock.updateDelay);
- function listLocales() {
- return keys(locales);
- }
+ // Unref the timer so that the nodejs process can exit freely
+ // This is safe because all acquired locks will be automatically released
+ // on process exit
+ lock.updateTimeout.unref();
+}
- function checkOverflow(m) {
- var overflow,
- a = m._a;
+function compromisedLock(file, lock, err) {
+ lock.released = true; // Signal the lock has been released
+ /* istanbul ignore next */
+ lock.updateTimeout && clearTimeout(lock.updateTimeout); // Cancel lock mtime update
- if (a && getParsingFlags(m).overflow === -2) {
- overflow =
- a[MONTH] < 0 || a[MONTH] > 11
- ? MONTH
- : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])
- ? DATE
- : a[HOUR] < 0 ||
- a[HOUR] > 24 ||
- (a[HOUR] === 24 &&
- (a[MINUTE] !== 0 ||
- a[SECOND] !== 0 ||
- a[MILLISECOND] !== 0))
- ? HOUR
- : a[MINUTE] < 0 || a[MINUTE] > 59
- ? MINUTE
- : a[SECOND] < 0 || a[SECOND] > 59
- ? SECOND
- : a[MILLISECOND] < 0 || a[MILLISECOND] > 999
- ? MILLISECOND
- : -1;
+ if (locks[file] === lock) {
+ delete locks[file];
+ }
- if (
- getParsingFlags(m)._overflowDayOfYear &&
- (overflow < YEAR || overflow > DATE)
- ) {
- overflow = DATE;
- }
- if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
- overflow = WEEK;
- }
- if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
- overflow = WEEKDAY;
- }
+ lock.compromised(err);
+}
- getParsingFlags(m).overflow = overflow;
- }
+// -----------------------------------------
- return m;
+function lock(file, options, compromised, callback) {
+ if (typeof options === 'function') {
+ callback = compromised;
+ compromised = options;
+ options = null;
}
- // iso 8601 regex
- // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
- var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
- basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
- tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
- isoDates = [
- ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
- ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
- ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
- ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
- ['YYYY-DDD', /\d{4}-\d{3}/],
- ['YYYY-MM', /\d{4}-\d\d/, false],
- ['YYYYYYMMDD', /[+-]\d{10}/],
- ['YYYYMMDD', /\d{8}/],
- ['GGGG[W]WWE', /\d{4}W\d{3}/],
- ['GGGG[W]WW', /\d{4}W\d{2}/, false],
- ['YYYYDDD', /\d{7}/],
- ['YYYYMM', /\d{6}/, false],
- ['YYYY', /\d{4}/, false],
- ],
- // iso time formats and regexes
- isoTimes = [
- ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
- ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
- ['HH:mm:ss', /\d\d:\d\d:\d\d/],
- ['HH:mm', /\d\d:\d\d/],
- ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
- ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
- ['HHmmss', /\d\d\d\d\d\d/],
- ['HHmm', /\d\d\d\d/],
- ['HH', /\d\d/],
- ],
- aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
- // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
- rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
- obsOffsets = {
- UT: 0,
- GMT: 0,
- EDT: -4 * 60,
- EST: -5 * 60,
- CDT: -5 * 60,
- CST: -6 * 60,
- MDT: -6 * 60,
- MST: -7 * 60,
- PDT: -7 * 60,
- PST: -8 * 60,
- };
+ if (!callback) {
+ callback = compromised;
+ compromised = null;
+ }
- // date from iso format
- function configFromISO(config) {
- var i,
- l,
- string = config._i,
- match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
- allowTime,
- dateFormat,
- timeFormat,
- tzFormat;
+ options = extend({
+ stale: 10000,
+ update: null,
+ realpath: true,
+ retries: 0,
+ fs: fs,
+ }, options);
- if (match) {
- getParsingFlags(config).iso = true;
+ options.retries = options.retries || 0;
+ options.retries = typeof options.retries === 'number' ? { retries: options.retries } : options.retries;
+ options.stale = Math.max(options.stale || 0, 2000);
+ options.update = options.update == null ? options.stale / 2 : options.update || 0;
+ options.update = Math.max(Math.min(options.update, options.stale / 2), 1000);
+ compromised = compromised || function (err) { throw err; };
- for (i = 0, l = isoDates.length; i < l; i++) {
- if (isoDates[i][1].exec(match[1])) {
- dateFormat = isoDates[i][0];
- allowTime = isoDates[i][2] !== false;
- break;
- }
- }
- if (dateFormat == null) {
- config._isValid = false;
- return;
- }
- if (match[3]) {
- for (i = 0, l = isoTimes.length; i < l; i++) {
- if (isoTimes[i][1].exec(match[3])) {
- // match[2] should be 'T' or space
- timeFormat = (match[2] || ' ') + isoTimes[i][0];
- break;
- }
- }
- if (timeFormat == null) {
- config._isValid = false;
+ // Resolve to a canonical file path
+ canonicalPath(file, options, function (err, file) {
+ var operation;
+
+ if (err) {
+ return callback(err);
+ }
+
+ // Attempt to acquire the lock
+ operation = retry.operation(options.retries);
+ operation.attempt(function () {
+ acquireLock(file, options, function (err) {
+ var lock;
+
+ if (operation.retry(err)) {
return;
}
- }
- if (!allowTime && timeFormat != null) {
- config._isValid = false;
- return;
- }
- if (match[4]) {
- if (tzRegex.exec(match[4])) {
- tzFormat = 'Z';
- } else {
- config._isValid = false;
- return;
+
+ if (err) {
+ return callback(operation.mainError());
}
- }
- config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
- configFromStringAndFormat(config);
- } else {
- config._isValid = false;
- }
- }
- function extractFromRFC2822Strings(
- yearStr,
- monthStr,
- dayStr,
- hourStr,
- minuteStr,
- secondStr
- ) {
- var result = [
- untruncateYear(yearStr),
- defaultLocaleMonthsShort.indexOf(monthStr),
- parseInt(dayStr, 10),
- parseInt(hourStr, 10),
- parseInt(minuteStr, 10),
- ];
+ // We now own the lock
+ locks[file] = lock = {
+ options: options,
+ compromised: compromised,
+ lastUpdate: Date.now(),
+ };
- if (secondStr) {
- result.push(parseInt(secondStr, 10));
- }
+ // We must keep the lock fresh to avoid staleness
+ updateLock(file, options);
- return result;
- }
+ callback(null, function (releasedCallback) {
+ if (lock.released) {
+ return releasedCallback && releasedCallback(errcode('Lock is already released', 'ERELEASED'));
+ }
- function untruncateYear(yearStr) {
- var year = parseInt(yearStr, 10);
- if (year <= 49) {
- return 2000 + year;
- } else if (year <= 999) {
- return 1900 + year;
- }
- return year;
- }
+ // Not necessary to use realpath twice when unlocking
+ unlock(file, extend({}, options, { realpath: false }), releasedCallback);
+ });
+ });
+ });
+ });
+}
- function preprocessRFC2822(s) {
- // Remove comments and folding whitespace and replace multiple-spaces with a single space
- return s
- .replace(/\([^)]*\)|[\n\t]/g, ' ')
- .replace(/(\s\s+)/g, ' ')
- .replace(/^\s\s*/, '')
- .replace(/\s\s*$/, '');
+function unlock(file, options, callback) {
+ if (typeof options === 'function') {
+ callback = options;
+ options = null;
}
- function checkWeekday(weekdayStr, parsedInput, config) {
- if (weekdayStr) {
- // TODO: Replace the vanilla JS Date object with an independent day-of-week check.
- var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
- weekdayActual = new Date(
- parsedInput[0],
- parsedInput[1],
- parsedInput[2]
- ).getDay();
- if (weekdayProvided !== weekdayActual) {
- getParsingFlags(config).weekdayMismatch = true;
- config._isValid = false;
- return false;
- }
+ options = extend({
+ fs: fs,
+ realpath: true,
+ }, options);
+
+ callback = callback || function () {};
+
+ // Resolve to a canonical file path
+ canonicalPath(file, options, function (err, file) {
+ var lock;
+
+ if (err) {
+ return callback(err);
}
- return true;
- }
- function calculateOffset(obsOffset, militaryOffset, numOffset) {
- if (obsOffset) {
- return obsOffsets[obsOffset];
- } else if (militaryOffset) {
- // the only allowed military tz is Z
- return 0;
- } else {
- var hm = parseInt(numOffset, 10),
- m = hm % 100,
- h = (hm - m) / 100;
- return h * 60 + m;
+ // Skip if the lock is not acquired
+ lock = locks[file];
+ if (!lock) {
+ return callback(errcode('Lock is not acquired/owned by you', 'ENOTACQUIRED'));
}
- }
- // date and time from ref 2822 format
- function configFromRFC2822(config) {
- var match = rfc2822.exec(preprocessRFC2822(config._i)),
- parsedArray;
- if (match) {
- parsedArray = extractFromRFC2822Strings(
- match[4],
- match[3],
- match[2],
- match[5],
- match[6],
- match[7]
- );
- if (!checkWeekday(match[1], parsedArray, config)) {
- return;
- }
+ lock.updateTimeout && clearTimeout(lock.updateTimeout); // Cancel lock mtime update
+ lock.released = true; // Signal the lock has been released
+ delete locks[file]; // Delete from locks
- config._a = parsedArray;
- config._tzm = calculateOffset(match[8], match[9], match[10]);
+ removeLock(file, options, callback);
+ });
+}
- config._d = createUTCDate.apply(null, config._a);
- config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
+function lockSync(file, options, compromised) {
+ var err;
+ var release;
- getParsingFlags(config).rfc2822 = true;
- } else {
- config._isValid = false;
- }
+ if (typeof options === 'function') {
+ compromised = options;
+ options = null;
}
- // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict
- function configFromString(config) {
- var matched = aspNetJsonRegex.exec(config._i);
- if (matched !== null) {
- config._d = new Date(+matched[1]);
- return;
- }
-
- configFromISO(config);
- if (config._isValid === false) {
- delete config._isValid;
- } else {
- return;
- }
-
- configFromRFC2822(config);
- if (config._isValid === false) {
- delete config._isValid;
- } else {
- return;
- }
+ options = options || {};
+ options.fs = syncFs(options.fs || fs);
+ options.retries = options.retries || 0;
+ options.retries = typeof options.retries === 'number' ? { retries: options.retries } : options.retries;
- if (config._strict) {
- config._isValid = false;
- } else {
- // Final attempt, use Input Fallback
- hooks.createFromInputFallback(config);
- }
+ // Retries are not allowed because it requires the flow to be sync
+ if (options.retries.retries) {
+ throw errcode('Cannot use retries with the sync api', 'ESYNC');
}
- hooks.createFromInputFallback = deprecate(
- 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
- 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
- 'discouraged and will be removed in an upcoming major release. Please refer to ' +
- 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
- function (config) {
- config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
- }
- );
+ lock(file, options, compromised, function (_err, _release) {
+ err = _err;
+ release = _release;
+ });
- // Pick the first defined of two or three arguments.
- function defaults(a, b, c) {
- if (a != null) {
- return a;
- }
- if (b != null) {
- return b;
- }
- return c;
+ if (err) {
+ throw err;
}
- function currentDateArray(config) {
- // hooks is actually the exported moment object
- var nowValue = new Date(hooks.now());
- if (config._useUTC) {
- return [
- nowValue.getUTCFullYear(),
- nowValue.getUTCMonth(),
- nowValue.getUTCDate(),
- ];
- }
- return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
- }
+ return release;
+}
- // convert an array to a date.
- // the array should mirror the parameters below
- // note: all values past the year are optional and will default to the lowest possible value.
- // [year, month, day , hour, minute, second, millisecond]
- function configFromArray(config) {
- var i,
- date,
- input = [],
- currentDate,
- expectedWeekday,
- yearToUse;
+function unlockSync(file, options) {
+ var err;
- if (config._d) {
- return;
- }
+ options = options || {};
+ options.fs = syncFs(options.fs || fs);
- currentDate = currentDateArray(config);
+ unlock(file, options, function (_err) {
+ err = _err;
+ });
- //compute day of the year from weeks and weekdays
- if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
- dayOfYearFromWeekInfo(config);
- }
+ if (err) {
+ throw err;
+ }
+}
- //if the day of the year is set, figure out what it is
- if (config._dayOfYear != null) {
- yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
+function check(file, options, callback) {
+ if (typeof options === 'function') {
+ callback = options;
+ options = null;
+ }
- if (
- config._dayOfYear > daysInYear(yearToUse) ||
- config._dayOfYear === 0
- ) {
- getParsingFlags(config)._overflowDayOfYear = true;
- }
+ options = extend({
+ stale: 10000,
+ realpath: true,
+ fs: fs,
+ }, options);
- date = createUTCDate(yearToUse, 0, config._dayOfYear);
- config._a[MONTH] = date.getUTCMonth();
- config._a[DATE] = date.getUTCDate();
- }
+ options.stale = Math.max(options.stale || 0, 2000);
- // Default to current date.
- // * if no year, month, day of month are given, default to today
- // * if day of month is given, default month and year
- // * if month is given, default only year
- // * if year is given, don't default anything
- for (i = 0; i < 3 && config._a[i] == null; ++i) {
- config._a[i] = input[i] = currentDate[i];
+ // Resolve to a canonical file path
+ canonicalPath(file, options, function (err, file) {
+ if (err) {
+ return callback(err);
}
- // Zero out whatever was not defaulted, including time
- for (; i < 7; i++) {
- config._a[i] = input[i] =
- config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];
- }
+ // Check if lockfile exists
+ options.fs.stat(getLockFile(file), function (err, stat) {
+ if (err) {
+ // if does not exist, file is not locked. Otherwise, callback with error
+ return (err.code === 'ENOENT') ? callback(null, false) : callback(err);
+ }
- // Check for 24:00:00.000
- if (
- config._a[HOUR] === 24 &&
- config._a[MINUTE] === 0 &&
- config._a[SECOND] === 0 &&
- config._a[MILLISECOND] === 0
- ) {
- config._nextDay = true;
- config._a[HOUR] = 0;
- }
+ if (options.stale <= 0) { return callback(null, true); }
- config._d = (config._useUTC ? createUTCDate : createDate).apply(
- null,
- input
- );
- expectedWeekday = config._useUTC
- ? config._d.getUTCDay()
- : config._d.getDay();
+ // Otherwise, check if lock is stale by analyzing the file mtime
+ return callback(null, !isLockStale(stat, options));
+ });
+ });
+}
- // Apply timezone offset from input. The actual utcOffset can be changed
- // with parseZone.
- if (config._tzm != null) {
- config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
- }
+function checkSync(file, options) {
+ var err;
+ var locked;
- if (config._nextDay) {
- config._a[HOUR] = 24;
- }
+ options = options || {};
+ options.fs = syncFs(options.fs || fs);
- // check for mismatching day of week
- if (
- config._w &&
- typeof config._w.d !== 'undefined' &&
- config._w.d !== expectedWeekday
- ) {
- getParsingFlags(config).weekdayMismatch = true;
- }
- }
+ check(file, options, function (_err, _locked) {
+ err = _err;
+ locked = _locked;
+ });
- function dayOfYearFromWeekInfo(config) {
- var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;
+ if (err) {
+ throw err;
+ }
- w = config._w;
- if (w.GG != null || w.W != null || w.E != null) {
- dow = 1;
- doy = 4;
+ return locked;
+}
- // TODO: We need to take the current isoWeekYear, but that depends on
- // how we interpret now (local, utc, fixed offset). So create
- // a now version of current config (take local/utc/offset flags, and
- // create now).
- weekYear = defaults(
- w.GG,
- config._a[YEAR],
- weekOfYear(createLocal(), 1, 4).year
- );
- week = defaults(w.W, 1);
- weekday = defaults(w.E, 1);
- if (weekday < 1 || weekday > 7) {
- weekdayOverflow = true;
- }
- } else {
- dow = config._locale._week.dow;
- doy = config._locale._week.doy;
- curWeek = weekOfYear(createLocal(), dow, doy);
+// Remove acquired locks on exit
+/* istanbul ignore next */
+process.on('exit', function () {
+ Object.keys(locks).forEach(function (file) {
+ try { locks[file].options.fs.rmdirSync(getLockFile(file)); } catch (e) { /* empty */ }
+ });
+});
- weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
+module.exports = lock;
+module.exports.lock = lock;
+module.exports.unlock = unlock;
+module.exports.lockSync = lockSync;
+module.exports.unlockSync = unlockSync;
+module.exports.check = check;
+module.exports.checkSync = checkSync;
- // Default to current week.
- week = defaults(w.w, curWeek.week);
- if (w.d != null) {
- // weekday -- low day numbers are considered next week
- weekday = w.d;
- if (weekday < 0 || weekday > 6) {
- weekdayOverflow = true;
- }
- } else if (w.e != null) {
- // local weekday -- counting starts from beginning of week
- weekday = w.e + dow;
- if (w.e < 0 || w.e > 6) {
- weekdayOverflow = true;
- }
- } else {
- // default to beginning of week
- weekday = dow;
- }
- }
- if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
- getParsingFlags(config)._overflowWeeks = true;
- } else if (weekdayOverflow != null) {
- getParsingFlags(config)._overflowWeekday = true;
- } else {
- temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
- config._a[YEAR] = temp.year;
- config._dayOfYear = temp.dayOfYear;
- }
- }
+/***/ }),
- // constant that refers to the ISO standard
- hooks.ISO_8601 = function () {};
+/***/ 495:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- // constant that refers to the RFC 2822 form
- hooks.RFC_2822 = function () {};
+"use strict";
- // date from string and format string
- function configFromStringAndFormat(config) {
- // TODO: Move this to another part of the creation flow to prevent circular deps
- if (config._f === hooks.ISO_8601) {
- configFromISO(config);
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.cleanup = void 0;
+const fs_extra_1 = __importDefault(__webpack_require__(226));
+const path_1 = __importDefault(__webpack_require__(622));
+const core = __importStar(__webpack_require__(470));
+const io = __importStar(__webpack_require__(1));
+const git_command_manager_1 = __webpack_require__(289);
+const git_auth_helper_1 = __webpack_require__(287);
+const github_action_context_1 = __webpack_require__(821);
+const settings_1 = __webpack_require__(648);
+function cleanup(repositoryPath) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!repositoryPath || !fs_extra_1.default.existsSync(path_1.default.join(repositoryPath, ".git", "config"))) {
return;
}
- if (config._f === hooks.RFC_2822) {
- configFromRFC2822(config);
+ let git;
+ try {
+ git = yield git_command_manager_1.createCommandManager(repositoryPath);
+ }
+ catch (_a) {
return;
}
- config._a = [];
- getParsingFlags(config).empty = true;
-
- // This array is used to make a Date, either with `new Date` or `Date.UTC`
- var string = '' + config._i,
- i,
- parsedInput,
- tokens,
- token,
- skipped,
- stringLength = string.length,
- totalParsedInputLength = 0,
- era;
-
- tokens =
- expandFormat(config._f, config._locale).match(formattingTokens) || [];
-
- for (i = 0; i < tokens.length; i++) {
- token = tokens[i];
- parsedInput = (string.match(getParseRegexForToken(token, config)) ||
- [])[0];
- // console.log('token', token, 'parsedInput', parsedInput,
- // 'regex', getParseRegexForToken(token, config));
- if (parsedInput) {
- skipped = string.substr(0, string.indexOf(parsedInput));
- if (skipped.length > 0) {
- getParsingFlags(config).unusedInput.push(skipped);
- }
- string = string.slice(
- string.indexOf(parsedInput) + parsedInput.length
- );
- totalParsedInputLength += parsedInput.length;
- }
- // don't parse if it's not a known token
- if (formatTokenFunctions[token]) {
- if (parsedInput) {
- getParsingFlags(config).empty = false;
- } else {
- getParsingFlags(config).unusedTokens.push(token);
- }
- addTimeToArrayFromToken(token, parsedInput, config);
- } else if (config._strict && !parsedInput) {
- getParsingFlags(config).unusedTokens.push(token);
- }
+ try {
+ const context = new github_action_context_1.GithubActionContext();
+ let settings = new settings_1.Settings(context);
+ // Remove auth
+ const authHelper = new git_auth_helper_1.GitAuthHelper(git, settings);
+ yield authHelper.removeAuth();
+ yield io.rmRF(repositoryPath);
}
-
- // add remaining unparsed input length to the string
- getParsingFlags(config).charsLeftOver =
- stringLength - totalParsedInputLength;
- if (string.length > 0) {
- getParsingFlags(config).unusedInput.push(string);
+ catch (error) {
+ core.setFailed(error.message);
}
+ });
+}
+exports.cleanup = cleanup;
- // clear _12h flag if hour is <= 12
- if (
- config._a[HOUR] <= 12 &&
- getParsingFlags(config).bigHour === true &&
- config._a[HOUR] > 0
- ) {
- getParsingFlags(config).bigHour = undefined;
- }
- getParsingFlags(config).parsedDateParts = config._a.slice(0);
- getParsingFlags(config).meridiem = config._meridiem;
- // handle meridiem
- config._a[HOUR] = meridiemFixWrap(
- config._locale,
- config._a[HOUR],
- config._meridiem
- );
+/***/ }),
- // handle era
- era = getParsingFlags(config).era;
- if (era !== null) {
- config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
- }
+/***/ 498:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- configFromArray(config);
- checkOverflow(config);
- }
+"use strict";
- function meridiemFixWrap(locale, hour, meridiem) {
- var isPm;
- if (meridiem == null) {
- // nothing to do
- return hour;
- }
- if (locale.meridiemHour != null) {
- return locale.meridiemHour(hour, meridiem);
- } else if (locale.isPM != null) {
- // Fallback
- isPm = locale.isPM(meridiem);
- if (isPm && hour < 12) {
- hour += 12;
- }
- if (!isPm && hour === 12) {
- hour = 0;
- }
- return hour;
- } else {
- // this is not supposed to happen
- return hour;
- }
- }
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
- // date from string and array of format strings
- function configFromStringAndArray(config) {
- var tempConfig,
- bestMoment,
- scoreToBeat,
- i,
- currentScore,
- validFormatFound,
- bestFormatIsValid = false;
+var _crypto = _interopRequireDefault(__webpack_require__(417));
- if (config._f.length === 0) {
- getParsingFlags(config).invalidFormat = true;
- config._d = new Date(NaN);
- return;
- }
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- for (i = 0; i < config._f.length; i++) {
- currentScore = 0;
- validFormatFound = false;
- tempConfig = copyConfig({}, config);
- if (config._useUTC != null) {
- tempConfig._useUTC = config._useUTC;
- }
- tempConfig._f = config._f[i];
- configFromStringAndFormat(tempConfig);
+function sha1(bytes) {
+ if (Array.isArray(bytes)) {
+ bytes = Buffer.from(bytes);
+ } else if (typeof bytes === 'string') {
+ bytes = Buffer.from(bytes, 'utf8');
+ }
- if (isValid(tempConfig)) {
- validFormatFound = true;
- }
+ return _crypto.default.createHash('sha1').update(bytes).digest();
+}
- // if there is any input that was not parsed add a penalty for that format
- currentScore += getParsingFlags(tempConfig).charsLeftOver;
+var _default = sha1;
+exports.default = _default;
- //or tokens
- currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
+/***/ }),
- getParsingFlags(tempConfig).score = currentScore;
+/***/ 500:
+/***/ (function(module, __unusedexports, __webpack_require__) {
- if (!bestFormatIsValid) {
- if (
- scoreToBeat == null ||
- currentScore < scoreToBeat ||
- validFormatFound
- ) {
- scoreToBeat = currentScore;
- bestMoment = tempConfig;
- if (validFormatFound) {
- bestFormatIsValid = true;
- }
- }
- } else {
- if (currentScore < scoreToBeat) {
- scoreToBeat = currentScore;
- bestMoment = tempConfig;
- }
- }
- }
+"use strict";
- extend(config, bestMoment || tempConfig);
- }
- function configFromObject(config) {
- if (config._d) {
- return;
- }
+const fs = __webpack_require__(598)
+const path = __webpack_require__(622)
+const copy = __webpack_require__(774).copy
+const remove = __webpack_require__(723).remove
+const mkdirp = __webpack_require__(727).mkdirp
+const pathExists = __webpack_require__(322).pathExists
+const stat = __webpack_require__(127)
- var i = normalizeObjectUnits(config._i),
- dayOrDate = i.day === undefined ? i.date : i.day;
- config._a = map(
- [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
- function (obj) {
- return obj && parseInt(obj, 10);
- }
- );
+function move (src, dest, opts, cb) {
+ if (typeof opts === 'function') {
+ cb = opts
+ opts = {}
+ }
- configFromArray(config);
- }
+ const overwrite = opts.overwrite || opts.clobber || false
- function createFromConfig(config) {
- var res = new Moment(checkOverflow(prepareConfig(config)));
- if (res._nextDay) {
- // Adding is smart enough around DST
- res.add(1, 'd');
- res._nextDay = undefined;
- }
+ stat.checkPaths(src, dest, 'move', (err, stats) => {
+ if (err) return cb(err)
+ const { srcStat } = stats
+ stat.checkParentPaths(src, srcStat, dest, 'move', err => {
+ if (err) return cb(err)
+ mkdirp(path.dirname(dest), err => {
+ if (err) return cb(err)
+ return doRename(src, dest, overwrite, cb)
+ })
+ })
+ })
+}
- return res;
- }
+function doRename (src, dest, overwrite, cb) {
+ if (overwrite) {
+ return remove(dest, err => {
+ if (err) return cb(err)
+ return rename(src, dest, overwrite, cb)
+ })
+ }
+ pathExists(dest, (err, destExists) => {
+ if (err) return cb(err)
+ if (destExists) return cb(new Error('dest already exists.'))
+ return rename(src, dest, overwrite, cb)
+ })
+}
- function prepareConfig(config) {
- var input = config._i,
- format = config._f;
+function rename (src, dest, overwrite, cb) {
+ fs.rename(src, dest, err => {
+ if (!err) return cb()
+ if (err.code !== 'EXDEV') return cb(err)
+ return moveAcrossDevice(src, dest, overwrite, cb)
+ })
+}
- config._locale = config._locale || getLocale(config._l);
+function moveAcrossDevice (src, dest, overwrite, cb) {
+ const opts = {
+ overwrite,
+ errorOnExist: true
+ }
+ copy(src, dest, opts, err => {
+ if (err) return cb(err)
+ return remove(src, cb)
+ })
+}
- if (input === null || (format === undefined && input === '')) {
- return createInvalid({ nullInput: true });
- }
+module.exports = move
- if (typeof input === 'string') {
- config._i = input = config._locale.preparse(input);
- }
- if (isMoment(input)) {
- return new Moment(checkOverflow(input));
- } else if (isDate(input)) {
- config._d = input;
- } else if (isArray(format)) {
- configFromStringAndArray(config);
- } else if (format) {
- configFromStringAndFormat(config);
- } else {
- configFromInput(config);
- }
+/***/ }),
- if (!isValid(config)) {
- config._d = null;
- }
+/***/ 510:
+/***/ (function(module) {
- return config;
- }
+module.exports = addHook;
- function configFromInput(config) {
- var input = config._i;
- if (isUndefined(input)) {
- config._d = new Date(hooks.now());
- } else if (isDate(input)) {
- config._d = new Date(input.valueOf());
- } else if (typeof input === 'string') {
- configFromString(config);
- } else if (isArray(input)) {
- config._a = map(input.slice(0), function (obj) {
- return parseInt(obj, 10);
- });
- configFromArray(config);
- } else if (isObject(input)) {
- configFromObject(config);
- } else if (isNumber(input)) {
- // from milliseconds
- config._d = new Date(input);
- } else {
- hooks.createFromInputFallback(config);
- }
- }
+function addHook(state, kind, name, hook) {
+ var orig = hook;
+ if (!state.registry[name]) {
+ state.registry[name] = [];
+ }
- function createLocalOrUTC(input, format, locale, strict, isUTC) {
- var c = {};
+ if (kind === "before") {
+ hook = function (method, options) {
+ return Promise.resolve()
+ .then(orig.bind(null, options))
+ .then(method.bind(null, options));
+ };
+ }
- if (format === true || format === false) {
- strict = format;
- format = undefined;
- }
+ if (kind === "after") {
+ hook = function (method, options) {
+ var result;
+ return Promise.resolve()
+ .then(method.bind(null, options))
+ .then(function (result_) {
+ result = result_;
+ return orig(result, options);
+ })
+ .then(function () {
+ return result;
+ });
+ };
+ }
- if (locale === true || locale === false) {
- strict = locale;
- locale = undefined;
- }
+ if (kind === "error") {
+ hook = function (method, options) {
+ return Promise.resolve()
+ .then(method.bind(null, options))
+ .catch(function (error) {
+ return orig(error, options);
+ });
+ };
+ }
- if (
- (isObject(input) && isObjectEmpty(input)) ||
- (isArray(input) && input.length === 0)
- ) {
- input = undefined;
- }
- // object construction must be done this way.
- // https://github.com/moment/moment/issues/1423
- c._isAMomentObject = true;
- c._useUTC = c._isUTC = isUTC;
- c._l = locale;
- c._i = input;
- c._f = format;
- c._strict = strict;
+ state.registry[name].push({
+ hook: hook,
+ orig: orig,
+ });
+}
- return createFromConfig(c);
- }
- function createLocal(input, format, locale, strict) {
- return createLocalOrUTC(input, format, locale, strict, false);
- }
+/***/ }),
- var prototypeMin = deprecate(
- 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
- function () {
- var other = createLocal.apply(null, arguments);
- if (this.isValid() && other.isValid()) {
- return other < this ? this : other;
- } else {
- return createInvalid();
- }
- }
- ),
- prototypeMax = deprecate(
- 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
- function () {
- var other = createLocal.apply(null, arguments);
- if (this.isValid() && other.isValid()) {
- return other > this ? this : other;
- } else {
- return createInvalid();
- }
- }
- );
+/***/ 514:
+/***/ (function(module, __unusedexports, __webpack_require__) {
- // Pick a moment m from moments so that m[fn](other) is true for all
- // other. This relies on the function fn to be transitive.
- //
- // moments should either be an array of moment objects or an array, whose
- // first element is an array of moment objects.
- function pickBy(fn, moments) {
- var res, i;
- if (moments.length === 1 && isArray(moments[0])) {
- moments = moments[0];
- }
- if (!moments.length) {
- return createLocal();
+"use strict";
+
+module.exports = function(Promise, PromiseArray, apiRejection, debug) {
+var util = __webpack_require__(248);
+var tryCatch = util.tryCatch;
+var errorObj = util.errorObj;
+var async = Promise._async;
+
+Promise.prototype["break"] = Promise.prototype.cancel = function() {
+ if (!debug.cancellation()) return this._warn("cancellation is disabled");
+
+ var promise = this;
+ var child = promise;
+ while (promise._isCancellable()) {
+ if (!promise._cancelBy(child)) {
+ if (child._isFollowing()) {
+ child._followee().cancel();
+ } else {
+ child._cancelBranched();
+ }
+ break;
}
- res = moments[0];
- for (i = 1; i < moments.length; ++i) {
- if (!moments[i].isValid() || moments[i][fn](res)) {
- res = moments[i];
+
+ var parent = promise._cancellationParent;
+ if (parent == null || !parent._isCancellable()) {
+ if (promise._isFollowing()) {
+ promise._followee().cancel();
+ } else {
+ promise._cancelBranched();
}
+ break;
+ } else {
+ if (promise._isFollowing()) promise._followee().cancel();
+ promise._setWillBeCancelled();
+ child = promise;
+ promise = parent;
}
- return res;
}
+};
- // TODO: Use [].sort instead?
- function min() {
- var args = [].slice.call(arguments, 0);
+Promise.prototype._branchHasCancelled = function() {
+ this._branchesRemainingToCancel--;
+};
- return pickBy('isBefore', args);
- }
+Promise.prototype._enoughBranchesHaveCancelled = function() {
+ return this._branchesRemainingToCancel === undefined ||
+ this._branchesRemainingToCancel <= 0;
+};
- function max() {
- var args = [].slice.call(arguments, 0);
+Promise.prototype._cancelBy = function(canceller) {
+ if (canceller === this) {
+ this._branchesRemainingToCancel = 0;
+ this._invokeOnCancel();
+ return true;
+ } else {
+ this._branchHasCancelled();
+ if (this._enoughBranchesHaveCancelled()) {
+ this._invokeOnCancel();
+ return true;
+ }
+ }
+ return false;
+};
- return pickBy('isAfter', args);
+Promise.prototype._cancelBranched = function() {
+ if (this._enoughBranchesHaveCancelled()) {
+ this._cancel();
}
+};
- var now = function () {
- return Date.now ? Date.now() : +new Date();
- };
+Promise.prototype._cancel = function() {
+ if (!this._isCancellable()) return;
+ this._setCancelled();
+ async.invoke(this._cancelPromises, this, undefined);
+};
- var ordering = [
- 'year',
- 'quarter',
- 'month',
- 'week',
- 'day',
- 'hour',
- 'minute',
- 'second',
- 'millisecond',
- ];
+Promise.prototype._cancelPromises = function() {
+ if (this._length() > 0) this._settlePromises();
+};
- function isDurationValid(m) {
- var key,
- unitHasDecimal = false,
- i;
- for (key in m) {
- if (
- hasOwnProp(m, key) &&
- !(
- indexOf.call(ordering, key) !== -1 &&
- (m[key] == null || !isNaN(m[key]))
- )
- ) {
- return false;
- }
- }
+Promise.prototype._unsetOnCancel = function() {
+ this._onCancelField = undefined;
+};
- for (i = 0; i < ordering.length; ++i) {
- if (m[ordering[i]]) {
- if (unitHasDecimal) {
- return false; // only allow non-integers for smallest unit
- }
- if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
- unitHasDecimal = true;
+Promise.prototype._isCancellable = function() {
+ return this.isPending() && !this._isCancelled();
+};
+
+Promise.prototype.isCancellable = function() {
+ return this.isPending() && !this.isCancelled();
+};
+
+Promise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) {
+ if (util.isArray(onCancelCallback)) {
+ for (var i = 0; i < onCancelCallback.length; ++i) {
+ this._doInvokeOnCancel(onCancelCallback[i], internalOnly);
+ }
+ } else if (onCancelCallback !== undefined) {
+ if (typeof onCancelCallback === "function") {
+ if (!internalOnly) {
+ var e = tryCatch(onCancelCallback).call(this._boundValue());
+ if (e === errorObj) {
+ this._attachExtraTrace(e.e);
+ async.throwLater(e.e);
}
}
+ } else {
+ onCancelCallback._resultCancelled(this);
}
-
- return true;
}
+};
- function isValid$1() {
- return this._isValid;
- }
+Promise.prototype._invokeOnCancel = function() {
+ var onCancelCallback = this._onCancel();
+ this._unsetOnCancel();
+ async.invoke(this._doInvokeOnCancel, this, onCancelCallback);
+};
- function createInvalid$1() {
- return createDuration(NaN);
+Promise.prototype._invokeInternalOnCancel = function() {
+ if (this._isCancellable()) {
+ this._doInvokeOnCancel(this._onCancel(), true);
+ this._unsetOnCancel();
}
+};
- function Duration(duration) {
- var normalizedInput = normalizeObjectUnits(duration),
- years = normalizedInput.year || 0,
- quarters = normalizedInput.quarter || 0,
- months = normalizedInput.month || 0,
- weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
- days = normalizedInput.day || 0,
- hours = normalizedInput.hour || 0,
- minutes = normalizedInput.minute || 0,
- seconds = normalizedInput.second || 0,
- milliseconds = normalizedInput.millisecond || 0;
+Promise.prototype._resultCancelled = function() {
+ this.cancel();
+};
- this._isValid = isDurationValid(normalizedInput);
+};
- // representation for dateAddRemove
- this._milliseconds =
- +milliseconds +
- seconds * 1e3 + // 1000
- minutes * 6e4 + // 1000 * 60
- hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
- // Because of dateAddRemove treats 24 hours as different from a
- // day when working around DST, we need to store them separately
- this._days = +days + weeks * 7;
- // It is impossible to translate months into days without knowing
- // which months you are are talking about, so we have to store
- // it separately.
- this._months = +months + quarters * 3 + years * 12;
- this._data = {};
+/***/ }),
- this._locale = getLocale();
+/***/ 517:
+/***/ (function(module, __unusedexports, __webpack_require__) {
- this._bubble();
- }
+"use strict";
- function isDuration(obj) {
- return obj instanceof Duration;
- }
- function absRound(number) {
- if (number < 0) {
- return Math.round(-1 * number) * -1;
- } else {
- return Math.round(number);
- }
- }
+const u = __webpack_require__(676).fromCallback
+const fs = __webpack_require__(598)
+const path = __webpack_require__(622)
+const mkdir = __webpack_require__(727)
+const pathExists = __webpack_require__(322).pathExists
- // compare two arrays, return the number of differences
- function compareArrays(array1, array2, dontConvert) {
- var len = Math.min(array1.length, array2.length),
- lengthDiff = Math.abs(array1.length - array2.length),
- diffs = 0,
- i;
- for (i = 0; i < len; i++) {
- if (
- (dontConvert && array1[i] !== array2[i]) ||
- (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))
- ) {
- diffs++;
- }
- }
- return diffs + lengthDiff;
- }
+function outputFile (file, data, encoding, callback) {
+ if (typeof encoding === 'function') {
+ callback = encoding
+ encoding = 'utf8'
+ }
- // FORMATTING
+ const dir = path.dirname(file)
+ pathExists(dir, (err, itDoes) => {
+ if (err) return callback(err)
+ if (itDoes) return fs.writeFile(file, data, encoding, callback)
- function offset(token, separator) {
- addFormatToken(token, 0, 0, function () {
- var offset = this.utcOffset(),
- sign = '+';
- if (offset < 0) {
- offset = -offset;
- sign = '-';
- }
- return (
- sign +
- zeroFill(~~(offset / 60), 2) +
- separator +
- zeroFill(~~offset % 60, 2)
- );
- });
- }
-
- offset('Z', ':');
- offset('ZZ', '');
-
- // PARSING
-
- addRegexToken('Z', matchShortOffset);
- addRegexToken('ZZ', matchShortOffset);
- addParseToken(['Z', 'ZZ'], function (input, array, config) {
- config._useUTC = true;
- config._tzm = offsetFromString(matchShortOffset, input);
- });
-
- // HELPERS
-
- // timezone chunker
- // '+10:00' > ['10', '00']
- // '-1530' > ['-15', '30']
- var chunkOffset = /([\+\-]|\d\d)/gi;
-
- function offsetFromString(matcher, string) {
- var matches = (string || '').match(matcher),
- chunk,
- parts,
- minutes;
-
- if (matches === null) {
- return null;
- }
+ mkdir.mkdirs(dir, err => {
+ if (err) return callback(err)
- chunk = matches[matches.length - 1] || [];
- parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
- minutes = +(parts[1] * 60) + toInt(parts[2]);
+ fs.writeFile(file, data, encoding, callback)
+ })
+ })
+}
- return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;
- }
+function outputFileSync (file, ...args) {
+ const dir = path.dirname(file)
+ if (fs.existsSync(dir)) {
+ return fs.writeFileSync(file, ...args)
+ }
+ mkdir.mkdirsSync(dir)
+ fs.writeFileSync(file, ...args)
+}
- // Return a moment from input, that is local/utc/zone equivalent to model.
- function cloneWithOffset(input, model) {
- var res, diff;
- if (model._isUTC) {
- res = model.clone();
- diff =
- (isMoment(input) || isDate(input)
- ? input.valueOf()
- : createLocal(input).valueOf()) - res.valueOf();
- // Use low-level api, because this fn is low-level api.
- res._d.setTime(res._d.valueOf() + diff);
- hooks.updateOffset(res, false);
- return res;
- } else {
- return createLocal(input).local();
- }
- }
+module.exports = {
+ outputFile: u(outputFile),
+ outputFileSync
+}
- function getDateOffset(m) {
- // On Firefox.24 Date#getTimezoneOffset returns a floating point.
- // https://github.com/moment/moment/pull/1871
- return -Math.round(m._d.getTimezoneOffset());
- }
- // HOOKS
+/***/ }),
- // This function will be called whenever a moment is mutated.
- // It is intended to keep the offset in sync with the timezone.
- hooks.updateOffset = function () {};
+/***/ 523:
+/***/ (function(module, __unusedexports, __webpack_require__) {
- // MOMENTS
+var register = __webpack_require__(280)
+var addHook = __webpack_require__(510)
+var removeHook = __webpack_require__(866)
- // keepLocalTime = true means only change the timezone, without
- // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
- // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
- // +0200, so we adjust the time as needed, to be valid.
- //
- // Keeping the time actually adds/subtracts (one hour)
- // from the actual represented time. That is why we call updateOffset
- // a second time. In case it wants us to change the offset again
- // _changeInProgress == true case, then we have to adjust, because
- // there is no such time in the given timezone.
- function getSetOffset(input, keepLocalTime, keepMinutes) {
- var offset = this._offset || 0,
- localAdjust;
- if (!this.isValid()) {
- return input != null ? this : NaN;
- }
- if (input != null) {
- if (typeof input === 'string') {
- input = offsetFromString(matchShortOffset, input);
- if (input === null) {
- return this;
- }
- } else if (Math.abs(input) < 16 && !keepMinutes) {
- input = input * 60;
- }
- if (!this._isUTC && keepLocalTime) {
- localAdjust = getDateOffset(this);
- }
- this._offset = input;
- this._isUTC = true;
- if (localAdjust != null) {
- this.add(localAdjust, 'm');
- }
- if (offset !== input) {
- if (!keepLocalTime || this._changeInProgress) {
- addSubtract(
- this,
- createDuration(input - offset, 'm'),
- 1,
- false
- );
- } else if (!this._changeInProgress) {
- this._changeInProgress = true;
- hooks.updateOffset(this, true);
- this._changeInProgress = null;
- }
- }
- return this;
- } else {
- return this._isUTC ? offset : getDateOffset(this);
- }
- }
+// bind with array of arguments: https://stackoverflow.com/a/21792913
+var bind = Function.bind
+var bindable = bind.bind(bind)
- function getSetZone(input, keepLocalTime) {
- if (input != null) {
- if (typeof input !== 'string') {
- input = -input;
- }
+function bindApi (hook, state, name) {
+ var removeHookRef = bindable(removeHook, null).apply(null, name ? [state, name] : [state])
+ hook.api = { remove: removeHookRef }
+ hook.remove = removeHookRef
- this.utcOffset(input, keepLocalTime);
+ ;['before', 'error', 'after', 'wrap'].forEach(function (kind) {
+ var args = name ? [state, kind, name] : [state, kind]
+ hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args)
+ })
+}
- return this;
- } else {
- return -this.utcOffset();
- }
- }
+function HookSingular () {
+ var singularHookName = 'h'
+ var singularHookState = {
+ registry: {}
+ }
+ var singularHook = register.bind(null, singularHookState, singularHookName)
+ bindApi(singularHook, singularHookState, singularHookName)
+ return singularHook
+}
- function setOffsetToUTC(keepLocalTime) {
- return this.utcOffset(0, keepLocalTime);
- }
+function HookCollection () {
+ var state = {
+ registry: {}
+ }
- function setOffsetToLocal(keepLocalTime) {
- if (this._isUTC) {
- this.utcOffset(0, keepLocalTime);
- this._isUTC = false;
+ var hook = register.bind(null, state)
+ bindApi(hook, state)
- if (keepLocalTime) {
- this.subtract(getDateOffset(this), 'm');
- }
- }
- return this;
- }
+ return hook
+}
- function setOffsetToParsedOffset() {
- if (this._tzm != null) {
- this.utcOffset(this._tzm, false, true);
- } else if (typeof this._i === 'string') {
- var tZone = offsetFromString(matchOffset, this._i);
- if (tZone != null) {
- this.utcOffset(tZone);
- } else {
- this.utcOffset(0, true);
- }
- }
- return this;
- }
+var collectionHookDeprecationMessageDisplayed = false
+function Hook () {
+ if (!collectionHookDeprecationMessageDisplayed) {
+ console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4')
+ collectionHookDeprecationMessageDisplayed = true
+ }
+ return HookCollection()
+}
- function hasAlignedHourOffset(input) {
- if (!this.isValid()) {
- return false;
- }
- input = input ? createLocal(input).utcOffset() : 0;
+Hook.Singular = HookSingular.bind()
+Hook.Collection = HookCollection.bind()
- return (this.utcOffset() - input) % 60 === 0;
- }
+module.exports = Hook
+// expose constructors as a named property for TypeScript
+module.exports.Hook = Hook
+module.exports.Singular = Hook.Singular
+module.exports.Collection = Hook.Collection
- function isDaylightSavingTime() {
- return (
- this.utcOffset() > this.clone().month(0).utcOffset() ||
- this.utcOffset() > this.clone().month(5).utcOffset()
- );
- }
- function isDaylightSavingTimeShifted() {
- if (!isUndefined(this._isDSTShifted)) {
- return this._isDSTShifted;
- }
+/***/ }),
- var c = {},
- other;
+/***/ 524:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- copyConfig(c, this);
- c = prepareConfig(c);
+"use strict";
- if (c._a) {
- other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
- this._isDSTShifted =
- this.isValid() && compareArrays(c._a, other.toArray()) > 0;
- } else {
- this._isDSTShifted = false;
- }
- return this._isDSTShifted;
- }
+Object.defineProperty(exports, '__esModule', { value: true });
- function isLocal() {
- return this.isValid() ? !this._isUTC : false;
- }
+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
- function isUtcOffset() {
- return this.isValid() ? this._isUTC : false;
- }
+var Bottleneck = _interopDefault(__webpack_require__(972));
- function isUtc() {
- return this.isValid() ? this._isUTC && this._offset === 0 : false;
- }
+// @ts-ignore
+async function errorRequest(octokit, state, error, options) {
+ if (!error.request || !error.request.request) {
+ // address https://github.com/octokit/plugin-retry.js/issues/8
+ throw error;
+ } // retry all >= 400 && not doNotRetry
- // ASP.NET json date format regex
- var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
- // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
- // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
- // and further modified to allow for strings containing both week and day
- isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
- function createDuration(input, key) {
- var duration = input,
- // matching against regexp is expensive, do it on demand
- match = null,
- sign,
- ret,
- diffRes;
+ if (error.status >= 400 && !state.doNotRetry.includes(error.status)) {
+ const retries = options.request.retries != null ? options.request.retries : state.retries;
+ const retryAfter = Math.pow((options.request.retryCount || 0) + 1, 2);
+ throw octokit.retry.retryRequest(error, retries, retryAfter);
+ } // Maybe eventually there will be more cases here
- if (isDuration(input)) {
- duration = {
- ms: input._milliseconds,
- d: input._days,
- M: input._months,
- };
- } else if (isNumber(input) || !isNaN(+input)) {
- duration = {};
- if (key) {
- duration[key] = +input;
- } else {
- duration.milliseconds = +input;
- }
- } else if ((match = aspNetRegex.exec(input))) {
- sign = match[1] === '-' ? -1 : 1;
- duration = {
- y: 0,
- d: toInt(match[DATE]) * sign,
- h: toInt(match[HOUR]) * sign,
- m: toInt(match[MINUTE]) * sign,
- s: toInt(match[SECOND]) * sign,
- ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match
- };
- } else if ((match = isoRegex.exec(input))) {
- sign = match[1] === '-' ? -1 : 1;
- duration = {
- y: parseIso(match[2], sign),
- M: parseIso(match[3], sign),
- w: parseIso(match[4], sign),
- d: parseIso(match[5], sign),
- h: parseIso(match[6], sign),
- m: parseIso(match[7], sign),
- s: parseIso(match[8], sign),
- };
- } else if (duration == null) {
- // checks for null or undefined
- duration = {};
- } else if (
- typeof duration === 'object' &&
- ('from' in duration || 'to' in duration)
- ) {
- diffRes = momentsDifference(
- createLocal(duration.from),
- createLocal(duration.to)
- );
- duration = {};
- duration.ms = diffRes.milliseconds;
- duration.M = diffRes.months;
- }
+ throw error;
+}
- ret = new Duration(duration);
+// @ts-ignore
- if (isDuration(input) && hasOwnProp(input, '_locale')) {
- ret._locale = input._locale;
- }
+async function wrapRequest(state, request, options) {
+ const limiter = new Bottleneck(); // @ts-ignore
- if (isDuration(input) && hasOwnProp(input, '_isValid')) {
- ret._isValid = input._isValid;
- }
+ limiter.on("failed", function (error, info) {
+ const maxRetries = ~~error.request.request.retries;
+ const after = ~~error.request.request.retryAfter;
+ options.request.retryCount = info.retryCount + 1;
- return ret;
+ if (maxRetries > info.retryCount) {
+ // Returning a number instructs the limiter to retry
+ // the request after that number of milliseconds have passed
+ return after * state.retryAfterBaseValue;
}
+ });
+ return limiter.schedule(request, options);
+}
- createDuration.fn = Duration.prototype;
- createDuration.invalid = createInvalid$1;
-
- function parseIso(inp, sign) {
- // We'd normally use ~~inp for this, but unfortunately it also
- // converts floats to ints.
- // inp may be undefined, so careful calling replace on it.
- var res = inp && parseFloat(inp.replace(',', '.'));
- // apply sign while we're at it
- return (isNaN(res) ? 0 : res) * sign;
+const VERSION = "3.0.7";
+function retry(octokit, octokitOptions = {}) {
+ const state = Object.assign({
+ enabled: true,
+ retryAfterBaseValue: 1000,
+ doNotRetry: [400, 401, 403, 404, 422],
+ retries: 3
+ }, octokitOptions.retry);
+ octokit.retry = {
+ retryRequest: (error, retries, retryAfter) => {
+ error.request.request = Object.assign({}, error.request.request, {
+ retries: retries,
+ retryAfter: retryAfter
+ });
+ return error;
}
+ };
- function positiveMomentsDifference(base, other) {
- var res = {};
-
- res.months =
- other.month() - base.month() + (other.year() - base.year()) * 12;
- if (base.clone().add(res.months, 'M').isAfter(other)) {
- --res.months;
- }
+ if (!state.enabled) {
+ return;
+ }
- res.milliseconds = +other - +base.clone().add(res.months, 'M');
+ octokit.hook.error("request", errorRequest.bind(null, octokit, state));
+ octokit.hook.wrap("request", wrapRequest.bind(null, state));
+}
+retry.VERSION = VERSION;
- return res;
- }
+exports.VERSION = VERSION;
+exports.retry = retry;
+//# sourceMappingURL=index.js.map
- function momentsDifference(base, other) {
- var res;
- if (!(base.isValid() && other.isValid())) {
- return { milliseconds: 0, months: 0 };
- }
- other = cloneWithOffset(other, base);
- if (base.isBefore(other)) {
- res = positiveMomentsDifference(base, other);
- } else {
- res = positiveMomentsDifference(other, base);
- res.milliseconds = -res.milliseconds;
- res.months = -res.months;
- }
+/***/ }),
- return res;
- }
+/***/ 533:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- // TODO: remove 'name' arg after deprecation is removed
- function createAdder(direction, name) {
- return function (val, period) {
- var dur, tmp;
- //invert the arguments, but complain about it
- if (period !== null && !isNaN(+period)) {
- deprecateSimple(
- name,
- 'moment().' +
- name +
- '(period, number) is deprecated. Please use moment().' +
- name +
- '(number, period). ' +
- 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'
- );
- tmp = val;
- val = period;
- period = tmp;
- }
+"use strict";
- dur = createDuration(val, period);
- addSubtract(this, dur, direction);
- return this;
- };
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+ result["default"] = mod;
+ return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const core = __importStar(__webpack_require__(470));
+const io = __importStar(__webpack_require__(1));
+const fs = __importStar(__webpack_require__(747));
+const mm = __importStar(__webpack_require__(31));
+const os = __importStar(__webpack_require__(87));
+const path = __importStar(__webpack_require__(622));
+const httpm = __importStar(__webpack_require__(539));
+const semver = __importStar(__webpack_require__(550));
+const stream = __importStar(__webpack_require__(413));
+const util = __importStar(__webpack_require__(669));
+const v4_1 = __importDefault(__webpack_require__(951));
+const exec_1 = __webpack_require__(986);
+const assert_1 = __webpack_require__(357);
+const retry_helper_1 = __webpack_require__(979);
+class HTTPError extends Error {
+ constructor(httpStatusCode) {
+ super(`Unexpected HTTP response: ${httpStatusCode}`);
+ this.httpStatusCode = httpStatusCode;
+ Object.setPrototypeOf(this, new.target.prototype);
}
-
- function addSubtract(mom, duration, isAdding, updateOffset) {
- var milliseconds = duration._milliseconds,
- days = absRound(duration._days),
- months = absRound(duration._months);
-
- if (!mom.isValid()) {
- // No op
- return;
- }
-
- updateOffset = updateOffset == null ? true : updateOffset;
-
- if (months) {
- setMonth(mom, get(mom, 'Month') + months * isAdding);
- }
- if (days) {
- set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
- }
- if (milliseconds) {
- mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
+}
+exports.HTTPError = HTTPError;
+const IS_WINDOWS = process.platform === 'win32';
+const IS_MAC = process.platform === 'darwin';
+const userAgent = 'actions/tool-cache';
+/**
+ * Download a tool from an url and stream it into a file
+ *
+ * @param url url of tool to download
+ * @param dest path to download tool
+ * @param auth authorization header
+ * @returns path to downloaded tool
+ */
+function downloadTool(url, dest, auth) {
+ return __awaiter(this, void 0, void 0, function* () {
+ dest = dest || path.join(_getTempDirectory(), v4_1.default());
+ yield io.mkdirP(path.dirname(dest));
+ core.debug(`Downloading ${url}`);
+ core.debug(`Destination ${dest}`);
+ const maxAttempts = 3;
+ const minSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS', 10);
+ const maxSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS', 20);
+ const retryHelper = new retry_helper_1.RetryHelper(maxAttempts, minSeconds, maxSeconds);
+ return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () {
+ return yield downloadToolAttempt(url, dest || '', auth);
+ }), (err) => {
+ if (err instanceof HTTPError && err.httpStatusCode) {
+ // Don't retry anything less than 500, except 408 Request Timeout and 429 Too Many Requests
+ if (err.httpStatusCode < 500 &&
+ err.httpStatusCode !== 408 &&
+ err.httpStatusCode !== 429) {
+ return false;
+ }
+ }
+ // Otherwise retry
+ return true;
+ });
+ });
+}
+exports.downloadTool = downloadTool;
+function downloadToolAttempt(url, dest, auth) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (fs.existsSync(dest)) {
+ throw new Error(`Destination file path ${dest} already exists`);
}
- if (updateOffset) {
- hooks.updateOffset(mom, days || months);
+ // Get the response headers
+ const http = new httpm.HttpClient(userAgent, [], {
+ allowRetries: false
+ });
+ let headers;
+ if (auth) {
+ core.debug('set auth');
+ headers = {
+ authorization: auth
+ };
}
- }
-
- var add = createAdder(1, 'add'),
- subtract = createAdder(-1, 'subtract');
-
- function isString(input) {
- return typeof input === 'string' || input instanceof String;
- }
-
- // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined
- function isMomentInput(input) {
- return (
- isMoment(input) ||
- isDate(input) ||
- isString(input) ||
- isNumber(input) ||
- isNumberOrStringArray(input) ||
- isMomentInputObject(input) ||
- input === null ||
- input === undefined
- );
- }
-
- function isMomentInputObject(input) {
- var objectTest = isObject(input) && !isObjectEmpty(input),
- propertyTest = false,
- properties = [
- 'years',
- 'year',
- 'y',
- 'months',
- 'month',
- 'M',
- 'days',
- 'day',
- 'd',
- 'dates',
- 'date',
- 'D',
- 'hours',
- 'hour',
- 'h',
- 'minutes',
- 'minute',
- 'm',
- 'seconds',
- 'second',
- 's',
- 'milliseconds',
- 'millisecond',
- 'ms',
- ],
- i,
- property;
-
- for (i = 0; i < properties.length; i += 1) {
- property = properties[i];
- propertyTest = propertyTest || hasOwnProp(input, property);
+ const response = yield http.get(url, headers);
+ if (response.message.statusCode !== 200) {
+ const err = new HTTPError(response.message.statusCode);
+ core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`);
+ throw err;
}
-
- return objectTest && propertyTest;
- }
-
- function isNumberOrStringArray(input) {
- var arrayTest = isArray(input),
- dataTypeTest = false;
- if (arrayTest) {
- dataTypeTest =
- input.filter(function (item) {
- return !isNumber(item) && isString(input);
- }).length === 0;
+ // Download the response body
+ const pipeline = util.promisify(stream.pipeline);
+ const responseMessageFactory = _getGlobal('TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY', () => response.message);
+ const readStream = responseMessageFactory();
+ let succeeded = false;
+ try {
+ yield pipeline(readStream, fs.createWriteStream(dest));
+ core.debug('download complete');
+ succeeded = true;
+ return dest;
}
- return arrayTest && dataTypeTest;
- }
-
- function isCalendarSpec(input) {
- var objectTest = isObject(input) && !isObjectEmpty(input),
- propertyTest = false,
- properties = [
- 'sameDay',
- 'nextDay',
- 'lastDay',
- 'nextWeek',
- 'lastWeek',
- 'sameElse',
- ],
- i,
- property;
-
- for (i = 0; i < properties.length; i += 1) {
- property = properties[i];
- propertyTest = propertyTest || hasOwnProp(input, property);
+ finally {
+ // Error, delete dest before retry
+ if (!succeeded) {
+ core.debug('download failed');
+ try {
+ yield io.rmRF(dest);
+ }
+ catch (err) {
+ core.debug(`Failed to delete '${dest}'. ${err.message}`);
+ }
+ }
}
-
- return objectTest && propertyTest;
- }
-
- function getCalendarFormat(myMoment, now) {
- var diff = myMoment.diff(now, 'days', true);
- return diff < -6
- ? 'sameElse'
- : diff < -1
- ? 'lastWeek'
- : diff < 0
- ? 'lastDay'
- : diff < 1
- ? 'sameDay'
- : diff < 2
- ? 'nextDay'
- : diff < 7
- ? 'nextWeek'
- : 'sameElse';
- }
-
- function calendar$1(time, formats) {
- // Support for single parameter, formats only overload to the calendar function
- if (arguments.length === 1) {
- if (isMomentInput(arguments[0])) {
- time = arguments[0];
- formats = undefined;
- } else if (isCalendarSpec(arguments[0])) {
- formats = arguments[0];
- time = undefined;
+ });
+}
+/**
+ * Extract a .7z file
+ *
+ * @param file path to the .7z file
+ * @param dest destination directory. Optional.
+ * @param _7zPath path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this
+ * problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will
+ * gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is
+ * bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line
+ * interface, it is smaller than the full command line interface, and it does support long paths. At the
+ * time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website.
+ * Be sure to check the current license agreement. If 7zr.exe is bundled with your action, then the path
+ * to 7zr.exe can be pass to this function.
+ * @returns path to the destination directory
+ */
+function extract7z(file, dest, _7zPath) {
+ return __awaiter(this, void 0, void 0, function* () {
+ assert_1.ok(IS_WINDOWS, 'extract7z() not supported on current OS');
+ assert_1.ok(file, 'parameter "file" is required');
+ dest = yield _createExtractFolder(dest);
+ const originalCwd = process.cwd();
+ process.chdir(dest);
+ if (_7zPath) {
+ try {
+ const logLevel = core.isDebug() ? '-bb1' : '-bb0';
+ const args = [
+ 'x',
+ logLevel,
+ '-bd',
+ '-sccUTF-8',
+ file
+ ];
+ const options = {
+ silent: true
+ };
+ yield exec_1.exec(`"${_7zPath}"`, args, options);
+ }
+ finally {
+ process.chdir(originalCwd);
}
}
- // We want to compare the start of today, vs this.
- // Getting start-of-today depends on whether we're local/utc/offset or not.
- var now = time || createLocal(),
- sod = cloneWithOffset(now, this).startOf('day'),
- format = hooks.calendarFormat(this, sod) || 'sameElse',
- output =
- formats &&
- (isFunction(formats[format])
- ? formats[format].call(this, now)
- : formats[format]);
-
- return this.format(
- output || this.localeData().calendar(format, this, createLocal(now))
- );
- }
-
- function clone() {
- return new Moment(this);
- }
-
- function isAfter(input, units) {
- var localInput = isMoment(input) ? input : createLocal(input);
- if (!(this.isValid() && localInput.isValid())) {
- return false;
+ else {
+ const escapedScript = path
+ .join(__dirname, '..', 'scripts', 'Invoke-7zdec.ps1')
+ .replace(/'/g, "''")
+ .replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines
+ const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, '');
+ const escapedTarget = dest.replace(/'/g, "''").replace(/"|\n|\r/g, '');
+ const command = `& '${escapedScript}' -Source '${escapedFile}' -Target '${escapedTarget}'`;
+ const args = [
+ '-NoLogo',
+ '-Sta',
+ '-NoProfile',
+ '-NonInteractive',
+ '-ExecutionPolicy',
+ 'Unrestricted',
+ '-Command',
+ command
+ ];
+ const options = {
+ silent: true
+ };
+ try {
+ const powershellPath = yield io.which('powershell', true);
+ yield exec_1.exec(`"${powershellPath}"`, args, options);
+ }
+ finally {
+ process.chdir(originalCwd);
+ }
}
- units = normalizeUnits(units) || 'millisecond';
- if (units === 'millisecond') {
- return this.valueOf() > localInput.valueOf();
- } else {
- return localInput.valueOf() < this.clone().startOf(units).valueOf();
+ return dest;
+ });
+}
+exports.extract7z = extract7z;
+/**
+ * Extract a compressed tar archive
+ *
+ * @param file path to the tar
+ * @param dest destination directory. Optional.
+ * @param flags flags for the tar command to use for extraction. Defaults to 'xz' (extracting gzipped tars). Optional.
+ * @returns path to the destination directory
+ */
+function extractTar(file, dest, flags = 'xz') {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!file) {
+ throw new Error("parameter 'file' is required");
}
- }
-
- function isBefore(input, units) {
- var localInput = isMoment(input) ? input : createLocal(input);
- if (!(this.isValid() && localInput.isValid())) {
- return false;
+ // Create dest
+ dest = yield _createExtractFolder(dest);
+ // Determine whether GNU tar
+ core.debug('Checking tar --version');
+ let versionOutput = '';
+ yield exec_1.exec('tar --version', [], {
+ ignoreReturnCode: true,
+ silent: true,
+ listeners: {
+ stdout: (data) => (versionOutput += data.toString()),
+ stderr: (data) => (versionOutput += data.toString())
+ }
+ });
+ core.debug(versionOutput.trim());
+ const isGnuTar = versionOutput.toUpperCase().includes('GNU TAR');
+ // Initialize args
+ let args;
+ if (flags instanceof Array) {
+ args = flags;
}
- units = normalizeUnits(units) || 'millisecond';
- if (units === 'millisecond') {
- return this.valueOf() < localInput.valueOf();
- } else {
- return this.clone().endOf(units).valueOf() < localInput.valueOf();
+ else {
+ args = [flags];
}
- }
-
- function isBetween(from, to, units, inclusivity) {
- var localFrom = isMoment(from) ? from : createLocal(from),
- localTo = isMoment(to) ? to : createLocal(to);
- if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
- return false;
+ if (core.isDebug() && !flags.includes('v')) {
+ args.push('-v');
}
- inclusivity = inclusivity || '()';
- return (
- (inclusivity[0] === '('
- ? this.isAfter(localFrom, units)
- : !this.isBefore(localFrom, units)) &&
- (inclusivity[1] === ')'
- ? this.isBefore(localTo, units)
- : !this.isAfter(localTo, units))
- );
- }
-
- function isSame(input, units) {
- var localInput = isMoment(input) ? input : createLocal(input),
- inputMs;
- if (!(this.isValid() && localInput.isValid())) {
- return false;
+ let destArg = dest;
+ let fileArg = file;
+ if (IS_WINDOWS && isGnuTar) {
+ args.push('--force-local');
+ destArg = dest.replace(/\\/g, '/');
+ // Technically only the dest needs to have `/` but for aesthetic consistency
+ // convert slashes in the file arg too.
+ fileArg = file.replace(/\\/g, '/');
}
- units = normalizeUnits(units) || 'millisecond';
- if (units === 'millisecond') {
- return this.valueOf() === localInput.valueOf();
- } else {
- inputMs = localInput.valueOf();
- return (
- this.clone().startOf(units).valueOf() <= inputMs &&
- inputMs <= this.clone().endOf(units).valueOf()
- );
+ if (isGnuTar) {
+ // Suppress warnings when using GNU tar to extract archives created by BSD tar
+ args.push('--warning=no-unknown-keyword');
}
- }
-
- function isSameOrAfter(input, units) {
- return this.isSame(input, units) || this.isAfter(input, units);
- }
-
- function isSameOrBefore(input, units) {
- return this.isSame(input, units) || this.isBefore(input, units);
- }
-
- function diff(input, units, asFloat) {
- var that, zoneDelta, output;
-
- if (!this.isValid()) {
- return NaN;
+ args.push('-C', destArg, '-f', fileArg);
+ yield exec_1.exec(`tar`, args);
+ return dest;
+ });
+}
+exports.extractTar = extractTar;
+/**
+ * Extract a xar compatible archive
+ *
+ * @param file path to the archive
+ * @param dest destination directory. Optional.
+ * @param flags flags for the xar. Optional.
+ * @returns path to the destination directory
+ */
+function extractXar(file, dest, flags = []) {
+ return __awaiter(this, void 0, void 0, function* () {
+ assert_1.ok(IS_MAC, 'extractXar() not supported on current OS');
+ assert_1.ok(file, 'parameter "file" is required');
+ dest = yield _createExtractFolder(dest);
+ let args;
+ if (flags instanceof Array) {
+ args = flags;
}
-
- that = cloneWithOffset(input, this);
-
- if (!that.isValid()) {
- return NaN;
+ else {
+ args = [flags];
}
-
- zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
-
- units = normalizeUnits(units);
-
- switch (units) {
- case 'year':
- output = monthDiff(this, that) / 12;
- break;
- case 'month':
- output = monthDiff(this, that);
- break;
- case 'quarter':
- output = monthDiff(this, that) / 3;
- break;
- case 'second':
- output = (this - that) / 1e3;
- break; // 1000
- case 'minute':
- output = (this - that) / 6e4;
- break; // 1000 * 60
- case 'hour':
- output = (this - that) / 36e5;
- break; // 1000 * 60 * 60
- case 'day':
- output = (this - that - zoneDelta) / 864e5;
- break; // 1000 * 60 * 60 * 24, negate dst
- case 'week':
- output = (this - that - zoneDelta) / 6048e5;
- break; // 1000 * 60 * 60 * 24 * 7, negate dst
- default:
- output = this - that;
+ args.push('-x', '-C', dest, '-f', file);
+ if (core.isDebug()) {
+ args.push('-v');
}
-
- return asFloat ? output : absFloor(output);
- }
-
- function monthDiff(a, b) {
- if (a.date() < b.date()) {
- // end-of-month calculations work correct when the start month has more
- // days than the end month.
- return -monthDiff(b, a);
+ const xarPath = yield io.which('xar', true);
+ yield exec_1.exec(`"${xarPath}"`, _unique(args));
+ return dest;
+ });
+}
+exports.extractXar = extractXar;
+/**
+ * Extract a zip
+ *
+ * @param file path to the zip
+ * @param dest destination directory. Optional.
+ * @returns path to the destination directory
+ */
+function extractZip(file, dest) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!file) {
+ throw new Error("parameter 'file' is required");
}
- // difference in months
- var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
- // b is in (anchor - 1 month, anchor + 1 month)
- anchor = a.clone().add(wholeMonthDiff, 'months'),
- anchor2,
- adjust;
-
- if (b - anchor < 0) {
- anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
- // linear across the month
- adjust = (b - anchor) / (anchor - anchor2);
- } else {
- anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
- // linear across the month
- adjust = (b - anchor) / (anchor2 - anchor);
+ dest = yield _createExtractFolder(dest);
+ if (IS_WINDOWS) {
+ yield extractZipWin(file, dest);
}
-
- //check for negative zero, return zero if negative zero
- return -(wholeMonthDiff + adjust) || 0;
- }
-
- hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
- hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
-
- function toString() {
- return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
- }
-
- function toISOString(keepOffset) {
- if (!this.isValid()) {
- return null;
+ else {
+ yield extractZipNix(file, dest);
}
- var utc = keepOffset !== true,
- m = utc ? this.clone().utc() : this;
- if (m.year() < 0 || m.year() > 9999) {
- return formatMoment(
- m,
- utc
- ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'
- : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'
- );
- }
- if (isFunction(Date.prototype.toISOString)) {
- // native implementation is ~50x faster, use it when we can
- if (utc) {
- return this.toDate().toISOString();
- } else {
- return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)
- .toISOString()
- .replace('Z', formatMoment(m, 'Z'));
- }
+ return dest;
+ });
+}
+exports.extractZip = extractZip;
+function extractZipWin(file, dest) {
+ return __awaiter(this, void 0, void 0, function* () {
+ // build the powershell command
+ const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines
+ const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, '');
+ const command = `$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}')`;
+ // run powershell
+ const powershellPath = yield io.which('powershell', true);
+ const args = [
+ '-NoLogo',
+ '-Sta',
+ '-NoProfile',
+ '-NonInteractive',
+ '-ExecutionPolicy',
+ 'Unrestricted',
+ '-Command',
+ command
+ ];
+ yield exec_1.exec(`"${powershellPath}"`, args);
+ });
+}
+function extractZipNix(file, dest) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const unzipPath = yield io.which('unzip', true);
+ const args = [file];
+ if (!core.isDebug()) {
+ args.unshift('-q');
}
- return formatMoment(
- m,
- utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'
- );
- }
-
- /**
- * Return a human readable representation of a moment that can
- * also be evaluated to get a new moment which is the same
- *
- * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
- */
- function inspect() {
- if (!this.isValid()) {
- return 'moment.invalid(/* ' + this._i + ' */)';
+ yield exec_1.exec(`"${unzipPath}"`, args, { cwd: dest });
+ });
+}
+/**
+ * Caches a directory and installs it into the tool cacheDir
+ *
+ * @param sourceDir the directory to cache into tools
+ * @param tool tool name
+ * @param version version of the tool. semver format
+ * @param arch architecture of the tool. Optional. Defaults to machine architecture
+ */
+function cacheDir(sourceDir, tool, version, arch) {
+ return __awaiter(this, void 0, void 0, function* () {
+ version = semver.clean(version) || version;
+ arch = arch || os.arch();
+ core.debug(`Caching tool ${tool} ${version} ${arch}`);
+ core.debug(`source dir: ${sourceDir}`);
+ if (!fs.statSync(sourceDir).isDirectory()) {
+ throw new Error('sourceDir is not a directory');
}
- var func = 'moment',
- zone = '',
- prefix,
- year,
- datetime,
- suffix;
- if (!this.isLocal()) {
- func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
- zone = 'Z';
+ // Create the tool dir
+ const destPath = yield _createToolPath(tool, version, arch);
+ // copy each child item. do not move. move can fail on Windows
+ // due to anti-virus software having an open handle on a file.
+ for (const itemName of fs.readdirSync(sourceDir)) {
+ const s = path.join(sourceDir, itemName);
+ yield io.cp(s, destPath, { recursive: true });
}
- prefix = '[' + func + '("]';
- year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';
- datetime = '-MM-DD[T]HH:mm:ss.SSS';
- suffix = zone + '[")]';
-
- return this.format(prefix + year + datetime + suffix);
- }
-
- function format(inputString) {
- if (!inputString) {
- inputString = this.isUtc()
- ? hooks.defaultFormatUtc
- : hooks.defaultFormat;
+ // write .complete
+ _completeToolPath(tool, version, arch);
+ return destPath;
+ });
+}
+exports.cacheDir = cacheDir;
+/**
+ * Caches a downloaded file (GUID) and installs it
+ * into the tool cache with a given targetName
+ *
+ * @param sourceFile the file to cache into tools. Typically a result of downloadTool which is a guid.
+ * @param targetFile the name of the file name in the tools directory
+ * @param tool tool name
+ * @param version version of the tool. semver format
+ * @param arch architecture of the tool. Optional. Defaults to machine architecture
+ */
+function cacheFile(sourceFile, targetFile, tool, version, arch) {
+ return __awaiter(this, void 0, void 0, function* () {
+ version = semver.clean(version) || version;
+ arch = arch || os.arch();
+ core.debug(`Caching tool ${tool} ${version} ${arch}`);
+ core.debug(`source file: ${sourceFile}`);
+ if (!fs.statSync(sourceFile).isFile()) {
+ throw new Error('sourceFile is not a file');
}
- var output = formatMoment(this, inputString);
- return this.localeData().postformat(output);
+ // create the tool dir
+ const destFolder = yield _createToolPath(tool, version, arch);
+ // copy instead of move. move can fail on Windows due to
+ // anti-virus software having an open handle on a file.
+ const destPath = path.join(destFolder, targetFile);
+ core.debug(`destination file ${destPath}`);
+ yield io.cp(sourceFile, destPath);
+ // write .complete
+ _completeToolPath(tool, version, arch);
+ return destFolder;
+ });
+}
+exports.cacheFile = cacheFile;
+/**
+ * Finds the path to a tool version in the local installed tool cache
+ *
+ * @param toolName name of the tool
+ * @param versionSpec version of the tool
+ * @param arch optional arch. defaults to arch of computer
+ */
+function find(toolName, versionSpec, arch) {
+ if (!toolName) {
+ throw new Error('toolName parameter is required');
}
-
- function from(time, withoutSuffix) {
- if (
- this.isValid() &&
- ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
- ) {
- return createDuration({ to: this, from: time })
- .locale(this.locale())
- .humanize(!withoutSuffix);
- } else {
- return this.localeData().invalidDate();
- }
+ if (!versionSpec) {
+ throw new Error('versionSpec parameter is required');
}
-
- function fromNow(withoutSuffix) {
- return this.from(createLocal(), withoutSuffix);
+ arch = arch || os.arch();
+ // attempt to resolve an explicit version
+ if (!_isExplicitVersion(versionSpec)) {
+ const localVersions = findAllVersions(toolName, arch);
+ const match = _evaluateVersions(localVersions, versionSpec);
+ versionSpec = match;
}
-
- function to(time, withoutSuffix) {
- if (
- this.isValid() &&
- ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
- ) {
- return createDuration({ from: this, to: time })
- .locale(this.locale())
- .humanize(!withoutSuffix);
- } else {
- return this.localeData().invalidDate();
+ // check for the explicit version in the cache
+ let toolPath = '';
+ if (versionSpec) {
+ versionSpec = semver.clean(versionSpec) || '';
+ const cachePath = path.join(_getCacheDirectory(), toolName, versionSpec, arch);
+ core.debug(`checking cache: ${cachePath}`);
+ if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) {
+ core.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch}`);
+ toolPath = cachePath;
+ }
+ else {
+ core.debug('not found');
}
}
-
- function toNow(withoutSuffix) {
- return this.to(createLocal(), withoutSuffix);
- }
-
- // If passed a locale key, it will set the locale for this
- // instance. Otherwise, it will return the locale configuration
- // variables for this instance.
- function locale(key) {
- var newLocaleData;
-
- if (key === undefined) {
- return this._locale._abbr;
- } else {
- newLocaleData = getLocale(key);
- if (newLocaleData != null) {
- this._locale = newLocaleData;
+ return toolPath;
+}
+exports.find = find;
+/**
+ * Finds the paths to all versions of a tool that are installed in the local tool cache
+ *
+ * @param toolName name of the tool
+ * @param arch optional arch. defaults to arch of computer
+ */
+function findAllVersions(toolName, arch) {
+ const versions = [];
+ arch = arch || os.arch();
+ const toolPath = path.join(_getCacheDirectory(), toolName);
+ if (fs.existsSync(toolPath)) {
+ const children = fs.readdirSync(toolPath);
+ for (const child of children) {
+ if (_isExplicitVersion(child)) {
+ const fullPath = path.join(toolPath, child, arch || '');
+ if (fs.existsSync(fullPath) && fs.existsSync(`${fullPath}.complete`)) {
+ versions.push(child);
+ }
}
- return this;
}
}
-
- var lang = deprecate(
- 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
- function (key) {
- if (key === undefined) {
- return this.localeData();
- } else {
- return this.locale(key);
+ return versions;
+}
+exports.findAllVersions = findAllVersions;
+function getManifestFromRepo(owner, repo, auth, branch = 'master') {
+ return __awaiter(this, void 0, void 0, function* () {
+ let releases = [];
+ const treeUrl = `https://api.github.com/repos/${owner}/${repo}/git/trees/${branch}`;
+ const http = new httpm.HttpClient('tool-cache');
+ const headers = {};
+ if (auth) {
+ core.debug('set auth');
+ headers.authorization = auth;
+ }
+ const response = yield http.getJson(treeUrl, headers);
+ if (!response.result) {
+ return releases;
+ }
+ let manifestUrl = '';
+ for (const item of response.result.tree) {
+ if (item.path === 'versions-manifest.json') {
+ manifestUrl = item.url;
+ break;
}
}
- );
-
- function localeData() {
- return this._locale;
+ headers['accept'] = 'application/vnd.github.VERSION.raw';
+ let versionsRaw = yield (yield http.get(manifestUrl, headers)).readBody();
+ if (versionsRaw) {
+ // shouldn't be needed but protects against invalid json saved with BOM
+ versionsRaw = versionsRaw.replace(/^\uFEFF/, '');
+ try {
+ releases = JSON.parse(versionsRaw);
+ }
+ catch (_a) {
+ core.debug('Invalid json');
+ }
+ }
+ return releases;
+ });
+}
+exports.getManifestFromRepo = getManifestFromRepo;
+function findFromManifest(versionSpec, stable, manifest, archFilter = os.arch()) {
+ return __awaiter(this, void 0, void 0, function* () {
+ // wrap the internal impl
+ const match = yield mm._findMatch(versionSpec, stable, manifest, archFilter);
+ return match;
+ });
+}
+exports.findFromManifest = findFromManifest;
+function _createExtractFolder(dest) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!dest) {
+ // create a temp dir
+ dest = path.join(_getTempDirectory(), v4_1.default());
+ }
+ yield io.mkdirP(dest);
+ return dest;
+ });
+}
+function _createToolPath(tool, version, arch) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || '');
+ core.debug(`destination ${folderPath}`);
+ const markerPath = `${folderPath}.complete`;
+ yield io.rmRF(folderPath);
+ yield io.rmRF(markerPath);
+ yield io.mkdirP(folderPath);
+ return folderPath;
+ });
+}
+function _completeToolPath(tool, version, arch) {
+ const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || '');
+ const markerPath = `${folderPath}.complete`;
+ fs.writeFileSync(markerPath, '');
+ core.debug('finished caching tool');
+}
+function _isExplicitVersion(versionSpec) {
+ const c = semver.clean(versionSpec) || '';
+ core.debug(`isExplicit: ${c}`);
+ const valid = semver.valid(c) != null;
+ core.debug(`explicit? ${valid}`);
+ return valid;
+}
+function _evaluateVersions(versions, versionSpec) {
+ let version = '';
+ core.debug(`evaluating ${versions.length} versions`);
+ versions = versions.sort((a, b) => {
+ if (semver.gt(a, b)) {
+ return 1;
+ }
+ return -1;
+ });
+ for (let i = versions.length - 1; i >= 0; i--) {
+ const potential = versions[i];
+ const satisfied = semver.satisfies(potential, versionSpec);
+ if (satisfied) {
+ version = potential;
+ break;
+ }
}
-
- var MS_PER_SECOND = 1000,
- MS_PER_MINUTE = 60 * MS_PER_SECOND,
- MS_PER_HOUR = 60 * MS_PER_MINUTE,
- MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;
-
- // actual modulo - handles negative numbers (for dates before 1970):
- function mod$1(dividend, divisor) {
- return ((dividend % divisor) + divisor) % divisor;
+ if (version) {
+ core.debug(`matched: ${version}`);
}
-
- function localStartOfDate(y, m, d) {
- // the date constructor remaps years 0-99 to 1900-1999
- if (y < 100 && y >= 0) {
- // preserve leap years using a full 400 year cycle, then reset
- return new Date(y + 400, m, d) - MS_PER_400_YEARS;
- } else {
- return new Date(y, m, d).valueOf();
- }
+ else {
+ core.debug('match not found');
}
+ return version;
+}
+/**
+ * Gets RUNNER_TOOL_CACHE
+ */
+function _getCacheDirectory() {
+ const cacheDirectory = process.env['RUNNER_TOOL_CACHE'] || '';
+ assert_1.ok(cacheDirectory, 'Expected RUNNER_TOOL_CACHE to be defined');
+ return cacheDirectory;
+}
+/**
+ * Gets RUNNER_TEMP
+ */
+function _getTempDirectory() {
+ const tempDirectory = process.env['RUNNER_TEMP'] || '';
+ assert_1.ok(tempDirectory, 'Expected RUNNER_TEMP to be defined');
+ return tempDirectory;
+}
+/**
+ * Gets a global variable
+ */
+function _getGlobal(key, defaultValue) {
+ /* eslint-disable @typescript-eslint/no-explicit-any */
+ const value = global[key];
+ /* eslint-enable @typescript-eslint/no-explicit-any */
+ return value !== undefined ? value : defaultValue;
+}
+/**
+ * Returns an array of unique values.
+ * @param values Values to make unique.
+ */
+function _unique(values) {
+ return Array.from(new Set(values));
+}
+//# sourceMappingURL=tool-cache.js.map
- function utcStartOfDate(y, m, d) {
- // Date.UTC remaps years 0-99 to 1900-1999
- if (y < 100 && y >= 0) {
- // preserve leap years using a full 400 year cycle, then reset
- return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
- } else {
- return Date.UTC(y, m, d);
- }
- }
+/***/ }),
- function startOf(units) {
- var time, startOfDate;
- units = normalizeUnits(units);
- if (units === undefined || units === 'millisecond' || !this.isValid()) {
- return this;
- }
+/***/ 535:
+/***/ (function(module, __unusedexports, __webpack_require__) {
- startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
+"use strict";
- switch (units) {
- case 'year':
- time = startOfDate(this.year(), 0, 1);
- break;
- case 'quarter':
- time = startOfDate(
- this.year(),
- this.month() - (this.month() % 3),
- 1
- );
- break;
- case 'month':
- time = startOfDate(this.year(), this.month(), 1);
- break;
- case 'week':
- time = startOfDate(
- this.year(),
- this.month(),
- this.date() - this.weekday()
- );
- break;
- case 'isoWeek':
- time = startOfDate(
- this.year(),
- this.month(),
- this.date() - (this.isoWeekday() - 1)
- );
- break;
- case 'day':
- case 'date':
- time = startOfDate(this.year(), this.month(), this.date());
- break;
- case 'hour':
- time = this._d.valueOf();
- time -= mod$1(
- time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
- MS_PER_HOUR
- );
- break;
- case 'minute':
- time = this._d.valueOf();
- time -= mod$1(time, MS_PER_MINUTE);
- break;
- case 'second':
- time = this._d.valueOf();
- time -= mod$1(time, MS_PER_SECOND);
- break;
- }
- this._d.setTime(time);
- hooks.updateOffset(this, true);
- return this;
- }
+module.exports = __webpack_require__(827);
- function endOf(units) {
- var time, startOfDate;
- units = normalizeUnits(units);
- if (units === undefined || units === 'millisecond' || !this.isValid()) {
- return this;
- }
- startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
+/***/ }),
- switch (units) {
- case 'year':
- time = startOfDate(this.year() + 1, 0, 1) - 1;
- break;
- case 'quarter':
- time =
- startOfDate(
- this.year(),
- this.month() - (this.month() % 3) + 3,
- 1
- ) - 1;
- break;
- case 'month':
- time = startOfDate(this.year(), this.month() + 1, 1) - 1;
- break;
- case 'week':
- time =
- startOfDate(
- this.year(),
- this.month(),
- this.date() - this.weekday() + 7
- ) - 1;
- break;
- case 'isoWeek':
- time =
- startOfDate(
- this.year(),
- this.month(),
- this.date() - (this.isoWeekday() - 1) + 7
- ) - 1;
- break;
- case 'day':
- case 'date':
- time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
- break;
- case 'hour':
- time = this._d.valueOf();
- time +=
- MS_PER_HOUR -
- mod$1(
- time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
- MS_PER_HOUR
- ) -
- 1;
- break;
- case 'minute':
- time = this._d.valueOf();
- time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
- break;
- case 'second':
- time = this._d.valueOf();
- time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
- break;
- }
+/***/ 539:
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
- this._d.setTime(time);
- hooks.updateOffset(this, true);
- return this;
- }
+"use strict";
- function valueOf() {
- return this._d.valueOf() - (this._offset || 0) * 60000;
+Object.defineProperty(exports, "__esModule", { value: true });
+const http = __webpack_require__(605);
+const https = __webpack_require__(211);
+const pm = __webpack_require__(950);
+let tunnel;
+var HttpCodes;
+(function (HttpCodes) {
+ HttpCodes[HttpCodes["OK"] = 200] = "OK";
+ HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices";
+ HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently";
+ HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved";
+ HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther";
+ HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified";
+ HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy";
+ HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy";
+ HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect";
+ HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect";
+ HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest";
+ HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized";
+ HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired";
+ HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden";
+ HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound";
+ HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed";
+ HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable";
+ HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
+ HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout";
+ HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict";
+ HttpCodes[HttpCodes["Gone"] = 410] = "Gone";
+ HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests";
+ HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError";
+ HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented";
+ HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway";
+ HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable";
+ HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout";
+})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));
+var Headers;
+(function (Headers) {
+ Headers["Accept"] = "accept";
+ Headers["ContentType"] = "content-type";
+})(Headers = exports.Headers || (exports.Headers = {}));
+var MediaTypes;
+(function (MediaTypes) {
+ MediaTypes["ApplicationJson"] = "application/json";
+})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));
+/**
+ * Returns the proxy URL, depending upon the supplied url and proxy environment variables.
+ * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
+ */
+function getProxyUrl(serverUrl) {
+ let proxyUrl = pm.getProxyUrl(new URL(serverUrl));
+ return proxyUrl ? proxyUrl.href : '';
+}
+exports.getProxyUrl = getProxyUrl;
+const HttpRedirectCodes = [
+ HttpCodes.MovedPermanently,
+ HttpCodes.ResourceMoved,
+ HttpCodes.SeeOther,
+ HttpCodes.TemporaryRedirect,
+ HttpCodes.PermanentRedirect
+];
+const HttpResponseRetryCodes = [
+ HttpCodes.BadGateway,
+ HttpCodes.ServiceUnavailable,
+ HttpCodes.GatewayTimeout
+];
+const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];
+const ExponentialBackoffCeiling = 10;
+const ExponentialBackoffTimeSlice = 5;
+class HttpClientError extends Error {
+ constructor(message, statusCode) {
+ super(message);
+ this.name = 'HttpClientError';
+ this.statusCode = statusCode;
+ Object.setPrototypeOf(this, HttpClientError.prototype);
}
-
- function unix() {
- return Math.floor(this.valueOf() / 1000);
+}
+exports.HttpClientError = HttpClientError;
+class HttpClientResponse {
+ constructor(message) {
+ this.message = message;
}
-
- function toDate() {
- return new Date(this.valueOf());
+ readBody() {
+ return new Promise(async (resolve, reject) => {
+ let output = Buffer.alloc(0);
+ this.message.on('data', (chunk) => {
+ output = Buffer.concat([output, chunk]);
+ });
+ this.message.on('end', () => {
+ resolve(output.toString());
+ });
+ });
}
-
- function toArray() {
- var m = this;
- return [
- m.year(),
- m.month(),
- m.date(),
- m.hour(),
- m.minute(),
- m.second(),
- m.millisecond(),
- ];
+}
+exports.HttpClientResponse = HttpClientResponse;
+function isHttps(requestUrl) {
+ let parsedUrl = new URL(requestUrl);
+ return parsedUrl.protocol === 'https:';
+}
+exports.isHttps = isHttps;
+class HttpClient {
+ constructor(userAgent, handlers, requestOptions) {
+ this._ignoreSslError = false;
+ this._allowRedirects = true;
+ this._allowRedirectDowngrade = false;
+ this._maxRedirects = 50;
+ this._allowRetries = false;
+ this._maxRetries = 1;
+ this._keepAlive = false;
+ this._disposed = false;
+ this.userAgent = userAgent;
+ this.handlers = handlers || [];
+ this.requestOptions = requestOptions;
+ if (requestOptions) {
+ if (requestOptions.ignoreSslError != null) {
+ this._ignoreSslError = requestOptions.ignoreSslError;
+ }
+ this._socketTimeout = requestOptions.socketTimeout;
+ if (requestOptions.allowRedirects != null) {
+ this._allowRedirects = requestOptions.allowRedirects;
+ }
+ if (requestOptions.allowRedirectDowngrade != null) {
+ this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;
+ }
+ if (requestOptions.maxRedirects != null) {
+ this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);
+ }
+ if (requestOptions.keepAlive != null) {
+ this._keepAlive = requestOptions.keepAlive;
+ }
+ if (requestOptions.allowRetries != null) {
+ this._allowRetries = requestOptions.allowRetries;
+ }
+ if (requestOptions.maxRetries != null) {
+ this._maxRetries = requestOptions.maxRetries;
+ }
+ }
}
-
- function toObject() {
- var m = this;
- return {
- years: m.year(),
- months: m.month(),
- date: m.date(),
- hours: m.hours(),
- minutes: m.minutes(),
- seconds: m.seconds(),
- milliseconds: m.milliseconds(),
- };
+ options(requestUrl, additionalHeaders) {
+ return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});
}
-
- function toJSON() {
- // new Date(NaN).toJSON() === null
- return this.isValid() ? this.toISOString() : null;
+ get(requestUrl, additionalHeaders) {
+ return this.request('GET', requestUrl, null, additionalHeaders || {});
}
-
- function isValid$2() {
- return isValid(this);
+ del(requestUrl, additionalHeaders) {
+ return this.request('DELETE', requestUrl, null, additionalHeaders || {});
}
-
- function parsingFlags() {
- return extend({}, getParsingFlags(this));
+ post(requestUrl, data, additionalHeaders) {
+ return this.request('POST', requestUrl, data, additionalHeaders || {});
}
-
- function invalidAt() {
- return getParsingFlags(this).overflow;
+ patch(requestUrl, data, additionalHeaders) {
+ return this.request('PATCH', requestUrl, data, additionalHeaders || {});
}
-
- function creationData() {
- return {
- input: this._i,
- format: this._f,
- locale: this._locale,
- isUTC: this._isUTC,
- strict: this._strict,
- };
+ put(requestUrl, data, additionalHeaders) {
+ return this.request('PUT', requestUrl, data, additionalHeaders || {});
}
-
- addFormatToken('N', 0, 0, 'eraAbbr');
- addFormatToken('NN', 0, 0, 'eraAbbr');
- addFormatToken('NNN', 0, 0, 'eraAbbr');
- addFormatToken('NNNN', 0, 0, 'eraName');
- addFormatToken('NNNNN', 0, 0, 'eraNarrow');
-
- addFormatToken('y', ['y', 1], 'yo', 'eraYear');
- addFormatToken('y', ['yy', 2], 0, 'eraYear');
- addFormatToken('y', ['yyy', 3], 0, 'eraYear');
- addFormatToken('y', ['yyyy', 4], 0, 'eraYear');
-
- addRegexToken('N', matchEraAbbr);
- addRegexToken('NN', matchEraAbbr);
- addRegexToken('NNN', matchEraAbbr);
- addRegexToken('NNNN', matchEraName);
- addRegexToken('NNNNN', matchEraNarrow);
-
- addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (
- input,
- array,
- config,
- token
- ) {
- var era = config._locale.erasParse(input, token, config._strict);
- if (era) {
- getParsingFlags(config).era = era;
- } else {
- getParsingFlags(config).invalidEra = input;
- }
- });
-
- addRegexToken('y', matchUnsigned);
- addRegexToken('yy', matchUnsigned);
- addRegexToken('yyy', matchUnsigned);
- addRegexToken('yyyy', matchUnsigned);
- addRegexToken('yo', matchEraYearOrdinal);
-
- addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);
- addParseToken(['yo'], function (input, array, config, token) {
- var match;
- if (config._locale._eraYearOrdinalRegex) {
- match = input.match(config._locale._eraYearOrdinalRegex);
- }
-
- if (config._locale.eraYearOrdinalParse) {
- array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
- } else {
- array[YEAR] = parseInt(input, 10);
+ head(requestUrl, additionalHeaders) {
+ return this.request('HEAD', requestUrl, null, additionalHeaders || {});
+ }
+ sendStream(verb, requestUrl, stream, additionalHeaders) {
+ return this.request(verb, requestUrl, stream, additionalHeaders);
+ }
+ /**
+ * Gets a typed object from an endpoint
+ * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise
+ */
+ async getJson(requestUrl, additionalHeaders = {}) {
+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
+ let res = await this.get(requestUrl, additionalHeaders);
+ return this._processResponse(res, this.requestOptions);
+ }
+ async postJson(requestUrl, obj, additionalHeaders = {}) {
+ let data = JSON.stringify(obj, null, 2);
+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
+ additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
+ let res = await this.post(requestUrl, data, additionalHeaders);
+ return this._processResponse(res, this.requestOptions);
+ }
+ async putJson(requestUrl, obj, additionalHeaders = {}) {
+ let data = JSON.stringify(obj, null, 2);
+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
+ additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
+ let res = await this.put(requestUrl, data, additionalHeaders);
+ return this._processResponse(res, this.requestOptions);
+ }
+ async patchJson(requestUrl, obj, additionalHeaders = {}) {
+ let data = JSON.stringify(obj, null, 2);
+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
+ additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
+ let res = await this.patch(requestUrl, data, additionalHeaders);
+ return this._processResponse(res, this.requestOptions);
+ }
+ /**
+ * Makes a raw http request.
+ * All other methods such as get, post, patch, and request ultimately call this.
+ * Prefer get, del, post and patch
+ */
+ async request(verb, requestUrl, data, headers) {
+ if (this._disposed) {
+ throw new Error('Client has already been disposed.');
}
- });
-
- function localeEras(m, format) {
- var i,
- l,
- date,
- eras = this._eras || getLocale('en')._eras;
- for (i = 0, l = eras.length; i < l; ++i) {
- switch (typeof eras[i].since) {
- case 'string':
- // truncate time
- date = hooks(eras[i].since).startOf('day');
- eras[i].since = date.valueOf();
- break;
+ let parsedUrl = new URL(requestUrl);
+ let info = this._prepareRequest(verb, parsedUrl, headers);
+ // Only perform retries on reads since writes may not be idempotent.
+ let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1
+ ? this._maxRetries + 1
+ : 1;
+ let numTries = 0;
+ let response;
+ while (numTries < maxTries) {
+ response = await this.requestRaw(info, data);
+ // Check if it's an authentication challenge
+ if (response &&
+ response.message &&
+ response.message.statusCode === HttpCodes.Unauthorized) {
+ let authenticationHandler;
+ for (let i = 0; i < this.handlers.length; i++) {
+ if (this.handlers[i].canHandleAuthentication(response)) {
+ authenticationHandler = this.handlers[i];
+ break;
+ }
+ }
+ if (authenticationHandler) {
+ return authenticationHandler.handleAuthentication(this, info, data);
+ }
+ else {
+ // We have received an unauthorized response but have no handlers to handle it.
+ // Let the response return to the caller.
+ return response;
+ }
}
-
- switch (typeof eras[i].until) {
- case 'undefined':
- eras[i].until = +Infinity;
- break;
- case 'string':
- // truncate time
- date = hooks(eras[i].until).startOf('day').valueOf();
- eras[i].until = date.valueOf();
+ let redirectsRemaining = this._maxRedirects;
+ while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 &&
+ this._allowRedirects &&
+ redirectsRemaining > 0) {
+ const redirectUrl = response.message.headers['location'];
+ if (!redirectUrl) {
+ // if there's no location to redirect to, we won't
break;
- }
- }
- return eras;
- }
-
- function localeErasParse(eraName, format, strict) {
- var i,
- l,
- eras = this.eras(),
- name,
- abbr,
- narrow;
- eraName = eraName.toUpperCase();
-
- for (i = 0, l = eras.length; i < l; ++i) {
- name = eras[i].name.toUpperCase();
- abbr = eras[i].abbr.toUpperCase();
- narrow = eras[i].narrow.toUpperCase();
-
- if (strict) {
- switch (format) {
- case 'N':
- case 'NN':
- case 'NNN':
- if (abbr === eraName) {
- return eras[i];
- }
- break;
-
- case 'NNNN':
- if (name === eraName) {
- return eras[i];
- }
- break;
-
- case 'NNNNN':
- if (narrow === eraName) {
- return eras[i];
+ }
+ let parsedRedirectUrl = new URL(redirectUrl);
+ if (parsedUrl.protocol == 'https:' &&
+ parsedUrl.protocol != parsedRedirectUrl.protocol &&
+ !this._allowRedirectDowngrade) {
+ throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.');
+ }
+ // we need to finish reading the response before reassigning response
+ // which will leak the open socket.
+ await response.readBody();
+ // strip authorization header if redirected to a different hostname
+ if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {
+ for (let header in headers) {
+ // header names are case insensitive
+ if (header.toLowerCase() === 'authorization') {
+ delete headers[header];
}
- break;
+ }
}
- } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
- return eras[i];
+ // let's make the request with the new redirectUrl
+ info = this._prepareRequest(verb, parsedRedirectUrl, headers);
+ response = await this.requestRaw(info, data);
+ redirectsRemaining--;
+ }
+ if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) {
+ // If not a retry code, return immediately instead of retrying
+ return response;
+ }
+ numTries += 1;
+ if (numTries < maxTries) {
+ await response.readBody();
+ await this._performExponentialBackoff(numTries);
}
}
+ return response;
}
-
- function localeErasConvertYear(era, year) {
- var dir = era.since <= era.until ? +1 : -1;
- if (year === undefined) {
- return hooks(era.since).year();
- } else {
- return hooks(era.since).year() + (year - era.offset) * dir;
+ /**
+ * Needs to be called if keepAlive is set to true in request options.
+ */
+ dispose() {
+ if (this._agent) {
+ this._agent.destroy();
}
+ this._disposed = true;
}
-
- function getEraName() {
- var i,
- l,
- val,
- eras = this.localeData().eras();
- for (i = 0, l = eras.length; i < l; ++i) {
- // truncate time
- val = this.startOf('day').valueOf();
-
- if (eras[i].since <= val && val <= eras[i].until) {
- return eras[i].name;
- }
- if (eras[i].until <= val && val <= eras[i].since) {
- return eras[i].name;
- }
- }
-
- return '';
+ /**
+ * Raw request.
+ * @param info
+ * @param data
+ */
+ requestRaw(info, data) {
+ return new Promise((resolve, reject) => {
+ let callbackForResult = function (err, res) {
+ if (err) {
+ reject(err);
+ }
+ resolve(res);
+ };
+ this.requestRawWithCallback(info, data, callbackForResult);
+ });
}
-
- function getEraNarrow() {
- var i,
- l,
- val,
- eras = this.localeData().eras();
- for (i = 0, l = eras.length; i < l; ++i) {
- // truncate time
- val = this.startOf('day').valueOf();
-
- if (eras[i].since <= val && val <= eras[i].until) {
- return eras[i].narrow;
+ /**
+ * Raw request with callback.
+ * @param info
+ * @param data
+ * @param onResult
+ */
+ requestRawWithCallback(info, data, onResult) {
+ let socket;
+ if (typeof data === 'string') {
+ info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');
+ }
+ let callbackCalled = false;
+ let handleResult = (err, res) => {
+ if (!callbackCalled) {
+ callbackCalled = true;
+ onResult(err, res);
}
- if (eras[i].until <= val && val <= eras[i].since) {
- return eras[i].narrow;
+ };
+ let req = info.httpModule.request(info.options, (msg) => {
+ let res = new HttpClientResponse(msg);
+ handleResult(null, res);
+ });
+ req.on('socket', sock => {
+ socket = sock;
+ });
+ // If we ever get disconnected, we want the socket to timeout eventually
+ req.setTimeout(this._socketTimeout || 3 * 60000, () => {
+ if (socket) {
+ socket.end();
}
+ handleResult(new Error('Request timeout: ' + info.options.path), null);
+ });
+ req.on('error', function (err) {
+ // err has statusCode property
+ // res should have headers
+ handleResult(err, null);
+ });
+ if (data && typeof data === 'string') {
+ req.write(data, 'utf8');
}
-
- return '';
- }
-
- function getEraAbbr() {
- var i,
- l,
- val,
- eras = this.localeData().eras();
- for (i = 0, l = eras.length; i < l; ++i) {
- // truncate time
- val = this.startOf('day').valueOf();
-
- if (eras[i].since <= val && val <= eras[i].until) {
- return eras[i].abbr;
- }
- if (eras[i].until <= val && val <= eras[i].since) {
- return eras[i].abbr;
- }
+ if (data && typeof data !== 'string') {
+ data.on('close', function () {
+ req.end();
+ });
+ data.pipe(req);
}
-
- return '';
- }
-
- function getEraYear() {
- var i,
- l,
- dir,
- val,
- eras = this.localeData().eras();
- for (i = 0, l = eras.length; i < l; ++i) {
- dir = eras[i].since <= eras[i].until ? +1 : -1;
-
- // truncate time
- val = this.startOf('day').valueOf();
-
- if (
- (eras[i].since <= val && val <= eras[i].until) ||
- (eras[i].until <= val && val <= eras[i].since)
- ) {
- return (
- (this.year() - hooks(eras[i].since).year()) * dir +
- eras[i].offset
- );
- }
+ else {
+ req.end();
}
-
- return this.year();
}
-
- function erasNameRegex(isStrict) {
- if (!hasOwnProp(this, '_erasNameRegex')) {
- computeErasParse.call(this);
+ /**
+ * Gets an http agent. This function is useful when you need an http agent that handles
+ * routing through a proxy server - depending upon the url and proxy environment variables.
+ * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
+ */
+ getAgent(serverUrl) {
+ let parsedUrl = new URL(serverUrl);
+ return this._getAgent(parsedUrl);
+ }
+ _prepareRequest(method, requestUrl, headers) {
+ const info = {};
+ info.parsedUrl = requestUrl;
+ const usingSsl = info.parsedUrl.protocol === 'https:';
+ info.httpModule = usingSsl ? https : http;
+ const defaultPort = usingSsl ? 443 : 80;
+ info.options = {};
+ info.options.host = info.parsedUrl.hostname;
+ info.options.port = info.parsedUrl.port
+ ? parseInt(info.parsedUrl.port)
+ : defaultPort;
+ info.options.path =
+ (info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');
+ info.options.method = method;
+ info.options.headers = this._mergeHeaders(headers);
+ if (this.userAgent != null) {
+ info.options.headers['user-agent'] = this.userAgent;
}
- return isStrict ? this._erasNameRegex : this._erasRegex;
+ info.options.agent = this._getAgent(info.parsedUrl);
+ // gives handlers an opportunity to participate
+ if (this.handlers) {
+ this.handlers.forEach(handler => {
+ handler.prepareRequest(info.options);
+ });
+ }
+ return info;
}
-
- function erasAbbrRegex(isStrict) {
- if (!hasOwnProp(this, '_erasAbbrRegex')) {
- computeErasParse.call(this);
+ _mergeHeaders(headers) {
+ const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
+ if (this.requestOptions && this.requestOptions.headers) {
+ return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers));
}
- return isStrict ? this._erasAbbrRegex : this._erasRegex;
+ return lowercaseKeys(headers || {});
}
-
- function erasNarrowRegex(isStrict) {
- if (!hasOwnProp(this, '_erasNarrowRegex')) {
- computeErasParse.call(this);
+ _getExistingOrDefaultHeader(additionalHeaders, header, _default) {
+ const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
+ let clientHeader;
+ if (this.requestOptions && this.requestOptions.headers) {
+ clientHeader = lowercaseKeys(this.requestOptions.headers)[header];
}
- return isStrict ? this._erasNarrowRegex : this._erasRegex;
+ return additionalHeaders[header] || clientHeader || _default;
}
-
- function matchEraAbbr(isStrict, locale) {
- return locale.erasAbbrRegex(isStrict);
+ _getAgent(parsedUrl) {
+ let agent;
+ let proxyUrl = pm.getProxyUrl(parsedUrl);
+ let useProxy = proxyUrl && proxyUrl.hostname;
+ if (this._keepAlive && useProxy) {
+ agent = this._proxyAgent;
+ }
+ if (this._keepAlive && !useProxy) {
+ agent = this._agent;
+ }
+ // if agent is already assigned use that agent.
+ if (!!agent) {
+ return agent;
+ }
+ const usingSsl = parsedUrl.protocol === 'https:';
+ let maxSockets = 100;
+ if (!!this.requestOptions) {
+ maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;
+ }
+ if (useProxy) {
+ // If using proxy, need tunnel
+ if (!tunnel) {
+ tunnel = __webpack_require__(856);
+ }
+ const agentOptions = {
+ maxSockets: maxSockets,
+ keepAlive: this._keepAlive,
+ proxy: {
+ proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`,
+ host: proxyUrl.hostname,
+ port: proxyUrl.port
+ }
+ };
+ let tunnelAgent;
+ const overHttps = proxyUrl.protocol === 'https:';
+ if (usingSsl) {
+ tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;
+ }
+ else {
+ tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;
+ }
+ agent = tunnelAgent(agentOptions);
+ this._proxyAgent = agent;
+ }
+ // if reusing agent across request and tunneling agent isn't assigned create a new agent
+ if (this._keepAlive && !agent) {
+ const options = { keepAlive: this._keepAlive, maxSockets: maxSockets };
+ agent = usingSsl ? new https.Agent(options) : new http.Agent(options);
+ this._agent = agent;
+ }
+ // if not using private agent and tunnel agent isn't setup then use global agent
+ if (!agent) {
+ agent = usingSsl ? https.globalAgent : http.globalAgent;
+ }
+ if (usingSsl && this._ignoreSslError) {
+ // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
+ // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
+ // we have to cast it to any and change it directly
+ agent.options = Object.assign(agent.options || {}, {
+ rejectUnauthorized: false
+ });
+ }
+ return agent;
}
-
- function matchEraName(isStrict, locale) {
- return locale.erasNameRegex(isStrict);
+ _performExponentialBackoff(retryNumber) {
+ retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);
+ const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);
+ return new Promise(resolve => setTimeout(() => resolve(), ms));
}
-
- function matchEraNarrow(isStrict, locale) {
- return locale.erasNarrowRegex(isStrict);
+ static dateTimeDeserializer(key, value) {
+ if (typeof value === 'string') {
+ let a = new Date(value);
+ if (!isNaN(a.valueOf())) {
+ return a;
+ }
+ }
+ return value;
}
-
- function matchEraYearOrdinal(isStrict, locale) {
- return locale._eraYearOrdinalRegex || matchUnsigned;
+ async _processResponse(res, options) {
+ return new Promise(async (resolve, reject) => {
+ const statusCode = res.message.statusCode;
+ const response = {
+ statusCode: statusCode,
+ result: null,
+ headers: {}
+ };
+ // not found leads to null obj returned
+ if (statusCode == HttpCodes.NotFound) {
+ resolve(response);
+ }
+ let obj;
+ let contents;
+ // get the result from the body
+ try {
+ contents = await res.readBody();
+ if (contents && contents.length > 0) {
+ if (options && options.deserializeDates) {
+ obj = JSON.parse(contents, HttpClient.dateTimeDeserializer);
+ }
+ else {
+ obj = JSON.parse(contents);
+ }
+ response.result = obj;
+ }
+ response.headers = res.message.headers;
+ }
+ catch (err) {
+ // Invalid resource (contents not json); leaving result obj null
+ }
+ // note that 3xx redirects are handled by the http layer.
+ if (statusCode > 299) {
+ let msg;
+ // if exception/error in body, attempt to get better error
+ if (obj && obj.message) {
+ msg = obj.message;
+ }
+ else if (contents && contents.length > 0) {
+ // it may be the case that the exception is in the body message as string
+ msg = contents;
+ }
+ else {
+ msg = 'Failed request: (' + statusCode + ')';
+ }
+ let err = new HttpClientError(msg, statusCode);
+ err.result = response.result;
+ reject(err);
+ }
+ else {
+ resolve(response);
+ }
+ });
}
+}
+exports.HttpClient = HttpClient;
- function computeErasParse() {
- var abbrPieces = [],
- namePieces = [],
- narrowPieces = [],
- mixedPieces = [],
- i,
- l,
- eras = this.eras();
- for (i = 0, l = eras.length; i < l; ++i) {
- namePieces.push(regexEscape(eras[i].name));
- abbrPieces.push(regexEscape(eras[i].abbr));
- narrowPieces.push(regexEscape(eras[i].narrow));
+/***/ }),
- mixedPieces.push(regexEscape(eras[i].name));
- mixedPieces.push(regexEscape(eras[i].abbr));
- mixedPieces.push(regexEscape(eras[i].narrow));
- }
+/***/ 550:
+/***/ (function(module, exports) {
- this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
- this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');
- this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');
- this._erasNarrowRegex = new RegExp(
- '^(' + narrowPieces.join('|') + ')',
- 'i'
- );
- }
+exports = module.exports = SemVer
- // FORMATTING
+var debug
+/* istanbul ignore next */
+if (typeof process === 'object' &&
+ process.env &&
+ process.env.NODE_DEBUG &&
+ /\bsemver\b/i.test(process.env.NODE_DEBUG)) {
+ debug = function () {
+ var args = Array.prototype.slice.call(arguments, 0)
+ args.unshift('SEMVER')
+ console.log.apply(console, args)
+ }
+} else {
+ debug = function () {}
+}
- addFormatToken(0, ['gg', 2], 0, function () {
- return this.weekYear() % 100;
- });
+// Note: this is the semver.org version of the spec that it implements
+// Not necessarily the package version of this code.
+exports.SEMVER_SPEC_VERSION = '2.0.0'
- addFormatToken(0, ['GG', 2], 0, function () {
- return this.isoWeekYear() % 100;
- });
+var MAX_LENGTH = 256
+var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||
+ /* istanbul ignore next */ 9007199254740991
- function addWeekYearFormatToken(token, getter) {
- addFormatToken(0, [token, token.length], 0, getter);
- }
+// Max safe segment length for coercion.
+var MAX_SAFE_COMPONENT_LENGTH = 16
- addWeekYearFormatToken('gggg', 'weekYear');
- addWeekYearFormatToken('ggggg', 'weekYear');
- addWeekYearFormatToken('GGGG', 'isoWeekYear');
- addWeekYearFormatToken('GGGGG', 'isoWeekYear');
+// The actual regexps go on exports.re
+var re = exports.re = []
+var src = exports.src = []
+var t = exports.tokens = {}
+var R = 0
- // ALIASES
+function tok (n) {
+ t[n] = R++
+}
- addUnitAlias('weekYear', 'gg');
- addUnitAlias('isoWeekYear', 'GG');
+// The following Regular Expressions can be used for tokenizing,
+// validating, and parsing SemVer version strings.
- // PRIORITY
+// ## Numeric Identifier
+// A single `0`, or a non-zero digit followed by zero or more digits.
- addUnitPriority('weekYear', 1);
- addUnitPriority('isoWeekYear', 1);
+tok('NUMERICIDENTIFIER')
+src[t.NUMERICIDENTIFIER] = '0|[1-9]\\d*'
+tok('NUMERICIDENTIFIERLOOSE')
+src[t.NUMERICIDENTIFIERLOOSE] = '[0-9]+'
- // PARSING
+// ## Non-numeric Identifier
+// Zero or more digits, followed by a letter or hyphen, and then zero or
+// more letters, digits, or hyphens.
- addRegexToken('G', matchSigned);
- addRegexToken('g', matchSigned);
- addRegexToken('GG', match1to2, match2);
- addRegexToken('gg', match1to2, match2);
- addRegexToken('GGGG', match1to4, match4);
- addRegexToken('gggg', match1to4, match4);
- addRegexToken('GGGGG', match1to6, match6);
- addRegexToken('ggggg', match1to6, match6);
+tok('NONNUMERICIDENTIFIER')
+src[t.NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'
- addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (
- input,
- week,
- config,
- token
- ) {
- week[token.substr(0, 2)] = toInt(input);
- });
+// ## Main Version
+// Three dot-separated numeric identifiers.
- addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
- week[token] = hooks.parseTwoDigitYear(input);
- });
+tok('MAINVERSION')
+src[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\.' +
+ '(' + src[t.NUMERICIDENTIFIER] + ')\\.' +
+ '(' + src[t.NUMERICIDENTIFIER] + ')'
- // MOMENTS
+tok('MAINVERSIONLOOSE')
+src[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' +
+ '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' +
+ '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')'
- function getSetWeekYear(input) {
- return getSetWeekYearHelper.call(
- this,
- input,
- this.week(),
- this.weekday(),
- this.localeData()._week.dow,
- this.localeData()._week.doy
- );
- }
+// ## Pre-release Version Identifier
+// A numeric identifier, or a non-numeric identifier.
- function getSetISOWeekYear(input) {
- return getSetWeekYearHelper.call(
- this,
- input,
- this.isoWeek(),
- this.isoWeekday(),
- 1,
- 4
- );
- }
+tok('PRERELEASEIDENTIFIER')
+src[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] +
+ '|' + src[t.NONNUMERICIDENTIFIER] + ')'
- function getISOWeeksInYear() {
- return weeksInYear(this.year(), 1, 4);
- }
+tok('PRERELEASEIDENTIFIERLOOSE')
+src[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] +
+ '|' + src[t.NONNUMERICIDENTIFIER] + ')'
- function getISOWeeksInISOWeekYear() {
- return weeksInYear(this.isoWeekYear(), 1, 4);
- }
+// ## Pre-release Version
+// Hyphen, followed by one or more dot-separated pre-release version
+// identifiers.
- function getWeeksInYear() {
- var weekInfo = this.localeData()._week;
- return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
- }
+tok('PRERELEASE')
+src[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] +
+ '(?:\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))'
- function getWeeksInWeekYear() {
- var weekInfo = this.localeData()._week;
- return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
- }
+tok('PRERELEASELOOSE')
+src[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] +
+ '(?:\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))'
- function getSetWeekYearHelper(input, week, weekday, dow, doy) {
- var weeksTarget;
- if (input == null) {
- return weekOfYear(this, dow, doy).year;
- } else {
- weeksTarget = weeksInYear(input, dow, doy);
- if (week > weeksTarget) {
- week = weeksTarget;
- }
- return setWeekAll.call(this, input, week, weekday, dow, doy);
- }
- }
+// ## Build Metadata Identifier
+// Any combination of digits, letters, or hyphens.
- function setWeekAll(weekYear, week, weekday, dow, doy) {
- var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
- date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
+tok('BUILDIDENTIFIER')
+src[t.BUILDIDENTIFIER] = '[0-9A-Za-z-]+'
- this.year(date.getUTCFullYear());
- this.month(date.getUTCMonth());
- this.date(date.getUTCDate());
- return this;
- }
+// ## Build Metadata
+// Plus sign, followed by one or more period-separated build metadata
+// identifiers.
- // FORMATTING
+tok('BUILD')
+src[t.BUILD] = '(?:\\+(' + src[t.BUILDIDENTIFIER] +
+ '(?:\\.' + src[t.BUILDIDENTIFIER] + ')*))'
- addFormatToken('Q', 0, 'Qo', 'quarter');
+// ## Full Version String
+// A main version, followed optionally by a pre-release version and
+// build metadata.
- // ALIASES
+// Note that the only major, minor, patch, and pre-release sections of
+// the version string are capturing groups. The build metadata is not a
+// capturing group, because it should not ever be used in version
+// comparison.
- addUnitAlias('quarter', 'Q');
+tok('FULL')
+tok('FULLPLAIN')
+src[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] +
+ src[t.PRERELEASE] + '?' +
+ src[t.BUILD] + '?'
- // PRIORITY
+src[t.FULL] = '^' + src[t.FULLPLAIN] + '$'
- addUnitPriority('quarter', 7);
+// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
+// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
+// common in the npm registry.
+tok('LOOSEPLAIN')
+src[t.LOOSEPLAIN] = '[v=\\s]*' + src[t.MAINVERSIONLOOSE] +
+ src[t.PRERELEASELOOSE] + '?' +
+ src[t.BUILD] + '?'
- // PARSING
+tok('LOOSE')
+src[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$'
- addRegexToken('Q', match1);
- addParseToken('Q', function (input, array) {
- array[MONTH] = (toInt(input) - 1) * 3;
- });
+tok('GTLT')
+src[t.GTLT] = '((?:<|>)?=?)'
- // MOMENTS
+// Something like "2.*" or "1.2.x".
+// Note that "x.x" is a valid xRange identifer, meaning "any version"
+// Only the first item is strictly required.
+tok('XRANGEIDENTIFIERLOOSE')
+src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'
+tok('XRANGEIDENTIFIER')
+src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\*'
- function getSetQuarter(input) {
- return input == null
- ? Math.ceil((this.month() + 1) / 3)
- : this.month((input - 1) * 3 + (this.month() % 3));
- }
+tok('XRANGEPLAIN')
+src[t.XRANGEPLAIN] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' +
+ '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' +
+ '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' +
+ '(?:' + src[t.PRERELEASE] + ')?' +
+ src[t.BUILD] + '?' +
+ ')?)?'
- // FORMATTING
+tok('XRANGEPLAINLOOSE')
+src[t.XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +
+ '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +
+ '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +
+ '(?:' + src[t.PRERELEASELOOSE] + ')?' +
+ src[t.BUILD] + '?' +
+ ')?)?'
- addFormatToken('D', ['DD', 2], 'Do', 'date');
-
- // ALIASES
-
- addUnitAlias('date', 'D');
-
- // PRIORITY
- addUnitPriority('date', 9);
+tok('XRANGE')
+src[t.XRANGE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAIN] + '$'
+tok('XRANGELOOSE')
+src[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAINLOOSE] + '$'
- // PARSING
+// Coercion.
+// Extract anything that could conceivably be a part of a valid semver
+tok('COERCE')
+src[t.COERCE] = '(^|[^\\d])' +
+ '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
+ '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
+ '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
+ '(?:$|[^\\d])'
+tok('COERCERTL')
+re[t.COERCERTL] = new RegExp(src[t.COERCE], 'g')
- addRegexToken('D', match1to2);
- addRegexToken('DD', match1to2, match2);
- addRegexToken('Do', function (isStrict, locale) {
- // TODO: Remove "ordinalParse" fallback in next major release.
- return isStrict
- ? locale._dayOfMonthOrdinalParse || locale._ordinalParse
- : locale._dayOfMonthOrdinalParseLenient;
- });
+// Tilde ranges.
+// Meaning is "reasonably at or greater than"
+tok('LONETILDE')
+src[t.LONETILDE] = '(?:~>?)'
- addParseToken(['D', 'DD'], DATE);
- addParseToken('Do', function (input, array) {
- array[DATE] = toInt(input.match(match1to2)[0]);
- });
+tok('TILDETRIM')
+src[t.TILDETRIM] = '(\\s*)' + src[t.LONETILDE] + '\\s+'
+re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g')
+var tildeTrimReplace = '$1~'
- // MOMENTS
+tok('TILDE')
+src[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$'
+tok('TILDELOOSE')
+src[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$'
- var getSetDayOfMonth = makeGetSet('Date', true);
+// Caret ranges.
+// Meaning is "at least and backwards compatible with"
+tok('LONECARET')
+src[t.LONECARET] = '(?:\\^)'
- // FORMATTING
+tok('CARETTRIM')
+src[t.CARETTRIM] = '(\\s*)' + src[t.LONECARET] + '\\s+'
+re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g')
+var caretTrimReplace = '$1^'
- addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
+tok('CARET')
+src[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$'
+tok('CARETLOOSE')
+src[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$'
- // ALIASES
+// A simple gt/lt/eq thing, or just "" to indicate "any version"
+tok('COMPARATORLOOSE')
+src[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\s*(' + src[t.LOOSEPLAIN] + ')$|^$'
+tok('COMPARATOR')
+src[t.COMPARATOR] = '^' + src[t.GTLT] + '\\s*(' + src[t.FULLPLAIN] + ')$|^$'
- addUnitAlias('dayOfYear', 'DDD');
+// An expression to strip any whitespace between the gtlt and the thing
+// it modifies, so that `> 1.2.3` ==> `>1.2.3`
+tok('COMPARATORTRIM')
+src[t.COMPARATORTRIM] = '(\\s*)' + src[t.GTLT] +
+ '\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')'
- // PRIORITY
- addUnitPriority('dayOfYear', 4);
+// this one has to use the /g flag
+re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g')
+var comparatorTrimReplace = '$1$2$3'
- // PARSING
+// Something like `1.2.3 - 1.2.4`
+// Note that these all use the loose form, because they'll be
+// checked against either the strict or loose comparator form
+// later.
+tok('HYPHENRANGE')
+src[t.HYPHENRANGE] = '^\\s*(' + src[t.XRANGEPLAIN] + ')' +
+ '\\s+-\\s+' +
+ '(' + src[t.XRANGEPLAIN] + ')' +
+ '\\s*$'
- addRegexToken('DDD', match1to3);
- addRegexToken('DDDD', match3);
- addParseToken(['DDD', 'DDDD'], function (input, array, config) {
- config._dayOfYear = toInt(input);
- });
+tok('HYPHENRANGELOOSE')
+src[t.HYPHENRANGELOOSE] = '^\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' +
+ '\\s+-\\s+' +
+ '(' + src[t.XRANGEPLAINLOOSE] + ')' +
+ '\\s*$'
- // HELPERS
+// Star ranges basically just allow anything at all.
+tok('STAR')
+src[t.STAR] = '(<|>)?=?\\s*\\*'
- // MOMENTS
+// Compile to actual regexp objects.
+// All are flag-free, unless they were created above with a flag.
+for (var i = 0; i < R; i++) {
+ debug(i, src[i])
+ if (!re[i]) {
+ re[i] = new RegExp(src[i])
+ }
+}
- function getSetDayOfYear(input) {
- var dayOfYear =
- Math.round(
- (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5
- ) + 1;
- return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');
+exports.parse = parse
+function parse (version, options) {
+ if (!options || typeof options !== 'object') {
+ options = {
+ loose: !!options,
+ includePrerelease: false
}
+ }
- // FORMATTING
-
- addFormatToken('m', ['mm', 2], 0, 'minute');
+ if (version instanceof SemVer) {
+ return version
+ }
- // ALIASES
+ if (typeof version !== 'string') {
+ return null
+ }
- addUnitAlias('minute', 'm');
+ if (version.length > MAX_LENGTH) {
+ return null
+ }
- // PRIORITY
+ var r = options.loose ? re[t.LOOSE] : re[t.FULL]
+ if (!r.test(version)) {
+ return null
+ }
- addUnitPriority('minute', 14);
+ try {
+ return new SemVer(version, options)
+ } catch (er) {
+ return null
+ }
+}
- // PARSING
+exports.valid = valid
+function valid (version, options) {
+ var v = parse(version, options)
+ return v ? v.version : null
+}
- addRegexToken('m', match1to2);
- addRegexToken('mm', match1to2, match2);
- addParseToken(['m', 'mm'], MINUTE);
+exports.clean = clean
+function clean (version, options) {
+ var s = parse(version.trim().replace(/^[=v]+/, ''), options)
+ return s ? s.version : null
+}
- // MOMENTS
+exports.SemVer = SemVer
- var getSetMinute = makeGetSet('Minutes', false);
+function SemVer (version, options) {
+ if (!options || typeof options !== 'object') {
+ options = {
+ loose: !!options,
+ includePrerelease: false
+ }
+ }
+ if (version instanceof SemVer) {
+ if (version.loose === options.loose) {
+ return version
+ } else {
+ version = version.version
+ }
+ } else if (typeof version !== 'string') {
+ throw new TypeError('Invalid Version: ' + version)
+ }
- // FORMATTING
+ if (version.length > MAX_LENGTH) {
+ throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')
+ }
- addFormatToken('s', ['ss', 2], 0, 'second');
+ if (!(this instanceof SemVer)) {
+ return new SemVer(version, options)
+ }
- // ALIASES
+ debug('SemVer', version, options)
+ this.options = options
+ this.loose = !!options.loose
- addUnitAlias('second', 's');
+ var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])
- // PRIORITY
+ if (!m) {
+ throw new TypeError('Invalid Version: ' + version)
+ }
- addUnitPriority('second', 15);
+ this.raw = version
- // PARSING
+ // these are actually numbers
+ this.major = +m[1]
+ this.minor = +m[2]
+ this.patch = +m[3]
- addRegexToken('s', match1to2);
- addRegexToken('ss', match1to2, match2);
- addParseToken(['s', 'ss'], SECOND);
+ if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
+ throw new TypeError('Invalid major version')
+ }
- // MOMENTS
+ if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
+ throw new TypeError('Invalid minor version')
+ }
- var getSetSecond = makeGetSet('Seconds', false);
+ if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
+ throw new TypeError('Invalid patch version')
+ }
- // FORMATTING
+ // numberify any prerelease numeric ids
+ if (!m[4]) {
+ this.prerelease = []
+ } else {
+ this.prerelease = m[4].split('.').map(function (id) {
+ if (/^[0-9]+$/.test(id)) {
+ var num = +id
+ if (num >= 0 && num < MAX_SAFE_INTEGER) {
+ return num
+ }
+ }
+ return id
+ })
+ }
- addFormatToken('S', 0, 0, function () {
- return ~~(this.millisecond() / 100);
- });
+ this.build = m[5] ? m[5].split('.') : []
+ this.format()
+}
- addFormatToken(0, ['SS', 2], 0, function () {
- return ~~(this.millisecond() / 10);
- });
+SemVer.prototype.format = function () {
+ this.version = this.major + '.' + this.minor + '.' + this.patch
+ if (this.prerelease.length) {
+ this.version += '-' + this.prerelease.join('.')
+ }
+ return this.version
+}
- addFormatToken(0, ['SSS', 3], 0, 'millisecond');
- addFormatToken(0, ['SSSS', 4], 0, function () {
- return this.millisecond() * 10;
- });
- addFormatToken(0, ['SSSSS', 5], 0, function () {
- return this.millisecond() * 100;
- });
- addFormatToken(0, ['SSSSSS', 6], 0, function () {
- return this.millisecond() * 1000;
- });
- addFormatToken(0, ['SSSSSSS', 7], 0, function () {
- return this.millisecond() * 10000;
- });
- addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
- return this.millisecond() * 100000;
- });
- addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
- return this.millisecond() * 1000000;
- });
+SemVer.prototype.toString = function () {
+ return this.version
+}
- // ALIASES
+SemVer.prototype.compare = function (other) {
+ debug('SemVer.compare', this.version, this.options, other)
+ if (!(other instanceof SemVer)) {
+ other = new SemVer(other, this.options)
+ }
- addUnitAlias('millisecond', 'ms');
+ return this.compareMain(other) || this.comparePre(other)
+}
- // PRIORITY
+SemVer.prototype.compareMain = function (other) {
+ if (!(other instanceof SemVer)) {
+ other = new SemVer(other, this.options)
+ }
- addUnitPriority('millisecond', 16);
+ return compareIdentifiers(this.major, other.major) ||
+ compareIdentifiers(this.minor, other.minor) ||
+ compareIdentifiers(this.patch, other.patch)
+}
- // PARSING
+SemVer.prototype.comparePre = function (other) {
+ if (!(other instanceof SemVer)) {
+ other = new SemVer(other, this.options)
+ }
- addRegexToken('S', match1to3, match1);
- addRegexToken('SS', match1to3, match2);
- addRegexToken('SSS', match1to3, match3);
+ // NOT having a prerelease is > having one
+ if (this.prerelease.length && !other.prerelease.length) {
+ return -1
+ } else if (!this.prerelease.length && other.prerelease.length) {
+ return 1
+ } else if (!this.prerelease.length && !other.prerelease.length) {
+ return 0
+ }
- var token, getSetMillisecond;
- for (token = 'SSSS'; token.length <= 9; token += 'S') {
- addRegexToken(token, matchUnsigned);
+ var i = 0
+ do {
+ var a = this.prerelease[i]
+ var b = other.prerelease[i]
+ debug('prerelease compare', i, a, b)
+ if (a === undefined && b === undefined) {
+ return 0
+ } else if (b === undefined) {
+ return 1
+ } else if (a === undefined) {
+ return -1
+ } else if (a === b) {
+ continue
+ } else {
+ return compareIdentifiers(a, b)
}
+ } while (++i)
+}
- function parseMs(input, array) {
- array[MILLISECOND] = toInt(('0.' + input) * 1000);
- }
+SemVer.prototype.compareBuild = function (other) {
+ if (!(other instanceof SemVer)) {
+ other = new SemVer(other, this.options)
+ }
- for (token = 'S'; token.length <= 9; token += 'S') {
- addParseToken(token, parseMs);
+ var i = 0
+ do {
+ var a = this.build[i]
+ var b = other.build[i]
+ debug('prerelease compare', i, a, b)
+ if (a === undefined && b === undefined) {
+ return 0
+ } else if (b === undefined) {
+ return 1
+ } else if (a === undefined) {
+ return -1
+ } else if (a === b) {
+ continue
+ } else {
+ return compareIdentifiers(a, b)
}
+ } while (++i)
+}
- getSetMillisecond = makeGetSet('Milliseconds', false);
+// preminor will bump the version up to the next minor release, and immediately
+// down to pre-release. premajor and prepatch work the same way.
+SemVer.prototype.inc = function (release, identifier) {
+ switch (release) {
+ case 'premajor':
+ this.prerelease.length = 0
+ this.patch = 0
+ this.minor = 0
+ this.major++
+ this.inc('pre', identifier)
+ break
+ case 'preminor':
+ this.prerelease.length = 0
+ this.patch = 0
+ this.minor++
+ this.inc('pre', identifier)
+ break
+ case 'prepatch':
+ // If this is already a prerelease, it will bump to the next version
+ // drop any prereleases that might already exist, since they are not
+ // relevant at this point.
+ this.prerelease.length = 0
+ this.inc('patch', identifier)
+ this.inc('pre', identifier)
+ break
+ // If the input is a non-prerelease version, this acts the same as
+ // prepatch.
+ case 'prerelease':
+ if (this.prerelease.length === 0) {
+ this.inc('patch', identifier)
+ }
+ this.inc('pre', identifier)
+ break
- // FORMATTING
+ case 'major':
+ // If this is a pre-major version, bump up to the same major version.
+ // Otherwise increment major.
+ // 1.0.0-5 bumps to 1.0.0
+ // 1.1.0 bumps to 2.0.0
+ if (this.minor !== 0 ||
+ this.patch !== 0 ||
+ this.prerelease.length === 0) {
+ this.major++
+ }
+ this.minor = 0
+ this.patch = 0
+ this.prerelease = []
+ break
+ case 'minor':
+ // If this is a pre-minor version, bump up to the same minor version.
+ // Otherwise increment minor.
+ // 1.2.0-5 bumps to 1.2.0
+ // 1.2.1 bumps to 1.3.0
+ if (this.patch !== 0 || this.prerelease.length === 0) {
+ this.minor++
+ }
+ this.patch = 0
+ this.prerelease = []
+ break
+ case 'patch':
+ // If this is not a pre-release version, it will increment the patch.
+ // If it is a pre-release it will bump up to the same patch version.
+ // 1.2.0-5 patches to 1.2.0
+ // 1.2.0 patches to 1.2.1
+ if (this.prerelease.length === 0) {
+ this.patch++
+ }
+ this.prerelease = []
+ break
+ // This probably shouldn't be used publicly.
+ // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
+ case 'pre':
+ if (this.prerelease.length === 0) {
+ this.prerelease = [0]
+ } else {
+ var i = this.prerelease.length
+ while (--i >= 0) {
+ if (typeof this.prerelease[i] === 'number') {
+ this.prerelease[i]++
+ i = -2
+ }
+ }
+ if (i === -1) {
+ // didn't increment anything
+ this.prerelease.push(0)
+ }
+ }
+ if (identifier) {
+ // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
+ // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
+ if (this.prerelease[0] === identifier) {
+ if (isNaN(this.prerelease[1])) {
+ this.prerelease = [identifier, 0]
+ }
+ } else {
+ this.prerelease = [identifier, 0]
+ }
+ }
+ break
- addFormatToken('z', 0, 0, 'zoneAbbr');
- addFormatToken('zz', 0, 0, 'zoneName');
+ default:
+ throw new Error('invalid increment argument: ' + release)
+ }
+ this.format()
+ this.raw = this.version
+ return this
+}
- // MOMENTS
+exports.inc = inc
+function inc (version, release, loose, identifier) {
+ if (typeof (loose) === 'string') {
+ identifier = loose
+ loose = undefined
+ }
- function getZoneAbbr() {
- return this._isUTC ? 'UTC' : '';
- }
+ try {
+ return new SemVer(version, loose).inc(release, identifier).version
+ } catch (er) {
+ return null
+ }
+}
- function getZoneName() {
- return this._isUTC ? 'Coordinated Universal Time' : '';
+exports.diff = diff
+function diff (version1, version2) {
+ if (eq(version1, version2)) {
+ return null
+ } else {
+ var v1 = parse(version1)
+ var v2 = parse(version2)
+ var prefix = ''
+ if (v1.prerelease.length || v2.prerelease.length) {
+ prefix = 'pre'
+ var defaultResult = 'prerelease'
+ }
+ for (var key in v1) {
+ if (key === 'major' || key === 'minor' || key === 'patch') {
+ if (v1[key] !== v2[key]) {
+ return prefix + key
+ }
+ }
}
+ return defaultResult // may be undefined
+ }
+}
- var proto = Moment.prototype;
+exports.compareIdentifiers = compareIdentifiers
- proto.add = add;
- proto.calendar = calendar$1;
- proto.clone = clone;
- proto.diff = diff;
- proto.endOf = endOf;
- proto.format = format;
- proto.from = from;
- proto.fromNow = fromNow;
- proto.to = to;
- proto.toNow = toNow;
- proto.get = stringGet;
- proto.invalidAt = invalidAt;
- proto.isAfter = isAfter;
- proto.isBefore = isBefore;
- proto.isBetween = isBetween;
- proto.isSame = isSame;
- proto.isSameOrAfter = isSameOrAfter;
- proto.isSameOrBefore = isSameOrBefore;
- proto.isValid = isValid$2;
- proto.lang = lang;
- proto.locale = locale;
- proto.localeData = localeData;
- proto.max = prototypeMax;
- proto.min = prototypeMin;
- proto.parsingFlags = parsingFlags;
- proto.set = stringSet;
- proto.startOf = startOf;
- proto.subtract = subtract;
- proto.toArray = toArray;
- proto.toObject = toObject;
- proto.toDate = toDate;
- proto.toISOString = toISOString;
- proto.inspect = inspect;
- if (typeof Symbol !== 'undefined' && Symbol.for != null) {
- proto[Symbol.for('nodejs.util.inspect.custom')] = function () {
- return 'Moment<' + this.format() + '>';
- };
- }
- proto.toJSON = toJSON;
- proto.toString = toString;
- proto.unix = unix;
- proto.valueOf = valueOf;
- proto.creationData = creationData;
- proto.eraName = getEraName;
- proto.eraNarrow = getEraNarrow;
- proto.eraAbbr = getEraAbbr;
- proto.eraYear = getEraYear;
- proto.year = getSetYear;
- proto.isLeapYear = getIsLeapYear;
- proto.weekYear = getSetWeekYear;
- proto.isoWeekYear = getSetISOWeekYear;
- proto.quarter = proto.quarters = getSetQuarter;
- proto.month = getSetMonth;
- proto.daysInMonth = getDaysInMonth;
- proto.week = proto.weeks = getSetWeek;
- proto.isoWeek = proto.isoWeeks = getSetISOWeek;
- proto.weeksInYear = getWeeksInYear;
- proto.weeksInWeekYear = getWeeksInWeekYear;
- proto.isoWeeksInYear = getISOWeeksInYear;
- proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
- proto.date = getSetDayOfMonth;
- proto.day = proto.days = getSetDayOfWeek;
- proto.weekday = getSetLocaleDayOfWeek;
- proto.isoWeekday = getSetISODayOfWeek;
- proto.dayOfYear = getSetDayOfYear;
- proto.hour = proto.hours = getSetHour;
- proto.minute = proto.minutes = getSetMinute;
- proto.second = proto.seconds = getSetSecond;
- proto.millisecond = proto.milliseconds = getSetMillisecond;
- proto.utcOffset = getSetOffset;
- proto.utc = setOffsetToUTC;
- proto.local = setOffsetToLocal;
- proto.parseZone = setOffsetToParsedOffset;
- proto.hasAlignedHourOffset = hasAlignedHourOffset;
- proto.isDST = isDaylightSavingTime;
- proto.isLocal = isLocal;
- proto.isUtcOffset = isUtcOffset;
- proto.isUtc = isUtc;
- proto.isUTC = isUtc;
- proto.zoneAbbr = getZoneAbbr;
- proto.zoneName = getZoneName;
- proto.dates = deprecate(
- 'dates accessor is deprecated. Use date instead.',
- getSetDayOfMonth
- );
- proto.months = deprecate(
- 'months accessor is deprecated. Use month instead',
- getSetMonth
- );
- proto.years = deprecate(
- 'years accessor is deprecated. Use year instead',
- getSetYear
- );
- proto.zone = deprecate(
- 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',
- getSetZone
- );
- proto.isDSTShifted = deprecate(
- 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',
- isDaylightSavingTimeShifted
- );
+var numeric = /^[0-9]+$/
+function compareIdentifiers (a, b) {
+ var anum = numeric.test(a)
+ var bnum = numeric.test(b)
- function createUnix(input) {
- return createLocal(input * 1000);
- }
+ if (anum && bnum) {
+ a = +a
+ b = +b
+ }
- function createInZone() {
- return createLocal.apply(null, arguments).parseZone();
- }
+ return a === b ? 0
+ : (anum && !bnum) ? -1
+ : (bnum && !anum) ? 1
+ : a < b ? -1
+ : 1
+}
- function preParsePostFormat(string) {
- return string;
- }
+exports.rcompareIdentifiers = rcompareIdentifiers
+function rcompareIdentifiers (a, b) {
+ return compareIdentifiers(b, a)
+}
- var proto$1 = Locale.prototype;
+exports.major = major
+function major (a, loose) {
+ return new SemVer(a, loose).major
+}
- proto$1.calendar = calendar;
- proto$1.longDateFormat = longDateFormat;
- proto$1.invalidDate = invalidDate;
- proto$1.ordinal = ordinal;
- proto$1.preparse = preParsePostFormat;
- proto$1.postformat = preParsePostFormat;
- proto$1.relativeTime = relativeTime;
- proto$1.pastFuture = pastFuture;
- proto$1.set = set;
- proto$1.eras = localeEras;
- proto$1.erasParse = localeErasParse;
- proto$1.erasConvertYear = localeErasConvertYear;
- proto$1.erasAbbrRegex = erasAbbrRegex;
- proto$1.erasNameRegex = erasNameRegex;
- proto$1.erasNarrowRegex = erasNarrowRegex;
+exports.minor = minor
+function minor (a, loose) {
+ return new SemVer(a, loose).minor
+}
- proto$1.months = localeMonths;
- proto$1.monthsShort = localeMonthsShort;
- proto$1.monthsParse = localeMonthsParse;
- proto$1.monthsRegex = monthsRegex;
- proto$1.monthsShortRegex = monthsShortRegex;
- proto$1.week = localeWeek;
- proto$1.firstDayOfYear = localeFirstDayOfYear;
- proto$1.firstDayOfWeek = localeFirstDayOfWeek;
+exports.patch = patch
+function patch (a, loose) {
+ return new SemVer(a, loose).patch
+}
- proto$1.weekdays = localeWeekdays;
- proto$1.weekdaysMin = localeWeekdaysMin;
- proto$1.weekdaysShort = localeWeekdaysShort;
- proto$1.weekdaysParse = localeWeekdaysParse;
+exports.compare = compare
+function compare (a, b, loose) {
+ return new SemVer(a, loose).compare(new SemVer(b, loose))
+}
- proto$1.weekdaysRegex = weekdaysRegex;
- proto$1.weekdaysShortRegex = weekdaysShortRegex;
- proto$1.weekdaysMinRegex = weekdaysMinRegex;
+exports.compareLoose = compareLoose
+function compareLoose (a, b) {
+ return compare(a, b, true)
+}
- proto$1.isPM = localeIsPM;
- proto$1.meridiem = localeMeridiem;
+exports.compareBuild = compareBuild
+function compareBuild (a, b, loose) {
+ var versionA = new SemVer(a, loose)
+ var versionB = new SemVer(b, loose)
+ return versionA.compare(versionB) || versionA.compareBuild(versionB)
+}
- function get$1(format, index, field, setter) {
- var locale = getLocale(),
- utc = createUTC().set(setter, index);
- return locale[field](utc, format);
- }
+exports.rcompare = rcompare
+function rcompare (a, b, loose) {
+ return compare(b, a, loose)
+}
- function listMonthsImpl(format, index, field) {
- if (isNumber(format)) {
- index = format;
- format = undefined;
- }
+exports.sort = sort
+function sort (list, loose) {
+ return list.sort(function (a, b) {
+ return exports.compareBuild(a, b, loose)
+ })
+}
- format = format || '';
+exports.rsort = rsort
+function rsort (list, loose) {
+ return list.sort(function (a, b) {
+ return exports.compareBuild(b, a, loose)
+ })
+}
- if (index != null) {
- return get$1(format, index, field, 'month');
- }
+exports.gt = gt
+function gt (a, b, loose) {
+ return compare(a, b, loose) > 0
+}
- var i,
- out = [];
- for (i = 0; i < 12; i++) {
- out[i] = get$1(format, i, field, 'month');
- }
- return out;
- }
+exports.lt = lt
+function lt (a, b, loose) {
+ return compare(a, b, loose) < 0
+}
- // ()
- // (5)
- // (fmt, 5)
- // (fmt)
- // (true)
- // (true, 5)
- // (true, fmt, 5)
- // (true, fmt)
- function listWeekdaysImpl(localeSorted, format, index, field) {
- if (typeof localeSorted === 'boolean') {
- if (isNumber(format)) {
- index = format;
- format = undefined;
- }
+exports.eq = eq
+function eq (a, b, loose) {
+ return compare(a, b, loose) === 0
+}
- format = format || '';
- } else {
- format = localeSorted;
- index = format;
- localeSorted = false;
+exports.neq = neq
+function neq (a, b, loose) {
+ return compare(a, b, loose) !== 0
+}
- if (isNumber(format)) {
- index = format;
- format = undefined;
- }
+exports.gte = gte
+function gte (a, b, loose) {
+ return compare(a, b, loose) >= 0
+}
- format = format || '';
- }
+exports.lte = lte
+function lte (a, b, loose) {
+ return compare(a, b, loose) <= 0
+}
- var locale = getLocale(),
- shift = localeSorted ? locale._week.dow : 0,
- i,
- out = [];
+exports.cmp = cmp
+function cmp (a, op, b, loose) {
+ switch (op) {
+ case '===':
+ if (typeof a === 'object')
+ a = a.version
+ if (typeof b === 'object')
+ b = b.version
+ return a === b
- if (index != null) {
- return get$1(format, (index + shift) % 7, field, 'day');
- }
+ case '!==':
+ if (typeof a === 'object')
+ a = a.version
+ if (typeof b === 'object')
+ b = b.version
+ return a !== b
- for (i = 0; i < 7; i++) {
- out[i] = get$1(format, (i + shift) % 7, field, 'day');
- }
- return out;
- }
+ case '':
+ case '=':
+ case '==':
+ return eq(a, b, loose)
- function listMonths(format, index) {
- return listMonthsImpl(format, index, 'months');
- }
+ case '!=':
+ return neq(a, b, loose)
- function listMonthsShort(format, index) {
- return listMonthsImpl(format, index, 'monthsShort');
- }
+ case '>':
+ return gt(a, b, loose)
- function listWeekdays(localeSorted, format, index) {
- return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
- }
+ case '>=':
+ return gte(a, b, loose)
- function listWeekdaysShort(localeSorted, format, index) {
- return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
- }
+ case '<':
+ return lt(a, b, loose)
- function listWeekdaysMin(localeSorted, format, index) {
- return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
- }
+ case '<=':
+ return lte(a, b, loose)
- getSetGlobalLocale('en', {
- eras: [
- {
- since: '0001-01-01',
- until: +Infinity,
- offset: 1,
- name: 'Anno Domini',
- narrow: 'AD',
- abbr: 'AD',
- },
- {
- since: '0000-12-31',
- until: -Infinity,
- offset: 1,
- name: 'Before Christ',
- narrow: 'BC',
- abbr: 'BC',
- },
- ],
- dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
- ordinal: function (number) {
- var b = number % 10,
- output =
- toInt((number % 100) / 10) === 1
- ? 'th'
- : b === 1
- ? 'st'
- : b === 2
- ? 'nd'
- : b === 3
- ? 'rd'
- : 'th';
- return number + output;
- },
- });
+ default:
+ throw new TypeError('Invalid operator: ' + op)
+ }
+}
- // Side effect imports
+exports.Comparator = Comparator
+function Comparator (comp, options) {
+ if (!options || typeof options !== 'object') {
+ options = {
+ loose: !!options,
+ includePrerelease: false
+ }
+ }
- hooks.lang = deprecate(
- 'moment.lang is deprecated. Use moment.locale instead.',
- getSetGlobalLocale
- );
- hooks.langData = deprecate(
- 'moment.langData is deprecated. Use moment.localeData instead.',
- getLocale
- );
+ if (comp instanceof Comparator) {
+ if (comp.loose === !!options.loose) {
+ return comp
+ } else {
+ comp = comp.value
+ }
+ }
- var mathAbs = Math.abs;
+ if (!(this instanceof Comparator)) {
+ return new Comparator(comp, options)
+ }
- function abs() {
- var data = this._data;
+ debug('comparator', comp, options)
+ this.options = options
+ this.loose = !!options.loose
+ this.parse(comp)
- this._milliseconds = mathAbs(this._milliseconds);
- this._days = mathAbs(this._days);
- this._months = mathAbs(this._months);
+ if (this.semver === ANY) {
+ this.value = ''
+ } else {
+ this.value = this.operator + this.semver.version
+ }
- data.milliseconds = mathAbs(data.milliseconds);
- data.seconds = mathAbs(data.seconds);
- data.minutes = mathAbs(data.minutes);
- data.hours = mathAbs(data.hours);
- data.months = mathAbs(data.months);
- data.years = mathAbs(data.years);
+ debug('comp', this)
+}
- return this;
- }
+var ANY = {}
+Comparator.prototype.parse = function (comp) {
+ var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
+ var m = comp.match(r)
- function addSubtract$1(duration, input, value, direction) {
- var other = createDuration(input, value);
+ if (!m) {
+ throw new TypeError('Invalid comparator: ' + comp)
+ }
- duration._milliseconds += direction * other._milliseconds;
- duration._days += direction * other._days;
- duration._months += direction * other._months;
+ this.operator = m[1] !== undefined ? m[1] : ''
+ if (this.operator === '=') {
+ this.operator = ''
+ }
- return duration._bubble();
- }
+ // if it literally is just '>' or '' then allow anything.
+ if (!m[2]) {
+ this.semver = ANY
+ } else {
+ this.semver = new SemVer(m[2], this.options.loose)
+ }
+}
- // supports only 2.0-style add(1, 's') or add(duration)
- function add$1(input, value) {
- return addSubtract$1(this, input, value, 1);
- }
+Comparator.prototype.toString = function () {
+ return this.value
+}
- // supports only 2.0-style subtract(1, 's') or subtract(duration)
- function subtract$1(input, value) {
- return addSubtract$1(this, input, value, -1);
- }
+Comparator.prototype.test = function (version) {
+ debug('Comparator.test', version, this.options.loose)
- function absCeil(number) {
- if (number < 0) {
- return Math.floor(number);
- } else {
- return Math.ceil(number);
- }
- }
+ if (this.semver === ANY || version === ANY) {
+ return true
+ }
- function bubble() {
- var milliseconds = this._milliseconds,
- days = this._days,
- months = this._months,
- data = this._data,
- seconds,
- minutes,
- hours,
- years,
- monthsFromDays;
+ if (typeof version === 'string') {
+ try {
+ version = new SemVer(version, this.options)
+ } catch (er) {
+ return false
+ }
+ }
- // if we have a mix of positive and negative values, bubble down first
- // check: https://github.com/moment/moment/issues/2166
- if (
- !(
- (milliseconds >= 0 && days >= 0 && months >= 0) ||
- (milliseconds <= 0 && days <= 0 && months <= 0)
- )
- ) {
- milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
- days = 0;
- months = 0;
- }
+ return cmp(version, this.operator, this.semver, this.options)
+}
- // The following code bubbles up values, see the tests for
- // examples of what that means.
- data.milliseconds = milliseconds % 1000;
+Comparator.prototype.intersects = function (comp, options) {
+ if (!(comp instanceof Comparator)) {
+ throw new TypeError('a Comparator is required')
+ }
- seconds = absFloor(milliseconds / 1000);
- data.seconds = seconds % 60;
+ if (!options || typeof options !== 'object') {
+ options = {
+ loose: !!options,
+ includePrerelease: false
+ }
+ }
- minutes = absFloor(seconds / 60);
- data.minutes = minutes % 60;
+ var rangeTmp
- hours = absFloor(minutes / 60);
- data.hours = hours % 24;
-
- days += absFloor(hours / 24);
-
- // convert days to months
- monthsFromDays = absFloor(daysToMonths(days));
- months += monthsFromDays;
- days -= absCeil(monthsToDays(monthsFromDays));
-
- // 12 months -> 1 year
- years = absFloor(months / 12);
- months %= 12;
-
- data.days = days;
- data.months = months;
- data.years = years;
-
- return this;
- }
-
- function daysToMonths(days) {
- // 400 years have 146097 days (taking into account leap year rules)
- // 400 years have 12 months === 4800
- return (days * 4800) / 146097;
+ if (this.operator === '') {
+ if (this.value === '') {
+ return true
}
-
- function monthsToDays(months) {
- // the reverse of daysToMonths
- return (months * 146097) / 4800;
+ rangeTmp = new Range(comp.value, options)
+ return satisfies(this.value, rangeTmp, options)
+ } else if (comp.operator === '') {
+ if (comp.value === '') {
+ return true
}
+ rangeTmp = new Range(this.value, options)
+ return satisfies(comp.semver, rangeTmp, options)
+ }
- function as(units) {
- if (!this.isValid()) {
- return NaN;
- }
- var days,
- months,
- milliseconds = this._milliseconds;
-
- units = normalizeUnits(units);
+ var sameDirectionIncreasing =
+ (this.operator === '>=' || this.operator === '>') &&
+ (comp.operator === '>=' || comp.operator === '>')
+ var sameDirectionDecreasing =
+ (this.operator === '<=' || this.operator === '<') &&
+ (comp.operator === '<=' || comp.operator === '<')
+ var sameSemVer = this.semver.version === comp.semver.version
+ var differentDirectionsInclusive =
+ (this.operator === '>=' || this.operator === '<=') &&
+ (comp.operator === '>=' || comp.operator === '<=')
+ var oppositeDirectionsLessThan =
+ cmp(this.semver, '<', comp.semver, options) &&
+ ((this.operator === '>=' || this.operator === '>') &&
+ (comp.operator === '<=' || comp.operator === '<'))
+ var oppositeDirectionsGreaterThan =
+ cmp(this.semver, '>', comp.semver, options) &&
+ ((this.operator === '<=' || this.operator === '<') &&
+ (comp.operator === '>=' || comp.operator === '>'))
- if (units === 'month' || units === 'quarter' || units === 'year') {
- days = this._days + milliseconds / 864e5;
- months = this._months + daysToMonths(days);
- switch (units) {
- case 'month':
- return months;
- case 'quarter':
- return months / 3;
- case 'year':
- return months / 12;
- }
- } else {
- // handle milliseconds separately because of floating point math errors (issue #1867)
- days = this._days + Math.round(monthsToDays(this._months));
- switch (units) {
- case 'week':
- return days / 7 + milliseconds / 6048e5;
- case 'day':
- return days + milliseconds / 864e5;
- case 'hour':
- return days * 24 + milliseconds / 36e5;
- case 'minute':
- return days * 1440 + milliseconds / 6e4;
- case 'second':
- return days * 86400 + milliseconds / 1000;
- // Math.floor prevents floating point math errors here
- case 'millisecond':
- return Math.floor(days * 864e5) + milliseconds;
- default:
- throw new Error('Unknown unit ' + units);
- }
- }
- }
+ return sameDirectionIncreasing || sameDirectionDecreasing ||
+ (sameSemVer && differentDirectionsInclusive) ||
+ oppositeDirectionsLessThan || oppositeDirectionsGreaterThan
+}
- // TODO: Use this.as('ms')?
- function valueOf$1() {
- if (!this.isValid()) {
- return NaN;
- }
- return (
- this._milliseconds +
- this._days * 864e5 +
- (this._months % 12) * 2592e6 +
- toInt(this._months / 12) * 31536e6
- );
+exports.Range = Range
+function Range (range, options) {
+ if (!options || typeof options !== 'object') {
+ options = {
+ loose: !!options,
+ includePrerelease: false
}
+ }
- function makeAs(alias) {
- return function () {
- return this.as(alias);
- };
+ if (range instanceof Range) {
+ if (range.loose === !!options.loose &&
+ range.includePrerelease === !!options.includePrerelease) {
+ return range
+ } else {
+ return new Range(range.raw, options)
}
+ }
- var asMilliseconds = makeAs('ms'),
- asSeconds = makeAs('s'),
- asMinutes = makeAs('m'),
- asHours = makeAs('h'),
- asDays = makeAs('d'),
- asWeeks = makeAs('w'),
- asMonths = makeAs('M'),
- asQuarters = makeAs('Q'),
- asYears = makeAs('y');
+ if (range instanceof Comparator) {
+ return new Range(range.value, options)
+ }
- function clone$1() {
- return createDuration(this);
- }
+ if (!(this instanceof Range)) {
+ return new Range(range, options)
+ }
- function get$2(units) {
- units = normalizeUnits(units);
- return this.isValid() ? this[units + 's']() : NaN;
- }
+ this.options = options
+ this.loose = !!options.loose
+ this.includePrerelease = !!options.includePrerelease
- function makeGetter(name) {
- return function () {
- return this.isValid() ? this._data[name] : NaN;
- };
- }
+ // First, split based on boolean or ||
+ this.raw = range
+ this.set = range.split(/\s*\|\|\s*/).map(function (range) {
+ return this.parseRange(range.trim())
+ }, this).filter(function (c) {
+ // throw out any that are not relevant for whatever reason
+ return c.length
+ })
- var milliseconds = makeGetter('milliseconds'),
- seconds = makeGetter('seconds'),
- minutes = makeGetter('minutes'),
- hours = makeGetter('hours'),
- days = makeGetter('days'),
- months = makeGetter('months'),
- years = makeGetter('years');
+ if (!this.set.length) {
+ throw new TypeError('Invalid SemVer Range: ' + range)
+ }
- function weeks() {
- return absFloor(this.days() / 7);
- }
+ this.format()
+}
- var round = Math.round,
- thresholds = {
- ss: 44, // a few seconds to seconds
- s: 45, // seconds to minute
- m: 45, // minutes to hour
- h: 22, // hours to day
- d: 26, // days to month/week
- w: null, // weeks to month
- M: 11, // months to year
- };
+Range.prototype.format = function () {
+ this.range = this.set.map(function (comps) {
+ return comps.join(' ').trim()
+ }).join('||').trim()
+ return this.range
+}
- // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
- function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
- return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
- }
+Range.prototype.toString = function () {
+ return this.range
+}
- function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {
- var duration = createDuration(posNegDuration).abs(),
- seconds = round(duration.as('s')),
- minutes = round(duration.as('m')),
- hours = round(duration.as('h')),
- days = round(duration.as('d')),
- months = round(duration.as('M')),
- weeks = round(duration.as('w')),
- years = round(duration.as('y')),
- a =
- (seconds <= thresholds.ss && ['s', seconds]) ||
- (seconds < thresholds.s && ['ss', seconds]) ||
- (minutes <= 1 && ['m']) ||
- (minutes < thresholds.m && ['mm', minutes]) ||
- (hours <= 1 && ['h']) ||
- (hours < thresholds.h && ['hh', hours]) ||
- (days <= 1 && ['d']) ||
- (days < thresholds.d && ['dd', days]);
+Range.prototype.parseRange = function (range) {
+ var loose = this.options.loose
+ range = range.trim()
+ // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
+ var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]
+ range = range.replace(hr, hyphenReplace)
+ debug('hyphen replace', range)
+ // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
+ range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)
+ debug('comparator trim', range, re[t.COMPARATORTRIM])
- if (thresholds.w != null) {
- a =
- a ||
- (weeks <= 1 && ['w']) ||
- (weeks < thresholds.w && ['ww', weeks]);
- }
- a = a ||
- (months <= 1 && ['M']) ||
- (months < thresholds.M && ['MM', months]) ||
- (years <= 1 && ['y']) || ['yy', years];
+ // `~ 1.2.3` => `~1.2.3`
+ range = range.replace(re[t.TILDETRIM], tildeTrimReplace)
- a[2] = withoutSuffix;
- a[3] = +posNegDuration > 0;
- a[4] = locale;
- return substituteTimeAgo.apply(null, a);
- }
+ // `^ 1.2.3` => `^1.2.3`
+ range = range.replace(re[t.CARETTRIM], caretTrimReplace)
- // This function allows you to set the rounding function for relative time strings
- function getSetRelativeTimeRounding(roundingFunction) {
- if (roundingFunction === undefined) {
- return round;
- }
- if (typeof roundingFunction === 'function') {
- round = roundingFunction;
- return true;
- }
- return false;
- }
+ // normalize spaces
+ range = range.split(/\s+/).join(' ')
- // This function allows you to set a threshold for relative time strings
- function getSetRelativeTimeThreshold(threshold, limit) {
- if (thresholds[threshold] === undefined) {
- return false;
- }
- if (limit === undefined) {
- return thresholds[threshold];
- }
- thresholds[threshold] = limit;
- if (threshold === 's') {
- thresholds.ss = limit - 1;
- }
- return true;
- }
+ // At this point, the range is completely trimmed and
+ // ready to be split into comparators.
- function humanize(argWithSuffix, argThresholds) {
- if (!this.isValid()) {
- return this.localeData().invalidDate();
- }
+ var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
+ var set = range.split(' ').map(function (comp) {
+ return parseComparator(comp, this.options)
+ }, this).join(' ').split(/\s+/)
+ if (this.options.loose) {
+ // in loose mode, throw out any that are not valid comparators
+ set = set.filter(function (comp) {
+ return !!comp.match(compRe)
+ })
+ }
+ set = set.map(function (comp) {
+ return new Comparator(comp, this.options)
+ }, this)
- var withSuffix = false,
- th = thresholds,
- locale,
- output;
+ return set
+}
- if (typeof argWithSuffix === 'object') {
- argThresholds = argWithSuffix;
- argWithSuffix = false;
- }
- if (typeof argWithSuffix === 'boolean') {
- withSuffix = argWithSuffix;
- }
- if (typeof argThresholds === 'object') {
- th = Object.assign({}, thresholds, argThresholds);
- if (argThresholds.s != null && argThresholds.ss == null) {
- th.ss = argThresholds.s - 1;
- }
- }
+Range.prototype.intersects = function (range, options) {
+ if (!(range instanceof Range)) {
+ throw new TypeError('a Range is required')
+ }
- locale = this.localeData();
- output = relativeTime$1(this, !withSuffix, th, locale);
+ return this.set.some(function (thisComparators) {
+ return (
+ isSatisfiable(thisComparators, options) &&
+ range.set.some(function (rangeComparators) {
+ return (
+ isSatisfiable(rangeComparators, options) &&
+ thisComparators.every(function (thisComparator) {
+ return rangeComparators.every(function (rangeComparator) {
+ return thisComparator.intersects(rangeComparator, options)
+ })
+ })
+ )
+ })
+ )
+ })
+}
- if (withSuffix) {
- output = locale.pastFuture(+this, output);
- }
+// take a set of comparators and determine whether there
+// exists a version which can satisfy it
+function isSatisfiable (comparators, options) {
+ var result = true
+ var remainingComparators = comparators.slice()
+ var testComparator = remainingComparators.pop()
- return locale.postformat(output);
- }
+ while (result && remainingComparators.length) {
+ result = remainingComparators.every(function (otherComparator) {
+ return testComparator.intersects(otherComparator, options)
+ })
- var abs$1 = Math.abs;
+ testComparator = remainingComparators.pop()
+ }
- function sign(x) {
- return (x > 0) - (x < 0) || +x;
- }
+ return result
+}
- function toISOString$1() {
- // for ISO strings we do not use the normal bubbling rules:
- // * milliseconds bubble up until they become hours
- // * days do not bubble at all
- // * months bubble up until they become years
- // This is because there is no context-free conversion between hours and days
- // (think of clock changes)
- // and also not between days and months (28-31 days per month)
- if (!this.isValid()) {
- return this.localeData().invalidDate();
- }
+// Mostly just for testing and legacy API reasons
+exports.toComparators = toComparators
+function toComparators (range, options) {
+ return new Range(range, options).set.map(function (comp) {
+ return comp.map(function (c) {
+ return c.value
+ }).join(' ').trim().split(' ')
+ })
+}
- var seconds = abs$1(this._milliseconds) / 1000,
- days = abs$1(this._days),
- months = abs$1(this._months),
- minutes,
- hours,
- years,
- s,
- total = this.asSeconds(),
- totalSign,
- ymSign,
- daysSign,
- hmsSign;
+// comprised of xranges, tildes, stars, and gtlt's at this point.
+// already replaced the hyphen ranges
+// turn into a set of JUST comparators.
+function parseComparator (comp, options) {
+ debug('comp', comp, options)
+ comp = replaceCarets(comp, options)
+ debug('caret', comp)
+ comp = replaceTildes(comp, options)
+ debug('tildes', comp)
+ comp = replaceXRanges(comp, options)
+ debug('xrange', comp)
+ comp = replaceStars(comp, options)
+ debug('stars', comp)
+ return comp
+}
- if (!total) {
- // this is the same as C#'s (Noda) and python (isodate)...
- // but not other JS (goog.date)
- return 'P0D';
- }
+function isX (id) {
+ return !id || id.toLowerCase() === 'x' || id === '*'
+}
- // 3600 seconds -> 60 minutes -> 1 hour
- minutes = absFloor(seconds / 60);
- hours = absFloor(minutes / 60);
- seconds %= 60;
- minutes %= 60;
+// ~, ~> --> * (any, kinda silly)
+// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
+// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
+// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
+// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
+// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
+function replaceTildes (comp, options) {
+ return comp.trim().split(/\s+/).map(function (comp) {
+ return replaceTilde(comp, options)
+ }).join(' ')
+}
- // 12 months -> 1 year
- years = absFloor(months / 12);
- months %= 12;
+function replaceTilde (comp, options) {
+ var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]
+ return comp.replace(r, function (_, M, m, p, pr) {
+ debug('tilde', comp, _, M, m, p, pr)
+ var ret
- // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
- s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';
+ if (isX(M)) {
+ ret = ''
+ } else if (isX(m)) {
+ ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
+ } else if (isX(p)) {
+ // ~1.2 == >=1.2.0 <1.3.0
+ ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
+ } else if (pr) {
+ debug('replaceTilde pr', pr)
+ ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
+ ' <' + M + '.' + (+m + 1) + '.0'
+ } else {
+ // ~1.2.3 == >=1.2.3 <1.3.0
+ ret = '>=' + M + '.' + m + '.' + p +
+ ' <' + M + '.' + (+m + 1) + '.0'
+ }
- totalSign = total < 0 ? '-' : '';
- ymSign = sign(this._months) !== sign(total) ? '-' : '';
- daysSign = sign(this._days) !== sign(total) ? '-' : '';
- hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';
+ debug('tilde return', ret)
+ return ret
+ })
+}
- return (
- totalSign +
- 'P' +
- (years ? ymSign + years + 'Y' : '') +
- (months ? ymSign + months + 'M' : '') +
- (days ? daysSign + days + 'D' : '') +
- (hours || minutes || seconds ? 'T' : '') +
- (hours ? hmsSign + hours + 'H' : '') +
- (minutes ? hmsSign + minutes + 'M' : '') +
- (seconds ? hmsSign + s + 'S' : '')
- );
- }
+// ^ --> * (any, kinda silly)
+// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
+// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
+// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
+// ^1.2.3 --> >=1.2.3 <2.0.0
+// ^1.2.0 --> >=1.2.0 <2.0.0
+function replaceCarets (comp, options) {
+ return comp.trim().split(/\s+/).map(function (comp) {
+ return replaceCaret(comp, options)
+ }).join(' ')
+}
- var proto$2 = Duration.prototype;
+function replaceCaret (comp, options) {
+ debug('caret', comp, options)
+ var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]
+ return comp.replace(r, function (_, M, m, p, pr) {
+ debug('caret', comp, _, M, m, p, pr)
+ var ret
- proto$2.isValid = isValid$1;
- proto$2.abs = abs;
- proto$2.add = add$1;
- proto$2.subtract = subtract$1;
- proto$2.as = as;
- proto$2.asMilliseconds = asMilliseconds;
- proto$2.asSeconds = asSeconds;
- proto$2.asMinutes = asMinutes;
- proto$2.asHours = asHours;
- proto$2.asDays = asDays;
- proto$2.asWeeks = asWeeks;
- proto$2.asMonths = asMonths;
- proto$2.asQuarters = asQuarters;
- proto$2.asYears = asYears;
- proto$2.valueOf = valueOf$1;
- proto$2._bubble = bubble;
- proto$2.clone = clone$1;
- proto$2.get = get$2;
- proto$2.milliseconds = milliseconds;
- proto$2.seconds = seconds;
- proto$2.minutes = minutes;
- proto$2.hours = hours;
- proto$2.days = days;
- proto$2.weeks = weeks;
- proto$2.months = months;
- proto$2.years = years;
- proto$2.humanize = humanize;
- proto$2.toISOString = toISOString$1;
- proto$2.toString = toISOString$1;
- proto$2.toJSON = toISOString$1;
- proto$2.locale = locale;
- proto$2.localeData = localeData;
-
- proto$2.toIsoString = deprecate(
- 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',
- toISOString$1
- );
- proto$2.lang = lang;
-
- // FORMATTING
-
- addFormatToken('X', 0, 0, 'unix');
- addFormatToken('x', 0, 0, 'valueOf');
-
- // PARSING
-
- addRegexToken('x', matchSigned);
- addRegexToken('X', matchTimestamp);
- addParseToken('X', function (input, array, config) {
- config._d = new Date(parseFloat(input) * 1000);
- });
- addParseToken('x', function (input, array, config) {
- config._d = new Date(toInt(input));
- });
-
- //! moment.js
-
- hooks.version = '2.25.3';
-
- setHookCallback(createLocal);
-
- hooks.fn = proto;
- hooks.min = min;
- hooks.max = max;
- hooks.now = now;
- hooks.utc = createUTC;
- hooks.unix = createUnix;
- hooks.months = listMonths;
- hooks.isDate = isDate;
- hooks.locale = getSetGlobalLocale;
- hooks.invalid = createInvalid;
- hooks.duration = createDuration;
- hooks.isMoment = isMoment;
- hooks.weekdays = listWeekdays;
- hooks.parseZone = createInZone;
- hooks.localeData = getLocale;
- hooks.isDuration = isDuration;
- hooks.monthsShort = listMonthsShort;
- hooks.weekdaysMin = listWeekdaysMin;
- hooks.defineLocale = defineLocale;
- hooks.updateLocale = updateLocale;
- hooks.locales = listLocales;
- hooks.weekdaysShort = listWeekdaysShort;
- hooks.normalizeUnits = normalizeUnits;
- hooks.relativeTimeRounding = getSetRelativeTimeRounding;
- hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
- hooks.calendarFormat = getCalendarFormat;
- hooks.prototype = proto;
-
- // currently HTML5 input type only supports 24-hour formats
- hooks.HTML5_FMT = {
- DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', //
- DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', //
- DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', //
- DATE: 'YYYY-MM-DD', //
- TIME: 'HH:mm', //
- TIME_SECONDS: 'HH:mm:ss', //
- TIME_MS: 'HH:mm:ss.SSS', //
- WEEK: 'GGGG-[W]WW', //
- MONTH: 'YYYY-MM', //
- };
-
- return hooks;
-
-})));
-
-
-/***/ }),
-/* 483 */,
-/* 484 */,
-/* 485 */,
-/* 486 */,
-/* 487 */,
-/* 488 */,
-/* 489 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-"use strict";
-
-
-const path = __webpack_require__(622);
-const which = __webpack_require__(266);
-const pathKey = __webpack_require__(39)();
-
-function resolveCommandAttempt(parsed, withoutPathExt) {
- const cwd = process.cwd();
- const hasCustomCwd = parsed.options.cwd != null;
-
- // If a custom `cwd` was specified, we need to change the process cwd
- // because `which` will do stat calls but does not support a custom cwd
- if (hasCustomCwd) {
- try {
- process.chdir(parsed.options.cwd);
- } catch (err) {
- /* Empty */
- }
- }
-
- let resolved;
-
- try {
- resolved = which.sync(parsed.command, {
- path: (parsed.options.env || process.env)[pathKey],
- pathExt: withoutPathExt ? path.delimiter : undefined,
- });
- } catch (e) {
- /* Empty */
- } finally {
- process.chdir(cwd);
- }
-
- // If we successfully resolved, ensure that an absolute path is returned
- // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it
- if (resolved) {
- resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved);
- }
-
- return resolved;
-}
-
-function resolveCommand(parsed) {
- return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);
-}
-
-module.exports = resolveCommand;
-
-
-/***/ }),
-/* 490 */,
-/* 491 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-"use strict";
-
-
-var fs = __webpack_require__(598);
-var path = __webpack_require__(622);
-var extend = __webpack_require__(374);
-var errcode = __webpack_require__(120);
-var retry = __webpack_require__(560);
-var syncFs = __webpack_require__(931);
-
-var locks = {};
-
-function getLockFile(file) {
- return file + '.lock';
-}
-
-function canonicalPath(file, options, callback) {
- if (!options.realpath) {
- return callback(null, path.resolve(file));
- }
-
- // Use realpath to resolve symlinks
- // It also resolves relative paths
- options.fs.realpath(file, callback);
-}
-
-function acquireLock(file, options, callback) {
- // Use mkdir to create the lockfile (atomic operation)
- options.fs.mkdir(getLockFile(file), function (err) {
- // If successful, we are done
- if (!err) {
- return callback();
- }
-
- // If error is not EEXIST then some other error occurred while locking
- if (err.code !== 'EEXIST') {
- return callback(err);
- }
-
- // Otherwise, check if lock is stale by analyzing the file mtime
- if (options.stale <= 0) {
- return callback(errcode('Lock file is already being hold', 'ELOCKED', { file: file }));
- }
-
- options.fs.stat(getLockFile(file), function (err, stat) {
- if (err) {
- // Retry if the lockfile has been removed (meanwhile)
- // Skip stale check to avoid recursiveness
- if (err.code === 'ENOENT') {
- return acquireLock(file, extend({}, options, { stale: 0 }), callback);
- }
-
- return callback(err);
- }
-
- if (!isLockStale(stat, options)) {
- return callback(errcode('Lock file is already being hold', 'ELOCKED', { file: file }));
- }
-
- // If it's stale, remove it and try again!
- // Skip stale check to avoid recursiveness
- removeLock(file, options, function (err) {
- if (err) {
- return callback(err);
- }
-
- acquireLock(file, extend({}, options, { stale: 0 }), callback);
- });
- });
- });
-}
-
-function isLockStale(stat, options) {
- return stat.mtime.getTime() < Date.now() - options.stale;
-}
-
-function removeLock(file, options, callback) {
- // Remove lockfile, ignoring ENOENT errors
- options.fs.rmdir(getLockFile(file), function (err) {
- if (err && err.code !== 'ENOENT') {
- return callback(err);
+ if (isX(M)) {
+ ret = ''
+ } else if (isX(m)) {
+ ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
+ } else if (isX(p)) {
+ if (M === '0') {
+ ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
+ } else {
+ ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'
+ }
+ } else if (pr) {
+ debug('replaceCaret pr', pr)
+ if (M === '0') {
+ if (m === '0') {
+ ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
+ ' <' + M + '.' + m + '.' + (+p + 1)
+ } else {
+ ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
+ ' <' + M + '.' + (+m + 1) + '.0'
}
-
- callback();
- });
-}
-
-function updateLock(file, options) {
- var lock = locks[file];
-
- /* istanbul ignore next */
- if (lock.updateTimeout) {
- return;
- }
-
- lock.updateDelay = lock.updateDelay || options.update;
- lock.updateTimeout = setTimeout(function () {
- var mtime = Date.now() / 1000;
-
- lock.updateTimeout = null;
-
- options.fs.utimes(getLockFile(file), mtime, mtime, function (err) {
- // Ignore if the lock was released
- if (lock.released) {
- return;
- }
-
- // Verify if we are within the stale threshold
- if (lock.lastUpdate <= Date.now() - options.stale &&
- lock.lastUpdate > Date.now() - options.stale * 2) {
- return compromisedLock(file, lock,
- errcode(lock.updateError || 'Unable to update lock within the stale threshold', 'ECOMPROMISED'));
- }
-
- // If the file is older than (stale * 2), we assume the clock is moved manually,
- // which we consider a valid case
-
- // If it failed to update the lockfile, keep trying unless
- // the lockfile was deleted!
- if (err) {
- if (err.code === 'ENOENT') {
- return compromisedLock(file, lock, errcode(err, 'ECOMPROMISED'));
- }
-
- lock.updateError = err;
- lock.updateDelay = 1000;
- return updateLock(file, options);
- }
-
- // All ok, keep updating..
- lock.lastUpdate = Date.now();
- lock.updateError = null;
- lock.updateDelay = null;
- updateLock(file, options);
- });
- }, lock.updateDelay);
-
- // Unref the timer so that the nodejs process can exit freely
- // This is safe because all acquired locks will be automatically released
- // on process exit
- lock.updateTimeout.unref();
-}
-
-function compromisedLock(file, lock, err) {
- lock.released = true; // Signal the lock has been released
- /* istanbul ignore next */
- lock.updateTimeout && clearTimeout(lock.updateTimeout); // Cancel lock mtime update
-
- if (locks[file] === lock) {
- delete locks[file];
- }
-
- lock.compromised(err);
-}
-
-// -----------------------------------------
-
-function lock(file, options, compromised, callback) {
- if (typeof options === 'function') {
- callback = compromised;
- compromised = options;
- options = null;
- }
-
- if (!callback) {
- callback = compromised;
- compromised = null;
- }
-
- options = extend({
- stale: 10000,
- update: null,
- realpath: true,
- retries: 0,
- fs: fs,
- }, options);
-
- options.retries = options.retries || 0;
- options.retries = typeof options.retries === 'number' ? { retries: options.retries } : options.retries;
- options.stale = Math.max(options.stale || 0, 2000);
- options.update = options.update == null ? options.stale / 2 : options.update || 0;
- options.update = Math.max(Math.min(options.update, options.stale / 2), 1000);
- compromised = compromised || function (err) { throw err; };
-
- // Resolve to a canonical file path
- canonicalPath(file, options, function (err, file) {
- var operation;
-
- if (err) {
- return callback(err);
+ } else {
+ ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
+ ' <' + (+M + 1) + '.0.0'
+ }
+ } else {
+ debug('no pr')
+ if (M === '0') {
+ if (m === '0') {
+ ret = '>=' + M + '.' + m + '.' + p +
+ ' <' + M + '.' + m + '.' + (+p + 1)
+ } else {
+ ret = '>=' + M + '.' + m + '.' + p +
+ ' <' + M + '.' + (+m + 1) + '.0'
}
-
- // Attempt to acquire the lock
- operation = retry.operation(options.retries);
- operation.attempt(function () {
- acquireLock(file, options, function (err) {
- var lock;
-
- if (operation.retry(err)) {
- return;
- }
-
- if (err) {
- return callback(operation.mainError());
- }
-
- // We now own the lock
- locks[file] = lock = {
- options: options,
- compromised: compromised,
- lastUpdate: Date.now(),
- };
-
- // We must keep the lock fresh to avoid staleness
- updateLock(file, options);
-
- callback(null, function (releasedCallback) {
- if (lock.released) {
- return releasedCallback && releasedCallback(errcode('Lock is already released', 'ERELEASED'));
- }
-
- // Not necessary to use realpath twice when unlocking
- unlock(file, extend({}, options, { realpath: false }), releasedCallback);
- });
- });
- });
- });
-}
-
-function unlock(file, options, callback) {
- if (typeof options === 'function') {
- callback = options;
- options = null;
+ } else {
+ ret = '>=' + M + '.' + m + '.' + p +
+ ' <' + (+M + 1) + '.0.0'
+ }
}
- options = extend({
- fs: fs,
- realpath: true,
- }, options);
-
- callback = callback || function () {};
-
- // Resolve to a canonical file path
- canonicalPath(file, options, function (err, file) {
- var lock;
-
- if (err) {
- return callback(err);
- }
-
- // Skip if the lock is not acquired
- lock = locks[file];
- if (!lock) {
- return callback(errcode('Lock is not acquired/owned by you', 'ENOTACQUIRED'));
- }
-
- lock.updateTimeout && clearTimeout(lock.updateTimeout); // Cancel lock mtime update
- lock.released = true; // Signal the lock has been released
- delete locks[file]; // Delete from locks
-
- removeLock(file, options, callback);
- });
+ debug('caret return', ret)
+ return ret
+ })
}
-function lockSync(file, options, compromised) {
- var err;
- var release;
-
- if (typeof options === 'function') {
- compromised = options;
- options = null;
- }
-
- options = options || {};
- options.fs = syncFs(options.fs || fs);
- options.retries = options.retries || 0;
- options.retries = typeof options.retries === 'number' ? { retries: options.retries } : options.retries;
-
- // Retries are not allowed because it requires the flow to be sync
- if (options.retries.retries) {
- throw errcode('Cannot use retries with the sync api', 'ESYNC');
- }
-
- lock(file, options, compromised, function (_err, _release) {
- err = _err;
- release = _release;
- });
-
- if (err) {
- throw err;
- }
-
- return release;
+function replaceXRanges (comp, options) {
+ debug('replaceXRanges', comp, options)
+ return comp.split(/\s+/).map(function (comp) {
+ return replaceXRange(comp, options)
+ }).join(' ')
}
-function unlockSync(file, options) {
- var err;
-
- options = options || {};
- options.fs = syncFs(options.fs || fs);
-
- unlock(file, options, function (_err) {
- err = _err;
- });
-
- if (err) {
- throw err;
- }
-}
+function replaceXRange (comp, options) {
+ comp = comp.trim()
+ var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]
+ return comp.replace(r, function (ret, gtlt, M, m, p, pr) {
+ debug('xRange', comp, ret, gtlt, M, m, p, pr)
+ var xM = isX(M)
+ var xm = xM || isX(m)
+ var xp = xm || isX(p)
+ var anyX = xp
-function check(file, options, callback) {
- if (typeof options === 'function') {
- callback = options;
- options = null;
+ if (gtlt === '=' && anyX) {
+ gtlt = ''
}
- options = extend({
- stale: 10000,
- realpath: true,
- fs: fs,
- }, options);
+ // if we're including prereleases in the match, then we need
+ // to fix this to -0, the lowest possible prerelease value
+ pr = options.includePrerelease ? '-0' : ''
- options.stale = Math.max(options.stale || 0, 2000);
+ if (xM) {
+ if (gtlt === '>' || gtlt === '<') {
+ // nothing is allowed
+ ret = '<0.0.0-0'
+ } else {
+ // nothing is forbidden
+ ret = '*'
+ }
+ } else if (gtlt && anyX) {
+ // we know patch is an x, because we have any x at all.
+ // replace X with 0
+ if (xm) {
+ m = 0
+ }
+ p = 0
- // Resolve to a canonical file path
- canonicalPath(file, options, function (err, file) {
- if (err) {
- return callback(err);
- }
-
- // Check if lockfile exists
- options.fs.stat(getLockFile(file), function (err, stat) {
- if (err) {
- // if does not exist, file is not locked. Otherwise, callback with error
- return (err.code === 'ENOENT') ? callback(null, false) : callback(err);
- }
-
- if (options.stale <= 0) { return callback(null, true); }
-
- // Otherwise, check if lock is stale by analyzing the file mtime
- return callback(null, !isLockStale(stat, options));
- });
- });
-}
-
-function checkSync(file, options) {
- var err;
- var locked;
-
- options = options || {};
- options.fs = syncFs(options.fs || fs);
-
- check(file, options, function (_err, _locked) {
- err = _err;
- locked = _locked;
- });
-
- if (err) {
- throw err;
- }
-
- return locked;
-}
-
-
-// Remove acquired locks on exit
-/* istanbul ignore next */
-process.on('exit', function () {
- Object.keys(locks).forEach(function (file) {
- try { locks[file].options.fs.rmdirSync(getLockFile(file)); } catch (e) { /* empty */ }
- });
-});
-
-module.exports = lock;
-module.exports.lock = lock;
-module.exports.unlock = unlock;
-module.exports.lockSync = lockSync;
-module.exports.unlockSync = unlockSync;
-module.exports.check = check;
-module.exports.checkSync = checkSync;
-
-
-/***/ }),
-/* 492 */,
-/* 493 */,
-/* 494 */,
-/* 495 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.cleanup = void 0;
-const fs_extra_1 = __importDefault(__webpack_require__(226));
-const path_1 = __importDefault(__webpack_require__(622));
-const core = __importStar(__webpack_require__(470));
-const io = __importStar(__webpack_require__(1));
-const git_command_manager_1 = __webpack_require__(289);
-const git_auth_helper_1 = __webpack_require__(287);
-const github_action_context_1 = __webpack_require__(821);
-const settings_1 = __webpack_require__(648);
-function cleanup(repositoryPath) {
- return __awaiter(this, void 0, void 0, function* () {
- if (!repositoryPath ||
- !fs_extra_1.default.existsSync(path_1.default.join(repositoryPath, '.git', 'config'))) {
- return;
- }
- let git;
- try {
- git = yield git_command_manager_1.createCommandManager(repositoryPath);
- }
- catch (_a) {
- return;
- }
- try {
- const context = new github_action_context_1.GithubActionContext();
- let settings = new settings_1.Settings(context);
- // Remove auth
- const authHelper = new git_auth_helper_1.GitAuthHelper(git, settings);
- yield authHelper.removeAuth();
- yield io.rmRF(repositoryPath);
- }
- catch (error) {
- core.setFailed(error.message);
- }
- });
-}
-exports.cleanup = cleanup;
-
-
-/***/ }),
-/* 496 */,
-/* 497 */,
-/* 498 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.default = void 0;
-
-var _crypto = _interopRequireDefault(__webpack_require__(417));
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function sha1(bytes) {
- if (Array.isArray(bytes)) {
- bytes = Buffer.from(bytes);
- } else if (typeof bytes === 'string') {
- bytes = Buffer.from(bytes, 'utf8');
- }
-
- return _crypto.default.createHash('sha1').update(bytes).digest();
-}
-
-var _default = sha1;
-exports.default = _default;
-
-/***/ }),
-/* 499 */,
-/* 500 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-"use strict";
-
-
-const fs = __webpack_require__(598)
-const path = __webpack_require__(622)
-const copy = __webpack_require__(774).copy
-const remove = __webpack_require__(723).remove
-const mkdirp = __webpack_require__(727).mkdirp
-const pathExists = __webpack_require__(322).pathExists
-const stat = __webpack_require__(127)
-
-function move (src, dest, opts, cb) {
- if (typeof opts === 'function') {
- cb = opts
- opts = {}
- }
-
- const overwrite = opts.overwrite || opts.clobber || false
-
- stat.checkPaths(src, dest, 'move', (err, stats) => {
- if (err) return cb(err)
- const { srcStat } = stats
- stat.checkParentPaths(src, srcStat, dest, 'move', err => {
- if (err) return cb(err)
- mkdirp(path.dirname(dest), err => {
- if (err) return cb(err)
- return doRename(src, dest, overwrite, cb)
- })
- })
- })
-}
-
-function doRename (src, dest, overwrite, cb) {
- if (overwrite) {
- return remove(dest, err => {
- if (err) return cb(err)
- return rename(src, dest, overwrite, cb)
- })
- }
- pathExists(dest, (err, destExists) => {
- if (err) return cb(err)
- if (destExists) return cb(new Error('dest already exists.'))
- return rename(src, dest, overwrite, cb)
- })
-}
-
-function rename (src, dest, overwrite, cb) {
- fs.rename(src, dest, err => {
- if (!err) return cb()
- if (err.code !== 'EXDEV') return cb(err)
- return moveAcrossDevice(src, dest, overwrite, cb)
- })
-}
-
-function moveAcrossDevice (src, dest, overwrite, cb) {
- const opts = {
- overwrite,
- errorOnExist: true
- }
- copy(src, dest, opts, err => {
- if (err) return cb(err)
- return remove(src, cb)
- })
-}
-
-module.exports = move
-
-
-/***/ }),
-/* 501 */,
-/* 502 */,
-/* 503 */,
-/* 504 */,
-/* 505 */,
-/* 506 */,
-/* 507 */,
-/* 508 */,
-/* 509 */,
-/* 510 */
-/***/ (function(module) {
-
-module.exports = addHook
-
-function addHook (state, kind, name, hook) {
- var orig = hook
- if (!state.registry[name]) {
- state.registry[name] = []
- }
-
- if (kind === 'before') {
- hook = function (method, options) {
- return Promise.resolve()
- .then(orig.bind(null, options))
- .then(method.bind(null, options))
- }
- }
-
- if (kind === 'after') {
- hook = function (method, options) {
- var result
- return Promise.resolve()
- .then(method.bind(null, options))
- .then(function (result_) {
- result = result_
- return orig(result, options)
- })
- .then(function () {
- return result
- })
- }
- }
-
- if (kind === 'error') {
- hook = function (method, options) {
- return Promise.resolve()
- .then(method.bind(null, options))
- .catch(function (error) {
- return orig(error, options)
- })
- }
- }
-
- state.registry[name].push({
- hook: hook,
- orig: orig
- })
-}
-
-
-/***/ }),
-/* 511 */,
-/* 512 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-"use strict";
-
-const path = __webpack_require__(622);
-const pathKey = __webpack_require__(39);
-
-module.exports = opts => {
- opts = Object.assign({
- cwd: process.cwd(),
- path: process.env[pathKey()]
- }, opts);
-
- let prev;
- let pth = path.resolve(opts.cwd);
- const ret = [];
-
- while (prev !== pth) {
- ret.push(path.join(pth, 'node_modules/.bin'));
- prev = pth;
- pth = path.resolve(pth, '..');
- }
-
- // ensure the running `node` binary is used
- ret.push(path.dirname(process.execPath));
-
- return ret.concat(opts.path).join(path.delimiter);
-};
-
-module.exports.env = opts => {
- opts = Object.assign({
- env: process.env
- }, opts);
-
- const env = Object.assign({}, opts.env);
- const path = pathKey({env});
-
- opts.path = env[path];
- env[path] = module.exports(opts);
-
- return env;
-};
-
-
-/***/ }),
-/* 513 */,
-/* 514 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-"use strict";
-
-module.exports = function(Promise, PromiseArray, apiRejection, debug) {
-var util = __webpack_require__(248);
-var tryCatch = util.tryCatch;
-var errorObj = util.errorObj;
-var async = Promise._async;
-
-Promise.prototype["break"] = Promise.prototype.cancel = function() {
- if (!debug.cancellation()) return this._warn("cancellation is disabled");
-
- var promise = this;
- var child = promise;
- while (promise._isCancellable()) {
- if (!promise._cancelBy(child)) {
- if (child._isFollowing()) {
- child._followee().cancel();
- } else {
- child._cancelBranched();
- }
- break;
- }
-
- var parent = promise._cancellationParent;
- if (parent == null || !parent._isCancellable()) {
- if (promise._isFollowing()) {
- promise._followee().cancel();
- } else {
- promise._cancelBranched();
- }
- break;
- } else {
- if (promise._isFollowing()) promise._followee().cancel();
- promise._setWillBeCancelled();
- child = promise;
- promise = parent;
- }
- }
-};
-
-Promise.prototype._branchHasCancelled = function() {
- this._branchesRemainingToCancel--;
-};
-
-Promise.prototype._enoughBranchesHaveCancelled = function() {
- return this._branchesRemainingToCancel === undefined ||
- this._branchesRemainingToCancel <= 0;
-};
-
-Promise.prototype._cancelBy = function(canceller) {
- if (canceller === this) {
- this._branchesRemainingToCancel = 0;
- this._invokeOnCancel();
- return true;
- } else {
- this._branchHasCancelled();
- if (this._enoughBranchesHaveCancelled()) {
- this._invokeOnCancel();
- return true;
- }
- }
- return false;
-};
-
-Promise.prototype._cancelBranched = function() {
- if (this._enoughBranchesHaveCancelled()) {
- this._cancel();
- }
-};
-
-Promise.prototype._cancel = function() {
- if (!this._isCancellable()) return;
- this._setCancelled();
- async.invoke(this._cancelPromises, this, undefined);
-};
-
-Promise.prototype._cancelPromises = function() {
- if (this._length() > 0) this._settlePromises();
-};
-
-Promise.prototype._unsetOnCancel = function() {
- this._onCancelField = undefined;
-};
-
-Promise.prototype._isCancellable = function() {
- return this.isPending() && !this._isCancelled();
-};
-
-Promise.prototype.isCancellable = function() {
- return this.isPending() && !this.isCancelled();
-};
-
-Promise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) {
- if (util.isArray(onCancelCallback)) {
- for (var i = 0; i < onCancelCallback.length; ++i) {
- this._doInvokeOnCancel(onCancelCallback[i], internalOnly);
- }
- } else if (onCancelCallback !== undefined) {
- if (typeof onCancelCallback === "function") {
- if (!internalOnly) {
- var e = tryCatch(onCancelCallback).call(this._boundValue());
- if (e === errorObj) {
- this._attachExtraTrace(e.e);
- async.throwLater(e.e);
- }
- }
- } else {
- onCancelCallback._resultCancelled(this);
- }
- }
-};
-
-Promise.prototype._invokeOnCancel = function() {
- var onCancelCallback = this._onCancel();
- this._unsetOnCancel();
- async.invoke(this._doInvokeOnCancel, this, onCancelCallback);
-};
-
-Promise.prototype._invokeInternalOnCancel = function() {
- if (this._isCancellable()) {
- this._doInvokeOnCancel(this._onCancel(), true);
- this._unsetOnCancel();
- }
-};
-
-Promise.prototype._resultCancelled = function() {
- this.cancel();
-};
-
-};
-
-
-/***/ }),
-/* 515 */,
-/* 516 */,
-/* 517 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-"use strict";
-
-
-const u = __webpack_require__(676).fromCallback
-const fs = __webpack_require__(598)
-const path = __webpack_require__(622)
-const mkdir = __webpack_require__(727)
-const pathExists = __webpack_require__(322).pathExists
-
-function outputFile (file, data, encoding, callback) {
- if (typeof encoding === 'function') {
- callback = encoding
- encoding = 'utf8'
- }
-
- const dir = path.dirname(file)
- pathExists(dir, (err, itDoes) => {
- if (err) return callback(err)
- if (itDoes) return fs.writeFile(file, data, encoding, callback)
-
- mkdir.mkdirs(dir, err => {
- if (err) return callback(err)
-
- fs.writeFile(file, data, encoding, callback)
- })
- })
-}
-
-function outputFileSync (file, ...args) {
- const dir = path.dirname(file)
- if (fs.existsSync(dir)) {
- return fs.writeFileSync(file, ...args)
- }
- mkdir.mkdirsSync(dir)
- fs.writeFileSync(file, ...args)
-}
-
-module.exports = {
- outputFile: u(outputFile),
- outputFileSync
-}
-
-
-/***/ }),
-/* 518 */,
-/* 519 */,
-/* 520 */,
-/* 521 */,
-/* 522 */,
-/* 523 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-var register = __webpack_require__(363)
-var addHook = __webpack_require__(510)
-var removeHook = __webpack_require__(763)
-
-// bind with array of arguments: https://stackoverflow.com/a/21792913
-var bind = Function.bind
-var bindable = bind.bind(bind)
-
-function bindApi (hook, state, name) {
- var removeHookRef = bindable(removeHook, null).apply(null, name ? [state, name] : [state])
- hook.api = { remove: removeHookRef }
- hook.remove = removeHookRef
-
- ;['before', 'error', 'after', 'wrap'].forEach(function (kind) {
- var args = name ? [state, kind, name] : [state, kind]
- hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args)
- })
-}
-
-function HookSingular () {
- var singularHookName = 'h'
- var singularHookState = {
- registry: {}
- }
- var singularHook = register.bind(null, singularHookState, singularHookName)
- bindApi(singularHook, singularHookState, singularHookName)
- return singularHook
-}
-
-function HookCollection () {
- var state = {
- registry: {}
- }
-
- var hook = register.bind(null, state)
- bindApi(hook, state)
-
- return hook
-}
-
-var collectionHookDeprecationMessageDisplayed = false
-function Hook () {
- if (!collectionHookDeprecationMessageDisplayed) {
- console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4')
- collectionHookDeprecationMessageDisplayed = true
- }
- return HookCollection()
-}
-
-Hook.Singular = HookSingular.bind()
-Hook.Collection = HookCollection.bind()
-
-module.exports = Hook
-// expose constructors as a named property for TypeScript
-module.exports.Hook = Hook
-module.exports.Singular = Hook.Singular
-module.exports.Collection = Hook.Collection
-
-
-/***/ }),
-/* 524 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, '__esModule', { value: true });
-
-function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
-
-var Bottleneck = _interopDefault(__webpack_require__(972));
-
-// @ts-ignore
-async function errorRequest(octokit, state, error, options) {
- if (!error.request || !error.request.request) {
- // address https://github.com/octokit/plugin-retry.js/issues/8
- throw error;
- } // retry all >= 400 && not doNotRetry
-
-
- if (error.status >= 400 && !state.doNotRetry.includes(error.status)) {
- const retries = options.request.retries != null ? options.request.retries : state.retries;
- const retryAfter = Math.pow((options.request.retryCount || 0) + 1, 2);
- throw octokit.retry.retryRequest(error, retries, retryAfter);
- } // Maybe eventually there will be more cases here
-
-
- throw error;
-}
-
-// @ts-ignore
-
-async function wrapRequest(state, request, options) {
- const limiter = new Bottleneck(); // @ts-ignore
-
- limiter.on("failed", function (error, info) {
- const maxRetries = ~~error.request.request.retries;
- const after = ~~error.request.request.retryAfter;
- options.request.retryCount = info.retryCount + 1;
-
- if (maxRetries > info.retryCount) {
- // Returning a number instructs the limiter to retry
- // the request after that number of milliseconds have passed
- return after * state.retryAfterBaseValue;
- }
- });
- return limiter.schedule(request, options);
-}
-
-const VERSION = "3.0.1";
-function retry(octokit, octokitOptions = {}) {
- const state = Object.assign({
- enabled: true,
- retryAfterBaseValue: 1000,
- doNotRetry: [400, 401, 403, 404, 422],
- retries: 3
- }, octokitOptions.retry);
- octokit.retry = {
- retryRequest: (error, retries, retryAfter) => {
- error.request.request = Object.assign({}, error.request.request, {
- retries: retries,
- retryAfter: retryAfter
- });
- return error;
- }
- };
-
- if (!state.enabled) {
- return;
- }
-
- octokit.hook.error("request", errorRequest.bind(null, octokit, state));
- octokit.hook.wrap("request", wrapRequest.bind(null, state));
-}
-retry.VERSION = VERSION;
-
-exports.VERSION = VERSION;
-exports.retry = retry;
-//# sourceMappingURL=index.js.map
-
-
-/***/ }),
-/* 525 */,
-/* 526 */,
-/* 527 */,
-/* 528 */,
-/* 529 */,
-/* 530 */,
-/* 531 */,
-/* 532 */,
-/* 533 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
-
-"use strict";
-
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
- result["default"] = mod;
- return result;
-};
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const core = __importStar(__webpack_require__(470));
-const io = __importStar(__webpack_require__(1));
-const fs = __importStar(__webpack_require__(747));
-const os = __importStar(__webpack_require__(87));
-const path = __importStar(__webpack_require__(622));
-const httpm = __importStar(__webpack_require__(539));
-const semver = __importStar(__webpack_require__(280));
-const stream = __importStar(__webpack_require__(413));
-const util = __importStar(__webpack_require__(669));
-const v4_1 = __importDefault(__webpack_require__(951));
-const exec_1 = __webpack_require__(986);
-const assert_1 = __webpack_require__(357);
-const retry_helper_1 = __webpack_require__(979);
-class HTTPError extends Error {
- constructor(httpStatusCode) {
- super(`Unexpected HTTP response: ${httpStatusCode}`);
- this.httpStatusCode = httpStatusCode;
- Object.setPrototypeOf(this, new.target.prototype);
- }
-}
-exports.HTTPError = HTTPError;
-const IS_WINDOWS = process.platform === 'win32';
-const userAgent = 'actions/tool-cache';
-/**
- * Download a tool from an url and stream it into a file
- *
- * @param url url of tool to download
- * @param dest path to download tool
- * @returns path to downloaded tool
- */
-function downloadTool(url, dest) {
- return __awaiter(this, void 0, void 0, function* () {
- dest = dest || path.join(_getTempDirectory(), v4_1.default());
- yield io.mkdirP(path.dirname(dest));
- core.debug(`Downloading ${url}`);
- core.debug(`Destination ${dest}`);
- const maxAttempts = 3;
- const minSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS', 10);
- const maxSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS', 20);
- const retryHelper = new retry_helper_1.RetryHelper(maxAttempts, minSeconds, maxSeconds);
- return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () {
- return yield downloadToolAttempt(url, dest || '');
- }), (err) => {
- if (err instanceof HTTPError && err.httpStatusCode) {
- // Don't retry anything less than 500, except 408 Request Timeout and 429 Too Many Requests
- if (err.httpStatusCode < 500 &&
- err.httpStatusCode !== 408 &&
- err.httpStatusCode !== 429) {
- return false;
- }
- }
- // Otherwise retry
- return true;
- });
- });
-}
-exports.downloadTool = downloadTool;
-function downloadToolAttempt(url, dest) {
- return __awaiter(this, void 0, void 0, function* () {
- if (fs.existsSync(dest)) {
- throw new Error(`Destination file path ${dest} already exists`);
- }
- // Get the response headers
- const http = new httpm.HttpClient(userAgent, [], {
- allowRetries: false
- });
- const response = yield http.get(url);
- if (response.message.statusCode !== 200) {
- const err = new HTTPError(response.message.statusCode);
- core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`);
- throw err;
- }
- // Download the response body
- const pipeline = util.promisify(stream.pipeline);
- const responseMessageFactory = _getGlobal('TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY', () => response.message);
- const readStream = responseMessageFactory();
- let succeeded = false;
- try {
- yield pipeline(readStream, fs.createWriteStream(dest));
- core.debug('download complete');
- succeeded = true;
- return dest;
- }
- finally {
- // Error, delete dest before retry
- if (!succeeded) {
- core.debug('download failed');
- try {
- yield io.rmRF(dest);
- }
- catch (err) {
- core.debug(`Failed to delete '${dest}'. ${err.message}`);
- }
- }
- }
- });
-}
-/**
- * Extract a .7z file
- *
- * @param file path to the .7z file
- * @param dest destination directory. Optional.
- * @param _7zPath path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this
- * problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will
- * gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is
- * bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line
- * interface, it is smaller than the full command line interface, and it does support long paths. At the
- * time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website.
- * Be sure to check the current license agreement. If 7zr.exe is bundled with your action, then the path
- * to 7zr.exe can be pass to this function.
- * @returns path to the destination directory
- */
-function extract7z(file, dest, _7zPath) {
- return __awaiter(this, void 0, void 0, function* () {
- assert_1.ok(IS_WINDOWS, 'extract7z() not supported on current OS');
- assert_1.ok(file, 'parameter "file" is required');
- dest = yield _createExtractFolder(dest);
- const originalCwd = process.cwd();
- process.chdir(dest);
- if (_7zPath) {
- try {
- const logLevel = core.isDebug() ? '-bb1' : '-bb0';
- const args = [
- 'x',
- logLevel,
- '-bd',
- '-sccUTF-8',
- file
- ];
- const options = {
- silent: true
- };
- yield exec_1.exec(`"${_7zPath}"`, args, options);
- }
- finally {
- process.chdir(originalCwd);
- }
- }
- else {
- const escapedScript = path
- .join(__dirname, '..', 'scripts', 'Invoke-7zdec.ps1')
- .replace(/'/g, "''")
- .replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines
- const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, '');
- const escapedTarget = dest.replace(/'/g, "''").replace(/"|\n|\r/g, '');
- const command = `& '${escapedScript}' -Source '${escapedFile}' -Target '${escapedTarget}'`;
- const args = [
- '-NoLogo',
- '-Sta',
- '-NoProfile',
- '-NonInteractive',
- '-ExecutionPolicy',
- 'Unrestricted',
- '-Command',
- command
- ];
- const options = {
- silent: true
- };
- try {
- const powershellPath = yield io.which('powershell', true);
- yield exec_1.exec(`"${powershellPath}"`, args, options);
- }
- finally {
- process.chdir(originalCwd);
- }
- }
- return dest;
- });
-}
-exports.extract7z = extract7z;
-/**
- * Extract a compressed tar archive
- *
- * @param file path to the tar
- * @param dest destination directory. Optional.
- * @param flags flags for the tar command to use for extraction. Defaults to 'xz' (extracting gzipped tars). Optional.
- * @returns path to the destination directory
- */
-function extractTar(file, dest, flags = 'xz') {
- return __awaiter(this, void 0, void 0, function* () {
- if (!file) {
- throw new Error("parameter 'file' is required");
- }
- // Create dest
- dest = yield _createExtractFolder(dest);
- // Determine whether GNU tar
- core.debug('Checking tar --version');
- let versionOutput = '';
- yield exec_1.exec('tar --version', [], {
- ignoreReturnCode: true,
- silent: true,
- listeners: {
- stdout: (data) => (versionOutput += data.toString()),
- stderr: (data) => (versionOutput += data.toString())
- }
- });
- core.debug(versionOutput.trim());
- const isGnuTar = versionOutput.toUpperCase().includes('GNU TAR');
- // Initialize args
- const args = [flags];
- if (core.isDebug() && !flags.includes('v')) {
- args.push('-v');
- }
- let destArg = dest;
- let fileArg = file;
- if (IS_WINDOWS && isGnuTar) {
- args.push('--force-local');
- destArg = dest.replace(/\\/g, '/');
- // Technically only the dest needs to have `/` but for aesthetic consistency
- // convert slashes in the file arg too.
- fileArg = file.replace(/\\/g, '/');
- }
- if (isGnuTar) {
- // Suppress warnings when using GNU tar to extract archives created by BSD tar
- args.push('--warning=no-unknown-keyword');
- }
- args.push('-C', destArg, '-f', fileArg);
- yield exec_1.exec(`tar`, args);
- return dest;
- });
-}
-exports.extractTar = extractTar;
-/**
- * Extract a zip
- *
- * @param file path to the zip
- * @param dest destination directory. Optional.
- * @returns path to the destination directory
- */
-function extractZip(file, dest) {
- return __awaiter(this, void 0, void 0, function* () {
- if (!file) {
- throw new Error("parameter 'file' is required");
- }
- dest = yield _createExtractFolder(dest);
- if (IS_WINDOWS) {
- yield extractZipWin(file, dest);
- }
- else {
- yield extractZipNix(file, dest);
- }
- return dest;
- });
-}
-exports.extractZip = extractZip;
-function extractZipWin(file, dest) {
- return __awaiter(this, void 0, void 0, function* () {
- // build the powershell command
- const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines
- const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, '');
- const command = `$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}')`;
- // run powershell
- const powershellPath = yield io.which('powershell', true);
- const args = [
- '-NoLogo',
- '-Sta',
- '-NoProfile',
- '-NonInteractive',
- '-ExecutionPolicy',
- 'Unrestricted',
- '-Command',
- command
- ];
- yield exec_1.exec(`"${powershellPath}"`, args);
- });
-}
-function extractZipNix(file, dest) {
- return __awaiter(this, void 0, void 0, function* () {
- const unzipPath = yield io.which('unzip', true);
- const args = [file];
- if (!core.isDebug()) {
- args.unshift('-q');
- }
- yield exec_1.exec(`"${unzipPath}"`, args, { cwd: dest });
- });
-}
-/**
- * Caches a directory and installs it into the tool cacheDir
- *
- * @param sourceDir the directory to cache into tools
- * @param tool tool name
- * @param version version of the tool. semver format
- * @param arch architecture of the tool. Optional. Defaults to machine architecture
- */
-function cacheDir(sourceDir, tool, version, arch) {
- return __awaiter(this, void 0, void 0, function* () {
- version = semver.clean(version) || version;
- arch = arch || os.arch();
- core.debug(`Caching tool ${tool} ${version} ${arch}`);
- core.debug(`source dir: ${sourceDir}`);
- if (!fs.statSync(sourceDir).isDirectory()) {
- throw new Error('sourceDir is not a directory');
- }
- // Create the tool dir
- const destPath = yield _createToolPath(tool, version, arch);
- // copy each child item. do not move. move can fail on Windows
- // due to anti-virus software having an open handle on a file.
- for (const itemName of fs.readdirSync(sourceDir)) {
- const s = path.join(sourceDir, itemName);
- yield io.cp(s, destPath, { recursive: true });
- }
- // write .complete
- _completeToolPath(tool, version, arch);
- return destPath;
- });
-}
-exports.cacheDir = cacheDir;
-/**
- * Caches a downloaded file (GUID) and installs it
- * into the tool cache with a given targetName
- *
- * @param sourceFile the file to cache into tools. Typically a result of downloadTool which is a guid.
- * @param targetFile the name of the file name in the tools directory
- * @param tool tool name
- * @param version version of the tool. semver format
- * @param arch architecture of the tool. Optional. Defaults to machine architecture
- */
-function cacheFile(sourceFile, targetFile, tool, version, arch) {
- return __awaiter(this, void 0, void 0, function* () {
- version = semver.clean(version) || version;
- arch = arch || os.arch();
- core.debug(`Caching tool ${tool} ${version} ${arch}`);
- core.debug(`source file: ${sourceFile}`);
- if (!fs.statSync(sourceFile).isFile()) {
- throw new Error('sourceFile is not a file');
- }
- // create the tool dir
- const destFolder = yield _createToolPath(tool, version, arch);
- // copy instead of move. move can fail on Windows due to
- // anti-virus software having an open handle on a file.
- const destPath = path.join(destFolder, targetFile);
- core.debug(`destination file ${destPath}`);
- yield io.cp(sourceFile, destPath);
- // write .complete
- _completeToolPath(tool, version, arch);
- return destFolder;
- });
-}
-exports.cacheFile = cacheFile;
-/**
- * Finds the path to a tool version in the local installed tool cache
- *
- * @param toolName name of the tool
- * @param versionSpec version of the tool
- * @param arch optional arch. defaults to arch of computer
- */
-function find(toolName, versionSpec, arch) {
- if (!toolName) {
- throw new Error('toolName parameter is required');
- }
- if (!versionSpec) {
- throw new Error('versionSpec parameter is required');
- }
- arch = arch || os.arch();
- // attempt to resolve an explicit version
- if (!_isExplicitVersion(versionSpec)) {
- const localVersions = findAllVersions(toolName, arch);
- const match = _evaluateVersions(localVersions, versionSpec);
- versionSpec = match;
- }
- // check for the explicit version in the cache
- let toolPath = '';
- if (versionSpec) {
- versionSpec = semver.clean(versionSpec) || '';
- const cachePath = path.join(_getCacheDirectory(), toolName, versionSpec, arch);
- core.debug(`checking cache: ${cachePath}`);
- if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) {
- core.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch}`);
- toolPath = cachePath;
- }
- else {
- core.debug('not found');
- }
- }
- return toolPath;
-}
-exports.find = find;
-/**
- * Finds the paths to all versions of a tool that are installed in the local tool cache
- *
- * @param toolName name of the tool
- * @param arch optional arch. defaults to arch of computer
- */
-function findAllVersions(toolName, arch) {
- const versions = [];
- arch = arch || os.arch();
- const toolPath = path.join(_getCacheDirectory(), toolName);
- if (fs.existsSync(toolPath)) {
- const children = fs.readdirSync(toolPath);
- for (const child of children) {
- if (_isExplicitVersion(child)) {
- const fullPath = path.join(toolPath, child, arch || '');
- if (fs.existsSync(fullPath) && fs.existsSync(`${fullPath}.complete`)) {
- versions.push(child);
- }
- }
- }
- }
- return versions;
-}
-exports.findAllVersions = findAllVersions;
-function _createExtractFolder(dest) {
- return __awaiter(this, void 0, void 0, function* () {
- if (!dest) {
- // create a temp dir
- dest = path.join(_getTempDirectory(), v4_1.default());
- }
- yield io.mkdirP(dest);
- return dest;
- });
-}
-function _createToolPath(tool, version, arch) {
- return __awaiter(this, void 0, void 0, function* () {
- const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || '');
- core.debug(`destination ${folderPath}`);
- const markerPath = `${folderPath}.complete`;
- yield io.rmRF(folderPath);
- yield io.rmRF(markerPath);
- yield io.mkdirP(folderPath);
- return folderPath;
- });
-}
-function _completeToolPath(tool, version, arch) {
- const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || '');
- const markerPath = `${folderPath}.complete`;
- fs.writeFileSync(markerPath, '');
- core.debug('finished caching tool');
-}
-function _isExplicitVersion(versionSpec) {
- const c = semver.clean(versionSpec) || '';
- core.debug(`isExplicit: ${c}`);
- const valid = semver.valid(c) != null;
- core.debug(`explicit? ${valid}`);
- return valid;
-}
-function _evaluateVersions(versions, versionSpec) {
- let version = '';
- core.debug(`evaluating ${versions.length} versions`);
- versions = versions.sort((a, b) => {
- if (semver.gt(a, b)) {
- return 1;
- }
- return -1;
- });
- for (let i = versions.length - 1; i >= 0; i--) {
- const potential = versions[i];
- const satisfied = semver.satisfies(potential, versionSpec);
- if (satisfied) {
- version = potential;
- break;
- }
- }
- if (version) {
- core.debug(`matched: ${version}`);
- }
- else {
- core.debug('match not found');
- }
- return version;
-}
-/**
- * Gets RUNNER_TOOL_CACHE
- */
-function _getCacheDirectory() {
- const cacheDirectory = process.env['RUNNER_TOOL_CACHE'] || '';
- assert_1.ok(cacheDirectory, 'Expected RUNNER_TOOL_CACHE to be defined');
- return cacheDirectory;
-}
-/**
- * Gets RUNNER_TEMP
- */
-function _getTempDirectory() {
- const tempDirectory = process.env['RUNNER_TEMP'] || '';
- assert_1.ok(tempDirectory, 'Expected RUNNER_TEMP to be defined');
- return tempDirectory;
-}
-/**
- * Gets a global variable
- */
-function _getGlobal(key, defaultValue) {
- /* eslint-disable @typescript-eslint/no-explicit-any */
- const value = global[key];
- /* eslint-enable @typescript-eslint/no-explicit-any */
- return value !== undefined ? value : defaultValue;
-}
-//# sourceMappingURL=tool-cache.js.map
-
-/***/ }),
-/* 534 */,
-/* 535 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-"use strict";
-
-
-module.exports = __webpack_require__(827);
-
-
-/***/ }),
-/* 536 */,
-/* 537 */,
-/* 538 */,
-/* 539 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-const url = __webpack_require__(835);
-const http = __webpack_require__(605);
-const https = __webpack_require__(211);
-const pm = __webpack_require__(950);
-let tunnel;
-var HttpCodes;
-(function (HttpCodes) {
- HttpCodes[HttpCodes["OK"] = 200] = "OK";
- HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices";
- HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently";
- HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved";
- HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther";
- HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified";
- HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy";
- HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy";
- HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect";
- HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect";
- HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest";
- HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized";
- HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired";
- HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden";
- HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound";
- HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed";
- HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable";
- HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
- HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout";
- HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict";
- HttpCodes[HttpCodes["Gone"] = 410] = "Gone";
- HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests";
- HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError";
- HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented";
- HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway";
- HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable";
- HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout";
-})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));
-var Headers;
-(function (Headers) {
- Headers["Accept"] = "accept";
- Headers["ContentType"] = "content-type";
-})(Headers = exports.Headers || (exports.Headers = {}));
-var MediaTypes;
-(function (MediaTypes) {
- MediaTypes["ApplicationJson"] = "application/json";
-})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));
-/**
- * Returns the proxy URL, depending upon the supplied url and proxy environment variables.
- * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
- */
-function getProxyUrl(serverUrl) {
- let proxyUrl = pm.getProxyUrl(url.parse(serverUrl));
- return proxyUrl ? proxyUrl.href : '';
-}
-exports.getProxyUrl = getProxyUrl;
-const HttpRedirectCodes = [
- HttpCodes.MovedPermanently,
- HttpCodes.ResourceMoved,
- HttpCodes.SeeOther,
- HttpCodes.TemporaryRedirect,
- HttpCodes.PermanentRedirect
-];
-const HttpResponseRetryCodes = [
- HttpCodes.BadGateway,
- HttpCodes.ServiceUnavailable,
- HttpCodes.GatewayTimeout
-];
-const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];
-const ExponentialBackoffCeiling = 10;
-const ExponentialBackoffTimeSlice = 5;
-class HttpClientResponse {
- constructor(message) {
- this.message = message;
- }
- readBody() {
- return new Promise(async (resolve, reject) => {
- let output = Buffer.alloc(0);
- this.message.on('data', (chunk) => {
- output = Buffer.concat([output, chunk]);
- });
- this.message.on('end', () => {
- resolve(output.toString());
- });
- });
- }
-}
-exports.HttpClientResponse = HttpClientResponse;
-function isHttps(requestUrl) {
- let parsedUrl = url.parse(requestUrl);
- return parsedUrl.protocol === 'https:';
-}
-exports.isHttps = isHttps;
-class HttpClient {
- constructor(userAgent, handlers, requestOptions) {
- this._ignoreSslError = false;
- this._allowRedirects = true;
- this._allowRedirectDowngrade = false;
- this._maxRedirects = 50;
- this._allowRetries = false;
- this._maxRetries = 1;
- this._keepAlive = false;
- this._disposed = false;
- this.userAgent = userAgent;
- this.handlers = handlers || [];
- this.requestOptions = requestOptions;
- if (requestOptions) {
- if (requestOptions.ignoreSslError != null) {
- this._ignoreSslError = requestOptions.ignoreSslError;
- }
- this._socketTimeout = requestOptions.socketTimeout;
- if (requestOptions.allowRedirects != null) {
- this._allowRedirects = requestOptions.allowRedirects;
- }
- if (requestOptions.allowRedirectDowngrade != null) {
- this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;
- }
- if (requestOptions.maxRedirects != null) {
- this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);
- }
- if (requestOptions.keepAlive != null) {
- this._keepAlive = requestOptions.keepAlive;
- }
- if (requestOptions.allowRetries != null) {
- this._allowRetries = requestOptions.allowRetries;
- }
- if (requestOptions.maxRetries != null) {
- this._maxRetries = requestOptions.maxRetries;
- }
- }
- }
- options(requestUrl, additionalHeaders) {
- return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});
- }
- get(requestUrl, additionalHeaders) {
- return this.request('GET', requestUrl, null, additionalHeaders || {});
- }
- del(requestUrl, additionalHeaders) {
- return this.request('DELETE', requestUrl, null, additionalHeaders || {});
- }
- post(requestUrl, data, additionalHeaders) {
- return this.request('POST', requestUrl, data, additionalHeaders || {});
- }
- patch(requestUrl, data, additionalHeaders) {
- return this.request('PATCH', requestUrl, data, additionalHeaders || {});
- }
- put(requestUrl, data, additionalHeaders) {
- return this.request('PUT', requestUrl, data, additionalHeaders || {});
- }
- head(requestUrl, additionalHeaders) {
- return this.request('HEAD', requestUrl, null, additionalHeaders || {});
- }
- sendStream(verb, requestUrl, stream, additionalHeaders) {
- return this.request(verb, requestUrl, stream, additionalHeaders);
- }
- /**
- * Gets a typed object from an endpoint
- * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise
- */
- async getJson(requestUrl, additionalHeaders = {}) {
- additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
- let res = await this.get(requestUrl, additionalHeaders);
- return this._processResponse(res, this.requestOptions);
- }
- async postJson(requestUrl, obj, additionalHeaders = {}) {
- let data = JSON.stringify(obj, null, 2);
- additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
- additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
- let res = await this.post(requestUrl, data, additionalHeaders);
- return this._processResponse(res, this.requestOptions);
- }
- async putJson(requestUrl, obj, additionalHeaders = {}) {
- let data = JSON.stringify(obj, null, 2);
- additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
- additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
- let res = await this.put(requestUrl, data, additionalHeaders);
- return this._processResponse(res, this.requestOptions);
- }
- async patchJson(requestUrl, obj, additionalHeaders = {}) {
- let data = JSON.stringify(obj, null, 2);
- additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
- additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
- let res = await this.patch(requestUrl, data, additionalHeaders);
- return this._processResponse(res, this.requestOptions);
- }
- /**
- * Makes a raw http request.
- * All other methods such as get, post, patch, and request ultimately call this.
- * Prefer get, del, post and patch
- */
- async request(verb, requestUrl, data, headers) {
- if (this._disposed) {
- throw new Error('Client has already been disposed.');
- }
- let parsedUrl = url.parse(requestUrl);
- let info = this._prepareRequest(verb, parsedUrl, headers);
- // Only perform retries on reads since writes may not be idempotent.
- let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1
- ? this._maxRetries + 1
- : 1;
- let numTries = 0;
- let response;
- while (numTries < maxTries) {
- response = await this.requestRaw(info, data);
- // Check if it's an authentication challenge
- if (response &&
- response.message &&
- response.message.statusCode === HttpCodes.Unauthorized) {
- let authenticationHandler;
- for (let i = 0; i < this.handlers.length; i++) {
- if (this.handlers[i].canHandleAuthentication(response)) {
- authenticationHandler = this.handlers[i];
- break;
- }
- }
- if (authenticationHandler) {
- return authenticationHandler.handleAuthentication(this, info, data);
- }
- else {
- // We have received an unauthorized response but have no handlers to handle it.
- // Let the response return to the caller.
- return response;
- }
- }
- let redirectsRemaining = this._maxRedirects;
- while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 &&
- this._allowRedirects &&
- redirectsRemaining > 0) {
- const redirectUrl = response.message.headers['location'];
- if (!redirectUrl) {
- // if there's no location to redirect to, we won't
- break;
- }
- let parsedRedirectUrl = url.parse(redirectUrl);
- if (parsedUrl.protocol == 'https:' &&
- parsedUrl.protocol != parsedRedirectUrl.protocol &&
- !this._allowRedirectDowngrade) {
- throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.');
- }
- // we need to finish reading the response before reassigning response
- // which will leak the open socket.
- await response.readBody();
- // strip authorization header if redirected to a different hostname
- if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {
- for (let header in headers) {
- // header names are case insensitive
- if (header.toLowerCase() === 'authorization') {
- delete headers[header];
- }
- }
- }
- // let's make the request with the new redirectUrl
- info = this._prepareRequest(verb, parsedRedirectUrl, headers);
- response = await this.requestRaw(info, data);
- redirectsRemaining--;
- }
- if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) {
- // If not a retry code, return immediately instead of retrying
- return response;
- }
- numTries += 1;
- if (numTries < maxTries) {
- await response.readBody();
- await this._performExponentialBackoff(numTries);
- }
- }
- return response;
- }
- /**
- * Needs to be called if keepAlive is set to true in request options.
- */
- dispose() {
- if (this._agent) {
- this._agent.destroy();
- }
- this._disposed = true;
- }
- /**
- * Raw request.
- * @param info
- * @param data
- */
- requestRaw(info, data) {
- return new Promise((resolve, reject) => {
- let callbackForResult = function (err, res) {
- if (err) {
- reject(err);
- }
- resolve(res);
- };
- this.requestRawWithCallback(info, data, callbackForResult);
- });
- }
- /**
- * Raw request with callback.
- * @param info
- * @param data
- * @param onResult
- */
- requestRawWithCallback(info, data, onResult) {
- let socket;
- if (typeof data === 'string') {
- info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');
- }
- let callbackCalled = false;
- let handleResult = (err, res) => {
- if (!callbackCalled) {
- callbackCalled = true;
- onResult(err, res);
- }
- };
- let req = info.httpModule.request(info.options, (msg) => {
- let res = new HttpClientResponse(msg);
- handleResult(null, res);
- });
- req.on('socket', sock => {
- socket = sock;
- });
- // If we ever get disconnected, we want the socket to timeout eventually
- req.setTimeout(this._socketTimeout || 3 * 60000, () => {
- if (socket) {
- socket.end();
- }
- handleResult(new Error('Request timeout: ' + info.options.path), null);
- });
- req.on('error', function (err) {
- // err has statusCode property
- // res should have headers
- handleResult(err, null);
- });
- if (data && typeof data === 'string') {
- req.write(data, 'utf8');
- }
- if (data && typeof data !== 'string') {
- data.on('close', function () {
- req.end();
- });
- data.pipe(req);
- }
- else {
- req.end();
- }
- }
- /**
- * Gets an http agent. This function is useful when you need an http agent that handles
- * routing through a proxy server - depending upon the url and proxy environment variables.
- * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
- */
- getAgent(serverUrl) {
- let parsedUrl = url.parse(serverUrl);
- return this._getAgent(parsedUrl);
- }
- _prepareRequest(method, requestUrl, headers) {
- const info = {};
- info.parsedUrl = requestUrl;
- const usingSsl = info.parsedUrl.protocol === 'https:';
- info.httpModule = usingSsl ? https : http;
- const defaultPort = usingSsl ? 443 : 80;
- info.options = {};
- info.options.host = info.parsedUrl.hostname;
- info.options.port = info.parsedUrl.port
- ? parseInt(info.parsedUrl.port)
- : defaultPort;
- info.options.path =
- (info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');
- info.options.method = method;
- info.options.headers = this._mergeHeaders(headers);
- if (this.userAgent != null) {
- info.options.headers['user-agent'] = this.userAgent;
- }
- info.options.agent = this._getAgent(info.parsedUrl);
- // gives handlers an opportunity to participate
- if (this.handlers) {
- this.handlers.forEach(handler => {
- handler.prepareRequest(info.options);
- });
- }
- return info;
- }
- _mergeHeaders(headers) {
- const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
- if (this.requestOptions && this.requestOptions.headers) {
- return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers));
- }
- return lowercaseKeys(headers || {});
- }
- _getExistingOrDefaultHeader(additionalHeaders, header, _default) {
- const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
- let clientHeader;
- if (this.requestOptions && this.requestOptions.headers) {
- clientHeader = lowercaseKeys(this.requestOptions.headers)[header];
- }
- return additionalHeaders[header] || clientHeader || _default;
- }
- _getAgent(parsedUrl) {
- let agent;
- let proxyUrl = pm.getProxyUrl(parsedUrl);
- let useProxy = proxyUrl && proxyUrl.hostname;
- if (this._keepAlive && useProxy) {
- agent = this._proxyAgent;
- }
- if (this._keepAlive && !useProxy) {
- agent = this._agent;
- }
- // if agent is already assigned use that agent.
- if (!!agent) {
- return agent;
- }
- const usingSsl = parsedUrl.protocol === 'https:';
- let maxSockets = 100;
- if (!!this.requestOptions) {
- maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;
- }
- if (useProxy) {
- // If using proxy, need tunnel
- if (!tunnel) {
- tunnel = __webpack_require__(856);
- }
- const agentOptions = {
- maxSockets: maxSockets,
- keepAlive: this._keepAlive,
- proxy: {
- proxyAuth: proxyUrl.auth,
- host: proxyUrl.hostname,
- port: proxyUrl.port
- }
- };
- let tunnelAgent;
- const overHttps = proxyUrl.protocol === 'https:';
- if (usingSsl) {
- tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;
- }
- else {
- tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;
- }
- agent = tunnelAgent(agentOptions);
- this._proxyAgent = agent;
- }
- // if reusing agent across request and tunneling agent isn't assigned create a new agent
- if (this._keepAlive && !agent) {
- const options = { keepAlive: this._keepAlive, maxSockets: maxSockets };
- agent = usingSsl ? new https.Agent(options) : new http.Agent(options);
- this._agent = agent;
- }
- // if not using private agent and tunnel agent isn't setup then use global agent
- if (!agent) {
- agent = usingSsl ? https.globalAgent : http.globalAgent;
+ if (gtlt === '>') {
+ // >1 => >=2.0.0
+ // >1.2 => >=1.3.0
+ // >1.2.3 => >= 1.2.4
+ gtlt = '>='
+ if (xm) {
+ M = +M + 1
+ m = 0
+ p = 0
+ } else {
+ m = +m + 1
+ p = 0
}
- if (usingSsl && this._ignoreSslError) {
- // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
- // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
- // we have to cast it to any and change it directly
- agent.options = Object.assign(agent.options || {}, {
- rejectUnauthorized: false
- });
+ } else if (gtlt === '<=') {
+ // <=0.7.x is actually <0.8.0, since any 0.7.x should
+ // pass. Similarly, <=7.x is actually <8.0.0, etc.
+ gtlt = '<'
+ if (xm) {
+ M = +M + 1
+ } else {
+ m = +m + 1
}
- return agent;
+ }
+
+ ret = gtlt + M + '.' + m + '.' + p + pr
+ } else if (xm) {
+ ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr
+ } else if (xp) {
+ ret = '>=' + M + '.' + m + '.0' + pr +
+ ' <' + M + '.' + (+m + 1) + '.0' + pr
}
- _performExponentialBackoff(retryNumber) {
- retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);
- const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);
- return new Promise(resolve => setTimeout(() => resolve(), ms));
+
+ debug('xRange return', ret)
+
+ return ret
+ })
+}
+
+// Because * is AND-ed with everything else in the comparator,
+// and '' means "any version", just remove the *s entirely.
+function replaceStars (comp, options) {
+ debug('replaceStars', comp, options)
+ // Looseness is ignored here. star is always as loose as it gets!
+ return comp.trim().replace(re[t.STAR], '')
+}
+
+// This function is passed to string.replace(re[t.HYPHENRANGE])
+// M, m, patch, prerelease, build
+// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
+// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
+// 1.2 - 3.4 => >=1.2.0 <3.5.0
+function hyphenReplace ($0,
+ from, fM, fm, fp, fpr, fb,
+ to, tM, tm, tp, tpr, tb) {
+ if (isX(fM)) {
+ from = ''
+ } else if (isX(fm)) {
+ from = '>=' + fM + '.0.0'
+ } else if (isX(fp)) {
+ from = '>=' + fM + '.' + fm + '.0'
+ } else {
+ from = '>=' + from
+ }
+
+ if (isX(tM)) {
+ to = ''
+ } else if (isX(tm)) {
+ to = '<' + (+tM + 1) + '.0.0'
+ } else if (isX(tp)) {
+ to = '<' + tM + '.' + (+tm + 1) + '.0'
+ } else if (tpr) {
+ to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr
+ } else {
+ to = '<=' + to
+ }
+
+ return (from + ' ' + to).trim()
+}
+
+// if ANY of the sets match ALL of its comparators, then pass
+Range.prototype.test = function (version) {
+ if (!version) {
+ return false
+ }
+
+ if (typeof version === 'string') {
+ try {
+ version = new SemVer(version, this.options)
+ } catch (er) {
+ return false
}
- static dateTimeDeserializer(key, value) {
- if (typeof value === 'string') {
- let a = new Date(value);
- if (!isNaN(a.valueOf())) {
- return a;
- }
+ }
+
+ for (var i = 0; i < this.set.length; i++) {
+ if (testSet(this.set[i], version, this.options)) {
+ return true
+ }
+ }
+ return false
+}
+
+function testSet (set, version, options) {
+ for (var i = 0; i < set.length; i++) {
+ if (!set[i].test(version)) {
+ return false
+ }
+ }
+
+ if (version.prerelease.length && !options.includePrerelease) {
+ // Find the set of versions that are allowed to have prereleases
+ // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
+ // That should allow `1.2.3-pr.2` to pass.
+ // However, `1.2.4-alpha.notready` should NOT be allowed,
+ // even though it's within the range set by the comparators.
+ for (i = 0; i < set.length; i++) {
+ debug(set[i].semver)
+ if (set[i].semver === ANY) {
+ continue
+ }
+
+ if (set[i].semver.prerelease.length > 0) {
+ var allowed = set[i].semver
+ if (allowed.major === version.major &&
+ allowed.minor === version.minor &&
+ allowed.patch === version.patch) {
+ return true
}
- return value;
+ }
}
- async _processResponse(res, options) {
- return new Promise(async (resolve, reject) => {
- const statusCode = res.message.statusCode;
- const response = {
- statusCode: statusCode,
- result: null,
- headers: {}
- };
- // not found leads to null obj returned
- if (statusCode == HttpCodes.NotFound) {
- resolve(response);
- }
- let obj;
- let contents;
- // get the result from the body
- try {
- contents = await res.readBody();
- if (contents && contents.length > 0) {
- if (options && options.deserializeDates) {
- obj = JSON.parse(contents, HttpClient.dateTimeDeserializer);
- }
- else {
- obj = JSON.parse(contents);
- }
- response.result = obj;
- }
- response.headers = res.message.headers;
- }
- catch (err) {
- // Invalid resource (contents not json); leaving result obj null
- }
- // note that 3xx redirects are handled by the http layer.
- if (statusCode > 299) {
- let msg;
- // if exception/error in body, attempt to get better error
- if (obj && obj.message) {
- msg = obj.message;
- }
- else if (contents && contents.length > 0) {
- // it may be the case that the exception is in the body message as string
- msg = contents;
- }
- else {
- msg = 'Failed request: (' + statusCode + ')';
- }
- let err = new Error(msg);
- // attach statusCode and body obj (if available) to the error object
- err['statusCode'] = statusCode;
- if (response.result) {
- err['result'] = response.result;
- }
- reject(err);
- }
- else {
- resolve(response);
- }
- });
+
+ // Version has a -pre, but it's not one of the ones we like.
+ return false
+ }
+
+ return true
+}
+
+exports.satisfies = satisfies
+function satisfies (version, range, options) {
+ try {
+ range = new Range(range, options)
+ } catch (er) {
+ return false
+ }
+ return range.test(version)
+}
+
+exports.maxSatisfying = maxSatisfying
+function maxSatisfying (versions, range, options) {
+ var max = null
+ var maxSV = null
+ try {
+ var rangeObj = new Range(range, options)
+ } catch (er) {
+ return null
+ }
+ versions.forEach(function (v) {
+ if (rangeObj.test(v)) {
+ // satisfies(v, range, options)
+ if (!max || maxSV.compare(v) === -1) {
+ // compare(max, v, true)
+ max = v
+ maxSV = new SemVer(max, options)
+ }
}
+ })
+ return max
}
-exports.HttpClient = HttpClient;
+exports.minSatisfying = minSatisfying
+function minSatisfying (versions, range, options) {
+ var min = null
+ var minSV = null
+ try {
+ var rangeObj = new Range(range, options)
+ } catch (er) {
+ return null
+ }
+ versions.forEach(function (v) {
+ if (rangeObj.test(v)) {
+ // satisfies(v, range, options)
+ if (!min || minSV.compare(v) === 1) {
+ // compare(min, v, true)
+ min = v
+ minSV = new SemVer(min, options)
+ }
+ }
+ })
+ return min
+}
-/***/ }),
-/* 540 */,
-/* 541 */,
-/* 542 */,
-/* 543 */,
-/* 544 */,
-/* 545 */,
-/* 546 */,
-/* 547 */,
-/* 548 */,
-/* 549 */,
-/* 550 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
+exports.minVersion = minVersion
+function minVersion (range, loose) {
+ range = new Range(range, loose)
-"use strict";
+ var minver = new SemVer('0.0.0')
+ if (range.test(minver)) {
+ return minver
+ }
+ minver = new SemVer('0.0.0-0')
+ if (range.test(minver)) {
+ return minver
+ }
-Object.defineProperty(exports, '__esModule', { value: true });
+ minver = null
+ for (var i = 0; i < range.set.length; ++i) {
+ var comparators = range.set[i]
-var authToken = __webpack_require__(813);
+ comparators.forEach(function (comparator) {
+ // Clone to avoid manipulating the comparator's semver object.
+ var compver = new SemVer(comparator.semver.version)
+ switch (comparator.operator) {
+ case '>':
+ if (compver.prerelease.length === 0) {
+ compver.patch++
+ } else {
+ compver.prerelease.push(0)
+ }
+ compver.raw = compver.format()
+ /* fallthrough */
+ case '':
+ case '>=':
+ if (!minver || gt(minver, compver)) {
+ minver = compver
+ }
+ break
+ case '<':
+ case '<=':
+ /* Ignore maximum versions */
+ break
+ /* istanbul ignore next */
+ default:
+ throw new Error('Unexpected operation: ' + comparator.operator)
+ }
+ })
+ }
-const createActionAuth = function createActionAuth() {
- if (!process.env.GITHUB_ACTION) {
- throw new Error("[@octokit/auth-action] `GITHUB_ACTION` environment variable is not set. @octokit/auth-action is meant to be used in GitHub Actions only.");
+ if (minver && range.test(minver)) {
+ return minver
}
- if (!process.env.GITHUB_TOKEN && !process.env.INPUT_GITHUB_TOKEN) {
- throw new Error("[@octokit/auth-action] `GITHUB_TOKEN` variable is not set. It must be set on either `env:` or `with:`. See https://github.com/octokit/auth-action.js#createactionauth");
+ return null
+}
+
+exports.validRange = validRange
+function validRange (range, options) {
+ try {
+ // Return '*' instead of '' so that truthiness works.
+ // This will throw if it's invalid anyway
+ return new Range(range, options).range || '*'
+ } catch (er) {
+ return null
+ }
+}
+
+// Determine if version is less than all the versions possible in the range
+exports.ltr = ltr
+function ltr (version, range, options) {
+ return outside(version, range, '<', options)
+}
+
+// Determine if version is greater than all the versions possible in the range.
+exports.gtr = gtr
+function gtr (version, range, options) {
+ return outside(version, range, '>', options)
+}
+
+exports.outside = outside
+function outside (version, range, hilo, options) {
+ version = new SemVer(version, options)
+ range = new Range(range, options)
+
+ var gtfn, ltefn, ltfn, comp, ecomp
+ switch (hilo) {
+ case '>':
+ gtfn = gt
+ ltefn = lte
+ ltfn = lt
+ comp = '>'
+ ecomp = '>='
+ break
+ case '<':
+ gtfn = lt
+ ltefn = gte
+ ltfn = gt
+ comp = '<'
+ ecomp = '<='
+ break
+ default:
+ throw new TypeError('Must provide a hilo val of "<" or ">"')
}
- if (process.env.GITHUB_TOKEN && process.env.INPUT_GITHUB_TOKEN) {
- throw new Error("[@octokit/auth-action] `GITHUB_TOKEN` variable is set on both `env:` and `with:`. Use either the one or the other. See https://github.com/octokit/auth-action.js#createactionauth");
+ // If it satisifes the range it is not outside
+ if (satisfies(version, range, options)) {
+ return false
}
- const token = process.env.GITHUB_TOKEN || process.env.INPUT_GITHUB_TOKEN;
- return authToken.createTokenAuth(token);
-};
+ // From now on, variable terms are as if we're in "gtr" mode.
+ // but note that everything is flipped for the "ltr" function.
-exports.createActionAuth = createActionAuth;
-//# sourceMappingURL=index.js.map
+ for (var i = 0; i < range.set.length; ++i) {
+ var comparators = range.set[i]
+
+ var high = null
+ var low = null
+
+ comparators.forEach(function (comparator) {
+ if (comparator.semver === ANY) {
+ comparator = new Comparator('>=0.0.0')
+ }
+ high = high || comparator
+ low = low || comparator
+ if (gtfn(comparator.semver, high.semver, options)) {
+ high = comparator
+ } else if (ltfn(comparator.semver, low.semver, options)) {
+ low = comparator
+ }
+ })
+
+ // If the edge version comparator has a operator then our version
+ // isn't outside it
+ if (high.operator === comp || high.operator === ecomp) {
+ return false
+ }
+
+ // If the lowest version comparator has an operator and our version
+ // is less than it then it isn't higher than the range
+ if ((!low.operator || low.operator === comp) &&
+ ltefn(version, low.semver)) {
+ return false
+ } else if (low.operator === ecomp && ltfn(version, low.semver)) {
+ return false
+ }
+ }
+ return true
+}
+
+exports.prerelease = prerelease
+function prerelease (version, options) {
+ var parsed = parse(version, options)
+ return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
+}
+
+exports.intersects = intersects
+function intersects (r1, r2, options) {
+ r1 = new Range(r1, options)
+ r2 = new Range(r2, options)
+ return r1.intersects(r2)
+}
+
+exports.coerce = coerce
+function coerce (version, options) {
+ if (version instanceof SemVer) {
+ return version
+ }
+
+ if (typeof version === 'number') {
+ version = String(version)
+ }
+
+ if (typeof version !== 'string') {
+ return null
+ }
+
+ options = options || {}
+
+ var match = null
+ if (!options.rtl) {
+ match = version.match(re[t.COERCE])
+ } else {
+ // Find the right-most coercible string that does not share
+ // a terminus with a more left-ward coercible string.
+ // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
+ //
+ // Walk through the string checking with a /g regexp
+ // Manually set the index so as to pick up overlapping matches.
+ // Stop when we get a match that ends at the string end, since no
+ // coercible string can be more right-ward without the same terminus.
+ var next
+ while ((next = re[t.COERCERTL].exec(version)) &&
+ (!match || match.index + match[0].length !== version.length)
+ ) {
+ if (!match ||
+ next.index + next[0].length !== match.index + match[0].length) {
+ match = next
+ }
+ re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length
+ }
+ // leave it in a clean state
+ re[t.COERCERTL].lastIndex = -1
+ }
+
+ if (match === null) {
+ return null
+ }
+
+ return parse(match[2] +
+ '.' + (match[3] || '0') +
+ '.' + (match[4] || '0'), options)
+}
/***/ }),
-/* 551 */,
-/* 552 */,
-/* 553 */,
-/* 554 */,
-/* 555 */,
-/* 556 */,
-/* 557 */
+
+/***/ 557:
/***/ (function(module, exports, __webpack_require__) {
/* module decorator */ module = __webpack_require__.nmd(module);
@@ -24036,14 +21698,15 @@ exports.createActionAuth = createActionAuth;
var undefined;
/** Used as the semantic version number. */
- var VERSION = '4.17.15';
+ var VERSION = '4.17.21';
/** Used as the size to enable large array optimizations. */
var LARGE_ARRAY_SIZE = 200;
/** Error message constants. */
var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
- FUNC_ERROR_TEXT = 'Expected a function';
+ FUNC_ERROR_TEXT = 'Expected a function',
+ INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';
/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED = '__lodash_hash_undefined__';
@@ -24176,10 +21839,11 @@ exports.createActionAuth = createActionAuth;
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
reHasRegExpChar = RegExp(reRegExpChar.source);
- /** Used to match leading and trailing whitespace. */
- var reTrim = /^\s+|\s+$/g,
- reTrimStart = /^\s+/,
- reTrimEnd = /\s+$/;
+ /** Used to match leading whitespace. */
+ var reTrimStart = /^\s+/;
+
+ /** Used to match a single whitespace character. */
+ var reWhitespace = /\s/;
/** Used to match wrap detail comments. */
var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
@@ -24189,6 +21853,18 @@ exports.createActionAuth = createActionAuth;
/** Used to match words composed of alphanumeric characters. */
var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
+ /**
+ * Used to validate the `validate` option in `_.template` variable.
+ *
+ * Forbids characters which could potentially change the meaning of the function argument definition:
+ * - "()," (modification of function parameters)
+ * - "=" (default value)
+ * - "[]{}" (destructuring of function parameters)
+ * - "/" (beginning of a comment)
+ * - whitespace
+ */
+ var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/;
+
/** Used to match backslashes in property paths. */
var reEscapeChar = /\\(\\)?/g;
@@ -25017,6 +22693,19 @@ exports.createActionAuth = createActionAuth;
});
}
+ /**
+ * The base implementation of `_.trim`.
+ *
+ * @private
+ * @param {string} string The string to trim.
+ * @returns {string} Returns the trimmed string.
+ */
+ function baseTrim(string) {
+ return string
+ ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')
+ : string;
+ }
+
/**
* The base implementation of `_.unary` without support for storing metadata.
*
@@ -25350,6 +23039,21 @@ exports.createActionAuth = createActionAuth;
: asciiToArray(string);
}
+ /**
+ * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
+ * character of `string`.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {number} Returns the index of the last non-whitespace character.
+ */
+ function trimmedEndIndex(string) {
+ var index = string.length;
+
+ while (index-- && reWhitespace.test(string.charAt(index))) {}
+ return index;
+ }
+
/**
* Used by `_.unescape` to convert HTML entities to characters.
*
@@ -27743,8 +25447,21 @@ exports.createActionAuth = createActionAuth;
* @returns {Array} Returns the new sorted array.
*/
function baseOrderBy(collection, iteratees, orders) {
+ if (iteratees.length) {
+ iteratees = arrayMap(iteratees, function(iteratee) {
+ if (isArray(iteratee)) {
+ return function(value) {
+ return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);
+ }
+ }
+ return iteratee;
+ });
+ } else {
+ iteratees = [identity];
+ }
+
var index = -1;
- iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));
+ iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
var result = baseMap(collection, function(value, key, collection) {
var criteria = arrayMap(iteratees, function(iteratee) {
@@ -28001,6 +25718,10 @@ exports.createActionAuth = createActionAuth;
var key = toKey(path[index]),
newValue = value;
+ if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
+ return object;
+ }
+
if (index != lastIndex) {
var objValue = nested[key];
newValue = customizer ? customizer(objValue, key, nested) : undefined;
@@ -28153,11 +25874,14 @@ exports.createActionAuth = createActionAuth;
* into `array`.
*/
function baseSortedIndexBy(array, value, iteratee, retHighest) {
- value = iteratee(value);
-
var low = 0,
- high = array == null ? 0 : array.length,
- valIsNaN = value !== value,
+ high = array == null ? 0 : array.length;
+ if (high === 0) {
+ return 0;
+ }
+
+ value = iteratee(value);
+ var valIsNaN = value !== value,
valIsNull = value === null,
valIsSymbol = isSymbol(value),
valIsUndefined = value === undefined;
@@ -29642,10 +27366,11 @@ exports.createActionAuth = createActionAuth;
if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
return false;
}
- // Assume cyclic values are equal.
- var stacked = stack.get(array);
- if (stacked && stack.get(other)) {
- return stacked == other;
+ // Check that cyclic values are equal.
+ var arrStacked = stack.get(array);
+ var othStacked = stack.get(other);
+ if (arrStacked && othStacked) {
+ return arrStacked == other && othStacked == array;
}
var index = -1,
result = true,
@@ -29807,10 +27532,11 @@ exports.createActionAuth = createActionAuth;
return false;
}
}
- // Assume cyclic values are equal.
- var stacked = stack.get(object);
- if (stacked && stack.get(other)) {
- return stacked == other;
+ // Check that cyclic values are equal.
+ var objStacked = stack.get(object);
+ var othStacked = stack.get(other);
+ if (objStacked && othStacked) {
+ return objStacked == other && othStacked == object;
}
var result = true;
stack.set(object, other);
@@ -33191,6 +30917,10 @@ exports.createActionAuth = createActionAuth;
* // The `_.property` iteratee shorthand.
* _.filter(users, 'active');
* // => objects for ['barney']
+ *
+ * // Combining several predicates using `_.overEvery` or `_.overSome`.
+ * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
+ * // => objects for ['fred', 'barney']
*/
function filter(collection, predicate) {
var func = isArray(collection) ? arrayFilter : baseFilter;
@@ -33940,15 +31670,15 @@ exports.createActionAuth = createActionAuth;
* var users = [
* { 'user': 'fred', 'age': 48 },
* { 'user': 'barney', 'age': 36 },
- * { 'user': 'fred', 'age': 40 },
+ * { 'user': 'fred', 'age': 30 },
* { 'user': 'barney', 'age': 34 }
* ];
*
* _.sortBy(users, [function(o) { return o.user; }]);
- * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
+ * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
*
* _.sortBy(users, ['user', 'age']);
- * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
+ * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
*/
var sortBy = baseRest(function(collection, iteratees) {
if (collection == null) {
@@ -36492,7 +34222,7 @@ exports.createActionAuth = createActionAuth;
if (typeof value != 'string') {
return value === 0 ? value : +value;
}
- value = value.replace(reTrim, '');
+ value = baseTrim(value);
var isBinary = reIsBinary.test(value);
return (isBinary || reIsOctal.test(value))
? freeParseInt(value.slice(2), isBinary ? 2 : 8)
@@ -38823,11 +36553,11 @@ exports.createActionAuth = createActionAuth;
// Use a sourceURL for easier debugging.
// The sourceURL gets injected into the source that's eval-ed, so be careful
- // with lookup (in case of e.g. prototype pollution), and strip newlines if any.
- // A newline wouldn't be a valid sourceURL anyway, and it'd enable code injection.
+ // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in
+ // and escape the comment, thus injecting code that gets evaled.
var sourceURL = '//# sourceURL=' +
(hasOwnProperty.call(options, 'sourceURL')
- ? (options.sourceURL + '').replace(/[\r\n]/g, ' ')
+ ? (options.sourceURL + '').replace(/\s/g, ' ')
: ('lodash.templateSources[' + (++templateCounter) + ']')
) + '\n';
@@ -38860,12 +36590,16 @@ exports.createActionAuth = createActionAuth;
// If `variable` is not specified wrap a with-statement around the generated
// code to add the data object to the top of the scope chain.
- // Like with sourceURL, we take care to not check the option's prototype,
- // as this configuration is a code injection vector.
var variable = hasOwnProperty.call(options, 'variable') && options.variable;
if (!variable) {
source = 'with (obj) {\n' + source + '\n}\n';
}
+ // Throw an error if a forbidden character was found in `variable`, to prevent
+ // potential command injection attacks.
+ else if (reForbiddenIdentifierChars.test(variable)) {
+ throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);
+ }
+
// Cleanup code by stripping empty strings.
source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
.replace(reEmptyStringMiddle, '$1')
@@ -38979,7 +36713,7 @@ exports.createActionAuth = createActionAuth;
function trim(string, chars, guard) {
string = toString(string);
if (string && (guard || chars === undefined)) {
- return string.replace(reTrim, '');
+ return baseTrim(string);
}
if (!string || !(chars = baseToString(chars))) {
return string;
@@ -39014,7 +36748,7 @@ exports.createActionAuth = createActionAuth;
function trimEnd(string, chars, guard) {
string = toString(string);
if (string && (guard || chars === undefined)) {
- return string.replace(reTrimEnd, '');
+ return string.slice(0, trimmedEndIndex(string) + 1);
}
if (!string || !(chars = baseToString(chars))) {
return string;
@@ -39568,6 +37302,9 @@ exports.createActionAuth = createActionAuth;
* values against any array or object value, respectively. See `_.isEqual`
* for a list of supported value comparisons.
*
+ * **Note:** Multiple values can be checked by combining several matchers
+ * using `_.overSome`
+ *
* @static
* @memberOf _
* @since 3.0.0
@@ -39583,6 +37320,10 @@ exports.createActionAuth = createActionAuth;
*
* _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
* // => [{ 'a': 4, 'b': 5, 'c': 6 }]
+ *
+ * // Checking for several possible values
+ * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));
+ * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
*/
function matches(source) {
return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
@@ -39597,6 +37338,9 @@ exports.createActionAuth = createActionAuth;
* `srcValue` values against any array or object value, respectively. See
* `_.isEqual` for a list of supported value comparisons.
*
+ * **Note:** Multiple values can be checked by combining several matchers
+ * using `_.overSome`
+ *
* @static
* @memberOf _
* @since 3.2.0
@@ -39613,6 +37357,10 @@ exports.createActionAuth = createActionAuth;
*
* _.find(objects, _.matchesProperty('a', 4));
* // => { 'a': 4, 'b': 5, 'c': 6 }
+ *
+ * // Checking for several possible values
+ * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));
+ * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
*/
function matchesProperty(path, srcValue) {
return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
@@ -39836,6 +37584,10 @@ exports.createActionAuth = createActionAuth;
* Creates a function that checks if **all** of the `predicates` return
* truthy when invoked with the arguments it receives.
*
+ * Following shorthands are possible for providing predicates.
+ * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
+ * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
+ *
* @static
* @memberOf _
* @since 4.0.0
@@ -39862,6 +37614,10 @@ exports.createActionAuth = createActionAuth;
* Creates a function that checks if **any** of the `predicates` return
* truthy when invoked with the arguments it receives.
*
+ * Following shorthands are possible for providing predicates.
+ * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
+ * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
+ *
* @static
* @memberOf _
* @since 4.0.0
@@ -39881,6 +37637,9 @@ exports.createActionAuth = createActionAuth;
*
* func(NaN);
* // => false
+ *
+ * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])
+ * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])
*/
var overSome = createOver(arraySome);
@@ -41137,8 +38896,8 @@ exports.createActionAuth = createActionAuth;
/***/ }),
-/* 558 */,
-/* 559 */
+
+/***/ 559:
/***/ (function(__unusedmodule, exports) {
"use strict";
@@ -41175,7 +38934,7 @@ class GitVersion {
*/
checkMinimum(minimum) {
if (!minimum.isValid()) {
- throw new Error('Arg minimum is not a valid version');
+ throw new Error("Arg minimum is not a valid version");
}
// Major is insufficient
if (this.major < minimum.major) {
@@ -41211,7 +38970,7 @@ class GitVersion {
* @returns {string} Returns the version as a string, e.g. 1.2 or 1.2.3.
*/
toString() {
- let result = '';
+ let result = "";
if (this.isValid()) {
result = `${this.major}.${this.minor}`;
if (!isNaN(this.patch)) {
@@ -41225,253 +38984,15 @@ exports.GitVersion = GitVersion;
/***/ }),
-/* 560 */
+
+/***/ 560:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = __webpack_require__(600);
/***/ }),
-/* 561 */,
-/* 562 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-var once = __webpack_require__(969);
-
-var noop = function() {};
-
-var isRequest = function(stream) {
- return stream.setHeader && typeof stream.abort === 'function';
-};
-
-var isChildProcess = function(stream) {
- return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3
-};
-
-var eos = function(stream, opts, callback) {
- if (typeof opts === 'function') return eos(stream, null, opts);
- if (!opts) opts = {};
-
- callback = once(callback || noop);
-
- var ws = stream._writableState;
- var rs = stream._readableState;
- var readable = opts.readable || (opts.readable !== false && stream.readable);
- var writable = opts.writable || (opts.writable !== false && stream.writable);
- var cancelled = false;
-
- var onlegacyfinish = function() {
- if (!stream.writable) onfinish();
- };
-
- var onfinish = function() {
- writable = false;
- if (!readable) callback.call(stream);
- };
-
- var onend = function() {
- readable = false;
- if (!writable) callback.call(stream);
- };
-
- var onexit = function(exitCode) {
- callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);
- };
-
- var onerror = function(err) {
- callback.call(stream, err);
- };
- var onclose = function() {
- process.nextTick(onclosenexttick);
- };
-
- var onclosenexttick = function() {
- if (cancelled) return;
- if (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close'));
- if (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close'));
- };
-
- var onrequest = function() {
- stream.req.on('finish', onfinish);
- };
-
- if (isRequest(stream)) {
- stream.on('complete', onfinish);
- stream.on('abort', onclose);
- if (stream.req) onrequest();
- else stream.on('request', onrequest);
- } else if (writable && !ws) { // legacy streams
- stream.on('end', onlegacyfinish);
- stream.on('close', onlegacyfinish);
- }
-
- if (isChildProcess(stream)) stream.on('exit', onexit);
-
- stream.on('end', onend);
- stream.on('finish', onfinish);
- if (opts.error !== false) stream.on('error', onerror);
- stream.on('close', onclose);
-
- return function() {
- cancelled = true;
- stream.removeListener('complete', onfinish);
- stream.removeListener('abort', onclose);
- stream.removeListener('request', onrequest);
- if (stream.req) stream.req.removeListener('finish', onfinish);
- stream.removeListener('end', onlegacyfinish);
- stream.removeListener('close', onlegacyfinish);
- stream.removeListener('finish', onfinish);
- stream.removeListener('exit', onexit);
- stream.removeListener('end', onend);
- stream.removeListener('error', onerror);
- stream.removeListener('close', onclose);
- };
-};
-
-module.exports = eos;
-
-
-/***/ }),
-/* 563 */,
-/* 564 */,
-/* 565 */,
-/* 566 */,
-/* 567 */,
-/* 568 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-"use strict";
-
-
-const path = __webpack_require__(622);
-const niceTry = __webpack_require__(298);
-const resolveCommand = __webpack_require__(489);
-const escape = __webpack_require__(462);
-const readShebang = __webpack_require__(389);
-const semver = __webpack_require__(48);
-
-const isWin = process.platform === 'win32';
-const isExecutableRegExp = /\.(?:com|exe)$/i;
-const isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;
-
-// `options.shell` is supported in Node ^4.8.0, ^5.7.0 and >= 6.0.0
-const supportsShellOption = niceTry(() => semver.satisfies(process.version, '^4.8.0 || ^5.7.0 || >= 6.0.0', true)) || false;
-
-function detectShebang(parsed) {
- parsed.file = resolveCommand(parsed);
-
- const shebang = parsed.file && readShebang(parsed.file);
-
- if (shebang) {
- parsed.args.unshift(parsed.file);
- parsed.command = shebang;
-
- return resolveCommand(parsed);
- }
-
- return parsed.file;
-}
-
-function parseNonShell(parsed) {
- if (!isWin) {
- return parsed;
- }
-
- // Detect & add support for shebangs
- const commandFile = detectShebang(parsed);
-
- // We don't need a shell if the command filename is an executable
- const needsShell = !isExecutableRegExp.test(commandFile);
-
- // If a shell is required, use cmd.exe and take care of escaping everything correctly
- // Note that `forceShell` is an hidden option used only in tests
- if (parsed.options.forceShell || needsShell) {
- // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/`
- // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument
- // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called,
- // we need to double escape them
- const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile);
-
- // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\bar)
- // This is necessary otherwise it will always fail with ENOENT in those cases
- parsed.command = path.normalize(parsed.command);
-
- // Escape command & arguments
- parsed.command = escape.command(parsed.command);
- parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars));
-
- const shellCommand = [parsed.command].concat(parsed.args).join(' ');
-
- parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`];
- parsed.command = process.env.comspec || 'cmd.exe';
- parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped
- }
-
- return parsed;
-}
-
-function parseShell(parsed) {
- // If node supports the shell option, there's no need to mimic its behavior
- if (supportsShellOption) {
- return parsed;
- }
-
- // Mimic node shell option
- // See https://github.com/nodejs/node/blob/b9f6a2dc059a1062776133f3d4fd848c4da7d150/lib/child_process.js#L335
- const shellCommand = [parsed.command].concat(parsed.args).join(' ');
-
- if (isWin) {
- parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe';
- parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`];
- parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped
- } else {
- if (typeof parsed.options.shell === 'string') {
- parsed.command = parsed.options.shell;
- } else if (process.platform === 'android') {
- parsed.command = '/system/bin/sh';
- } else {
- parsed.command = '/bin/sh';
- }
-
- parsed.args = ['-c', shellCommand];
- }
-
- return parsed;
-}
-
-function parse(command, args, options) {
- // Normalize arguments, similar to nodejs
- if (args && !Array.isArray(args)) {
- options = args;
- args = null;
- }
-
- args = args ? args.slice(0) : []; // Clone array to avoid changing the original
- options = Object.assign({}, options); // Clone object to avoid changing the original
-
- // Build our parsed object
- const parsed = {
- command,
- args,
- options,
- file: undefined,
- original: {
- command,
- args,
- },
- };
-
- // Delegate further parsing to shell or non-shell
- return options.shell ? parseShell(parsed) : parseNonShell(parsed);
-}
-
-module.exports = parse;
-
-
-/***/ }),
-/* 569 */,
-/* 570 */,
-/* 571 */
+/***/ 571:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = minimatch
@@ -42400,22 +39921,8 @@ function regExpEscape (s) {
/***/ }),
-/* 572 */,
-/* 573 */,
-/* 574 */,
-/* 575 */,
-/* 576 */,
-/* 577 */,
-/* 578 */,
-/* 579 */,
-/* 580 */,
-/* 581 */,
-/* 582 */,
-/* 583 */,
-/* 584 */,
-/* 585 */,
-/* 586 */,
-/* 587 */
+
+/***/ 587:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -42435,7 +39942,7 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
@@ -42460,7 +39967,7 @@ class RetryHelper {
this.minSeconds = Math.floor(minSeconds);
this.maxSeconds = Math.floor(maxSeconds);
if (this.minSeconds > this.maxSeconds) {
- throw new Error('min seconds should be less than or equal to max seconds');
+ throw new Error("min seconds should be less than or equal to max seconds");
}
}
execute(action) {
@@ -42485,12 +39992,11 @@ class RetryHelper {
});
}
getSleepAmount() {
- return (Math.floor(Math.random() * (this.maxSeconds - this.minSeconds + 1)) +
- this.minSeconds);
+ return Math.floor(Math.random() * (this.maxSeconds - this.minSeconds + 1)) + this.minSeconds;
}
sleep(seconds) {
return __awaiter(this, void 0, void 0, function* () {
- return new Promise(resolve => setTimeout(resolve, seconds * 1000));
+ return new Promise((resolve) => setTimeout(resolve, seconds * 1000));
});
}
}
@@ -42498,14 +40004,8 @@ exports.RetryHelper = RetryHelper;
/***/ }),
-/* 588 */,
-/* 589 */,
-/* 590 */,
-/* 591 */,
-/* 592 */,
-/* 593 */,
-/* 594 */,
-/* 595 */
+
+/***/ 595:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -42744,9 +40244,8 @@ module.exports = copy
/***/ }),
-/* 596 */,
-/* 597 */,
-/* 598 */
+
+/***/ 598:
/***/ (function(module, __unusedexports, __webpack_require__) {
var fs = __webpack_require__(747)
@@ -42921,6 +40420,25 @@ function patch (fs) {
}
}
+ var fs$copyFile = fs.copyFile
+ if (fs$copyFile)
+ fs.copyFile = copyFile
+ function copyFile (src, dest, flags, cb) {
+ if (typeof flags === 'function') {
+ cb = flags
+ flags = 0
+ }
+ return fs$copyFile(src, dest, flags, function (err) {
+ if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
+ enqueue([fs$copyFile, [src, dest, flags, cb]])
+ else {
+ if (typeof cb === 'function')
+ cb.apply(this, arguments)
+ retry()
+ }
+ })
+ }
+
var fs$readdir = fs.readdir
fs.readdir = readdir
function readdir (path, options, cb) {
@@ -43106,8 +40624,8 @@ function retry () {
/***/ }),
-/* 599 */,
-/* 600 */
+
+/***/ 600:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
var RetryOperation = __webpack_require__(988);
@@ -43212,9 +40730,8 @@ exports.wrap = function(obj, options, methods) {
/***/ }),
-/* 601 */,
-/* 602 */,
-/* 603 */
+
+/***/ 603:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -43228,7 +40745,43 @@ var request = __webpack_require__(753);
var graphql = __webpack_require__(898);
var authToken = __webpack_require__(813);
-const VERSION = "2.5.0";
+function _objectWithoutPropertiesLoose(source, excluded) {
+ if (source == null) return {};
+ var target = {};
+ var sourceKeys = Object.keys(source);
+ var key, i;
+
+ for (i = 0; i < sourceKeys.length; i++) {
+ key = sourceKeys[i];
+ if (excluded.indexOf(key) >= 0) continue;
+ target[key] = source[key];
+ }
+
+ return target;
+}
+
+function _objectWithoutProperties(source, excluded) {
+ if (source == null) return {};
+
+ var target = _objectWithoutPropertiesLoose(source, excluded);
+
+ var key, i;
+
+ if (Object.getOwnPropertySymbols) {
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
+
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
+ key = sourceSymbolKeys[i];
+ if (excluded.indexOf(key) >= 0) continue;
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
+ target[key] = source[key];
+ }
+ }
+
+ return target;
+}
+
+const VERSION = "3.2.5";
class Octokit {
constructor(options = {}) {
@@ -43268,7 +40821,7 @@ class Octokit {
error: console.error.bind(console)
}, options.log);
this.hook = hook; // (1) If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance
- // is unauthenticated. The `this.auth()` method is a no-op and no request hook is registred.
+ // is unauthenticated. The `this.auth()` method is a no-op and no request hook is registered.
// (2) If only `options.auth` is set, use the default token authentication strategy.
// (3) If `options.authStrategy` is set then use it and pass in `options.auth`. Always pass own request as many strategies accept a custom request instance.
// TODO: type `options.auth` based on `options.authStrategy`.
@@ -43287,8 +40840,21 @@ class Octokit {
this.auth = auth;
}
} else {
- const auth = options.authStrategy(Object.assign({
- request: this.request
+ const {
+ authStrategy
+ } = options,
+ otherOptions = _objectWithoutProperties(options, ["authStrategy"]);
+
+ const auth = authStrategy(Object.assign({
+ request: this.request,
+ log: this.log,
+ // we pass the current octokit instance as well as its constructor options
+ // to allow for authentication strategies that return a new octokit instance
+ // that shares the same internal state as the current one. The original
+ // requirement for this was the "event-octokit" authentication strategy
+ // of https://github.com/probot/octokit-auth-probot.
+ octokit: this,
+ octokitOptions: otherOptions
}, options.auth)); // @ts-ignore ¯\_(ツ)_/¯
hook.wrap("request", auth.hook);
@@ -43307,6 +40873,12 @@ class Octokit {
const OctokitWithDefaults = class extends this {
constructor(...args) {
const options = args[0] || {};
+
+ if (typeof defaults === "function") {
+ super(defaults(options));
+ return;
+ }
+
super(Object.assign({}, defaults, options, options.userAgent && defaults.userAgent ? {
userAgent: `${options.userAgent} ${defaults.userAgent}`
} : null));
@@ -43323,15 +40895,10 @@ class Octokit {
*/
- static plugin(p1, ...p2) {
+ static plugin(...newPlugins) {
var _a;
- if (p1 instanceof Array) {
- console.warn(["Passing an array of plugins to Octokit.plugin() has been deprecated.", "Instead of:", " Octokit.plugin([plugin1, plugin2, ...])", "Use:", " Octokit.plugin(plugin1, plugin2, ...)"].join("\n"));
- }
-
const currentPlugins = this.plugins;
- let newPlugins = [...(p1 instanceof Array ? p1 : [p1]), ...p2];
const NewOctokit = (_a = class extends this {}, _a.plugins = currentPlugins.concat(newPlugins.filter(plugin => !currentPlugins.includes(plugin))), _a);
return NewOctokit;
}
@@ -43345,15 +40912,15 @@ exports.Octokit = Octokit;
/***/ }),
-/* 604 */,
-/* 605 */
+
+/***/ 605:
/***/ (function(module) {
module.exports = require("http");
/***/ }),
-/* 606 */,
-/* 607 */
+
+/***/ 607:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -43476,7 +41043,8 @@ module.exports = {
/***/ }),
-/* 608 */
+
+/***/ 608:
/***/ (function(module) {
"use strict";
@@ -43484,12 +41052,16 @@ module.exports = {
module.exports = clone
+var getPrototypeOf = Object.getPrototypeOf || function (obj) {
+ return obj.__proto__
+}
+
function clone (obj) {
if (obj === null || typeof obj !== 'object')
return obj
if (obj instanceof Object)
- var copy = { __proto__: obj.__proto__ }
+ var copy = { __proto__: getPrototypeOf(obj) }
else
var copy = Object.create(null)
@@ -43502,8 +41074,8 @@ function clone (obj) {
/***/ }),
-/* 609 */,
-/* 610 */
+
+/***/ 610:
/***/ (function(module) {
"use strict";
@@ -43522,16 +41094,15 @@ Promise.filter = function (promises, fn, options) {
/***/ }),
-/* 611 */,
-/* 612 */,
-/* 613 */,
-/* 614 */
+
+/***/ 614:
/***/ (function(module) {
module.exports = require("events");
/***/ }),
-/* 615 */
+
+/***/ 615:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -43586,17 +41157,15 @@ module.exports = {
/***/ }),
-/* 616 */,
-/* 617 */,
-/* 618 */,
-/* 619 */
+
+/***/ 619:
/***/ (function(module) {
module.exports = require("constants");
/***/ }),
-/* 620 */,
-/* 621 */
+
+/***/ 621:
/***/ (function(module) {
"use strict";
@@ -43662,18 +41231,15 @@ function range(a, b, str) {
/***/ }),
-/* 622 */
+
+/***/ 622:
/***/ (function(module) {
module.exports = require("path");
/***/ }),
-/* 623 */,
-/* 624 */,
-/* 625 */,
-/* 626 */,
-/* 627 */,
-/* 628 */
+
+/***/ 628:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -43692,22 +41258,15 @@ module.exports = outputJsonSync
/***/ }),
-/* 629 */,
-/* 630 */,
-/* 631 */
+
+/***/ 631:
/***/ (function(module) {
module.exports = require("net");
/***/ }),
-/* 632 */,
-/* 633 */,
-/* 634 */,
-/* 635 */,
-/* 636 */,
-/* 637 */,
-/* 638 */,
-/* 639 */
+
+/***/ 639:
/***/ (function(module, __unusedexports, __webpack_require__) {
// Unique ID creation requires a high quality random # generator. In node.js
@@ -43721,10 +41280,8 @@ module.exports = function nodeRNG() {
/***/ }),
-/* 640 */,
-/* 641 */,
-/* 642 */,
-/* 643 */
+
+/***/ 643:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -43786,11 +41343,8 @@ Promise.prototype._resolveFromSyncValue = function (value) {
/***/ }),
-/* 644 */,
-/* 645 */,
-/* 646 */,
-/* 647 */,
-/* 648 */
+
+/***/ 648:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -43810,7 +41364,7 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
@@ -43824,47 +41378,46 @@ const url_1 = __webpack_require__(835);
const path_1 = __importDefault(__webpack_require__(622));
class Settings {
constructor(context) {
- const message = 'This pull request has been created by the [template sync action](https://github.com/narrowspark/template-sync-action) action.\n\nThis PR synchronizes with {0}\n\n---\n\n You can set a custom pull request title, body, ref and commit messages, see [Usage](https://github.com/narrowspark/template-sync-action#Usage).';
- let githubWorkspacePath = process.env['GITHUB_WORKSPACE'];
+ const message = "This pull request has been created by the [template sync action](https://github.com/narrowspark/template-sync-action) action.\n\nThis PR synchronizes with {0}\n\n---\n\n You can set a custom pull request title, body, ref and commit messages, see [Usage](https://github.com/narrowspark/template-sync-action#Usage).";
+ let githubWorkspacePath = process.env["GITHUB_WORKSPACE"];
if (!githubWorkspacePath) {
- throw new Error('GITHUB_WORKSPACE not defined');
+ throw new Error("GITHUB_WORKSPACE not defined");
}
githubWorkspacePath = path_1.default.resolve(githubWorkspacePath);
core.debug(`GITHUB_WORKSPACE = '${githubWorkspacePath}'`);
this.settings = {
- authToken: core.getInput('github_token', { required: true }),
- apiUrl: process.env['GITHUB_API_URL'] || 'https://api.github.com',
- serverUrl: new url_1.URL(process.env['GITHUB_URL'] || 'https://github.com'),
- sshKey: core.getInput('ssh_key'),
- sshKnownHosts: core.getInput('ssh_known_hosts'),
- sshStrict: (core.getInput('ssh_strict') || 'true').toUpperCase() === 'TRUE',
- persistCredentials: (core.getInput('persist_credentials') || 'false').toUpperCase() ===
- 'TRUE',
- authorName: core.getInput('git_author_name', { required: true }),
- authorEmail: core.getInput('git_author_email', { required: true }),
- repositoryOwner: core.getInput('owner') || context.repo.owner,
- repositoryName: core.getInput('repo') || context.repo.repo,
+ authToken: core.getInput("github_token", { required: true }),
+ apiUrl: process.env["GITHUB_API_URL"] || "https://api.github.com",
+ serverUrl: new url_1.URL(process.env["GITHUB_URL"] || "https://github.com"),
+ sshKey: core.getInput("ssh_key"),
+ sshKnownHosts: core.getInput("ssh_known_hosts"),
+ sshStrict: (core.getInput("ssh_strict") || "true").toUpperCase() === "TRUE",
+ persistCredentials: (core.getInput("persist_credentials") || "false").toUpperCase() === "TRUE",
+ authorName: core.getInput("git_author_name", { required: true }),
+ authorEmail: core.getInput("git_author_email", { required: true }),
+ repositoryOwner: core.getInput("owner") || context.repo.owner,
+ repositoryName: core.getInput("repo") || context.repo.repo,
githubWorkspacePath,
repositoryPath: githubWorkspacePath,
- messageHead: core.getInput('pr_title') || 'Enhancement: Synchronize with "{0}"',
- messageBody: core.getInput('pr_message') || message,
- ref: core.getInput('ref', { required: true }),
- syncBranchName: 'feature/template/sync/{0}',
- templateRepositoryRef: core.getInput('template_ref') || 'refs/heads/master',
- templateRepository: '',
- templateRepositoryUrl: '',
- templateRepositoryPath: process.env['STATE_template_repository_path'] || '',
+ messageHead: core.getInput("pr_title") || 'Enhancement: Synchronize with "{0}"',
+ messageBody: core.getInput("pr_message") || message,
+ ref: core.getInput("ref", { required: true }),
+ syncBranchName: "feature/template/sync/{0}",
+ templateRepositoryRef: core.getInput("template_ref") || "refs/heads/master",
+ templateRepository: "",
+ templateRepositoryUrl: "",
+ templateRepositoryPath: process.env["STATE_template_repository_path"] || "",
ignoreList: [
- '.git',
- '.changelog',
- '.editorconfig',
- '.gitignore',
- 'CHANGELOG.md',
- 'LICENSE.md.md',
- 'README.md',
- 'UPGRADE.md'
- ].concat(core.getInput('ignore_list', { required: false }) || []),
- clean: (core.getInput('clean') || 'true').toUpperCase() === 'TRUE'
+ ".git$",
+ ".changelog",
+ ".editorconfig",
+ ".gitignore",
+ "CHANGELOG.md",
+ "LICENSE.md",
+ "README.md",
+ "UPGRADE.md",
+ ].concat(core.getInput("ignore_list", { required: false }) || []),
+ clean: (core.getInput("clean") || "true").toUpperCase() === "TRUE",
};
}
get authToken() {
@@ -43895,16 +41448,16 @@ class Settings {
return this.settings.authorName;
}
get messageHead() {
- return this.settings.messageHead.replace('{0}', this.settings.templateRepository);
+ return this.settings.messageHead.replace("{0}", this.settings.templateRepository);
}
get messageBody() {
- return this.settings.messageBody.replace('{0}', this.settings.templateRepository);
+ return this.settings.messageBody.replace("{0}", this.settings.templateRepository);
}
get ref() {
return this.settings.ref;
}
get syncBranchName() {
- return this.settings.syncBranchName.replace('{0}', this.settings.templateRepository);
+ return this.settings.syncBranchName.replace("{0}", this.settings.templateRepository);
}
get templateRepositoryRef() {
return this.settings.templateRepositoryRef;
@@ -43950,74 +41503,8 @@ exports.Settings = Settings;
/***/ }),
-/* 649 */,
-/* 650 */,
-/* 651 */,
-/* 652 */,
-/* 653 */,
-/* 654 */
-/***/ (function(module) {
-
-// This is not the set of all possible signals.
-//
-// It IS, however, the set of all signals that trigger
-// an exit on either Linux or BSD systems. Linux is a
-// superset of the signal names supported on BSD, and
-// the unknown signals just fail to register, so we can
-// catch that easily enough.
-//
-// Don't bother with SIGKILL. It's uncatchable, which
-// means that we can't fire any callbacks anyway.
-//
-// If a user does happen to register a handler on a non-
-// fatal signal like SIGWINCH or something, and then
-// exit, it'll end up firing `process.emit('exit')`, so
-// the handler will be fired anyway.
-//
-// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised
-// artificially, inherently leave the process in a
-// state from which it is not safe to try and enter JS
-// listeners.
-module.exports = [
- 'SIGABRT',
- 'SIGALRM',
- 'SIGHUP',
- 'SIGINT',
- 'SIGTERM'
-]
-
-if (process.platform !== 'win32') {
- module.exports.push(
- 'SIGVTALRM',
- 'SIGXCPU',
- 'SIGXFSZ',
- 'SIGUSR2',
- 'SIGTRAP',
- 'SIGSYS',
- 'SIGQUIT',
- 'SIGIOT'
- // should detect profiler and enable/disable accordingly.
- // see #21
- // 'SIGPROF'
- )
-}
-
-if (process.platform === 'linux') {
- module.exports.push(
- 'SIGIO',
- 'SIGPOLL',
- 'SIGPWR',
- 'SIGSTKFLT',
- 'SIGUNUSED'
- )
-}
-
-/***/ }),
-/* 655 */,
-/* 656 */,
-/* 657 */,
-/* 658 */
+/***/ 658:
/***/ (function(module) {
"use strict";
@@ -44045,11 +41532,8 @@ Promise.prototype.any = function () {
/***/ }),
-/* 659 */,
-/* 660 */,
-/* 661 */,
-/* 662 */,
-/* 663 */
+
+/***/ 663:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -44107,9 +41591,8 @@ module.exports = nodebackForPromise;
/***/ }),
-/* 664 */,
-/* 665 */,
-/* 666 */
+
+/***/ 666:
/***/ (function(module, __unusedexports, __webpack_require__) {
let _fs
@@ -44203,8 +41686,8 @@ module.exports = jsonfile
/***/ }),
-/* 667 */,
-/* 668 */
+
+/***/ 668:
/***/ (function(module) {
/**
@@ -44236,15 +41719,15 @@ module.exports = bytesToUuid;
/***/ }),
-/* 669 */
+
+/***/ 669:
/***/ (function(module) {
module.exports = require("util");
/***/ }),
-/* 670 */,
-/* 671 */,
-/* 672 */
+
+/***/ 672:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -44445,10 +41928,8 @@ function isUnixExecutable(stats) {
//# sourceMappingURL=io-util.js.map
/***/ }),
-/* 673 */,
-/* 674 */,
-/* 675 */,
-/* 676 */
+
+/***/ 676:
/***/ (function(__unusedmodule, exports) {
"use strict";
@@ -44459,9 +41940,10 @@ exports.fromCallback = function (fn) {
if (typeof args[args.length - 1] === 'function') fn.apply(this, args)
else {
return new Promise((resolve, reject) => {
- fn.apply(
+ fn.call(
this,
- args.concat([(err, res) => err ? reject(err) : resolve(res)])
+ ...args,
+ (err, res) => (err != null) ? reject(err) : resolve(res)
)
})
}
@@ -44478,15 +41960,8 @@ exports.fromPromise = function (fn) {
/***/ }),
-/* 677 */,
-/* 678 */,
-/* 679 */,
-/* 680 */,
-/* 681 */,
-/* 682 */,
-/* 683 */,
-/* 684 */,
-/* 685 */
+
+/***/ 685:
/***/ (function(module) {
"use strict";
@@ -44523,16 +41998,16 @@ Promise.mapSeries = PromiseMapSeries;
/***/ }),
-/* 686 */,
-/* 687 */
+
+/***/ 687:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = __webpack_require__(90).default;
/***/ }),
-/* 688 */,
-/* 689 */
+
+/***/ 689:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -44626,9 +42101,8 @@ var DateAssertion = function () {
exports.default = DateAssertion;
/***/ }),
-/* 690 */,
-/* 691 */,
-/* 692 */
+
+/***/ 692:
/***/ (function(__unusedmodule, exports) {
"use strict";
@@ -44655,8 +42129,8 @@ exports.Deprecation = Deprecation;
/***/ }),
-/* 693 */,
-/* 694 */
+
+/***/ 694:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -44721,7 +42195,8 @@ Promise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback,
/***/ }),
-/* 695 */
+
+/***/ 695:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -44740,22 +42215,14 @@ module.exports = outputJson
/***/ }),
-/* 696 */
-/***/ (function(module) {
-"use strict";
+/***/ 701:
+/***/ (function(__unusedmodule, exports) {
+"use strict";
-/*!
- * isobject
- *
- * Copyright (c) 2014-2017, Jon Schlinkert.
- * Released under the MIT License.
- */
-function isObject(val) {
- return val != null && typeof val === 'object' && Array.isArray(val) === false;
-}
+Object.defineProperty(exports, '__esModule', { value: true });
/*!
* is-plain-object
@@ -44764,23 +42231,22 @@ function isObject(val) {
* Released under the MIT License.
*/
-function isObjectObject(o) {
- return isObject(o) === true
- && Object.prototype.toString.call(o) === '[object Object]';
+function isObject(o) {
+ return Object.prototype.toString.call(o) === '[object Object]';
}
function isPlainObject(o) {
var ctor,prot;
- if (isObjectObject(o) === false) return false;
+ if (isObject(o) === false) return false;
// If has modified constructor
ctor = o.constructor;
- if (typeof ctor !== 'function') return false;
+ if (ctor === undefined) return true;
// If has modified prototype
prot = ctor.prototype;
- if (isObjectObject(prot) === false) return false;
+ if (isObject(prot) === false) return false;
// If constructor does not have an Object-specific method
if (prot.hasOwnProperty('isPrototypeOf') === false) {
@@ -44791,50 +42257,12 @@ function isPlainObject(o) {
return true;
}
-module.exports = isPlainObject;
+exports.isPlainObject = isPlainObject;
/***/ }),
-/* 697 */
-/***/ (function(module) {
-
-"use strict";
-module.exports = (promise, onFinally) => {
- onFinally = onFinally || (() => {});
-
- return promise.then(
- val => new Promise(resolve => {
- resolve(onFinally());
- }).then(() => val),
- err => new Promise(resolve => {
- resolve(onFinally());
- }).then(() => {
- throw err;
- })
- );
-};
-
-
-/***/ }),
-/* 698 */,
-/* 699 */,
-/* 700 */,
-/* 701 */,
-/* 702 */,
-/* 703 */,
-/* 704 */,
-/* 705 */,
-/* 706 */,
-/* 707 */,
-/* 708 */,
-/* 709 */,
-/* 710 */,
-/* 711 */,
-/* 712 */,
-/* 713 */,
-/* 714 */,
-/* 715 */
+/***/ 715:
/***/ (function(module) {
"use strict";
@@ -44944,14 +42372,8 @@ Promise.PromiseInspection = PromiseInspection;
/***/ }),
-/* 716 */,
-/* 717 */,
-/* 718 */,
-/* 719 */,
-/* 720 */,
-/* 721 */,
-/* 722 */,
-/* 723 */
+
+/***/ 723:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -44967,7 +42389,8 @@ module.exports = {
/***/ }),
-/* 724 */
+
+/***/ 724:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -45021,7 +42444,8 @@ Promise.prototype.settle = function () {
/***/ }),
-/* 725 */
+
+/***/ 725:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -45030,23 +42454,30 @@ Promise.prototype.settle = function () {
Object.defineProperty(exports, '__esModule', { value: true });
var core = __webpack_require__(603);
-var authAction = __webpack_require__(550);
+var authAction = __webpack_require__(125);
var pluginPaginateRest = __webpack_require__(299);
var pluginRestEndpointMethods = __webpack_require__(842);
-const VERSION = "2.7.0";
+const VERSION = "3.4.0";
const Octokit = core.Octokit.plugin(pluginPaginateRest.paginateRest, pluginRestEndpointMethods.restEndpointMethods).defaults({
authStrategy: authAction.createActionAuth,
+ baseUrl: getApiBaseUrl(),
userAgent: `octokit-action.js/${VERSION}`
});
+function getApiBaseUrl() {
+ /* istanbul ignore next */
+ return process.env["GITHUB_API_URL"] || "https://api.github.com";
+}
+
exports.Octokit = Octokit;
//# sourceMappingURL=index.js.map
/***/ }),
-/* 726 */
+
+/***/ 726:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -45173,7 +42604,8 @@ module.exports.firstLineError = firstLineError;
/***/ }),
-/* 727 */
+
+/***/ 727:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -45194,12 +42626,8 @@ module.exports = {
/***/ }),
-/* 728 */,
-/* 729 */,
-/* 730 */,
-/* 731 */,
-/* 732 */,
-/* 733 */
+
+/***/ 733:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -45212,126 +42640,45 @@ exports.default = void 0;
var _rng = _interopRequireDefault(__webpack_require__(844));
-var _bytesToUuid = _interopRequireDefault(__webpack_require__(390));
+var _stringify = _interopRequireDefault(__webpack_require__(411));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function v4(options, buf, offset) {
- var i = buf && offset || 0;
-
- if (typeof options == 'string') {
- buf = options === 'binary' ? new Array(16) : null;
- options = null;
- }
-
options = options || {};
- var rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
+ const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
rnds[6] = rnds[6] & 0x0f | 0x40;
rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
if (buf) {
- for (var ii = 0; ii < 16; ++ii) {
- buf[i + ii] = rnds[ii];
+ offset = offset || 0;
+
+ for (let i = 0; i < 16; ++i) {
+ buf[offset + i] = rnds[i];
}
+
+ return buf;
}
- return buf || (0, _bytesToUuid.default)(rnds);
+ return (0, _stringify.default)(rnds);
}
var _default = v4;
exports.default = _default;
/***/ }),
-/* 734 */,
-/* 735 */,
-/* 736 */,
-/* 737 */,
-/* 738 */,
-/* 739 */,
-/* 740 */,
-/* 741 */,
-/* 742 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-var fs = __webpack_require__(747)
-var core
-if (process.platform === 'win32' || global.TESTING_WINDOWS) {
- core = __webpack_require__(818)
-} else {
- core = __webpack_require__(197)
-}
-
-module.exports = isexe
-isexe.sync = sync
-
-function isexe (path, options, cb) {
- if (typeof options === 'function') {
- cb = options
- options = {}
- }
-
- if (!cb) {
- if (typeof Promise !== 'function') {
- throw new TypeError('callback not provided')
- }
-
- return new Promise(function (resolve, reject) {
- isexe(path, options || {}, function (er, is) {
- if (er) {
- reject(er)
- } else {
- resolve(is)
- }
- })
- })
- }
-
- core(path, options || {}, function (er, is) {
- // ignore EACCES because that just means we aren't allowed to run it
- if (er) {
- if (er.code === 'EACCES' || options && options.ignoreErrors) {
- er = null
- is = false
- }
- }
- cb(er, is)
- })
-}
-
-function sync (path, options) {
- // my kingdom for a filtered catch
- try {
- return core.sync(path, options || {})
- } catch (er) {
- if (options && options.ignoreErrors || er.code === 'EACCES') {
- return false
- } else {
- throw er
- }
- }
-}
-
-
-/***/ }),
-/* 743 */,
-/* 744 */,
-/* 745 */,
-/* 746 */,
-/* 747 */
+/***/ 747:
/***/ (function(module) {
module.exports = require("fs");
/***/ }),
-/* 748 */,
-/* 749 */,
-/* 750 */,
-/* 751 */,
-/* 752 */,
-/* 753 */
+
+/***/ 753:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -45343,18 +42690,18 @@ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'defau
var endpoint = __webpack_require__(385);
var universalUserAgent = __webpack_require__(796);
-var isPlainObject = _interopDefault(__webpack_require__(696));
+var isPlainObject = __webpack_require__(701);
var nodeFetch = _interopDefault(__webpack_require__(454));
var requestError = __webpack_require__(463);
-const VERSION = "5.4.2";
+const VERSION = "5.4.14";
function getBufferResponse(response) {
return response.arrayBuffer();
}
function fetchWrapper(requestOptions) {
- if (isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) {
+ if (isPlainObject.isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) {
requestOptions.body = JSON.stringify(requestOptions.body);
}
@@ -45486,8 +42833,8 @@ exports.request = request;
/***/ }),
-/* 754 */,
-/* 755 */
+
+/***/ 755:
/***/ (function(module) {
"use strict";
@@ -45561,69 +42908,15 @@ Promise.bind = function (thisArg, value) {
/***/ }),
-/* 756 */,
-/* 757 */,
-/* 758 */,
-/* 759 */,
-/* 760 */,
-/* 761 */
-/***/ (function(module) {
-
-module.exports = require("zlib");
-/***/ }),
-/* 762 */,
-/* 763 */
+/***/ 761:
/***/ (function(module) {
-module.exports = removeHook
-
-function removeHook (state, name, method) {
- if (!state.registry[name]) {
- return
- }
-
- var index = state.registry[name]
- .map(function (registered) { return registered.orig })
- .indexOf(method)
-
- if (index === -1) {
- return
- }
-
- state.registry[name].splice(index, 1)
-}
-
+module.exports = require("zlib");
/***/ }),
-/* 764 */,
-/* 765 */,
-/* 766 */,
-/* 767 */,
-/* 768 */
-/***/ (function(module) {
-
-"use strict";
-
-module.exports = function (x) {
- var lf = typeof x === 'string' ? '\n' : '\n'.charCodeAt();
- var cr = typeof x === 'string' ? '\r' : '\r'.charCodeAt();
-
- if (x[x.length - 1] === lf) {
- x = x.slice(0, x.length - 1);
- }
-
- if (x[x.length - 1] === cr) {
- x = x.slice(0, x.length - 1);
- }
-
- return x;
-};
-
-/***/ }),
-/* 769 */,
-/* 770 */
+/***/ 770:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -45708,10 +43001,8 @@ function reducePaths(searchPaths) {
}
/***/ }),
-/* 771 */,
-/* 772 */,
-/* 773 */,
-/* 774 */
+
+/***/ 774:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -45724,12 +43015,8 @@ module.exports = {
/***/ }),
-/* 775 */,
-/* 776 */,
-/* 777 */,
-/* 778 */,
-/* 779 */,
-/* 780 */
+
+/***/ 780:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -45962,12 +43249,8 @@ module.exports = function (Promise, apiRejection, tryConvertToPromise,
/***/ }),
-/* 781 */,
-/* 782 */,
-/* 783 */,
-/* 784 */,
-/* 785 */,
-/* 786 */
+
+/***/ 786:
/***/ (function(__unusedmodule, exports) {
"use strict";
@@ -46069,37 +43352,25 @@ var ByteAssertion = function () {
exports.default = ByteAssertion;
/***/ }),
-/* 787 */,
-/* 788 */,
-/* 789 */,
-/* 790 */,
-/* 791 */,
-/* 792 */,
-/* 793 */,
-/* 794 */,
-/* 795 */,
-/* 796 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
+
+/***/ 796:
+/***/ (function(__unusedmodule, exports) {
"use strict";
Object.defineProperty(exports, '__esModule', { value: true });
-function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
-
-var osName = _interopDefault(__webpack_require__(2));
-
function getUserAgent() {
- try {
- return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`;
- } catch (error) {
- if (/wmic os get Caption/.test(error.message)) {
- return "Windows ";
- }
+ if (typeof navigator === "object" && "userAgent" in navigator) {
+ return navigator.userAgent;
+ }
- return "";
+ if (typeof process === "object" && "version" in process) {
+ return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`;
}
+
+ return "";
}
exports.getUserAgent = getUserAgent;
@@ -46107,13 +43378,8 @@ exports.getUserAgent = getUserAgent;
/***/ }),
-/* 797 */,
-/* 798 */,
-/* 799 */,
-/* 800 */,
-/* 801 */,
-/* 802 */,
-/* 803 */
+
+/***/ 803:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -46142,12 +43408,8 @@ var _default = md5;
exports.default = _default;
/***/ }),
-/* 804 */,
-/* 805 */,
-/* 806 */,
-/* 807 */,
-/* 808 */,
-/* 809 */
+
+/***/ 809:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -46319,10 +43581,8 @@ Promise.join = function () {
/***/ }),
-/* 810 */,
-/* 811 */,
-/* 812 */,
-/* 813 */
+
+/***/ 813:
/***/ (function(__unusedmodule, exports) {
"use strict";
@@ -46378,7 +43638,8 @@ exports.createTokenAuth = createTokenAuth;
/***/ }),
-/* 814 */
+
+/***/ 814:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -46568,68 +43829,8 @@ function gotValue(value) {
/***/ }),
-/* 815 */,
-/* 816 */
-/***/ (function(module) {
-
-"use strict";
-
-module.exports = /^#!.*/;
-
-
-/***/ }),
-/* 817 */,
-/* 818 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-module.exports = isexe
-isexe.sync = sync
-
-var fs = __webpack_require__(747)
-
-function checkPathExt (path, options) {
- var pathext = options.pathExt !== undefined ?
- options.pathExt : process.env.PATHEXT
-
- if (!pathext) {
- return true
- }
-
- pathext = pathext.split(';')
- if (pathext.indexOf('') !== -1) {
- return true
- }
- for (var i = 0; i < pathext.length; i++) {
- var p = pathext[i].toLowerCase()
- if (p && path.substr(-p.length).toLowerCase() === p) {
- return true
- }
- }
- return false
-}
-
-function checkStat (stat, path, options) {
- if (!stat.isSymbolicLink() && !stat.isFile()) {
- return false
- }
- return checkPathExt(path, options)
-}
-
-function isexe (path, options, cb) {
- fs.stat(path, function (er, stat) {
- cb(er, er ? false : checkStat(stat, path, options))
- })
-}
-
-function sync (path, options) {
- return checkStat(fs.statSync(path), path, options)
-}
-
-/***/ }),
-/* 819 */,
-/* 820 */,
-/* 821 */
+/***/ 821:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -46643,7 +43844,7 @@ class GithubActionContext {
this.payload = {};
if (process.env.GITHUB_EVENT_PATH) {
if (fs_1.existsSync(process.env.GITHUB_EVENT_PATH)) {
- this.payload = JSON.parse(fs_1.readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: 'utf8' }));
+ this.payload = JSON.parse(fs_1.readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: "utf8" }));
}
else {
const path = process.env.GITHUB_EVENT_PATH;
@@ -46653,13 +43854,13 @@ class GithubActionContext {
}
get repo() {
if (process.env.GITHUB_REPOSITORY) {
- const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/');
+ const [owner, repo] = process.env.GITHUB_REPOSITORY.split("/");
return { owner, repo };
}
if (this.payload.repository) {
return {
owner: this.payload.repository.owner.login,
- repo: this.payload.repository.name
+ repo: this.payload.repository.name,
};
}
throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'");
@@ -46669,12 +43870,8 @@ exports.GithubActionContext = GithubActionContext;
/***/ }),
-/* 822 */,
-/* 823 */,
-/* 824 */,
-/* 825 */,
-/* 826 */,
-/* 827 */
+
+/***/ 827:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -46705,11 +43902,8 @@ function isNumber(number) {
}
/***/ }),
-/* 828 */,
-/* 829 */,
-/* 830 */,
-/* 831 */,
-/* 832 */
+
+/***/ 832:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -46765,21 +43959,15 @@ Promise.prototype.race = function () {
/***/ }),
-/* 833 */,
-/* 834 */,
-/* 835 */
+
+/***/ 835:
/***/ (function(module) {
module.exports = require("url");
/***/ }),
-/* 836 */,
-/* 837 */,
-/* 838 */,
-/* 839 */,
-/* 840 */,
-/* 841 */,
-/* 842 */
+
+/***/ 842:
/***/ (function(__unusedmodule, exports) {
"use strict";
@@ -46789,98 +43977,83 @@ Object.defineProperty(exports, '__esModule', { value: true });
const Endpoints = {
actions: {
+ addSelectedRepoToOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],
cancelWorkflowRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"],
- createOrUpdateSecretForRepo: ["PUT /repos/{owner}/{repo}/actions/secrets/{name}"],
- createRegistrationToken: ["POST /repos/{owner}/{repo}/actions/runners/registration-token", {}, {
- renamed: ["actions", "createRegistrationTokenForRepo"]
- }],
+ createOrUpdateOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}"],
+ createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}"],
createRegistrationTokenForOrg: ["POST /orgs/{org}/actions/runners/registration-token"],
createRegistrationTokenForRepo: ["POST /repos/{owner}/{repo}/actions/runners/registration-token"],
- createRemoveToken: ["POST /repos/{owner}/{repo}/actions/runners/remove-token", {}, {
- renamed: ["actions", "createRemoveTokenForRepo"]
- }],
createRemoveTokenForOrg: ["POST /orgs/{org}/actions/runners/remove-token"],
createRemoveTokenForRepo: ["POST /repos/{owner}/{repo}/actions/runners/remove-token"],
+ createWorkflowDispatch: ["POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches"],
deleteArtifact: ["DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],
- deleteSecretFromRepo: ["DELETE /repos/{owner}/{repo}/actions/secrets/{name}"],
+ deleteOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}"],
+ deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}"],
deleteSelfHostedRunnerFromOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}"],
deleteSelfHostedRunnerFromRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"],
+ deleteWorkflowRun: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"],
deleteWorkflowRunLogs: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],
+ disableSelectedRepositoryGithubActionsOrganization: ["DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}"],
+ disableWorkflow: ["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable"],
downloadArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"],
- downloadWorkflowJobLogs: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"],
+ downloadJobLogsForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"],
downloadWorkflowRunLogs: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],
+ enableSelectedRepositoryGithubActionsOrganization: ["PUT /orgs/{org}/actions/permissions/repositories/{repository_id}"],
+ enableWorkflow: ["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable"],
+ getAllowedActionsOrganization: ["GET /orgs/{org}/actions/permissions/selected-actions"],
+ getAllowedActionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions/selected-actions"],
getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],
- getPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"],
- getSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{name}"],
- getSelfHostedRunner: ["GET /repos/{owner}/{repo}/actions/runners/{runner_id}", {}, {
- renamed: ["actions", "getSelfHostedRunnerForRepo"]
+ getGithubActionsPermissionsOrganization: ["GET /orgs/{org}/actions/permissions"],
+ getGithubActionsPermissionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions"],
+ getJobForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"],
+ getOrgPublicKey: ["GET /orgs/{org}/actions/secrets/public-key"],
+ getOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}"],
+ getRepoPermissions: ["GET /repos/{owner}/{repo}/actions/permissions", {}, {
+ renamed: ["actions", "getGithubActionsPermissionsRepository"]
}],
+ getRepoPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"],
+ getRepoSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"],
getSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}"],
getSelfHostedRunnerForRepo: ["GET /repos/{owner}/{repo}/actions/runners/{runner_id}"],
getWorkflow: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"],
- getWorkflowJob: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"],
getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"],
+ getWorkflowRunUsage: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"],
+ getWorkflowUsage: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"],
listArtifactsForRepo: ["GET /repos/{owner}/{repo}/actions/artifacts"],
- listDownloadsForSelfHostedRunnerApplication: ["GET /repos/{owner}/{repo}/actions/runners/downloads", {}, {
- renamed: ["actions", "listRunnerApplicationsForRepo"]
- }],
listJobsForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"],
- listRepoWorkflowRuns: ["GET /repos/{owner}/{repo}/actions/runs"],
+ listOrgSecrets: ["GET /orgs/{org}/actions/secrets"],
+ listRepoSecrets: ["GET /repos/{owner}/{repo}/actions/secrets"],
listRepoWorkflows: ["GET /repos/{owner}/{repo}/actions/workflows"],
listRunnerApplicationsForOrg: ["GET /orgs/{org}/actions/runners/downloads"],
listRunnerApplicationsForRepo: ["GET /repos/{owner}/{repo}/actions/runners/downloads"],
- listSecretsForRepo: ["GET /repos/{owner}/{repo}/actions/secrets"],
+ listSelectedReposForOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}/repositories"],
+ listSelectedRepositoriesEnabledGithubActionsOrganization: ["GET /orgs/{org}/actions/permissions/repositories"],
listSelfHostedRunnersForOrg: ["GET /orgs/{org}/actions/runners"],
listSelfHostedRunnersForRepo: ["GET /repos/{owner}/{repo}/actions/runners"],
- listWorkflowJobLogs: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs", {}, {
- renamed: ["actions", "downloadWorkflowJobLogs"]
- }],
listWorkflowRunArtifacts: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"],
- listWorkflowRunLogs: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs", {}, {
- renamed: ["actions", "downloadWorkflowRunLogs"]
- }],
listWorkflowRuns: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"],
+ listWorkflowRunsForRepo: ["GET /repos/{owner}/{repo}/actions/runs"],
reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"],
- removeSelfHostedRunner: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}", {}, {
- renamed: ["actions", "deleteSelfHostedRunnerFromRepo"]
- }]
+ removeSelectedRepoFromOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],
+ setAllowedActionsOrganization: ["PUT /orgs/{org}/actions/permissions/selected-actions"],
+ setAllowedActionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"],
+ setGithubActionsPermissionsOrganization: ["PUT /orgs/{org}/actions/permissions"],
+ setGithubActionsPermissionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions"],
+ setSelectedReposForOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"],
+ setSelectedRepositoriesEnabledGithubActionsOrganization: ["PUT /orgs/{org}/actions/permissions/repositories"]
},
activity: {
checkRepoIsStarredByAuthenticatedUser: ["GET /user/starred/{owner}/{repo}"],
- checkStarringRepo: ["GET /user/starred/{owner}/{repo}", {}, {
- renamed: ["activity", "checkRepoIsStarredByAuthenticatedUser"]
- }],
deleteRepoSubscription: ["DELETE /repos/{owner}/{repo}/subscription"],
deleteThreadSubscription: ["DELETE /notifications/threads/{thread_id}/subscription"],
getFeeds: ["GET /feeds"],
getRepoSubscription: ["GET /repos/{owner}/{repo}/subscription"],
getThread: ["GET /notifications/threads/{thread_id}"],
- getThreadSubscription: ["PUT /notifications", {}, {
- renamed: ["activity", "getThreadSubscriptionForAuthenticatedUser"]
- }],
getThreadSubscriptionForAuthenticatedUser: ["GET /notifications/threads/{thread_id}/subscription"],
listEventsForAuthenticatedUser: ["GET /users/{username}/events"],
- listEventsForOrg: ["GET /users/{username}/events/orgs/{org}", {}, {
- renamed: ["activity", "listOrgEventsForAuthenticatedUser"]
- }],
- listEventsForUser: ["GET /users/{username}/events", {}, {
- renamed: ["activity", "listEventsForAuthenticatedUser"]
- }],
- listFeeds: ["GET /feeds", {}, {
- renamed: ["activity", "getFeeds"]
- }],
- listNotifications: ["GET /notifications", {}, {
- renamed: ["activity", "listNotificationsForAuthenticatedUser"]
- }],
listNotificationsForAuthenticatedUser: ["GET /notifications"],
- listNotificationsForRepo: ["GET /repos/{owner}/{repo}/notifications", {}, {
- renamed: ["activity", "listRepoNotificationsForAuthenticatedUser"]
- }],
listOrgEventsForAuthenticatedUser: ["GET /users/{username}/events/orgs/{org}"],
listPublicEvents: ["GET /events"],
- listPublicEventsForOrg: ["GET /orgs/{org}/events", {}, {
- renamed: ["activity", "listPublicOrgEvents"]
- }],
listPublicEventsForRepoNetwork: ["GET /networks/{owner}/{repo}/events"],
listPublicEventsForUser: ["GET /users/{username}/events/public"],
listPublicOrgEvents: ["GET /orgs/{org}/events"],
@@ -46894,38 +44067,16 @@ const Endpoints = {
listStargazersForRepo: ["GET /repos/{owner}/{repo}/stargazers"],
listWatchedReposForAuthenticatedUser: ["GET /user/subscriptions"],
listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"],
- markAsRead: ["PUT /notifications", {}, {
- renamed: ["activity", "markNotificationsAsRead"]
- }],
markNotificationsAsRead: ["PUT /notifications"],
- markNotificationsAsReadForRepo: ["PUT /repos/{owner}/{repo}/notifications", {}, {
- renamed: ["activity", "markRepoNotificationsAsRead"]
- }],
markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"],
markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"],
setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"],
setThreadSubscription: ["PUT /notifications/threads/{thread_id}/subscription"],
- starRepo: ["PUT /user/starred/{owner}/{repo}", {}, {
- renamed: ["activity", "starRepoForAuthenticatedUser"]
- }],
starRepoForAuthenticatedUser: ["PUT /user/starred/{owner}/{repo}"],
- unstarRepo: ["DELETE /user/starred/{owner}/{repo}", {}, {
- renamed: ["activity", "unstarRepoForAuthenticatedUser"]
- }],
unstarRepoForAuthenticatedUser: ["DELETE /user/starred/{owner}/{repo}"]
},
apps: {
- addRepoToInstallation: ["PUT /user/installations/{installation_id}/repositories/{repository_id}", {
- mediaType: {
- previews: ["machine-man"]
- }
- }],
- checkAccountIsAssociatedWithAny: ["GET /marketplace_listing/accounts/{account_id}", {}, {
- renamed: ["apps", "getSubscriptionPlanForAccount"]
- }],
- checkAccountIsAssociatedWithAnyStubbed: ["GET /marketplace_listing/stubbed/accounts/{account_id}", {}, {
- renamed: ["apps", "getSubscriptionPlanForAccountStubbed"]
- }],
+ addRepoToInstallation: ["PUT /user/installations/{installation_id}/repositories/{repository_id}"],
checkToken: ["POST /applications/{client_id}/token"],
createContentAttachment: ["POST /content_references/{content_reference_id}/attachments", {
mediaType: {
@@ -46933,158 +44084,72 @@ const Endpoints = {
}
}],
createFromManifest: ["POST /app-manifests/{code}/conversions"],
- createInstallationToken: ["POST /app/installations/{installation_id}/access_tokens", {
- mediaType: {
- previews: ["machine-man"]
- }
- }],
+ createInstallationAccessToken: ["POST /app/installations/{installation_id}/access_tokens"],
deleteAuthorization: ["DELETE /applications/{client_id}/grant"],
- deleteInstallation: ["DELETE /app/installations/{installation_id}", {
- mediaType: {
- previews: ["machine-man"]
- }
- }],
+ deleteInstallation: ["DELETE /app/installations/{installation_id}"],
deleteToken: ["DELETE /applications/{client_id}/token"],
- getAuthenticated: ["GET /app", {
- mediaType: {
- previews: ["machine-man"]
- }
- }],
- getBySlug: ["GET /apps/{app_slug}", {
- mediaType: {
- previews: ["machine-man"]
- }
- }],
- getInstallation: ["GET /app/installations/{installation_id}", {
- mediaType: {
- previews: ["machine-man"]
- }
- }],
- getOrgInstallation: ["GET /orgs/{org}/installation", {
- mediaType: {
- previews: ["machine-man"]
- }
- }],
- getRepoInstallation: ["GET /repos/{owner}/{repo}/installation", {
- mediaType: {
- previews: ["machine-man"]
- }
- }],
+ getAuthenticated: ["GET /app"],
+ getBySlug: ["GET /apps/{app_slug}"],
+ getInstallation: ["GET /app/installations/{installation_id}"],
+ getOrgInstallation: ["GET /orgs/{org}/installation"],
+ getRepoInstallation: ["GET /repos/{owner}/{repo}/installation"],
getSubscriptionPlanForAccount: ["GET /marketplace_listing/accounts/{account_id}"],
getSubscriptionPlanForAccountStubbed: ["GET /marketplace_listing/stubbed/accounts/{account_id}"],
- getUserInstallation: ["GET /users/{username}/installation", {
- mediaType: {
- previews: ["machine-man"]
- }
- }],
+ getUserInstallation: ["GET /users/{username}/installation"],
+ getWebhookConfigForApp: ["GET /app/hook/config"],
listAccountsForPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts"],
listAccountsForPlanStubbed: ["GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"],
- listAccountsUserOrOrgOnPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts", {}, {
- renamed: ["apps", "listAccountsForPlan"]
- }],
- listAccountsUserOrOrgOnPlanStubbed: ["GET /marketplace_listing/stubbed/plans/{plan_id}/accounts", {}, {
- renamed: ["apps", "listAccountsForPlanStubbed"]
- }],
- listInstallationReposForAuthenticatedUser: ["GET /user/installations/{installation_id}/repositories", {
- mediaType: {
- previews: ["machine-man"]
- }
- }],
- listInstallations: ["GET /app/installations", {
- mediaType: {
- previews: ["machine-man"]
- }
- }],
- listInstallationsForAuthenticatedUser: ["GET /user/installations", {
- mediaType: {
- previews: ["machine-man"]
- }
- }],
- listMarketplacePurchasesForAuthenticatedUser: ["GET /user/marketplace_purchases", {}, {
- renamed: ["apps", "listSubscriptionsForAuthenticatedUser"]
- }],
- listMarketplacePurchasesForAuthenticatedUserStubbed: ["GET /user/marketplace_purchases/stubbed", {}, {
- renamed: ["apps", "listSubscriptionsForAuthenticatedUserStubbed"]
- }],
+ listInstallationReposForAuthenticatedUser: ["GET /user/installations/{installation_id}/repositories"],
+ listInstallations: ["GET /app/installations"],
+ listInstallationsForAuthenticatedUser: ["GET /user/installations"],
listPlans: ["GET /marketplace_listing/plans"],
listPlansStubbed: ["GET /marketplace_listing/stubbed/plans"],
- listRepos: ["GET /installation/repositories", {
- mediaType: {
- previews: ["machine-man"]
- }
- }],
+ listReposAccessibleToInstallation: ["GET /installation/repositories"],
listSubscriptionsForAuthenticatedUser: ["GET /user/marketplace_purchases"],
listSubscriptionsForAuthenticatedUserStubbed: ["GET /user/marketplace_purchases/stubbed"],
- removeRepoFromInstallation: ["DELETE /user/installations/{installation_id}/repositories/{repository_id}", {
- mediaType: {
- previews: ["machine-man"]
- }
- }],
+ removeRepoFromInstallation: ["DELETE /user/installations/{installation_id}/repositories/{repository_id}"],
resetToken: ["PATCH /applications/{client_id}/token"],
- revokeInstallationToken: ["DELETE /installation/token"],
+ revokeInstallationAccessToken: ["DELETE /installation/token"],
+ scopeToken: ["POST /applications/{client_id}/token/scoped"],
suspendInstallation: ["PUT /app/installations/{installation_id}/suspended"],
- unsuspendInstallation: ["DELETE /app/installations/{installation_id}/suspended"]
+ unsuspendInstallation: ["DELETE /app/installations/{installation_id}/suspended"],
+ updateWebhookConfigForApp: ["PATCH /app/hook/config"]
+ },
+ billing: {
+ getGithubActionsBillingOrg: ["GET /orgs/{org}/settings/billing/actions"],
+ getGithubActionsBillingUser: ["GET /users/{username}/settings/billing/actions"],
+ getGithubPackagesBillingOrg: ["GET /orgs/{org}/settings/billing/packages"],
+ getGithubPackagesBillingUser: ["GET /users/{username}/settings/billing/packages"],
+ getSharedStorageBillingOrg: ["GET /orgs/{org}/settings/billing/shared-storage"],
+ getSharedStorageBillingUser: ["GET /users/{username}/settings/billing/shared-storage"]
},
checks: {
- create: ["POST /repos/{owner}/{repo}/check-runs", {
- mediaType: {
- previews: ["antiope"]
- }
- }],
- createSuite: ["POST /repos/{owner}/{repo}/check-suites", {
- mediaType: {
- previews: ["antiope"]
- }
- }],
- get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}", {
- mediaType: {
- previews: ["antiope"]
- }
- }],
- getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}", {
- mediaType: {
- previews: ["antiope"]
- }
- }],
- listAnnotations: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations", {
- mediaType: {
- previews: ["antiope"]
- }
- }],
- listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs", {
- mediaType: {
- previews: ["antiope"]
- }
- }],
- listForSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs", {
- mediaType: {
- previews: ["antiope"]
- }
- }],
- listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites", {
- mediaType: {
- previews: ["antiope"]
- }
- }],
- rerequestSuite: ["POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest", {
- mediaType: {
- previews: ["antiope"]
- }
- }],
- setSuitesPreferences: ["PATCH /repos/{owner}/{repo}/check-suites/preferences", {
- mediaType: {
- previews: ["antiope"]
- }
- }],
- update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}", {
- mediaType: {
- previews: ["antiope"]
- }
- }]
+ create: ["POST /repos/{owner}/{repo}/check-runs"],
+ createSuite: ["POST /repos/{owner}/{repo}/check-suites"],
+ get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"],
+ getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"],
+ listAnnotations: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations"],
+ listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"],
+ listForSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs"],
+ listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"],
+ rerequestSuite: ["POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest"],
+ setSuitesPreferences: ["PATCH /repos/{owner}/{repo}/check-suites/preferences"],
+ update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"]
},
codeScanning: {
- getAlert: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_id}"],
- listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"]
+ deleteAnalysis: ["DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}"],
+ getAlert: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}", {}, {
+ renamedParameters: {
+ alert_id: "alert_number"
+ }
+ }],
+ getAnalysis: ["GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}"],
+ getSarif: ["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"],
+ listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"],
+ listAlertsInstances: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances"],
+ listRecentAnalyses: ["GET /repos/{owner}/{repo}/code-scanning/analyses"],
+ updateAlert: ["PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}"],
+ uploadSarif: ["POST /repos/{owner}/{repo}/code-scanning/sarifs"]
},
codesOfConduct: {
getAllCodesOfConduct: ["GET /codes_of_conduct", {
@@ -47101,18 +44166,21 @@ const Endpoints = {
mediaType: {
previews: ["scarlet-witch"]
}
- }],
- listConductCodes: ["GET /codes_of_conduct", {
- mediaType: {
- previews: ["scarlet-witch"]
- }
- }, {
- renamed: ["codesOfConduct", "getAllCodesOfConduct"]
}]
},
emojis: {
get: ["GET /emojis"]
},
+ enterpriseAdmin: {
+ disableSelectedOrganizationGithubActionsEnterprise: ["DELETE /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"],
+ enableSelectedOrganizationGithubActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"],
+ getAllowedActionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/selected-actions"],
+ getGithubActionsPermissionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions"],
+ listSelectedOrganizationsEnabledGithubActionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/organizations"],
+ setAllowedActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/selected-actions"],
+ setGithubActionsPermissionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions"],
+ setSelectedOrganizationsEnabledGithubActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/organizations"]
+ },
gists: {
checkIsStarred: ["GET /gists/{gist_id}/star"],
create: ["POST /gists"],
@@ -47129,9 +44197,6 @@ const Endpoints = {
listForUser: ["GET /users/{username}/gists"],
listForks: ["GET /gists/{gist_id}/forks"],
listPublic: ["GET /gists/public"],
- listPublicForUser: ["GET /users/{username}/gists", {}, {
- renamed: ["gists", "listForUser"]
- }],
listStarred: ["GET /gists/starred"],
star: ["PUT /gists/{gist_id}/star"],
unstar: ["DELETE /gists/{gist_id}/star"],
@@ -47154,45 +44219,33 @@ const Endpoints = {
updateRef: ["PATCH /repos/{owner}/{repo}/git/refs/{ref}"]
},
gitignore: {
- getTemplate: ["GET /gitignore/templates/{name}"],
- listTemplates: ["GET /gitignore/templates"]
+ getAllTemplates: ["GET /gitignore/templates"],
+ getTemplate: ["GET /gitignore/templates/{name}"]
},
interactions: {
- addOrUpdateRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits", {
- mediaType: {
- previews: ["sombra"]
- }
- }],
- addOrUpdateRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits", {
- mediaType: {
- previews: ["sombra"]
- }
- }],
- getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits", {
- mediaType: {
- previews: ["sombra"]
- }
- }],
- getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits", {
- mediaType: {
- previews: ["sombra"]
- }
+ getRestrictionsForAuthenticatedUser: ["GET /user/interaction-limits"],
+ getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits"],
+ getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits"],
+ getRestrictionsForYourPublicRepos: ["GET /user/interaction-limits", {}, {
+ renamed: ["interactions", "getRestrictionsForAuthenticatedUser"]
}],
- removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits", {
- mediaType: {
- previews: ["sombra"]
- }
+ removeRestrictionsForAuthenticatedUser: ["DELETE /user/interaction-limits"],
+ removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits"],
+ removeRestrictionsForRepo: ["DELETE /repos/{owner}/{repo}/interaction-limits"],
+ removeRestrictionsForYourPublicRepos: ["DELETE /user/interaction-limits", {}, {
+ renamed: ["interactions", "removeRestrictionsForAuthenticatedUser"]
}],
- removeRestrictionsForRepo: ["DELETE /repos/{owner}/{repo}/interaction-limits", {
- mediaType: {
- previews: ["sombra"]
- }
+ setRestrictionsForAuthenticatedUser: ["PUT /user/interaction-limits"],
+ setRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits"],
+ setRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits"],
+ setRestrictionsForYourPublicRepos: ["PUT /user/interaction-limits", {}, {
+ renamed: ["interactions", "setRestrictionsForAuthenticatedUser"]
}]
},
issues: {
addAssignees: ["POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"],
addLabels: ["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"],
- checkAssignee: ["GET /repos/{owner}/{repo}/assignees/{assignee}"],
+ checkUserCanBeAssigned: ["GET /repos/{owner}/{repo}/assignees/{assignee}"],
create: ["POST /repos/{owner}/{repo}/issues"],
createComment: ["POST /repos/{owner}/{repo}/issues/{issue_number}/comments"],
createLabel: ["POST /repos/{owner}/{repo}/labels"],
@@ -47222,18 +44275,12 @@ const Endpoints = {
listLabelsForMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"],
listLabelsForRepo: ["GET /repos/{owner}/{repo}/labels"],
listLabelsOnIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/labels"],
- listMilestonesForRepo: ["GET /repos/{owner}/{repo}/milestones"],
+ listMilestones: ["GET /repos/{owner}/{repo}/milestones"],
lock: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"],
removeAllLabels: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"],
removeAssignees: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"],
removeLabel: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"],
- removeLabels: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels", {}, {
- renamed: ["issues", "removeAllLabels"]
- }],
- replaceAllLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"],
- replaceLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels", {}, {
- renamed: ["issues", "replaceAllLabels"]
- }],
+ setLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"],
unlock: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"],
update: ["PATCH /repos/{owner}/{repo}/issues/{issue_number}"],
updateComment: ["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"],
@@ -47242,8 +44289,8 @@ const Endpoints = {
},
licenses: {
get: ["GET /licenses/{license}"],
- getForRepo: ["GET /repos/{owner}/{repo}/license"],
- listCommonlyUsed: ["GET /licenses"]
+ getAllCommonlyUsed: ["GET /licenses"],
+ getForRepo: ["GET /repos/{owner}/{repo}/license"]
},
markdown: {
render: ["POST /markdown"],
@@ -47254,7 +44301,10 @@ const Endpoints = {
}]
},
meta: {
- get: ["GET /meta"]
+ get: ["GET /meta"],
+ getOctocat: ["GET /octocat"],
+ getZen: ["GET /zen"],
+ root: ["GET /"]
},
migrations: {
cancelImport: ["DELETE /repos/{owner}/{repo}/import"],
@@ -47279,7 +44329,7 @@ const Endpoints = {
}
}],
getCommitAuthors: ["GET /repos/{owner}/{repo}/import/authors"],
- getImportProgress: ["GET /repos/{owner}/{repo}/import"],
+ getImportStatus: ["GET /repos/{owner}/{repo}/import"],
getLargeFiles: ["GET /repos/{owner}/{repo}/import/large_files"],
getStatusForAuthenticatedUser: ["GET /user/migrations/{migration_id}", {
mediaType: {
@@ -47306,7 +44356,7 @@ const Endpoints = {
previews: ["wyandotte"]
}
}],
- listReposForUser: ["GET /user/{migration_id}/repositories", {
+ listReposForUser: ["GET /user/migrations/{migration_id}/repositories", {
mediaType: {
previews: ["wyandotte"]
}
@@ -47329,45 +44379,64 @@ const Endpoints = {
updateImport: ["PATCH /repos/{owner}/{repo}/import"]
},
orgs: {
- addOrUpdateMembership: ["PUT /orgs/{org}/memberships/{username}"],
blockUser: ["PUT /orgs/{org}/blocks/{username}"],
+ cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"],
checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"],
- checkMembership: ["GET /orgs/{org}/members/{username}"],
- checkPublicMembership: ["GET /orgs/{org}/public_members/{username}"],
- concealMembership: ["DELETE /orgs/{org}/public_members/{username}"],
+ checkMembershipForUser: ["GET /orgs/{org}/members/{username}"],
+ checkPublicMembershipForUser: ["GET /orgs/{org}/public_members/{username}"],
convertMemberToOutsideCollaborator: ["PUT /orgs/{org}/outside_collaborators/{username}"],
- createHook: ["POST /orgs/{org}/hooks"],
createInvitation: ["POST /orgs/{org}/invitations"],
- deleteHook: ["DELETE /orgs/{org}/hooks/{hook_id}"],
+ createWebhook: ["POST /orgs/{org}/hooks"],
+ deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"],
get: ["GET /orgs/{org}"],
- getHook: ["GET /orgs/{org}/hooks/{hook_id}"],
- getMembership: ["GET /orgs/{org}/memberships/{username}"],
getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"],
+ getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"],
+ getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"],
+ getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"],
list: ["GET /organizations"],
+ listAppInstallations: ["GET /orgs/{org}/installations"],
listBlockedUsers: ["GET /orgs/{org}/blocks"],
+ listFailedInvitations: ["GET /orgs/{org}/failed_invitations"],
listForAuthenticatedUser: ["GET /user/orgs"],
listForUser: ["GET /users/{username}/orgs"],
- listHooks: ["GET /orgs/{org}/hooks"],
- listInstallations: ["GET /orgs/{org}/installations", {
- mediaType: {
- previews: ["machine-man"]
- }
- }],
listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"],
listMembers: ["GET /orgs/{org}/members"],
- listMemberships: ["GET /user/memberships/orgs"],
+ listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"],
listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"],
listPendingInvitations: ["GET /orgs/{org}/invitations"],
listPublicMembers: ["GET /orgs/{org}/public_members"],
- pingHook: ["POST /orgs/{org}/hooks/{hook_id}/pings"],
- publicizeMembership: ["PUT /orgs/{org}/public_members/{username}"],
+ listWebhooks: ["GET /orgs/{org}/hooks"],
+ pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"],
removeMember: ["DELETE /orgs/{org}/members/{username}"],
- removeMembership: ["DELETE /orgs/{org}/memberships/{username}"],
+ removeMembershipForUser: ["DELETE /orgs/{org}/memberships/{username}"],
removeOutsideCollaborator: ["DELETE /orgs/{org}/outside_collaborators/{username}"],
+ removePublicMembershipForAuthenticatedUser: ["DELETE /orgs/{org}/public_members/{username}"],
+ setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"],
+ setPublicMembershipForAuthenticatedUser: ["PUT /orgs/{org}/public_members/{username}"],
unblockUser: ["DELETE /orgs/{org}/blocks/{username}"],
update: ["PATCH /orgs/{org}"],
- updateHook: ["PATCH /orgs/{org}/hooks/{hook_id}"],
- updateMembership: ["PATCH /user/memberships/orgs/{org}"]
+ updateMembershipForAuthenticatedUser: ["PATCH /user/memberships/orgs/{org}"],
+ updateWebhook: ["PATCH /orgs/{org}/hooks/{hook_id}"],
+ updateWebhookConfigForOrg: ["PATCH /orgs/{org}/hooks/{hook_id}/config"]
+ },
+ packages: {
+ deletePackageForAuthenticatedUser: ["DELETE /user/packages/{package_type}/{package_name}"],
+ deletePackageForOrg: ["DELETE /orgs/{org}/packages/{package_type}/{package_name}"],
+ deletePackageVersionForAuthenticatedUser: ["DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],
+ deletePackageVersionForOrg: ["DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],
+ getAllPackageVersionsForAPackageOwnedByAnOrg: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions"],
+ getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions"],
+ getAllPackageVersionsForPackageOwnedByUser: ["GET /users/{username}/packages/{package_type}/{package_name}/versions"],
+ getPackageForAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}"],
+ getPackageForOrganization: ["GET /orgs/{org}/packages/{package_type}/{package_name}"],
+ getPackageForUser: ["GET /users/{username}/packages/{package_type}/{package_name}"],
+ getPackageVersionForAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],
+ getPackageVersionForOrganization: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],
+ getPackageVersionForUser: ["GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"],
+ restorePackageForAuthenticatedUser: ["POST /user/packages/{package_type}/{package_name}/restore"],
+ restorePackageForOrg: ["POST /orgs/{org}/packages/{package_type}/{package_name}/restore"],
+ restorePackageVersionForAuthenticatedUser: ["POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"],
+ restorePackageVersionForOrg: ["POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"]
},
projects: {
addCollaborator: ["PUT /projects/{project_id}/collaborators/{username}", {
@@ -47430,6 +44499,11 @@ const Endpoints = {
previews: ["inertia"]
}
}],
+ getPermissionForUser: ["GET /projects/{project_id}/collaborators/{username}/permission", {
+ mediaType: {
+ previews: ["inertia"]
+ }
+ }],
listCards: ["GET /projects/columns/{column_id}/cards", {
mediaType: {
previews: ["inertia"]
@@ -47475,11 +44549,6 @@ const Endpoints = {
previews: ["inertia"]
}
}],
- reviewUserPermissionLevel: ["GET /projects/{project_id}/collaborators/{username}/permission", {
- mediaType: {
- previews: ["inertia"]
- }
- }],
update: ["PATCH /projects/{project_id}", {
mediaType: {
previews: ["inertia"]
@@ -47499,26 +44568,26 @@ const Endpoints = {
pulls: {
checkIfMerged: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"],
create: ["POST /repos/{owner}/{repo}/pulls"],
- createComment: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments"],
+ createReplyForReviewComment: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies"],
createReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],
- createReviewCommentReply: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies"],
- createReviewRequest: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],
- deleteComment: ["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}"],
+ createReviewComment: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments"],
deletePendingReview: ["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],
- deleteReviewRequest: ["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],
+ deleteReviewComment: ["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}"],
dismissReview: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals"],
get: ["GET /repos/{owner}/{repo}/pulls/{pull_number}"],
- getComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"],
- getCommentsForReview: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments"],
getReview: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],
+ getReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"],
list: ["GET /repos/{owner}/{repo}/pulls"],
- listComments: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"],
- listCommentsForRepo: ["GET /repos/{owner}/{repo}/pulls/comments"],
+ listCommentsForReview: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments"],
listCommits: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"],
listFiles: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"],
- listReviewRequests: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],
+ listRequestedReviewers: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],
+ listReviewComments: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"],
+ listReviewCommentsForRepo: ["GET /repos/{owner}/{repo}/pulls/comments"],
listReviews: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],
merge: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"],
+ removeRequestedReviewers: ["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],
+ requestReviewers: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],
submitReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events"],
update: ["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"],
updateBranch: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch", {
@@ -47526,8 +44595,8 @@ const Endpoints = {
previews: ["lydian"]
}
}],
- updateComment: ["PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}"],
- updateReview: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"]
+ updateReview: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],
+ updateReviewComment: ["PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}"]
},
rateLimit: {
get: ["GET /rate_limit"]
@@ -47563,13 +44632,6 @@ const Endpoints = {
previews: ["squirrel-girl"]
}
}],
- delete: ["DELETE /reactions/{reaction_id}", {
- mediaType: {
- previews: ["squirrel-girl"]
- }
- }, {
- renamed: ["reactions", "deleteLegacy"]
- }],
deleteForCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}", {
mediaType: {
previews: ["squirrel-girl"]
@@ -47605,7 +44667,7 @@ const Endpoints = {
previews: ["squirrel-girl"]
}
}, {
- deprecated: "octokit.reactions.deleteLegacy() is deprecated, see https://developer.github.com/v3/reactions/#delete-a-reaction-legacy"
+ deprecated: "octokit.reactions.deleteLegacy() is deprecated, see https://docs.github.com/v3/reactions/#delete-a-reaction-legacy"
}],
listForCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}/reactions", {
mediaType: {
@@ -47640,24 +44702,17 @@ const Endpoints = {
},
repos: {
acceptInvitation: ["PATCH /user/repository_invitations/{invitation_id}"],
- addCollaborator: ["PUT /repos/{owner}/{repo}/collaborators/{username}"],
- addDeployKey: ["POST /repos/{owner}/{repo}/keys"],
- addProtectedBranchAdminEnforcement: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],
- addProtectedBranchAppRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, {
+ addAppAccessRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, {
mapToData: "apps"
}],
- addProtectedBranchRequiredSignatures: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures", {
- mediaType: {
- previews: ["zzzax"]
- }
- }],
- addProtectedBranchRequiredStatusChecksContexts: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, {
+ addCollaborator: ["PUT /repos/{owner}/{repo}/collaborators/{username}"],
+ addStatusCheckContexts: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, {
mapToData: "contexts"
}],
- addProtectedBranchTeamRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, {
+ addTeamAccessRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, {
mapToData: "teams"
}],
- addProtectedBranchUserRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, {
+ addUserAccessRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, {
mapToData: "users"
}],
checkCollaborator: ["GET /repos/{owner}/{repo}/collaborators/{username}"],
@@ -47668,69 +44723,91 @@ const Endpoints = {
}],
compareCommits: ["GET /repos/{owner}/{repo}/compare/{base}...{head}"],
createCommitComment: ["POST /repos/{owner}/{repo}/commits/{commit_sha}/comments"],
+ createCommitSignatureProtection: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures", {
+ mediaType: {
+ previews: ["zzzax"]
+ }
+ }],
+ createCommitStatus: ["POST /repos/{owner}/{repo}/statuses/{sha}"],
+ createDeployKey: ["POST /repos/{owner}/{repo}/keys"],
createDeployment: ["POST /repos/{owner}/{repo}/deployments"],
createDeploymentStatus: ["POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],
createDispatchEvent: ["POST /repos/{owner}/{repo}/dispatches"],
createForAuthenticatedUser: ["POST /user/repos"],
createFork: ["POST /repos/{owner}/{repo}/forks"],
- createHook: ["POST /repos/{owner}/{repo}/hooks"],
createInOrg: ["POST /orgs/{org}/repos"],
- createOrUpdateFile: ["PUT /repos/{owner}/{repo}/contents/{path}"],
+ createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"],
+ createPagesSite: ["POST /repos/{owner}/{repo}/pages", {
+ mediaType: {
+ previews: ["switcheroo"]
+ }
+ }],
createRelease: ["POST /repos/{owner}/{repo}/releases"],
- createStatus: ["POST /repos/{owner}/{repo}/statuses/{sha}"],
createUsingTemplate: ["POST /repos/{template_owner}/{template_repo}/generate", {
mediaType: {
previews: ["baptiste"]
}
}],
+ createWebhook: ["POST /repos/{owner}/{repo}/hooks"],
declineInvitation: ["DELETE /user/repository_invitations/{invitation_id}"],
delete: ["DELETE /repos/{owner}/{repo}"],
+ deleteAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],
+ deleteAdminBranchProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],
+ deleteBranchProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection"],
deleteCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}"],
+ deleteCommitSignatureProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures", {
+ mediaType: {
+ previews: ["zzzax"]
+ }
+ }],
+ deleteDeployKey: ["DELETE /repos/{owner}/{repo}/keys/{key_id}"],
deleteDeployment: ["DELETE /repos/{owner}/{repo}/deployments/{deployment_id}"],
- deleteDownload: ["DELETE /repos/{owner}/{repo}/downloads/{download_id}"],
deleteFile: ["DELETE /repos/{owner}/{repo}/contents/{path}"],
- deleteHook: ["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"],
deleteInvitation: ["DELETE /repos/{owner}/{repo}/invitations/{invitation_id}"],
+ deletePagesSite: ["DELETE /repos/{owner}/{repo}/pages", {
+ mediaType: {
+ previews: ["switcheroo"]
+ }
+ }],
+ deletePullRequestReviewProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],
deleteRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}"],
deleteReleaseAsset: ["DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}"],
+ deleteWebhook: ["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"],
disableAutomatedSecurityFixes: ["DELETE /repos/{owner}/{repo}/automated-security-fixes", {
mediaType: {
previews: ["london"]
}
}],
- disablePagesSite: ["DELETE /repos/{owner}/{repo}/pages", {
- mediaType: {
- previews: ["switcheroo"]
- }
- }],
disableVulnerabilityAlerts: ["DELETE /repos/{owner}/{repo}/vulnerability-alerts", {
mediaType: {
previews: ["dorian"]
}
}],
+ downloadArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}", {}, {
+ renamed: ["repos", "downloadZipballArchive"]
+ }],
+ downloadTarballArchive: ["GET /repos/{owner}/{repo}/tarball/{ref}"],
+ downloadZipballArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}"],
enableAutomatedSecurityFixes: ["PUT /repos/{owner}/{repo}/automated-security-fixes", {
mediaType: {
previews: ["london"]
}
}],
- enablePagesSite: ["POST /repos/{owner}/{repo}/pages", {
- mediaType: {
- previews: ["switcheroo"]
- }
- }],
enableVulnerabilityAlerts: ["PUT /repos/{owner}/{repo}/vulnerability-alerts", {
mediaType: {
previews: ["dorian"]
}
}],
get: ["GET /repos/{owner}/{repo}"],
+ getAccessRestrictions: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],
+ getAdminBranchProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],
+ getAllStatusCheckContexts: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts"],
getAllTopics: ["GET /repos/{owner}/{repo}/topics", {
mediaType: {
previews: ["mercy"]
}
}],
getAppsWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps"],
- getArchiveLink: ["GET /repos/{owner}/{repo}/{archive_format}/{ref}"],
getBranch: ["GET /repos/{owner}/{repo}/branches/{branch}"],
getBranchProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection"],
getClones: ["GET /repos/{owner}/{repo}/traffic/clones"],
@@ -47740,41 +44817,36 @@ const Endpoints = {
getCommit: ["GET /repos/{owner}/{repo}/commits/{ref}"],
getCommitActivityStats: ["GET /repos/{owner}/{repo}/stats/commit_activity"],
getCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}"],
- getContents: ["GET /repos/{owner}/{repo}/contents/{path}"],
+ getCommitSignatureProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures", {
+ mediaType: {
+ previews: ["zzzax"]
+ }
+ }],
+ getCommunityProfileMetrics: ["GET /repos/{owner}/{repo}/community/profile"],
+ getContent: ["GET /repos/{owner}/{repo}/contents/{path}"],
getContributorsStats: ["GET /repos/{owner}/{repo}/stats/contributors"],
getDeployKey: ["GET /repos/{owner}/{repo}/keys/{key_id}"],
getDeployment: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}"],
getDeploymentStatus: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}"],
- getDownload: ["GET /repos/{owner}/{repo}/downloads/{download_id}"],
- getHook: ["GET /repos/{owner}/{repo}/hooks/{hook_id}"],
getLatestPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/latest"],
getLatestRelease: ["GET /repos/{owner}/{repo}/releases/latest"],
getPages: ["GET /repos/{owner}/{repo}/pages"],
getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"],
getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"],
- getProtectedBranchAdminEnforcement: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],
- getProtectedBranchPullRequestReviewEnforcement: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],
- getProtectedBranchRequiredSignatures: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures", {
- mediaType: {
- previews: ["zzzax"]
- }
- }],
- getProtectedBranchRequiredStatusChecks: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],
- getProtectedBranchRestrictions: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],
+ getPullRequestReviewProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],
getPunchCardStats: ["GET /repos/{owner}/{repo}/stats/punch_card"],
getReadme: ["GET /repos/{owner}/{repo}/readme"],
getRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}"],
getReleaseAsset: ["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"],
getReleaseByTag: ["GET /repos/{owner}/{repo}/releases/tags/{tag}"],
+ getStatusChecksProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],
getTeamsWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams"],
getTopPaths: ["GET /repos/{owner}/{repo}/traffic/popular/paths"],
getTopReferrers: ["GET /repos/{owner}/{repo}/traffic/popular/referrers"],
getUsersWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users"],
getViews: ["GET /repos/{owner}/{repo}/traffic/views"],
- list: ["GET /user/repos", {}, {
- renamed: ["repos", "listForAuthenticatedUser"]
- }],
- listAssetsForRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}/assets"],
+ getWebhook: ["GET /repos/{owner}/{repo}/hooks/{hook_id}"],
+ getWebhookConfigForRepo: ["GET /repos/{owner}/{repo}/hooks/{hook_id}/config"],
listBranches: ["GET /repos/{owner}/{repo}/branches"],
listBranchesForHeadCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head", {
mediaType: {
@@ -47783,104 +44855,84 @@ const Endpoints = {
}],
listCollaborators: ["GET /repos/{owner}/{repo}/collaborators"],
listCommentsForCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/comments"],
- listCommitComments: ["GET /repos/{owner}/{repo}/comments"],
+ listCommitCommentsForRepo: ["GET /repos/{owner}/{repo}/comments"],
+ listCommitStatusesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/statuses"],
listCommits: ["GET /repos/{owner}/{repo}/commits"],
listContributors: ["GET /repos/{owner}/{repo}/contributors"],
listDeployKeys: ["GET /repos/{owner}/{repo}/keys"],
listDeploymentStatuses: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],
listDeployments: ["GET /repos/{owner}/{repo}/deployments"],
- listDownloads: ["GET /repos/{owner}/{repo}/downloads"],
listForAuthenticatedUser: ["GET /user/repos"],
listForOrg: ["GET /orgs/{org}/repos"],
listForUser: ["GET /users/{username}/repos"],
listForks: ["GET /repos/{owner}/{repo}/forks"],
- listHooks: ["GET /repos/{owner}/{repo}/hooks"],
listInvitations: ["GET /repos/{owner}/{repo}/invitations"],
listInvitationsForAuthenticatedUser: ["GET /user/repository_invitations"],
listLanguages: ["GET /repos/{owner}/{repo}/languages"],
listPagesBuilds: ["GET /repos/{owner}/{repo}/pages/builds"],
- listProtectedBranchRequiredStatusChecksContexts: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts"],
listPublic: ["GET /repositories"],
listPullRequestsAssociatedWithCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls", {
mediaType: {
previews: ["groot"]
}
}],
+ listReleaseAssets: ["GET /repos/{owner}/{repo}/releases/{release_id}/assets"],
listReleases: ["GET /repos/{owner}/{repo}/releases"],
- listStatusesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/statuses"],
listTags: ["GET /repos/{owner}/{repo}/tags"],
listTeams: ["GET /repos/{owner}/{repo}/teams"],
- listTopics: ["GET /repos/{owner}/{repo}/topics", {
- mediaType: {
- previews: ["mercy"]
- }
- }, {
- renamed: ["repos", "getAllTopics"]
- }],
+ listWebhooks: ["GET /repos/{owner}/{repo}/hooks"],
merge: ["POST /repos/{owner}/{repo}/merges"],
- pingHook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"],
- removeBranchProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection"],
- removeCollaborator: ["DELETE /repos/{owner}/{repo}/collaborators/{username}"],
- removeDeployKey: ["DELETE /repos/{owner}/{repo}/keys/{key_id}"],
- removeProtectedBranchAdminEnforcement: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],
- removeProtectedBranchAppRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, {
+ pingWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"],
+ removeAppAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, {
mapToData: "apps"
}],
- removeProtectedBranchPullRequestReviewEnforcement: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],
- removeProtectedBranchRequiredSignatures: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures", {
- mediaType: {
- previews: ["zzzax"]
- }
- }],
- removeProtectedBranchRequiredStatusChecks: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],
- removeProtectedBranchRequiredStatusChecksContexts: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, {
+ removeCollaborator: ["DELETE /repos/{owner}/{repo}/collaborators/{username}"],
+ removeStatusCheckContexts: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, {
mapToData: "contexts"
}],
- removeProtectedBranchRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],
- removeProtectedBranchTeamRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, {
+ removeStatusCheckProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],
+ removeTeamAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, {
mapToData: "teams"
}],
- removeProtectedBranchUserRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, {
+ removeUserAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, {
mapToData: "users"
}],
+ renameBranch: ["POST /repos/{owner}/{repo}/branches/{branch}/rename"],
replaceAllTopics: ["PUT /repos/{owner}/{repo}/topics", {
mediaType: {
previews: ["mercy"]
}
}],
- replaceProtectedBranchAppRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, {
+ requestPagesBuild: ["POST /repos/{owner}/{repo}/pages/builds"],
+ setAdminBranchProtection: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],
+ setAppAccessRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, {
mapToData: "apps"
}],
- replaceProtectedBranchRequiredStatusChecksContexts: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, {
+ setStatusCheckContexts: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, {
mapToData: "contexts"
}],
- replaceProtectedBranchTeamRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, {
+ setTeamAccessRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, {
mapToData: "teams"
}],
- replaceProtectedBranchUserRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, {
+ setUserAccessRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, {
mapToData: "users"
}],
- replaceTopics: ["PUT /repos/{owner}/{repo}/topics", {
- mediaType: {
- previews: ["mercy"]
- }
- }, {
- renamed: ["repos", "replaceAllTopics"]
- }],
- requestPageBuild: ["POST /repos/{owner}/{repo}/pages/builds"],
- retrieveCommunityProfileMetrics: ["GET /repos/{owner}/{repo}/community/profile"],
- testPushHook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"],
+ testPushWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"],
transfer: ["POST /repos/{owner}/{repo}/transfer"],
update: ["PATCH /repos/{owner}/{repo}"],
updateBranchProtection: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection"],
updateCommitComment: ["PATCH /repos/{owner}/{repo}/comments/{comment_id}"],
- updateHook: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"],
updateInformationAboutPagesSite: ["PUT /repos/{owner}/{repo}/pages"],
updateInvitation: ["PATCH /repos/{owner}/{repo}/invitations/{invitation_id}"],
- updateProtectedBranchPullRequestReviewEnforcement: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],
- updateProtectedBranchRequiredStatusChecks: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],
+ updatePullRequestReviewProtection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],
updateRelease: ["PATCH /repos/{owner}/{repo}/releases/{release_id}"],
updateReleaseAsset: ["PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}"],
+ updateStatusCheckPotection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks", {}, {
+ renamed: ["repos", "updateStatusCheckProtection"]
+ }],
+ updateStatusCheckProtection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],
+ updateWebhook: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"],
+ updateWebhookConfigForRepo: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config"],
uploadReleaseAsset: ["POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}", {
baseUrl: "https://uploads.github.com"
}]
@@ -47895,18 +44947,32 @@ const Endpoints = {
issuesAndPullRequests: ["GET /search/issues"],
labels: ["GET /search/labels"],
repos: ["GET /search/repositories"],
- topics: ["GET /search/topics"],
+ topics: ["GET /search/topics", {
+ mediaType: {
+ previews: ["mercy"]
+ }
+ }],
users: ["GET /search/users"]
},
+ secretScanning: {
+ getAlert: ["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"],
+ listAlertsForRepo: ["GET /repos/{owner}/{repo}/secret-scanning/alerts"],
+ updateAlert: ["PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"]
+ },
teams: {
- addOrUpdateMembershipInOrg: ["PUT /orgs/{org}/teams/{team_slug}/memberships/{username}"],
- addOrUpdateProjectInOrg: ["PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}", {
+ addOrUpdateMembershipForUserInOrg: ["PUT /orgs/{org}/teams/{team_slug}/memberships/{username}"],
+ addOrUpdateProjectPermissionsInOrg: ["PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}", {
+ mediaType: {
+ previews: ["inertia"]
+ }
+ }],
+ addOrUpdateRepoPermissionsInOrg: ["PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],
+ checkPermissionsForProjectInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects/{project_id}", {
mediaType: {
previews: ["inertia"]
}
}],
- addOrUpdateRepoInOrg: ["PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],
- checkManagesRepoInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],
+ checkPermissionsForRepoInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],
create: ["POST /orgs/{org}/teams"],
createDiscussionCommentInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],
createDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions"],
@@ -47916,7 +44982,7 @@ const Endpoints = {
getByName: ["GET /orgs/{org}/teams/{team_slug}"],
getDiscussionCommentInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],
getDiscussionInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],
- getMembershipInOrg: ["GET /orgs/{org}/teams/{team_slug}/memberships/{username}"],
+ getMembershipForUserInOrg: ["GET /orgs/{org}/teams/{team_slug}/memberships/{username}"],
list: ["GET /orgs/{org}/teams"],
listChildInOrg: ["GET /orgs/{org}/teams/{team_slug}/teams"],
listDiscussionCommentsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],
@@ -47930,58 +44996,50 @@ const Endpoints = {
}
}],
listReposInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos"],
- removeMembershipInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}"],
+ removeMembershipForUserInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}"],
removeProjectInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}"],
removeRepoInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],
- reviewProjectInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects/{project_id}", {
- mediaType: {
- previews: ["inertia"]
- }
- }],
updateDiscussionCommentInOrg: ["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],
updateDiscussionInOrg: ["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],
updateInOrg: ["PATCH /orgs/{org}/teams/{team_slug}"]
},
users: {
- addEmails: ["POST /user/emails"],
+ addEmailForAuthenticated: ["POST /user/emails"],
block: ["PUT /user/blocks/{username}"],
checkBlocked: ["GET /user/blocks/{username}"],
- checkFollowing: ["GET /user/following/{username}"],
checkFollowingForUser: ["GET /users/{username}/following/{target_user}"],
- createGpgKey: ["POST /user/gpg_keys"],
- createPublicKey: ["POST /user/keys"],
- deleteEmails: ["DELETE /user/emails"],
- deleteGpgKey: ["DELETE /user/gpg_keys/{gpg_key_id}"],
- deletePublicKey: ["DELETE /user/keys/{key_id}"],
+ checkPersonIsFollowedByAuthenticated: ["GET /user/following/{username}"],
+ createGpgKeyForAuthenticated: ["POST /user/gpg_keys"],
+ createPublicSshKeyForAuthenticated: ["POST /user/keys"],
+ deleteEmailForAuthenticated: ["DELETE /user/emails"],
+ deleteGpgKeyForAuthenticated: ["DELETE /user/gpg_keys/{gpg_key_id}"],
+ deletePublicSshKeyForAuthenticated: ["DELETE /user/keys/{key_id}"],
follow: ["PUT /user/following/{username}"],
getAuthenticated: ["GET /user"],
getByUsername: ["GET /users/{username}"],
getContextForUser: ["GET /users/{username}/hovercard"],
- getGpgKey: ["GET /user/gpg_keys/{gpg_key_id}"],
- getPublicKey: ["GET /user/keys/{key_id}"],
+ getGpgKeyForAuthenticated: ["GET /user/gpg_keys/{gpg_key_id}"],
+ getPublicSshKeyForAuthenticated: ["GET /user/keys/{key_id}"],
list: ["GET /users"],
- listBlocked: ["GET /user/blocks"],
- listEmails: ["GET /user/emails"],
+ listBlockedByAuthenticated: ["GET /user/blocks"],
+ listEmailsForAuthenticated: ["GET /user/emails"],
listFollowedByAuthenticated: ["GET /user/following"],
listFollowersForAuthenticatedUser: ["GET /user/followers"],
listFollowersForUser: ["GET /users/{username}/followers"],
- listFollowingForAuthenticatedUser: ["GET /user/following", {}, {
- renamed: ["users", "listFollowedByAuthenticated"]
- }],
listFollowingForUser: ["GET /users/{username}/following"],
- listGpgKeys: ["GET /user/gpg_keys"],
+ listGpgKeysForAuthenticated: ["GET /user/gpg_keys"],
listGpgKeysForUser: ["GET /users/{username}/gpg_keys"],
- listPublicEmails: ["GET /user/public_emails"],
- listPublicKeys: ["GET /user/keys"],
+ listPublicEmailsForAuthenticated: ["GET /user/public_emails"],
listPublicKeysForUser: ["GET /users/{username}/keys"],
- togglePrimaryEmailVisibility: ["PATCH /user/email/visibility"],
+ listPublicSshKeysForAuthenticated: ["GET /user/keys"],
+ setPrimaryEmailVisibilityForAuthenticated: ["PATCH /user/email/visibility"],
unblock: ["DELETE /user/blocks/{username}"],
unfollow: ["DELETE /user/following/{username}"],
updateAuthenticated: ["PATCH /user"]
}
};
-const VERSION = "3.11.0";
+const VERSION = "4.12.0";
function endpointsToMethods(octokit, endpointsMap) {
const newMethods = {};
@@ -48015,6 +45073,7 @@ function endpointsToMethods(octokit, endpointsMap) {
function decorate(octokit, scope, methodName, defaults, decorations) {
const requestWithDefaults = octokit.request.defaults(defaults);
+ /* istanbul ignore next */
function withDecorations(...args) {
// @ts-ignore https://github.com/microsoft/TypeScript/issues/25488
@@ -48026,9 +45085,7 @@ function decorate(octokit, scope, methodName, defaults, decorations) {
[decorations.mapToData]: undefined
});
return requestWithDefaults(options);
- } // NOTE: there are currently no deprecations. But we keep the code
- // below for future reference
-
+ }
if (decorations.renamed) {
const [newScope, newMethodName] = decorations.renamed;
@@ -48037,26 +45094,26 @@ function decorate(octokit, scope, methodName, defaults, decorations) {
if (decorations.deprecated) {
octokit.log.warn(decorations.deprecated);
- } // There currently are no renamed parameters
- // if (decorations.renamedParameters) {
- // // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488
- // const options = requestWithDefaults.endpoint.merge(...args);
- // for (const [name, alias] of Object.entries(
- // decorations.renamedParameters
- // )) {
- // if (name in options) {
- // octokit.log.warn(
- // `"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead`
- // );
- // if (!(alias in options)) {
- // options[alias] = options[name];
- // }
- // delete options[name];
- // }
- // }
- // return requestWithDefaults(options);
- // }
- // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488
+ }
+
+ if (decorations.renamedParameters) {
+ // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488
+ const options = requestWithDefaults.endpoint.merge(...args);
+
+ for (const [name, alias] of Object.entries(decorations.renamedParameters)) {
+ if (name in options) {
+ octokit.log.warn(`"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead`);
+
+ if (!(alias in options)) {
+ options[alias] = options[name];
+ }
+
+ delete options[name];
+ }
+ }
+
+ return requestWithDefaults(options);
+ } // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488
return requestWithDefaults(...args);
@@ -48065,17 +45122,6 @@ function decorate(octokit, scope, methodName, defaults, decorations) {
return Object.assign(withDecorations, requestWithDefaults);
}
-/**
- * This plugin is a 1:1 copy of internal @octokit/rest plugins. The primary
- * goal is to rebuild @octokit/rest on top of @octokit/core. Once that is
- * done, we will remove the registerEndpoints methods and return the methods
- * directly as with the other plugins. At that point we will also remove the
- * legacy workarounds and deprecations.
- *
- * See the plan at
- * https://github.com/octokit/plugin-rest-endpoint-methods.js/pull/1
- */
-
function restEndpointMethods(octokit) {
return endpointsToMethods(octokit, Endpoints);
}
@@ -48086,8 +45132,8 @@ exports.restEndpointMethods = restEndpointMethods;
/***/ }),
-/* 843 */,
-/* 844 */
+
+/***/ 844:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -48102,16 +45148,23 @@ var _crypto = _interopRequireDefault(__webpack_require__(417));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate
+
+let poolPtr = rnds8Pool.length;
+
function rng() {
- return _crypto.default.randomBytes(16);
+ if (poolPtr > rnds8Pool.length - 16) {
+ _crypto.default.randomFillSync(rnds8Pool);
+
+ poolPtr = 0;
+ }
+
+ return rnds8Pool.slice(poolPtr, poolPtr += 16);
}
/***/ }),
-/* 845 */,
-/* 846 */,
-/* 847 */,
-/* 848 */,
-/* 849 */
+
+/***/ 849:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -48181,22 +45234,16 @@ module.exports = {
/***/ }),
-/* 850 */,
-/* 851 */,
-/* 852 */,
-/* 853 */,
-/* 854 */,
-/* 855 */,
-/* 856 */
+
+/***/ 856:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = __webpack_require__(141);
/***/ }),
-/* 857 */,
-/* 858 */,
-/* 859 */
+
+/***/ 859:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -48215,41 +45262,34 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
module.exports = _bluebird2.default.promisifyAll(_properLockfile2.default);
/***/ }),
-/* 860 */,
-/* 861 */,
-/* 862 */,
-/* 863 */,
-/* 864 */,
-/* 865 */,
-/* 866 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-"use strict";
+/***/ 866:
+/***/ (function(module) {
-var shebangRegex = __webpack_require__(816);
+module.exports = removeHook;
-module.exports = function (str) {
- var match = str.match(shebangRegex);
+function removeHook(state, name, method) {
+ if (!state.registry[name]) {
+ return;
+ }
- if (!match) {
- return null;
- }
+ var index = state.registry[name]
+ .map(function (registered) {
+ return registered.orig;
+ })
+ .indexOf(method);
- var arr = match[0].replace(/#! ?/, '').split(' ');
- var bin = arr[0].split('/').pop();
- var arg = arr[1];
+ if (index === -1) {
+ return;
+ }
- return (bin === 'env' ?
- arg :
- bin + (arg ? ' ' + arg : '')
- );
-};
+ state.registry[name].splice(index, 1);
+}
/***/ }),
-/* 867 */,
-/* 868 */,
-/* 869 */
+
+/***/ 869:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -48286,6 +45326,7 @@ const api = [
'readlink',
'realpath',
'rename',
+ 'rm',
'rmdir',
'stat',
'symlink',
@@ -48296,6 +45337,7 @@ const api = [
].filter(key => {
// Some commands are not available on some systems. Ex:
// fs.opendir was added in Node.js v12.12.0
+ // fs.rm was added in Node.js v14.14.0
// fs.lchown is not available on at least some Linux
return typeof fs[key] === 'function'
})
@@ -48384,85 +45426,8 @@ if (typeof fs.realpath.native === 'function') {
/***/ }),
-/* 870 */,
-/* 871 */,
-/* 872 */,
-/* 873 */,
-/* 874 */,
-/* 875 */,
-/* 876 */,
-/* 877 */,
-/* 878 */,
-/* 879 */,
-/* 880 */,
-/* 881 */
-/***/ (function(module) {
-
-"use strict";
-
-
-const isWin = process.platform === 'win32';
-
-function notFoundError(original, syscall) {
- return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), {
- code: 'ENOENT',
- errno: 'ENOENT',
- syscall: `${syscall} ${original.command}`,
- path: original.command,
- spawnargs: original.args,
- });
-}
-
-function hookChildProcess(cp, parsed) {
- if (!isWin) {
- return;
- }
-
- const originalEmit = cp.emit;
-
- cp.emit = function (name, arg1) {
- // If emitting "exit" event and exit code is 1, we need to check if
- // the command exists and emit an "error" instead
- // See https://github.com/IndigoUnited/node-cross-spawn/issues/16
- if (name === 'exit') {
- const err = verifyENOENT(arg1, parsed, 'spawn');
-
- if (err) {
- return originalEmit.call(cp, 'error', err);
- }
- }
-
- return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params
- };
-}
-
-function verifyENOENT(status, parsed) {
- if (isWin && status === 1 && !parsed.file) {
- return notFoundError(parsed.original, 'spawn');
- }
-
- return null;
-}
-
-function verifyENOENTSync(status, parsed) {
- if (isWin && status === 1 && !parsed.file) {
- return notFoundError(parsed.original, 'spawnSync');
- }
- return null;
-}
-
-module.exports = {
- hookChildProcess,
- verifyENOENT,
- verifyENOENTSync,
- notFoundError,
-};
-
-
-/***/ }),
-/* 882 */,
-/* 883 */
+/***/ 883:
/***/ (function(module) {
var isES5 = (function(){
@@ -48548,16 +45513,8 @@ if (isES5) {
/***/ }),
-/* 884 */,
-/* 885 */,
-/* 886 */,
-/* 887 */,
-/* 888 */,
-/* 889 */,
-/* 890 */,
-/* 891 */,
-/* 892 */,
-/* 893 */
+
+/***/ 893:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -48570,7 +45527,7 @@ exports.default = void 0;
var _rng = _interopRequireDefault(__webpack_require__(844));
-var _bytesToUuid = _interopRequireDefault(__webpack_require__(390));
+var _stringify = _interopRequireDefault(__webpack_require__(411));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -48578,25 +45535,25 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
//
// Inspired by https://github.com/LiosK/UUID.js
// and http://docs.python.org/library/uuid.html
-var _nodeId;
+let _nodeId;
-var _clockseq; // Previous uuid creation time
+let _clockseq; // Previous uuid creation time
-var _lastMSecs = 0;
-var _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details
+let _lastMSecs = 0;
+let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details
function v1(options, buf, offset) {
- var i = buf && offset || 0;
- var b = buf || [];
+ let i = buf && offset || 0;
+ const b = buf || new Array(16);
options = options || {};
- var node = options.node || _nodeId;
- var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not
+ let node = options.node || _nodeId;
+ let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not
// specified. We do this lazily to minimize issues related to insufficient
// system entropy. See #189
if (node == null || clockseq == null) {
- var seedBytes = options.random || (options.rng || _rng.default)();
+ const seedBytes = options.random || (options.rng || _rng.default)();
if (node == null) {
// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
@@ -48613,12 +45570,12 @@ function v1(options, buf, offset) {
// (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
- var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); // Per 4.2.1.2, use count of uuid's generated during the current clock
+ let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock
// cycle to simulate higher resolution clock
- var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)
+ let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)
- var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression
+ const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression
if (dt < 0 && options.clockseq === undefined) {
clockseq = clockseq + 1 & 0x3fff;
@@ -48641,13 +45598,13 @@ function v1(options, buf, offset) {
msecs += 12219292800000; // `time_low`
- var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
+ const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
b[i++] = tl >>> 24 & 0xff;
b[i++] = tl >>> 16 & 0xff;
b[i++] = tl >>> 8 & 0xff;
b[i++] = tl & 0xff; // `time_mid`
- var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;
+ const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;
b[i++] = tmh >>> 8 & 0xff;
b[i++] = tmh & 0xff; // `time_high_and_version`
@@ -48659,19 +45616,19 @@ function v1(options, buf, offset) {
b[i++] = clockseq & 0xff; // `node`
- for (var n = 0; n < 6; ++n) {
+ for (let n = 0; n < 6; ++n) {
b[i + n] = node[n];
}
- return buf ? buf : (0, _bytesToUuid.default)(b);
+ return buf || (0, _stringify.default)(b);
}
var _default = v1;
exports.default = _default;
/***/ }),
-/* 894 */,
-/* 895 */
+
+/***/ 895:
/***/ (function(module) {
"use strict";
@@ -48751,7 +45708,8 @@ module.exports = Queue;
/***/ }),
-/* 896 */
+
+/***/ 896:
/***/ (function(module) {
module.exports = function (xs, fn) {
@@ -48770,8 +45728,8 @@ var isArray = Array.isArray || function (xs) {
/***/ }),
-/* 897 */,
-/* 898 */
+
+/***/ 898:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -48782,13 +45740,16 @@ Object.defineProperty(exports, '__esModule', { value: true });
var request = __webpack_require__(753);
var universalUserAgent = __webpack_require__(796);
-const VERSION = "4.4.0";
+const VERSION = "4.6.0";
class GraphqlError extends Error {
constructor(request, response) {
const message = response.data.errors[0].message;
super(message);
Object.assign(this, response.data);
+ Object.assign(this, {
+ headers: response.headers
+ });
this.name = "GraphqlError";
this.request = request; // Maintains proper stack trace (only available on V8)
@@ -48802,13 +45763,18 @@ class GraphqlError extends Error {
}
const NON_VARIABLE_OPTIONS = ["method", "baseUrl", "url", "headers", "request", "query", "mediaType"];
+const GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/;
function graphql(request, query, options) {
- options = typeof query === "string" ? options = Object.assign({
+ if (typeof query === "string" && options && "query" in options) {
+ return Promise.reject(new Error(`[@octokit/graphql] "query" cannot be used as variable name`));
+ }
+
+ const parsedOptions = typeof query === "string" ? Object.assign({
query
- }, options) : options = query;
- const requestOptions = Object.keys(options).reduce((result, key) => {
+ }, options) : query;
+ const requestOptions = Object.keys(parsedOptions).reduce((result, key) => {
if (NON_VARIABLE_OPTIONS.includes(key)) {
- result[key] = options[key];
+ result[key] = parsedOptions[key];
return result;
}
@@ -48816,12 +45782,27 @@ function graphql(request, query, options) {
result.variables = {};
}
- result.variables[key] = options[key];
+ result.variables[key] = parsedOptions[key];
return result;
- }, {});
+ }, {}); // workaround for GitHub Enterprise baseUrl set with /api/v3 suffix
+ // https://github.com/octokit/auth-app.js/issues/111#issuecomment-657610451
+
+ const baseUrl = parsedOptions.baseUrl || request.endpoint.DEFAULTS.baseUrl;
+
+ if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) {
+ requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql");
+ }
+
return request(requestOptions).then(response => {
if (response.data.errors) {
+ const headers = {};
+
+ for (const key of Object.keys(response.headers)) {
+ headers[key] = response.headers[key];
+ }
+
throw new GraphqlError(requestOptions, {
+ headers,
data: response.data
});
}
@@ -48863,8 +45844,8 @@ exports.withCustomRequest = withCustomRequest;
/***/ }),
-/* 899 */,
-/* 900 */
+
+/***/ 900:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -48932,22 +45913,8 @@ module.exports = {
/***/ }),
-/* 901 */,
-/* 902 */,
-/* 903 */,
-/* 904 */,
-/* 905 */,
-/* 906 */,
-/* 907 */,
-/* 908 */,
-/* 909 */,
-/* 910 */,
-/* 911 */,
-/* 912 */,
-/* 913 */,
-/* 914 */,
-/* 915 */,
-/* 916 */
+
+/***/ 916:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -48980,13 +45947,8 @@ module.exports = {
/***/ }),
-/* 917 */,
-/* 918 */,
-/* 919 */,
-/* 920 */,
-/* 921 */,
-/* 922 */,
-/* 923 */
+
+/***/ 923:
/***/ (function(module) {
"use strict";
@@ -49062,13 +46024,8 @@ return Context;
/***/ }),
-/* 924 */,
-/* 925 */,
-/* 926 */,
-/* 927 */,
-/* 928 */,
-/* 929 */,
-/* 930 */
+
+/***/ 930:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -49174,7 +46131,8 @@ module.exports = {
/***/ }),
-/* 931 */
+
+/***/ 931:
/***/ (function(module) {
"use strict";
@@ -49222,17 +46180,8 @@ module.exports = syncFs;
/***/ }),
-/* 932 */,
-/* 933 */,
-/* 934 */,
-/* 935 */,
-/* 936 */,
-/* 937 */,
-/* 938 */,
-/* 939 */,
-/* 940 */,
-/* 941 */,
-/* 942 */
+
+/***/ 942:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -49270,11 +46219,8 @@ function compose(args) {
}
/***/ }),
-/* 943 */,
-/* 944 */,
-/* 945 */,
-/* 946 */,
-/* 947 */
+
+/***/ 947:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -49308,7 +46254,8 @@ function fromFirst(_arguments) {
}
/***/ }),
-/* 948 */
+
+/***/ 948:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -49629,14 +46576,13 @@ Promise.promisifyAll = function (target, options) {
/***/ }),
-/* 949 */,
-/* 950 */
-/***/ (function(__unusedmodule, exports, __webpack_require__) {
+
+/***/ 950:
+/***/ (function(__unusedmodule, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-const url = __webpack_require__(835);
function getProxyUrl(reqUrl) {
let usingSsl = reqUrl.protocol === 'https:';
let proxyUrl;
@@ -49651,7 +46597,7 @@ function getProxyUrl(reqUrl) {
proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY'];
}
if (proxyVar) {
- proxyUrl = url.parse(proxyVar);
+ proxyUrl = new URL(proxyVar);
}
return proxyUrl;
}
@@ -49695,7 +46641,8 @@ exports.checkBypass = checkBypass;
/***/ }),
-/* 951 */
+
+/***/ 951:
/***/ (function(module, __unusedexports, __webpack_require__) {
var rng = __webpack_require__(639);
@@ -49730,381 +46677,8 @@ module.exports = v4;
/***/ }),
-/* 952 */,
-/* 953 */,
-/* 954 */,
-/* 955 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-"use strict";
-
-const path = __webpack_require__(622);
-const childProcess = __webpack_require__(129);
-const crossSpawn = __webpack_require__(20);
-const stripEof = __webpack_require__(768);
-const npmRunPath = __webpack_require__(512);
-const isStream = __webpack_require__(207);
-const _getStream = __webpack_require__(145);
-const pFinally = __webpack_require__(697);
-const onExit = __webpack_require__(260);
-const errname = __webpack_require__(427);
-const stdio = __webpack_require__(168);
-
-const TEN_MEGABYTES = 1000 * 1000 * 10;
-
-function handleArgs(cmd, args, opts) {
- let parsed;
-
- opts = Object.assign({
- extendEnv: true,
- env: {}
- }, opts);
-
- if (opts.extendEnv) {
- opts.env = Object.assign({}, process.env, opts.env);
- }
-
- if (opts.__winShell === true) {
- delete opts.__winShell;
- parsed = {
- command: cmd,
- args,
- options: opts,
- file: cmd,
- original: {
- cmd,
- args
- }
- };
- } else {
- parsed = crossSpawn._parse(cmd, args, opts);
- }
-
- opts = Object.assign({
- maxBuffer: TEN_MEGABYTES,
- buffer: true,
- stripEof: true,
- preferLocal: true,
- localDir: parsed.options.cwd || process.cwd(),
- encoding: 'utf8',
- reject: true,
- cleanup: true
- }, parsed.options);
-
- opts.stdio = stdio(opts);
-
- if (opts.preferLocal) {
- opts.env = npmRunPath.env(Object.assign({}, opts, {cwd: opts.localDir}));
- }
-
- if (opts.detached) {
- // #115
- opts.cleanup = false;
- }
-
- if (process.platform === 'win32' && path.basename(parsed.command) === 'cmd.exe') {
- // #116
- parsed.args.unshift('/q');
- }
-
- return {
- cmd: parsed.command,
- args: parsed.args,
- opts,
- parsed
- };
-}
-
-function handleInput(spawned, input) {
- if (input === null || input === undefined) {
- return;
- }
-
- if (isStream(input)) {
- input.pipe(spawned.stdin);
- } else {
- spawned.stdin.end(input);
- }
-}
-
-function handleOutput(opts, val) {
- if (val && opts.stripEof) {
- val = stripEof(val);
- }
-
- return val;
-}
-
-function handleShell(fn, cmd, opts) {
- let file = '/bin/sh';
- let args = ['-c', cmd];
-
- opts = Object.assign({}, opts);
-
- if (process.platform === 'win32') {
- opts.__winShell = true;
- file = process.env.comspec || 'cmd.exe';
- args = ['/s', '/c', `"${cmd}"`];
- opts.windowsVerbatimArguments = true;
- }
-
- if (opts.shell) {
- file = opts.shell;
- delete opts.shell;
- }
-
- return fn(file, args, opts);
-}
-
-function getStream(process, stream, {encoding, buffer, maxBuffer}) {
- if (!process[stream]) {
- return null;
- }
-
- let ret;
-
- if (!buffer) {
- // TODO: Use `ret = util.promisify(stream.finished)(process[stream]);` when targeting Node.js 10
- ret = new Promise((resolve, reject) => {
- process[stream]
- .once('end', resolve)
- .once('error', reject);
- });
- } else if (encoding) {
- ret = _getStream(process[stream], {
- encoding,
- maxBuffer
- });
- } else {
- ret = _getStream.buffer(process[stream], {maxBuffer});
- }
-
- return ret.catch(err => {
- err.stream = stream;
- err.message = `${stream} ${err.message}`;
- throw err;
- });
-}
-
-function makeError(result, options) {
- const {stdout, stderr} = result;
-
- let err = result.error;
- const {code, signal} = result;
-
- const {parsed, joinedCmd} = options;
- const timedOut = options.timedOut || false;
-
- if (!err) {
- let output = '';
-
- if (Array.isArray(parsed.opts.stdio)) {
- if (parsed.opts.stdio[2] !== 'inherit') {
- output += output.length > 0 ? stderr : `\n${stderr}`;
- }
-
- if (parsed.opts.stdio[1] !== 'inherit') {
- output += `\n${stdout}`;
- }
- } else if (parsed.opts.stdio !== 'inherit') {
- output = `\n${stderr}${stdout}`;
- }
-
- err = new Error(`Command failed: ${joinedCmd}${output}`);
- err.code = code < 0 ? errname(code) : code;
- }
-
- err.stdout = stdout;
- err.stderr = stderr;
- err.failed = true;
- err.signal = signal || null;
- err.cmd = joinedCmd;
- err.timedOut = timedOut;
-
- return err;
-}
-
-function joinCmd(cmd, args) {
- let joinedCmd = cmd;
-
- if (Array.isArray(args) && args.length > 0) {
- joinedCmd += ' ' + args.join(' ');
- }
-
- return joinedCmd;
-}
-
-module.exports = (cmd, args, opts) => {
- const parsed = handleArgs(cmd, args, opts);
- const {encoding, buffer, maxBuffer} = parsed.opts;
- const joinedCmd = joinCmd(cmd, args);
-
- let spawned;
- try {
- spawned = childProcess.spawn(parsed.cmd, parsed.args, parsed.opts);
- } catch (err) {
- return Promise.reject(err);
- }
-
- let removeExitHandler;
- if (parsed.opts.cleanup) {
- removeExitHandler = onExit(() => {
- spawned.kill();
- });
- }
-
- let timeoutId = null;
- let timedOut = false;
- const cleanup = () => {
- if (timeoutId) {
- clearTimeout(timeoutId);
- timeoutId = null;
- }
-
- if (removeExitHandler) {
- removeExitHandler();
- }
- };
-
- if (parsed.opts.timeout > 0) {
- timeoutId = setTimeout(() => {
- timeoutId = null;
- timedOut = true;
- spawned.kill(parsed.opts.killSignal);
- }, parsed.opts.timeout);
- }
-
- const processDone = new Promise(resolve => {
- spawned.on('exit', (code, signal) => {
- cleanup();
- resolve({code, signal});
- });
-
- spawned.on('error', err => {
- cleanup();
- resolve({error: err});
- });
-
- if (spawned.stdin) {
- spawned.stdin.on('error', err => {
- cleanup();
- resolve({error: err});
- });
- }
- });
-
- function destroy() {
- if (spawned.stdout) {
- spawned.stdout.destroy();
- }
-
- if (spawned.stderr) {
- spawned.stderr.destroy();
- }
- }
-
- const handlePromise = () => pFinally(Promise.all([
- processDone,
- getStream(spawned, 'stdout', {encoding, buffer, maxBuffer}),
- getStream(spawned, 'stderr', {encoding, buffer, maxBuffer})
- ]).then(arr => {
- const result = arr[0];
- result.stdout = arr[1];
- result.stderr = arr[2];
-
- if (result.error || result.code !== 0 || result.signal !== null) {
- const err = makeError(result, {
- joinedCmd,
- parsed,
- timedOut
- });
-
- // TODO: missing some timeout logic for killed
- // https://github.com/nodejs/node/blob/master/lib/child_process.js#L203
- // err.killed = spawned.killed || killed;
- err.killed = err.killed || spawned.killed;
-
- if (!parsed.opts.reject) {
- return err;
- }
-
- throw err;
- }
-
- return {
- stdout: handleOutput(parsed.opts, result.stdout),
- stderr: handleOutput(parsed.opts, result.stderr),
- code: 0,
- failed: false,
- killed: false,
- signal: null,
- cmd: joinedCmd,
- timedOut: false
- };
- }), destroy);
-
- crossSpawn._enoent.hookChildProcess(spawned, parsed.parsed);
-
- handleInput(spawned, parsed.opts.input);
-
- spawned.then = (onfulfilled, onrejected) => handlePromise().then(onfulfilled, onrejected);
- spawned.catch = onrejected => handlePromise().catch(onrejected);
-
- return spawned;
-};
-
-// TODO: set `stderr: 'ignore'` when that option is implemented
-module.exports.stdout = (...args) => module.exports(...args).then(x => x.stdout);
-
-// TODO: set `stdout: 'ignore'` when that option is implemented
-module.exports.stderr = (...args) => module.exports(...args).then(x => x.stderr);
-
-module.exports.shell = (cmd, opts) => handleShell(module.exports, cmd, opts);
-
-module.exports.sync = (cmd, args, opts) => {
- const parsed = handleArgs(cmd, args, opts);
- const joinedCmd = joinCmd(cmd, args);
-
- if (isStream(parsed.opts.input)) {
- throw new TypeError('The `input` option cannot be a stream in sync mode');
- }
-
- const result = childProcess.spawnSync(parsed.cmd, parsed.args, parsed.opts);
- result.code = result.status;
-
- if (result.error || result.status !== 0 || result.signal !== null) {
- const err = makeError(result, {
- joinedCmd,
- parsed
- });
-
- if (!parsed.opts.reject) {
- return err;
- }
-
- throw err;
- }
-
- return {
- stdout: handleOutput(parsed.opts, result.stdout),
- stderr: handleOutput(parsed.opts, result.stderr),
- code: 0,
- failed: false,
- signal: null,
- cmd: joinedCmd,
- timedOut: false
- };
-};
-
-module.exports.shellSync = (cmd, opts) => handleShell(module.exports.sync, cmd, opts);
-
-
-/***/ }),
-/* 956 */,
-/* 957 */,
-/* 958 */,
-/* 959 */
+/***/ 959:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -50116,123 +46690,8 @@ module.exports = {
/***/ }),
-/* 960 */,
-/* 961 */,
-/* 962 */,
-/* 963 */,
-/* 964 */,
-/* 965 */,
-/* 966 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-"use strict";
-
-const {PassThrough} = __webpack_require__(413);
-
-module.exports = options => {
- options = Object.assign({}, options);
-
- const {array} = options;
- let {encoding} = options;
- const buffer = encoding === 'buffer';
- let objectMode = false;
-
- if (array) {
- objectMode = !(encoding || buffer);
- } else {
- encoding = encoding || 'utf8';
- }
- if (buffer) {
- encoding = null;
- }
-
- let len = 0;
- const ret = [];
- const stream = new PassThrough({objectMode});
-
- if (encoding) {
- stream.setEncoding(encoding);
- }
-
- stream.on('data', chunk => {
- ret.push(chunk);
-
- if (objectMode) {
- len = ret.length;
- } else {
- len += chunk.length;
- }
- });
-
- stream.getBufferedValue = () => {
- if (array) {
- return ret;
- }
-
- return buffer ? Buffer.concat(ret, len) : ret.join('');
- };
-
- stream.getBufferedLength = () => len;
-
- return stream;
-};
-
-
-/***/ }),
-/* 967 */,
-/* 968 */,
-/* 969 */
-/***/ (function(module, __unusedexports, __webpack_require__) {
-
-var wrappy = __webpack_require__(11)
-module.exports = wrappy(once)
-module.exports.strict = wrappy(onceStrict)
-
-once.proto = once(function () {
- Object.defineProperty(Function.prototype, 'once', {
- value: function () {
- return once(this)
- },
- configurable: true
- })
-
- Object.defineProperty(Function.prototype, 'onceStrict', {
- value: function () {
- return onceStrict(this)
- },
- configurable: true
- })
-})
-
-function once (fn) {
- var f = function () {
- if (f.called) return f.value
- f.called = true
- return f.value = fn.apply(this, arguments)
- }
- f.called = false
- return f
-}
-
-function onceStrict (fn) {
- var f = function () {
- if (f.called)
- throw new Error(f.onceError)
- f.called = true
- return f.value = fn.apply(this, arguments)
- }
- var name = fn.name || 'Function wrapped with `once`'
- f.onceError = name + " shouldn't be called more than once"
- f.called = false
- return f
-}
-
-
-/***/ }),
-/* 970 */,
-/* 971 */,
-/* 972 */
+/***/ 972:
/***/ (function(module) {
/**
@@ -51761,9 +48220,8 @@ function onceStrict (fn) {
/***/ }),
-/* 973 */,
-/* 974 */,
-/* 975 */
+
+/***/ 975:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -51801,10 +48259,8 @@ module.exports = {
/***/ }),
-/* 976 */,
-/* 977 */,
-/* 978 */,
-/* 979 */
+
+/***/ 979:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -51880,8 +48336,8 @@ exports.RetryHelper = RetryHelper;
//# sourceMappingURL=retry-helper.js.map
/***/ }),
-/* 980 */,
-/* 981 */
+
+/***/ 981:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -51900,7 +48356,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
module.exports = _bluebird2.default.promisifyAll(_fs2.default);
/***/ }),
-/* 982 */
+
+/***/ 982:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -52053,7 +48510,8 @@ return PassThroughHandlerContext;
/***/ }),
-/* 983 */
+
+/***/ 983:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
@@ -52852,36 +49310,35 @@ __webpack_require__(780)(Promise, apiRejection, tryConvertToPromise, createConte
__webpack_require__(658)(Promise);
__webpack_require__(685)(Promise, INTERNAL);
__webpack_require__(610)(Promise, INTERNAL);
-
- util.toFastProperties(Promise);
- util.toFastProperties(Promise.prototype);
- function fillTypes(value) {
- var p = new Promise(INTERNAL);
- p._fulfillmentHandler0 = value;
- p._rejectionHandler0 = value;
- p._promise0 = value;
- p._receiver0 = value;
- }
- // Complete slack tracking, opt out of field-type tracking and
- // stabilize map
- fillTypes({a: 1});
- fillTypes({b: 2});
- fillTypes({c: 3});
- fillTypes(1);
- fillTypes(function(){});
- fillTypes(undefined);
- fillTypes(false);
- fillTypes(new Promise(INTERNAL));
- debug.setBounds(Async.firstLineError, util.lastLineError);
- return Promise;
+
+ util.toFastProperties(Promise);
+ util.toFastProperties(Promise.prototype);
+ function fillTypes(value) {
+ var p = new Promise(INTERNAL);
+ p._fulfillmentHandler0 = value;
+ p._rejectionHandler0 = value;
+ p._promise0 = value;
+ p._receiver0 = value;
+ }
+ // Complete slack tracking, opt out of field-type tracking and
+ // stabilize map
+ fillTypes({a: 1});
+ fillTypes({b: 2});
+ fillTypes({c: 3});
+ fillTypes(1);
+ fillTypes(function(){});
+ fillTypes(undefined);
+ fillTypes(false);
+ fillTypes(new Promise(INTERNAL));
+ debug.setBounds(Async.firstLineError, util.lastLineError);
+ return Promise;
};
/***/ }),
-/* 984 */,
-/* 985 */,
-/* 986 */
+
+/***/ 986:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
@@ -52931,8 +49388,8 @@ exports.exec = exec;
//# sourceMappingURL=exec.js.map
/***/ }),
-/* 987 */,
-/* 988 */
+
+/***/ 988:
/***/ (function(module) {
function RetryOperation(timeouts, options) {
@@ -53081,10 +49538,11 @@ RetryOperation.prototype.mainError = function() {
/***/ })
-/******/ ],
+
+/******/ },
/******/ function(__webpack_require__) { // webpackRuntimeModules
/******/ "use strict";
-/******/
+/******/
/******/ /* webpack/runtime/node module decorator */
/******/ !function() {
/******/ __webpack_require__.nmd = function(module) {
@@ -53101,6 +49559,6 @@ RetryOperation.prototype.mainError = function() {
/******/ return module;
/******/ };
/******/ }();
-/******/
+/******/
/******/ }
-);
+);
\ No newline at end of file
diff --git a/package.json b/package.json
index fc3d9f06..5ce37b81 100644
--- a/package.json
+++ b/package.json
@@ -23,8 +23,6 @@
"scripts": {
"postinstall": "husky install",
"build": "tsc && tsc src/misc/generate-docs.ts --outDir ./lib/misc",
- "format": "prettier --write **/*.ts",
- "format-check": "prettier --check **/*.ts",
"lint": "yarn run lint:eslint && yarn run lint:text",
"lint:eslint": "eslint ./src/**/*.ts",
"lint:eslint:fix": "eslint --fix ./src/**/*.ts",
@@ -33,7 +31,7 @@
"lint:text:fix": "textlint ./.build/ISSUE_TEMPLATE/** ./src/** ./docs/** ./README.md ./UPGRADE.md --fix",
"pack": "ncc build",
"test": "jest",
- "all": "yarn run format && yarn run lint && yarn run build && yarn run pack && yarn test && node lib/misc/generate-docs.js"
+ "all": "yarn run lint && yarn run build && yarn run pack && yarn test && node lib/misc/generate-docs.js"
},
"commitlint": {
"extends": [
diff --git a/src/main.ts b/src/main.ts
index 813dc7f1..ca538d32 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -126,23 +126,23 @@ async function run(): Promise {
await mainGitCommandManager.tryConfigUnset(USER_NAME, true);
}
- core.startGroup('Creating Pull request')
- await githubManager.pulls.create(
- settings.repositoryOwner,
- settings.repositoryName,
- settings.syncBranchName,
- settings.ref,
- settings.messageHead,
- settings.messageBody
- )
- core.endGroup()
- } finally {
- // Unregister problem matcher
- coreCommand.issueCommand('remove-matcher', {owner: 'checkout-git'}, '')
+ core.startGroup("Creating Pull request");
+ await githubManager.pulls.create(
+ settings.repositoryOwner,
+ settings.repositoryName,
+ settings.syncBranchName,
+ settings.ref,
+ settings.messageHead,
+ settings.messageBody,
+ );
+ core.endGroup();
+ } finally {
+ // Unregister problem matcher
+ coreCommand.issueCommand("remove-matcher", { owner: "checkout-git" }, "");
+ }
+ } catch (error) {
+ core.setFailed(error.message);
}
- } catch (error) {
- core.setFailed(error.message)
- }
}
async function prepareTemplateSettings(settings: ISettings, githubManager: GithubManager): Promise {
From 26bf91d76a3666cd4716487d30a3af8e58205d8e Mon Sep 17 00:00:00 2001
From: semantic-release-bot
Date: Mon, 22 Feb 2021 13:25:43 +0000
Subject: [PATCH 14/21] chore(release): 1.0.0-alpha.8 [skip ci]
## [1.0.0-alpha.8](https://github.com/narrowspark/template-sync-action/compare/v1.0.0-alpha.7...v1.0.0-alpha.8) (2021-02-22)
### Features
* added commitlint ([bb6d375](https://github.com/narrowspark/template-sync-action/commit/bb6d3754507cbb071663c74b52f6d9fa27f8ca1c))
* added semantic release workflow ([7a40fdf](https://github.com/narrowspark/template-sync-action/commit/7a40fdfaf83bca2130b1390932001607c6b1356e))
* added text lint ([1de1408](https://github.com/narrowspark/template-sync-action/commit/1de14083b075898d1581778297ef171a1011ab79))
* merge master (main) into alpha ([ea6eed2](https://github.com/narrowspark/template-sync-action/commit/ea6eed254bfd9393e92fd88bd02277162912fa37))
* update the dependabot config ([2f438ce](https://github.com/narrowspark/template-sync-action/commit/2f438ceea41759f824122399cc3696a3da7ff5ed))
* upgraded dependencies ([2ea0d3a](https://github.com/narrowspark/template-sync-action/commit/2ea0d3a0728003537de4b15c2c9ebadc2c4675b4))
### Bug Fixes
* changed node version back to 12 ([5ce2fc9](https://github.com/narrowspark/template-sync-action/commit/5ce2fc97c87d7dc0e312843d66f50ee38d271cdf))
* fixed error handling in github-manager.ts ([1b790ac](https://github.com/narrowspark/template-sync-action/commit/1b790ac37b7c93216fd88c54a3d54344ec73dd26))
* fixed test pipe ([87f5b05](https://github.com/narrowspark/template-sync-action/commit/87f5b05a45e630416f115f3af8dc986033e86072))
* fixed wrong type ([90f34c7](https://github.com/narrowspark/template-sync-action/commit/90f34c77a6707467c14c1bc0d949ce4173522423))
---
CHANGELOG.md | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 163c7d68..6ecccb13 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,23 @@
+## [1.0.0-alpha.8](https://github.com/narrowspark/template-sync-action/compare/v1.0.0-alpha.7...v1.0.0-alpha.8) (2021-02-22)
+
+
+### Features
+
+* added commitlint ([bb6d375](https://github.com/narrowspark/template-sync-action/commit/bb6d3754507cbb071663c74b52f6d9fa27f8ca1c))
+* added semantic release workflow ([7a40fdf](https://github.com/narrowspark/template-sync-action/commit/7a40fdfaf83bca2130b1390932001607c6b1356e))
+* added text lint ([1de1408](https://github.com/narrowspark/template-sync-action/commit/1de14083b075898d1581778297ef171a1011ab79))
+* merge master (main) into alpha ([ea6eed2](https://github.com/narrowspark/template-sync-action/commit/ea6eed254bfd9393e92fd88bd02277162912fa37))
+* update the dependabot config ([2f438ce](https://github.com/narrowspark/template-sync-action/commit/2f438ceea41759f824122399cc3696a3da7ff5ed))
+* upgraded dependencies ([2ea0d3a](https://github.com/narrowspark/template-sync-action/commit/2ea0d3a0728003537de4b15c2c9ebadc2c4675b4))
+
+
+### Bug Fixes
+
+* changed node version back to 12 ([5ce2fc9](https://github.com/narrowspark/template-sync-action/commit/5ce2fc97c87d7dc0e312843d66f50ee38d271cdf))
+* fixed error handling in github-manager.ts ([1b790ac](https://github.com/narrowspark/template-sync-action/commit/1b790ac37b7c93216fd88c54a3d54344ec73dd26))
+* fixed test pipe ([87f5b05](https://github.com/narrowspark/template-sync-action/commit/87f5b05a45e630416f115f3af8dc986033e86072))
+* fixed wrong type ([90f34c7](https://github.com/narrowspark/template-sync-action/commit/90f34c77a6707467c14c1bc0d949ce4173522423))
+
## [1.0.0-alpha.7](https://github.com/narrowspark/template-sync-action/compare/v1.0.0-alpha.6...v1.0.0-alpha.7) (2020-05-14)
From 1852382b7bd7153e3d3ebc8ea9fd2d361f75afdf Mon Sep 17 00:00:00 2001
From: prisis
Date: Mon, 22 Feb 2021 14:32:15 +0100
Subject: [PATCH 15/21] chore: remove dependabot and updated
semantic-release.yml with main branch
---
.dependabot/config.yml | 0
.github/workflows/semantic-release.yml | 2 +-
2 files changed, 1 insertion(+), 1 deletion(-)
delete mode 100644 .dependabot/config.yml
diff --git a/.dependabot/config.yml b/.dependabot/config.yml
deleted file mode 100644
index e69de29b..00000000
diff --git a/.github/workflows/semantic-release.yml b/.github/workflows/semantic-release.yml
index f78b67af..3ac263b7 100644
--- a/.github/workflows/semantic-release.yml
+++ b/.github/workflows/semantic-release.yml
@@ -6,7 +6,7 @@ on:
push:
branches:
- ([0-9])?(.{+([0-9]),x}).x
- - master
+ - main
- next
- next-major
- alpha
From 592c11817a5d623e8de3460fce6cfa4384efd53f Mon Sep 17 00:00:00 2001
From: prisis
Date: Fri, 19 Feb 2021 11:58:34 +0100
Subject: [PATCH 16/21] feat: reworking diff
---
.editorconfig | 3 +
.eslintrc.json | 0
__tests__/settings.test.ts | 2 +-
src/main.ts | 391 +++++++++++++++++++------------------
4 files changed, 210 insertions(+), 186 deletions(-)
create mode 100644 .eslintrc.json
diff --git a/.editorconfig b/.editorconfig
index bcf20c1f..ad243313 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -14,5 +14,8 @@ indent_size = 2
[*.ts]
indent_size = 2
+[*.js]
+indent_size = 2
+
[package.json]
indent_size = 2
diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 00000000..e69de29b
diff --git a/__tests__/settings.test.ts b/__tests__/settings.test.ts
index fb595240..2cd5c63a 100644
--- a/__tests__/settings.test.ts
+++ b/__tests__/settings.test.ts
@@ -1,4 +1,4 @@
-import path from 'path'
+import path from "path"
import * as core from '@actions/core'
import {GithubActionContext} from '../lib/github-action-context'
import fs from 'fs-extra'
diff --git a/src/main.ts b/src/main.ts
index ca538d32..bd241f7a 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1,203 +1,224 @@
-import path from "path";
-import fs from "fs-extra";
-import * as core from "@actions/core";
-import * as coreCommand from "@actions/core/lib/command";
-import * as io from "@actions/io";
-import { inspect } from "util";
-import FileHound from "filehound";
-import { Settings } from "./settings";
-import { GithubActionContext } from "./github-action-context";
-import * as gitSourceProvider from "./git-source-provider";
-import { GithubManager } from "./github-manager";
-import { createCommandManager } from "./git-command-manager";
-import { octokit } from "./octokit";
-import * as stateHelper from "./state-helper";
-import * as refHelper from "./ref-helper";
-import { ISettings } from "./interfaces";
-import { cleanup } from "./github-action-cleanup";
-
-const USER_EMAIL = "user.email";
-const USER_NAME = "user.name";
-
-const filehound = FileHound.create();
+import path from 'path'
+import * as core from '@actions/core'
+import * as coreCommand from '@actions/core/lib/command'
+import fs from 'fs-extra'
+import {inspect} from 'util'
+import {Settings} from './settings'
+import {GithubActionContext} from './github-action-context'
+import * as gitSourceProvider from './git-source-provider'
+import {GithubManager} from './github-manager'
+import {createCommandManager} from './git-command-manager'
+import {octokit} from './octokit'
+import * as stateHelper from './state-helper'
+import * as refHelper from './ref-helper'
+import {ISettings} from './interfaces'
+import {cleanup} from './github-action-cleanup'
+import {sync} from './sync'
+
+const USER_EMAIL = 'user.email'
+const USER_NAME = 'user.name'
async function run(): Promise {
- try {
- const context = new GithubActionContext();
- let settings: ISettings = new Settings(context);
- const githubManager = new GithubManager(octokit(settings));
-
- settings = await prepareTemplateSettings(settings, githubManager);
-
- core.debug(`Used settings: ${inspect(settings)}`);
-
- try {
- // Register problem matcher
- coreCommand.issueCommand("add-matcher", {}, path.join(__dirname, "problem-matcher.json"));
-
- if (
- !(await githubManager.branch.has(
- settings.repositoryOwner,
- settings.repositoryName,
- settings.syncBranchName,
- ))
- ) {
- const baseBranch = await githubManager.branch.get(
- settings.repositoryOwner,
- settings.repositoryName,
- settings.ref.replace(/^refs\/heads\//, ""),
- );
-
- await githubManager.branch.create(
- settings.repositoryOwner,
- settings.repositoryName,
- baseBranch.data.object.sha,
- settings.syncBranchName,
- );
- }
-
- const mainGitCommandManager = await createCommandManager(settings.repositoryPath);
- const ref = `refs/heads/${settings.syncBranchName}`;
-
- await mainGitCommandManager.fetch(0, refHelper.getRefSpec(ref));
-
- const checkoutInfo = await refHelper.getCheckoutInfo(mainGitCommandManager, ref);
-
- await mainGitCommandManager.checkout(checkoutInfo.ref, checkoutInfo.startPoint);
-
- // download the template repo
- await gitSourceProvider.getSource(
- githubManager,
- settings,
- settings.templateRepositoryUrl,
- settings.templateRepositoryPath,
- settings.templateRepositoryRef,
- );
-
- // find all files
- const files: string[] = filehound
- .path(settings.templateRepositoryPath)
- .discard(settings.ignoreList)
- .findSync();
-
- core.debug(`List of found files ${inspect(files)}`);
-
- for (const file of files) {
- fs.copySync(
- file,
- path.join(settings.githubWorkspacePath, file.replace(settings.templateRepositoryPath, "")),
- {
- overwrite: true,
- },
- );
- }
-
- await io.rmRF(settings.templateRepositoryPath);
-
- try {
- core.startGroup("Setting up git user and email");
- await mainGitCommandManager.config(USER_EMAIL, settings.authorEmail, true);
- await mainGitCommandManager.config(USER_NAME, settings.authorName, true);
- core.endGroup();
-
- core.startGroup("Adding all changed files to main repository");
- await mainGitCommandManager.addAll();
- core.endGroup();
-
- core.startGroup("Checking if changes exist that needs to applied");
- if ((await mainGitCommandManager.status(["--porcelain"])) === "") {
- core.setOutput("Git status", `No changes found for ${settings.templateRepositoryUrl}`);
- process.exit(0); // there is currently no neutral exit code
- }
- core.endGroup();
-
- core.startGroup("Creating a commit");
- await mainGitCommandManager.commit(settings.messageHead);
- core.endGroup();
-
- core.startGroup("Pushing new commit");
- await mainGitCommandManager.push(settings.syncBranchName);
- core.endGroup();
-
- // Dump some info about the checked out commit
- await mainGitCommandManager.log1();
- } finally {
- await mainGitCommandManager.tryConfigUnset(USER_EMAIL, true);
- await mainGitCommandManager.tryConfigUnset(USER_NAME, true);
- }
-
- core.startGroup("Creating Pull request");
- await githubManager.pulls.create(
- settings.repositoryOwner,
- settings.repositoryName,
- settings.syncBranchName,
- settings.ref,
- settings.messageHead,
- settings.messageBody,
- );
- core.endGroup();
- } finally {
- // Unregister problem matcher
- coreCommand.issueCommand("remove-matcher", { owner: "checkout-git" }, "");
- }
- } catch (error) {
- core.setFailed(error.message);
- }
-}
+ try {
+ const context = new GithubActionContext()
+ let settings: ISettings = new Settings(context)
+ const githubManager = new GithubManager(octokit(settings))
-async function prepareTemplateSettings(settings: ISettings, githubManager: GithubManager): Promise {
- let template = core.getInput("template_repository", { required: false });
+ settings = await prepareTemplateSettings(settings, githubManager)
- if (!template) {
- const repoData = await githubManager.repos.get(settings.repositoryOwner, settings.repositoryName);
-
- if (repoData.data.template_repository !== undefined) {
- template = repoData.data.template_repository.full_name;
- } else {
- core.setFailed(
- 'Template repository not found, please provide "template_repository" key, that you want to check',
- );
-
- process.exit(1); // there is currently no neutral exit code
- }
- } else {
- const [templateRepositoryOwner, templateRepositoryName] = template.split("/");
- const repoData = await githubManager.repos.get(templateRepositoryOwner, templateRepositoryName);
+ core.debug(`Used settings: ${inspect(settings)}`)
- if (repoData.data.template_repository === undefined) {
- core.setFailed('You need to provide a github template repository for "template_repository"');
-
- process.exit(1); // there is currently no neutral exit code
+ try {
+ // Register problem matcher
+ coreCommand.issueCommand(
+ 'add-matcher',
+ {},
+ path.join(__dirname, 'problem-matcher.json')
+ )
+
+ if (
+ !(await githubManager.branch.has(
+ settings.repositoryOwner,
+ settings.repositoryName,
+ settings.syncBranchName
+ ))
+ ) {
+ const baseBranch = await githubManager.branch.get(
+ settings.repositoryOwner,
+ settings.repositoryName,
+ settings.ref.replace(/^refs\/heads\//, '')
+ )
+
+ await githubManager.branch.create(
+ settings.repositoryOwner,
+ settings.repositoryName,
+ baseBranch.data.object.sha,
+ settings.syncBranchName
+ )
+ }
+
+ const mainGitCommandManager = await createCommandManager(
+ settings.githubWorkspacePath
+ )
+ const ref = `refs/heads/${settings.syncBranchName}`
+
+ await mainGitCommandManager.fetch(0, refHelper.getRefSpec(ref))
+
+ const checkoutInfo = await refHelper.getCheckoutInfo(
+ mainGitCommandManager,
+ ref
+ )
+
+ await mainGitCommandManager.checkout(
+ checkoutInfo.ref,
+ checkoutInfo.startPoint
+ )
+
+ // download the template repo
+ await gitSourceProvider.getSource(
+ githubManager,
+ settings,
+ settings.templateRepositoryUrl,
+ settings.templateRepositoryPath,
+ settings.templateRepositoryRef
+ )
+
+ core.startGroup('Creating and applying patches for found files')
+ await sync(settings)
+
+ await fs.remove(settings.templateRepositoryPath)
+ core.endGroup()
+
+ try {
+ core.startGroup('Setting up git user and email')
+ await mainGitCommandManager.config(
+ USER_EMAIL,
+ settings.authorEmail,
+ true
+ )
+ await mainGitCommandManager.config(USER_NAME, settings.authorName, true)
+ core.endGroup()
+
+ core.startGroup('Adding all changed files to main repository')
+ await mainGitCommandManager.addAll()
+ core.endGroup()
+
+ core.startGroup('Checking if changes exist that needs to applied')
+ if ((await mainGitCommandManager.status(['--porcelain'])) === '') {
+ core.setOutput(
+ 'Git status',
+ `No changes found for ${settings.templateRepositoryUrl}`
+ )
+ process.exit(0) // there is currently no neutral exit code
}
+ core.endGroup()
+
+ core.startGroup('Creating a commit')
+ await mainGitCommandManager.commit(settings.messageHead)
+ core.endGroup()
+
+ core.startGroup('Pushing new commit')
+ await mainGitCommandManager.push(settings.syncBranchName)
+ core.endGroup()
+
+ // Dump some info about the checked out commit
+ await mainGitCommandManager.log1()
+ } finally {
+ await mainGitCommandManager.tryConfigUnset(USER_EMAIL, true)
+ await mainGitCommandManager.tryConfigUnset(USER_NAME, true)
+ }
+
+ core.startGroup('Creating Pull request')
+ await githubManager.pulls.create(
+ settings.repositoryOwner,
+ settings.repositoryName,
+ settings.syncBranchName,
+ settings.ref,
+ settings.messageHead,
+ settings.messageBody
+ )
+ core.endGroup()
+ } finally {
+ // Unregister problem matcher
+ coreCommand.issueCommand('remove-matcher', {owner: 'checkout-git'}, '')
}
+ } catch (error) {
+ core.setFailed(error.message)
+ }
+}
- settings.templateRepository = template;
+async function prepareTemplateSettings(
+ settings: ISettings,
+ githubManager: GithubManager
+): Promise {
+ let template = core.getInput('template_repository', {required: false})
- const [templateRepositoryOwner, templateRepositoryName] = template.split("/");
+ if (!template) {
+ const repoData = await githubManager.repos.get(
+ settings.repositoryOwner,
+ settings.repositoryName
+ )
- settings.templateRepositoryPath = path.resolve(
- settings.githubWorkspacePath,
- `${encodeURIComponent(templateRepositoryOwner)}/${encodeURIComponent(templateRepositoryName)}`,
- );
+ if (repoData.data.template_repository !== undefined) {
+ template = repoData.data.template_repository.full_name
+ } else {
+ core.setFailed(
+ 'Template repository not found, please provide "template_repository" key, that you want to check'
+ )
- if (!(settings.templateRepositoryPath + path.sep).startsWith(settings.githubWorkspacePath + path.sep)) {
- throw new Error(
- `Repository path '${settings.templateRepositoryPath}' is not under '${settings.githubWorkspacePath}'`,
- );
+ process.exit(1) // there is currently no neutral exit code
}
-
- if (settings.sshKey) {
- settings.templateRepositoryUrl = `git@${settings.serverUrl.hostname}:${settings.templateRepository}.git`;
- } else {
- // "origin" is SCHEME://HOSTNAME[:PORT]
- settings.templateRepositoryUrl = `${settings.serverUrl.origin}/${settings.templateRepository}`;
+ } else {
+ const [templateRepositoryOwner, templateRepositoryName] = template.split(
+ '/'
+ )
+ const repoData = await githubManager.repos.get(
+ templateRepositoryOwner,
+ templateRepositoryName
+ )
+
+ if (repoData.data.template_repository === undefined) {
+ core.setFailed(
+ 'You need to provide a github template repository for "template_repository"'
+ )
+
+ process.exit(1) // there is currently no neutral exit code
}
-
- return settings;
+ }
+
+ settings.templateRepository = template
+
+ const [templateRepositoryOwner, templateRepositoryName] = template.split('/')
+
+ settings.templateRepositoryPath = path.resolve(
+ settings.githubWorkspacePath,
+ `${encodeURIComponent(templateRepositoryOwner)}/${encodeURIComponent(
+ templateRepositoryName
+ )}`
+ )
+
+ if (
+ !(settings.templateRepositoryPath + path.sep).startsWith(
+ settings.githubWorkspacePath + path.sep
+ )
+ ) {
+ throw new Error(
+ `Repository path '${settings.templateRepositoryPath}' is not under '${settings.githubWorkspacePath}'`
+ )
+ }
+
+ if (settings.sshKey) {
+ settings.templateRepositoryUrl = `git@${settings.serverUrl.hostname}:${settings.templateRepository}.git`
+ } else {
+ // "origin" is SCHEME://HOSTNAME[:PORT]
+ settings.templateRepositoryUrl = `${settings.serverUrl.origin}/${settings.templateRepository}`
+ }
+
+ return settings
}
if (!stateHelper.IsPost) {
- run();
+ run()
} else {
- cleanup(stateHelper.TemplateRepositoryPath);
+ cleanup(stateHelper.TemplateRepositoryPath)
}
From 23c792fd1ede632eef948973c9d8d41d95ba119e Mon Sep 17 00:00:00 2001
From: prisis
Date: Fri, 19 Feb 2021 11:59:16 +0100
Subject: [PATCH 17/21] feat: reworking diff
---
__tests__/settings.test.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/__tests__/settings.test.ts b/__tests__/settings.test.ts
index 2cd5c63a..fb595240 100644
--- a/__tests__/settings.test.ts
+++ b/__tests__/settings.test.ts
@@ -1,4 +1,4 @@
-import path from "path"
+import path from 'path'
import * as core from '@actions/core'
import {GithubActionContext} from '../lib/github-action-context'
import fs from 'fs-extra'
From c60a5509cb61094e4667fb6cd4ef297b6c858966 Mon Sep 17 00:00:00 2001
From: prisis
Date: Tue, 23 Feb 2021 10:26:52 +0100
Subject: [PATCH 18/21] style: cs fixes
---
.husky/.gitignore | 2 +-
package.json | 64 +-
src/diff/common-prefix.ts | 45 +-
src/diff/common-suffix.ts | 52 +-
src/diff/diff-chars-to-lines.ts | 20 +-
src/diff/diff-common-overlap.ts | 73 +-
src/diff/diff-lines-to-chars.ts | 126 +-
src/diff/diff-lines-to-words.ts | 126 +-
src/diff/diff-match-patch.ts | 2969 +++++++++++++---------------
src/diff/diff-text.ts | 16 +-
src/diff/diff-x-index.ts | 60 +-
src/diff/diff.ts | 98 +-
src/diff/levenshtein.ts | 50 +-
src/diff/match-alphabet.ts | 20 +-
src/diff/patch-deep-object-copy.ts | 41 +-
src/diff/patch-object.ts | 122 +-
src/git-auth-helper.ts | 409 ++--
src/git-command-manager.ts | 444 ++---
src/git-source-provider.ts | 243 ++-
src/github-action-cleanup.ts | 57 +-
src/github-action-context.ts | 62 +-
src/github-manager.ts | 446 ++---
src/interfaces.ts | 424 ++--
src/main.ts | 374 ++--
src/settings.ts | 182 +-
src/sync.ts | 232 +--
yarn.lock | 983 ++++++++-
27 files changed, 4063 insertions(+), 3677 deletions(-)
diff --git a/.husky/.gitignore b/.husky/.gitignore
index c9cdc63b..31354ec1 100644
--- a/.husky/.gitignore
+++ b/.husky/.gitignore
@@ -1 +1 @@
-_
\ No newline at end of file
+_
diff --git a/package.json b/package.json
index 5ce37b81..b4a86c79 100644
--- a/package.json
+++ b/package.json
@@ -52,14 +52,14 @@
"dependencies": {
"@actions/core": "^1.2.6",
"@actions/exec": "^1.0.4",
- "@actions/tool-cache": "^1.3.5",
- "@octokit/action": "^3.0.5",
- "@octokit/plugin-retry": "^3.0.1",
- "@octokit/core": "^3.1.1",
- "diff": "^4.0.2",
+ "@actions/tool-cache": "^1.6.1",
+ "@octokit/action": "^3.4.0",
+ "@octokit/plugin-retry": "^3.0.7",
+ "@octokit/core": "^3.2.5",
+ "diff": "^5.0.0",
"filehound": "^1.17.4",
- "fs-extra": "^9.0.0",
- "uuid": "^8.0.0",
+ "fs-extra": "^9.1.0",
+ "uuid": "^8.3.2",
"which": "^2.0.2",
"yaml": "^1.10.0"
},
@@ -67,35 +67,33 @@
"@anolilab/eslint-config": "1.1.3",
"@anolilab/textlint-config": "1.0.1",
"@anolilab/prettier-config": "1.0.0",
- "@commitlint/cli": "^9.1.2",
- "@commitlint/config-conventional": "^9.1.1",
- "@commitlint/core": "^9.1.1",
- "@octokit/fixtures": "^21.0.5",
- "@octokit/types": "^5.2.0",
- "@types/bluebird": "^3.5.30",
- "@types/diff": "^4.0.2",
- "@types/fs-extra": "^9.0.1",
- "@types/jest": "^26.0.7",
- "@types/js-yaml": "^3.12.3",
- "@types/node": "^14.0.1",
+ "@commitlint/cli": "^12.0.0",
+ "@commitlint/config-conventional": "^12.0.0",
+ "@commitlint/core": "^12.0.0",
+ "@octokit/fixtures": "^21.3.5",
+ "@octokit/types": "^6.10.0",
+ "@types/bluebird": "^3.5.33",
+ "@types/diff": "^5.0.0",
+ "@types/fs-extra": "^9.0.7",
+ "@types/jest": "^26.0.20",
+ "@types/js-yaml": "^4.0.0",
+ "@types/node": "^14.14.31",
"@types/promise-retry": "^1.1.3",
"@types/tmp": "^0.2.0",
- "@types/uuid": "^8.0.0",
- "@types/which": "^1.3.2",
- "@typescript-eslint/parser": "^3.0.0",
+ "@types/uuid": "^8.3.0",
+ "@types/which": "^2.0.0",
+ "@typescript-eslint/parser": "^4.15.2",
"@zeit/ncc": "^0.22.1",
- "conventional-changelog-conventionalcommits": "^4.3.1",
- "cz-conventional-changelog": "^3.0.2",
- "eslint": "^7.5.0",
- "eslint-plugin-github": "^4.1.1",
- "eslint-plugin-jest": "^23.18.0",
- "husky": "^4.2.5",
- "jest": "^26.0.1",
- "jest-circus": "^26.0.1",
- "js-yaml": "^3.14.0",
- "prettier": "^2.0.5",
- "ts-jest": "^26.0.0",
- "typescript": "^3.9.2"
+ "conventional-changelog-conventionalcommits": "^4.5.0",
+ "cz-conventional-changelog": "^3.3.0",
+ "eslint": "^7.20.0",
+ "husky": "^5.1.1",
+ "jest": "^26.6.3",
+ "jest-circus": "^26.6.3",
+ "js-yaml": "^4.0.0",
+ "prettier": "^2.2.1",
+ "ts-jest": "^26.5.1",
+ "typescript": "^4.1.5"
},
"engines": {
"node": ">=12"
diff --git a/src/diff/common-prefix.ts b/src/diff/common-prefix.ts
index 971eaac4..206b35cd 100644
--- a/src/diff/common-prefix.ts
+++ b/src/diff/common-prefix.ts
@@ -28,30 +28,27 @@
* string.
*/
export const commonPrefix = (text1: string, text2: string): number => {
- // Quick check for common null cases.
- if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {
- return 0
- }
- // Binary search.
- // Performance analysis: https://neil.fraser.name/news/2007/10/09/
- let pointerMin = 0
- let pointerMax = Math.min(text1.length, text2.length)
- let pointerMid = pointerMax
- let pointerStart = 0
-
- while (pointerMin < pointerMid) {
- if (
- text1.substring(pointerStart, pointerMid) ==
- text2.substring(pointerStart, pointerMid)
- ) {
- pointerMin = pointerMid
- pointerStart = pointerMin
- } else {
- pointerMax = pointerMid
+ // Quick check for common null cases.
+ if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {
+ return 0;
}
+ // Binary search.
+ // Performance analysis: https://neil.fraser.name/news/2007/10/09/
+ let pointerMin = 0;
+ let pointerMax = Math.min(text1.length, text2.length);
+ let pointerMid = pointerMax;
+ let pointerStart = 0;
+
+ while (pointerMin < pointerMid) {
+ if (text1.substring(pointerStart, pointerMid) == text2.substring(pointerStart, pointerMid)) {
+ pointerMin = pointerMid;
+ pointerStart = pointerMin;
+ } else {
+ pointerMax = pointerMid;
+ }
- pointerMid = Math.floor((pointerMax - pointerMin) / 2 + pointerMin)
- }
+ pointerMid = Math.floor((pointerMax - pointerMin) / 2 + pointerMin);
+ }
- return pointerMid
-}
+ return pointerMid;
+};
diff --git a/src/diff/common-suffix.ts b/src/diff/common-suffix.ts
index 2e592302..268df7a9 100644
--- a/src/diff/common-suffix.ts
+++ b/src/diff/common-suffix.ts
@@ -27,34 +27,30 @@
* @return {number} The number of characters common to the end of each string.
*/
export const commonSuffix = (text1: string, text2: string): number => {
- // Quick check for common null cases.
- if (
- !text1 ||
- !text2 ||
- text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)
- ) {
- return 0
- }
- // Binary search.
- // Performance analysis: https://neil.fraser.name/news/2007/10/09/
- let pointerMin = 0
- let pointerMax = Math.min(text1.length, text2.length)
- let pointerMid = pointerMax
- let pointerEnd = 0
-
- while (pointerMin < pointerMid) {
- if (
- text1.substring(text1.length - pointerMid, text1.length - pointerEnd) ==
- text2.substring(text2.length - pointerMid, text2.length - pointerEnd)
- ) {
- pointerMin = pointerMid
- pointerEnd = pointerMin
- } else {
- pointerMax = pointerMid
+ // Quick check for common null cases.
+ if (!text1 || !text2 || text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {
+ return 0;
}
+ // Binary search.
+ // Performance analysis: https://neil.fraser.name/news/2007/10/09/
+ let pointerMin = 0;
+ let pointerMax = Math.min(text1.length, text2.length);
+ let pointerMid = pointerMax;
+ let pointerEnd = 0;
+
+ while (pointerMin < pointerMid) {
+ if (
+ text1.substring(text1.length - pointerMid, text1.length - pointerEnd) ==
+ text2.substring(text2.length - pointerMid, text2.length - pointerEnd)
+ ) {
+ pointerMin = pointerMid;
+ pointerEnd = pointerMin;
+ } else {
+ pointerMax = pointerMid;
+ }
- pointerMid = Math.floor((pointerMax - pointerMin) / 2 + pointerMin)
- }
+ pointerMid = Math.floor((pointerMax - pointerMin) / 2 + pointerMin);
+ }
- return pointerMid
-}
+ return pointerMid;
+};
diff --git a/src/diff/diff-chars-to-lines.ts b/src/diff/diff-chars-to-lines.ts
index 7d94bd17..276b30d7 100644
--- a/src/diff/diff-chars-to-lines.ts
+++ b/src/diff/diff-chars-to-lines.ts
@@ -18,7 +18,7 @@
* @author fraser@google.com (Neil Fraser)
*/
-import {Diff} from './diff'
+import { Diff } from "./diff";
/**
* Rehydrate the text in a diff from a string of line hashes to real lines of
@@ -28,14 +28,14 @@ import {Diff} from './diff'
* @param {!Array.} lineArray Array of unique strings.
*/
export const diffCharsToLines = (diffs: Diff[], lineArray: string[]) => {
- for (let i = 0; i < diffs.length; i++) {
- const chars = diffs[i].text
- const text: string[] = []
+ for (let i = 0; i < diffs.length; i++) {
+ const chars = diffs[i].text;
+ const text: string[] = [];
- for (let j = 0; j < chars.length; j++) {
- text[j] = lineArray[chars.charCodeAt(j)]
- }
+ for (let j = 0; j < chars.length; j++) {
+ text[j] = lineArray[chars.charCodeAt(j)];
+ }
- diffs[i].text = text.join('')
- }
-}
+ diffs[i].text = text.join("");
+ }
+};
diff --git a/src/diff/diff-common-overlap.ts b/src/diff/diff-common-overlap.ts
index 4cfe64d8..8c64f0dc 100644
--- a/src/diff/diff-common-overlap.ts
+++ b/src/diff/diff-common-overlap.ts
@@ -27,50 +27,47 @@
* string and the start of the second string.
*/
export const diffCommonOverlap = (text1: string, text2: string): number => {
- // Cache the text lengths to prevent multiple calls.
- const text1Length = text1.length
- const text2Length = text2.length
+ // Cache the text lengths to prevent multiple calls.
+ const text1Length = text1.length;
+ const text2Length = text2.length;
- // Eliminate the null case.
- if (text1Length == 0 || text2Length == 0) {
- return 0
- }
- // Truncate the longer string.
- if (text1Length > text2Length) {
- text1 = text1.substring(text1Length - text2Length)
- } else if (text1Length < text2Length) {
- text2 = text2.substring(0, text1Length)
- }
+ // Eliminate the null case.
+ if (text1Length == 0 || text2Length == 0) {
+ return 0;
+ }
+ // Truncate the longer string.
+ if (text1Length > text2Length) {
+ text1 = text1.substring(text1Length - text2Length);
+ } else if (text1Length < text2Length) {
+ text2 = text2.substring(0, text1Length);
+ }
- const textLength = Math.min(text1Length, text2Length)
+ const textLength = Math.min(text1Length, text2Length);
- // Quick check for the worst case.
- if (text1 == text2) {
- return textLength
- }
+ // Quick check for the worst case.
+ if (text1 == text2) {
+ return textLength;
+ }
- // Start by looking for a single character match
- // and increase length until no match is found.
- // Performance analysis: https://neil.fraser.name/news/2010/11/04/
- let best = 0
- let length = 1
+ // Start by looking for a single character match
+ // and increase length until no match is found.
+ // Performance analysis: https://neil.fraser.name/news/2010/11/04/
+ let best = 0;
+ let length = 1;
- while (true) {
- const pattern = text1.substring(textLength - length)
- const found = text2.indexOf(pattern)
+ while (true) {
+ const pattern = text1.substring(textLength - length);
+ const found = text2.indexOf(pattern);
- if (found == -1) {
- return best
- }
+ if (found == -1) {
+ return best;
+ }
- length += found
+ length += found;
- if (
- found == 0 ||
- text1.substring(textLength - length) == text2.substring(0, length)
- ) {
- best = length
- length++
+ if (found == 0 || text1.substring(textLength - length) == text2.substring(0, length)) {
+ best = length;
+ length++;
+ }
}
- }
-}
+};
diff --git a/src/diff/diff-lines-to-chars.ts b/src/diff/diff-lines-to-chars.ts
index e86c964d..b5cbad35 100644
--- a/src/diff/diff-lines-to-chars.ts
+++ b/src/diff/diff-lines-to-chars.ts
@@ -19,9 +19,9 @@
*/
interface IOutput {
- chars1: string
- chars2: string
- lineArray: string[]
+ chars1: string;
+ chars2: string;
+ lineArray: string[];
}
/**
@@ -37,73 +37,69 @@ interface IOutput {
* The zeroth element of the array of unique strings is intentionally blank.
*/
export const diffLinesToChars = (text1: string, text2: string): IOutput => {
- const lineArray: string[] = [] // e.g. lineArray[4] == 'Hello\n'
- const lineHash: {[key: string]: number} = {} // e.g. lineHash['Hello\n'] == 4
-
- // '\x00' is a valid character, but various debuggers don't like it.
- // So we'll insert a junk entry to avoid generating a null character.
- lineArray[0] = ''
-
- /**
- * Split a text into an array of strings. Reduce the texts to a string of
- * hashes where each Unicode character represents one line.
- * Modifies lineArray and linehash through being a closure.
- * @param {string} text String to encode.
- * @return {string} Encoded string.
- * @private
- */
- function diffLinesToCharsMunge(text: string): string {
- let chars = ''
- // Walk the text, pulling out a substring for each line.
- // text.split('\n') would would temporarily double our memory footprint.
- // Modifying text would create many large strings to garbage collect.
- let lineStart = 0
- let lineEnd = -1
- // Keeping our own length variable is faster than looking it up.
- let lineArrayLength = lineArray.length
-
- while (lineEnd < text.length - 1) {
- lineEnd = text.indexOf('\n', lineStart)
-
- if (lineEnd == -1) {
- lineEnd = text.length - 1
- }
-
- let line = text.substring(lineStart, lineEnd + 1)
-
- if (
- lineHash.hasOwnProperty
- ? lineHash.hasOwnProperty(line)
- : lineHash[line] !== undefined
- ) {
- chars += String.fromCharCode(lineHash[line])
- } else {
- if (lineArrayLength == maxLines) {
- // Bail out at 65535 because
- // String.fromCharCode(65536) == String.fromCharCode(0)
- line = text.substring(lineStart)
- lineEnd = text.length
+ const lineArray: string[] = []; // e.g. lineArray[4] == 'Hello\n'
+ const lineHash: { [key: string]: number } = {}; // e.g. lineHash['Hello\n'] == 4
+
+ // '\x00' is a valid character, but various debuggers don't like it.
+ // So we'll insert a junk entry to avoid generating a null character.
+ lineArray[0] = "";
+
+ /**
+ * Split a text into an array of strings. Reduce the texts to a string of
+ * hashes where each Unicode character represents one line.
+ * Modifies lineArray and linehash through being a closure.
+ * @param {string} text String to encode.
+ * @return {string} Encoded string.
+ * @private
+ */
+ function diffLinesToCharsMunge(text: string): string {
+ let chars = "";
+ // Walk the text, pulling out a substring for each line.
+ // text.split('\n') would would temporarily double our memory footprint.
+ // Modifying text would create many large strings to garbage collect.
+ let lineStart = 0;
+ let lineEnd = -1;
+ // Keeping our own length variable is faster than looking it up.
+ let lineArrayLength = lineArray.length;
+
+ while (lineEnd < text.length - 1) {
+ lineEnd = text.indexOf("\n", lineStart);
+
+ if (lineEnd == -1) {
+ lineEnd = text.length - 1;
+ }
+
+ let line = text.substring(lineStart, lineEnd + 1);
+
+ if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) : lineHash[line] !== undefined) {
+ chars += String.fromCharCode(lineHash[line]);
+ } else {
+ if (lineArrayLength == maxLines) {
+ // Bail out at 65535 because
+ // String.fromCharCode(65536) == String.fromCharCode(0)
+ line = text.substring(lineStart);
+ lineEnd = text.length;
+ }
+
+ chars += String.fromCharCode(lineArrayLength);
+ lineHash[line] = lineArrayLength;
+ lineArray[lineArrayLength++] = line;
+ }
+
+ lineStart = lineEnd + 1;
}
- chars += String.fromCharCode(lineArrayLength)
- lineHash[line] = lineArrayLength
- lineArray[lineArrayLength++] = line
- }
-
- lineStart = lineEnd + 1
+ return chars;
}
- return chars
- }
-
- // Allocate 2/3rds of the space for text1, the rest for text2.
- let maxLines = 40000
+ // Allocate 2/3rds of the space for text1, the rest for text2.
+ let maxLines = 40000;
- const chars1 = diffLinesToCharsMunge(text1)
+ const chars1 = diffLinesToCharsMunge(text1);
- maxLines = 65535
+ maxLines = 65535;
- const chars2 = diffLinesToCharsMunge(text2)
+ const chars2 = diffLinesToCharsMunge(text2);
- return {chars1, chars2, lineArray}
-}
+ return { chars1, chars2, lineArray };
+};
diff --git a/src/diff/diff-lines-to-words.ts b/src/diff/diff-lines-to-words.ts
index d8ef1838..cf3da280 100644
--- a/src/diff/diff-lines-to-words.ts
+++ b/src/diff/diff-lines-to-words.ts
@@ -19,9 +19,9 @@
*/
interface IOutput {
- chars1: string
- chars2: string
- lineArray: string[]
+ chars1: string;
+ chars2: string;
+ lineArray: string[];
}
/**
@@ -37,73 +37,69 @@ interface IOutput {
* The zeroth element of the array of unique strings is intentionally blank.
*/
export const diffLinesToWords = (text1: string, text2: string): IOutput => {
- const lineArray: string[] = [] // e.g. lineArray[4] == 'Hello\n'
- const lineHash: {[key: string]: number} = {} // e.g. lineHash['Hello\n'] == 4
-
- // '\x00' is a valid character, but various debuggers don't like it.
- // So we'll insert a junk entry to avoid generating a null character.
- lineArray[0] = ''
-
- /**
- * Split a text into an array of strings. Reduce the texts to a string of
- * hashes where each Unicode character represents one line.
- * Modifies lineArray and linehash through being a closure.
- * @param {string} text String to encode.
- * @return {string} Encoded string.
- * @private
- */
- function diffLinesToCharsMunge(text: string): string {
- let chars = ''
- // Walk the text, pulling out a substring for each line.
- // text.split('\n') would would temporarily double our memory footprint.
- // Modifying text would create many large strings to garbage collect.
- let lineStart = 0
- let lineEnd = -1
- // Keeping our own length variable is faster than looking it up.
- let lineArrayLength = lineArray.length
-
- while (lineEnd < text.length - 1) {
- lineEnd = text.indexOf(' ', lineStart)
-
- if (lineEnd == -1) {
- lineEnd = text.length - 1
- }
-
- let line = text.substring(lineStart, lineEnd + 1)
-
- if (
- lineHash.hasOwnProperty
- ? lineHash.hasOwnProperty(line)
- : lineHash[line] !== undefined
- ) {
- chars += String.fromCharCode(lineHash[line])
- } else {
- if (lineArrayLength == maxLines) {
- // Bail out at 65535 because
- // String.fromCharCode(65536) == String.fromCharCode(0)
- line = text.substring(lineStart)
- lineEnd = text.length
+ const lineArray: string[] = []; // e.g. lineArray[4] == 'Hello\n'
+ const lineHash: { [key: string]: number } = {}; // e.g. lineHash['Hello\n'] == 4
+
+ // '\x00' is a valid character, but various debuggers don't like it.
+ // So we'll insert a junk entry to avoid generating a null character.
+ lineArray[0] = "";
+
+ /**
+ * Split a text into an array of strings. Reduce the texts to a string of
+ * hashes where each Unicode character represents one line.
+ * Modifies lineArray and linehash through being a closure.
+ * @param {string} text String to encode.
+ * @return {string} Encoded string.
+ * @private
+ */
+ function diffLinesToCharsMunge(text: string): string {
+ let chars = "";
+ // Walk the text, pulling out a substring for each line.
+ // text.split('\n') would would temporarily double our memory footprint.
+ // Modifying text would create many large strings to garbage collect.
+ let lineStart = 0;
+ let lineEnd = -1;
+ // Keeping our own length variable is faster than looking it up.
+ let lineArrayLength = lineArray.length;
+
+ while (lineEnd < text.length - 1) {
+ lineEnd = text.indexOf(" ", lineStart);
+
+ if (lineEnd == -1) {
+ lineEnd = text.length - 1;
+ }
+
+ let line = text.substring(lineStart, lineEnd + 1);
+
+ if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) : lineHash[line] !== undefined) {
+ chars += String.fromCharCode(lineHash[line]);
+ } else {
+ if (lineArrayLength == maxLines) {
+ // Bail out at 65535 because
+ // String.fromCharCode(65536) == String.fromCharCode(0)
+ line = text.substring(lineStart);
+ lineEnd = text.length;
+ }
+
+ chars += String.fromCharCode(lineArrayLength);
+ lineHash[line] = lineArrayLength;
+ lineArray[lineArrayLength++] = line;
+ }
+
+ lineStart = lineEnd + 1;
}
- chars += String.fromCharCode(lineArrayLength)
- lineHash[line] = lineArrayLength
- lineArray[lineArrayLength++] = line
- }
-
- lineStart = lineEnd + 1
+ return chars;
}
- return chars
- }
-
- // Allocate 2/3rds of the space for text1, the rest for text2.
- let maxLines = 40000
+ // Allocate 2/3rds of the space for text1, the rest for text2.
+ let maxLines = 40000;
- const chars1 = diffLinesToCharsMunge(text1)
+ const chars1 = diffLinesToCharsMunge(text1);
- maxLines = 65535
+ maxLines = 65535;
- const chars2 = diffLinesToCharsMunge(text2)
+ const chars2 = diffLinesToCharsMunge(text2);
- return {chars1, chars2, lineArray}
-}
+ return { chars1, chars2, lineArray };
+};
diff --git a/src/diff/diff-match-patch.ts b/src/diff/diff-match-patch.ts
index 922814ca..9c91b8b1 100644
--- a/src/diff/diff-match-patch.ts
+++ b/src/diff/diff-match-patch.ts
@@ -19,1745 +19,1592 @@
* Applies the patch onto another text, allowing for errors.
* @author fraser@google.com (Neil Fraser)
*/
-import {Diff} from './diff'
-import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT} from '../interfaces'
-import {PatchObject} from './patch-object'
-import {levenshtein} from './levenshtein'
-import {diffLinesToChars} from './diff-lines-to-chars'
-import {diffCharsToLines} from './diff-chars-to-lines'
-import {commonSuffix} from './common-suffix'
-import {commonPrefix} from './common-prefix'
-import {diffXIndex} from './diff-x-index'
-import {diffCommonOverlap} from './diff-common-overlap'
-import {matchAlphabet} from './match-alphabet'
-import {patchDeepObjectCopy} from './patch-deep-object-copy'
-import {diffText} from './diff-text'
+import { Diff } from "./diff";
+import { DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT } from "../interfaces";
+import { PatchObject } from "./patch-object";
+import { levenshtein } from "./levenshtein";
+import { diffLinesToChars } from "./diff-lines-to-chars";
+import { diffCharsToLines } from "./diff-chars-to-lines";
+import { commonSuffix } from "./common-suffix";
+import { commonPrefix } from "./common-prefix";
+import { diffXIndex } from "./diff-x-index";
+import { diffCommonOverlap } from "./diff-common-overlap";
+import { matchAlphabet } from "./match-alphabet";
+import { patchDeepObjectCopy } from "./patch-deep-object-copy";
+import { diffText } from "./diff-text";
export default class DiffMatchPatch {
- DiffTimeout: number
- DiffEditCost: number
- MatchThreshold: number
- MatchDistance: number
- PatchDeleteThreshold: number
- PatchMargin: number
- MatchMaxBits: number
-
- // Define some regex patterns for matching boundaries.
- private static nonAlphaNumericRegex = /[^a-zA-Z0-9]/
- private static whitespaceRegex = /\s/
- private static linebreakRegex = /[\r\n]/
- private static blankLineEndRegex = /\n\r?\n$/
- private static blankLineStartRegex = /^\r?\n\r?\n/
-
- constructor() {
- // Defaults.
- // Redefine these in your program to override the defaults.
-
- // Number of seconds to map a diff before giving up (0 for infinity).
- this.DiffTimeout = 1.0
- // Cost of an empty edit operation in terms of edit characters.
- this.DiffEditCost = 4
- // At what point is no match declared (0.0 = perfection, 1.0 = very loose).
- this.MatchThreshold = 0.5
- // How far to search for a match (0 = exact location, 1000+ = broad match).
- // A match this many characters away from the expected location will add
- // 1.0 to the score (0.0 is a perfect match).
- this.MatchDistance = 1000
- // When deleting a large block of text (over ~64 characters), how close do
- // the contents have to be to match the expected contents. (0.0 = perfection,
- // 1.0 = very loose). Note that MatchThreshold controls how closely the
- // end points of a delete need to match.
- this.PatchDeleteThreshold = 0.5
- // Chunk size for context length.
- this.PatchMargin = 4
-
- // The number of bits in an int.
- this.MatchMaxBits = 32
- }
-
- /**
- * Find the differences between two texts. Simplifies the problem by stripping
- * any common prefix or suffix off the texts before diffing.
- *
- * @param {string} text1 Old string to be diffed.
- * @param {string} text2 New string to be diffed.
- * @param {boolean} optCheckLines Optional speedup flag. If present and false,
- * then don't run a line-level diff first to identify the changed areas.
- * Defaults to true, which does a faster, slightly less optimal diff.
- * @param {number} optDeadline Optional time when the diff should be complete
- * by. Used internally for recursive calls. Users should set DiffTimeout
- * instead.
- *
- * @return {!Array.} Array of diff tuples.
- */
- diff(
- text1: string,
- text2: string,
- optCheckLines?: boolean,
- optDeadline?: number
- ): Diff[] {
- // Set a deadline by which time the diff must be complete.
- if (typeof optDeadline == 'undefined') {
- if (this.DiffTimeout <= 0) {
- optDeadline = Number.MAX_VALUE
- } else {
- optDeadline = new Date().getTime() + this.DiffTimeout * 1000
- }
+ DiffTimeout: number;
+ DiffEditCost: number;
+ MatchThreshold: number;
+ MatchDistance: number;
+ PatchDeleteThreshold: number;
+ PatchMargin: number;
+ MatchMaxBits: number;
+
+ // Define some regex patterns for matching boundaries.
+ private static nonAlphaNumericRegex = /[^a-zA-Z0-9]/;
+ private static whitespaceRegex = /\s/;
+ private static linebreakRegex = /[\r\n]/;
+ private static blankLineEndRegex = /\n\r?\n$/;
+ private static blankLineStartRegex = /^\r?\n\r?\n/;
+
+ constructor() {
+ // Defaults.
+ // Redefine these in your program to override the defaults.
+
+ // Number of seconds to map a diff before giving up (0 for infinity).
+ this.DiffTimeout = 1.0;
+ // Cost of an empty edit operation in terms of edit characters.
+ this.DiffEditCost = 4;
+ // At what point is no match declared (0.0 = perfection, 1.0 = very loose).
+ this.MatchThreshold = 0.5;
+ // How far to search for a match (0 = exact location, 1000+ = broad match).
+ // A match this many characters away from the expected location will add
+ // 1.0 to the score (0.0 is a perfect match).
+ this.MatchDistance = 1000;
+ // When deleting a large block of text (over ~64 characters), how close do
+ // the contents have to be to match the expected contents. (0.0 = perfection,
+ // 1.0 = very loose). Note that MatchThreshold controls how closely the
+ // end points of a delete need to match.
+ this.PatchDeleteThreshold = 0.5;
+ // Chunk size for context length.
+ this.PatchMargin = 4;
+
+ // The number of bits in an int.
+ this.MatchMaxBits = 32;
}
- const deadline = optDeadline
+ /**
+ * Find the differences between two texts. Simplifies the problem by stripping
+ * any common prefix or suffix off the texts before diffing.
+ *
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {boolean} optCheckLines Optional speedup flag. If present and false,
+ * then don't run a line-level diff first to identify the changed areas.
+ * Defaults to true, which does a faster, slightly less optimal diff.
+ * @param {number} optDeadline Optional time when the diff should be complete
+ * by. Used internally for recursive calls. Users should set DiffTimeout
+ * instead.
+ *
+ * @return {!Array.} Array of diff tuples.
+ */
+ diff(text1: string, text2: string, optCheckLines?: boolean, optDeadline?: number): Diff[] {
+ // Set a deadline by which time the diff must be complete.
+ if (typeof optDeadline == "undefined") {
+ if (this.DiffTimeout <= 0) {
+ optDeadline = Number.MAX_VALUE;
+ } else {
+ optDeadline = new Date().getTime() + this.DiffTimeout * 1000;
+ }
+ }
- // Check for equality (speedup).
- if (text1 == text2) {
- if (text1 !== '') {
- return [new Diff(DIFF_EQUAL, text1)]
- }
+ const deadline = optDeadline;
- return []
- }
+ // Check for equality (speedup).
+ if (text1 == text2) {
+ if (text1 !== "") {
+ return [new Diff(DIFF_EQUAL, text1)];
+ }
- if (typeof optCheckLines == 'undefined') {
- optCheckLines = true
- }
+ return [];
+ }
- const checkLines = optCheckLines
+ if (typeof optCheckLines == "undefined") {
+ optCheckLines = true;
+ }
- // Trim off common prefix (speedup).
- let commonLength = commonPrefix(text1, text2)
+ const checkLines = optCheckLines;
- const prefix = text1.substring(0, commonLength)
+ // Trim off common prefix (speedup).
+ let commonLength = commonPrefix(text1, text2);
- text1 = text1.substring(commonLength)
- text2 = text2.substring(commonLength)
+ const prefix = text1.substring(0, commonLength);
- // Trim off common suffix (speedup).
- commonLength = commonSuffix(text1, text2)
+ text1 = text1.substring(commonLength);
+ text2 = text2.substring(commonLength);
- const suffix = text1.substring(text1.length - commonLength)
+ // Trim off common suffix (speedup).
+ commonLength = commonSuffix(text1, text2);
- text1 = text1.substring(0, text1.length - commonLength)
- text2 = text2.substring(0, text2.length - commonLength)
+ const suffix = text1.substring(text1.length - commonLength);
- // Compute the diff on the middle block.
- const diffs = this.diffCompute(text1, text2, checkLines, deadline)
+ text1 = text1.substring(0, text1.length - commonLength);
+ text2 = text2.substring(0, text2.length - commonLength);
- // Restore the prefix and suffix.
- if (prefix) {
- diffs.unshift(new Diff(DIFF_EQUAL, prefix))
- }
+ // Compute the diff on the middle block.
+ const diffs = this.diffCompute(text1, text2, checkLines, deadline);
- if (suffix) {
- diffs.push(new Diff(DIFF_EQUAL, suffix))
- }
+ // Restore the prefix and suffix.
+ if (prefix) {
+ diffs.unshift(new Diff(DIFF_EQUAL, prefix));
+ }
- this.diffCleanupMerge(diffs)
-
- return diffs
- }
-
- /**
- * Find the differences between two texts. Assumes that the texts do not
- * have any common prefix or suffix.
- *
- * @param {string} text1 Old string to be diffed.
- * @param {string} text2 New string to be diffed.
- * @param {boolean} checkLines Speedup flag. If false, then don't run a
- * line-level diff first to identify the changed areas.
- * If true, then run a faster, slightly less optimal diff.
- * @param {number} deadline Time when the diff should be complete by.
- *
- * @return {!Array.} Array of diff tuples.
- *
- * @private
- */
- private diffCompute(
- text1: string,
- text2: string,
- checkLines: boolean,
- deadline: number
- ): Diff[] {
- let diffs
-
- if (!text1) {
- // Just add some text (speedup).
- return [new Diff(DIFF_INSERT, text2)]
- }
+ if (suffix) {
+ diffs.push(new Diff(DIFF_EQUAL, suffix));
+ }
- if (!text2) {
- // Just delete some text (speedup).
- return [new Diff(DIFF_DELETE, text1)]
+ this.diffCleanupMerge(diffs);
+
+ return diffs;
}
- const longtext = text1.length > text2.length ? text1 : text2
- const shortText = text1.length > text2.length ? text2 : text1
- const i = longtext.indexOf(shortText)
+ /**
+ * Find the differences between two texts. Assumes that the texts do not
+ * have any common prefix or suffix.
+ *
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {boolean} checkLines Speedup flag. If false, then don't run a
+ * line-level diff first to identify the changed areas.
+ * If true, then run a faster, slightly less optimal diff.
+ * @param {number} deadline Time when the diff should be complete by.
+ *
+ * @return {!Array.} Array of diff tuples.
+ *
+ * @private
+ */
+ private diffCompute(text1: string, text2: string, checkLines: boolean, deadline: number): Diff[] {
+ let diffs;
- if (i != -1) {
- // Shorter text is inside the longer text (speedup).
- diffs = [
- new Diff(DIFF_INSERT, longtext.substring(0, i)),
- new Diff(DIFF_EQUAL, shortText),
- new Diff(DIFF_INSERT, longtext.substring(i + shortText.length))
- ]
+ if (!text1) {
+ // Just add some text (speedup).
+ return [new Diff(DIFF_INSERT, text2)];
+ }
- // Swap insertions for deletions if diff is reversed.
- if (text1.length > text2.length) {
- diffs[0].operation = diffs[2].operation = DIFF_DELETE
- }
+ if (!text2) {
+ // Just delete some text (speedup).
+ return [new Diff(DIFF_DELETE, text1)];
+ }
- return diffs
- }
+ const longtext = text1.length > text2.length ? text1 : text2;
+ const shortText = text1.length > text2.length ? text2 : text1;
+ const i = longtext.indexOf(shortText);
+
+ if (i != -1) {
+ // Shorter text is inside the longer text (speedup).
+ diffs = [
+ new Diff(DIFF_INSERT, longtext.substring(0, i)),
+ new Diff(DIFF_EQUAL, shortText),
+ new Diff(DIFF_INSERT, longtext.substring(i + shortText.length)),
+ ];
+
+ // Swap insertions for deletions if diff is reversed.
+ if (text1.length > text2.length) {
+ diffs[0].operation = diffs[2].operation = DIFF_DELETE;
+ }
- if (shortText.length == 1) {
- // Single character string.
- // After the previous speedup, the character can't be an equality.
- return [new Diff(DIFF_DELETE, text1), new Diff(DIFF_INSERT, text2)]
- }
+ return diffs;
+ }
- // Check to see if the problem can be split in two.
- const hm = this.diffHalfMatch(text1, text2)
-
- if (hm) {
- // A half-match was found, sort out the return data.
- const text1A = hm[0]
- const text1B = hm[1]
- const text2A = hm[2]
- const text2B = hm[3]
- const midCommon = hm[4]
- // Send both pairs off for separate processing.
- const diffsA = this.diff(text1A, text2A, checkLines, deadline)
- const diffsB = this.diff(text1B, text2B, checkLines, deadline)
-
- // Merge the results.
- return diffsA.concat([new Diff(DIFF_EQUAL, midCommon)], diffsB)
- }
+ if (shortText.length == 1) {
+ // Single character string.
+ // After the previous speedup, the character can't be an equality.
+ return [new Diff(DIFF_DELETE, text1), new Diff(DIFF_INSERT, text2)];
+ }
+
+ // Check to see if the problem can be split in two.
+ const hm = this.diffHalfMatch(text1, text2);
+
+ if (hm) {
+ // A half-match was found, sort out the return data.
+ const text1A = hm[0];
+ const text1B = hm[1];
+ const text2A = hm[2];
+ const text2B = hm[3];
+ const midCommon = hm[4];
+ // Send both pairs off for separate processing.
+ const diffsA = this.diff(text1A, text2A, checkLines, deadline);
+ const diffsB = this.diff(text1B, text2B, checkLines, deadline);
+
+ // Merge the results.
+ return diffsA.concat([new Diff(DIFF_EQUAL, midCommon)], diffsB);
+ }
- if (checkLines && text1.length > 100 && text2.length > 100) {
- return this.diffLineMode(text1, text2, deadline)
+ if (checkLines && text1.length > 100 && text2.length > 100) {
+ return this.diffLineMode(text1, text2, deadline);
+ }
+
+ return this.diffBisect(text1, text2, deadline);
}
- return this.diffBisect(text1, text2, deadline)
- }
-
- /**
- * Do a quick line-level diff on both strings, then rediff the parts for
- * greater accuracy.
- * This speedup can produce non-minimal diffs.
- *
- * @param {string} text1 Old string to be diffed.
- * @param {string} text2 New string to be diffed.
- * @param {number} deadline Time when the diff should be complete by.
- *
- * @return {!Array.} Array of diff tuples.
- *
- * @private
- */
- private diffLineMode(text1: string, text2: string, deadline: number): Diff[] {
- // Scan the text on a line-by-line basis first.
- const a = diffLinesToChars(text1, text2)
- text1 = a.chars1
- text2 = a.chars2
- const lineArray = a.lineArray
-
- const diffs = this.diff(text1, text2, false, deadline)
-
- // Convert the diff back to original text.
- diffCharsToLines(diffs, lineArray)
- // Eliminate freak matches (e.g. blank lines)
- this.diffCleanupSemantic(diffs)
-
- // Rediff any replacement blocks, this time character-by-character.
- // Add a dummy entry at the end.
- diffs.push(new Diff(DIFF_EQUAL, ''))
-
- let pointer = 0
- let countDelete = 0
- let countInsert = 0
- let textDelete = ''
- let textInsert = ''
-
- while (pointer < diffs.length) {
- switch (diffs[pointer].operation) {
- case DIFF_INSERT:
- countInsert++
- textInsert += diffs[pointer].text
- break
- case DIFF_DELETE:
- countDelete++
- textDelete += diffs[pointer].text
- break
- case DIFF_EQUAL:
- // Upon reaching an equality, check for prior redundancies.
- if (countDelete >= 1 && countInsert >= 1) {
- // Delete the offending records and add the merged ones.
- diffs.splice(
- pointer - countDelete - countInsert,
- countDelete + countInsert
- )
-
- pointer = pointer - countDelete - countInsert
-
- const subDiff = this.diff(textDelete, textInsert, false, deadline)
-
- for (let j = subDiff.length - 1; j >= 0; j--) {
- diffs.splice(pointer, 0, subDiff[j])
+ /**
+ * Do a quick line-level diff on both strings, then rediff the parts for
+ * greater accuracy.
+ * This speedup can produce non-minimal diffs.
+ *
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {number} deadline Time when the diff should be complete by.
+ *
+ * @return {!Array.} Array of diff tuples.
+ *
+ * @private
+ */
+ private diffLineMode(text1: string, text2: string, deadline: number): Diff[] {
+ // Scan the text on a line-by-line basis first.
+ const a = diffLinesToChars(text1, text2);
+ text1 = a.chars1;
+ text2 = a.chars2;
+ const lineArray = a.lineArray;
+
+ const diffs = this.diff(text1, text2, false, deadline);
+
+ // Convert the diff back to original text.
+ diffCharsToLines(diffs, lineArray);
+ // Eliminate freak matches (e.g. blank lines)
+ this.diffCleanupSemantic(diffs);
+
+ // Rediff any replacement blocks, this time character-by-character.
+ // Add a dummy entry at the end.
+ diffs.push(new Diff(DIFF_EQUAL, ""));
+
+ let pointer = 0;
+ let countDelete = 0;
+ let countInsert = 0;
+ let textDelete = "";
+ let textInsert = "";
+
+ while (pointer < diffs.length) {
+ switch (diffs[pointer].operation) {
+ case DIFF_INSERT:
+ countInsert++;
+ textInsert += diffs[pointer].text;
+ break;
+ case DIFF_DELETE:
+ countDelete++;
+ textDelete += diffs[pointer].text;
+ break;
+ case DIFF_EQUAL:
+ // Upon reaching an equality, check for prior redundancies.
+ if (countDelete >= 1 && countInsert >= 1) {
+ // Delete the offending records and add the merged ones.
+ diffs.splice(pointer - countDelete - countInsert, countDelete + countInsert);
+
+ pointer = pointer - countDelete - countInsert;
+
+ const subDiff = this.diff(textDelete, textInsert, false, deadline);
+
+ for (let j = subDiff.length - 1; j >= 0; j--) {
+ diffs.splice(pointer, 0, subDiff[j]);
+ }
+
+ pointer = pointer + subDiff.length;
+ }
+
+ countInsert = 0;
+ countDelete = 0;
+ textDelete = "";
+ textInsert = "";
+ break;
}
- pointer = pointer + subDiff.length
- }
-
- countInsert = 0
- countDelete = 0
- textDelete = ''
- textInsert = ''
- break
- }
+ pointer++;
+ }
- pointer++
- }
+ diffs.pop(); // Remove the dummy entry at the end.
- diffs.pop() // Remove the dummy entry at the end.
-
- return diffs
- }
-
- /**
- * Find the 'middle snake' of a diff, split the problem in two
- * and return the recursively constructed diff.
- * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.
- *
- * @param {string} text1 Old string to be diffed.
- * @param {string} text2 New string to be diffed.
- * @param {number} deadline Time at which to bail if not yet complete.
- *
- * @return {!Array.} Array of diff tuples.
- *
- * @private
- */
- private diffBisect(text1: string, text2: string, deadline: number): Diff[] {
- // Cache the text lengths to prevent multiple calls.
- const text1Length = text1.length
- const text2Length = text2.length
- const maxD = Math.ceil((text1Length + text2Length) / 2)
- const vOffset = maxD
- const vLength = 2 * maxD
- const v1 = new Array(vLength)
- const v2 = new Array(vLength)
-
- // Setting all elements to -1 is faster in Chrome & Firefox than mixing
- // integers and undefined.
- for (let x = 0; x < vLength; x++) {
- v1[x] = -1
- v2[x] = -1
+ return diffs;
}
- v1[vOffset + 1] = 0
- v2[vOffset + 1] = 0
-
- const delta = text1Length - text2Length
- // If the total number of characters is odd, then the front path will collide
- // with the reverse path.
- const front = delta % 2 != 0
- // Offsets for start and end of k loop.
- // Prevents mapping of space beyond the grid.
- let k1start = 0
- let k1end = 0
- let k2start = 0
- let k2end = 0
-
- for (let d = 0; d < maxD; d++) {
- // Bail out if deadline is reached.
- if (new Date().getTime() > deadline) {
- break
- }
-
- // Walk the front path one step.
- for (let k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {
- const k1Offset = vOffset + k1
- let x1: number
-
- if (k1 == -d || (k1 != d && v1[k1Offset - 1] < v1[k1Offset + 1])) {
- x1 = v1[k1Offset + 1]
- } else {
- x1 = v1[k1Offset - 1] + 1
+ /**
+ * Find the 'middle snake' of a diff, split the problem in two
+ * and return the recursively constructed diff.
+ * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.
+ *
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {number} deadline Time at which to bail if not yet complete.
+ *
+ * @return {!Array.} Array of diff tuples.
+ *
+ * @private
+ */
+ private diffBisect(text1: string, text2: string, deadline: number): Diff[] {
+ // Cache the text lengths to prevent multiple calls.
+ const text1Length = text1.length;
+ const text2Length = text2.length;
+ const maxD = Math.ceil((text1Length + text2Length) / 2);
+ const vOffset = maxD;
+ const vLength = 2 * maxD;
+ const v1 = new Array(vLength);
+ const v2 = new Array(vLength);
+
+ // Setting all elements to -1 is faster in Chrome & Firefox than mixing
+ // integers and undefined.
+ for (let x = 0; x < vLength; x++) {
+ v1[x] = -1;
+ v2[x] = -1;
}
- let y1 = x1 - k1
+ v1[vOffset + 1] = 0;
+ v2[vOffset + 1] = 0;
+
+ const delta = text1Length - text2Length;
+ // If the total number of characters is odd, then the front path will collide
+ // with the reverse path.
+ const front = delta % 2 != 0;
+ // Offsets for start and end of k loop.
+ // Prevents mapping of space beyond the grid.
+ let k1start = 0;
+ let k1end = 0;
+ let k2start = 0;
+ let k2end = 0;
+
+ for (let d = 0; d < maxD; d++) {
+ // Bail out if deadline is reached.
+ if (new Date().getTime() > deadline) {
+ break;
+ }
- while (
- x1 < text1Length &&
- y1 < text2Length &&
- text1.charAt(x1) == text2.charAt(y1)
- ) {
- x1++
- y1++
- }
+ // Walk the front path one step.
+ for (let k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {
+ const k1Offset = vOffset + k1;
+ let x1: number;
- v1[k1Offset] = x1
+ if (k1 == -d || (k1 != d && v1[k1Offset - 1] < v1[k1Offset + 1])) {
+ x1 = v1[k1Offset + 1];
+ } else {
+ x1 = v1[k1Offset - 1] + 1;
+ }
- if (x1 > text1Length) {
- // Ran off the right of the graph.
- k1end += 2
- } else if (y1 > text2Length) {
- // Ran off the bottom of the graph.
- k1start += 2
- } else if (front) {
- const k2Offset = vOffset + delta - k1
+ let y1 = x1 - k1;
- if (k2Offset >= 0 && k2Offset < vLength && v2[k2Offset] != -1) {
- // Mirror x2 onto top-left coordinate system.
- const x2 = text1Length - v2[k2Offset]
+ while (x1 < text1Length && y1 < text2Length && text1.charAt(x1) == text2.charAt(y1)) {
+ x1++;
+ y1++;
+ }
- if (x1 >= x2) {
- // Overlap detected.
- return this.diffBisectSplit(text1, text2, x1, y1, deadline)
+ v1[k1Offset] = x1;
+
+ if (x1 > text1Length) {
+ // Ran off the right of the graph.
+ k1end += 2;
+ } else if (y1 > text2Length) {
+ // Ran off the bottom of the graph.
+ k1start += 2;
+ } else if (front) {
+ const k2Offset = vOffset + delta - k1;
+
+ if (k2Offset >= 0 && k2Offset < vLength && v2[k2Offset] != -1) {
+ // Mirror x2 onto top-left coordinate system.
+ const x2 = text1Length - v2[k2Offset];
+
+ if (x1 >= x2) {
+ // Overlap detected.
+ return this.diffBisectSplit(text1, text2, x1, y1, deadline);
+ }
+ }
+ }
}
- }
- }
- }
- // Walk the reverse path one step.
- for (let k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {
- const k2Offset = vOffset + k2
- let x2: number
+ // Walk the reverse path one step.
+ for (let k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {
+ const k2Offset = vOffset + k2;
+ let x2: number;
- if (k2 == -d || (k2 != d && v2[k2Offset - 1] < v2[k2Offset + 1])) {
- x2 = v2[k2Offset + 1]
- } else {
- x2 = v2[k2Offset - 1] + 1
- }
+ if (k2 == -d || (k2 != d && v2[k2Offset - 1] < v2[k2Offset + 1])) {
+ x2 = v2[k2Offset + 1];
+ } else {
+ x2 = v2[k2Offset - 1] + 1;
+ }
- let y2 = x2 - k2
+ let y2 = x2 - k2;
- while (
- x2 < text1Length &&
- y2 < text2Length &&
- text1.charAt(text1Length - x2 - 1) ==
- text2.charAt(text2Length - y2 - 1)
- ) {
- x2++
- y2++
- }
+ while (
+ x2 < text1Length &&
+ y2 < text2Length &&
+ text1.charAt(text1Length - x2 - 1) == text2.charAt(text2Length - y2 - 1)
+ ) {
+ x2++;
+ y2++;
+ }
- v2[k2Offset] = x2
-
- if (x2 > text1Length) {
- // Ran off the left of the graph.
- k2end += 2
- } else if (y2 > text2Length) {
- // Ran off the top of the graph.
- k2start += 2
- } else if (!front) {
- const k1Offset = vOffset + delta - k2
-
- if (k1Offset >= 0 && k1Offset < vLength && v1[k1Offset] != -1) {
- const x1 = v1[k1Offset]
- const y1 = vOffset + x1 - k1Offset
- // Mirror x2 onto top-left coordinate system.
- x2 = text1Length - x2
-
- if (x1 >= x2) {
- // Overlap detected.
- return this.diffBisectSplit(text1, text2, x1, y1, deadline)
+ v2[k2Offset] = x2;
+
+ if (x2 > text1Length) {
+ // Ran off the left of the graph.
+ k2end += 2;
+ } else if (y2 > text2Length) {
+ // Ran off the top of the graph.
+ k2start += 2;
+ } else if (!front) {
+ const k1Offset = vOffset + delta - k2;
+
+ if (k1Offset >= 0 && k1Offset < vLength && v1[k1Offset] != -1) {
+ const x1 = v1[k1Offset];
+ const y1 = vOffset + x1 - k1Offset;
+ // Mirror x2 onto top-left coordinate system.
+ x2 = text1Length - x2;
+
+ if (x1 >= x2) {
+ // Overlap detected.
+ return this.diffBisectSplit(text1, text2, x1, y1, deadline);
+ }
+ }
+ }
}
- }
}
- }
- }
- // Diff took too long and hit the deadline or
- // number of diffs equals number of characters, no commonality at all.
- return [new Diff(DIFF_DELETE, text1), new Diff(DIFF_INSERT, text2)]
- }
-
- /**
- * Given the location of the 'middle snake', split the diff in two parts
- * and recurse.
- *
- * @param {string} text1 Old string to be diffed.
- * @param {string} text2 New string to be diffed.
- * @param {number} x Index of split point in text1.
- * @param {number} y Index of split point in text2.
- * @param {number} deadline Time at which to bail if not yet complete.
- *
- * @return {!Array.} Array of diff tuples.
- *
- * @private
- */
- private diffBisectSplit(
- text1: string,
- text2: string,
- x: number,
- y: number,
- deadline: number
- ): Diff[] {
- const text1a = text1.substring(0, x)
- const text2a = text2.substring(0, y)
- const text1b = text1.substring(x)
- const text2b = text2.substring(y)
-
- // Compute both diffs serially.
- const diffs = this.diff(text1a, text2a, false, deadline)
- const diffsB = this.diff(text1b, text2b, false, deadline)
-
- return diffs.concat(diffsB)
- }
-
- /**
- * Do the two texts share a substring which is at least half the length of the
- * longer text?
- * This speedup can produce non-minimal diffs.
- * @param {string} text1 First string.
- * @param {string} text2 Second string.
- * @return {Array.} Five element Array, containing the prefix of
- * text1, the suffix of text1, the prefix of text2, the suffix of
- * text2 and the common middle. Or null if there was no match.
- * @private
- */
- private diffHalfMatch(text1: string, text2: string): string[] | null {
- if (this.DiffTimeout <= 0) {
- // Don't risk returning a non-optimal diff if we have unlimited time.
- return null
+ // Diff took too long and hit the deadline or
+ // number of diffs equals number of characters, no commonality at all.
+ return [new Diff(DIFF_DELETE, text1), new Diff(DIFF_INSERT, text2)];
}
- const longtext = text1.length > text2.length ? text1 : text2
- const shortText = text1.length > text2.length ? text2 : text1
+ /**
+ * Given the location of the 'middle snake', split the diff in two parts
+ * and recurse.
+ *
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {number} x Index of split point in text1.
+ * @param {number} y Index of split point in text2.
+ * @param {number} deadline Time at which to bail if not yet complete.
+ *
+ * @return {!Array.} Array of diff tuples.
+ *
+ * @private
+ */
+ private diffBisectSplit(text1: string, text2: string, x: number, y: number, deadline: number): Diff[] {
+ const text1a = text1.substring(0, x);
+ const text2a = text2.substring(0, y);
+ const text1b = text1.substring(x);
+ const text2b = text2.substring(y);
+
+ // Compute both diffs serially.
+ const diffs = this.diff(text1a, text2a, false, deadline);
+ const diffsB = this.diff(text1b, text2b, false, deadline);
- if (longtext.length < 4 || shortText.length * 2 < longtext.length) {
- return null // Pointless.
+ return diffs.concat(diffsB);
}
/**
- * Does a substring of shortText exist within longtext such that the substring
- * is at least half the length of longtext?
- * Closure, but does not reference any external variables.
- * @param {string} longtext Longer string.
- * @param {string} shortText Shorter string.
- * @param {number} i Start index of quarter length substring within longtext.
+ * Do the two texts share a substring which is at least half the length of the
+ * longer text?
+ * This speedup can produce non-minimal diffs.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
* @return {Array.} Five element Array, containing the prefix of
- * longtext, the suffix of longtext, the prefix of shortText, the suffix
- * of shortText and the common middle. Or null if there was no match.
+ * text1, the suffix of text1, the prefix of text2, the suffix of
+ * text2 and the common middle. Or null if there was no match.
* @private
*/
- function diffHalfMatchI(
- longtext: string,
- shortText: string,
- i: number
- ): string[] | null {
- // Start with a 1/4 length substring at position i as a seed.
- const seed = longtext.substring(i, i + Math.floor(longtext.length / 4))
-
- let j = -1
- let bestCommon = ''
- let bestLongtextA = ''
- let bestLongtextB = ''
- let bestShortTextA = ''
- let bestShortTextB = ''
-
- while ((j = shortText.indexOf(seed, j + 1)) != -1) {
- const prefixLength = commonPrefix(
- longtext.substring(i),
- shortText.substring(j)
- )
-
- const suffixLength = commonSuffix(
- longtext.substring(0, i),
- shortText.substring(0, j)
- )
-
- if (bestCommon.length < suffixLength + prefixLength) {
- bestCommon =
- shortText.substring(j - suffixLength, j) +
- shortText.substring(j, j + prefixLength)
- bestLongtextA = longtext.substring(0, i - suffixLength)
- bestLongtextB = longtext.substring(i + prefixLength)
- bestShortTextA = shortText.substring(0, j - suffixLength)
- bestShortTextB = shortText.substring(j + prefixLength)
+ private diffHalfMatch(text1: string, text2: string): string[] | null {
+ if (this.DiffTimeout <= 0) {
+ // Don't risk returning a non-optimal diff if we have unlimited time.
+ return null;
}
- }
-
- if (bestCommon.length * 2 >= longtext.length) {
- return [
- bestLongtextA,
- bestLongtextB,
- bestShortTextA,
- bestShortTextB,
- bestCommon
- ]
- }
-
- return null
- }
- // First check if the second quarter is the seed for a half-match.
- const hm1 = diffHalfMatchI(
- longtext,
- shortText,
- Math.ceil(longtext.length / 4)
- )
-
- // Check again based on the third quarter.
- const hm2 = diffHalfMatchI(
- longtext,
- shortText,
- Math.ceil(longtext.length / 2)
- )
-
- let hm: string[] | null
-
- if (!hm1 && !hm2) {
- return null
- } else if (!hm2) {
- hm = hm1
- } else if (!hm1) {
- hm = hm2
- } else {
- // Both matched. Select the longest.
- hm = hm1[4].length > hm2[4].length ? hm1 : hm2
- }
+ const longtext = text1.length > text2.length ? text1 : text2;
+ const shortText = text1.length > text2.length ? text2 : text1;
- // A half-match was found, sort out the return data.
- let text1A
- let text1B
- let text2A
- let text2B
-
- if (text1.length > text2.length) {
- text1A = hm![0]
- text1B = hm![1]
- text2A = hm![2]
- text2B = hm![3]
- } else {
- text2A = hm![0]
- text2B = hm![1]
- text1A = hm![2]
- text1B = hm![3]
- }
-
- const midCommon = hm![4]
-
- return [text1A, text1B, text2A, text2B, midCommon]
- }
-
- /**
- * Reduce the number of edits by eliminating semantically trivial equalities.
- *
- * @param {!Array.} diffs Array of diff tuples.
- */
- diffCleanupSemantic(diffs: Diff[]) {
- const equalities: number[] = [] // Stack of indices where equalities are found.
-
- let changes = false
- let equalitiesLength = 0 // Keeping our own length const is faster in JS.
- /** @type {?string} */
- let lastEquality = null
- // Always equal to diffs[equalities[equalitiesLength - 1]][1]
- let pointer = 0 // Index of current position.
- // Number of characters that changed prior to the equality.
- let lengthInsertions1 = 0
- let lengthDeletions1 = 0
- // Number of characters that changed after the equality.
- let lengthInsertions2 = 0
- let lengthDeletions2 = 0
-
- while (pointer < diffs.length) {
- if (diffs[pointer].operation == DIFF_EQUAL) {
- // Equality found.
- equalities[equalitiesLength++] = pointer
- lengthInsertions1 = lengthInsertions2
- lengthDeletions1 = lengthDeletions2
- lengthInsertions2 = 0
- lengthDeletions2 = 0
- lastEquality = diffs[pointer].text
- } else {
- // An insertion or deletion.
- if (diffs[pointer].operation == DIFF_INSERT) {
- lengthInsertions2 += diffs[pointer].text.length
- } else {
- lengthDeletions2 += diffs[pointer].text.length
+ if (longtext.length < 4 || shortText.length * 2 < longtext.length) {
+ return null; // Pointless.
}
- // Eliminate an equality that is smaller or equal to the edits on both
- // sides of it.
- if (
- lastEquality &&
- lastEquality.length <=
- Math.max(lengthInsertions1, lengthDeletions1) &&
- lastEquality.length <= Math.max(lengthInsertions2, lengthDeletions2)
- ) {
- // Duplicate record.
- diffs.splice(
- equalities[equalitiesLength - 1],
- 0,
- new Diff(DIFF_DELETE, lastEquality)
- )
- // Change second copy to insert.
- diffs[equalities[equalitiesLength - 1] + 1].operation = DIFF_INSERT
- // Throw away the equality we just deleted.
- equalitiesLength--
- // Throw away the previous equality (it needs to be reevaluated).
- equalitiesLength--
- pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1
- lengthInsertions1 = 0 // Reset the counters.
- lengthDeletions1 = 0
- lengthInsertions2 = 0
- lengthDeletions2 = 0
- lastEquality = null
- changes = true
+ /**
+ * Does a substring of shortText exist within longtext such that the substring
+ * is at least half the length of longtext?
+ * Closure, but does not reference any external variables.
+ * @param {string} longtext Longer string.
+ * @param {string} shortText Shorter string.
+ * @param {number} i Start index of quarter length substring within longtext.
+ * @return {Array.} Five element Array, containing the prefix of
+ * longtext, the suffix of longtext, the prefix of shortText, the suffix
+ * of shortText and the common middle. Or null if there was no match.
+ * @private
+ */
+ function diffHalfMatchI(longtext: string, shortText: string, i: number): string[] | null {
+ // Start with a 1/4 length substring at position i as a seed.
+ const seed = longtext.substring(i, i + Math.floor(longtext.length / 4));
+
+ let j = -1;
+ let bestCommon = "";
+ let bestLongtextA = "";
+ let bestLongtextB = "";
+ let bestShortTextA = "";
+ let bestShortTextB = "";
+
+ while ((j = shortText.indexOf(seed, j + 1)) != -1) {
+ const prefixLength = commonPrefix(longtext.substring(i), shortText.substring(j));
+
+ const suffixLength = commonSuffix(longtext.substring(0, i), shortText.substring(0, j));
+
+ if (bestCommon.length < suffixLength + prefixLength) {
+ bestCommon = shortText.substring(j - suffixLength, j) + shortText.substring(j, j + prefixLength);
+ bestLongtextA = longtext.substring(0, i - suffixLength);
+ bestLongtextB = longtext.substring(i + prefixLength);
+ bestShortTextA = shortText.substring(0, j - suffixLength);
+ bestShortTextB = shortText.substring(j + prefixLength);
+ }
+ }
+
+ if (bestCommon.length * 2 >= longtext.length) {
+ return [bestLongtextA, bestLongtextB, bestShortTextA, bestShortTextB, bestCommon];
+ }
+
+ return null;
}
- }
- pointer++
- }
+ // First check if the second quarter is the seed for a half-match.
+ const hm1 = diffHalfMatchI(longtext, shortText, Math.ceil(longtext.length / 4));
- // Normalize the diff.
- if (changes) {
- this.diffCleanupMerge(diffs)
- }
+ // Check again based on the third quarter.
+ const hm2 = diffHalfMatchI(longtext, shortText, Math.ceil(longtext.length / 2));
+
+ let hm: string[] | null;
- this.cleanupSemanticLossless(diffs)
-
- // Find any overlaps between deletions and insertions.
- // e.g: abcxxxxxxdef
- // -> abcxxxdef
- // e.g: xxxabcdefxxx
- // -> defxxxabc
- // Only extract an overlap if it is as big as the edit ahead or behind it.
- pointer = 1
-
- while (pointer < diffs.length) {
- if (
- diffs[pointer - 1].operation == DIFF_DELETE &&
- diffs[pointer].operation == DIFF_INSERT
- ) {
- const deletion = diffs[pointer - 1].text
- const insertion = diffs[pointer].text
- const overlapLength1 = diffCommonOverlap(deletion, insertion)
- const overlapLength2 = diffCommonOverlap(insertion, deletion)
- if (overlapLength1 >= overlapLength2) {
- if (
- overlapLength1 >= deletion.length / 2 ||
- overlapLength1 >= insertion.length / 2
- ) {
- // Overlap found. Insert an equality and trim the surrounding edits.
- diffs.splice(
- pointer,
- 0,
- new Diff(DIFF_EQUAL, insertion.substring(0, overlapLength1))
- )
-
- diffs[pointer - 1].text = deletion.substring(
- 0,
- deletion.length - overlapLength1
- )
- diffs[pointer + 1].text = insertion.substring(overlapLength1)
-
- pointer++
- }
+ if (!hm1 && !hm2) {
+ return null;
+ } else if (!hm2) {
+ hm = hm1;
+ } else if (!hm1) {
+ hm = hm2;
} else {
- if (
- overlapLength2 >= deletion.length / 2 ||
- overlapLength2 >= insertion.length / 2
- ) {
- // Reverse overlap found.
- // Insert an equality and swap and trim the surrounding edits.
- diffs.splice(
- pointer,
- 0,
- new Diff(DIFF_EQUAL, deletion.substring(0, overlapLength2))
- )
-
- diffs[pointer - 1].operation = DIFF_INSERT
- diffs[pointer - 1].text = insertion.substring(
- 0,
- insertion.length - overlapLength2
- )
- diffs[pointer + 1].operation = DIFF_DELETE
- diffs[pointer + 1].text = deletion.substring(overlapLength2)
-
- pointer++
- }
+ // Both matched. Select the longest.
+ hm = hm1[4].length > hm2[4].length ? hm1 : hm2;
}
- pointer++
- }
+ // A half-match was found, sort out the return data.
+ let text1A;
+ let text1B;
+ let text2A;
+ let text2B;
+
+ if (text1.length > text2.length) {
+ text1A = hm![0];
+ text1B = hm![1];
+ text2A = hm![2];
+ text2B = hm![3];
+ } else {
+ text2A = hm![0];
+ text2B = hm![1];
+ text1A = hm![2];
+ text1B = hm![3];
+ }
- pointer++
+ const midCommon = hm![4];
+
+ return [text1A, text1B, text2A, text2B, midCommon];
}
- }
-
- /**
- * Look for single edits surrounded on both sides by equalities
- * which can be shifted sideways to align the edit to a word boundary.
- * e.g: The cat came. -> The cat came.
- *
- * @param {!Array.} diffs Array of diff tuples.
- */
- private cleanupSemanticLossless(diffs: Diff[]) {
+
/**
- * Given two strings, compute a score representing whether the internal
- * boundary falls on logical boundaries.
- * Scores range from 6 (best) to 0 (worst).
- * Closure, but does not reference any external variables.
- * @param {string} one First string.
- * @param {string} two Second string.
- * @return {number} The score.
- * @private
+ * Reduce the number of edits by eliminating semantically trivial equalities.
+ *
+ * @param {!Array.} diffs Array of diff tuples.
*/
- function diffCleanupSemanticScore(one: string, two: string): number {
- if (!one || !two) {
- // Edges are the best.
- return 6
- }
-
- // Each port of this function behaves slightly differently due to
- // subtle differences in each language's definition of things like
- // 'whitespace'. Since this function's purpose is largely cosmetic,
- // the choice has been made to use each language's native features
- // rather than force total conformity.
- const char1 = one.charAt(one.length - 1)
- const char2 = two.charAt(0)
- const nonAlphaNumeric1 = char1.match(DiffMatchPatch.nonAlphaNumericRegex)
- const nonAlphaNumeric2 = char2.match(DiffMatchPatch.nonAlphaNumericRegex)
- const whitespace1 =
- nonAlphaNumeric1 && char1.match(DiffMatchPatch.whitespaceRegex)
- const whitespace2 =
- nonAlphaNumeric2 && char2.match(DiffMatchPatch.whitespaceRegex)
- const lineBreak1 =
- whitespace1 && char1.match(DiffMatchPatch.linebreakRegex)
- const lineBreak2 =
- whitespace2 && char2.match(DiffMatchPatch.linebreakRegex)
- const blankLine1 =
- lineBreak1 && one.match(DiffMatchPatch.blankLineEndRegex)
- const blankLine2 =
- lineBreak2 && two.match(DiffMatchPatch.blankLineStartRegex)
-
- if (blankLine1 || blankLine2) {
- // Five points for blank lines.
- return 5
- } else if (lineBreak1 || lineBreak2) {
- // Four points for line breaks.
- return 4
- } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {
- // Three points for end of sentences.
- return 3
- } else if (whitespace1 || whitespace2) {
- // Two points for whitespace.
- return 2
- } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {
- // One point for non-alphanumeric.
- return 1
- }
-
- return 0
- }
+ diffCleanupSemantic(diffs: Diff[]) {
+ const equalities: number[] = []; // Stack of indices where equalities are found.
+
+ let changes = false;
+ let equalitiesLength = 0; // Keeping our own length const is faster in JS.
+ /** @type {?string} */
+ let lastEquality = null;
+ // Always equal to diffs[equalities[equalitiesLength - 1]][1]
+ let pointer = 0; // Index of current position.
+ // Number of characters that changed prior to the equality.
+ let lengthInsertions1 = 0;
+ let lengthDeletions1 = 0;
+ // Number of characters that changed after the equality.
+ let lengthInsertions2 = 0;
+ let lengthDeletions2 = 0;
+
+ while (pointer < diffs.length) {
+ if (diffs[pointer].operation == DIFF_EQUAL) {
+ // Equality found.
+ equalities[equalitiesLength++] = pointer;
+ lengthInsertions1 = lengthInsertions2;
+ lengthDeletions1 = lengthDeletions2;
+ lengthInsertions2 = 0;
+ lengthDeletions2 = 0;
+ lastEquality = diffs[pointer].text;
+ } else {
+ // An insertion or deletion.
+ if (diffs[pointer].operation == DIFF_INSERT) {
+ lengthInsertions2 += diffs[pointer].text.length;
+ } else {
+ lengthDeletions2 += diffs[pointer].text.length;
+ }
- let pointer = 1
-
- // Intentionally ignore the first and last element (don't need checking).
- while (pointer < diffs.length - 1) {
- if (
- diffs[pointer - 1].operation == DIFF_EQUAL &&
- diffs[pointer + 1].operation == DIFF_EQUAL
- ) {
- // This is a single edit surrounded by equalities.
- let equality1 = diffs[pointer - 1].text
- let edit = diffs[pointer].text
- let equality2 = diffs[pointer + 1].text
-
- // First, shift the edit as far left as possible.
- const commonOffset = commonSuffix(equality1, edit)
- if (commonOffset) {
- const commonString = edit.substring(edit.length - commonOffset)
-
- equality1 = equality1.substring(0, equality1.length - commonOffset)
- edit = commonString + edit.substring(0, edit.length - commonOffset)
- equality2 = commonString + equality2
- }
+ // Eliminate an equality that is smaller or equal to the edits on both
+ // sides of it.
+ if (
+ lastEquality &&
+ lastEquality.length <= Math.max(lengthInsertions1, lengthDeletions1) &&
+ lastEquality.length <= Math.max(lengthInsertions2, lengthDeletions2)
+ ) {
+ // Duplicate record.
+ diffs.splice(equalities[equalitiesLength - 1], 0, new Diff(DIFF_DELETE, lastEquality));
+ // Change second copy to insert.
+ diffs[equalities[equalitiesLength - 1] + 1].operation = DIFF_INSERT;
+ // Throw away the equality we just deleted.
+ equalitiesLength--;
+ // Throw away the previous equality (it needs to be reevaluated).
+ equalitiesLength--;
+ pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;
+ lengthInsertions1 = 0; // Reset the counters.
+ lengthDeletions1 = 0;
+ lengthInsertions2 = 0;
+ lengthDeletions2 = 0;
+ lastEquality = null;
+ changes = true;
+ }
+ }
- // Second, step character by character right, looking for the best fit.
- let bestEquality1 = equality1
- let bestEdit = edit
- let bestEquality2 = equality2
- let bestScore =
- diffCleanupSemanticScore(equality1, edit) +
- diffCleanupSemanticScore(edit, equality2)
-
- while (edit.charAt(0) === equality2.charAt(0)) {
- equality1 += edit.charAt(0)
- edit = edit.substring(1) + equality2.charAt(0)
- equality2 = equality2.substring(1)
-
- const score =
- diffCleanupSemanticScore(equality1, edit) +
- diffCleanupSemanticScore(edit, equality2)
- // The >= encourages trailing rather than leading whitespace on edits.
- if (score >= bestScore) {
- bestScore = score
- bestEquality1 = equality1
- bestEdit = edit
- bestEquality2 = equality2
- }
+ pointer++;
}
- if (diffs[pointer - 1].text != bestEquality1) {
- // We have an improvement, save it back to the diff.
- if (bestEquality1) {
- diffs[pointer - 1].text = bestEquality1
- } else {
- diffs.splice(pointer - 1, 1)
- pointer--
- }
-
- diffs[pointer].text = bestEdit
-
- if (bestEquality2) {
- diffs[pointer + 1].text = bestEquality2
- } else {
- diffs.splice(pointer + 1, 1)
- pointer--
- }
+ // Normalize the diff.
+ if (changes) {
+ this.diffCleanupMerge(diffs);
}
- }
- pointer++
- }
- }
-
- /**
- * Reorder and merge like edit sections. Merge equalities.
- * Any edit section can move as long as it doesn't cross an equality.
- *
- * @param {!Array.} diffs Array of diff tuples.
- */
- private diffCleanupMerge(diffs: Diff[]) {
- // Add a dummy entry at the end.
- diffs.push(new Diff(DIFF_EQUAL, ''))
-
- let pointer = 0
- let countDelete = 0
- let countInsert = 0
- let textDelete = ''
- let textInsert = ''
-
- let commonLength
-
- while (pointer < diffs.length) {
- switch (diffs[pointer].operation) {
- case DIFF_INSERT:
- countInsert++
- textInsert += diffs[pointer].text
- pointer++
- break
- case DIFF_DELETE:
- countDelete++
- textDelete += diffs[pointer].text
- pointer++
- break
- case DIFF_EQUAL:
- // Upon reaching an equality, check for prior redundancies.
- if (countDelete + countInsert > 1) {
- if (countDelete !== 0 && countInsert !== 0) {
- // Factor out any common prefixies.
- commonLength = commonPrefix(textInsert, textDelete)
-
- if (commonLength !== 0) {
- if (
- pointer - countDelete - countInsert > 0 &&
- diffs[pointer - countDelete - countInsert - 1].operation ==
- DIFF_EQUAL
- ) {
- diffs[
- pointer - countDelete - countInsert - 1
- ].text += textInsert.substring(0, commonLength)
+ this.cleanupSemanticLossless(diffs);
+
+ // Find any overlaps between deletions and insertions.
+ // e.g: abcxxxxxxdef
+ // -> abcxxxdef
+ // e.g: xxxabcdefxxx
+ // -> defxxxabc
+ // Only extract an overlap if it is as big as the edit ahead or behind it.
+ pointer = 1;
+
+ while (pointer < diffs.length) {
+ if (diffs[pointer - 1].operation == DIFF_DELETE && diffs[pointer].operation == DIFF_INSERT) {
+ const deletion = diffs[pointer - 1].text;
+ const insertion = diffs[pointer].text;
+ const overlapLength1 = diffCommonOverlap(deletion, insertion);
+ const overlapLength2 = diffCommonOverlap(insertion, deletion);
+ if (overlapLength1 >= overlapLength2) {
+ if (overlapLength1 >= deletion.length / 2 || overlapLength1 >= insertion.length / 2) {
+ // Overlap found. Insert an equality and trim the surrounding edits.
+ diffs.splice(pointer, 0, new Diff(DIFF_EQUAL, insertion.substring(0, overlapLength1)));
+
+ diffs[pointer - 1].text = deletion.substring(0, deletion.length - overlapLength1);
+ diffs[pointer + 1].text = insertion.substring(overlapLength1);
+
+ pointer++;
+ }
} else {
- diffs.splice(
- 0,
- 0,
- new Diff(DIFF_EQUAL, textInsert.substring(0, commonLength))
- )
-
- pointer++
+ if (overlapLength2 >= deletion.length / 2 || overlapLength2 >= insertion.length / 2) {
+ // Reverse overlap found.
+ // Insert an equality and swap and trim the surrounding edits.
+ diffs.splice(pointer, 0, new Diff(DIFF_EQUAL, deletion.substring(0, overlapLength2)));
+
+ diffs[pointer - 1].operation = DIFF_INSERT;
+ diffs[pointer - 1].text = insertion.substring(0, insertion.length - overlapLength2);
+ diffs[pointer + 1].operation = DIFF_DELETE;
+ diffs[pointer + 1].text = deletion.substring(overlapLength2);
+
+ pointer++;
+ }
}
- textInsert = textInsert.substring(commonLength)
- textDelete = textDelete.substring(commonLength)
- }
- // Factor out any common suffixies.
- commonLength = commonSuffix(textInsert, textDelete)
-
- if (commonLength !== 0) {
- diffs[pointer].text =
- textInsert.substring(textInsert.length - commonLength) +
- diffs[pointer].text
- textInsert = textInsert.substring(
- 0,
- textInsert.length - commonLength
- )
- textDelete = textDelete.substring(
- 0,
- textDelete.length - commonLength
- )
- }
+ pointer++;
}
- // Delete the offending records and add the merged ones.
- pointer -= countDelete + countInsert
-
- diffs.splice(pointer, countDelete + countInsert)
+ pointer++;
+ }
+ }
- if (textDelete.length !== 0) {
- diffs.splice(pointer, 0, new Diff(DIFF_DELETE, textDelete, true))
+ /**
+ * Look for single edits surrounded on both sides by equalities
+ * which can be shifted sideways to align the edit to a word boundary.
+ * e.g: The cat came. -> The cat came.
+ *
+ * @param {!Array.} diffs Array of diff tuples.
+ */
+ private cleanupSemanticLossless(diffs: Diff[]) {
+ /**
+ * Given two strings, compute a score representing whether the internal
+ * boundary falls on logical boundaries.
+ * Scores range from 6 (best) to 0 (worst).
+ * Closure, but does not reference any external variables.
+ * @param {string} one First string.
+ * @param {string} two Second string.
+ * @return {number} The score.
+ * @private
+ */
+ function diffCleanupSemanticScore(one: string, two: string): number {
+ if (!one || !two) {
+ // Edges are the best.
+ return 6;
+ }
- pointer++
+ // Each port of this function behaves slightly differently due to
+ // subtle differences in each language's definition of things like
+ // 'whitespace'. Since this function's purpose is largely cosmetic,
+ // the choice has been made to use each language's native features
+ // rather than force total conformity.
+ const char1 = one.charAt(one.length - 1);
+ const char2 = two.charAt(0);
+ const nonAlphaNumeric1 = char1.match(DiffMatchPatch.nonAlphaNumericRegex);
+ const nonAlphaNumeric2 = char2.match(DiffMatchPatch.nonAlphaNumericRegex);
+ const whitespace1 = nonAlphaNumeric1 && char1.match(DiffMatchPatch.whitespaceRegex);
+ const whitespace2 = nonAlphaNumeric2 && char2.match(DiffMatchPatch.whitespaceRegex);
+ const lineBreak1 = whitespace1 && char1.match(DiffMatchPatch.linebreakRegex);
+ const lineBreak2 = whitespace2 && char2.match(DiffMatchPatch.linebreakRegex);
+ const blankLine1 = lineBreak1 && one.match(DiffMatchPatch.blankLineEndRegex);
+ const blankLine2 = lineBreak2 && two.match(DiffMatchPatch.blankLineStartRegex);
+
+ if (blankLine1 || blankLine2) {
+ // Five points for blank lines.
+ return 5;
+ } else if (lineBreak1 || lineBreak2) {
+ // Four points for line breaks.
+ return 4;
+ } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {
+ // Three points for end of sentences.
+ return 3;
+ } else if (whitespace1 || whitespace2) {
+ // Two points for whitespace.
+ return 2;
+ } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {
+ // One point for non-alphanumeric.
+ return 1;
}
- if (textInsert.length !== 0) {
- diffs.splice(pointer, 0, new Diff(DIFF_INSERT, textInsert, true))
+ return 0;
+ }
+
+ let pointer = 1;
+
+ // Intentionally ignore the first and last element (don't need checking).
+ while (pointer < diffs.length - 1) {
+ if (diffs[pointer - 1].operation == DIFF_EQUAL && diffs[pointer + 1].operation == DIFF_EQUAL) {
+ // This is a single edit surrounded by equalities.
+ let equality1 = diffs[pointer - 1].text;
+ let edit = diffs[pointer].text;
+ let equality2 = diffs[pointer + 1].text;
+
+ // First, shift the edit as far left as possible.
+ const commonOffset = commonSuffix(equality1, edit);
+ if (commonOffset) {
+ const commonString = edit.substring(edit.length - commonOffset);
+
+ equality1 = equality1.substring(0, equality1.length - commonOffset);
+ edit = commonString + edit.substring(0, edit.length - commonOffset);
+ equality2 = commonString + equality2;
+ }
- pointer++
+ // Second, step character by character right, looking for the best fit.
+ let bestEquality1 = equality1;
+ let bestEdit = edit;
+ let bestEquality2 = equality2;
+ let bestScore = diffCleanupSemanticScore(equality1, edit) + diffCleanupSemanticScore(edit, equality2);
+
+ while (edit.charAt(0) === equality2.charAt(0)) {
+ equality1 += edit.charAt(0);
+ edit = edit.substring(1) + equality2.charAt(0);
+ equality2 = equality2.substring(1);
+
+ const score = diffCleanupSemanticScore(equality1, edit) + diffCleanupSemanticScore(edit, equality2);
+ // The >= encourages trailing rather than leading whitespace on edits.
+ if (score >= bestScore) {
+ bestScore = score;
+ bestEquality1 = equality1;
+ bestEdit = edit;
+ bestEquality2 = equality2;
+ }
+ }
+
+ if (diffs[pointer - 1].text != bestEquality1) {
+ // We have an improvement, save it back to the diff.
+ if (bestEquality1) {
+ diffs[pointer - 1].text = bestEquality1;
+ } else {
+ diffs.splice(pointer - 1, 1);
+ pointer--;
+ }
+
+ diffs[pointer].text = bestEdit;
+
+ if (bestEquality2) {
+ diffs[pointer + 1].text = bestEquality2;
+ } else {
+ diffs.splice(pointer + 1, 1);
+ pointer--;
+ }
+ }
}
- pointer++
- } else if (
- pointer !== 0 &&
- diffs[pointer - 1].operation == DIFF_EQUAL
- ) {
- // Merge this equality with the previous one.
- diffs[pointer - 1].text += diffs[pointer].text
- diffs.splice(pointer, 1)
- } else {
- pointer++
- }
-
- countInsert = 0
- countDelete = 0
- textDelete = ''
- textInsert = ''
-
- break
- }
- }
- if (diffs[diffs.length - 1].text === '') {
- diffs.pop() // Remove the dummy entry at the end.
+ pointer++;
+ }
}
- // Second pass: look for single edits surrounded on both sides by equalities
- // which can be shifted sideways to eliminate an equality.
- // e.g: ABAC -> ABAC
- let changes = false
-
- pointer = 1
-
- // Intentionally ignore the first and last element (don't need checking).
- while (pointer < diffs.length - 1) {
- if (
- diffs[pointer - 1].operation == DIFF_EQUAL &&
- diffs[pointer + 1].operation == DIFF_EQUAL
- ) {
- // This is a single edit surrounded by equalities.
- if (
- diffs[pointer].text.substring(
- diffs[pointer].text.length - diffs[pointer - 1].text.length
- ) == diffs[pointer - 1].text
- ) {
- // Shift the edit over the previous equality.
- diffs[pointer].text =
- diffs[pointer - 1].text +
- diffs[pointer].text.substring(
- 0,
- diffs[pointer].text.length - diffs[pointer - 1].text.length
- )
- diffs[pointer + 1].text =
- diffs[pointer - 1].text + diffs[pointer + 1].text
- diffs.splice(pointer - 1, 1)
-
- changes = true
- } else if (
- diffs[pointer].text.substring(0, diffs[pointer + 1].text.length) ==
- diffs[pointer + 1].text
- ) {
- // Shift the edit over the next equality.
- diffs[pointer - 1].text += diffs[pointer + 1].text
- diffs[pointer].text =
- diffs[pointer].text.substring(diffs[pointer + 1].text.length) +
- diffs[pointer + 1].text
- diffs.splice(pointer + 1, 1)
-
- changes = true
+ /**
+ * Reorder and merge like edit sections. Merge equalities.
+ * Any edit section can move as long as it doesn't cross an equality.
+ *
+ * @param {!Array.} diffs Array of diff tuples.
+ */
+ private diffCleanupMerge(diffs: Diff[]) {
+ // Add a dummy entry at the end.
+ diffs.push(new Diff(DIFF_EQUAL, ""));
+
+ let pointer = 0;
+ let countDelete = 0;
+ let countInsert = 0;
+ let textDelete = "";
+ let textInsert = "";
+
+ let commonLength;
+
+ while (pointer < diffs.length) {
+ switch (diffs[pointer].operation) {
+ case DIFF_INSERT:
+ countInsert++;
+ textInsert += diffs[pointer].text;
+ pointer++;
+ break;
+ case DIFF_DELETE:
+ countDelete++;
+ textDelete += diffs[pointer].text;
+ pointer++;
+ break;
+ case DIFF_EQUAL:
+ // Upon reaching an equality, check for prior redundancies.
+ if (countDelete + countInsert > 1) {
+ if (countDelete !== 0 && countInsert !== 0) {
+ // Factor out any common prefixies.
+ commonLength = commonPrefix(textInsert, textDelete);
+
+ if (commonLength !== 0) {
+ if (
+ pointer - countDelete - countInsert > 0 &&
+ diffs[pointer - countDelete - countInsert - 1].operation == DIFF_EQUAL
+ ) {
+ diffs[pointer - countDelete - countInsert - 1].text += textInsert.substring(
+ 0,
+ commonLength,
+ );
+ } else {
+ diffs.splice(0, 0, new Diff(DIFF_EQUAL, textInsert.substring(0, commonLength)));
+
+ pointer++;
+ }
+
+ textInsert = textInsert.substring(commonLength);
+ textDelete = textDelete.substring(commonLength);
+ }
+ // Factor out any common suffixies.
+ commonLength = commonSuffix(textInsert, textDelete);
+
+ if (commonLength !== 0) {
+ diffs[pointer].text =
+ textInsert.substring(textInsert.length - commonLength) + diffs[pointer].text;
+ textInsert = textInsert.substring(0, textInsert.length - commonLength);
+ textDelete = textDelete.substring(0, textDelete.length - commonLength);
+ }
+ }
+
+ // Delete the offending records and add the merged ones.
+ pointer -= countDelete + countInsert;
+
+ diffs.splice(pointer, countDelete + countInsert);
+
+ if (textDelete.length !== 0) {
+ diffs.splice(pointer, 0, new Diff(DIFF_DELETE, textDelete, true));
+
+ pointer++;
+ }
+
+ if (textInsert.length !== 0) {
+ diffs.splice(pointer, 0, new Diff(DIFF_INSERT, textInsert, true));
+
+ pointer++;
+ }
+
+ pointer++;
+ } else if (pointer !== 0 && diffs[pointer - 1].operation == DIFF_EQUAL) {
+ // Merge this equality with the previous one.
+ diffs[pointer - 1].text += diffs[pointer].text;
+ diffs.splice(pointer, 1);
+ } else {
+ pointer++;
+ }
+
+ countInsert = 0;
+ countDelete = 0;
+ textDelete = "";
+ textInsert = "";
+
+ break;
+ }
+ }
+ if (diffs[diffs.length - 1].text === "") {
+ diffs.pop(); // Remove the dummy entry at the end.
}
- }
- pointer++
- }
- // If shifts were made, the diff needs reordering and another shift sweep.
- if (changes) {
- this.diffCleanupMerge(diffs)
- }
- }
-
- /**
- * Locate the best instance of 'pattern' in 'text' near 'loc'.
- *
- * @param {string} text The text to search.
- * @param {string} pattern The pattern to search for.
- * @param {number} loc The location to search around.
- *
- * @return {number} Best match index or -1.
- */
- private matchMain(text: string, pattern: string, loc: number): number {
- // Check for null inputs.
- if (text == null || pattern == null || loc == null) {
- throw new Error('Null input. (matchMain)')
- }
+ // Second pass: look for single edits surrounded on both sides by equalities
+ // which can be shifted sideways to eliminate an equality.
+ // e.g: ABAC -> ABAC
+ let changes = false;
- loc = Math.max(0, Math.min(loc, text.length))
-
- if (text == pattern) {
- // Shortcut (potentially not guaranteed by the algorithm)
- return 0
- } else if (!text.length) {
- // Nothing to match.
- return -1
- } else if (text.substring(loc, loc + pattern.length) == pattern) {
- // Perfect match at the perfect spot! (Includes case of null pattern)
- return loc
- }
+ pointer = 1;
- // Do a fuzzy compare.
- return this.matchBiTap(text, pattern, loc)
- }
-
- /**
- * Locate the best instance of 'pattern' in 'text' near 'loc' using the
- * Bitap algorithm.
- *
- * @param {string} text The text to search.
- * @param {string} pattern The pattern to search for.
- * @param {number} loc The location to search around.
- *
- * @return {number} Best match index or -1.
- */
- private matchBiTap(text: string, pattern: string, loc: number): number {
- if (pattern.length > this.MatchMaxBits) {
- throw new Error('Pattern too long for this browser.')
- }
+ // Intentionally ignore the first and last element (don't need checking).
+ while (pointer < diffs.length - 1) {
+ if (diffs[pointer - 1].operation == DIFF_EQUAL && diffs[pointer + 1].operation == DIFF_EQUAL) {
+ // This is a single edit surrounded by equalities.
+ if (
+ diffs[pointer].text.substring(diffs[pointer].text.length - diffs[pointer - 1].text.length) ==
+ diffs[pointer - 1].text
+ ) {
+ // Shift the edit over the previous equality.
+ diffs[pointer].text =
+ diffs[pointer - 1].text +
+ diffs[pointer].text.substring(0, diffs[pointer].text.length - diffs[pointer - 1].text.length);
+ diffs[pointer + 1].text = diffs[pointer - 1].text + diffs[pointer + 1].text;
+ diffs.splice(pointer - 1, 1);
+
+ changes = true;
+ } else if (
+ diffs[pointer].text.substring(0, diffs[pointer + 1].text.length) == diffs[pointer + 1].text
+ ) {
+ // Shift the edit over the next equality.
+ diffs[pointer - 1].text += diffs[pointer + 1].text;
+ diffs[pointer].text =
+ diffs[pointer].text.substring(diffs[pointer + 1].text.length) + diffs[pointer + 1].text;
+ diffs.splice(pointer + 1, 1);
+
+ changes = true;
+ }
+ }
- // Initialise the alphabet.
- const s = matchAlphabet(pattern)
- const dmp = this // 'this' becomes 'window' in a closure.
+ pointer++;
+ }
+ // If shifts were made, the diff needs reordering and another shift sweep.
+ if (changes) {
+ this.diffCleanupMerge(diffs);
+ }
+ }
/**
- * Compute and return the score for a match with e errors and x location.
- * Accesses loc and pattern through being a closure.
+ * Locate the best instance of 'pattern' in 'text' near 'loc'.
*
- * @param {number} e Number of errors in match.
- * @param {number} x Location of match.
+ * @param {string} text The text to search.
+ * @param {string} pattern The pattern to search for.
+ * @param {number} loc The location to search around.
*
- * @return {number} Overall score for match (0.0 = good, 1.0 = bad).
- *
- * @private
+ * @return {number} Best match index or -1.
*/
- function matchBiTapScore(e: number, x: number): number {
- const accuracy = e / pattern.length
- const proximity = Math.abs(loc - x)
+ private matchMain(text: string, pattern: string, loc: number): number {
+ // Check for null inputs.
+ if (text == null || pattern == null || loc == null) {
+ throw new Error("Null input. (matchMain)");
+ }
- if (!dmp.MatchDistance) {
- // Dodge divide by zero error.
- return proximity ? 1.0 : accuracy
- }
+ loc = Math.max(0, Math.min(loc, text.length));
+
+ if (text == pattern) {
+ // Shortcut (potentially not guaranteed by the algorithm)
+ return 0;
+ } else if (!text.length) {
+ // Nothing to match.
+ return -1;
+ } else if (text.substring(loc, loc + pattern.length) == pattern) {
+ // Perfect match at the perfect spot! (Includes case of null pattern)
+ return loc;
+ }
- return accuracy + proximity / dmp.MatchDistance
+ // Do a fuzzy compare.
+ return this.matchBiTap(text, pattern, loc);
}
- // Highest score beyond which we give up.
- let scoreThreshold = this.MatchThreshold
- // Is there a nearby exact match? (speedup)
- let bestLoc = text.indexOf(pattern, loc)
+ /**
+ * Locate the best instance of 'pattern' in 'text' near 'loc' using the
+ * Bitap algorithm.
+ *
+ * @param {string} text The text to search.
+ * @param {string} pattern The pattern to search for.
+ * @param {number} loc The location to search around.
+ *
+ * @return {number} Best match index or -1.
+ */
+ private matchBiTap(text: string, pattern: string, loc: number): number {
+ if (pattern.length > this.MatchMaxBits) {
+ throw new Error("Pattern too long for this browser.");
+ }
- if (bestLoc != -1) {
- scoreThreshold = Math.min(matchBiTapScore(0, bestLoc), scoreThreshold)
+ // Initialise the alphabet.
+ const s = matchAlphabet(pattern);
+ const dmp = this; // 'this' becomes 'window' in a closure.
+
+ /**
+ * Compute and return the score for a match with e errors and x location.
+ * Accesses loc and pattern through being a closure.
+ *
+ * @param {number} e Number of errors in match.
+ * @param {number} x Location of match.
+ *
+ * @return {number} Overall score for match (0.0 = good, 1.0 = bad).
+ *
+ * @private
+ */
+ function matchBiTapScore(e: number, x: number): number {
+ const accuracy = e / pattern.length;
+ const proximity = Math.abs(loc - x);
+
+ if (!dmp.MatchDistance) {
+ // Dodge divide by zero error.
+ return proximity ? 1.0 : accuracy;
+ }
- // What about in the other direction? (speedup)
- bestLoc = text.lastIndexOf(pattern, loc + pattern.length)
+ return accuracy + proximity / dmp.MatchDistance;
+ }
- if (bestLoc != -1) {
- scoreThreshold = Math.min(matchBiTapScore(0, bestLoc), scoreThreshold)
- }
- }
+ // Highest score beyond which we give up.
+ let scoreThreshold = this.MatchThreshold;
+ // Is there a nearby exact match? (speedup)
+ let bestLoc = text.indexOf(pattern, loc);
- // Initialise the bit arrays.
- const matchMask = 1 << (pattern.length - 1)
+ if (bestLoc != -1) {
+ scoreThreshold = Math.min(matchBiTapScore(0, bestLoc), scoreThreshold);
- bestLoc = -1
+ // What about in the other direction? (speedup)
+ bestLoc = text.lastIndexOf(pattern, loc + pattern.length);
- let binMin
- let binMid
+ if (bestLoc != -1) {
+ scoreThreshold = Math.min(matchBiTapScore(0, bestLoc), scoreThreshold);
+ }
+ }
- let binMax = pattern.length + text.length
- let lastRd: number[] = []
+ // Initialise the bit arrays.
+ const matchMask = 1 << (pattern.length - 1);
- for (let d = 0; d < pattern.length; d++) {
- // Scan for the best match; each iteration allows for one more error.
- // Run a binary search to determine how far from 'loc' we can stray at this
- // error level.
- binMin = 0
- binMid = binMax
+ bestLoc = -1;
- while (binMin < binMid) {
- if (matchBiTapScore(d, loc + binMid) <= scoreThreshold) {
- binMin = binMid
- } else {
- binMax = binMid
- }
+ let binMin;
+ let binMid;
- binMid = Math.floor((binMax - binMin) / 2 + binMin)
- }
+ let binMax = pattern.length + text.length;
+ let lastRd: number[] = [];
- // Use the result from this iteration as the maximum for the next.
- binMax = binMid
+ for (let d = 0; d < pattern.length; d++) {
+ // Scan for the best match; each iteration allows for one more error.
+ // Run a binary search to determine how far from 'loc' we can stray at this
+ // error level.
+ binMin = 0;
+ binMid = binMax;
- let start = Math.max(1, loc - binMid + 1)
+ while (binMin < binMid) {
+ if (matchBiTapScore(d, loc + binMid) <= scoreThreshold) {
+ binMin = binMid;
+ } else {
+ binMax = binMid;
+ }
- const finish = Math.min(loc + binMid, text.length) + pattern.length
- const rd = Array(finish + 2)
+ binMid = Math.floor((binMax - binMin) / 2 + binMin);
+ }
- rd[finish + 1] = (1 << d) - 1
+ // Use the result from this iteration as the maximum for the next.
+ binMax = binMid;
- for (let j = finish; j >= start; j--) {
- // The alphabet (s) is a sparse hash, so the following line generates
- // warnings.
- const charMatch = s[text.charAt(j - 1)]
+ let start = Math.max(1, loc - binMid + 1);
- if (d === 0) {
- // First pass: exact match.
- rd[j] = ((rd[j + 1] << 1) | 1) & charMatch
- } else {
- // Subsequent passes: fuzzy match.
- rd[j] =
- (((rd[j + 1] << 1) | 1) & charMatch) |
- (((lastRd[j + 1] | lastRd[j]) << 1) | 1) |
- lastRd[j + 1]
- }
+ const finish = Math.min(loc + binMid, text.length) + pattern.length;
+ const rd = Array(finish + 2);
- if (rd[j] & matchMask) {
- const score = matchBiTapScore(d, j - 1)
- // This match will almost certainly be better than any existing match.
- // But check anyway.
- if (score <= scoreThreshold) {
- // Told you so.
- scoreThreshold = score
- bestLoc = j - 1
-
- if (bestLoc > loc) {
- // When passing loc, don't exceed our current distance from loc.
- start = Math.max(1, 2 * loc - bestLoc)
- } else {
- // Already passed loc, downhill from here on in.
- break
- }
- }
- }
- }
- // No hope for a (better) match at greater error levels.
- if (matchBiTapScore(d + 1, loc) > scoreThreshold) {
- break
- }
+ rd[finish + 1] = (1 << d) - 1;
- lastRd = rd
- }
+ for (let j = finish; j >= start; j--) {
+ // The alphabet (s) is a sparse hash, so the following line generates
+ // warnings.
+ const charMatch = s[text.charAt(j - 1)];
- return bestLoc
- }
-
- /**
- * Compute a list of patches to turn text1 into text2.
- *
- * @param {!Array.} diffs Array of diff tuples
- *
- * @return {!Array.} Array of Patch objects.
- */
- patchMake(diffs: Diff[]): PatchObject[] {
- const text1 = diffText(diffs, DIFF_INSERT)
-
- if (diffs.length === 0) {
- return [] // Get rid of the null case.
- }
+ if (d === 0) {
+ // First pass: exact match.
+ rd[j] = ((rd[j + 1] << 1) | 1) & charMatch;
+ } else {
+ // Subsequent passes: fuzzy match.
+ rd[j] =
+ (((rd[j + 1] << 1) | 1) & charMatch) | (((lastRd[j + 1] | lastRd[j]) << 1) | 1) | lastRd[j + 1];
+ }
- const patches: PatchObject[] = []
- let patch = new PatchObject()
-
- let patchDiffLength = 0 // Keeping our own length const is faster in JS.
- let charCount1 = 0 // Number of characters into the text1 string.
- let charCount2 = 0 // Number of characters into the text2 string.
-
- // Start with text1 (prePatchText) and apply the diffs until we arrive at
- // text2 (postPatchText). We recreate the patches one by one to determine
- // context info.
- let prePatchText = text1
- let postPatchText = text1
-
- for (let x = 0; x < diffs.length; x++) {
- const diffType = diffs[x].operation
- const diffText = diffs[x].text
-
- if (!patchDiffLength && diffType !== DIFF_EQUAL) {
- // A new patch starts here.
- patch.start1 = charCount1
- patch.start2 = charCount2
- }
-
- switch (diffType) {
- case DIFF_INSERT:
- patch.diffs[patchDiffLength++] = diffs[x]
- patch.length2 += diffText.length
- postPatchText =
- postPatchText.substring(0, charCount2) +
- diffText +
- postPatchText.substring(charCount2)
- break
- case DIFF_DELETE:
- patch.length1 += diffText.length
- patch.diffs[patchDiffLength++] = diffs[x]
- postPatchText =
- postPatchText.substring(0, charCount2) +
- postPatchText.substring(charCount2 + diffText.length)
- break
- case DIFF_EQUAL:
- if (
- diffText.length <= 2 * this.PatchMargin &&
- patchDiffLength &&
- diffs.length != x + 1
- ) {
- // Small equality inside a patch.
- patch.diffs[patchDiffLength++] = diffs[x]
- patch.length1 += diffText.length
- patch.length2 += diffText.length
- } else if (diffText.length >= 2 * this.PatchMargin) {
- // Time for a new patch.
- if (patchDiffLength) {
- this.patchAddContext(patch, prePatchText)
-
- patches.push(patch)
- patch = new PatchObject()
- patchDiffLength = 0
- // Unlike Unidiff, our patch lists have a rolling context.
- // https://github.com/google/diff-match-patch/wiki/Unidiff
- // Update prepatch text & pos to reflect the application of the
- // just completed patch.
- prePatchText = postPatchText
- charCount1 = charCount2
+ if (rd[j] & matchMask) {
+ const score = matchBiTapScore(d, j - 1);
+ // This match will almost certainly be better than any existing match.
+ // But check anyway.
+ if (score <= scoreThreshold) {
+ // Told you so.
+ scoreThreshold = score;
+ bestLoc = j - 1;
+
+ if (bestLoc > loc) {
+ // When passing loc, don't exceed our current distance from loc.
+ start = Math.max(1, 2 * loc - bestLoc);
+ } else {
+ // Already passed loc, downhill from here on in.
+ break;
+ }
+ }
+ }
+ }
+ // No hope for a (better) match at greater error levels.
+ if (matchBiTapScore(d + 1, loc) > scoreThreshold) {
+ break;
}
- }
- break
- }
-
- // Update the current character count.
- if (diffType !== DIFF_INSERT) {
- charCount1 += diffText.length
- }
-
- if (diffType !== DIFF_DELETE) {
- charCount2 += diffText.length
- }
- }
- // Pick up the leftover patch if not empty.
- if (patchDiffLength) {
- this.patchAddContext(patch, prePatchText)
+ lastRd = rd;
+ }
- patches.push(patch)
+ return bestLoc;
}
- return patches
- }
-
- /**
- * Merge a set of patches onto the text. Return a patched text, as well
- * as a list of true/false values indicating which patches were applied.
- *
- * @param {!Array.} patches Array of Patch objects.
- * @param {string} text Old text.
- *
- * @return {!Array.>} Two element Array, containing the
- * new text and an array of boolean values.
- */
- patchApply(patches: PatchObject[], text: string): Array {
- if (patches.length == 0) {
- return [text, []]
- }
+ /**
+ * Compute a list of patches to turn text1 into text2.
+ *
+ * @param {!Array.} diffs Array of diff tuples
+ *
+ * @return {!Array.} Array of Patch objects.
+ */
+ patchMake(diffs: Diff[]): PatchObject[] {
+ const text1 = diffText(diffs, DIFF_INSERT);
- // Deep copy the patches so that no changes are made to originals.
- patches = patchDeepObjectCopy(patches)
-
- const nullPadding = this.patchAddPadding(patches)
-
- text = nullPadding + text + nullPadding
-
- this.patchSplitMax(patches)
-
- // delta keeps track of the offset between the expected and actual location
- // of the previous patch. If there are patches expected at positions 10 and
- // 20, but the first patch was found at 12, delta is 2 and the second patch
- // has an effective expected position of 22.
- let delta = 0
- const results: boolean[] = []
-
- for (let x = 0; x < patches.length; x++) {
- const expectedLoc = patches[x].start2! + delta
- const text1 = diffText(patches[x].diffs, DIFF_INSERT)
-
- let startLoc
- let endLoc = -1
-
- if (text1.length > this.MatchMaxBits) {
- // patchSplitMax will only provide an oversized pattern in the case of
- // a monster delete.
- startLoc = this.matchMain(
- text,
- text1.substring(0, this.MatchMaxBits),
- expectedLoc
- )
-
- if (startLoc != -1) {
- endLoc = this.matchMain(
- text,
- text1.substring(text1.length - this.MatchMaxBits),
- expectedLoc + text1.length - this.MatchMaxBits
- )
-
- if (endLoc == -1 || startLoc >= endLoc) {
- // Can't find valid trailing context. Drop this patch.
- startLoc = -1
- }
- }
- } else {
- startLoc = this.matchMain(text, text1, expectedLoc)
- }
-
- if (startLoc == -1) {
- // No match found. :(
- results[x] = false
- // Subtract the delta for this failed patch from subsequent patches.
- delta -= patches[x].length2 - patches[x].length1
- } else {
- // Found a match. :)
- results[x] = true
- delta = startLoc - expectedLoc
-
- let text2
-
- if (endLoc == -1) {
- text2 = text.substring(startLoc, startLoc + text1.length)
- } else {
- text2 = text.substring(startLoc, endLoc + this.MatchMaxBits)
+ if (diffs.length === 0) {
+ return []; // Get rid of the null case.
}
- if (text1 == text2) {
- // Perfect match, just shove the replacement text in.
- text =
- text.substring(0, startLoc) +
- diffText(patches[x].diffs, DIFF_DELETE) +
- text.substring(startLoc + text1.length)
- } else {
- // Imperfect match. Run a diff to get a framework of equivalent
- // indices.
- const diffs = this.diff(text1, text2, false)
-
- if (
- text1.length > this.MatchMaxBits &&
- levenshtein(diffs) / text1.length > this.PatchDeleteThreshold
- ) {
- // The end points match, but the content is unacceptably bad.
- results[x] = false
- } else {
- this.cleanupSemanticLossless(diffs)
-
- let index1 = 0
- let index2 = 0
-
- for (let y = 0; y < patches[x].diffs.length; y++) {
- const mod = patches[x].diffs[y]
-
- if (mod.operation !== DIFF_EQUAL) {
- index2 = diffXIndex(diffs, index1)
- }
-
- if (mod.operation === DIFF_INSERT) {
- // Insertion
- text =
- text.substring(0, startLoc + index2) +
- mod.text +
- text.substring(startLoc + index2)
- } else if (mod.operation === DIFF_DELETE) {
- // Deletion
- text =
- text.substring(0, startLoc + index2) +
- text.substring(
- startLoc + diffXIndex(diffs, index1 + mod.text.length)
- )
- }
-
- if (mod.operation !== DIFF_DELETE) {
- index1 += mod.text.length
- }
+ const patches: PatchObject[] = [];
+ let patch = new PatchObject();
+
+ let patchDiffLength = 0; // Keeping our own length const is faster in JS.
+ let charCount1 = 0; // Number of characters into the text1 string.
+ let charCount2 = 0; // Number of characters into the text2 string.
+
+ // Start with text1 (prePatchText) and apply the diffs until we arrive at
+ // text2 (postPatchText). We recreate the patches one by one to determine
+ // context info.
+ let prePatchText = text1;
+ let postPatchText = text1;
+
+ for (let x = 0; x < diffs.length; x++) {
+ const diffType = diffs[x].operation;
+ const diffText = diffs[x].text;
+
+ if (!patchDiffLength && diffType !== DIFF_EQUAL) {
+ // A new patch starts here.
+ patch.start1 = charCount1;
+ patch.start2 = charCount2;
+ }
+
+ switch (diffType) {
+ case DIFF_INSERT:
+ patch.diffs[patchDiffLength++] = diffs[x];
+ patch.length2 += diffText.length;
+ postPatchText =
+ postPatchText.substring(0, charCount2) + diffText + postPatchText.substring(charCount2);
+ break;
+ case DIFF_DELETE:
+ patch.length1 += diffText.length;
+ patch.diffs[patchDiffLength++] = diffs[x];
+ postPatchText =
+ postPatchText.substring(0, charCount2) + postPatchText.substring(charCount2 + diffText.length);
+ break;
+ case DIFF_EQUAL:
+ if (diffText.length <= 2 * this.PatchMargin && patchDiffLength && diffs.length != x + 1) {
+ // Small equality inside a patch.
+ patch.diffs[patchDiffLength++] = diffs[x];
+ patch.length1 += diffText.length;
+ patch.length2 += diffText.length;
+ } else if (diffText.length >= 2 * this.PatchMargin) {
+ // Time for a new patch.
+ if (patchDiffLength) {
+ this.patchAddContext(patch, prePatchText);
+
+ patches.push(patch);
+ patch = new PatchObject();
+ patchDiffLength = 0;
+ // Unlike Unidiff, our patch lists have a rolling context.
+ // https://github.com/google/diff-match-patch/wiki/Unidiff
+ // Update prepatch text & pos to reflect the application of the
+ // just completed patch.
+ prePatchText = postPatchText;
+ charCount1 = charCount2;
+ }
+ }
+ break;
+ }
+
+ // Update the current character count.
+ if (diffType !== DIFF_INSERT) {
+ charCount1 += diffText.length;
+ }
+
+ if (diffType !== DIFF_DELETE) {
+ charCount2 += diffText.length;
}
- }
}
- }
+
+ // Pick up the leftover patch if not empty.
+ if (patchDiffLength) {
+ this.patchAddContext(patch, prePatchText);
+
+ patches.push(patch);
+ }
+
+ return patches;
}
- // Strip the padding off.
- text = text.substring(nullPadding.length, text.length - nullPadding.length)
+ /**
+ * Merge a set of patches onto the text. Return a patched text, as well
+ * as a list of true/false values indicating which patches were applied.
+ *
+ * @param {!Array.} patches Array of Patch objects.
+ * @param {string} text Old text.
+ *
+ * @return {!Array.>} Two element Array, containing the
+ * new text and an array of boolean values.
+ */
+ patchApply(patches: PatchObject[], text: string): Array {
+ if (patches.length == 0) {
+ return [text, []];
+ }
- return [text, results]
- }
+ // Deep copy the patches so that no changes are made to originals.
+ patches = patchDeepObjectCopy(patches);
- /**
- * Add some padding on text start and end so that edges can match something.
- * Intended to be called only from within patchApply.
- * @param {!Array.} patches Array of Patch objects.
- * @return {string} The padding string added to each side.
- */
- private patchAddPadding(patches: PatchObject[]): string {
- const paddingLength = this.PatchMargin
- let nullPadding = ''
+ const nullPadding = this.patchAddPadding(patches);
- for (let x = 1; x <= paddingLength; x++) {
- nullPadding += String.fromCharCode(x)
- }
+ text = nullPadding + text + nullPadding;
- // Bump all the patches forward.
- for (let x = 0; x < patches.length; x++) {
- patches[x].start1! += paddingLength
- patches[x].start2! += paddingLength
- }
+ this.patchSplitMax(patches);
- // Add some padding on start of first diff.
- let patch = patches[0]
- let diffs = patch.diffs
-
- if (diffs.length == 0 || diffs[0].operation != DIFF_EQUAL) {
- // Add nullPadding equality.
- diffs.unshift(new Diff(DIFF_EQUAL, nullPadding))
-
- patch.start1! -= paddingLength // Should be 0.
- patch.start2! -= paddingLength // Should be 0.
- patch.length1 += paddingLength
- patch.length2 += paddingLength
- } else if (paddingLength > diffs[0].text.length) {
- // Grow first equality.
- const extraLength = paddingLength - diffs[0].text.length
-
- diffs[0].text =
- nullPadding.substring(diffs[0].text.length) + diffs[0].text
- patch.start1! -= extraLength
- patch.start2! -= extraLength
- patch.length1 += extraLength
- patch.length2 += extraLength
- }
+ // delta keeps track of the offset between the expected and actual location
+ // of the previous patch. If there are patches expected at positions 10 and
+ // 20, but the first patch was found at 12, delta is 2 and the second patch
+ // has an effective expected position of 22.
+ let delta = 0;
+ const results: boolean[] = [];
+
+ for (let x = 0; x < patches.length; x++) {
+ const expectedLoc = patches[x].start2! + delta;
+ const text1 = diffText(patches[x].diffs, DIFF_INSERT);
- // Add some padding on end of last diff.
- patch = patches[patches.length - 1]
- diffs = patch.diffs
+ let startLoc;
+ let endLoc = -1;
- if (diffs.length == 0 || diffs[diffs.length - 1].operation != DIFF_EQUAL) {
- // Add nullPadding equality.
- diffs.push(new Diff(DIFF_EQUAL, nullPadding))
+ if (text1.length > this.MatchMaxBits) {
+ // patchSplitMax will only provide an oversized pattern in the case of
+ // a monster delete.
+ startLoc = this.matchMain(text, text1.substring(0, this.MatchMaxBits), expectedLoc);
- patch.length1 += paddingLength
- patch.length2 += paddingLength
- } else if (paddingLength > diffs[diffs.length - 1].text.length) {
- // Grow last equality.
- const extraLength = paddingLength - diffs[diffs.length - 1].text.length
+ if (startLoc != -1) {
+ endLoc = this.matchMain(
+ text,
+ text1.substring(text1.length - this.MatchMaxBits),
+ expectedLoc + text1.length - this.MatchMaxBits,
+ );
- diffs[diffs.length - 1].text += nullPadding.substring(0, extraLength)
+ if (endLoc == -1 || startLoc >= endLoc) {
+ // Can't find valid trailing context. Drop this patch.
+ startLoc = -1;
+ }
+ }
+ } else {
+ startLoc = this.matchMain(text, text1, expectedLoc);
+ }
+
+ if (startLoc == -1) {
+ // No match found. :(
+ results[x] = false;
+ // Subtract the delta for this failed patch from subsequent patches.
+ delta -= patches[x].length2 - patches[x].length1;
+ } else {
+ // Found a match. :)
+ results[x] = true;
+ delta = startLoc - expectedLoc;
+
+ let text2;
+
+ if (endLoc == -1) {
+ text2 = text.substring(startLoc, startLoc + text1.length);
+ } else {
+ text2 = text.substring(startLoc, endLoc + this.MatchMaxBits);
+ }
- patch.length1 += extraLength
- patch.length2 += extraLength
+ if (text1 == text2) {
+ // Perfect match, just shove the replacement text in.
+ text =
+ text.substring(0, startLoc) +
+ diffText(patches[x].diffs, DIFF_DELETE) +
+ text.substring(startLoc + text1.length);
+ } else {
+ // Imperfect match. Run a diff to get a framework of equivalent
+ // indices.
+ const diffs = this.diff(text1, text2, false);
+
+ if (
+ text1.length > this.MatchMaxBits &&
+ levenshtein(diffs) / text1.length > this.PatchDeleteThreshold
+ ) {
+ // The end points match, but the content is unacceptably bad.
+ results[x] = false;
+ } else {
+ this.cleanupSemanticLossless(diffs);
+
+ let index1 = 0;
+ let index2 = 0;
+
+ for (let y = 0; y < patches[x].diffs.length; y++) {
+ const mod = patches[x].diffs[y];
+
+ if (mod.operation !== DIFF_EQUAL) {
+ index2 = diffXIndex(diffs, index1);
+ }
+
+ if (mod.operation === DIFF_INSERT) {
+ // Insertion
+ text =
+ text.substring(0, startLoc + index2) + mod.text + text.substring(startLoc + index2);
+ } else if (mod.operation === DIFF_DELETE) {
+ // Deletion
+ text =
+ text.substring(0, startLoc + index2) +
+ text.substring(startLoc + diffXIndex(diffs, index1 + mod.text.length));
+ }
+
+ if (mod.operation !== DIFF_DELETE) {
+ index1 += mod.text.length;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Strip the padding off.
+ text = text.substring(nullPadding.length, text.length - nullPadding.length);
+
+ return [text, results];
}
- return nullPadding
- }
+ /**
+ * Add some padding on text start and end so that edges can match something.
+ * Intended to be called only from within patchApply.
+ * @param {!Array.} patches Array of Patch objects.
+ * @return {string} The padding string added to each side.
+ */
+ private patchAddPadding(patches: PatchObject[]): string {
+ const paddingLength = this.PatchMargin;
+ let nullPadding = "";
- /**
- * Look through the patches and break up any which are longer than the maximum
- * limit of the match algorithm.
- * Intended to be called only from within patchApply.
- *
- * @param {!Array.} patches Array of Patch objects.
- */
- private patchSplitMax(patches: PatchObject[]) {
- const patchSize = this.MatchMaxBits
+ for (let x = 1; x <= paddingLength; x++) {
+ nullPadding += String.fromCharCode(x);
+ }
- for (let x = 0; x < patches.length; x++) {
- if (patches[x].length1 <= patchSize) {
- continue
- }
+ // Bump all the patches forward.
+ for (let x = 0; x < patches.length; x++) {
+ patches[x].start1! += paddingLength;
+ patches[x].start2! += paddingLength;
+ }
- const bigPatch = patches[x]
+ // Add some padding on start of first diff.
+ let patch = patches[0];
+ let diffs = patch.diffs;
+
+ if (diffs.length == 0 || diffs[0].operation != DIFF_EQUAL) {
+ // Add nullPadding equality.
+ diffs.unshift(new Diff(DIFF_EQUAL, nullPadding));
+
+ patch.start1! -= paddingLength; // Should be 0.
+ patch.start2! -= paddingLength; // Should be 0.
+ patch.length1 += paddingLength;
+ patch.length2 += paddingLength;
+ } else if (paddingLength > diffs[0].text.length) {
+ // Grow first equality.
+ const extraLength = paddingLength - diffs[0].text.length;
+
+ diffs[0].text = nullPadding.substring(diffs[0].text.length) + diffs[0].text;
+ patch.start1! -= extraLength;
+ patch.start2! -= extraLength;
+ patch.length1 += extraLength;
+ patch.length2 += extraLength;
+ }
- // Remove the big old patch.
- patches.splice(x--, 1)
+ // Add some padding on end of last diff.
+ patch = patches[patches.length - 1];
+ diffs = patch.diffs;
- let start1 = Number(bigPatch.start1)
- let start2 = Number(bigPatch.start2)
- let preContext = ''
+ if (diffs.length == 0 || diffs[diffs.length - 1].operation != DIFF_EQUAL) {
+ // Add nullPadding equality.
+ diffs.push(new Diff(DIFF_EQUAL, nullPadding));
- while (bigPatch.diffs.length !== 0) {
- // Create one of several smaller patches.
- const patch = new PatchObject()
- let empty = true
+ patch.length1 += paddingLength;
+ patch.length2 += paddingLength;
+ } else if (paddingLength > diffs[diffs.length - 1].text.length) {
+ // Grow last equality.
+ const extraLength = paddingLength - diffs[diffs.length - 1].text.length;
- patch.start1 = start1! - preContext.length
- patch.start2 = start2! - preContext.length
+ diffs[diffs.length - 1].text += nullPadding.substring(0, extraLength);
- if (preContext !== '') {
- patch.length1 = patch.length2 = preContext.length
- patch.diffs.push(new Diff(DIFF_EQUAL, preContext))
+ patch.length1 += extraLength;
+ patch.length2 += extraLength;
}
- while (
- bigPatch.diffs.length !== 0 &&
- patch.length1 < patchSize - this.PatchMargin
- ) {
- const diffType = bigPatch.diffs[0].operation
- let diffText = bigPatch.diffs[0].text
-
- if (diffType === DIFF_INSERT) {
- // Insertions are harmless.
- patch.length2 += diffText.length
- start2 += diffText.length
- patch.diffs.push(bigPatch.diffs.shift()!)
- empty = false
- } else if (
- diffType === DIFF_DELETE &&
- patch.diffs.length == 1 &&
- patch.diffs[0].operation == DIFF_EQUAL &&
- diffText.length > 2 * patchSize
- ) {
- // This is a large deletion. Let it pass in one chunk.
- patch.length1 += diffText.length
- start1 += diffText.length
- empty = false
- patch.diffs.push(new Diff(diffType, diffText))
- bigPatch.diffs.shift()
- } else {
- // Deletion or equality. Only take as much as we can stomach.
- diffText = diffText.substring(
- 0,
- patchSize - patch.length1 - this.PatchMargin
- )
-
- patch.length1 += diffText.length
- start1 += diffText.length
-
- if (diffType === DIFF_EQUAL) {
- patch.length2 += diffText.length
- start2 += diffText.length
- } else {
- empty = false
+ return nullPadding;
+ }
+
+ /**
+ * Look through the patches and break up any which are longer than the maximum
+ * limit of the match algorithm.
+ * Intended to be called only from within patchApply.
+ *
+ * @param {!Array.} patches Array of Patch objects.
+ */
+ private patchSplitMax(patches: PatchObject[]) {
+ const patchSize = this.MatchMaxBits;
+
+ for (let x = 0; x < patches.length; x++) {
+ if (patches[x].length1 <= patchSize) {
+ continue;
}
- patch.diffs.push(new Diff(diffType, diffText))
+ const bigPatch = patches[x];
- if (diffText == bigPatch.diffs[0].text) {
- bigPatch.diffs.shift()
- } else {
- bigPatch.diffs[0].text = bigPatch.diffs[0].text.substring(
- diffText.length
- )
+ // Remove the big old patch.
+ patches.splice(x--, 1);
+
+ let start1 = Number(bigPatch.start1);
+ let start2 = Number(bigPatch.start2);
+ let preContext = "";
+
+ while (bigPatch.diffs.length !== 0) {
+ // Create one of several smaller patches.
+ const patch = new PatchObject();
+ let empty = true;
+
+ patch.start1 = start1! - preContext.length;
+ patch.start2 = start2! - preContext.length;
+
+ if (preContext !== "") {
+ patch.length1 = patch.length2 = preContext.length;
+ patch.diffs.push(new Diff(DIFF_EQUAL, preContext));
+ }
+
+ while (bigPatch.diffs.length !== 0 && patch.length1 < patchSize - this.PatchMargin) {
+ const diffType = bigPatch.diffs[0].operation;
+ let diffText = bigPatch.diffs[0].text;
+
+ if (diffType === DIFF_INSERT) {
+ // Insertions are harmless.
+ patch.length2 += diffText.length;
+ start2 += diffText.length;
+ patch.diffs.push(bigPatch.diffs.shift()!);
+ empty = false;
+ } else if (
+ diffType === DIFF_DELETE &&
+ patch.diffs.length == 1 &&
+ patch.diffs[0].operation == DIFF_EQUAL &&
+ diffText.length > 2 * patchSize
+ ) {
+ // This is a large deletion. Let it pass in one chunk.
+ patch.length1 += diffText.length;
+ start1 += diffText.length;
+ empty = false;
+ patch.diffs.push(new Diff(diffType, diffText));
+ bigPatch.diffs.shift();
+ } else {
+ // Deletion or equality. Only take as much as we can stomach.
+ diffText = diffText.substring(0, patchSize - patch.length1 - this.PatchMargin);
+
+ patch.length1 += diffText.length;
+ start1 += diffText.length;
+
+ if (diffType === DIFF_EQUAL) {
+ patch.length2 += diffText.length;
+ start2 += diffText.length;
+ } else {
+ empty = false;
+ }
+
+ patch.diffs.push(new Diff(diffType, diffText));
+
+ if (diffText == bigPatch.diffs[0].text) {
+ bigPatch.diffs.shift();
+ } else {
+ bigPatch.diffs[0].text = bigPatch.diffs[0].text.substring(diffText.length);
+ }
+ }
+ }
+
+ // Compute the head context for the next patch.
+ preContext = diffText(patch.diffs, DIFF_DELETE);
+ preContext = preContext.substring(preContext.length - this.PatchMargin);
+
+ // Append the end context for this patch.
+ const postContext = diffText(bigPatch.diffs, DIFF_INSERT).substring(0, this.PatchMargin);
+
+ if (postContext !== "") {
+ patch.length1 += postContext.length;
+ patch.length2 += postContext.length;
+
+ if (patch.diffs.length !== 0 && patch.diffs[patch.diffs.length - 1].operation === DIFF_EQUAL) {
+ patch.diffs[patch.diffs.length - 1].text += postContext;
+ } else {
+ patch.diffs.push(new Diff(DIFF_EQUAL, postContext));
+ }
+ }
+
+ if (!empty) {
+ patches.splice(++x, 0, patch);
+ }
}
- }
}
+ }
- // Compute the head context for the next patch.
- preContext = diffText(patch.diffs, DIFF_DELETE)
- preContext = preContext.substring(preContext.length - this.PatchMargin)
-
- // Append the end context for this patch.
- const postContext = diffText(bigPatch.diffs, DIFF_INSERT).substring(
- 0,
- this.PatchMargin
- )
-
- if (postContext !== '') {
- patch.length1 += postContext.length
- patch.length2 += postContext.length
-
- if (
- patch.diffs.length !== 0 &&
- patch.diffs[patch.diffs.length - 1].operation === DIFF_EQUAL
- ) {
- patch.diffs[patch.diffs.length - 1].text += postContext
- } else {
- patch.diffs.push(new Diff(DIFF_EQUAL, postContext))
- }
+ /**
+ * Increase the context until it is unique,
+ * but don't let the pattern expand beyond MatchMaxBits.
+ * @param {!PatchObject} patch The patch to grow.
+ * @param {string} text Source text.
+ * @private
+ */
+ private patchAddContext(patch: PatchObject, text: string) {
+ if (text.length == 0) {
+ return;
}
- if (!empty) {
- patches.splice(++x, 0, patch)
+ if (patch.start2 === null) {
+ throw Error("patch not initialized");
}
- }
- }
- }
-
- /**
- * Increase the context until it is unique,
- * but don't let the pattern expand beyond MatchMaxBits.
- * @param {!PatchObject} patch The patch to grow.
- * @param {string} text Source text.
- * @private
- */
- private patchAddContext(patch: PatchObject, text: string) {
- if (text.length == 0) {
- return
- }
- if (patch.start2 === null) {
- throw Error('patch not initialized')
- }
+ let pattern = text.substring(patch.start2, patch.start2 + patch.length1);
+ let padding = 0;
- let pattern = text.substring(patch.start2, patch.start2 + patch.length1)
- let padding = 0
-
- // Look for the first and last matches of pattern in text. If two different
- // matches are found, increase the pattern length.
- while (
- text.indexOf(pattern) != text.lastIndexOf(pattern) &&
- pattern.length < this.MatchMaxBits - this.PatchMargin - this.PatchMargin
- ) {
- padding += this.PatchMargin
- pattern = text.substring(
- patch.start2 - padding,
- patch.start2 + patch.length1 + padding
- )
- }
- // Add one chunk for good luck.
- padding += this.PatchMargin
+ // Look for the first and last matches of pattern in text. If two different
+ // matches are found, increase the pattern length.
+ while (
+ text.indexOf(pattern) != text.lastIndexOf(pattern) &&
+ pattern.length < this.MatchMaxBits - this.PatchMargin - this.PatchMargin
+ ) {
+ padding += this.PatchMargin;
+ pattern = text.substring(patch.start2 - padding, patch.start2 + patch.length1 + padding);
+ }
+ // Add one chunk for good luck.
+ padding += this.PatchMargin;
- // Add the prefix.
- const prefix = text.substring(patch.start2 - padding, patch.start2)
+ // Add the prefix.
+ const prefix = text.substring(patch.start2 - padding, patch.start2);
- if (prefix) {
- patch.diffs.unshift(new Diff(DIFF_EQUAL, prefix))
- }
+ if (prefix) {
+ patch.diffs.unshift(new Diff(DIFF_EQUAL, prefix));
+ }
- // Add the suffix.
- const suffix = text.substring(
- patch.start2 + patch.length1,
- patch.start2 + patch.length1 + padding
- )
+ // Add the suffix.
+ const suffix = text.substring(patch.start2 + patch.length1, patch.start2 + patch.length1 + padding);
- if (suffix) {
- patch.diffs.push(new Diff(DIFF_EQUAL, suffix))
- }
+ if (suffix) {
+ patch.diffs.push(new Diff(DIFF_EQUAL, suffix));
+ }
- // Roll back the start points.
- patch.start1! -= prefix.length
- patch.start2 -= prefix.length
- // Extend the lengths.
- patch.length1 += prefix.length + suffix.length
- patch.length2 += prefix.length + suffix.length
- }
+ // Roll back the start points.
+ patch.start1! -= prefix.length;
+ patch.start2 -= prefix.length;
+ // Extend the lengths.
+ patch.length1 += prefix.length + suffix.length;
+ patch.length2 += prefix.length + suffix.length;
+ }
}
diff --git a/src/diff/diff-text.ts b/src/diff/diff-text.ts
index ad4da8aa..89f92c50 100644
--- a/src/diff/diff-text.ts
+++ b/src/diff/diff-text.ts
@@ -18,7 +18,7 @@
* @author fraser@google.com (Neil Fraser)
*/
-import {Diff} from './diff'
+import { Diff } from "./diff";
/**
* Compute and return the source text (all equalities and deletions).
@@ -28,13 +28,13 @@ import {Diff} from './diff'
* @return {string} Source text.
*/
export const diffText = (diffs: Diff[], type: number): string => {
- const text: string[] = []
+ const text: string[] = [];
- for (let x = 0; x < diffs.length; x++) {
- if (diffs[x].operation !== type) {
- text[x] = diffs[x].text
+ for (let x = 0; x < diffs.length; x++) {
+ if (diffs[x].operation !== type) {
+ text[x] = diffs[x].text;
+ }
}
- }
- return text.join('')
-}
+ return text.join("");
+};
diff --git a/src/diff/diff-x-index.ts b/src/diff/diff-x-index.ts
index 5d3409b3..8d49892d 100644
--- a/src/diff/diff-x-index.ts
+++ b/src/diff/diff-x-index.ts
@@ -18,8 +18,8 @@
* @author fraser@google.com (Neil Fraser)
*/
-import {Diff} from './diff'
-import {DIFF_DELETE, DIFF_INSERT} from '../interfaces'
+import { Diff } from "./diff";
+import { DIFF_DELETE, DIFF_INSERT } from "../interfaces";
/**
* loc is a location in text1, compute and return the equivalent location in
@@ -32,37 +32,37 @@ import {DIFF_DELETE, DIFF_INSERT} from '../interfaces'
* @return {number} Location within text2.
*/
export const diffXIndex = (diffs: Diff[], loc: number): number => {
- let chars1 = 0
- let chars2 = 0
- let lastChars1 = 0
- let lastChars2 = 0
- let x
+ let chars1 = 0;
+ let chars2 = 0;
+ let lastChars1 = 0;
+ let lastChars2 = 0;
+ let x;
- for (x = 0; x < diffs.length; x++) {
- if (diffs[x].operation !== DIFF_INSERT) {
- // Equality or deletion.
- chars1 += diffs[x].text.length
- }
+ for (x = 0; x < diffs.length; x++) {
+ if (diffs[x].operation !== DIFF_INSERT) {
+ // Equality or deletion.
+ chars1 += diffs[x].text.length;
+ }
- if (diffs[x].operation !== DIFF_DELETE) {
- // Equality or insertion.
- chars2 += diffs[x].text.length
- }
+ if (diffs[x].operation !== DIFF_DELETE) {
+ // Equality or insertion.
+ chars2 += diffs[x].text.length;
+ }
- if (chars1 > loc) {
- // Overshot the location.
- break
- }
+ if (chars1 > loc) {
+ // Overshot the location.
+ break;
+ }
- lastChars1 = chars1
- lastChars2 = chars2
- }
+ lastChars1 = chars1;
+ lastChars2 = chars2;
+ }
- // Was the location was deleted?
- if (diffs.length != x && diffs[x].operation === DIFF_DELETE) {
- return lastChars2
- }
+ // Was the location was deleted?
+ if (diffs.length != x && diffs[x].operation === DIFF_DELETE) {
+ return lastChars2;
+ }
- // Add the remaining character length.
- return lastChars2 + (loc - lastChars1)
-}
+ // Add the remaining character length.
+ return lastChars2 + (loc - lastChars1);
+};
diff --git a/src/diff/diff.ts b/src/diff/diff.ts
index 3562e41a..1b6802e1 100644
--- a/src/diff/diff.ts
+++ b/src/diff/diff.ts
@@ -24,62 +24,62 @@
* which means: delete 'Hello', add 'Goodbye' and keep ' world.'
*/
export class Diff {
- 0: number
- 1: string
- 2: boolean
+ 0: number;
+ 1: string;
+ 2: boolean;
- /**
- * Class representing one diff tuple.
- * Attempts to look like a two-element array (which is what this used to be).
- *
- * @param {number} op Operation, one of: DIFF_DELETE, DIFF_INSERT, DIFF_EQUAL.
- * @param {string} text Text to be deleted, inserted, or retained.
- * @param {boolean} bind
- */
- constructor(op: number, text: string, bind = false) {
- this[0] = op
- this[1] = text
- this[2] = bind
- }
+ /**
+ * Class representing one diff tuple.
+ * Attempts to look like a two-element array (which is what this used to be).
+ *
+ * @param {number} op Operation, one of: DIFF_DELETE, DIFF_INSERT, DIFF_EQUAL.
+ * @param {string} text Text to be deleted, inserted, or retained.
+ * @param {boolean} bind
+ */
+ constructor(op: number, text: string, bind = false) {
+ this[0] = op;
+ this[1] = text;
+ this[2] = bind;
+ }
- /**
- * Create a Diff object from a two-element array.
- *
- * @return {Diff} new Diff object.
- */
- static fromArray(diffArray: [number, string, boolean]): Diff {
- return new Diff(diffArray[0], diffArray[1], diffArray[2] || false)
- }
+ /**
+ * Create a Diff object from a two-element array.
+ *
+ * @return {Diff} new Diff object.
+ */
+ static fromArray(diffArray: [number, string, boolean]): Diff {
+ return new Diff(diffArray[0], diffArray[1], diffArray[2] || false);
+ }
- get operation(): number {
- return this[0]
- }
+ get operation(): number {
+ return this[0];
+ }
- set operation(op: number) {
- this[0] = op
- }
+ set operation(op: number) {
+ this[0] = op;
+ }
- get text(): string {
- return this[1]
- }
+ get text(): string {
+ return this[1];
+ }
- set text(text: string) {
- this[1] = text
- }
+ set text(text: string) {
+ this[1] = text;
+ }
- get bind(): boolean {
- return this[2]
- }
+ get bind(): boolean {
+ return this[2];
+ }
- set bind(id: boolean) {
- this[2] = id
- }
+ set bind(id: boolean) {
+ this[2] = id;
+ }
- /**
- * Emulate the output of a two-element array.
- * @return {string} Diff operation as a string.
- */
- toString() {
- return `${this.operation},${this.text}`
- }
+ /**
+ * Emulate the output of a two-element array.
+ * @return {string} Diff operation as a string.
+ */
+ toString() {
+ return `${this.operation},${this.text}`;
+ }
}
diff --git a/src/diff/levenshtein.ts b/src/diff/levenshtein.ts
index 88bbaeea..363082d7 100644
--- a/src/diff/levenshtein.ts
+++ b/src/diff/levenshtein.ts
@@ -18,8 +18,8 @@
* @author fraser@google.com (Neil Fraser)
*/
-import {Diff} from './diff'
-import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT} from '../interfaces'
+import { Diff } from "./diff";
+import { DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT } from "../interfaces";
/**
* Compute the Levenshtein distance; the number of inserted, deleted or
@@ -32,31 +32,31 @@ import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT} from '../interfaces'
* @return {number} Number of changes.
*/
export const levenshtein = (diffs: Diff[]): number => {
- let levenshtein = 0
- let insertions = 0
- let deletions = 0
+ let levenshtein = 0;
+ let insertions = 0;
+ let deletions = 0;
- for (let x = 0; x < diffs.length; x++) {
- const op = diffs[x].operation
- const data = diffs[x].text
+ for (let x = 0; x < diffs.length; x++) {
+ const op = diffs[x].operation;
+ const data = diffs[x].text;
- switch (op) {
- case DIFF_INSERT:
- insertions += data.length
- break
- case DIFF_DELETE:
- deletions += data.length
- break
- case DIFF_EQUAL:
- // A deletion and an insertion is one substitution.
- levenshtein += Math.max(insertions, deletions)
- insertions = 0
- deletions = 0
- break
+ switch (op) {
+ case DIFF_INSERT:
+ insertions += data.length;
+ break;
+ case DIFF_DELETE:
+ deletions += data.length;
+ break;
+ case DIFF_EQUAL:
+ // A deletion and an insertion is one substitution.
+ levenshtein += Math.max(insertions, deletions);
+ insertions = 0;
+ deletions = 0;
+ break;
+ }
}
- }
- levenshtein += Math.max(insertions, deletions)
+ levenshtein += Math.max(insertions, deletions);
- return levenshtein
-}
+ return levenshtein;
+};
diff --git a/src/diff/match-alphabet.ts b/src/diff/match-alphabet.ts
index 32991306..f11cc341 100644
--- a/src/diff/match-alphabet.ts
+++ b/src/diff/match-alphabet.ts
@@ -25,16 +25,16 @@
*
* @return {!Object} Hash of character locations.
*/
-export const matchAlphabet = (pattern: string): {[key: string]: number} => {
- const s: {[key: string]: number} = {}
+export const matchAlphabet = (pattern: string): { [key: string]: number } => {
+ const s: { [key: string]: number } = {};
- for (let i = 0; i < pattern.length; i++) {
- s[pattern.charAt(i)] = 0
- }
+ for (let i = 0; i < pattern.length; i++) {
+ s[pattern.charAt(i)] = 0;
+ }
- for (let i = 0; i < pattern.length; i++) {
- s[pattern.charAt(i)] |= 1 << (pattern.length - i - 1)
- }
+ for (let i = 0; i < pattern.length; i++) {
+ s[pattern.charAt(i)] |= 1 << (pattern.length - i - 1);
+ }
- return s
-}
+ return s;
+};
diff --git a/src/diff/patch-deep-object-copy.ts b/src/diff/patch-deep-object-copy.ts
index f2538e11..456e0a4e 100644
--- a/src/diff/patch-deep-object-copy.ts
+++ b/src/diff/patch-deep-object-copy.ts
@@ -17,8 +17,8 @@
*
* @author fraser@google.com (Neil Fraser)
*/
-import {PatchObject} from './patch-object'
-import {Diff} from './diff'
+import { PatchObject } from "./patch-object";
+import { Diff } from "./diff";
/**
* Given an array of patches, return another array that is identical.
@@ -28,29 +28,26 @@ import {Diff} from './diff'
* @return {!Array.} Array of Patch objects.
*/
export const patchDeepObjectCopy = (patches: PatchObject[]): PatchObject[] => {
- // Making deep copies is hard in JavaScript.
- const patchesCopy: PatchObject[] = []
+ // Making deep copies is hard in JavaScript.
+ const patchesCopy: PatchObject[] = [];
- for (let x = 0; x < patches.length; x++) {
- const patch = patches[x]
- const patchCopy = new PatchObject()
+ for (let x = 0; x < patches.length; x++) {
+ const patch = patches[x];
+ const patchCopy = new PatchObject();
- patchCopy.diffs = []
+ patchCopy.diffs = [];
- for (let y = 0; y < patch.diffs.length; y++) {
- patchCopy.diffs[y] = new Diff(
- patch.diffs[y].operation,
- patch.diffs[y].text
- )
- }
+ for (let y = 0; y < patch.diffs.length; y++) {
+ patchCopy.diffs[y] = new Diff(patch.diffs[y].operation, patch.diffs[y].text);
+ }
- patchCopy.start1 = patch.start1
- patchCopy.start2 = patch.start2
- patchCopy.length1 = patch.length1
- patchCopy.length2 = patch.length2
+ patchCopy.start1 = patch.start1;
+ patchCopy.start2 = patch.start2;
+ patchCopy.length1 = patch.length1;
+ patchCopy.length2 = patch.length2;
- patchesCopy[x] = patchCopy
- }
+ patchesCopy[x] = patchCopy;
+ }
- return patchesCopy
-}
+ return patchesCopy;
+};
diff --git a/src/diff/patch-object.ts b/src/diff/patch-object.ts
index eb333271..548a5b67 100644
--- a/src/diff/patch-object.ts
+++ b/src/diff/patch-object.ts
@@ -18,75 +18,75 @@
* @author fraser@google.com (Neil Fraser)
*/
-import {Diff} from './diff'
-import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT} from '../interfaces'
+import { Diff } from "./diff";
+import { DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT } from "../interfaces";
export class PatchObject {
- diffs: Diff[]
- start1: number | null
- start2: number | null
- length1: number
- length2: number
+ diffs: Diff[];
+ start1: number | null;
+ start2: number | null;
+ length1: number;
+ length2: number;
- constructor() {
- /** @type {!Array.} */
- this.diffs = []
- /** @type {?number} */
- this.start1 = null
- /** @type {?number} */
- this.start2 = null
- /** @type {number} */
- this.length1 = 0
- /** @type {number} */
- this.length2 = 0
- }
+ constructor() {
+ /** @type {!Array.} */
+ this.diffs = [];
+ /** @type {?number} */
+ this.start1 = null;
+ /** @type {?number} */
+ this.start2 = null;
+ /** @type {number} */
+ this.length1 = 0;
+ /** @type {number} */
+ this.length2 = 0;
+ }
- /**
- * Emulate GNU diff's format.
- * Header: @@ -382,8 +481,9 @@
- * Indices are printed as 1-based, not 0-based.
- * @return {string} The GNU diff string.
- */
- toString() {
- let coords1
- let coords2
+ /**
+ * Emulate GNU diff's format.
+ * Header: @@ -382,8 +481,9 @@
+ * Indices are printed as 1-based, not 0-based.
+ * @return {string} The GNU diff string.
+ */
+ toString() {
+ let coords1;
+ let coords2;
- if (this.length1 === 0) {
- coords1 = `${this.start1},0`
- } else if (this.length1 == 1) {
- coords1 = this.start1! + 1
- } else {
- coords1 = `${this.start1! + 1},${this.length1}`
- }
+ if (this.length1 === 0) {
+ coords1 = `${this.start1},0`;
+ } else if (this.length1 == 1) {
+ coords1 = this.start1! + 1;
+ } else {
+ coords1 = `${this.start1! + 1},${this.length1}`;
+ }
- if (this.length2 === 0) {
- coords2 = `${this.start2!},0`
- } else if (this.length2 == 1) {
- coords2 = this.start2! + 1
- } else {
- coords2 = `${this.start2! + 1},${this.length2}`
- }
+ if (this.length2 === 0) {
+ coords2 = `${this.start2!},0`;
+ } else if (this.length2 == 1) {
+ coords2 = this.start2! + 1;
+ } else {
+ coords2 = `${this.start2! + 1},${this.length2}`;
+ }
- const text = [`@@ -${coords1} +${coords2} @@\n`]
- let op
+ const text = [`@@ -${coords1} +${coords2} @@\n`];
+ let op;
- // Escape the body of the patch with %xx notation.
- for (let x = 0; x < this.diffs.length; x++) {
- switch (this.diffs[x].operation) {
- case DIFF_INSERT:
- op = '+'
- break
- case DIFF_DELETE:
- op = '-'
- break
- case DIFF_EQUAL:
- op = ' '
- break
- }
+ // Escape the body of the patch with %xx notation.
+ for (let x = 0; x < this.diffs.length; x++) {
+ switch (this.diffs[x].operation) {
+ case DIFF_INSERT:
+ op = "+";
+ break;
+ case DIFF_DELETE:
+ op = "-";
+ break;
+ case DIFF_EQUAL:
+ op = " ";
+ break;
+ }
- text[x + 1] = `${op + encodeURI(this.diffs[x].text)}\n`
- }
+ text[x + 1] = `${op + encodeURI(this.diffs[x].text)}\n`;
+ }
- return text.join('').replace(/%20/g, ' ')
- }
+ return text.join("").replace(/%20/g, " ");
+ }
}
diff --git a/src/git-auth-helper.ts b/src/git-auth-helper.ts
index 89f1b3ec..e4e5c739 100644
--- a/src/git-auth-helper.ts
+++ b/src/git-auth-helper.ts
@@ -1,263 +1,222 @@
-import * as assert from 'assert'
-import * as core from '@actions/core'
-import * as coreCommand from '@actions/core/lib/command'
-import * as exec from '@actions/exec'
-import fs from 'fs-extra'
-import * as os from 'os'
-import * as path from 'path'
-import {v4 as uuidv4} from 'uuid'
-import {URL} from 'url'
-import {IGitCommandManager, ISettings} from './interfaces'
-import * as stateHelper from './state-helper'
-import which from 'which'
-
-const IS_WINDOWS = process.platform === 'win32'
-const SSH_COMMAND_KEY = 'core.sshCommand'
+import * as assert from "assert";
+import * as core from "@actions/core";
+import * as coreCommand from "@actions/core/lib/command";
+import * as exec from "@actions/exec";
+import fs from "fs-extra";
+import * as os from "os";
+import * as path from "path";
+import { v4 as uuidv4 } from "uuid";
+import { URL } from "url";
+import { IGitCommandManager, ISettings } from "./interfaces";
+import * as stateHelper from "./state-helper";
+import which from "which";
+
+const IS_WINDOWS = process.platform === "win32";
+const SSH_COMMAND_KEY = "core.sshCommand";
export class GitAuthHelper {
- private readonly git: IGitCommandManager
- private readonly settings: ISettings
- private readonly tokenConfigKey: string
- private readonly tokenConfigValue: string
- private readonly tokenPlaceholderConfigValue: string
- private readonly insteadOfKey: string
- private readonly insteadOfValue: string
- private sshCommand = ''
- private sshKeyPath = ''
- private sshKnownHostsPath = ''
-
- constructor(git: IGitCommandManager, settings: ISettings) {
- this.git = git
- this.settings = settings
-
- // Token auth header
- const serverUrl = new URL(process.env['GITHUB_URL'] || 'https://github.com')
-
- this.tokenConfigKey = `http.${serverUrl.origin}/.extraheader` // "origin" is SCHEME://HOSTNAME[:PORT]
-
- const basicCredential = Buffer.from(
- `x-access-token:${this.settings.authToken}`,
- 'utf8'
- ).toString('base64')
-
- core.setSecret(basicCredential)
-
- this.tokenPlaceholderConfigValue = `AUTHORIZATION: basic ***`
- this.tokenConfigValue = `AUTHORIZATION: basic ${basicCredential}`
-
- // Instead of SSH URL
- this.insteadOfKey = `url.${serverUrl.origin}/.insteadOf` // "origin" is SCHEME://HOSTNAME[:PORT]
- this.insteadOfValue = `git@${serverUrl.hostname}:`
- }
-
- async configureAuth(): Promise {
- // Remove possible previous values
- await this.removeAuth()
-
- // Configure new values
- await this.configureSsh()
- await this.configureToken()
- }
-
- async removeAuth(): Promise {
- await this.removeSsh()
- await this.removeToken()
- }
-
- private async configureSsh(): Promise {
- if (!this.settings.sshKey) {
- return
- }
-
- // Write key
- const runnerTemp = process.env['RUNNER_TEMP'] || ''
- assert.ok(runnerTemp, 'RUNNER_TEMP is not defined')
+ private readonly git: IGitCommandManager;
+ private readonly settings: ISettings;
+ private readonly tokenConfigKey: string;
+ private readonly tokenConfigValue: string;
+ private readonly tokenPlaceholderConfigValue: string;
+ private readonly insteadOfKey: string;
+ private readonly insteadOfValue: string;
+ private sshCommand = "";
+ private sshKeyPath = "";
+ private sshKnownHostsPath = "";
- const uniqueId = uuidv4()
+ constructor(git: IGitCommandManager, settings: ISettings) {
+ this.git = git;
+ this.settings = settings;
- stateHelper.setSshKeyPath(path.join(runnerTemp, uniqueId))
+ // Token auth header
+ const serverUrl = new URL(process.env["GITHUB_URL"] || "https://github.com");
- coreCommand.issueCommand(
- 'save-state',
- {name: 'sshKeyPath'},
- this.sshKeyPath
- )
+ this.tokenConfigKey = `http.${serverUrl.origin}/.extraheader`; // "origin" is SCHEME://HOSTNAME[:PORT]
- await fs.promises.mkdir(runnerTemp, {recursive: true})
- await fs.promises.writeFile(
- this.sshKeyPath,
- `${this.settings.sshKey.trim()}\n`,
- {mode: 0o600}
- )
+ const basicCredential = Buffer.from(`x-access-token:${this.settings.authToken}`, "utf8").toString("base64");
- // Remove inherited permissions on Windows
- if (IS_WINDOWS) {
- const icacls = which.sync('icacls.exe')
+ core.setSecret(basicCredential);
- await exec.exec(
- `"${icacls}" "${this.sshKeyPath}" /grant:r "${process.env['USERDOMAIN']}\\${process.env['USERNAME']}:F"`
- )
- await exec.exec(`"${icacls}" "${this.sshKeyPath}" /inheritance:r`)
- }
+ this.tokenPlaceholderConfigValue = `AUTHORIZATION: basic ***`;
+ this.tokenConfigValue = `AUTHORIZATION: basic ${basicCredential}`;
- // Write known hosts
- const userKnownHostsPath = path.join(os.homedir(), '.ssh', 'known_hosts')
- let userKnownHosts = ''
-
- try {
- userKnownHosts = (
- await fs.promises.readFile(userKnownHostsPath)
- ).toString()
- } catch (err) {
- if (err.code !== 'ENOENT') {
- throw err
- }
+ // Instead of SSH URL
+ this.insteadOfKey = `url.${serverUrl.origin}/.insteadOf`; // "origin" is SCHEME://HOSTNAME[:PORT]
+ this.insteadOfValue = `git@${serverUrl.hostname}:`;
}
- let knownHosts = ''
+ async configureAuth(): Promise {
+ // Remove possible previous values
+ await this.removeAuth();
- if (userKnownHosts) {
- knownHosts += `# Begin from ${userKnownHostsPath}\n${userKnownHosts}\n# End from ${userKnownHostsPath}\n`
+ // Configure new values
+ await this.configureSsh();
+ await this.configureToken();
}
- if (this.settings.sshKnownHosts) {
- knownHosts += `# Begin from input known hosts\n${this.settings.sshKnownHosts}\n# end from input known hosts\n`
+ async removeAuth(): Promise {
+ await this.removeSsh();
+ await this.removeToken();
}
- knownHosts += `# Begin implicitly added github.com\ngithub.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==\n# End implicitly added github.com\n`
+ private async configureSsh(): Promise {
+ if (!this.settings.sshKey) {
+ return;
+ }
- this.sshKnownHostsPath = path.join(runnerTemp, `${uniqueId}_known_hosts`)
+ // Write key
+ const runnerTemp = process.env["RUNNER_TEMP"] || "";
+ assert.ok(runnerTemp, "RUNNER_TEMP is not defined");
- stateHelper.setSshKnownHostsPath(this.sshKnownHostsPath)
+ const uniqueId = uuidv4();
- coreCommand.issueCommand(
- 'save-state',
- {name: 'sshKnownHostsPath'},
- this.sshKnownHostsPath
- )
+ stateHelper.setSshKeyPath(path.join(runnerTemp, uniqueId));
- await fs.promises.writeFile(this.sshKnownHostsPath, knownHosts)
+ coreCommand.issueCommand("save-state", { name: "sshKeyPath" }, this.sshKeyPath);
- // Configure GIT_SSH_COMMAND
- const sshPath = which.sync('ssh')
+ await fs.promises.mkdir(runnerTemp, { recursive: true });
+ await fs.promises.writeFile(this.sshKeyPath, `${this.settings.sshKey.trim()}\n`, { mode: 0o600 });
- this.sshCommand = `"${sshPath}" -i "$RUNNER_TEMP/${path.basename(
- this.sshKeyPath
- )}"`
+ // Remove inherited permissions on Windows
+ if (IS_WINDOWS) {
+ const icacls = which.sync("icacls.exe");
- if (this.settings.sshStrict) {
- this.sshCommand += ' -o StrictHostKeyChecking=yes -o CheckHostIP=no'
- }
+ await exec.exec(
+ `"${icacls}" "${this.sshKeyPath}" /grant:r "${process.env["USERDOMAIN"]}\\${process.env["USERNAME"]}:F"`,
+ );
+ await exec.exec(`"${icacls}" "${this.sshKeyPath}" /inheritance:r`);
+ }
+
+ // Write known hosts
+ const userKnownHostsPath = path.join(os.homedir(), ".ssh", "known_hosts");
+ let userKnownHosts = "";
+
+ try {
+ userKnownHosts = (await fs.promises.readFile(userKnownHostsPath)).toString();
+ } catch (err) {
+ if (err.code !== "ENOENT") {
+ throw err;
+ }
+ }
+
+ let knownHosts = "";
+
+ if (userKnownHosts) {
+ knownHosts += `# Begin from ${userKnownHostsPath}\n${userKnownHosts}\n# End from ${userKnownHostsPath}\n`;
+ }
+
+ if (this.settings.sshKnownHosts) {
+ knownHosts += `# Begin from input known hosts\n${this.settings.sshKnownHosts}\n# end from input known hosts\n`;
+ }
+
+ knownHosts += `# Begin implicitly added github.com\ngithub.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==\n# End implicitly added github.com\n`;
+
+ this.sshKnownHostsPath = path.join(runnerTemp, `${uniqueId}_known_hosts`);
+
+ stateHelper.setSshKnownHostsPath(this.sshKnownHostsPath);
- this.sshCommand += ` -o "UserKnownHostsFile=$RUNNER_TEMP/${path.basename(
- this.sshKnownHostsPath
- )}"`
+ coreCommand.issueCommand("save-state", { name: "sshKnownHostsPath" }, this.sshKnownHostsPath);
- core.info(`Temporarily overriding GIT_SSH_COMMAND=${this.sshCommand}`)
+ await fs.promises.writeFile(this.sshKnownHostsPath, knownHosts);
- this.git.setEnvironmentVariable('GIT_SSH_COMMAND', this.sshCommand)
+ // Configure GIT_SSH_COMMAND
+ const sshPath = which.sync("ssh");
- // Configure core.sshCommand
- if (this.settings.persistCredentials) {
- await this.git.config(SSH_COMMAND_KEY, this.sshCommand)
+ this.sshCommand = `"${sshPath}" -i "$RUNNER_TEMP/${path.basename(this.sshKeyPath)}"`;
+
+ if (this.settings.sshStrict) {
+ this.sshCommand += " -o StrictHostKeyChecking=yes -o CheckHostIP=no";
+ }
+
+ this.sshCommand += ` -o "UserKnownHostsFile=$RUNNER_TEMP/${path.basename(this.sshKnownHostsPath)}"`;
+
+ core.info(`Temporarily overriding GIT_SSH_COMMAND=${this.sshCommand}`);
+
+ this.git.setEnvironmentVariable("GIT_SSH_COMMAND", this.sshCommand);
+
+ // Configure core.sshCommand
+ if (this.settings.persistCredentials) {
+ await this.git.config(SSH_COMMAND_KEY, this.sshCommand);
+ }
}
- }
-
- private async configureToken(
- configPath?: string,
- globalConfig?: boolean
- ): Promise {
- // Validate args
- assert.ok(
- (configPath && globalConfig) || (!configPath && !globalConfig),
- 'Unexpected configureToken parameter combinations'
- )
-
- // Default config path
- if (!configPath && !globalConfig) {
- configPath = path.join(this.git.getWorkingDirectory(), '.git', 'config')
+
+ private async configureToken(configPath?: string, globalConfig?: boolean): Promise {
+ // Validate args
+ assert.ok(
+ (configPath && globalConfig) || (!configPath && !globalConfig),
+ "Unexpected configureToken parameter combinations",
+ );
+
+ // Default config path
+ if (!configPath && !globalConfig) {
+ configPath = path.join(this.git.getWorkingDirectory(), ".git", "config");
+ }
+
+ // Configure a placeholder value. This approach avoids the credential being captured
+ // by process creation audit events, which are commonly logged. For more information,
+ // refer to https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/command-line-process-auditing
+ await this.git.config(this.tokenConfigKey, this.tokenPlaceholderConfigValue, globalConfig);
+
+ // Replace the placeholder
+ await this.replaceTokenPlaceholder(configPath || "");
}
- // Configure a placeholder value. This approach avoids the credential being captured
- // by process creation audit events, which are commonly logged. For more information,
- // refer to https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/command-line-process-auditing
- await this.git.config(
- this.tokenConfigKey,
- this.tokenPlaceholderConfigValue,
- globalConfig
- )
-
- // Replace the placeholder
- await this.replaceTokenPlaceholder(configPath || '')
- }
-
- private async replaceTokenPlaceholder(configPath: string): Promise {
- assert.ok(configPath, 'configPath is not defined')
-
- let content = (await fs.promises.readFile(configPath)).toString()
- const placeholderIndex = content.indexOf(this.tokenPlaceholderConfigValue)
-
- if (
- placeholderIndex < 0 ||
- placeholderIndex !== content.lastIndexOf(this.tokenPlaceholderConfigValue)
- ) {
- throw new Error(`Unable to replace auth placeholder in ${configPath}`)
+ private async replaceTokenPlaceholder(configPath: string): Promise {
+ assert.ok(configPath, "configPath is not defined");
+
+ let content = (await fs.promises.readFile(configPath)).toString();
+ const placeholderIndex = content.indexOf(this.tokenPlaceholderConfigValue);
+
+ if (placeholderIndex < 0 || placeholderIndex !== content.lastIndexOf(this.tokenPlaceholderConfigValue)) {
+ throw new Error(`Unable to replace auth placeholder in ${configPath}`);
+ }
+
+ assert.ok(this.tokenConfigValue, "tokenConfigValue is not defined");
+
+ content = content.replace(this.tokenPlaceholderConfigValue, this.tokenConfigValue);
+
+ await fs.promises.writeFile(configPath, content);
}
- assert.ok(this.tokenConfigValue, 'tokenConfigValue is not defined')
-
- content = content.replace(
- this.tokenPlaceholderConfigValue,
- this.tokenConfigValue
- )
-
- await fs.promises.writeFile(configPath, content)
- }
-
- private async removeSsh(): Promise {
- // SSH key
- const keyPath = this.sshKeyPath || stateHelper.SshKeyPath
- if (keyPath) {
- try {
- await fs.remove(keyPath)
- } catch (err) {
- core.debug(err.message)
- core.warning(`Failed to remove SSH key '${keyPath}'`)
- }
+ private async removeSsh(): Promise {
+ // SSH key
+ const keyPath = this.sshKeyPath || stateHelper.SshKeyPath;
+ if (keyPath) {
+ try {
+ await fs.remove(keyPath);
+ } catch (err) {
+ core.debug(err.message);
+ core.warning(`Failed to remove SSH key '${keyPath}'`);
+ }
+ }
+
+ // SSH known hosts
+ const knownHostsPath = this.sshKnownHostsPath || stateHelper.SshKnownHostsPath;
+ if (knownHostsPath) {
+ try {
+ await fs.remove(knownHostsPath);
+ } catch {
+ // Intentionally empty
+ }
+ }
+
+ // SSH command
+ await this.removeGitConfig(SSH_COMMAND_KEY);
}
- // SSH known hosts
- const knownHostsPath =
- this.sshKnownHostsPath || stateHelper.SshKnownHostsPath
- if (knownHostsPath) {
- try {
- await fs.remove(knownHostsPath)
- } catch {
- // Intentionally empty
- }
+ private async removeToken(): Promise {
+ // HTTP extra header
+ await this.removeGitConfig(this.tokenConfigKey);
}
- // SSH command
- await this.removeGitConfig(SSH_COMMAND_KEY)
- }
-
- private async removeToken(): Promise {
- // HTTP extra header
- await this.removeGitConfig(this.tokenConfigKey)
- }
-
- private async removeGitConfig(
- configKey: string,
- submoduleOnly = false
- ): Promise {
- if (!submoduleOnly) {
- if (
- (await this.git.configExists(configKey)) &&
- !(await this.git.tryConfigUnset(configKey))
- ) {
- // Load the config contents
- core.warning(`Failed to remove '${configKey}' from the git config`)
- }
+ private async removeGitConfig(configKey: string, submoduleOnly = false): Promise {
+ if (!submoduleOnly) {
+ if ((await this.git.configExists(configKey)) && !(await this.git.tryConfigUnset(configKey))) {
+ // Load the config contents
+ core.warning(`Failed to remove '${configKey}' from the git config`);
+ }
+ }
}
- }
}
diff --git a/src/git-command-manager.ts b/src/git-command-manager.ts
index 8f178ef3..ff65d9ab 100644
--- a/src/git-command-manager.ts
+++ b/src/git-command-manager.ts
@@ -1,308 +1,268 @@
-import {GitVersion} from './git-version'
-import * as core from '@actions/core'
-import * as exec from '@actions/exec'
-import which from 'which'
-import fs from 'fs-extra'
-import path from 'path'
-import {RetryHelper} from './retry-helper'
-import {IGitCommandManager} from './interfaces'
+import { GitVersion } from "./git-version";
+import * as core from "@actions/core";
+import * as exec from "@actions/exec";
+import which from "which";
+import fs from "fs-extra";
+import path from "path";
+import { RetryHelper } from "./retry-helper";
+import { IGitCommandManager } from "./interfaces";
-const retryHelper = new RetryHelper()
+const retryHelper = new RetryHelper();
// Auth header not supported before 2.9
// Wire protocol v2 not supported before 2.18
-export const MinimumGitVersion = new GitVersion('2.18')
+export const MinimumGitVersion = new GitVersion("2.18");
-export async function createCommandManager(
- workingDirectory: string
-): Promise {
- return await GitCommandManager.createCommandManager(workingDirectory)
+export async function createCommandManager(workingDirectory: string): Promise {
+ return await GitCommandManager.createCommandManager(workingDirectory);
}
export class GitCommandManager implements IGitCommandManager {
- private gitEnv: {[key: string]: string} = {
- GIT_TERMINAL_PROMPT: '0', // Disable git prompt
- GCM_INTERACTIVE: 'Never' // Disable prompting for git credential manager
- }
+ private gitEnv: { [key: string]: string } = {
+ GIT_TERMINAL_PROMPT: "0", // Disable git prompt
+ GCM_INTERACTIVE: "Never", // Disable prompting for git credential manager
+ };
- private workingDirectory = ''
+ private workingDirectory = "";
- private gitPath = ''
+ private gitPath = "";
- private gitVersion?: GitVersion = undefined
+ private gitVersion?: GitVersion = undefined;
- private constructor() {}
+ private constructor() {}
- static async createCommandManager(
- workingDirectory: string
- ): Promise {
- const result = new GitCommandManager()
+ static async createCommandManager(workingDirectory: string): Promise {
+ const result = new GitCommandManager();
- await result.initializeCommandManager(workingDirectory)
+ await result.initializeCommandManager(workingDirectory);
- return result
- }
+ return result;
+ }
+
+ private async initializeCommandManager(workingDirectory: string): Promise {
+ this.workingDirectory = workingDirectory;
+ this.gitPath = which.sync("git");
+
+ // Git version
+ core.debug("Getting git version");
- private async initializeCommandManager(
- workingDirectory: string
- ): Promise {
- this.workingDirectory = workingDirectory
- this.gitPath = which.sync('git')
+ this.gitVersion = new GitVersion();
+ const gitOutput = await this.execGit(["version"]);
+ const stdout = gitOutput.stdout.trim();
+
+ if (!stdout.includes("\n")) {
+ const match = stdout.match(/\d+\.\d+(\.\d+)?/);
+
+ if (match) {
+ this.gitVersion = new GitVersion(match[0]);
+ }
+ }
- // Git version
- core.debug('Getting git version')
+ if (!this.gitVersion.isValid()) {
+ throw new Error("Unable to determine git version");
+ }
+
+ // Set the user agent
+ const gitHttpUserAgent = `git/${this.gitVersion} (github-actions-checkout)`;
+
+ core.debug(`Set git useragent to: ${gitHttpUserAgent}`);
+
+ this.gitEnv["GIT_HTTP_USER_AGENT"] = gitHttpUserAgent;
+ }
- this.gitVersion = new GitVersion()
- const gitOutput = await this.execGit(['version'])
- const stdout = gitOutput.stdout.trim()
+ checkGitVersion(): void {
+ if (this.gitVersion === undefined) {
+ throw new Error("Init the git command manager");
+ }
- if (!stdout.includes('\n')) {
- const match = stdout.match(/\d+\.\d+(\.\d+)?/)
+ if (!this.gitVersion.checkMinimum(MinimumGitVersion)) {
+ throw new Error(
+ `Minimum required git version is ${MinimumGitVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}`,
+ );
+ }
+ }
- if (match) {
- this.gitVersion = new GitVersion(match[0])
- }
+ getWorkingDirectory(): string {
+ return this.workingDirectory;
}
- if (!this.gitVersion.isValid()) {
- throw new Error('Unable to determine git version')
+ async init(): Promise {
+ await this.execGit(["init", this.workingDirectory]);
}
- // Set the user agent
- const gitHttpUserAgent = `git/${this.gitVersion} (github-actions-checkout)`
+ async fetch(fetchDepth: number, refSpec: string[]): Promise {
+ const args = [
+ "-c",
+ "protocol.version=2",
+ "fetch",
+ "--no-tags",
+ "--prune",
+ "--progress",
+ "--no-recurse-submodules",
+ ];
+
+ if (fetchDepth > 0) {
+ args.push(`--depth=${fetchDepth}`);
+ } else if (fs.existsSync(path.join(this.workingDirectory, ".git", "shallow"))) {
+ args.push("--unshallow");
+ }
+
+ args.push("origin");
- core.debug(`Set git useragent to: ${gitHttpUserAgent}`)
+ for (const arg of refSpec) {
+ args.push(arg);
+ }
- this.gitEnv['GIT_HTTP_USER_AGENT'] = gitHttpUserAgent
- }
+ const that = this;
- checkGitVersion(): void {
- if (this.gitVersion === undefined) {
- throw new Error('Init the git command manager')
+ await retryHelper.execute(async () => {
+ await that.execGit(args);
+ });
}
- if (!this.gitVersion.checkMinimum(MinimumGitVersion)) {
- throw new Error(
- `Minimum required git version is ${MinimumGitVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}`
- )
+ async checkout(ref: string, startPoint: string): Promise {
+ const args = ["checkout", "--progress", "--force"];
+ if (startPoint) {
+ args.push("-B", ref, startPoint);
+ } else {
+ args.push(ref);
+ }
+
+ await this.execGit(args);
}
- }
-
- getWorkingDirectory(): string {
- return this.workingDirectory
- }
-
- async init(): Promise {
- await this.execGit(['init', this.workingDirectory])
- }
-
- async fetch(fetchDepth: number, refSpec: string[]): Promise {
- const args = [
- '-c',
- 'protocol.version=2',
- 'fetch',
- '--no-tags',
- '--prune',
- '--progress',
- '--no-recurse-submodules'
- ]
-
- if (fetchDepth > 0) {
- args.push(`--depth=${fetchDepth}`)
- } else if (
- fs.existsSync(path.join(this.workingDirectory, '.git', 'shallow'))
- ) {
- args.push('--unshallow')
+
+ async sha(type: string): Promise {
+ const output = await this.execGit(["rev-parse", "--verify", type]);
+
+ return output.stdout.trim();
}
- args.push('origin')
+ async status(args: string[] = []): Promise {
+ const output = await this.execGit(["status"].concat(args));
- for (const arg of refSpec) {
- args.push(arg)
+ return output.stdout.trim();
}
- const that = this
+ async log1(): Promise {
+ await this.execGit(["log", "-1"]);
+ }
- await retryHelper.execute(async () => {
- await that.execGit(args)
- })
- }
+ async config(configKey: string, configValue: string, globalConfig?: boolean): Promise {
+ await this.execGit(["config", globalConfig ? "--global" : "--local", configKey, configValue]);
+ }
+
+ async configExists(configKey: string, globalConfig?: boolean): Promise {
+ const pattern = configKey.replace(/[^a-zA-Z0-9_]/g, (x) => {
+ return `\\${x}`;
+ });
+ const output = await this.execGit(
+ ["config", globalConfig ? "--global" : "--local", "--name-only", "--get-regexp", pattern],
+ true,
+ );
- async checkout(ref: string, startPoint: string): Promise {
- const args = ['checkout', '--progress', '--force']
- if (startPoint) {
- args.push('-B', ref, startPoint)
- } else {
- args.push(ref)
+ return output.exitCode === 0;
}
- await this.execGit(args)
- }
-
- async sha(type: string): Promise {
- const output = await this.execGit(['rev-parse', '--verify', type])
-
- return output.stdout.trim()
- }
-
- async status(args: string[] = []): Promise {
- const output = await this.execGit(['status'].concat(args))
-
- return output.stdout.trim()
- }
-
- async log1(): Promise {
- await this.execGit(['log', '-1'])
- }
-
- async config(
- configKey: string,
- configValue: string,
- globalConfig?: boolean
- ): Promise {
- await this.execGit([
- 'config',
- globalConfig ? '--global' : '--local',
- configKey,
- configValue
- ])
- }
-
- async configExists(
- configKey: string,
- globalConfig?: boolean
- ): Promise {
- const pattern = configKey.replace(/[^a-zA-Z0-9_]/g, x => {
- return `\\${x}`
- })
- const output = await this.execGit(
- [
- 'config',
- globalConfig ? '--global' : '--local',
- '--name-only',
- '--get-regexp',
- pattern
- ],
- true
- )
-
- return output.exitCode === 0
- }
-
- async tryConfigUnset(
- configKey: string,
- globalConfig?: boolean
- ): Promise {
- const output = await this.execGit(
- [
- 'config',
- globalConfig ? '--global' : '--local',
- '--unset-all',
- configKey
- ],
- true
- )
-
- return output.exitCode === 0
- }
-
- removeEnvironmentVariable(name: string): void {
- delete this.gitEnv[name]
- }
-
- setEnvironmentVariable(name: string, value: string): void {
- this.gitEnv[name] = value
- }
-
- async tryDisableAutomaticGarbageCollection(): Promise {
- const output = await this.execGit(
- ['config', '--local', 'gc.auto', '0'],
- true
- )
-
- return output.exitCode === 0
- }
-
- async remoteAdd(remoteName: string, remoteUrl: string): Promise {
- await this.execGit(['remote', 'add', remoteName, remoteUrl])
- }
-
- async branchExists(remote: boolean, pattern: string): Promise {
- const args = ['branch', '--list']
-
- if (remote) {
- args.push('--remote')
+ async tryConfigUnset(configKey: string, globalConfig?: boolean): Promise {
+ const output = await this.execGit(
+ ["config", globalConfig ? "--global" : "--local", "--unset-all", configKey],
+ true,
+ );
+
+ return output.exitCode === 0;
}
- args.push(pattern)
+ removeEnvironmentVariable(name: string): void {
+ delete this.gitEnv[name];
+ }
- const output = await this.execGit(args)
+ setEnvironmentVariable(name: string, value: string): void {
+ this.gitEnv[name] = value;
+ }
- return !!output.stdout.trim()
- }
+ async tryDisableAutomaticGarbageCollection(): Promise {
+ const output = await this.execGit(["config", "--local", "gc.auto", "0"], true);
- async tagExists(pattern: string): Promise {
- const output = await this.execGit(['tag', '--list', pattern])
+ return output.exitCode === 0;
+ }
- return !!output.stdout.trim()
- }
+ async remoteAdd(remoteName: string, remoteUrl: string): Promise {
+ await this.execGit(["remote", "add", remoteName, remoteUrl]);
+ }
- async addAll(): Promise {
- const output = await this.execGit(['add', '--all'])
+ async branchExists(remote: boolean, pattern: string): Promise {
+ const args = ["branch", "--list"];
- return Boolean(output.exitCode)
- }
+ if (remote) {
+ args.push("--remote");
+ }
- async commit(message: string): Promise {
- const output = await this.execGit(['commit', '-m', `"${message}"`])
+ args.push(pattern);
- return Boolean(output.exitCode)
- }
+ const output = await this.execGit(args);
- async push(ref: string): Promise {
- const output = await this.execGit(['push', '-u', 'origin', ref])
+ return !!output.stdout.trim();
+ }
- return Boolean(output.exitCode)
- }
+ async tagExists(pattern: string): Promise {
+ const output = await this.execGit(["tag", "--list", pattern]);
- private async execGit(
- args: string[],
- allowAllExitCodes = false
- ): Promise {
- fs.existsSync(this.workingDirectory)
+ return !!output.stdout.trim();
+ }
- const result = new GitOutput()
+ async addAll(): Promise {
+ const output = await this.execGit(["add", "--all"]);
- const env: {[key: string]: string} = {}
+ return Boolean(output.exitCode);
+ }
- for (const key of Object.keys(process.env)) {
- env[key] = process.env[key] as string
+ async commit(message: string): Promise {
+ const output = await this.execGit(["commit", "-m", `"${message}"`]);
+
+ return Boolean(output.exitCode);
}
- for (const key of Object.keys(this.gitEnv)) {
- env[key] = this.gitEnv[key]
+
+ async push(ref: string): Promise {
+ const output = await this.execGit(["push", "-u", "origin", ref]);
+
+ return Boolean(output.exitCode);
}
- const stdout: string[] = []
+ private async execGit(args: string[], allowAllExitCodes = false): Promise {
+ fs.existsSync(this.workingDirectory);
+
+ const result = new GitOutput();
+
+ const env: { [key: string]: string } = {};
- const options = {
- cwd: this.workingDirectory,
- env,
- ignoreReturnCode: allowAllExitCodes,
- listeners: {
- stdout: (data: Buffer) => {
- stdout.push(data.toString())
+ for (const key of Object.keys(process.env)) {
+ env[key] = process.env[key] as string;
}
- }
- }
+ for (const key of Object.keys(this.gitEnv)) {
+ env[key] = this.gitEnv[key];
+ }
+
+ const stdout: string[] = [];
- result.exitCode = await exec.exec(`"${this.gitPath}"`, args, options)
- result.stdout = stdout.join('')
+ const options = {
+ cwd: this.workingDirectory,
+ env,
+ ignoreReturnCode: allowAllExitCodes,
+ listeners: {
+ stdout: (data: Buffer) => {
+ stdout.push(data.toString());
+ },
+ },
+ };
- return result
- }
+ result.exitCode = await exec.exec(`"${this.gitPath}"`, args, options);
+ result.stdout = stdout.join("");
+
+ return result;
+ }
}
class GitOutput {
- stdout = ''
- exitCode = 0
+ stdout = "";
+ exitCode = 0;
}
diff --git a/src/git-source-provider.ts b/src/git-source-provider.ts
index 77bfce57..436c0683 100644
--- a/src/git-source-provider.ts
+++ b/src/git-source-provider.ts
@@ -1,147 +1,136 @@
-import * as core from '@actions/core'
-import * as path from 'path'
-import fs from 'fs-extra'
-import {IGitCommandManager, IGithubManager, ISettings} from './interfaces'
-import {createCommandManager, MinimumGitVersion} from './git-command-manager'
-import {GitAuthHelper} from './git-auth-helper'
-import * as refHelper from './ref-helper'
-import * as stateHelper from './state-helper'
+import * as core from "@actions/core";
+import * as path from "path";
+import fs from "fs-extra";
+import { IGitCommandManager, IGithubManager, ISettings } from "./interfaces";
+import { createCommandManager, MinimumGitVersion } from "./git-command-manager";
+import { GitAuthHelper } from "./git-auth-helper";
+import * as refHelper from "./ref-helper";
+import * as stateHelper from "./state-helper";
export async function getSource(
- githubManager: IGithubManager,
- settings: ISettings,
- repositoryUrl: string,
- repositoryPath: string,
- ref: string, // ref
- fetchDepth = 0
+ githubManager: IGithubManager,
+ settings: ISettings,
+ repositoryUrl: string,
+ repositoryPath: string,
+ ref: string, // ref
+ fetchDepth = 0,
): Promise {
- // Repository URL
- core.info(`Cloning repository: ${repositoryUrl}`)
+ // Repository URL
+ core.info(`Cloning repository: ${repositoryUrl}`);
- // Remove conflicting file path
- if (fs.existsSync(repositoryPath)) {
- await fs.remove(repositoryPath)
- }
+ // Remove conflicting file path
+ if (fs.existsSync(repositoryPath)) {
+ await fs.remove(repositoryPath);
+ }
+
+ // Create directory
+ let isExisting = true;
+
+ if (!fs.existsSync(repositoryPath)) {
+ isExisting = false;
+
+ await fs.mkdirp(repositoryPath);
+ }
+
+ // Git command manager
+ core.startGroup("Getting Git version info");
+ const git = await gitCommandManager(repositoryPath);
+ core.endGroup();
- // Create directory
- let isExisting = true
+ // Prepare existing directory, otherwise recreate
+ if (isExisting) {
+ core.info(`Deleting the contents of '${repositoryPath}'`);
- if (!fs.existsSync(repositoryPath)) {
- isExisting = false
+ for (const file of await fs.promises.readdir(repositoryPath)) {
+ await fs.remove(path.join(repositoryPath, file));
+ }
+ }
- await fs.mkdirp(repositoryPath)
- }
+ if (!git) {
+ // Downloading using REST API
+ core.info(`The repository will be downloaded using the GitHub REST API`);
+ core.info(`To create a local Git repository instead, add Git ${MinimumGitVersion} or higher to the PATH`);
- // Git command manager
- core.startGroup('Getting Git version info')
- const git = await gitCommandManager(repositoryPath)
- core.endGroup()
+ if (settings.sshKey) {
+ throw new Error(
+ `Input 'ssh-key' not supported when falling back to download using the GitHub REST API. To create a local Git repository instead, add Git ${MinimumGitVersion} or higher to the PATH.`,
+ );
+ }
- // Prepare existing directory, otherwise recreate
- if (isExisting) {
- core.info(`Deleting the contents of '${repositoryPath}'`)
+ const [templateRepositoryOwner, templateRepositoryName] = repositoryPath.split("/");
- for (const file of await fs.promises.readdir(repositoryPath)) {
- await fs.remove(path.join(repositoryPath, file))
+ await githubManager.repos.downloadRepository(templateRepositoryOwner, templateRepositoryName, ref);
+ return;
}
- }
-
- if (!git) {
- // Downloading using REST API
- core.info(`The repository will be downloaded using the GitHub REST API`)
- core.info(
- `To create a local Git repository instead, add Git ${MinimumGitVersion} or higher to the PATH`
- )
-
- if (settings.sshKey) {
- throw new Error(
- `Input 'ssh-key' not supported when falling back to download using the GitHub REST API. To create a local Git repository instead, add Git ${MinimumGitVersion} or higher to the PATH.`
- )
+
+ // Save state for POST action
+ stateHelper.setTemplateRepositoryPath(repositoryPath);
+
+ // Initialize the repository
+ if (!fs.existsSync(path.join(repositoryPath, ".git"))) {
+ core.startGroup("Initializing the repository");
+ await git.init();
+
+ await git.remoteAdd("origin", repositoryUrl);
+ core.endGroup();
}
- const [
- templateRepositoryOwner,
- templateRepositoryName
- ] = repositoryPath.split('/')
-
- await githubManager.repos.downloadRepository(
- templateRepositoryOwner,
- templateRepositoryName,
- ref
- )
- return
- }
-
- // Save state for POST action
- stateHelper.setTemplateRepositoryPath(repositoryPath)
-
- // Initialize the repository
- if (!fs.existsSync(path.join(repositoryPath, '.git'))) {
- core.startGroup('Initializing the repository')
- await git.init()
-
- await git.remoteAdd('origin', repositoryUrl)
- core.endGroup()
- }
-
- // Disable automatic garbage collection
- core.startGroup('Disabling automatic garbage collection')
- if (!(await git.tryDisableAutomaticGarbageCollection())) {
- core.warning(
- `Unable to turn off git automatic garbage collection. The git fetch operation may trigger garbage collection and cause a delay.`
- )
- }
- core.endGroup()
-
- const authHelper = new GitAuthHelper(git, settings)
-
- try {
- // Configure auth
- core.startGroup('Setting up auth')
- await authHelper.configureAuth()
- core.endGroup()
-
- // Fetch
- core.startGroup('Fetching the repository')
- const refSpec = refHelper.getRefSpec(ref)
- await git.fetch(fetchDepth, refSpec)
- core.endGroup()
-
- // Checkout info
- core.startGroup('Determining the checkout info')
- const checkoutInfo = await refHelper.getCheckoutInfo(git, ref)
- core.endGroup()
-
- // Checkout
- core.startGroup('Checking out the ref')
- await git.checkout(checkoutInfo.ref, checkoutInfo.startPoint)
- core.endGroup()
-
- // Dump some info about the checked out commit
- await git.log1()
- } finally {
- // Remove auth
- if (!settings.persistCredentials) {
- core.startGroup('Removing auth')
- await authHelper.removeAuth()
- core.endGroup()
+ // Disable automatic garbage collection
+ core.startGroup("Disabling automatic garbage collection");
+ if (!(await git.tryDisableAutomaticGarbageCollection())) {
+ core.warning(
+ `Unable to turn off git automatic garbage collection. The git fetch operation may trigger garbage collection and cause a delay.`,
+ );
+ }
+ core.endGroup();
+
+ const authHelper = new GitAuthHelper(git, settings);
+
+ try {
+ // Configure auth
+ core.startGroup("Setting up auth");
+ await authHelper.configureAuth();
+ core.endGroup();
+
+ // Fetch
+ core.startGroup("Fetching the repository");
+ const refSpec = refHelper.getRefSpec(ref);
+ await git.fetch(fetchDepth, refSpec);
+ core.endGroup();
+
+ // Checkout info
+ core.startGroup("Determining the checkout info");
+ const checkoutInfo = await refHelper.getCheckoutInfo(git, ref);
+ core.endGroup();
+
+ // Checkout
+ core.startGroup("Checking out the ref");
+ await git.checkout(checkoutInfo.ref, checkoutInfo.startPoint);
+ core.endGroup();
+
+ // Dump some info about the checked out commit
+ await git.log1();
+ } finally {
+ // Remove auth
+ if (!settings.persistCredentials) {
+ core.startGroup("Removing auth");
+ await authHelper.removeAuth();
+ core.endGroup();
+ }
}
- }
}
-async function gitCommandManager(
- repositoryPath: string
-): Promise {
- core.info(`Working directory is '${repositoryPath}'`)
+async function gitCommandManager(repositoryPath: string): Promise {
+ core.info(`Working directory is '${repositoryPath}'`);
- try {
- const manager = await createCommandManager(repositoryPath)
+ try {
+ const manager = await createCommandManager(repositoryPath);
- manager.checkGitVersion()
+ manager.checkGitVersion();
- return manager
- } catch (err) {
- // Otherwise fallback to REST API
- return undefined
- }
+ return manager;
+ } catch (err) {
+ // Otherwise fallback to REST API
+ return undefined;
+ }
}
diff --git a/src/github-action-cleanup.ts b/src/github-action-cleanup.ts
index 4a306205..eb690c56 100644
--- a/src/github-action-cleanup.ts
+++ b/src/github-action-cleanup.ts
@@ -1,36 +1,33 @@
-import fs from 'fs-extra'
-import path from 'path'
-import * as core from '@actions/core'
-import {createCommandManager} from './git-command-manager'
-import {IGitCommandManager, ISettings} from './interfaces'
-import {GitAuthHelper} from './git-auth-helper'
-import {GithubActionContext} from './github-action-context'
-import {Settings} from './settings'
+import fs from "fs-extra";
+import path from "path";
+import * as core from "@actions/core";
+import { createCommandManager } from "./git-command-manager";
+import { IGitCommandManager, ISettings } from "./interfaces";
+import { GitAuthHelper } from "./git-auth-helper";
+import { GithubActionContext } from "./github-action-context";
+import { Settings } from "./settings";
export async function cleanup(repositoryPath: string): Promise {
- if (
- !repositoryPath ||
- !fs.existsSync(path.join(repositoryPath, '.git', 'config'))
- ) {
- return
- }
+ if (!repositoryPath || !fs.existsSync(path.join(repositoryPath, ".git", "config"))) {
+ return;
+ }
- let git: IGitCommandManager
- try {
- git = await createCommandManager(repositoryPath)
- } catch {
- return
- }
+ let git: IGitCommandManager;
+ try {
+ git = await createCommandManager(repositoryPath);
+ } catch {
+ return;
+ }
- try {
- const context = new GithubActionContext()
- let settings: ISettings = new Settings(context)
- // Remove auth
- const authHelper = new GitAuthHelper(git, settings)
- await authHelper.removeAuth()
+ try {
+ const context = new GithubActionContext();
+ let settings: ISettings = new Settings(context);
+ // Remove auth
+ const authHelper = new GitAuthHelper(git, settings);
+ await authHelper.removeAuth();
- await fs.remove(repositoryPath)
- } catch (error) {
- core.setFailed(error.message)
- }
+ await fs.remove(repositoryPath);
+ } catch (error) {
+ core.setFailed(error.message);
+ }
}
diff --git a/src/github-action-context.ts b/src/github-action-context.ts
index 64437175..f77d45fb 100644
--- a/src/github-action-context.ts
+++ b/src/github-action-context.ts
@@ -1,43 +1,39 @@
-import {readFileSync, existsSync} from 'fs'
-import {IWebhookPayload} from './interfaces'
-import {EOL} from 'os'
+import { readFileSync, existsSync } from "fs";
+import { IWebhookPayload } from "./interfaces";
+import { EOL } from "os";
export class GithubActionContext {
- payload: IWebhookPayload
- ref: string
+ payload: IWebhookPayload;
+ ref: string;
- constructor() {
- this.payload = {}
+ constructor() {
+ this.payload = {};
- if (process.env.GITHUB_EVENT_PATH) {
- if (existsSync(process.env.GITHUB_EVENT_PATH)) {
- this.payload = JSON.parse(
- readFileSync(process.env.GITHUB_EVENT_PATH, {encoding: 'utf8'})
- )
- } else {
- const path = process.env.GITHUB_EVENT_PATH
+ if (process.env.GITHUB_EVENT_PATH) {
+ if (existsSync(process.env.GITHUB_EVENT_PATH)) {
+ this.payload = JSON.parse(readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: "utf8" }));
+ } else {
+ const path = process.env.GITHUB_EVENT_PATH;
- process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${EOL}`)
- }
+ process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${EOL}`);
+ }
+ }
+ this.ref = process.env.GITHUB_REF as string;
}
- this.ref = process.env.GITHUB_REF as string
- }
- get repo(): {owner: string; repo: string} {
- if (process.env.GITHUB_REPOSITORY) {
- const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/')
- return {owner, repo}
- }
+ get repo(): { owner: string; repo: string } {
+ if (process.env.GITHUB_REPOSITORY) {
+ const [owner, repo] = process.env.GITHUB_REPOSITORY.split("/");
+ return { owner, repo };
+ }
- if (this.payload.repository) {
- return {
- owner: this.payload.repository.owner.login,
- repo: this.payload.repository.name
- }
- }
+ if (this.payload.repository) {
+ return {
+ owner: this.payload.repository.owner.login,
+ repo: this.payload.repository.name,
+ };
+ }
- throw new Error(
- "context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'"
- )
- }
+ throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'");
+ }
}
diff --git a/src/github-manager.ts b/src/github-manager.ts
index 1b8e1806..5abec061 100644
--- a/src/github-manager.ts
+++ b/src/github-manager.ts
@@ -1,245 +1,221 @@
-import {Octokit} from '@octokit/core'
-import * as core from '@actions/core'
-import {inspect} from 'util'
-import {v4 as uuidv4} from 'uuid'
-import path from 'path'
-import fs from 'fs-extra'
-import * as toolCache from '@actions/tool-cache'
-import assert from 'assert'
+import { Octokit } from "@octokit/core";
+import * as core from "@actions/core";
+import { inspect } from "util";
+import { v4 as uuidv4 } from "uuid";
+import path from "path";
+import fs from "fs-extra";
+import * as toolCache from "@actions/tool-cache";
+import assert from "assert";
import {
- IGithubManager,
- IGithubManagerBranch,
- IGithubManagerPulls,
- IGithubManagerRepos,
- OctokitHttpError
-} from './interfaces'
+ IGithubManager,
+ IGithubManagerBranch,
+ IGithubManagerPulls,
+ IGithubManagerRepos,
+ OctokitHttpError,
+} from "./interfaces";
-const IS_WINDOWS = process.platform === 'win32'
+const IS_WINDOWS = process.platform === "win32";
export class GithubManager implements IGithubManager {
- octokit: Octokit
-
- constructor(octokit: Octokit) {
- this.octokit = octokit
- }
-
- get branch(): IGithubManagerBranch {
- return {
- create: async (
- owner: string,
- repo: string,
- sha: string,
- syncBranch: string
- ) => {
- try {
- core.debug(`Creating branch ${syncBranch}`)
-
- await this.octokit.git.createRef({
- ref: `refs/heads/${syncBranch}`,
- sha,
- owner,
- repo
- })
- } catch (error) {
- throw new Error(
- `Failed to create branch ${syncBranch}; ${inspect(error)}`
- )
- }
- },
- delete: async (owner: string, repo: string, branch: string) => {
- try {
- core.debug(`Delete branch ${branch}`)
-
- await this.octokit.git.deleteRef({
- owner,
- repo,
- ref: `refs/heads/${branch}`
- })
- } catch (error) {
- throw new Error(
- `Failed to delete branch ${branch}; ${inspect(error)}`
- )
- }
- },
- get: async (owner: string, repo: string, branch: string) => {
- try {
- return await this.octokit.git.getRef({
- owner,
- repo,
- ref: `heads/${branch}`
- })
- } catch (error) {
- throw new Error(`Failed to get branch ${branch}; ${inspect(error)}`)
- }
- },
- has: async (owner: string, repo: string, branch: string) => {
- try {
- await this.octokit.repos.getBranch({
- owner,
- repo,
- branch
- })
-
- return true
- } catch (error) {
- const err: OctokitHttpError = error
-
- if (err.name === 'HttpError' && err.status === 404) {
- return false
- }
-
- throw new Error(
- `Failed to check if branch ${branch} exist; ${inspect(err)}`
- )
- }
- }
+ octokit: Octokit;
+
+ constructor(octokit: Octokit) {
+ this.octokit = octokit;
}
- }
-
- get pulls(): IGithubManagerPulls {
- return {
- create: async (
- owner: string,
- repo: string,
- head: string,
- base: string,
- title: string,
- body: string
- ): Promise => {
- try {
- await this.octokit.pulls.create({
- owner,
- repo,
- title,
- head,
- base,
- body
- })
- } catch (error) {
- const err: OctokitHttpError = error
-
- core.debug(inspect(err))
-
- if (
- err.name === 'HttpError' &&
- (err.message.includes('No commits between') ||
- err.message.includes('A pull request already exists for'))
- ) {
- core.info(err.message)
-
- process.exit(0) // there is currently no neutral exit code
- } else {
- throw new Error(
- `Failed to create a pull request; ${inspect(error)}`
- )
- }
- }
- }
+
+ get branch(): IGithubManagerBranch {
+ return {
+ create: async (owner: string, repo: string, sha: string, syncBranch: string) => {
+ try {
+ core.debug(`Creating branch ${syncBranch}`);
+
+ await this.octokit.git.createRef({
+ ref: `refs/heads/${syncBranch}`,
+ sha,
+ owner,
+ repo,
+ });
+ } catch (error) {
+ throw new Error(`Failed to create branch ${syncBranch}; ${inspect(error)}`);
+ }
+ },
+ delete: async (owner: string, repo: string, branch: string) => {
+ try {
+ core.debug(`Delete branch ${branch}`);
+
+ await this.octokit.git.deleteRef({
+ owner,
+ repo,
+ ref: `refs/heads/${branch}`,
+ });
+ } catch (error) {
+ throw new Error(`Failed to delete branch ${branch}; ${inspect(error)}`);
+ }
+ },
+ get: async (owner: string, repo: string, branch: string) => {
+ try {
+ return await this.octokit.git.getRef({
+ owner,
+ repo,
+ ref: `heads/${branch}`,
+ });
+ } catch (error) {
+ throw new Error(`Failed to get branch ${branch}; ${inspect(error)}`);
+ }
+ },
+ has: async (owner: string, repo: string, branch: string) => {
+ try {
+ await this.octokit.repos.getBranch({
+ owner,
+ repo,
+ branch,
+ });
+
+ return true;
+ } catch (error) {
+ const err: OctokitHttpError = error;
+
+ if (err.name === "HttpError" && err.status === 404) {
+ return false;
+ }
+
+ throw new Error(`Failed to check if branch ${branch} exist; ${inspect(err)}`);
+ }
+ },
+ };
}
- }
-
- get repos(): IGithubManagerRepos {
- const getArchiveLink = async (
- owner: string,
- repo: string,
- ref: string
- ): Promise => {
- const response = await this.octokit.repos.getArchiveLink({
- owner,
- repo,
- archive_format: IS_WINDOWS ? 'zipball' : 'tarball', // eslint-disable-line @typescript-eslint/camelcase
- ref
- })
-
- if (response.status !== 200) {
- throw new Error(
- `Unexpected response from GitHub API. Status: ${response.status}, Data: ${response.data}`
- )
- }
-
- return Buffer.from(response.data) // response.data is ArrayBuffer
+
+ get pulls(): IGithubManagerPulls {
+ return {
+ create: async (
+ owner: string,
+ repo: string,
+ head: string,
+ base: string,
+ title: string,
+ body: string,
+ ): Promise => {
+ try {
+ await this.octokit.pulls.create({
+ owner,
+ repo,
+ title,
+ head,
+ base,
+ body,
+ });
+ } catch (error) {
+ const err: OctokitHttpError = error;
+
+ core.debug(inspect(err));
+
+ if (
+ err.name === "HttpError" &&
+ (err.message.includes("No commits between") ||
+ err.message.includes("A pull request already exists for"))
+ ) {
+ core.info(err.message);
+
+ process.exit(0); // there is currently no neutral exit code
+ } else {
+ throw new Error(`Failed to create a pull request; ${inspect(error)}`);
+ }
+ }
+ },
+ };
}
- return {
- get: async (
- owner: string,
- repo: string
- // @ts-ignore
- ): Promise => {
- try {
- return await this.octokit.repos.get({
- owner,
- repo
- })
- } catch (error) {
- throw new Error(`Failed to get repository; ${inspect(error)}`)
- }
- },
- getArchiveLink,
- downloadRepository: async (
- owner: string,
- repo: string,
- ref: string
- ): Promise => {
- const repositoryPath = `${owner}_${repo}`
-
- // Download the archive
- core.info('Downloading the archive')
- let archiveData = await getArchiveLink(owner, repo, ref)
-
- // Write archive to disk
- core.info('Writing archive to disk')
-
- const uniqueId = uuidv4()
- const archivePath = path.join(repositoryPath, `${uniqueId}.tar.gz`)
-
- await fs.promises.writeFile(archivePath, archiveData)
- archiveData = Buffer.from('') // Free memory
-
- // Extract archive
- core.info('Extracting the archive')
-
- const extractPath = path.join(repositoryPath, uniqueId)
-
- await fs.mkdirp(extractPath)
-
- if (IS_WINDOWS) {
- await toolCache.extractZip(archivePath, extractPath)
- } else {
- await toolCache.extractTar(archivePath, extractPath)
- }
-
- await fs.remove(archivePath)
-
- // Determine the path of the repository content. The archive contains
- // a top-level folder and the repository content is inside.
- const archiveFileNames = await fs.promises.readdir(extractPath)
-
- assert.ok(
- archiveFileNames.length === 1,
- 'Expected exactly one directory inside archive'
- )
-
- const archiveVersion = archiveFileNames[0] // The top-level folder name includes the short SHA
-
- core.info(`Resolved version ${archiveVersion}`)
-
- const tempRepositoryPath = path.join(extractPath, archiveVersion)
-
- // Move the files
- for (const fileName of await fs.promises.readdir(tempRepositoryPath)) {
- const sourcePath = path.join(tempRepositoryPath, fileName)
- const targetPath = path.join(repositoryPath, fileName)
-
- if (IS_WINDOWS) {
- await fs.copy(sourcePath, targetPath) // Copy on Windows (Windows Defender may have a lock)
- } else {
- await fs.move(sourcePath, targetPath)
- }
- }
-
- await fs.remove(extractPath)
- }
+ get repos(): IGithubManagerRepos {
+ const getArchiveLink = async (owner: string, repo: string, ref: string): Promise => {
+ const response = await this.octokit.repos.getArchiveLink({
+ owner,
+ repo,
+ archive_format: IS_WINDOWS ? "zipball" : "tarball", // eslint-disable-line @typescript-eslint/camelcase
+ ref,
+ });
+
+ if (response.status !== 200) {
+ throw new Error(
+ `Unexpected response from GitHub API. Status: ${response.status}, Data: ${response.data}`,
+ );
+ }
+
+ return Buffer.from(response.data); // response.data is ArrayBuffer
+ };
+
+ return {
+ get: async (
+ owner: string,
+ repo: string,
+ // @ts-ignore
+ ): Promise => {
+ try {
+ return await this.octokit.repos.get({
+ owner,
+ repo,
+ });
+ } catch (error) {
+ throw new Error(`Failed to get repository; ${inspect(error)}`);
+ }
+ },
+ getArchiveLink,
+ downloadRepository: async (owner: string, repo: string, ref: string): Promise => {
+ const repositoryPath = `${owner}_${repo}`;
+
+ // Download the archive
+ core.info("Downloading the archive");
+ let archiveData = await getArchiveLink(owner, repo, ref);
+
+ // Write archive to disk
+ core.info("Writing archive to disk");
+
+ const uniqueId = uuidv4();
+ const archivePath = path.join(repositoryPath, `${uniqueId}.tar.gz`);
+
+ await fs.promises.writeFile(archivePath, archiveData);
+ archiveData = Buffer.from(""); // Free memory
+
+ // Extract archive
+ core.info("Extracting the archive");
+
+ const extractPath = path.join(repositoryPath, uniqueId);
+
+ await fs.mkdirp(extractPath);
+
+ if (IS_WINDOWS) {
+ await toolCache.extractZip(archivePath, extractPath);
+ } else {
+ await toolCache.extractTar(archivePath, extractPath);
+ }
+
+ await fs.remove(archivePath);
+
+ // Determine the path of the repository content. The archive contains
+ // a top-level folder and the repository content is inside.
+ const archiveFileNames = await fs.promises.readdir(extractPath);
+
+ assert.ok(archiveFileNames.length === 1, "Expected exactly one directory inside archive");
+
+ const archiveVersion = archiveFileNames[0]; // The top-level folder name includes the short SHA
+
+ core.info(`Resolved version ${archiveVersion}`);
+
+ const tempRepositoryPath = path.join(extractPath, archiveVersion);
+
+ // Move the files
+ for (const fileName of await fs.promises.readdir(tempRepositoryPath)) {
+ const sourcePath = path.join(tempRepositoryPath, fileName);
+ const targetPath = path.join(repositoryPath, fileName);
+
+ if (IS_WINDOWS) {
+ await fs.copy(sourcePath, targetPath); // Copy on Windows (Windows Defender may have a lock)
+ } else {
+ await fs.move(sourcePath, targetPath);
+ }
+ }
+
+ await fs.remove(extractPath);
+ },
+ };
}
- }
}
diff --git a/src/interfaces.ts b/src/interfaces.ts
index c1a4ba79..c11ebe6a 100644
--- a/src/interfaces.ts
+++ b/src/interfaces.ts
@@ -1,258 +1,238 @@
-import {URL} from 'url'
-import {RequestOptions, ResponseHeaders} from '@octokit/types'
+import { URL } from "url";
+import { RequestOptions, ResponseHeaders } from "@octokit/types";
export interface IPayloadRepository {
- full_name?: string
- name: string
- owner: {
- login: string
- name?: string
- }
+ full_name?: string;
+ name: string;
+ owner: {
+ login: string;
+ name?: string;
+ };
}
export interface IWebhookPayload {
- repository?: IPayloadRepository
+ repository?: IPayloadRepository;
}
export interface IGitCommandManager {
- init(): Promise
- checkGitVersion(): void
- fetch(fetchDepth: number, refSpec: string[]): Promise
- checkout(ref: string, startPoint: string): Promise
- sha(type: string): Promise
- addAll(): Promise
- commit(message: string): Promise
- push(ref: string): Promise
- status(args: string[]): Promise
- log1(): Promise
- config(
- configKey: string,
- configValue: string,
- globalConfig?: boolean
- ): Promise
- configExists(configKey: string, globalConfig?: boolean): Promise
- tryConfigUnset(configKey: string, globalConfig?: boolean): Promise
- getWorkingDirectory(): string
- setEnvironmentVariable(name: string, value: string): void
- removeEnvironmentVariable(name: string): void
- tryDisableAutomaticGarbageCollection(): Promise
- remoteAdd(remoteName: string, remoteUrl: string): Promise
- branchExists(remote: boolean, pattern: string): Promise
- tagExists(pattern: string): Promise
+ init(): Promise;
+ checkGitVersion(): void;
+ fetch(fetchDepth: number, refSpec: string[]): Promise;
+ checkout(ref: string, startPoint: string): Promise;
+ sha(type: string): Promise;
+ addAll(): Promise;
+ commit(message: string): Promise;
+ push(ref: string): Promise;
+ status(args: string[]): Promise;
+ log1(): Promise;
+ config(configKey: string, configValue: string, globalConfig?: boolean): Promise;
+ configExists(configKey: string, globalConfig?: boolean): Promise;
+ tryConfigUnset(configKey: string, globalConfig?: boolean): Promise;
+ getWorkingDirectory(): string;
+ setEnvironmentVariable(name: string, value: string): void;
+ removeEnvironmentVariable(name: string): void;
+ tryDisableAutomaticGarbageCollection(): Promise;
+ remoteAdd(remoteName: string, remoteUrl: string): Promise;
+ branchExists(remote: boolean, pattern: string): Promise;
+ tagExists(pattern: string): Promise;
}
export interface IGithubManagerBranch {
- create: (
- owner: string,
- repo: string,
- sha: string,
- syncBranch: string
- ) => Promise
- delete: (owner: string, repo: string, branch: string) => Promise
- get: (
- owner: string,
- repo: string,
- branch: string
- ) => Promise<{
- data: {
- ref: string
- node_id: string
- url: string
- object: {
- type: string
- sha: string
- url: string
- }
- }
- }>
- has: (owner: string, repo: string, branch: string) => Promise
+ create: (owner: string, repo: string, sha: string, syncBranch: string) => Promise;
+ delete: (owner: string, repo: string, branch: string) => Promise;
+ get: (
+ owner: string,
+ repo: string,
+ branch: string,
+ ) => Promise<{
+ data: {
+ ref: string;
+ node_id: string;
+ url: string;
+ object: {
+ type: string;
+ sha: string;
+ url: string;
+ };
+ };
+ }>;
+ has: (owner: string, repo: string, branch: string) => Promise;
}
export interface IGithubManagerPulls {
- create: (
- owner: string,
- repo: string,
- head: string,
- base: string,
- title: string,
- body: string
- ) => Promise
+ create: (owner: string, repo: string, head: string, base: string, title: string, body: string) => Promise;
}
export interface IGithubManagerRepos {
- get: (
- owner: string,
- repo: string
- // @ts-ignore
- ) => Promise<{
- data: {
- template_repository?: {
- full_name: string
- }
- }
- }>
- getArchiveLink: (owner: string, repo: string, ref: string) => Promise
- downloadRepository: (
- owner: string,
- repo: string,
- ref: string
- ) => Promise
+ get: (
+ owner: string,
+ repo: string,
+ // @ts-ignore
+ ) => Promise<{
+ data: {
+ template_repository?: {
+ full_name: string;
+ };
+ };
+ }>;
+ getArchiveLink: (owner: string, repo: string, ref: string) => Promise;
+ downloadRepository: (owner: string, repo: string, ref: string) => Promise;
}
export interface IGithubManager {
- branch: IGithubManagerBranch
- pulls: IGithubManagerPulls
- repos: IGithubManagerRepos
+ branch: IGithubManagerBranch;
+ pulls: IGithubManagerPulls;
+ repos: IGithubManagerRepos;
}
-export const DIFF_DELETE = -1
-export const DIFF_INSERT = 1
-export const DIFF_EQUAL = 0
+export const DIFF_DELETE = -1;
+export const DIFF_INSERT = 1;
+export const DIFF_EQUAL = 0;
export interface Filter {
- filePath: string
- filter: string
- strict: boolean
- count: number
- maxCount: number
+ filePath: string;
+ filter: string;
+ strict: boolean;
+ count: number;
+ maxCount: number;
}
export interface ISettings {
- /**
- * The auth token to use when fetching the repository.
- */
- authToken: string
-
- /**
- * The github api url.
- */
- apiUrl: string
-
- /**
- * The github url.
- */
- serverUrl: URL
-
- /**
- * The SSH key to configure.
- */
- sshKey: string
-
- /**
- * Additional SSH known hosts.
- */
- sshKnownHosts: string
-
- /**
- * Indicates whether the server must be a known host.
- */
- sshStrict: boolean
-
- /**
- * Indicates whether to persist the credentials on disk to enable scripting authenticated git commands.
- */
- persistCredentials: boolean
-
- /**
- * The author name and email for the commit message.
- */
- authorName: string
- authorEmail: string
-
- /**
- * Owner of the current repository.
- */
- repositoryOwner: string
-
- /**
- * The current repository name.
- */
- repositoryName: string
-
- /**
- * GitHub workspace.
- */
- githubWorkspacePath: string
-
- /**
- * The pr message.
- */
- messageHead: string
-
- /**
- * The pr message.
- */
- messageBody: string
-
- /**
- * The name of the ref you want the changes pulled into. This should be an existing ref on the current repository.
- * You cannot submit a pull request to one repository that requests a merge to a base of another repository.
- */
- ref: string
-
- /**
- * The ref name for the merge request.
- */
- syncBranchName: string
-
- /**
- * The template ref name, i most cases "master".
- */
- templateRepositoryRef: string
-
- /**
- * The template repository path {owner}/{repo}.
- */
- templateRepository: string
-
- /**
- * The full url tp the template repository.
- */
- templateRepositoryUrl: string
-
- /**
- * Path to the template repository folder.
- */
- templateRepositoryPath: string
-
- /**
- * List of ignored files and directories that that should be excluded from the template sync.
- */
- ignoreList: string[]
-
- clean: boolean
-
- /**
- * List of patch filters
- */
- filters: Filter[]
+ /**
+ * The auth token to use when fetching the repository.
+ */
+ authToken: string;
+
+ /**
+ * The github api url.
+ */
+ apiUrl: string;
+
+ /**
+ * The github url.
+ */
+ serverUrl: URL;
+
+ /**
+ * The SSH key to configure.
+ */
+ sshKey: string;
+
+ /**
+ * Additional SSH known hosts.
+ */
+ sshKnownHosts: string;
+
+ /**
+ * Indicates whether the server must be a known host.
+ */
+ sshStrict: boolean;
+
+ /**
+ * Indicates whether to persist the credentials on disk to enable scripting authenticated git commands.
+ */
+ persistCredentials: boolean;
+
+ /**
+ * The author name and email for the commit message.
+ */
+ authorName: string;
+ authorEmail: string;
+
+ /**
+ * Owner of the current repository.
+ */
+ repositoryOwner: string;
+
+ /**
+ * The current repository name.
+ */
+ repositoryName: string;
+
+ /**
+ * GitHub workspace.
+ */
+ githubWorkspacePath: string;
+
+ /**
+ * The pr message.
+ */
+ messageHead: string;
+
+ /**
+ * The pr message.
+ */
+ messageBody: string;
+
+ /**
+ * The name of the ref you want the changes pulled into. This should be an existing ref on the current repository.
+ * You cannot submit a pull request to one repository that requests a merge to a base of another repository.
+ */
+ ref: string;
+
+ /**
+ * The ref name for the merge request.
+ */
+ syncBranchName: string;
+
+ /**
+ * The template ref name, i most cases "master".
+ */
+ templateRepositoryRef: string;
+
+ /**
+ * The template repository path {owner}/{repo}.
+ */
+ templateRepository: string;
+
+ /**
+ * The full url tp the template repository.
+ */
+ templateRepositoryUrl: string;
+
+ /**
+ * Path to the template repository folder.
+ */
+ templateRepositoryPath: string;
+
+ /**
+ * List of ignored files and directories that that should be excluded from the template sync.
+ */
+ ignoreList: string[];
+
+ clean: boolean;
+
+ /**
+ * List of patch filters
+ */
+ filters: Filter[];
}
export interface IYamlSettings {
- filters?: {[key: string]: string}[]
- ignore_list?: string[]
+ filters?: { [key: string]: string }[];
+ ignore_list?: string[];
}
export interface OctokitHttpError extends Error {
- name: string
- /**
- * http status code
- */
- status: number
- /**
- * http status code
- *
- * @deprecated `error.code` is deprecated in favor of `error.status`
- */
- code: number
- /**
- * error response headers
- */
- headers: ResponseHeaders
- /**
- * Request options that lead to the error.
- */
- request: RequestOptions
+ name: string;
+ /**
+ * http status code
+ */
+ status: number;
+ /**
+ * http status code
+ *
+ * @deprecated `error.code` is deprecated in favor of `error.status`
+ */
+ code: number;
+ /**
+ * error response headers
+ */
+ headers: ResponseHeaders;
+ /**
+ * Request options that lead to the error.
+ */
+ request: RequestOptions;
}
export interface OctokitHttpError extends Error {
diff --git a/src/main.ts b/src/main.ts
index bd241f7a..64009576 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1,224 +1,186 @@
-import path from 'path'
-import * as core from '@actions/core'
-import * as coreCommand from '@actions/core/lib/command'
-import fs from 'fs-extra'
-import {inspect} from 'util'
-import {Settings} from './settings'
-import {GithubActionContext} from './github-action-context'
-import * as gitSourceProvider from './git-source-provider'
-import {GithubManager} from './github-manager'
-import {createCommandManager} from './git-command-manager'
-import {octokit} from './octokit'
-import * as stateHelper from './state-helper'
-import * as refHelper from './ref-helper'
-import {ISettings} from './interfaces'
-import {cleanup} from './github-action-cleanup'
-import {sync} from './sync'
-
-const USER_EMAIL = 'user.email'
-const USER_NAME = 'user.name'
+import path from "path";
+import * as core from "@actions/core";
+import * as coreCommand from "@actions/core/lib/command";
+import fs from "fs-extra";
+import { inspect } from "util";
+import { Settings } from "./settings";
+import { GithubActionContext } from "./github-action-context";
+import * as gitSourceProvider from "./git-source-provider";
+import { GithubManager } from "./github-manager";
+import { createCommandManager } from "./git-command-manager";
+import { octokit } from "./octokit";
+import * as stateHelper from "./state-helper";
+import * as refHelper from "./ref-helper";
+import { ISettings } from "./interfaces";
+import { cleanup } from "./github-action-cleanup";
+import { sync } from "./sync";
+
+const USER_EMAIL = "user.email";
+const USER_NAME = "user.name";
async function run(): Promise {
- try {
- const context = new GithubActionContext()
- let settings: ISettings = new Settings(context)
- const githubManager = new GithubManager(octokit(settings))
-
- settings = await prepareTemplateSettings(settings, githubManager)
-
- core.debug(`Used settings: ${inspect(settings)}`)
-
try {
- // Register problem matcher
- coreCommand.issueCommand(
- 'add-matcher',
- {},
- path.join(__dirname, 'problem-matcher.json')
- )
-
- if (
- !(await githubManager.branch.has(
- settings.repositoryOwner,
- settings.repositoryName,
- settings.syncBranchName
- ))
- ) {
- const baseBranch = await githubManager.branch.get(
- settings.repositoryOwner,
- settings.repositoryName,
- settings.ref.replace(/^refs\/heads\//, '')
- )
-
- await githubManager.branch.create(
- settings.repositoryOwner,
- settings.repositoryName,
- baseBranch.data.object.sha,
- settings.syncBranchName
- )
- }
-
- const mainGitCommandManager = await createCommandManager(
- settings.githubWorkspacePath
- )
- const ref = `refs/heads/${settings.syncBranchName}`
-
- await mainGitCommandManager.fetch(0, refHelper.getRefSpec(ref))
-
- const checkoutInfo = await refHelper.getCheckoutInfo(
- mainGitCommandManager,
- ref
- )
-
- await mainGitCommandManager.checkout(
- checkoutInfo.ref,
- checkoutInfo.startPoint
- )
-
- // download the template repo
- await gitSourceProvider.getSource(
- githubManager,
- settings,
- settings.templateRepositoryUrl,
- settings.templateRepositoryPath,
- settings.templateRepositoryRef
- )
-
- core.startGroup('Creating and applying patches for found files')
- await sync(settings)
-
- await fs.remove(settings.templateRepositoryPath)
- core.endGroup()
-
- try {
- core.startGroup('Setting up git user and email')
- await mainGitCommandManager.config(
- USER_EMAIL,
- settings.authorEmail,
- true
- )
- await mainGitCommandManager.config(USER_NAME, settings.authorName, true)
- core.endGroup()
-
- core.startGroup('Adding all changed files to main repository')
- await mainGitCommandManager.addAll()
- core.endGroup()
-
- core.startGroup('Checking if changes exist that needs to applied')
- if ((await mainGitCommandManager.status(['--porcelain'])) === '') {
- core.setOutput(
- 'Git status',
- `No changes found for ${settings.templateRepositoryUrl}`
- )
- process.exit(0) // there is currently no neutral exit code
+ const context = new GithubActionContext();
+ let settings: ISettings = new Settings(context);
+ const githubManager = new GithubManager(octokit(settings));
+
+ settings = await prepareTemplateSettings(settings, githubManager);
+
+ core.debug(`Used settings: ${inspect(settings)}`);
+
+ try {
+ // Register problem matcher
+ coreCommand.issueCommand("add-matcher", {}, path.join(__dirname, "problem-matcher.json"));
+
+ if (
+ !(await githubManager.branch.has(
+ settings.repositoryOwner,
+ settings.repositoryName,
+ settings.syncBranchName,
+ ))
+ ) {
+ const baseBranch = await githubManager.branch.get(
+ settings.repositoryOwner,
+ settings.repositoryName,
+ settings.ref.replace(/^refs\/heads\//, ""),
+ );
+
+ await githubManager.branch.create(
+ settings.repositoryOwner,
+ settings.repositoryName,
+ baseBranch.data.object.sha,
+ settings.syncBranchName,
+ );
+ }
+
+ const mainGitCommandManager = await createCommandManager(settings.githubWorkspacePath);
+ const ref = `refs/heads/${settings.syncBranchName}`;
+
+ await mainGitCommandManager.fetch(0, refHelper.getRefSpec(ref));
+
+ const checkoutInfo = await refHelper.getCheckoutInfo(mainGitCommandManager, ref);
+
+ await mainGitCommandManager.checkout(checkoutInfo.ref, checkoutInfo.startPoint);
+
+ // download the template repo
+ await gitSourceProvider.getSource(
+ githubManager,
+ settings,
+ settings.templateRepositoryUrl,
+ settings.templateRepositoryPath,
+ settings.templateRepositoryRef,
+ );
+
+ core.startGroup("Creating and applying patches for found files");
+ await sync(settings);
+
+ await fs.remove(settings.templateRepositoryPath);
+ core.endGroup();
+
+ try {
+ core.startGroup("Setting up git user and email");
+ await mainGitCommandManager.config(USER_EMAIL, settings.authorEmail, true);
+ await mainGitCommandManager.config(USER_NAME, settings.authorName, true);
+ core.endGroup();
+
+ core.startGroup("Adding all changed files to main repository");
+ await mainGitCommandManager.addAll();
+ core.endGroup();
+
+ core.startGroup("Checking if changes exist that needs to applied");
+ if ((await mainGitCommandManager.status(["--porcelain"])) === "") {
+ core.setOutput("Git status", `No changes found for ${settings.templateRepositoryUrl}`);
+ process.exit(0); // there is currently no neutral exit code
+ }
+ core.endGroup();
+
+ core.startGroup("Creating a commit");
+ await mainGitCommandManager.commit(settings.messageHead);
+ core.endGroup();
+
+ core.startGroup("Pushing new commit");
+ await mainGitCommandManager.push(settings.syncBranchName);
+ core.endGroup();
+
+ // Dump some info about the checked out commit
+ await mainGitCommandManager.log1();
+ } finally {
+ await mainGitCommandManager.tryConfigUnset(USER_EMAIL, true);
+ await mainGitCommandManager.tryConfigUnset(USER_NAME, true);
+ }
+
+ core.startGroup("Creating Pull request");
+ await githubManager.pulls.create(
+ settings.repositoryOwner,
+ settings.repositoryName,
+ settings.syncBranchName,
+ settings.ref,
+ settings.messageHead,
+ settings.messageBody,
+ );
+ core.endGroup();
+ } finally {
+ // Unregister problem matcher
+ coreCommand.issueCommand("remove-matcher", { owner: "checkout-git" }, "");
}
- core.endGroup()
-
- core.startGroup('Creating a commit')
- await mainGitCommandManager.commit(settings.messageHead)
- core.endGroup()
-
- core.startGroup('Pushing new commit')
- await mainGitCommandManager.push(settings.syncBranchName)
- core.endGroup()
-
- // Dump some info about the checked out commit
- await mainGitCommandManager.log1()
- } finally {
- await mainGitCommandManager.tryConfigUnset(USER_EMAIL, true)
- await mainGitCommandManager.tryConfigUnset(USER_NAME, true)
- }
-
- core.startGroup('Creating Pull request')
- await githubManager.pulls.create(
- settings.repositoryOwner,
- settings.repositoryName,
- settings.syncBranchName,
- settings.ref,
- settings.messageHead,
- settings.messageBody
- )
- core.endGroup()
- } finally {
- // Unregister problem matcher
- coreCommand.issueCommand('remove-matcher', {owner: 'checkout-git'}, '')
+ } catch (error) {
+ core.setFailed(error.message);
}
- } catch (error) {
- core.setFailed(error.message)
- }
}
-async function prepareTemplateSettings(
- settings: ISettings,
- githubManager: GithubManager
-): Promise {
- let template = core.getInput('template_repository', {required: false})
+async function prepareTemplateSettings(settings: ISettings, githubManager: GithubManager): Promise {
+ let template = core.getInput("template_repository", { required: false });
+
+ if (!template) {
+ const repoData = await githubManager.repos.get(settings.repositoryOwner, settings.repositoryName);
- if (!template) {
- const repoData = await githubManager.repos.get(
- settings.repositoryOwner,
- settings.repositoryName
- )
+ if (repoData.data.template_repository !== undefined) {
+ template = repoData.data.template_repository.full_name;
+ } else {
+ core.setFailed(
+ 'Template repository not found, please provide "template_repository" key, that you want to check',
+ );
- if (repoData.data.template_repository !== undefined) {
- template = repoData.data.template_repository.full_name
+ process.exit(1); // there is currently no neutral exit code
+ }
} else {
- core.setFailed(
- 'Template repository not found, please provide "template_repository" key, that you want to check'
- )
+ const [templateRepositoryOwner, templateRepositoryName] = template.split("/");
+ const repoData = await githubManager.repos.get(templateRepositoryOwner, templateRepositoryName);
+
+ if (repoData.data.template_repository === undefined) {
+ core.setFailed('You need to provide a github template repository for "template_repository"');
- process.exit(1) // there is currently no neutral exit code
+ process.exit(1); // there is currently no neutral exit code
+ }
}
- } else {
- const [templateRepositoryOwner, templateRepositoryName] = template.split(
- '/'
- )
- const repoData = await githubManager.repos.get(
- templateRepositoryOwner,
- templateRepositoryName
- )
-
- if (repoData.data.template_repository === undefined) {
- core.setFailed(
- 'You need to provide a github template repository for "template_repository"'
- )
-
- process.exit(1) // there is currently no neutral exit code
+
+ settings.templateRepository = template;
+
+ const [templateRepositoryOwner, templateRepositoryName] = template.split("/");
+
+ settings.templateRepositoryPath = path.resolve(
+ settings.githubWorkspacePath,
+ `${encodeURIComponent(templateRepositoryOwner)}/${encodeURIComponent(templateRepositoryName)}`,
+ );
+
+ if (!(settings.templateRepositoryPath + path.sep).startsWith(settings.githubWorkspacePath + path.sep)) {
+ throw new Error(
+ `Repository path '${settings.templateRepositoryPath}' is not under '${settings.githubWorkspacePath}'`,
+ );
}
- }
-
- settings.templateRepository = template
-
- const [templateRepositoryOwner, templateRepositoryName] = template.split('/')
-
- settings.templateRepositoryPath = path.resolve(
- settings.githubWorkspacePath,
- `${encodeURIComponent(templateRepositoryOwner)}/${encodeURIComponent(
- templateRepositoryName
- )}`
- )
-
- if (
- !(settings.templateRepositoryPath + path.sep).startsWith(
- settings.githubWorkspacePath + path.sep
- )
- ) {
- throw new Error(
- `Repository path '${settings.templateRepositoryPath}' is not under '${settings.githubWorkspacePath}'`
- )
- }
-
- if (settings.sshKey) {
- settings.templateRepositoryUrl = `git@${settings.serverUrl.hostname}:${settings.templateRepository}.git`
- } else {
- // "origin" is SCHEME://HOSTNAME[:PORT]
- settings.templateRepositoryUrl = `${settings.serverUrl.origin}/${settings.templateRepository}`
- }
-
- return settings
+
+ if (settings.sshKey) {
+ settings.templateRepositoryUrl = `git@${settings.serverUrl.hostname}:${settings.templateRepository}.git`;
+ } else {
+ // "origin" is SCHEME://HOSTNAME[:PORT]
+ settings.templateRepositoryUrl = `${settings.serverUrl.origin}/${settings.templateRepository}`;
+ }
+
+ return settings;
}
if (!stateHelper.IsPost) {
- run()
+ run();
} else {
- cleanup(stateHelper.TemplateRepositoryPath)
+ cleanup(stateHelper.TemplateRepositoryPath);
}
diff --git a/src/settings.ts b/src/settings.ts
index cf57794b..df02c6bb 100644
--- a/src/settings.ts
+++ b/src/settings.ts
@@ -1,11 +1,11 @@
-import * as core from '@actions/core'
-import {URL} from 'url'
-import path from 'path'
-import YAML from 'yaml'
-import fs from 'fs-extra'
-import {GithubActionContext} from './github-action-context'
-import {Filter, ISettings, IYamlSettings} from './interfaces'
-import {inspect} from 'util'
+import * as core from "@actions/core";
+import { URL } from "url";
+import path from "path";
+import YAML from "yaml";
+import fs from "fs-extra";
+import { GithubActionContext } from "./github-action-context";
+import { Filter, ISettings, IYamlSettings } from "./interfaces";
+import { inspect } from "util";
export class Settings implements ISettings {
settings: ISettings;
@@ -14,11 +14,11 @@ export class Settings implements ISettings {
const message =
"This pull request has been created by the [template sync action](https://github.com/narrowspark/template-sync-action) action.\n\nThis PR synchronizes with {0}\n\n---\n\n You can set a custom pull request title, body, ref and commit messages, see [Usage](https://github.com/narrowspark/template-sync-action#Usage).";
- let githubWorkspacePath = Settings.getGithubWorkspacePath()
+ let githubWorkspacePath = Settings.getGithubWorkspacePath();
- let {ignoreList, filters} = Settings.loadYamlSettings(
- path.join(githubWorkspacePath, '.github', 'template-sync-settings.yml')
- )
+ let { ignoreList, filters } = Settings.loadYamlSettings(
+ path.join(githubWorkspacePath, ".github", "template-sync-settings.yml"),
+ );
this.settings = {
authToken: core.getInput("github_token", { required: true }),
@@ -33,15 +33,15 @@ export class Settings implements ISettings {
authorName: core.getInput("git_author_name", { required: true }),
authorEmail: core.getInput("git_author_email", { required: true }),
- repositoryOwner: core.getInput('owner') || context.repo.owner,
- repositoryName: core.getInput('repo') || context.repo.repo,
- githubWorkspacePath,
+ repositoryOwner: core.getInput("owner") || context.repo.owner,
+ repositoryName: core.getInput("repo") || context.repo.repo,
+ githubWorkspacePath,
messageHead: core.getInput("pr_title") || 'Enhancement: Synchronize with "{0}"',
messageBody: core.getInput("pr_message") || message,
- ref: core.getInput('ref') || context.ref,
- syncBranchName: 'feature/template/sync/{0}',
+ ref: core.getInput("ref") || context.ref,
+ syncBranchName: "feature/template/sync/{0}",
templateRepositoryRef: core.getInput("template_ref") || "refs/heads/master",
templateRepository: "",
@@ -61,73 +61,63 @@ export class Settings implements ISettings {
clean: (core.getInput("clean") || "true").toUpperCase() === "TRUE",
};
}
- }
-
- public static getGithubWorkspacePath(): string {
- let githubWorkspacePath = process.env['GITHUB_WORKSPACE']
-
- if (!githubWorkspacePath) {
- throw new Error('GITHUB_WORKSPACE not defined')
- }
-
- githubWorkspacePath = path.resolve(githubWorkspacePath)
- core.debug(`GITHUB_WORKSPACE = '${githubWorkspacePath}'`)
+ public static getGithubWorkspacePath(): string {
+ let githubWorkspacePath = process.env["GITHUB_WORKSPACE"];
- return githubWorkspacePath
- }
+ if (!githubWorkspacePath) {
+ throw new Error("GITHUB_WORKSPACE not defined");
+ }
- public static loadYamlSettings(
- dotGithubPath: string
- ): {filters: Filter[]; ignoreList: string[]} {
- let ignoreList: string[] = []
- const filters: Filter[] = []
-
- try {
- const stats = fs.lstatSync(dotGithubPath)
-
- if (stats.isFile()) {
- const yamlSettings: IYamlSettings = YAML.parse(
- fs.readFileSync(dotGithubPath, 'utf8')
- )
- const yamlFilters = yamlSettings.filters || []
-
- yamlFilters.forEach(filter => {
- if (typeof filter === 'object' && filter !== null) {
- if (
- typeof filter.filepath !== 'undefined' &&
- typeof filter.filter !== 'undefined'
- ) {
- filters.push({
- filePath: filter.filepath,
- filter: filter.filter,
- strict: Boolean(filter.strict || false),
- count: 0,
- maxCount: filter.count || 1
- } as Filter)
- } else {
- core.info(
- `Please provide the correct syntax for ${inspect(
- filter
- )}; Check the readme of https://github.com/narrowspark/template-sync-action.`
- )
+ githubWorkspacePath = path.resolve(githubWorkspacePath);
+
+ core.debug(`GITHUB_WORKSPACE = '${githubWorkspacePath}'`);
+
+ return githubWorkspacePath;
+ }
+
+ public static loadYamlSettings(dotGithubPath: string): { filters: Filter[]; ignoreList: string[] } {
+ let ignoreList: string[] = [];
+ const filters: Filter[] = [];
+
+ try {
+ const stats = fs.lstatSync(dotGithubPath);
+
+ if (stats.isFile()) {
+ const yamlSettings: IYamlSettings = YAML.parse(fs.readFileSync(dotGithubPath, "utf8"));
+ const yamlFilters = yamlSettings.filters || [];
+
+ yamlFilters.forEach((filter) => {
+ if (typeof filter === "object" && filter !== null) {
+ if (typeof filter.filepath !== "undefined" && typeof filter.filter !== "undefined") {
+ filters.push({
+ filePath: filter.filepath,
+ filter: filter.filter,
+ strict: Boolean(filter.strict || false),
+ count: 0,
+ maxCount: filter.count || 1,
+ } as Filter);
+ } else {
+ core.info(
+ `Please provide the correct syntax for ${inspect(
+ filter,
+ )}; Check the readme of https://github.com/narrowspark/template-sync-action.`,
+ );
+ }
+ }
+ });
+
+ return {
+ ignoreList: (yamlSettings.ignore_list as string[]) || [],
+ filters,
+ };
}
- }
- })
-
- return {
- ignoreList: (yamlSettings.ignore_list as string[]) || [],
- filters
+ } catch (e) {
+ core.info(`No settings file found under ${dotGithubPath}, continue without it...`);
}
- }
- } catch (e) {
- core.info(
- `No settings file found under ${dotGithubPath}, continue without it...`
- )
- }
- return {ignoreList, filters}
- }
+ return { ignoreList, filters };
+ }
get authToken(): string {
return this.settings.authToken;
@@ -149,9 +139,9 @@ export class Settings implements ISettings {
return this.settings.repositoryName;
}
- get githubWorkspacePath(): string {
- return this.settings.githubWorkspacePath
- }
+ get githubWorkspacePath(): string {
+ return this.settings.githubWorkspacePath;
+ }
get authorEmail(): string {
return this.settings.authorEmail;
@@ -221,23 +211,23 @@ export class Settings implements ISettings {
return this.settings.persistCredentials;
}
- set ignoreList(ignoreList: string[]) {
- this.settings.ignoreList = ignoreList
- }
+ set ignoreList(ignoreList: string[]) {
+ this.settings.ignoreList = ignoreList;
+ }
- get ignoreList(): string[] {
- return this.settings.ignoreList
- }
+ get ignoreList(): string[] {
+ return this.settings.ignoreList;
+ }
- set filters(filters: Filter[]) {
- this.settings.filters = filters
- }
+ set filters(filters: Filter[]) {
+ this.settings.filters = filters;
+ }
- get filters(): Filter[] {
- return this.settings.filters
- }
+ get filters(): Filter[] {
+ return this.settings.filters;
+ }
- get clean(): boolean {
- return this.settings.clean
- }
+ get clean(): boolean {
+ return this.settings.clean;
+ }
}
diff --git a/src/sync.ts b/src/sync.ts
index 7dfb70a5..fb41e032 100644
--- a/src/sync.ts
+++ b/src/sync.ts
@@ -1,144 +1,108 @@
-import * as core from '@actions/core'
-import {inspect} from 'util'
-import path from 'path'
-import fs from 'fs-extra'
-import FileHound from 'filehound'
-import {Diff} from './diff/diff'
-import {DIFF_EQUAL, Filter, ISettings} from './interfaces'
-import DiffMatchPatch from './diff/diff-match-patch'
-import {diffLinesToWords} from './diff/diff-lines-to-words'
-import {diffCharsToLines} from './diff/diff-chars-to-lines'
-import {diffLinesToChars} from './diff/diff-lines-to-chars'
-
-const filehound = FileHound.create()
-const diff = new DiffMatchPatch()
+import * as core from "@actions/core";
+import { inspect } from "util";
+import path from "path";
+import fs from "fs-extra";
+import FileHound from "filehound";
+import { Diff } from "./diff/diff";
+import { DIFF_EQUAL, Filter, ISettings } from "./interfaces";
+import DiffMatchPatch from "./diff/diff-match-patch";
+import { diffLinesToWords } from "./diff/diff-lines-to-words";
+import { diffCharsToLines } from "./diff/diff-chars-to-lines";
+import { diffLinesToChars } from "./diff/diff-lines-to-chars";
+
+const filehound = FileHound.create();
+const diff = new DiffMatchPatch();
export const sync = async (settings: ISettings) => {
- const files: string[] = filehound
- .path(settings.templateRepositoryPath)
- .discard(settings.ignoreList)
- .findSync()
-
- core.debug(`List of found files ${inspect(files)}`)
-
- for (const file of files) {
- const coreFilePath = path.join(
- settings.githubWorkspacePath,
- file.replace(settings.templateRepositoryPath, '')
- )
-
- if (fs.pathExistsSync(coreFilePath)) {
- const coreFileContent = await fs.readFile(coreFilePath, 'utf8')
-
- let wordDiffs = diffLinesToChars(
- coreFileContent,
- await fs.readFile(file, 'utf8')
- )
-
- let diffs: null[] | Diff[] = diff.diff(
- wordDiffs.chars1,
- wordDiffs.chars2,
- false
- )
-
- diffCharsToLines(diffs, wordDiffs.lineArray)
-
- diff.diffCleanupSemantic(diffs)
-
- core.debug(`Diff list before filters are applied; ${inspect(diffs)}`)
-
- const filters: Filter[] = []
-
- settings.filters.forEach((filter: Filter) => {
- if (
- file.includes(
- path.resolve(
- path.join(settings.templateRepositoryPath, filter.filePath)
- )
- )
- ) {
- filters.push(filter)
- }
- })
+ const files: string[] = filehound.path(settings.templateRepositoryPath).discard(settings.ignoreList).findSync();
- core.debug(`Loaded filters ${inspect(filters)} for file ${file}.`)
+ core.debug(`List of found files ${inspect(files)}`);
- filters.forEach((filter: Filter) => {
- diffs.forEach(
- (d: null | Diff, index: number, objects: null[] | Diff[]) => {
- if (d === null) {
- return
- }
+ for (const file of files) {
+ const coreFilePath = path.join(settings.githubWorkspacePath, file.replace(settings.templateRepositoryPath, ""));
- if (filter.count < filter.maxCount) {
- let shouldRemove
-
- if (
- Object.prototype.toString.call(filter.filter) ===
- '[object RegExp]' &&
- d.text.trim().match(filter.filter) !== null
- ) {
- shouldRemove = true
- } else if (filter.strict) {
- shouldRemove = d.text.trim() === String(filter.filter).trim()
- } else {
- shouldRemove = d.text
- .trim()
- .includes(String(filter.filter).trim())
- }
-
- if (shouldRemove) {
- filter.count++
-
- const preIndex = index - 1
- let preDiff = objects[preIndex]
-
- if (
- typeof preDiff !== 'undefined' &&
- preDiff !== null &&
- preDiff.bind
- ) {
- preDiff.operation = DIFF_EQUAL
- preDiff.bind = false
-
- objects[preIndex] = preDiff
- }
+ if (fs.pathExistsSync(coreFilePath)) {
+ const coreFileContent = await fs.readFile(coreFilePath, "utf8");
+
+ let wordDiffs = diffLinesToChars(coreFileContent, await fs.readFile(file, "utf8"));
+
+ let diffs: null[] | Diff[] = diff.diff(wordDiffs.chars1, wordDiffs.chars2, false);
+
+ diffCharsToLines(diffs, wordDiffs.lineArray);
- objects[index] = null
- }
+ diff.diffCleanupSemantic(diffs);
+
+ core.debug(`Diff list before filters are applied; ${inspect(diffs)}`);
+
+ const filters: Filter[] = [];
+
+ settings.filters.forEach((filter: Filter) => {
+ if (file.includes(path.resolve(path.join(settings.templateRepositoryPath, filter.filePath)))) {
+ filters.push(filter);
+ }
+ });
+
+ core.debug(`Loaded filters ${inspect(filters)} for file ${file}.`);
+
+ filters.forEach((filter: Filter) => {
+ diffs.forEach((d: null | Diff, index: number, objects: null[] | Diff[]) => {
+ if (d === null) {
+ return;
+ }
+
+ if (filter.count < filter.maxCount) {
+ let shouldRemove;
+
+ if (
+ Object.prototype.toString.call(filter.filter) === "[object RegExp]" &&
+ d.text.trim().match(filter.filter) !== null
+ ) {
+ shouldRemove = true;
+ } else if (filter.strict) {
+ shouldRemove = d.text.trim() === String(filter.filter).trim();
+ } else {
+ shouldRemove = d.text.trim().includes(String(filter.filter).trim());
+ }
+
+ if (shouldRemove) {
+ filter.count++;
+
+ const preIndex = index - 1;
+ let preDiff = objects[preIndex];
+
+ if (typeof preDiff !== "undefined" && preDiff !== null && preDiff.bind) {
+ preDiff.operation = DIFF_EQUAL;
+ preDiff.bind = false;
+
+ objects[preIndex] = preDiff;
+ }
+
+ objects[index] = null;
+ }
+ }
+ });
+ });
+
+ diffs = diffs.filter(Boolean);
+
+ core.debug(`Diff list after filters are applied; ${inspect(diffs)}`);
+ console.log(diff.patchMake(diffs)[0].diffs);
+
+ if (diffs.length !== 0) {
+ const [text, results] = diff.patchApply(diff.patchMake(diffs), coreFileContent);
+
+ // @ts-ignore
+ if (results.includes(false)) {
+ core.error(`Failed to apply patch on ${coreFilePath}; ${inspect([text, results])}`);
+ console.log(text, results);
+ } else {
+ await fs.writeFile(coreFilePath, text);
+ }
}
- }
- )
- })
-
- diffs = diffs.filter(Boolean)
-
- core.debug(`Diff list after filters are applied; ${inspect(diffs)}`)
- console.log(diff.patchMake(diffs)[0].diffs)
-
- if (diffs.length !== 0) {
- const [text, results] = diff.patchApply(
- diff.patchMake(diffs),
- coreFileContent
- )
-
- // @ts-ignore
- if (results.includes(false)) {
- core.error(
- `Failed to apply patch on ${coreFilePath}; ${inspect([
- text,
- results
- ])}`
- )
- console.log(text, results)
} else {
- await fs.writeFile(coreFilePath, text)
+ await fs.copy(file, coreFilePath, {
+ overwrite: true,
+ });
}
- }
- } else {
- await fs.copy(file, coreFilePath, {
- overwrite: true
- })
}
- }
-}
+};
diff --git a/yarn.lock b/yarn.lock
index 4c1a2ff9..74b31486 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,12 +2,12 @@
# yarn lockfile v1
-"@actions/core@1.2.6", "@actions/core@^1.2.6":
+"@actions/core@^1.2.6":
version "1.2.6"
resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.2.6.tgz#a78d49f41a4def18e88ce47c2cac615d5694bf09"
integrity sha512-ZQYitnqiyBc3D+k7LsgSBmMDVkOVidaagDG7j3fOym77jNunWRuYx7VSHa9GNfFZh+zh61xsCjRj4JxMZlDqTA==
-"@actions/exec@1.0.4", "@actions/exec@^1.0.0":
+"@actions/exec@^1.0.0", "@actions/exec@^1.0.4":
version "1.0.4"
resolved "https://registry.yarnpkg.com/@actions/exec/-/exec-1.0.4.tgz#99d75310e62e59fc37d2ee6dcff6d4bffadd3a5d"
integrity sha512-4DPChWow9yc9W3WqEbUj8Nr86xkpyE29ZzWjXucHItclLbEW6jr80Zx4nqv18QL6KK65+cifiQZXvnqgTV6oHw==
@@ -21,12 +21,12 @@
dependencies:
tunnel "0.0.6"
-"@actions/io@1.0.2", "@actions/io@^1.0.1":
+"@actions/io@^1.0.1":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@actions/io/-/io-1.0.2.tgz#2f614b6e69ce14d191180451eb38e6576a6e6b27"
integrity sha512-J8KuFqVPr3p6U8W93DOXlXW6zFvrQAJANdS+vw0YhusLIq+bszW8zmK2Fh1C2kDPX8FMvwIl1OUcFgvJoXLbAg==
-"@actions/tool-cache@1.6.1":
+"@actions/tool-cache@^1.6.1":
version "1.6.1"
resolved "https://registry.yarnpkg.com/@actions/tool-cache/-/tool-cache-1.6.1.tgz#5e199f7bfd9863eb2b0d467cd70751ef8042ec40"
integrity sha512-F+vwEDwfqcHMKuSkj79pihOnsAMv23EkG76nMpc82UsnXwyQdyEsktGxrB0SNtm7pRqTXEIOoAPTgrSQclXYTg==
@@ -484,6 +484,154 @@
exec-sh "^0.3.2"
minimist "^1.2.0"
+"@commitlint/cli@^12.0.0":
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-12.0.0.tgz#bd389db0718aa4a7dfb515ea890776223ea0c60f"
+ integrity sha512-9jxKu6PmBUeQIbSD7olsv8wSqFnFsGwKMN9sL5T1d5YZDCocFMgfeyDGtOwuiATsox7Mje+NucQ4zU1y0530Dw==
+ dependencies:
+ "@commitlint/format" "^12.0.0"
+ "@commitlint/lint" "^12.0.0"
+ "@commitlint/load" "^12.0.0"
+ "@commitlint/read" "^12.0.0"
+ "@commitlint/types" "^12.0.0"
+ get-stdin "8.0.0"
+ lodash "^4.17.19"
+ resolve-from "5.0.0"
+ resolve-global "1.0.0"
+ yargs "^16.0.0"
+
+"@commitlint/config-conventional@^12.0.0":
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-12.0.0.tgz#3244957b87b92dc2f4feb46059cdeb950783198f"
+ integrity sha512-zjTeCBlHEP0syW6QedRSxOiafYeuOol9vIXZ89uhKMhyejaKxdAnS3SBMN4fYiSFChsZEl+VshJeZDtUFkCd7Q==
+ dependencies:
+ conventional-changelog-conventionalcommits "^4.3.1"
+
+"@commitlint/core@^12.0.0":
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/core/-/core-12.0.0.tgz#6b61863ccb7dae3bf68e2cf5d39b676374cad677"
+ integrity sha512-GnUfrUtvsk+1ZU4xldXCqhcOd7APjs6JZW8qUSJO9keug2larFAa5xOw9E1f0VrHq6o8IEK8uBJ6w/yVHBAvRQ==
+ dependencies:
+ "@commitlint/format" "^12.0.0"
+ "@commitlint/lint" "^12.0.0"
+ "@commitlint/load" "^12.0.0"
+ "@commitlint/read" "^12.0.0"
+
+"@commitlint/ensure@^12.0.0":
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-12.0.0.tgz#a019bd4f4a2ea81ca3883d5f9c13bf70e786ff7f"
+ integrity sha512-xTPjd2cw8WOLtcrp5C3S+GtmGzA+TJjlNwqgYP61jmitLiDsTs69qNcysR9vPTyIjA1EQio4iff1bpAoilTbcg==
+ dependencies:
+ "@commitlint/types" "^12.0.0"
+ lodash "^4.17.19"
+
+"@commitlint/execute-rule@^12.0.0":
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-12.0.0.tgz#4469e0c606f523d6b92e395b0fdb0701e7aa6334"
+ integrity sha512-X9vZDKdyOz8MNDZqJN39K9UbjQmMsyQ74d1lUaw0QuCE4jOesmynYkLc4Y4MWKqq9ElWdjswZyLMyOgm3kAMrg==
+
+"@commitlint/format@^12.0.0":
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-12.0.0.tgz#d364c631aa35aa84f32a8afa8218a0da9f7a2ba6"
+ integrity sha512-otQHHx1KtT7UlO8igYeqxfatVFni6T8Nq8OPhwUHGrp8VYMorFSKUWrVpDtPtTAzRBj7e/ZtxCUOWck9Lwm7ug==
+ dependencies:
+ "@commitlint/types" "^12.0.0"
+ chalk "^4.0.0"
+
+"@commitlint/is-ignored@^12.0.0":
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-12.0.0.tgz#94ec9a2995f7fb35bb197c755796fa0eafa2ae09"
+ integrity sha512-jo1/ee0Ly8ySG+FvAWPFq2Bt4Xdx7tyDDnwuclDw1yatv9Tu7CVSN4ae9FNiU2dVLzqIoIxCFwu9YMaMmnT+Lg==
+ dependencies:
+ "@commitlint/types" "^12.0.0"
+ semver "7.3.4"
+
+"@commitlint/lint@^12.0.0":
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-12.0.0.tgz#6c05432beeb45202eaecbf0366807397d46ad984"
+ integrity sha512-/qPhiMBoAiaBmirxQKEf8iRy2B/PvU7xgNfRI4Gy5X9hx3xRwzZHVDTs6YjTZVRCD/9i6C8ZDMUuEM5Fk0pRyQ==
+ dependencies:
+ "@commitlint/is-ignored" "^12.0.0"
+ "@commitlint/parse" "^12.0.0"
+ "@commitlint/rules" "^12.0.0"
+ "@commitlint/types" "^12.0.0"
+
+"@commitlint/load@>6.1.1", "@commitlint/load@^12.0.0":
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-12.0.0.tgz#d0cd58bd6c3f5184ae542b6fbcdea37c5c671e32"
+ integrity sha512-B7rwRGWE3j+4dWsLD4s82fIbIJP1xGOJYfAvKDWOa/FnAb8s8ZQOK8HHuDC8BD/MU3Ierl8KJMfzGiO63d1rlA==
+ dependencies:
+ "@commitlint/execute-rule" "^12.0.0"
+ "@commitlint/resolve-extends" "^12.0.0"
+ "@commitlint/types" "^12.0.0"
+ chalk "^4.0.0"
+ cosmiconfig "^7.0.0"
+ lodash "^4.17.19"
+ resolve-from "^5.0.0"
+
+"@commitlint/message@^12.0.0":
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-12.0.0.tgz#37587f487961e89e13ef0fe90ba66ca91b901a1e"
+ integrity sha512-jSyL6Po/IsYin6OGoeazcUDkxTYW4l83c2HiUoBKLYgvzMLyCy5jrW/ijKXK6hC/9A0nY00Zdi4iY7pA0gNSuA==
+
+"@commitlint/parse@^12.0.0":
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-12.0.0.tgz#e4d1ba1333c6c41ad9d1c1d2469b7c378ed36a52"
+ integrity sha512-CcSNSwQlKTJtnPPaGlKrClV4wOPUKH5fZ2AE+M+QQlTcp5IchgASzpqwPjMaeeP5FwnBiDZ98AtV9ZqqkKy2kg==
+ dependencies:
+ "@commitlint/types" "^12.0.0"
+ conventional-changelog-angular "^5.0.11"
+ conventional-commits-parser "^3.0.0"
+
+"@commitlint/read@^12.0.0":
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-12.0.0.tgz#556894663614b1a22156673250e517be18f657c6"
+ integrity sha512-xOply23eCsbIvqXMkrjrxhryClBu6rRPhEVxahihhcNQ2x9SskHTlEr3o6BljqCWfIxNNZL9s2TVqkOjEmkskw==
+ dependencies:
+ "@commitlint/top-level" "^12.0.0"
+ "@commitlint/types" "^12.0.0"
+ fs-extra "^9.0.0"
+ git-raw-commits "^2.0.0"
+
+"@commitlint/resolve-extends@^12.0.0":
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-12.0.0.tgz#78b5c53c9b3ab496095b5ff612a5e6693f32250c"
+ integrity sha512-5i0ZieVFzXuRqyYxnoEJ7InYyXQC/K98nF75Ro6wVQqpmzi01/KHYwo8uCcy1Q+rPB48FSmCB84br0t5Ulr/KA==
+ dependencies:
+ import-fresh "^3.0.0"
+ lodash "^4.17.19"
+ resolve-from "^5.0.0"
+ resolve-global "^1.0.0"
+
+"@commitlint/rules@^12.0.0":
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-12.0.0.tgz#81bfb00adbd9a4c876be40f30eaf8dd5938a5a41"
+ integrity sha512-VO9UqtivXRMko7GpgUOkKSixWuihKxJYmLBrcdw5TcPD8Ott0wgFGWE65n67wTfikW7aLZLzGiybuopZHIdP/w==
+ dependencies:
+ "@commitlint/ensure" "^12.0.0"
+ "@commitlint/message" "^12.0.0"
+ "@commitlint/to-lines" "^12.0.0"
+ "@commitlint/types" "^12.0.0"
+
+"@commitlint/to-lines@^12.0.0":
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-12.0.0.tgz#b015bf50ae4e652e8254c145329072723a88e070"
+ integrity sha512-hRZQTDkBUA7eDDlvbRLrXl/HRK3yA6Cbnd+TvxDc79MlsMH5affLtDfdJICE8SSkN2AFxIzHcSysBPxJvSvcKQ==
+
+"@commitlint/top-level@^12.0.0":
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-12.0.0.tgz#9076da970d3c44df3a83051405f4e6841a35cc37"
+ integrity sha512-Y7UfYZyi0q+jj0Yh81HVtTvstupVh6b+a7eUnSvmAWyDdMRfVBoE2hjuT6DY3W2xv1xuJ4DUHJu64BUr6FOkMQ==
+ dependencies:
+ find-up "^5.0.0"
+
+"@commitlint/types@^12.0.0":
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-12.0.0.tgz#c7f27b87e3ceac08a9b8a6f200054709c2a64271"
+ integrity sha512-ADW/GEwDdgf7ppNq+S2T8J6XgATi2yndXddu+ZV8wlHFpL1DhjPbuPA9RYLnJcp44xQSe/cEV7a7Z43Ryy1S9Q==
+ dependencies:
+ chalk "^4.0.0"
+
"@emotion/cache@^10.0.27":
version "10.0.29"
resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0"
@@ -827,7 +975,7 @@
"@nodelib/fs.scandir" "2.1.4"
fastq "^1.6.0"
-"@octokit/action@3.4.0":
+"@octokit/action@^3.4.0":
version "3.4.0"
resolved "https://registry.yarnpkg.com/@octokit/action/-/action-3.4.0.tgz#f406c215e542f74f09e35b9ce70993c7ea65a709"
integrity sha512-ZbcmFDlss2Xae1ghHdA9Gp4EOt6schF0LlT0d/6ZVvR67WTP/K3pM35lDUboVOVlNPLyjwuSFY2Tnag1yqjztg==
@@ -853,7 +1001,7 @@
dependencies:
"@octokit/types" "^6.0.3"
-"@octokit/core@^3.0.0":
+"@octokit/core@^3.0.0", "@octokit/core@^3.2.5":
version "3.2.5"
resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.2.5.tgz#57becbd5fd789b0592b915840855f3a5f233d554"
integrity sha512-+DCtPykGnvXKWWQI0E1XD+CCeWSBhB6kwItXqfFmNBlIlhczuDPbg+P6BtLnVBaRJDAjv+1mrUJuRsFSjktopg==
@@ -874,7 +1022,7 @@
is-plain-object "^5.0.0"
universal-user-agent "^6.0.0"
-"@octokit/fixtures@21.3.5":
+"@octokit/fixtures@^21.3.5":
version "21.3.5"
resolved "https://registry.yarnpkg.com/@octokit/fixtures/-/fixtures-21.3.5.tgz#3ee67831e31980cec0100f68d348f4e4403d4541"
integrity sha512-bR7YkGXGZiAIlO7MUtX4CO7eEAdHPJS9RReELhpeshO7sJchn098m7Vx6XRxpoMmxs0XtGvGx81jhAABb0VY0Q==
@@ -913,7 +1061,7 @@
"@octokit/types" "^6.10.0"
deprecation "^2.3.1"
-"@octokit/plugin-retry@3.0.7":
+"@octokit/plugin-retry@^3.0.7":
version "3.0.7"
resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-3.0.7.tgz#174516f2b80b7140aee71ebc2b506db2c5c1d3d6"
integrity sha512-n08BPfVeKj5wnyH7IaOWnuKbx+e9rSJkhDHMJWXLPv61625uWjsN8G7sAW3zWm9n9vnS4friE7LL/XLcyGeG8Q==
@@ -944,7 +1092,7 @@
once "^1.4.0"
universal-user-agent "^6.0.0"
-"@octokit/types@6.10.0", "@octokit/types@^6.0.3", "@octokit/types@^6.10.0", "@octokit/types@^6.7.1":
+"@octokit/types@^6.0.3", "@octokit/types@^6.10.0", "@octokit/types@^6.7.1":
version "6.10.0"
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.10.0.tgz#243faa864b0955f574012d52e179de38ac9ebafe"
integrity sha512-aMDo10kglofejJ96edCBIgQLVuzMDyjxmhdgEcoUUD64PlHYSrNsAGqN0wZtoiX4/PCQ3JLA50IpkP1bcKD/cA==
@@ -1479,12 +1627,17 @@
dependencies:
"@babel/types" "^7.3.0"
-"@types/bluebird@3.5.33":
+"@types/bluebird@^3.5.33":
version "3.5.33"
resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.33.tgz#d79c020f283bd50bd76101d7d300313c107325fc"
integrity sha512-ndEo1xvnYeHxm7I/5sF6tBvnsA4Tdi3zj1keRKRs12SP+2ye2A27NDJ1B6PqkfMbGAcT+mqQVqbZRIrhfOp5PQ==
-"@types/fs-extra@9.0.7":
+"@types/diff@^5.0.0":
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/@types/diff/-/diff-5.0.0.tgz#eb71e94feae62548282c4889308a3dfb57e36020"
+ integrity sha512-jrm2K65CokCCX4NmowtA+MfXyuprZC13jbRuwprs6/04z/EcFg/MCwYdsHn+zgV4CQBiATiI7AEq7y1sZCtWKA==
+
+"@types/fs-extra@^9.0.7":
version "9.0.7"
resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.7.tgz#a9ef2ffdab043def080c5bec94c03402f793577f"
integrity sha512-YGq2A6Yc3bldrLUlm17VNWOnUbnEzJ9CMgOeLFtQF3HOCN5lQBO8VyjG00a5acA5NNSM30kHVGp1trZgnVgi1Q==
@@ -1524,7 +1677,7 @@
dependencies:
"@types/istanbul-lib-report" "*"
-"@types/jest@26.0.20", "@types/jest@26.x":
+"@types/jest@26.x", "@types/jest@^26.0.20":
version "26.0.20"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.20.tgz#cd2f2702ecf69e86b586e1f5223a60e454056307"
integrity sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA==
@@ -1532,7 +1685,7 @@
jest-diff "^26.0.0"
pretty-format "^26.0.0"
-"@types/js-yaml@4.0.0":
+"@types/js-yaml@^4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.0.tgz#d1a11688112091f2c711674df3a65ea2f47b5dfb"
integrity sha512-4vlpCM5KPCL5CfGmTbpjwVKbISRYhduEJvvUWsH5EB7QInhEj94XPZ3ts/9FPiLZFqYO0xoW4ZL8z2AabTGgJA==
@@ -1552,16 +1705,11 @@
resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256"
integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==
-"@types/node@*":
+"@types/node@*", "@types/node@^14.14.31":
version "14.14.31"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.31.tgz#72286bd33d137aa0d152d47ec7c1762563d34055"
integrity sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==
-"@types/node@12.12.70":
- version "12.12.70"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.70.tgz#adf70b179c3ee17620215ee4cb5c68c95f7c37ec"
- integrity sha512-i5y7HTbvhonZQE+GnUM2rz1Bi8QkzxdQmEv1LKOv4nWyaQk/gdeiTApuQR3PDJHX7WomAbpx2wlWSEpxXGZ/UQ==
-
"@types/normalize-package-data@^2.4.0":
version "2.4.0"
resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
@@ -1582,7 +1730,7 @@
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.1.tgz#374e31645d58cb18a07b3ecd8e9dede4deb2cccd"
integrity sha512-DxZZbyMAM9GWEzXL+BMZROWz9oo6A9EilwwOMET2UVu2uZTqMWS5S69KVtuVKaRjCUpcrOXRalet86/OpG4kqw==
-"@types/promise-retry@1.1.3":
+"@types/promise-retry@^1.1.3":
version "1.1.3"
resolved "https://registry.yarnpkg.com/@types/promise-retry/-/promise-retry-1.1.3.tgz#baab427419da9088a1d2f21bf56249c21b3dd43c"
integrity sha512-LxIlEpEX6frE3co3vCO2EUJfHIta1IOmhDlcAsR4GMMv9hev1iTI9VwberVGkePJAuLZs5rMucrV8CziCfuJMw==
@@ -1599,16 +1747,26 @@
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff"
integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==
+"@types/tmp@^0.2.0":
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.0.tgz#e3f52b4d7397eaa9193592ef3fdd44dc0af4298c"
+ integrity sha512-flgpHJjntpBAdJD43ShRosQvNC0ME97DCfGvZEDlAThQmnerRXrLbX6YgzRBQCZTthET9eAWFAMaYP0m0Y4HzQ==
+
"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2":
version "2.0.3"
resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==
-"@types/uuid@8.3.0":
+"@types/uuid@^8.3.0":
version "8.3.0"
resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.0.tgz#215c231dff736d5ba92410e6d602050cce7e273f"
integrity sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==
+"@types/which@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/which/-/which-2.0.0.tgz#446d35586611dee657120de8e0457382a658fc25"
+ integrity sha512-JHTNOEpZnACQdsTojWggn+SQ8IucfqEhtz7g8Z0G67WdSj4x3F0X5I2c/CVcl8z/QukGrIHeQ/N49v1au74XFQ==
+
"@types/yargs-parser@*":
version "20.2.0"
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9"
@@ -1621,7 +1779,21 @@
dependencies:
"@types/yargs-parser" "*"
-"@typescript-eslint/eslint-plugin@4.15.1", "@typescript-eslint/eslint-plugin@^4.14.2":
+"@typescript-eslint/eslint-plugin@>=2.25.0":
+ version "4.15.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.2.tgz#981b26b4076c62a5a55873fbef3fe98f83360c61"
+ integrity sha512-uiQQeu9tWl3f1+oK0yoAv9lt/KXO24iafxgQTkIYO/kitruILGx3uH+QtIAHqxFV+yIsdnJH+alel9KuE3J15Q==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "4.15.2"
+ "@typescript-eslint/scope-manager" "4.15.2"
+ 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/eslint-plugin@^4.14.2":
version "4.15.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.1.tgz#835f64aa0a403e5e9e64c10ceaf8d05c3f015180"
integrity sha512-yW2epMYZSpNJXZy22Biu+fLdTG8Mn6b22kR3TqblVk50HGNV8Zya15WAXuQCr8tKw4Qf1BL4QtI6kv6PCkLoJw==
@@ -1647,6 +1819,18 @@
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
+"@typescript-eslint/experimental-utils@4.15.2":
+ version "4.15.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.2.tgz#5efd12355bd5b535e1831282e6cf465b9a71cf36"
+ integrity sha512-Fxoshw8+R5X3/Vmqwsjc8nRO/7iTysRtDqx6rlfLZ7HbT8TZhPeQqbPjTyk2RheH3L8afumecTQnUc9EeXxohQ==
+ dependencies:
+ "@types/json-schema" "^7.0.3"
+ "@typescript-eslint/scope-manager" "4.15.2"
+ "@typescript-eslint/types" "4.15.2"
+ "@typescript-eslint/typescript-estree" "4.15.2"
+ eslint-scope "^5.0.0"
+ eslint-utils "^2.0.0"
+
"@typescript-eslint/experimental-utils@^2.32.0":
version "2.34.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f"
@@ -1668,7 +1852,17 @@
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
-"@typescript-eslint/parser@4.15.1", "@typescript-eslint/parser@^4.14.2":
+"@typescript-eslint/parser@>=2.25.0", "@typescript-eslint/parser@^4.15.2":
+ version "4.15.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.15.2.tgz#c804474321ef76a3955aec03664808f0d6e7872e"
+ integrity sha512-SHeF8xbsC6z2FKXsaTb1tBCf0QZsjJ94H6Bo51Y1aVEZ4XAefaw5ZAilMoDPlGghe+qtq7XdTiDlGfVTOmvA+Q==
+ dependencies:
+ "@typescript-eslint/scope-manager" "4.15.2"
+ "@typescript-eslint/types" "4.15.2"
+ "@typescript-eslint/typescript-estree" "4.15.2"
+ debug "^4.1.1"
+
+"@typescript-eslint/parser@^4.14.2":
version "4.15.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.15.1.tgz#4c91a0602733db63507e1dbf13187d6c71a153c4"
integrity sha512-V8eXYxNJ9QmXi5ETDguB7O9diAXlIyS+e3xzLoP/oVE4WCAjssxLIa0mqCLsCGXulYJUfT+GV70Jv1vHsdKwtA==
@@ -1686,6 +1880,14 @@
"@typescript-eslint/types" "4.15.1"
"@typescript-eslint/visitor-keys" "4.15.1"
+"@typescript-eslint/scope-manager@4.15.2":
+ version "4.15.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.15.2.tgz#5725bda656995960ae1d004bfd1cd70320f37f4f"
+ integrity sha512-Zm0tf/MSKuX6aeJmuXexgdVyxT9/oJJhaCkijv0DvJVT3ui4zY6XYd6iwIo/8GEZGy43cd7w1rFMiCLHbRzAPQ==
+ dependencies:
+ "@typescript-eslint/types" "4.15.2"
+ "@typescript-eslint/visitor-keys" "4.15.2"
+
"@typescript-eslint/types@3.10.1":
version "3.10.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727"
@@ -1696,6 +1898,11 @@
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.15.1.tgz#da702f544ef1afae4bc98da699eaecd49cf31c8c"
integrity sha512-iGsaUyWFyLz0mHfXhX4zO6P7O3sExQpBJ2dgXB0G5g/8PRVfBBsmQIc3r83ranEQTALLR3Vko/fnCIVqmH+mPw==
+"@typescript-eslint/types@4.15.2":
+ version "4.15.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.15.2.tgz#04acf3a2dc8001a88985291744241e732ef22c60"
+ integrity sha512-r7lW7HFkAarfUylJ2tKndyO9njwSyoy6cpfDKWPX6/ctZA+QyaYscAHXVAfJqtnY6aaTwDYrOhp+ginlbc7HfQ==
+
"@typescript-eslint/typescript-estree@2.34.0":
version "2.34.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5"
@@ -1736,6 +1943,19 @@
semver "^7.3.2"
tsutils "^3.17.1"
+"@typescript-eslint/typescript-estree@4.15.2":
+ version "4.15.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.2.tgz#c2f7a1e94f3428d229d5ecff3ead6581ee9b62fa"
+ integrity sha512-cGR8C2g5SPtHTQvAymEODeqx90pJHadWsgTtx6GbnTWKqsg7yp6Eaya9nFzUd4KrKhxdYTTFBiYeTPQaz/l8bw==
+ dependencies:
+ "@typescript-eslint/types" "4.15.2"
+ "@typescript-eslint/visitor-keys" "4.15.2"
+ 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@3.10.1":
version "3.10.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931"
@@ -1751,11 +1971,27 @@
"@typescript-eslint/types" "4.15.1"
eslint-visitor-keys "^2.0.0"
-"@zeit/ncc@0.22.3":
+"@typescript-eslint/visitor-keys@4.15.2":
+ version "4.15.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.2.tgz#3d1c7979ce75bf6acf9691109bd0d6b5706192b9"
+ integrity sha512-TME1VgSb7wTwgENN5KVj4Nqg25hP8DisXxNBojM4Nn31rYaNDIocNm5cmjOFfh42n7NVERxWrDFoETO/76ePyg==
+ dependencies:
+ "@typescript-eslint/types" "4.15.2"
+ eslint-visitor-keys "^2.0.0"
+
+"@zeit/ncc@^0.22.1":
version "0.22.3"
resolved "https://registry.yarnpkg.com/@zeit/ncc/-/ncc-0.22.3.tgz#fca6b86b4454ce7a7e1e7e755165ec06457f16cd"
integrity sha512-jnCLpLXWuw/PAiJiVbLjA8WBC0IJQbFeUwF4I9M+23MvIxTxk5pD4Q8byQBSPmHQjz5aBoA7AKAElQxMpjrCLQ==
+JSONStream@^1.0.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
+ integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
+ dependencies:
+ jsonparse "^1.2.0"
+ through ">=2.2.7 <3"
+
abab@^2.0.3:
version "2.0.5"
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
@@ -1863,6 +2099,11 @@ ansi-colors@^4.1.1:
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
+ansi-escapes@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
+ integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+
ansi-escapes@^4.2.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
@@ -1960,6 +2201,11 @@ arr-union@^3.1.0:
resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+array-ify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece"
+ integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=
+
array-includes@^3.1.1, array-includes@^3.1.2:
version "3.1.3"
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a"
@@ -2344,6 +2590,11 @@ cacheable-request@^6.0.0:
normalize-url "^4.1.0"
responselike "^1.0.2"
+cachedir@2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.2.0.tgz#19afa4305e05d79e417566882e0c8f960f62ff0e"
+ integrity sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ==
+
call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
@@ -2409,7 +2660,7 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
-chalk@^2.0.0:
+chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -2459,6 +2710,11 @@ character-reference-invalid@^1.0.0:
resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560"
integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==
+chardet@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+ integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+
charenc@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
@@ -2508,6 +2764,18 @@ cli-color@~0.1.6:
dependencies:
es5-ext "0.8.x"
+cli-cursor@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+ integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+ dependencies:
+ restore-cursor "^2.0.0"
+
+cli-width@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
+ integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
+
cliui@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
@@ -2517,6 +2785,15 @@ cliui@^6.0.0:
strip-ansi "^6.0.0"
wrap-ansi "^6.2.0"
+cliui@^7.0.2:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
+ integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^7.0.0"
+
clone-regexp@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-1.0.1.tgz#051805cd33173375d82118fc0918606da39fd60f"
@@ -2611,6 +2888,34 @@ comment-parser@1.1.2:
resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.1.2.tgz#e5317d7a2ec22b470dcb54a29b25426c30bf39d8"
integrity sha512-AOdq0i8ghZudnYv8RUnHrhTgafUGs61Rdz9jemU5x2lnZwAWyOq7vySo626K59e1fVKH1xSRorJwPVRLSWOoAQ==
+commitizen@^4.0.3:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-4.2.3.tgz#088d0ef72500240d331b11e02e288223667c1475"
+ integrity sha512-pYlYEng7XMV2TW4xtjDKBGqeJ0Teq2zyRSx2S3Ml1XAplHSlJZK8vm1KdGclpMEZuGafbS5TeHXIVnHk8RWIzQ==
+ dependencies:
+ cachedir "2.2.0"
+ cz-conventional-changelog "3.2.0"
+ dedent "0.7.0"
+ detect-indent "6.0.0"
+ find-node-modules "2.0.0"
+ find-root "1.1.0"
+ fs-extra "8.1.0"
+ glob "7.1.4"
+ inquirer "6.5.2"
+ is-utf8 "^0.2.1"
+ lodash "^4.17.20"
+ minimist "1.2.5"
+ strip-bom "4.0.0"
+ strip-json-comments "3.0.1"
+
+compare-func@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3"
+ integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==
+ dependencies:
+ array-ify "^1.0.0"
+ dot-prop "^5.1.0"
+
component-emitter@^1.2.1:
version "1.3.0"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
@@ -2663,6 +2968,41 @@ contains-path@^0.1.0:
resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
+conventional-changelog-angular@^5.0.11:
+ version "5.0.12"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9"
+ integrity sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==
+ dependencies:
+ compare-func "^2.0.0"
+ q "^1.5.1"
+
+conventional-changelog-conventionalcommits@^4.3.1, conventional-changelog-conventionalcommits@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.5.0.tgz#a02e0b06d11d342fdc0f00c91d78265ed0bc0a62"
+ integrity sha512-buge9xDvjjOxJlyxUnar/+6i/aVEVGA7EEh4OafBCXPlLUQPGbRUBhBUveWRxzvR8TEjhKEP4BdepnpG2FSZXw==
+ dependencies:
+ compare-func "^2.0.0"
+ lodash "^4.17.15"
+ q "^1.5.1"
+
+conventional-commit-types@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b"
+ integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==
+
+conventional-commits-parser@^3.0.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz#ba44f0b3b6588da2ee9fd8da508ebff50d116ce2"
+ integrity sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==
+ dependencies:
+ JSONStream "^1.0.4"
+ is-text-path "^1.0.1"
+ lodash "^4.17.15"
+ meow "^8.0.0"
+ split2 "^3.0.0"
+ through2 "^4.0.0"
+ trim-off-newlines "^1.0.0"
+
convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
@@ -2769,11 +3109,44 @@ cuss@^1.15.0:
resolved "https://registry.yarnpkg.com/cuss/-/cuss-1.21.0.tgz#1aba3bb911fadda8566855ed036295af8116be40"
integrity sha512-X3VvImImJ5q6w0wOgJtxAX+RC06d26egp/A/vdSxqOrsRtAA9biXAkc4PZGj/3gx0+z+gDFri6BpcpwuG1/UEw==
+cz-conventional-changelog@3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-3.2.0.tgz#6aef1f892d64113343d7e455529089ac9f20e477"
+ integrity sha512-yAYxeGpVi27hqIilG1nh4A9Bnx4J3Ov+eXy4koL3drrR+IO9GaWPsKjik20ht608Asqi8TQPf0mczhEeyAtMzg==
+ dependencies:
+ chalk "^2.4.1"
+ commitizen "^4.0.3"
+ conventional-commit-types "^3.0.0"
+ lodash.map "^4.5.1"
+ longest "^2.0.1"
+ word-wrap "^1.0.3"
+ optionalDependencies:
+ "@commitlint/load" ">6.1.1"
+
+cz-conventional-changelog@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz#9246947c90404149b3fe2cf7ee91acad3b7d22d2"
+ integrity sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==
+ dependencies:
+ chalk "^2.4.1"
+ commitizen "^4.0.3"
+ conventional-commit-types "^3.0.0"
+ lodash.map "^4.5.1"
+ longest "^2.0.1"
+ word-wrap "^1.0.3"
+ optionalDependencies:
+ "@commitlint/load" ">6.1.1"
+
damerau-levenshtein@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791"
integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==
+dargs@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc"
+ integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==
+
dashdash@^1.12.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
@@ -2834,7 +3207,7 @@ decompress-response@^3.3.0:
dependencies:
mimic-response "^1.0.0"
-dedent@^0.7.0:
+dedent@0.7.0, dedent@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
@@ -2910,6 +3283,16 @@ deprecation@^2.0.0, deprecation@^2.3.1:
resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919"
integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
+detect-file@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
+ integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
+
+detect-indent@6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd"
+ integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==
+
detect-newline@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
@@ -2925,6 +3308,11 @@ diff@^4.0.2:
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
+diff@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b"
+ integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==
+
difflib@~0.2.1:
version "0.2.4"
resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e"
@@ -2973,7 +3361,7 @@ domexception@^2.0.1:
dependencies:
webidl-conversions "^5.0.0"
-dot-prop@^5.2.0:
+dot-prop@^5.1.0, dot-prop@^5.2.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"
integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==
@@ -3161,6 +3549,11 @@ escodegen@^1.14.1:
optionalDependencies:
source-map "~0.6.1"
+eslint-config-prettier@>=6.10.1:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.0.0.tgz#024d661444319686c588c8849c8da33815dbdb1c"
+ integrity sha512-5EaAVPsIHu+grmm5WKjxUia4yHgRrbkd8I0ffqUSwixCPMVBrbS97UnzlEY/Q7OWo584vgixefM0kJnUfo/VjA==
+
eslint-import-resolver-node@^0.3.4:
version "0.3.4"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717"
@@ -3224,7 +3617,7 @@ eslint-plugin-es@^3.0.0:
eslint-utils "^2.0.0"
regexpp "^3.0.0"
-eslint-plugin-eslint-comments@^3.2.0:
+eslint-plugin-eslint-comments@>=3.0.1, eslint-plugin-eslint-comments@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz#9e1cd7b4413526abb313933071d7aba05ca12ffa"
integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==
@@ -3232,7 +3625,22 @@ eslint-plugin-eslint-comments@^3.2.0:
escape-string-regexp "^1.0.5"
ignore "^5.0.5"
-eslint-plugin-import@^2.22.1:
+eslint-plugin-github@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-github/-/eslint-plugin-github-4.1.1.tgz#d3e38dbe3610043066edca622eb944aa02b09aee"
+ integrity sha512-MzCh4P4zVvR/13AHtumzZ3znq0cbUE7lXehyBEpFURD/EHdx/+7qW+0c+ySTrteImpX9LGLJFTYNtu10BifkbQ==
+ dependencies:
+ "@typescript-eslint/eslint-plugin" ">=2.25.0"
+ "@typescript-eslint/parser" ">=2.25.0"
+ eslint-config-prettier ">=6.10.1"
+ eslint-plugin-eslint-comments ">=3.0.1"
+ eslint-plugin-import ">=2.20.1"
+ eslint-plugin-prettier ">=3.1.2"
+ eslint-rule-documentation ">=1.0.0"
+ prettier ">=1.12.0"
+ svg-element-attributes ">=1.3.1"
+
+eslint-plugin-import@>=2.20.1, eslint-plugin-import@^2.22.1:
version "2.22.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702"
integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==
@@ -3272,7 +3680,7 @@ eslint-plugin-jest-formatting@^2.0.1:
resolved "https://registry.yarnpkg.com/eslint-plugin-jest-formatting/-/eslint-plugin-jest-formatting-2.0.1.tgz#8f4297bf5b6c2cdd9b2c20a57892f0302b52c20a"
integrity sha512-t6oc6GcXqzQ4lwatnVoKxGTLqo8kFIdA5kpaS3mrkwnTNxhsgFo9reMFdrtNtllx72ohNUsXsay7RJR/LLLk3Q==
-eslint-plugin-jest@24.1.5, eslint-plugin-jest@^24.1.3:
+eslint-plugin-jest@^24.1.3, eslint-plugin-jest@^24.1.5:
version "24.1.5"
resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.1.5.tgz#1e866a9f0deac587d0a3d5d7cefe99815a580de2"
integrity sha512-FIP3lwC8EzEG+rOs1y96cOJmMVpdFNreoDJv29B5vIupVssRi8zrSY3QadogT0K3h1Y8TMxJ6ZSAzYUmFCp2hg==
@@ -3376,6 +3784,13 @@ eslint-plugin-prefer-object-spread@^1.2.1:
resolved "https://registry.yarnpkg.com/eslint-plugin-prefer-object-spread/-/eslint-plugin-prefer-object-spread-1.2.1.tgz#27fb91853690cceb3ae6101d9c8aecc6a67a402c"
integrity sha1-J/uRhTaQzOs65hAdnIrsxqZ6QCw=
+eslint-plugin-prettier@>=3.1.2:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7"
+ integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ==
+ dependencies:
+ prettier-linter-helpers "^1.0.0"
+
eslint-plugin-promise@^4.2.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz#61485df2a359e03149fdafc0a68b0e030ad2ac45"
@@ -3482,6 +3897,11 @@ eslint-rule-composer@^0.3.0:
resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9"
integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==
+eslint-rule-documentation@>=1.0.0:
+ version "1.0.23"
+ resolved "https://registry.yarnpkg.com/eslint-rule-documentation/-/eslint-rule-documentation-1.0.23.tgz#4e0886145597a78d24524ec7e0cf18c6fedc23a8"
+ integrity sha512-pWReu3fkohwyvztx/oQWWgld2iad25TfUdi6wvhhaDPIQjHU/pyvlKgXFw1kX31SQK2Nq9MH+vRDWB0ZLy8fYw==
+
eslint-scope@5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5"
@@ -3526,7 +3946,7 @@ eslint-visitor-keys@^2.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
-eslint@7.20.0:
+eslint@^7.20.0:
version "7.20.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.20.0.tgz#db07c4ca4eda2e2316e7aa57ac7fc91ec550bdc7"
integrity sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==
@@ -3688,6 +4108,13 @@ expand-brackets@^2.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
expect@^26.6.2:
version "26.6.2"
resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417"
@@ -3720,6 +4147,15 @@ extend@3.0.2, extend@^3.0.0, extend@~3.0.2:
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+external-editor@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+ integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
+ dependencies:
+ chardet "^0.7.0"
+ iconv-lite "^0.4.24"
+ tmp "^0.0.33"
+
extglob@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
@@ -3749,6 +4185,11 @@ fast-deep-equal@^3.1.1:
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+fast-diff@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
+ integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
+
fast-glob@^3.1.1:
version "3.2.5"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"
@@ -3797,6 +4238,13 @@ figgy-pudding@^3.5.1:
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==
+figures@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+ integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
figures@^3.0.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
@@ -3827,7 +4275,7 @@ file-js@0.3.0:
minimatch "^3.0.3"
proper-lockfile "^1.2.0"
-filehound@1.17.4:
+filehound@^1.17.4:
version "1.17.4"
resolved "https://registry.yarnpkg.com/filehound/-/filehound-1.17.4.tgz#3f5b76c5b3edc1080311ba802e1ad43179e4291e"
integrity sha512-A74hiTADH20bpFbXBNyKtpqN4Guffa+ROmdGJWNnuCRhaD45UVSVoI6McLcpHYmuaOERrzD3gMV3v9VZq/SHeA==
@@ -3856,7 +4304,15 @@ fill-range@^7.0.1:
dependencies:
to-regex-range "^5.0.1"
-find-root@^1.1.0:
+find-node-modules@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.0.0.tgz#5db1fb9e668a3d451db3d618cd167cdd59e41b69"
+ integrity sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw==
+ dependencies:
+ findup-sync "^3.0.0"
+ merge "^1.2.1"
+
+find-root@1.1.0, find-root@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
@@ -3883,6 +4339,24 @@ find-up@^4.0.0, find-up@^4.1.0:
locate-path "^5.0.0"
path-exists "^4.0.0"
+find-up@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+findup-sync@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1"
+ integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
+ dependencies:
+ detect-file "^1.0.0"
+ is-glob "^4.0.0"
+ micromatch "^3.0.4"
+ resolve-dir "^1.0.1"
+
flat-cache@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
@@ -3946,7 +4420,16 @@ from@~0:
resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe"
integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=
-fs-extra@9.1.0:
+fs-extra@8.1.0, 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==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-extra@^9.0.0, 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==
@@ -3956,15 +4439,6 @@ fs-extra@9.1.0:
jsonfile "^6.0.1"
universalify "^2.0.0"
-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==
- dependencies:
- graceful-fs "^4.2.0"
- jsonfile "^4.0.0"
- universalify "^0.1.0"
-
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -3990,7 +4464,7 @@ gensync@^1.0.0-beta.1:
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
-get-caller-file@^2.0.1:
+get-caller-file@^2.0.1, get-caller-file@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
@@ -4009,6 +4483,11 @@ get-package-type@^0.1.0:
resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
+get-stdin@8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53"
+ integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==
+
get-stdin@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
@@ -4055,6 +4534,17 @@ git-diff-tree@^1.0.0:
split-transform-stream "0.1.1"
through2 "2.0.0"
+git-raw-commits@^2.0.0:
+ version "2.0.10"
+ resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.10.tgz#e2255ed9563b1c9c3ea6bd05806410290297bbc1"
+ integrity sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==
+ dependencies:
+ dargs "^7.0.0"
+ lodash "^4.17.15"
+ meow "^8.0.0"
+ split2 "^3.0.0"
+ through2 "^4.0.0"
+
git-spawned-stream@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/git-spawned-stream/-/git-spawned-stream-1.0.1.tgz#841cda93d106eeb2c71a3c1af44ec484b440248b"
@@ -4070,6 +4560,18 @@ glob-parent@^5.0.0, glob-parent@^5.1.0:
dependencies:
is-glob "^4.0.1"
+glob@7.1.4:
+ version "7.1.4"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
+ integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
@@ -4082,6 +4584,13 @@ glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
once "^1.3.0"
path-is-absolute "^1.0.0"
+global-dirs@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
+ integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=
+ dependencies:
+ ini "^1.3.4"
+
global-dirs@^2.0.1:
version "2.1.0"
resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d"
@@ -4089,6 +4598,26 @@ global-dirs@^2.0.1:
dependencies:
ini "1.3.7"
+global-modules@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+ integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+ dependencies:
+ global-prefix "^1.0.1"
+ is-windows "^1.0.1"
+ resolve-dir "^1.0.0"
+
+global-prefix@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+ integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=
+ dependencies:
+ expand-tilde "^2.0.2"
+ homedir-polyfill "^1.0.1"
+ ini "^1.3.4"
+ is-windows "^1.0.1"
+ which "^1.2.14"
+
globals@^11.1.0, globals@^11.12.0:
version "11.12.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
@@ -4315,11 +4844,25 @@ hastscript@^6.0.0:
resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac"
integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=
+homedir-polyfill@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+ integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+ dependencies:
+ parse-passwd "^1.0.0"
+
hosted-git-info@^2.1.4:
version "2.8.8"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
+hosted-git-info@^3.0.6:
+ version "3.0.8"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d"
+ integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==
+ dependencies:
+ lru-cache "^6.0.0"
+
html-encoding-sniffer@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
@@ -4356,12 +4899,12 @@ humannames@^1.0.5:
resolved "https://registry.yarnpkg.com/humannames/-/humannames-1.0.5.tgz#a4d60d4168df8737f4b262efd23f2ee32974f1c5"
integrity sha1-pNYNQWjfhzf0smLv0j8u4yl08cU=
-husky@5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/husky/-/husky-5.1.0.tgz#68b1148523acc838af0655ead71bf4671adb9f93"
- integrity sha512-Os0EY2haOO+59YZSwMiUDsHY43RFwBVIRStHcnnT8/kvA+sFfaA/YS4uLFRiymXYgQl6E6TQTt3y4v/Z2ctEtw==
+husky@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/husky/-/husky-5.1.1.tgz#8678953fd8deb86f387cbf1ad50bb2f7f96e83f2"
+ integrity sha512-80LZ736V0Nr4/st0c2COYaMbEQhHNmAbLMN8J/kLk7/mo0QdUkUGNDjv/7jVkhug377Wh8wfbWyaVXEJ/h2B/Q==
-iconv-lite@0.4.24:
+iconv-lite@0.4.24, iconv-lite@^0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -4432,11 +4975,30 @@ ini@1.3.7:
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84"
integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==
-ini@^1.3.5, ini@~1.3.0:
+ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
version "1.3.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+inquirer@6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
+ integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==
+ dependencies:
+ ansi-escapes "^3.2.0"
+ chalk "^2.4.2"
+ cli-cursor "^2.1.0"
+ cli-width "^2.0.0"
+ external-editor "^3.0.3"
+ figures "^2.0.0"
+ lodash "^4.17.12"
+ mute-stream "0.0.7"
+ run-async "^2.2.0"
+ rxjs "^6.4.0"
+ string-width "^2.1.0"
+ strip-ansi "^5.1.0"
+ through "^2.3.6"
+
internal-slot@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
@@ -4739,12 +5301,19 @@ is-symbol@^1.0.2:
dependencies:
has-symbols "^1.0.1"
+is-text-path@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e"
+ integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=
+ dependencies:
+ text-extensions "^1.0.0"
+
is-typedarray@^1.0.0, is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
-is-utf8@^0.2.0:
+is-utf8@^0.2.0, is-utf8@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
@@ -4754,7 +5323,7 @@ is-whitespace-character@^1.0.0:
resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7"
integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==
-is-windows@^1.0.2:
+is-windows@^1.0.1, is-windows@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
@@ -4858,7 +5427,7 @@ jest-changed-files@^26.6.2:
execa "^4.0.0"
throat "^5.0.0"
-jest-circus@26.6.3:
+jest-circus@^26.6.3:
version "26.6.3"
resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-26.6.3.tgz#3cc7ef2a6a3787e5d7bfbe2c72d83262154053e7"
integrity sha512-ACrpWZGcQMpbv13XbzRzpytEJlilP/Su0JtNCi5r/xLpOUhnaIJr8leYYpLEMgPFURZISEHrnnpmB54Q/UziPw==
@@ -5240,7 +5809,7 @@ jest-worker@^26.6.2:
merge-stream "^2.0.0"
supports-color "^7.0.0"
-jest@26.6.3:
+jest@^26.6.3:
version "26.6.3"
resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef"
integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==
@@ -5254,13 +5823,6 @@ jest@26.6.3:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-js-yaml@4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f"
- integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==
- dependencies:
- argparse "^2.0.1"
-
js-yaml@^3.12.0, js-yaml@^3.13.1, js-yaml@^3.14.1, js-yaml@^3.6.1:
version "3.14.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
@@ -5269,6 +5831,13 @@ js-yaml@^3.12.0, js-yaml@^3.13.1, js-yaml@^3.14.1, js-yaml@^3.6.1:
argparse "^1.0.7"
esprima "^4.0.0"
+js-yaml@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f"
+ integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==
+ dependencies:
+ argparse "^2.0.1"
+
jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
@@ -5417,6 +5986,11 @@ jsonify@~0.0.0:
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
+jsonparse@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
+ integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=
+
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@@ -5597,6 +6171,13 @@ locate-path@^5.0.0:
dependencies:
p-locate "^4.1.0"
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
lodash.difference@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c"
@@ -5617,6 +6198,11 @@ lodash.iteratee@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.iteratee/-/lodash.iteratee-4.7.0.tgz#be4177db289a8ccc3c0990f1db26b5b22fc1554c"
integrity sha1-vkF32yiajMw8CZDx2ya1si/BVUw=
+lodash.map@^4.5.1:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3"
+ integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=
+
lodash.memoize@4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
@@ -5642,7 +6228,7 @@ lodash.uniqwith@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz#7a0cbf65f43b5928625a9d4d0dc54b18cadc7ef3"
integrity sha1-egy/ZfQ7WShiWp1NDcVLGMrcfvM=
-lodash@4.x, lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20:
+lodash@4.x, lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -5659,6 +6245,11 @@ longest-streak@^2.0.1:
resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4"
integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==
+longest@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8"
+ integrity sha1-eB4YMpaqlPbU2RbcM10NF676I/g=
+
loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
@@ -5837,6 +6428,23 @@ meow@^7.0.0:
type-fest "^0.13.1"
yargs-parser "^18.1.3"
+meow@^8.0.0:
+ version "8.1.2"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897"
+ integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==
+ dependencies:
+ "@types/minimist" "^1.2.0"
+ camelcase-keys "^6.2.2"
+ decamelize-keys "^1.1.0"
+ hard-rejection "^2.1.0"
+ minimist-options "4.1.0"
+ normalize-package-data "^3.0.0"
+ read-pkg-up "^7.0.1"
+ redent "^3.0.0"
+ trim-newlines "^3.0.0"
+ type-fest "^0.18.0"
+ yargs-parser "^20.2.3"
+
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
@@ -5847,7 +6455,12 @@ merge2@^1.3.0:
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
-micromatch@^3.1.4:
+merge@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145"
+ integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==
+
+micromatch@^3.0.4, micromatch@^3.1.4:
version "3.1.10"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
@@ -5886,6 +6499,11 @@ mime-types@^2.1.12, mime-types@~2.1.19:
dependencies:
mime-db "1.46.0"
+mimic-fn@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+ integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+
mimic-fn@^2.0.0, mimic-fn@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
@@ -5917,7 +6535,7 @@ minimist-options@4.1.0:
is-plain-obj "^1.1.0"
kind-of "^6.0.3"
-minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
+minimist@1.2.5, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
@@ -5967,6 +6585,11 @@ multimap@^1.1.0:
resolved "https://registry.yarnpkg.com/multimap/-/multimap-1.1.0.tgz#5263febc085a1791c33b59bb3afc6a76a2a10ca8"
integrity sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==
+mute-stream@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
+ integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+
nanomatch@^1.2.9:
version "1.2.13"
resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
@@ -6108,6 +6731,16 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
semver "2 || 3 || 4 || 5"
validate-npm-package-license "^3.0.1"
+normalize-package-data@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.0.tgz#1f8a7c423b3d2e85eb36985eaf81de381d01301a"
+ integrity sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw==
+ dependencies:
+ hosted-git-info "^3.0.6"
+ resolve "^1.17.0"
+ semver "^7.3.2"
+ validate-npm-package-license "^3.0.1"
+
normalize-path@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
@@ -6252,6 +6885,13 @@ once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0:
dependencies:
wrappy "1"
+onetime@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+ integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
+ dependencies:
+ mimic-fn "^1.0.0"
+
onetime@^5.1.0:
version "5.1.2"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
@@ -6283,6 +6923,11 @@ optionator@^0.9.1:
type-check "^0.4.0"
word-wrap "^1.2.3"
+os-tmpdir@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
p-cancelable@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
@@ -6322,6 +6967,13 @@ p-limit@^2.0.0, p-limit@^2.2.0:
dependencies:
p-try "^2.0.0"
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
p-locate@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
@@ -6343,6 +6995,13 @@ p-locate@^4.1.0:
dependencies:
p-limit "^2.2.0"
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
p-memoize@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/p-memoize/-/p-memoize-3.1.0.tgz#ac7587983c9e530139f969ca7b41ef40e93659aa"
@@ -6461,6 +7120,11 @@ parse-latin@^4.0.0:
unist-util-modify-children "^2.0.0"
unist-util-visit-children "^1.0.0"
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+ integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
+
parse5@5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
@@ -6634,7 +7298,14 @@ prepend-http@^2.0.0:
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
-prettier@2.2.1:
+prettier-linter-helpers@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"
+ integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==
+ dependencies:
+ fast-diff "^1.1.2"
+
+prettier@>=1.12.0, prettier@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5"
integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==
@@ -6745,6 +7416,11 @@ pupa@^2.0.1:
dependencies:
escape-goat "^2.0.0"
+q@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+ integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+
qs@~6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
@@ -6857,6 +7533,15 @@ read-pkg@^5.2.0:
parse-json "^5.0.0"
type-fest "^0.6.0"
+readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+ integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
readable-stream@^2.2.2:
version "2.3.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
@@ -6870,15 +7555,6 @@ readable-stream@^2.2.2:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
-readable-stream@^3.0.2:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
- integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
- dependencies:
- inherits "^2.0.3"
- string_decoder "^1.1.1"
- util-deprecate "^1.0.1"
-
readable-stream@~1.0.17:
version "1.0.34"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
@@ -7209,15 +7885,30 @@ resolve-cwd@^3.0.0:
dependencies:
resolve-from "^5.0.0"
+resolve-dir@^1.0.0, resolve-dir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+ integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=
+ dependencies:
+ expand-tilde "^2.0.0"
+ global-modules "^1.0.0"
+
+resolve-from@5.0.0, resolve-from@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+ integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
resolve-from@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
-resolve-from@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
- integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+resolve-global@1.0.0, resolve-global@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255"
+ integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==
+ dependencies:
+ global-dirs "^0.1.1"
resolve-url@^0.2.1:
version "0.2.1"
@@ -7239,6 +7930,14 @@ responselike@^1.0.2:
dependencies:
lowercase-keys "^1.0.0"
+restore-cursor@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+ integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
+ dependencies:
+ onetime "^2.0.0"
+ signal-exit "^3.0.2"
+
ret@~0.1.10:
version "0.1.15"
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
@@ -7307,6 +8006,11 @@ rsvp@^4.8.4:
resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
+run-async@^2.2.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
+ integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
+
run-parallel@^1.1.9:
version "1.2.0"
resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
@@ -7314,6 +8018,13 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
+rxjs@^6.4.0:
+ version "6.6.3"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552"
+ integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==
+ dependencies:
+ tslib "^1.9.0"
+
safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
@@ -7390,7 +8101,7 @@ semver@7.3.2:
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
-semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4:
+semver@7.3.4, semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4:
version "7.3.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
@@ -7631,6 +8342,13 @@ split-transform-stream@0.1.1:
event-stream "~3.1.5"
through2 "~0.4.2"
+split2@^3.0.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f"
+ integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==
+ dependencies:
+ readable-stream "^3.0.0"
+
split@0.2:
version "0.2.10"
resolved "https://registry.yarnpkg.com/split/-/split-0.2.10.tgz#67097c601d697ce1368f418f06cd201cf0521a57"
@@ -7707,7 +8425,7 @@ string-width@^1.0.2:
is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0"
-string-width@^2.0.0:
+string-width@^2.0.0, string-width@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
@@ -7818,6 +8536,11 @@ strip-ansi@^6.0.0:
dependencies:
ansi-regex "^5.0.0"
+strip-bom@4.0.0, strip-bom@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
+ integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
+
strip-bom@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
@@ -7830,11 +8553,6 @@ strip-bom@^3.0.0:
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
-strip-bom@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
- integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
-
strip-eof@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
@@ -7852,6 +8570,11 @@ strip-indent@^3.0.0:
dependencies:
min-indent "^1.0.0"
+strip-json-comments@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7"
+ integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
+
strip-json-comments@^3.0.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
@@ -7922,6 +8645,11 @@ supports-hyperlinks@^2.0.0:
has-flag "^4.0.0"
supports-color "^7.0.0"
+svg-element-attributes@>=1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/svg-element-attributes/-/svg-element-attributes-1.3.1.tgz#0c55afac6284291ab563d0913c062cf78a8c0ddb"
+ integrity sha512-Bh05dSOnJBf3miNMqpsormfNtfidA/GxQVakhtn0T4DECWKeXQRQUceYjJ+OxYiiLdGe4Jo9iFV8wICFapFeIA==
+
symbol-tree@^3.2.4:
version "3.2.4"
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
@@ -7971,6 +8699,11 @@ test-exclude@^6.0.0:
glob "^7.1.4"
minimatch "^3.0.4"
+text-extensions@^1.0.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26"
+ integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==
+
text-table@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
@@ -8168,6 +8901,13 @@ through2@2.0.0:
readable-stream "~2.0.0"
xtend "~4.0.0"
+through2@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764"
+ integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==
+ dependencies:
+ readable-stream "3"
+
through2@~0.4.1, through2@~0.4.2:
version "0.4.2"
resolved "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b"
@@ -8176,11 +8916,18 @@ through2@~0.4.1, through2@~0.4.2:
readable-stream "~1.0.17"
xtend "~2.1.1"
-through@2, through@~2.3, through@~2.3.1:
+through@2, "through@>=2.2.7 <3", through@^2.3.6, through@~2.3, through@~2.3.1:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+tmp@^0.0.33:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ dependencies:
+ os-tmpdir "~1.0.2"
+
tmpl@1.0.x:
version "1.0.4"
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
@@ -8280,6 +9027,11 @@ trim-newlines@^3.0.0:
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30"
integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==
+trim-off-newlines@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
+ integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
+
trim-trailing-lines@^1.0.0:
version "1.1.4"
resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0"
@@ -8300,7 +9052,7 @@ try-resolve@^1.0.1:
resolved "https://registry.yarnpkg.com/try-resolve/-/try-resolve-1.0.1.tgz#cfde6fabd72d63e5797cfaab873abbe8e700e912"
integrity sha1-z95vq9ctY+V5fPqrhzq76OcA6RI=
-ts-jest@26.5.1:
+ts-jest@^26.5.1:
version "26.5.1"
resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.1.tgz#4d53ee4481552f57c1624f0bd3425c8b17996150"
integrity sha512-G7Rmo3OJMvlqE79amJX8VJKDiRcd7/r61wh9fnvvG8cAjhA9edklGw/dCxRSQmfZ/z8NDums5srSVgwZos1qfg==
@@ -8327,7 +9079,7 @@ tsconfig-paths@^3.9.0:
minimist "^1.2.0"
strip-bom "^3.0.0"
-tslib@^1.8.1:
+tslib@^1.8.1, tslib@^1.9.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
@@ -8395,6 +9147,11 @@ type-fest@^0.13.1:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
+type-fest@^0.18.0:
+ version "0.18.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f"
+ integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==
+
type-fest@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
@@ -8417,7 +9174,7 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
-typescript@4.1.5:
+typescript@^4.1.5:
version "4.1.5"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.5.tgz#123a3b214aaff3be32926f0d8f1f6e704eb89a72"
integrity sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==
@@ -8702,16 +9459,16 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1:
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-uuid@8.3.2, uuid@^8.3.0:
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
- integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
-
uuid@^3.3.2:
version "3.4.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+uuid@^8.3.0, uuid@^8.3.2:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+ integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
v8-compile-cache@^2.0.3:
version "2.2.0"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132"
@@ -8915,7 +9672,7 @@ which-module@^2.0.0:
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
-which@^1.2.9:
+which@^1.2.14, which@^1.2.9:
version "1.3.1"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
@@ -8936,7 +9693,7 @@ widest-line@^3.1.0:
dependencies:
string-width "^4.0.0"
-word-wrap@^1.2.3, word-wrap@~1.2.3:
+word-wrap@^1.0.3, word-wrap@^1.2.3, word-wrap@~1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
@@ -8955,6 +9712,15 @@ wrap-ansi@^6.2.0:
string-width "^4.1.0"
strip-ansi "^6.0.0"
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@@ -9050,6 +9816,11 @@ y18n@^4.0.0:
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4"
integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==
+y18n@^5.0.5:
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18"
+ integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==
+
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
@@ -9060,7 +9831,7 @@ yaml@^1.10.0, yaml@^1.7.2:
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e"
integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==
-yargs-parser@20.x:
+yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3:
version "20.2.6"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.6.tgz#69f920addf61aafc0b8b89002f5d66e28f2d8b20"
integrity sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA==
@@ -9089,3 +9860,21 @@ yargs@^15.4.1:
which-module "^2.0.0"
y18n "^4.0.0"
yargs-parser "^18.1.2"
+
+yargs@^16.0.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
+ integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
+ dependencies:
+ cliui "^7.0.2"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.0"
+ y18n "^5.0.5"
+ yargs-parser "^20.2.2"
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
From 7286624964541b4a9c1b0510f848a617c7779232 Mon Sep 17 00:00:00 2001
From: prisis
Date: Tue, 23 Feb 2021 10:37:51 +0100
Subject: [PATCH 19/21] style: cs fixes
---
src/interfaces.ts | 38 +++++++++++++++++++-------------------
src/settings.ts | 6 +++---
2 files changed, 22 insertions(+), 22 deletions(-)
diff --git a/src/interfaces.ts b/src/interfaces.ts
index c11ebe6a..9fdcbe18 100644
--- a/src/interfaces.ts
+++ b/src/interfaces.ts
@@ -236,23 +236,23 @@ export interface OctokitHttpError extends Error {
}
export interface OctokitHttpError extends Error {
- name: string
- /**
- * http status code
- */
- status: number
- /**
- * http status code
- *
- * @deprecated `error.code` is deprecated in favor of `error.status`
- */
- code: number
- /**
- * error response headers
- */
- headers: ResponseHeaders
- /**
- * Request options that lead to the error.
- */
- request: RequestOptions
+ name: string;
+ /**
+ * http status code
+ */
+ status: number;
+ /**
+ * http status code
+ *
+ * @deprecated `error.code` is deprecated in favor of `error.status`
+ */
+ code: number;
+ /**
+ * error response headers
+ */
+ headers: ResponseHeaders;
+ /**
+ * Request options that lead to the error.
+ */
+ request: RequestOptions;
}
diff --git a/src/settings.ts b/src/settings.ts
index df02c6bb..a5794cd8 100644
--- a/src/settings.ts
+++ b/src/settings.ts
@@ -167,9 +167,9 @@ export class Settings implements ISettings {
return this.settings.syncBranchName.replace("{0}", this.settings.templateRepository);
}
- get templateRepositoryRef(): string {
- return this.settings.templateRepositoryRef
- }
+ get templateRepositoryRef(): string {
+ return this.settings.templateRepositoryRef;
+ }
set templateRepository(templateRepository: string) {
this.settings.templateRepository = templateRepository;
From be4f137db62f2a8b9c79910490e0f54b3972b4fc Mon Sep 17 00:00:00 2001
From: prisis
Date: Tue, 23 Feb 2021 10:54:33 +0100
Subject: [PATCH 20/21] fix: fixed found error from rebase
---
.editorconfig | 9 -
__tests__/git-version.test.ts | 78 +--
__tests__/ref-helper.test.ts | 259 ++++---
__tests__/retry-helper.test.ts | 152 ++--
__tests__/settings.test.ts | 102 ++-
__tests__/sync.test.ts | 1196 ++++++++++++++++----------------
jest.config.js | 5 -
src/github-action-context.ts | 4 +-
src/settings.ts | 3 +-
yarn.lock | 103 +--
10 files changed, 903 insertions(+), 1008 deletions(-)
diff --git a/.editorconfig b/.editorconfig
index ad243313..80ce1de3 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -10,12 +10,3 @@ trim_trailing_whitespace = true
[*.yml]
indent_size = 2
-
-[*.ts]
-indent_size = 2
-
-[*.js]
-indent_size = 2
-
-[package.json]
-indent_size = 2
diff --git a/__tests__/git-version.test.ts b/__tests__/git-version.test.ts
index aa3ae4ba..9d5a77a6 100644
--- a/__tests__/git-version.test.ts
+++ b/__tests__/git-version.test.ts
@@ -1,45 +1,45 @@
-import {GitVersion} from '../lib/git-version'
+import { GitVersion } from "../lib/git-version";
-describe('git-version tests', () => {
- it('basics', async () => {
- let version = new GitVersion('')
- expect(version.isValid()).toBeFalsy()
+describe("git-version tests", () => {
+ it("basics", async () => {
+ let version = new GitVersion("");
+ expect(version.isValid()).toBeFalsy();
- version = new GitVersion('asdf')
- expect(version.isValid()).toBeFalsy()
+ version = new GitVersion("asdf");
+ expect(version.isValid()).toBeFalsy();
- version = new GitVersion('1.2')
- expect(version.isValid()).toBeTruthy()
- expect(version.toString()).toBe('1.2')
+ version = new GitVersion("1.2");
+ expect(version.isValid()).toBeTruthy();
+ expect(version.toString()).toBe("1.2");
- version = new GitVersion('1.2.3')
- expect(version.isValid()).toBeTruthy()
- expect(version.toString()).toBe('1.2.3')
- })
+ version = new GitVersion("1.2.3");
+ expect(version.isValid()).toBeTruthy();
+ expect(version.toString()).toBe("1.2.3");
+ });
- it('check minimum', async () => {
- let version = new GitVersion('4.5')
- expect(version.checkMinimum(new GitVersion('3.6'))).toBeTruthy()
- expect(version.checkMinimum(new GitVersion('3.6.7'))).toBeTruthy()
- expect(version.checkMinimum(new GitVersion('4.4'))).toBeTruthy()
- expect(version.checkMinimum(new GitVersion('4.5'))).toBeTruthy()
- expect(version.checkMinimum(new GitVersion('4.5.0'))).toBeTruthy()
- expect(version.checkMinimum(new GitVersion('4.6'))).toBeFalsy()
- expect(version.checkMinimum(new GitVersion('4.6.0'))).toBeFalsy()
- expect(version.checkMinimum(new GitVersion('5.1'))).toBeFalsy()
- expect(version.checkMinimum(new GitVersion('5.1.2'))).toBeFalsy()
+ it("check minimum", async () => {
+ let version = new GitVersion("4.5");
+ expect(version.checkMinimum(new GitVersion("3.6"))).toBeTruthy();
+ expect(version.checkMinimum(new GitVersion("3.6.7"))).toBeTruthy();
+ expect(version.checkMinimum(new GitVersion("4.4"))).toBeTruthy();
+ expect(version.checkMinimum(new GitVersion("4.5"))).toBeTruthy();
+ expect(version.checkMinimum(new GitVersion("4.5.0"))).toBeTruthy();
+ expect(version.checkMinimum(new GitVersion("4.6"))).toBeFalsy();
+ expect(version.checkMinimum(new GitVersion("4.6.0"))).toBeFalsy();
+ expect(version.checkMinimum(new GitVersion("5.1"))).toBeFalsy();
+ expect(version.checkMinimum(new GitVersion("5.1.2"))).toBeFalsy();
- version = new GitVersion('4.5.6')
- expect(version.checkMinimum(new GitVersion('3.6'))).toBeTruthy()
- expect(version.checkMinimum(new GitVersion('3.6.7'))).toBeTruthy()
- expect(version.checkMinimum(new GitVersion('4.4'))).toBeTruthy()
- expect(version.checkMinimum(new GitVersion('4.5'))).toBeTruthy()
- expect(version.checkMinimum(new GitVersion('4.5.5'))).toBeTruthy()
- expect(version.checkMinimum(new GitVersion('4.5.6'))).toBeTruthy()
- expect(version.checkMinimum(new GitVersion('4.5.7'))).toBeFalsy()
- expect(version.checkMinimum(new GitVersion('4.6'))).toBeFalsy()
- expect(version.checkMinimum(new GitVersion('4.6.0'))).toBeFalsy()
- expect(version.checkMinimum(new GitVersion('5.1'))).toBeFalsy()
- expect(version.checkMinimum(new GitVersion('5.1.2'))).toBeFalsy()
- })
-})
+ version = new GitVersion("4.5.6");
+ expect(version.checkMinimum(new GitVersion("3.6"))).toBeTruthy();
+ expect(version.checkMinimum(new GitVersion("3.6.7"))).toBeTruthy();
+ expect(version.checkMinimum(new GitVersion("4.4"))).toBeTruthy();
+ expect(version.checkMinimum(new GitVersion("4.5"))).toBeTruthy();
+ expect(version.checkMinimum(new GitVersion("4.5.5"))).toBeTruthy();
+ expect(version.checkMinimum(new GitVersion("4.5.6"))).toBeTruthy();
+ expect(version.checkMinimum(new GitVersion("4.5.7"))).toBeFalsy();
+ expect(version.checkMinimum(new GitVersion("4.6"))).toBeFalsy();
+ expect(version.checkMinimum(new GitVersion("4.6.0"))).toBeFalsy();
+ expect(version.checkMinimum(new GitVersion("5.1"))).toBeFalsy();
+ expect(version.checkMinimum(new GitVersion("5.1.2"))).toBeFalsy();
+ });
+});
diff --git a/__tests__/ref-helper.test.ts b/__tests__/ref-helper.test.ts
index c7760dde..4d0518fb 100644
--- a/__tests__/ref-helper.test.ts
+++ b/__tests__/ref-helper.test.ts
@@ -1,136 +1,123 @@
-import * as assert from 'assert'
-import * as refHelper from '../lib/ref-helper'
-import {IGitCommandManager} from '../lib/interfaces'
-
-let git: IGitCommandManager
-
-describe('ref-helper tests', () => {
- beforeEach(() => {
- git = ({} as unknown) as IGitCommandManager
- })
-
- it('getCheckoutInfo requires git', async () => {
- const git = (null as unknown) as IGitCommandManager
- try {
- await refHelper.getCheckoutInfo(git, 'refs/heads/my/branch')
- throw new Error('Should not reach here')
- } catch (err) {
- expect(err.message).toBe('Arg git cannot be empty')
- }
- })
-
- it('getCheckoutInfo requires ref', async () => {
- try {
- await refHelper.getCheckoutInfo(git, '')
- throw new Error('Should not reach here')
- } catch (err) {
- expect(err.message).toBe('Args ref cannot be empty')
- }
- })
-
- it('getCheckoutInfo refs/heads/', async () => {
- const checkoutInfo = await refHelper.getCheckoutInfo(
- git,
- 'refs/heads/my/branch'
- )
- expect(checkoutInfo.ref).toBe('my/branch')
- expect(checkoutInfo.startPoint).toBe('refs/remotes/origin/my/branch')
- })
-
- it('getCheckoutInfo refs/pull/', async () => {
- const checkoutInfo = await refHelper.getCheckoutInfo(
- git,
- 'refs/pull/123/merge'
- )
- expect(checkoutInfo.ref).toBe('refs/remotes/pull/123/merge')
- expect(checkoutInfo.startPoint).toBeFalsy()
- })
-
- it('getCheckoutInfo refs/tags/', async () => {
- const checkoutInfo = await refHelper.getCheckoutInfo(
- git,
- 'refs/tags/my-tag'
- )
- expect(checkoutInfo.ref).toBe('refs/tags/my-tag')
- expect(checkoutInfo.startPoint).toBeFalsy()
- })
-
- it('getCheckoutInfo unqualified branch only', async () => {
- git.branchExists = jest.fn(async (remote: boolean, pattern: string) => {
- return true
- })
-
- const checkoutInfo = await refHelper.getCheckoutInfo(git, 'my/branch')
-
- expect(checkoutInfo.ref).toBe('my/branch')
- expect(checkoutInfo.startPoint).toBe('refs/remotes/origin/my/branch')
- })
-
- it('getCheckoutInfo unqualified tag only', async () => {
- git.branchExists = jest.fn(async (remote: boolean, pattern: string) => {
- return false
- })
- git.tagExists = jest.fn(async (pattern: string) => {
- return true
- })
-
- const checkoutInfo = await refHelper.getCheckoutInfo(git, 'my-tag')
-
- expect(checkoutInfo.ref).toBe('refs/tags/my-tag')
- expect(checkoutInfo.startPoint).toBeFalsy()
- })
-
- it('getCheckoutInfo unqualified ref only, not a branch or tag', async () => {
- git.branchExists = jest.fn(async (remote: boolean, pattern: string) => {
- return false
- })
- git.tagExists = jest.fn(async (pattern: string) => {
- return false
- })
-
- try {
- await refHelper.getCheckoutInfo(git, 'my-ref')
- throw new Error('Should not reach here')
- } catch (err) {
- expect(err.message).toBe(
- "A branch or tag with the name 'my-ref' could not be found"
- )
- }
- })
-
- it('getRefSpec requires ref or commit', async () => {
- try {
- refHelper.getRefSpec('')
- throw new Error('Should not reach here')
- } catch (err) {
- expect(err.message).toBe('Arg ref cannot be empty')
- }
- })
-
- it('getRefSpec unqualified ref only', async () => {
- const refSpec = refHelper.getRefSpec('my-ref')
- expect(refSpec.length).toBe(2)
- expect(refSpec[0]).toBe('+refs/heads/my-ref*:refs/remotes/origin/my-ref*')
- expect(refSpec[1]).toBe('+refs/tags/my-ref*:refs/tags/my-ref*')
- })
-
- it('getRefSpec refs/heads/ only', async () => {
- const refSpec = refHelper.getRefSpec('refs/heads/my/branch')
- expect(refSpec.length).toBe(1)
- expect(refSpec[0]).toBe(
- '+refs/heads/my/branch:refs/remotes/origin/my/branch'
- )
- })
-
- it('getRefSpec refs/pull/ only', async () => {
- const refSpec = refHelper.getRefSpec('refs/pull/123/merge')
- expect(refSpec.length).toBe(1)
- expect(refSpec[0]).toBe('+refs/pull/123/merge:refs/remotes/pull/123/merge')
- })
-
- it('getRefSpec refs/tags/ only', async () => {
- const refSpec = refHelper.getRefSpec('refs/tags/my-tag')
- expect(refSpec.length).toBe(1)
- expect(refSpec[0]).toBe('+refs/tags/my-tag:refs/tags/my-tag')
- })
-})
+import * as assert from "assert";
+import * as refHelper from "../lib/ref-helper";
+import { IGitCommandManager } from "../lib/interfaces";
+
+let git: IGitCommandManager;
+
+describe("ref-helper tests", () => {
+ beforeEach(() => {
+ git = ({} as unknown) as IGitCommandManager;
+ });
+
+ it("getCheckoutInfo requires git", async () => {
+ const git = (null as unknown) as IGitCommandManager;
+ try {
+ await refHelper.getCheckoutInfo(git, "refs/heads/my/branch");
+ throw new Error("Should not reach here");
+ } catch (err) {
+ expect(err.message).toBe("Arg git cannot be empty");
+ }
+ });
+
+ it("getCheckoutInfo requires ref", async () => {
+ try {
+ await refHelper.getCheckoutInfo(git, "");
+ throw new Error("Should not reach here");
+ } catch (err) {
+ expect(err.message).toBe("Args ref cannot be empty");
+ }
+ });
+
+ it("getCheckoutInfo refs/heads/", async () => {
+ const checkoutInfo = await refHelper.getCheckoutInfo(git, "refs/heads/my/branch");
+ expect(checkoutInfo.ref).toBe("my/branch");
+ expect(checkoutInfo.startPoint).toBe("refs/remotes/origin/my/branch");
+ });
+
+ it("getCheckoutInfo refs/pull/", async () => {
+ const checkoutInfo = await refHelper.getCheckoutInfo(git, "refs/pull/123/merge");
+ expect(checkoutInfo.ref).toBe("refs/remotes/pull/123/merge");
+ expect(checkoutInfo.startPoint).toBeFalsy();
+ });
+
+ it("getCheckoutInfo refs/tags/", async () => {
+ const checkoutInfo = await refHelper.getCheckoutInfo(git, "refs/tags/my-tag");
+ expect(checkoutInfo.ref).toBe("refs/tags/my-tag");
+ expect(checkoutInfo.startPoint).toBeFalsy();
+ });
+
+ it("getCheckoutInfo unqualified branch only", async () => {
+ git.branchExists = jest.fn(async (remote: boolean, pattern: string) => {
+ return true;
+ });
+
+ const checkoutInfo = await refHelper.getCheckoutInfo(git, "my/branch");
+
+ expect(checkoutInfo.ref).toBe("my/branch");
+ expect(checkoutInfo.startPoint).toBe("refs/remotes/origin/my/branch");
+ });
+
+ it("getCheckoutInfo unqualified tag only", async () => {
+ git.branchExists = jest.fn(async (remote: boolean, pattern: string) => {
+ return false;
+ });
+ git.tagExists = jest.fn(async (pattern: string) => {
+ return true;
+ });
+
+ const checkoutInfo = await refHelper.getCheckoutInfo(git, "my-tag");
+
+ expect(checkoutInfo.ref).toBe("refs/tags/my-tag");
+ expect(checkoutInfo.startPoint).toBeFalsy();
+ });
+
+ it("getCheckoutInfo unqualified ref only, not a branch or tag", async () => {
+ git.branchExists = jest.fn(async (remote: boolean, pattern: string) => {
+ return false;
+ });
+ git.tagExists = jest.fn(async (pattern: string) => {
+ return false;
+ });
+
+ try {
+ await refHelper.getCheckoutInfo(git, "my-ref");
+ throw new Error("Should not reach here");
+ } catch (err) {
+ expect(err.message).toBe("A branch or tag with the name 'my-ref' could not be found");
+ }
+ });
+
+ it("getRefSpec requires ref or commit", async () => {
+ try {
+ refHelper.getRefSpec("");
+ throw new Error("Should not reach here");
+ } catch (err) {
+ expect(err.message).toBe("Arg ref cannot be empty");
+ }
+ });
+
+ it("getRefSpec unqualified ref only", async () => {
+ const refSpec = refHelper.getRefSpec("my-ref");
+ expect(refSpec.length).toBe(2);
+ expect(refSpec[0]).toBe("+refs/heads/my-ref*:refs/remotes/origin/my-ref*");
+ expect(refSpec[1]).toBe("+refs/tags/my-ref*:refs/tags/my-ref*");
+ });
+
+ it("getRefSpec refs/heads/ only", async () => {
+ const refSpec = refHelper.getRefSpec("refs/heads/my/branch");
+ expect(refSpec.length).toBe(1);
+ expect(refSpec[0]).toBe("+refs/heads/my/branch:refs/remotes/origin/my/branch");
+ });
+
+ it("getRefSpec refs/pull/ only", async () => {
+ const refSpec = refHelper.getRefSpec("refs/pull/123/merge");
+ expect(refSpec.length).toBe(1);
+ expect(refSpec[0]).toBe("+refs/pull/123/merge:refs/remotes/pull/123/merge");
+ });
+
+ it("getRefSpec refs/tags/ only", async () => {
+ const refSpec = refHelper.getRefSpec("refs/tags/my-tag");
+ expect(refSpec.length).toBe(1);
+ expect(refSpec[0]).toBe("+refs/tags/my-tag:refs/tags/my-tag");
+ });
+});
diff --git a/__tests__/retry-helper.test.ts b/__tests__/retry-helper.test.ts
index 6f8e0276..23e61cc6 100644
--- a/__tests__/retry-helper.test.ts
+++ b/__tests__/retry-helper.test.ts
@@ -1,87 +1,87 @@
-import * as core from '@actions/core'
-import {RetryHelper} from '../lib/retry-helper'
+import * as core from "@actions/core";
+import { RetryHelper } from "../lib/retry-helper";
-let info: string[]
-let retryHelper: any
+let info: string[];
+let retryHelper: any;
-describe('retry-helper tests', () => {
- beforeAll(() => {
- // Mock @actions/core info()
- jest.spyOn(core, 'info').mockImplementation((message: string) => {
- info.push(message)
- })
+describe("retry-helper tests", () => {
+ beforeAll(() => {
+ // Mock @actions/core info()
+ jest.spyOn(core, "info").mockImplementation((message: string) => {
+ info.push(message);
+ });
- retryHelper = new RetryHelper(3, 0, 0)
- })
+ retryHelper = new RetryHelper(3, 0, 0);
+ });
- beforeEach(() => {
- // Reset info
- info = []
- })
+ beforeEach(() => {
+ // Reset info
+ info = [];
+ });
- afterAll(() => {
- // Restore
- jest.restoreAllMocks()
- })
+ afterAll(() => {
+ // Restore
+ jest.restoreAllMocks();
+ });
- it('first attempt succeeds', async () => {
- const actual = await retryHelper.execute(async () => {
- return 'some result'
- })
- expect(actual).toBe('some result')
- expect(info).toHaveLength(0)
- })
+ it("first attempt succeeds", async () => {
+ const actual = await retryHelper.execute(async () => {
+ return "some result";
+ });
+ expect(actual).toBe("some result");
+ expect(info).toHaveLength(0);
+ });
- it('second attempt succeeds', async () => {
- let attempts = 0
- const actual = await retryHelper.execute(() => {
- if (++attempts == 1) {
- throw new Error('some error')
- }
+ it("second attempt succeeds", async () => {
+ let attempts = 0;
+ const actual = await retryHelper.execute(() => {
+ if (++attempts == 1) {
+ throw new Error("some error");
+ }
- return Promise.resolve('some result')
- })
- expect(attempts).toBe(2)
- expect(actual).toBe('some result')
- expect(info).toHaveLength(2)
- expect(info[0]).toBe('some error')
- expect(info[1]).toMatch(/Waiting .+ seconds before trying again/)
- })
+ return Promise.resolve("some result");
+ });
+ expect(attempts).toBe(2);
+ expect(actual).toBe("some result");
+ expect(info).toHaveLength(2);
+ expect(info[0]).toBe("some error");
+ expect(info[1]).toMatch(/Waiting .+ seconds before trying again/);
+ });
- it('third attempt succeeds', async () => {
- let attempts = 0
- const actual = await retryHelper.execute(() => {
- if (++attempts < 3) {
- throw new Error(`some error ${attempts}`)
- }
+ it("third attempt succeeds", async () => {
+ let attempts = 0;
+ const actual = await retryHelper.execute(() => {
+ if (++attempts < 3) {
+ throw new Error(`some error ${attempts}`);
+ }
- return Promise.resolve('some result')
- })
- expect(attempts).toBe(3)
- expect(actual).toBe('some result')
- expect(info).toHaveLength(4)
- expect(info[0]).toBe('some error 1')
- expect(info[1]).toMatch(/Waiting .+ seconds before trying again/)
- expect(info[2]).toBe('some error 2')
- expect(info[3]).toMatch(/Waiting .+ seconds before trying again/)
- })
+ return Promise.resolve("some result");
+ });
+ expect(attempts).toBe(3);
+ expect(actual).toBe("some result");
+ expect(info).toHaveLength(4);
+ expect(info[0]).toBe("some error 1");
+ expect(info[1]).toMatch(/Waiting .+ seconds before trying again/);
+ expect(info[2]).toBe("some error 2");
+ expect(info[3]).toMatch(/Waiting .+ seconds before trying again/);
+ });
- it('all attempts fail succeeds', async () => {
- let attempts = 0
- let error: Error = (null as unknown) as Error
- try {
- await retryHelper.execute(() => {
- throw new Error(`some error ${++attempts}`)
- })
- } catch (err) {
- error = err
- }
- expect(error.message).toBe('some error 3')
- expect(attempts).toBe(3)
- expect(info).toHaveLength(4)
- expect(info[0]).toBe('some error 1')
- expect(info[1]).toMatch(/Waiting .+ seconds before trying again/)
- expect(info[2]).toBe('some error 2')
- expect(info[3]).toMatch(/Waiting .+ seconds before trying again/)
- })
-})
+ it("all attempts fail succeeds", async () => {
+ let attempts = 0;
+ let error: Error = (null as unknown) as Error;
+ try {
+ await retryHelper.execute(() => {
+ throw new Error(`some error ${++attempts}`);
+ });
+ } catch (err) {
+ error = err;
+ }
+ expect(error.message).toBe("some error 3");
+ expect(attempts).toBe(3);
+ expect(info).toHaveLength(4);
+ expect(info[0]).toBe("some error 1");
+ expect(info[1]).toMatch(/Waiting .+ seconds before trying again/);
+ expect(info[2]).toBe("some error 2");
+ expect(info[3]).toMatch(/Waiting .+ seconds before trying again/);
+ });
+});
diff --git a/__tests__/settings.test.ts b/__tests__/settings.test.ts
index fb595240..b52d79e2 100644
--- a/__tests__/settings.test.ts
+++ b/__tests__/settings.test.ts
@@ -1,69 +1,67 @@
-import path from 'path'
-import * as core from '@actions/core'
-import {GithubActionContext} from '../lib/github-action-context'
-import fs from 'fs-extra'
-import {PathLike} from 'fs'
+import path from "path";
+import * as core from "@actions/core";
+import { GithubActionContext } from "../lib/github-action-context";
+import fs from "fs-extra";
+import { PathLike } from "fs";
-const originalGitHubWorkspace = process.env['GITHUB_WORKSPACE']
+const originalGitHubWorkspace = process.env["GITHUB_WORKSPACE"];
-const context = new GithubActionContext()
+const context = new GithubActionContext();
-const gitHubWorkspace = path.resolve('/checkout-tests/workspace')
+const gitHubWorkspace = path.resolve("/checkout-tests/workspace");
// Inputs for mock @actions/core
-let inputs = {} as any
+let inputs = {} as any;
// Shallow clone original @actions/github context
-let originalContext = {...context}
+let originalContext = { ...context };
-describe('settings tests', () => {
- beforeAll(() => {
- // Mock getInput
- jest.spyOn(core, 'getInput').mockImplementation((name: string) => {
- return inputs[name]
- })
+describe("settings tests", () => {
+ beforeAll(() => {
+ // Mock getInput
+ jest.spyOn(core, "getInput").mockImplementation((name: string) => {
+ return inputs[name];
+ });
- // Mock error/warning/info/debug
- jest.spyOn(core, 'error').mockImplementation(jest.fn())
- jest.spyOn(core, 'warning').mockImplementation(jest.fn())
- jest.spyOn(core, 'info').mockImplementation(jest.fn())
- jest.spyOn(core, 'debug').mockImplementation(jest.fn())
+ // Mock error/warning/info/debug
+ jest.spyOn(core, "error").mockImplementation(jest.fn());
+ jest.spyOn(core, "warning").mockImplementation(jest.fn());
+ jest.spyOn(core, "info").mockImplementation(jest.fn());
+ jest.spyOn(core, "debug").mockImplementation(jest.fn());
- // Mock github context
- jest.spyOn(context, 'repo', 'get').mockImplementation(() => {
- return {
- owner: 'some-owner',
- repo: 'some-repo'
- }
- })
- context.ref = 'refs/heads/some-ref'
+ // Mock github context
+ jest.spyOn(context, "repo", "get").mockImplementation(() => {
+ return {
+ owner: "some-owner",
+ repo: "some-repo",
+ };
+ });
+ context.ref = "refs/heads/some-ref";
- // Mock ./fs-helper directoryExistsSync()
- jest
- .spyOn(fs, 'existsSync')
- .mockImplementation((path: PathLike) => path == gitHubWorkspace)
+ // Mock ./fs-helper directoryExistsSync()
+ jest.spyOn(fs, "existsSync").mockImplementation((path: PathLike) => path == gitHubWorkspace);
- // GitHub workspace
- process.env['GITHUB_WORKSPACE'] = gitHubWorkspace
- })
+ // GitHub workspace
+ process.env["GITHUB_WORKSPACE"] = gitHubWorkspace;
+ });
- beforeEach(() => {
- // Reset inputs
- inputs = {}
- })
+ beforeEach(() => {
+ // Reset inputs
+ inputs = {};
+ });
- afterAll(() => {
- // Restore GitHub workspace
- delete process.env['GITHUB_WORKSPACE']
+ afterAll(() => {
+ // Restore GitHub workspace
+ delete process.env["GITHUB_WORKSPACE"];
- if (originalGitHubWorkspace) {
- process.env['GITHUB_WORKSPACE'] = originalGitHubWorkspace
- }
+ if (originalGitHubWorkspace) {
+ process.env["GITHUB_WORKSPACE"] = originalGitHubWorkspace;
+ }
- // Restore @actions/github context
- context.ref = originalContext.ref
+ // Restore @actions/github context
+ context.ref = originalContext.ref;
- // Restore
- jest.restoreAllMocks()
- })
-})
+ // Restore
+ jest.restoreAllMocks();
+ });
+});
diff --git a/__tests__/sync.test.ts b/__tests__/sync.test.ts
index 30a85a90..15da9927 100644
--- a/__tests__/sync.test.ts
+++ b/__tests__/sync.test.ts
@@ -1,628 +1,626 @@
-import path from 'path'
-import * as core from '@actions/core'
-import fs from 'fs-extra'
-import {PathLike} from 'fs'
-import {sync} from '../lib/sync'
-import {GithubActionContext} from '../lib/github-action-context'
-import {Settings} from '../lib/settings'
-import {ISettings} from '../lib/interfaces'
+import path from "path";
+import * as core from "@actions/core";
+import fs from "fs-extra";
+import { PathLike } from "fs";
+import { sync } from "../lib/sync";
+import { GithubActionContext } from "../lib/github-action-context";
+import { Settings } from "../lib/settings";
+import { ISettings } from "../lib/interfaces";
-const originalGitHubWorkspace = process.env['GITHUB_WORKSPACE']
-const context = new GithubActionContext()
-const gitHubWorkspace = path.join(__dirname, 'fixture/workspace')
-const templateRepositoryPath = path.join(gitHubWorkspace, 'template')
+const originalGitHubWorkspace = process.env["GITHUB_WORKSPACE"];
+const context = new GithubActionContext();
+const gitHubWorkspace = path.join(__dirname, "fixture/workspace");
+const templateRepositoryPath = path.join(gitHubWorkspace, "template");
-let settings: ISettings
+let settings: ISettings;
// Inputs for mock @actions/core
-let inputs = {} as any
+let inputs = {} as any;
// Shallow clone original @actions/github context
-let originalContext = {...context}
+let originalContext = { ...context };
const createFile = (name: string, content: string): string => {
- fs.writeFileSync(name, content)
+ fs.writeFileSync(name, content);
- return name
-}
+ return name;
+};
-describe('sync tests', () => {
- beforeAll(() => {
- // Mock getInput
- jest.spyOn(core, 'getInput').mockImplementation((name: string) => {
- return inputs[name]
- })
+describe("sync tests", () => {
+ beforeAll(() => {
+ // Mock getInput
+ jest.spyOn(core, "getInput").mockImplementation((name: string) => {
+ return inputs[name];
+ });
- // Mock error/warning/info/debug
- jest.spyOn(core, 'error').mockImplementation(jest.fn())
- jest.spyOn(core, 'warning').mockImplementation(jest.fn())
- jest.spyOn(core, 'info').mockImplementation(jest.fn())
- jest.spyOn(core, 'debug').mockImplementation(jest.fn())
+ // Mock error/warning/info/debug
+ jest.spyOn(core, "error").mockImplementation(jest.fn());
+ jest.spyOn(core, "warning").mockImplementation(jest.fn());
+ jest.spyOn(core, "info").mockImplementation(jest.fn());
+ jest.spyOn(core, "debug").mockImplementation(jest.fn());
- // Mock github context
- jest.spyOn(context, 'repo', 'get').mockImplementation(() => {
- return {
- owner: 'some-owner',
- repo: 'some-repo'
- }
- })
+ // Mock github context
+ jest.spyOn(context, "repo", "get").mockImplementation(() => {
+ return {
+ owner: "some-owner",
+ repo: "some-repo",
+ };
+ });
- context.ref = 'refs/heads/some-ref'
+ context.ref = "refs/heads/some-ref";
- jest
- .spyOn(fs, 'existsSync')
- .mockImplementation((path: PathLike) => path == gitHubWorkspace)
+ jest.spyOn(fs, "existsSync").mockImplementation((path: PathLike) => path == gitHubWorkspace);
- // GitHub workspace
- process.env['GITHUB_WORKSPACE'] = gitHubWorkspace
- })
+ // GitHub workspace
+ process.env["GITHUB_WORKSPACE"] = gitHubWorkspace;
+ });
- beforeEach(() => {
- // Reset inputs
- inputs = {}
+ beforeEach(() => {
+ // Reset inputs
+ inputs = {};
- fs.rmdirSync(gitHubWorkspace, {recursive: true})
+ fs.rmdirSync(gitHubWorkspace, { recursive: true });
- fs.mkdirpSync(gitHubWorkspace)
- fs.mkdirpSync(templateRepositoryPath)
- })
+ fs.mkdirpSync(gitHubWorkspace);
+ fs.mkdirpSync(templateRepositoryPath);
+ });
- afterAll(() => {
- // Restore GitHub workspace
- delete process.env['GITHUB_WORKSPACE']
+ afterAll(() => {
+ // Restore GitHub workspace
+ delete process.env["GITHUB_WORKSPACE"];
- if (originalGitHubWorkspace) {
- process.env['GITHUB_WORKSPACE'] = originalGitHubWorkspace
- }
+ if (originalGitHubWorkspace) {
+ process.env["GITHUB_WORKSPACE"] = originalGitHubWorkspace;
+ }
- // Restore @actions/github context
- context.ref = originalContext.ref
+ // Restore @actions/github context
+ context.ref = originalContext.ref;
- // Restore
- jest.restoreAllMocks()
+ // Restore
+ jest.restoreAllMocks();
- // fs.rmdirSync(gitHubWorkspace, { recursive: true })
- })
+ // fs.rmdirSync(gitHubWorkspace, { recursive: true })
+ });
- // it('sync with patch', async () => {
- // const patchContent = 'abc\n' + 'def\n' + 'abc\n'
- //
- // fs.writeFileSync(
- // path.join(templateRepositoryPath, 'test.txt'),
- // patchContent
- // )
- // const testFilePathB = createFile(
- // path.join(gitHubWorkspace, 'test.txt'),
- // 'abd\n' + 'deg\n' + 'ab4\n'
- // )
- //
- // settings = new Settings(context)
- // settings.templateRepositoryPath = templateRepositoryPath
- //
- // await sync(settings)
- //
- // expect(
- // fs.readFileSync(testFilePathB, 'utf8')
- // ).toBe(patchContent)
- // })
- //
- // it('sync with patch and copy', async () => {
- // const patchContent = 'abc\n' + 'def\n' + 'abc\n'
- //
- // fs.writeFileSync(
- // path.join(templateRepositoryPath, 'test.txt'),
- // patchContent
- // )
- // const testFilePathB1 = createFile(path.join(templateRepositoryPath, 'missing.txt'), '')
- // const testFilePathB2 = createFile(
- // path.join(gitHubWorkspace, 'test.txt'),
- // 'abd\n' + 'deg\n' + 'ab4\n'
- // )
- //
- // settings = new Settings(context)
- // settings.templateRepositoryPath = templateRepositoryPath
- //
- // await sync(settings)
- //
- // expect(
- // await fs.readFile(testFilePathB2, 'utf8')
- // ).toBe(patchContent)
- //
- // expect(fs.pathExistsSync(testFilePathB1)).toBe(true)
- // })
- //
- // it('sync with patch and filter', async () => {
- // const dotGithubPath = path.join(gitHubWorkspace, '.github')
- //
- // fs.mkdirpSync(dotGithubPath)
- // fs.writeFileSync(
- // path.join(dotGithubPath, 'template-sync-settings.yml'),
- // 'filters:\n' +
- // ' -\n' +
- // ' filepath: test.txt\n' +
- // ' filter: f\n'
- // )
- // fs.writeFileSync(
- // path.join(templateRepositoryPath, 'test.txt'),
- // 'abc\n' + 'def\n' + 'abc\n'
- // )
- // const testFilePathB = createFile(
- // path.join(gitHubWorkspace, 'test.txt'),
- // 'abd\n' + 'deg\n' + 'ab4\n'
- // )
- //
- // settings = new Settings(context)
- // settings.templateRepositoryPath = templateRepositoryPath
- //
- // await sync(settings)
- //
- // expect(await fs.readFile(testFilePathB, 'utf8')).toBe('abc\n' + 'deg\n' + 'abc\n')
- // })
- //
- // it('sync with long patch and filter', async () => {
- // const dotGithubPath = path.join(gitHubWorkspace, '.github')
- //
- // fs.mkdirpSync(dotGithubPath)
- // fs.writeFileSync(
- // path.join(dotGithubPath, 'template-sync-settings.yml'),
- // 'filters:\n' +
- // ' -\n' +
- // ' filepath: composer.json\n' +
- // ' filter: 4\n'
- // )
- // fs.writeFileSync(
- // path.join(templateRepositoryPath, 'composer.json'),
- // '{\n' +
- // ' "name": "narrowspark/tools",\n' +
- // ' "description": "tools",\n' +
- // ' "license": "proprietary",\n' +
- // ' "require": {\n' +
- // ' "php": "^7.4",\n' +
- // ' "narrowspark/coding-standard": "^5.1.0",\n' +
- // ' "wikimedia/composer-merge-plugin": "^1.4.1"\n' +
- // ' },\n' +
- // ' "extra": {\n' +
- // ' "merge-plugin": {\n' +
- // ' "include": [\n' +
- // ' "../composer.json"\n' +
- // ' ],\n' +
- // ' "merge-extra": false,\n' +
- // ' "merge-scripts": false\n' +
- // ' },\n' +
- // ' "prefetcher": {\n' +
- // ' "require": {\n' +
- // ' "phpunit/phpunit": "^9.0",\n' +
- // ' "friendsofphp/php-cs-fixer": "^2.16.0"\n' +
- // ' }\n' +
- // ' }\n' +
- // ' },\n' +
- // ' "minimum-stability": "dev",\n' +
- // ' "prefer-stable": true,\n' +
- // ' "scripts": {\n' +
- // ' "changelog": "changelog-generator generate --config=\\"./../.changelog\\" --file=\\"./../CHANGELOG.md\\" --prepend",\n' +
- // ' "cs": "php-cs-fixer fix --config=\\"./../.php_cs\\" --ansi",\n' +
- // ' "cs:check": "php-cs-fixer fix --config=\\"./../.php_cs\\" --ansi --dry-run",\n' +
- // ' "infection": "infection --configuration=\\"./../infection.json\\" -j$(nproc) --ansi",\n' +
- // ' "phpstan": "phpstan analyse -c ./../phpstan.neon --ansi",\n' +
- // ' "phpstan:baseline": "phpstan analyse -c ./../phpstan.neon --ansi --generate-baseline",\n' +
- // ' "psalm": "psalm --diff --diff-methods --threads=$(nproc)",\n' +
- // ' "psalm:baseline": "psalm --threads=$(nproc) --set-baseline=./.build/psalm-baseline.xml",\n' +
- // ' "psalm:fix": "psalm --alter --issues=all --threads=$(nproc)",\n' +
- // ' "rector-src": "rector process ./../src/ --config=./rector-src.yaml --ansi --dry-run",\n' +
- // ' "rector-src:fix": "rector process ./../src/ --config=./rector-src.yaml --ansi",\n' +
- // ' "rector-tests": "rector process ./../tests/ --config=./rector-tests.yaml --ansi --dry-run",\n' +
- // ' "rector-tests:fix": "rector process ./../tests/ --config=./rector-tests.yaml --ansi",\n' +
- // ' "req:check": "composer-require-checker check --config-file=./../composer-require.json ./../composer.json"\n' +
- // ' }\n' +
- // '}'
- // )
- // const testFilePathB = createFile(
- // path.join(gitHubWorkspace, 'composer.json'),
- // '{\n' +
- // ' "description": "tools",\n' +
- // ' "minimum-stability": "dev",\n' +
- // ' "prefer-stable": true,\n' +
- // ' "require": {\n' +
- // ' "php": "^7.3",\n' +
- // ' "narrowspark/coding-standard": "^5.1.0",\n' +
- // ' "wikimedia/composer-merge-plugin": "^1.4.1"\n' +
- // ' },\n' +
- // ' "extra": {\n' +
- // ' "prefetcher": {\n' +
- // ' "require": {\n' +
- // ' "phpunit/phpunit": "^8.0 || ^9.0",\n' +
- // ' "friendsofphp/php-cs-fixer": "^2.16.0"\n' +
- // ' }\n' +
- // ' },\n' +
- // ' "merge-plugin": {\n' +
- // ' "include": [\n' +
- // ' "../composer.json"\n' +
- // ' ],\n' +
- // ' "merge-extra": false,\n' +
- // ' "merge-scripts": false\n' +
- // ' }\n' +
- // ' },\n' +
- // ' "scripts": {\n' +
- // ' "changelog": "changelog-generator generate --config=\\"./../.changelog\\" --file=./../CHANGELOG.md --prepend",\n' +
- // ' "cs": "php-cs-fixer fix --config=\\"./../.php_cs\\" --ansi",\n' +
- // ' "cs:check": "php-cs-fixer fix --config=\\"./../.php_cs\\" --ansi --dry-run",\n' +
- // ' "phpstan": "phpstan analyse -c ./../phpstan.neon --ansi",\n' +
- // ' "psalm": "psalm --threads=$(nproc)",\n' +
- // ' "psalm:fix": "psalm --alter --issues=all --threads=$(nproc)",\n' +
- // ' "infection": "infection --configuration=\\"./../infection.json\\" -j$(nproc) --ansi",\n' +
- // ' "rector-src": "rector process ../src/ --config=./rector-src.yaml --ansi --dry-run",\n' +
- // ' "rector-src:fix": "rector process ../src/ --config=./rector-src.yaml --ansi",\n' +
- // ' "rector-tests": "rector process ../tests/ --config=./rector-tests.yaml --ansi --dry-run",\n' +
- // ' "rector-tests:fix": "rector process ../tests/ --config=./rector-tests.yaml --ansi"\n' +
- // ' }\n' +
- // '}'
- // )
- //
- // settings = new Settings(context)
- // settings.templateRepositoryPath = templateRepositoryPath
- //
- // await sync(settings)
- //
- // expect(await fs.readFile(testFilePathB, 'utf8')).toBe(
- // '{\n' +
- // ' "name": "narrowspark/tools",\n' +
- // ' "description": "tools",\n' +
- // ' "license": "proprietary",\n' +
- // ' "require": {\n' +
- // ' "php": "^7.3",\n' +
- // ' "narrowspark/coding-standard": "^5.1.0",\n' +
- // ' "wikimedia/composer-merge-plugin": "^1.4.1"\n' +
- // ' },\n' +
- // ' "extra": {\n' +
- // ' "merge-plugin": {\n' +
- // ' "include": [\n' +
- // ' "../composer.json"\n' +
- // ' ],\n' +
- // ' "merge-extra": false,\n' +
- // ' "merge-scripts": false\n' +
- // ' },\n' +
- // ' "prefetcher": {\n' +
- // ' "require": {\n' +
- // ' "phpunit/phpunit": "^9.0",\n' +
- // ' "friendsofphp/php-cs-fixer": "^2.16.0"\n' +
- // ' }\n' +
- // ' }\n' +
- // ' },\n' +
- // ' "minimum-stability": "dev",\n' +
- // ' "prefer-stable": true,\n' +
- // ' "scripts": {\n' +
- // ' "changelog": "changelog-generator generate --config=\\"./../.changelog\\" --file=\\"./../CHANGELOG.md\\" --prepend",\n' +
- // ' "cs": "php-cs-fixer fix --config=\\"./../.php_cs\\" --ansi",\n' +
- // ' "cs:check": "php-cs-fixer fix --config=\\"./../.php_cs\\" --ansi --dry-run",\n' +
- // ' "infection": "infection --configuration=\\"./../infection.json\\" -j$(nproc) --ansi",\n' +
- // ' "phpstan": "phpstan analyse -c ./../phpstan.neon --ansi",\n' +
- // ' "phpstan:baseline": "phpstan analyse -c ./../phpstan.neon --ansi --generate-baseline",\n' +
- // ' "psalm": "psalm --diff --diff-methods --threads=$(nproc)",\n' +
- // ' "psalm:baseline": "psalm --threads=$(nproc) --set-baseline=./.build/psalm-baseline.xml",\n' +
- // ' "psalm:fix": "psalm --alter --issues=all --threads=$(nproc)",\n' +
- // ' "rector-src": "rector process ./../src/ --config=./rector-src.yaml --ansi --dry-run",\n' +
- // ' "rector-src:fix": "rector process ./../src/ --config=./rector-src.yaml --ansi",\n' +
- // ' "rector-tests": "rector process ./../tests/ --config=./rector-tests.yaml --ansi --dry-run",\n' +
- // ' "rector-tests:fix": "rector process ./../tests/ --config=./rector-tests.yaml --ansi",\n' +
- // ' "req:check": "composer-require-checker check --config-file=./../composer-require.json ./../composer.json"\n' +
- // ' }\n' +
- // '}'
- // )
- // })
+ // it('sync with patch', async () => {
+ // const patchContent = 'abc\n' + 'def\n' + 'abc\n'
+ //
+ // fs.writeFileSync(
+ // path.join(templateRepositoryPath, 'test.txt'),
+ // patchContent
+ // )
+ // const testFilePathB = createFile(
+ // path.join(gitHubWorkspace, 'test.txt'),
+ // 'abd\n' + 'deg\n' + 'ab4\n'
+ // )
+ //
+ // settings = new Settings(context)
+ // settings.templateRepositoryPath = templateRepositoryPath
+ //
+ // await sync(settings)
+ //
+ // expect(
+ // fs.readFileSync(testFilePathB, 'utf8')
+ // ).toBe(patchContent)
+ // })
+ //
+ // it('sync with patch and copy', async () => {
+ // const patchContent = 'abc\n' + 'def\n' + 'abc\n'
+ //
+ // fs.writeFileSync(
+ // path.join(templateRepositoryPath, 'test.txt'),
+ // patchContent
+ // )
+ // const testFilePathB1 = createFile(path.join(templateRepositoryPath, 'missing.txt'), '')
+ // const testFilePathB2 = createFile(
+ // path.join(gitHubWorkspace, 'test.txt'),
+ // 'abd\n' + 'deg\n' + 'ab4\n'
+ // )
+ //
+ // settings = new Settings(context)
+ // settings.templateRepositoryPath = templateRepositoryPath
+ //
+ // await sync(settings)
+ //
+ // expect(
+ // await fs.readFile(testFilePathB2, 'utf8')
+ // ).toBe(patchContent)
+ //
+ // expect(fs.pathExistsSync(testFilePathB1)).toBe(true)
+ // })
+ //
+ // it('sync with patch and filter', async () => {
+ // const dotGithubPath = path.join(gitHubWorkspace, '.github')
+ //
+ // fs.mkdirpSync(dotGithubPath)
+ // fs.writeFileSync(
+ // path.join(dotGithubPath, 'template-sync-settings.yml'),
+ // 'filters:\n' +
+ // ' -\n' +
+ // ' filepath: test.txt\n' +
+ // ' filter: f\n'
+ // )
+ // fs.writeFileSync(
+ // path.join(templateRepositoryPath, 'test.txt'),
+ // 'abc\n' + 'def\n' + 'abc\n'
+ // )
+ // const testFilePathB = createFile(
+ // path.join(gitHubWorkspace, 'test.txt'),
+ // 'abd\n' + 'deg\n' + 'ab4\n'
+ // )
+ //
+ // settings = new Settings(context)
+ // settings.templateRepositoryPath = templateRepositoryPath
+ //
+ // await sync(settings)
+ //
+ // expect(await fs.readFile(testFilePathB, 'utf8')).toBe('abc\n' + 'deg\n' + 'abc\n')
+ // })
+ //
+ // it('sync with long patch and filter', async () => {
+ // const dotGithubPath = path.join(gitHubWorkspace, '.github')
+ //
+ // fs.mkdirpSync(dotGithubPath)
+ // fs.writeFileSync(
+ // path.join(dotGithubPath, 'template-sync-settings.yml'),
+ // 'filters:\n' +
+ // ' -\n' +
+ // ' filepath: composer.json\n' +
+ // ' filter: 4\n'
+ // )
+ // fs.writeFileSync(
+ // path.join(templateRepositoryPath, 'composer.json'),
+ // '{\n' +
+ // ' "name": "narrowspark/tools",\n' +
+ // ' "description": "tools",\n' +
+ // ' "license": "proprietary",\n' +
+ // ' "require": {\n' +
+ // ' "php": "^7.4",\n' +
+ // ' "narrowspark/coding-standard": "^5.1.0",\n' +
+ // ' "wikimedia/composer-merge-plugin": "^1.4.1"\n' +
+ // ' },\n' +
+ // ' "extra": {\n' +
+ // ' "merge-plugin": {\n' +
+ // ' "include": [\n' +
+ // ' "../composer.json"\n' +
+ // ' ],\n' +
+ // ' "merge-extra": false,\n' +
+ // ' "merge-scripts": false\n' +
+ // ' },\n' +
+ // ' "prefetcher": {\n' +
+ // ' "require": {\n' +
+ // ' "phpunit/phpunit": "^9.0",\n' +
+ // ' "friendsofphp/php-cs-fixer": "^2.16.0"\n' +
+ // ' }\n' +
+ // ' }\n' +
+ // ' },\n' +
+ // ' "minimum-stability": "dev",\n' +
+ // ' "prefer-stable": true,\n' +
+ // ' "scripts": {\n' +
+ // ' "changelog": "changelog-generator generate --config=\\"./../.changelog\\" --file=\\"./../CHANGELOG.md\\" --prepend",\n' +
+ // ' "cs": "php-cs-fixer fix --config=\\"./../.php_cs\\" --ansi",\n' +
+ // ' "cs:check": "php-cs-fixer fix --config=\\"./../.php_cs\\" --ansi --dry-run",\n' +
+ // ' "infection": "infection --configuration=\\"./../infection.json\\" -j$(nproc) --ansi",\n' +
+ // ' "phpstan": "phpstan analyse -c ./../phpstan.neon --ansi",\n' +
+ // ' "phpstan:baseline": "phpstan analyse -c ./../phpstan.neon --ansi --generate-baseline",\n' +
+ // ' "psalm": "psalm --diff --diff-methods --threads=$(nproc)",\n' +
+ // ' "psalm:baseline": "psalm --threads=$(nproc) --set-baseline=./.build/psalm-baseline.xml",\n' +
+ // ' "psalm:fix": "psalm --alter --issues=all --threads=$(nproc)",\n' +
+ // ' "rector-src": "rector process ./../src/ --config=./rector-src.yaml --ansi --dry-run",\n' +
+ // ' "rector-src:fix": "rector process ./../src/ --config=./rector-src.yaml --ansi",\n' +
+ // ' "rector-tests": "rector process ./../tests/ --config=./rector-tests.yaml --ansi --dry-run",\n' +
+ // ' "rector-tests:fix": "rector process ./../tests/ --config=./rector-tests.yaml --ansi",\n' +
+ // ' "req:check": "composer-require-checker check --config-file=./../composer-require.json ./../composer.json"\n' +
+ // ' }\n' +
+ // '}'
+ // )
+ // const testFilePathB = createFile(
+ // path.join(gitHubWorkspace, 'composer.json'),
+ // '{\n' +
+ // ' "description": "tools",\n' +
+ // ' "minimum-stability": "dev",\n' +
+ // ' "prefer-stable": true,\n' +
+ // ' "require": {\n' +
+ // ' "php": "^7.3",\n' +
+ // ' "narrowspark/coding-standard": "^5.1.0",\n' +
+ // ' "wikimedia/composer-merge-plugin": "^1.4.1"\n' +
+ // ' },\n' +
+ // ' "extra": {\n' +
+ // ' "prefetcher": {\n' +
+ // ' "require": {\n' +
+ // ' "phpunit/phpunit": "^8.0 || ^9.0",\n' +
+ // ' "friendsofphp/php-cs-fixer": "^2.16.0"\n' +
+ // ' }\n' +
+ // ' },\n' +
+ // ' "merge-plugin": {\n' +
+ // ' "include": [\n' +
+ // ' "../composer.json"\n' +
+ // ' ],\n' +
+ // ' "merge-extra": false,\n' +
+ // ' "merge-scripts": false\n' +
+ // ' }\n' +
+ // ' },\n' +
+ // ' "scripts": {\n' +
+ // ' "changelog": "changelog-generator generate --config=\\"./../.changelog\\" --file=./../CHANGELOG.md --prepend",\n' +
+ // ' "cs": "php-cs-fixer fix --config=\\"./../.php_cs\\" --ansi",\n' +
+ // ' "cs:check": "php-cs-fixer fix --config=\\"./../.php_cs\\" --ansi --dry-run",\n' +
+ // ' "phpstan": "phpstan analyse -c ./../phpstan.neon --ansi",\n' +
+ // ' "psalm": "psalm --threads=$(nproc)",\n' +
+ // ' "psalm:fix": "psalm --alter --issues=all --threads=$(nproc)",\n' +
+ // ' "infection": "infection --configuration=\\"./../infection.json\\" -j$(nproc) --ansi",\n' +
+ // ' "rector-src": "rector process ../src/ --config=./rector-src.yaml --ansi --dry-run",\n' +
+ // ' "rector-src:fix": "rector process ../src/ --config=./rector-src.yaml --ansi",\n' +
+ // ' "rector-tests": "rector process ../tests/ --config=./rector-tests.yaml --ansi --dry-run",\n' +
+ // ' "rector-tests:fix": "rector process ../tests/ --config=./rector-tests.yaml --ansi"\n' +
+ // ' }\n' +
+ // '}'
+ // )
+ //
+ // settings = new Settings(context)
+ // settings.templateRepositoryPath = templateRepositoryPath
+ //
+ // await sync(settings)
+ //
+ // expect(await fs.readFile(testFilePathB, 'utf8')).toBe(
+ // '{\n' +
+ // ' "name": "narrowspark/tools",\n' +
+ // ' "description": "tools",\n' +
+ // ' "license": "proprietary",\n' +
+ // ' "require": {\n' +
+ // ' "php": "^7.3",\n' +
+ // ' "narrowspark/coding-standard": "^5.1.0",\n' +
+ // ' "wikimedia/composer-merge-plugin": "^1.4.1"\n' +
+ // ' },\n' +
+ // ' "extra": {\n' +
+ // ' "merge-plugin": {\n' +
+ // ' "include": [\n' +
+ // ' "../composer.json"\n' +
+ // ' ],\n' +
+ // ' "merge-extra": false,\n' +
+ // ' "merge-scripts": false\n' +
+ // ' },\n' +
+ // ' "prefetcher": {\n' +
+ // ' "require": {\n' +
+ // ' "phpunit/phpunit": "^9.0",\n' +
+ // ' "friendsofphp/php-cs-fixer": "^2.16.0"\n' +
+ // ' }\n' +
+ // ' }\n' +
+ // ' },\n' +
+ // ' "minimum-stability": "dev",\n' +
+ // ' "prefer-stable": true,\n' +
+ // ' "scripts": {\n' +
+ // ' "changelog": "changelog-generator generate --config=\\"./../.changelog\\" --file=\\"./../CHANGELOG.md\\" --prepend",\n' +
+ // ' "cs": "php-cs-fixer fix --config=\\"./../.php_cs\\" --ansi",\n' +
+ // ' "cs:check": "php-cs-fixer fix --config=\\"./../.php_cs\\" --ansi --dry-run",\n' +
+ // ' "infection": "infection --configuration=\\"./../infection.json\\" -j$(nproc) --ansi",\n' +
+ // ' "phpstan": "phpstan analyse -c ./../phpstan.neon --ansi",\n' +
+ // ' "phpstan:baseline": "phpstan analyse -c ./../phpstan.neon --ansi --generate-baseline",\n' +
+ // ' "psalm": "psalm --diff --diff-methods --threads=$(nproc)",\n' +
+ // ' "psalm:baseline": "psalm --threads=$(nproc) --set-baseline=./.build/psalm-baseline.xml",\n' +
+ // ' "psalm:fix": "psalm --alter --issues=all --threads=$(nproc)",\n' +
+ // ' "rector-src": "rector process ./../src/ --config=./rector-src.yaml --ansi --dry-run",\n' +
+ // ' "rector-src:fix": "rector process ./../src/ --config=./rector-src.yaml --ansi",\n' +
+ // ' "rector-tests": "rector process ./../tests/ --config=./rector-tests.yaml --ansi --dry-run",\n' +
+ // ' "rector-tests:fix": "rector process ./../tests/ --config=./rector-tests.yaml --ansi",\n' +
+ // ' "req:check": "composer-require-checker check --config-file=./../composer-require.json ./../composer.json"\n' +
+ // ' }\n' +
+ // '}'
+ // )
+ // })
- it('sync with long patch and more filters', async () => {
- const dotGithubPath = path.join(gitHubWorkspace, '.github')
+ it("sync with long patch and more filters", async () => {
+ const dotGithubPath = path.join(gitHubWorkspace, ".github");
- fs.mkdirpSync(dotGithubPath)
- fs.writeFileSync(
- path.join(dotGithubPath, 'template-sync-settings.yml'),
- 'filters:\n' +
- ' -\n' +
- ' filepath: composer.json\n' +
- ' filter: narrowspark/php-library-template\n' +
- ' -\n' +
- ' filepath: composer.json\n' +
- ' filter: narrowspark/php-library-template\n' +
- ' -\n' +
- ' filepath: composer.json\n' +
- ' filter: Provides a GitHub repository template for a Narrowspark PHP library, using GitHub actions\n' +
- ' -\n' +
- ' filepath: composer.json\n' +
- ' filter: 4\n' +
- ' strict: true\n' +
- ' -\n' +
- ' filepath: composer.json\n' +
- ' filter: 0\n' +
- ' strict: true\n' +
- ' -\n' +
- ' filepath: composer.json\n' +
- ' filter: Narrowspark\\\\Library\n' +
- ' -\n' +
- ' filepath: composer.json\n' +
- ' filter: Narrowspark\\\\Library\n' +
- ' -\n' +
- ' filepath: composer.json\n' +
- ' filter: narrowspark\n' +
- ' -\n' +
- ' filepath: composer.json\n' +
- ' filter: narrowspark/php-library-template\n'
- )
- fs.writeFileSync(
- path.join(templateRepositoryPath, 'composer.json'),
- '{\n' +
- ' "name": "narrowspark/php-library-template",\n' +
- ' "type": "library",\n' +
- ' "description": "Provides a GitHub repository template for a Narrowspark PHP library, using GitHub actions.",\n' +
- ' "keywords": [\n' +
- ' "narrowspark"\n' +
- ' ],\n' +
- ' "homepage": "http://github.com/narrowspark/php-library-template",\n' +
- ' "license": "MIT",\n' +
- ' "authors": [\n' +
- ' {\n' +
- ' "name": "Daniel Bannert",\n' +
- ' "email": "d.bannert@anolilab.de",\n' +
- ' "homepage": "http://www.anolilab.de",\n' +
- ' "role": "Developer"\n' +
- ' }\n' +
- ' ],\n' +
- ' "require": {\n' +
- ' "php": "^7.4",\n' +
- ' "thecodingmachine/safe": "^1.1.1"\n' +
- ' },\n' +
- ' "require-dev": {\n' +
- ' "ext-json": "*",\n' +
- ' "phpunit/phpunit": "^9.1.5",\n' +
- ' "thecodingmachine/phpstan-safe-rule": "^1.0.0"\n' +
- ' },\n' +
- ' "config": {\n' +
- ' "preferred-install": "dist",\n' +
- ' "sort-packages": true\n' +
- ' },\n' +
- ' "extra": {\n' +
- ' "branch-alias": {\n' +
- ' "dev-master": "1.0-dev"\n' +
- ' },\n' +
- ' "prefetcher": {\n' +
- ' "require": {\n' +
- ' "phpunit/phpunit": "^8.0 || ^9.0"\n' +
- ' }\n' +
- ' }\n' +
- ' },\n' +
- ' "autoload": {\n' +
- ' "psr-4": {\n' +
- ' "Narrowspark\\\\Library\\\\": "src/"\n' +
- ' },\n' +
- ' "exclude-from-classmap": [\n' +
- ' "/tests/"\n' +
- ' ]\n' +
- ' },\n' +
- ' "autoload-dev": {\n' +
- ' "psr-4": {\n' +
- ' "Narrowspark\\\\Library\\\\Tests\\\\": "tests/"\n' +
- ' }\n' +
- ' },\n' +
- ' "minimum-stability": "dev",\n' +
- ' "prefer-stable": true,\n' +
- ' "scripts": {\n' +
- ' "post-install-cmd": "composer --working-dir=./.build install --lock",\n' +
- ' "post-update-cmd": "composer --working-dir=./.build update --lock",\n' +
- ' "changelog": "composer --working-dir=./.build changelog",\n' +
- ' "coverage": [\n' +
- ' "phpunit --dump-xdebug-filter=./.build/phpunit/.xdebug-filter.php",\n' +
- ' "phpunit --prepend=./.build/phpunit/.xdebug-filter.php --coverage-html=./.build/phpunit/coverage"\n' +
- ' ],\n' +
- ' "cs": "composer --working-dir=./.build cs -- -v",\n' +
- ' "cs:check": "composer --working-dir=./.build cs:check -- -v",\n' +
- ' "infection": "composer --working-dir=./.build infection -- --min-covered-msi=73 --min-msi=61",\n' +
- ' "phpstan": "composer --working-dir=./.build phpstan -- --memory-limit=-1",\n' +
- ' "phpstan:baseline": "composer --working-dir=./.build phpstan:baseline -- --memory-limit=-1",\n' +
- ' "psalm": "composer --working-dir=./.build psalm",\n' +
- ' "psalm:baseline": "composer --working-dir=./.build psalm:baseline",\n' +
- ' "psalm:fix": "composer --working-dir=./.build psalm:fix",\n' +
- ' "rector-src": "composer --working-dir=./.build rector-src",\n' +
- ' "rector-src:fix": "composer --working-dir=./.build rector-src:fix",\n' +
- ' "rector-tests": "composer --working-dir=./.build rector-tests",\n' +
- ' "rector-tests:fix": "composer --working-dir=./.build rector-tests:fix",\n' +
- ' "req:check": "composer --working-dir=./.build req:check",\n' +
- ' "test": "phpunit"\n' +
- ' },\n' +
- ' "support": {\n' +
- ' "issues": "https://github.com/narrowspark/php-library-template/issues",\n' +
- ' "source": "https://github.com/narrowspark/php-library-template"\n' +
- ' }\n' +
- '}'
- )
- const testFilePathB = createFile(
- path.join(gitHubWorkspace, 'composer.json'),
- '{\n' +
- ' "name": "testomat/terminal-colour",\n' +
- ' "type": "library",\n' +
- ' "description": "Return your terminal message in style! Change the text style, text color and text background color from the terminal, console or shell interface with ANSI color codes.",\n' +
- ' "keywords": [\n' +
- ' "narrowspark",\n' +
- ' "testomat",\n' +
- ' "color",\n' +
- ' "terminal",\n' +
- ' "colour",\n' +
- ' "ansi",\n' +
- ' "style",\n' +
- ' "truecolor",\n' +
- ' "color256",\n' +
- ' "color16"\n' +
- ' ],\n' +
- ' "homepage": "http://github.com/testomat/terminal-colour",\n' +
- ' "license": "MIT",\n' +
- ' "authors": [\n' +
- ' {\n' +
- ' "name": "Daniel Bannert",\n' +
- ' "email": "d.bannert@anolilab.de",\n' +
- ' "homepage": "http://www.anolilab.de",\n' +
- ' "role": "Developer"\n' +
- ' }\n' +
- ' ],\n' +
- ' "require": {\n' +
- ' "php": "^7.3",\n' +
- ' "thecodingmachine/safe": "^1.1.1"\n' +
- ' },\n' +
- ' "require-dev": {\n' +
- ' "ext-json": "*",\n' +
- ' "phpunit/phpunit": "^9.1.4"\n' +
- ' },\n' +
- ' "config": {\n' +
- ' "preferred-install": "dist",\n' +
- ' "sort-packages": true\n' +
- ' },\n' +
- ' "extra": {\n' +
- ' "branch-alias": {\n' +
- ' "dev-master": "1.1-dev"\n' +
- ' },\n' +
- ' "prefetcher": {\n' +
- ' "require": {\n' +
- ' "phpunit/phpunit": "^8.0 || ^9.0"\n' +
- ' }\n' +
- ' }\n' +
- ' },\n' +
- ' "autoload": {\n' +
- ' "psr-4": {\n' +
- ' "Testomat\\\\TerminalColour\\\\": "src/"\n' +
- ' },\n' +
- ' "exclude-from-classmap": [\n' +
- ' "/tests/"\n' +
- ' ]\n' +
- ' },\n' +
- ' "autoload-dev": {\n' +
- ' "psr-4": {\n' +
- ' "Testomat\\\\TerminalColour\\\\Tests\\\\": "tests/"\n' +
- ' }\n' +
- ' },\n' +
- ' "minimum-stability": "dev",\n' +
- ' "prefer-stable": true,\n' +
- ' "scripts": {\n' +
- ' "changelog": "composer --working-dir=./.build changelog",\n' +
- ' "coverage": [\n' +
- ' "phpunit --dump-xdebug-filter=./.build/phpunit/.xdebug-filter.php",\n' +
- ' "phpunit --prepend=./.build/phpunit/.xdebug-filter.php --coverage-html=./.build/phpunit/coverage"\n' +
- ' ],\n' +
- ' "cs": "composer --working-dir=./.build cs -- -v",\n' +
- ' "cs:check": "composer --working-dir=./.build cs:check -- -v",\n' +
- ' "phpstan": "composer --working-dir=./.build phpstan -- --memory-limit=-1",\n' +
- ' "psalm": "composer --working-dir=./.build psalm",\n' +
- ' "psalm:fix": "composer --working-dir=./.build psalm:fix",\n' +
- ' "infection": "composer --working-dir=./.build infection -- --min-covered-msi=89 --min-msi=89",\n' +
- ' "rector-src": "composer --working-dir=./.build rector-src",\n' +
- ' "rector-src:fix": "composer --working-dir=./.build rector-src:fix",\n' +
- ' "rector-tests": "composer --working-dir=./.build rector-tests",\n' +
- ' "rector-tests:fix": "composer --working-dir=./.build rector-tests:fix",\n' +
- ' "test": "phpunit",\n' +
- ' "post-install-cmd": "composer --working-dir=./.build install --lock",\n' +
- ' "post-update-cmd": "composer --working-dir=./.build update --lock"\n' +
- ' },\n' +
- ' "support": {\n' +
- ' "issues": "https://github.com/testomat/terminal-colour/issues",\n' +
- ' "source": "https://github.com/testomat/terminal-colour"\n' +
- ' }\n' +
- '}'
- )
+ fs.mkdirpSync(dotGithubPath);
+ fs.writeFileSync(
+ path.join(dotGithubPath, "template-sync-settings.yml"),
+ "filters:\n" +
+ " -\n" +
+ " filepath: composer.json\n" +
+ " filter: narrowspark/php-library-template\n" +
+ " -\n" +
+ " filepath: composer.json\n" +
+ " filter: narrowspark/php-library-template\n" +
+ " -\n" +
+ " filepath: composer.json\n" +
+ " filter: Provides a GitHub repository template for a Narrowspark PHP library, using GitHub actions\n" +
+ " -\n" +
+ " filepath: composer.json\n" +
+ " filter: 4\n" +
+ " strict: true\n" +
+ " -\n" +
+ " filepath: composer.json\n" +
+ " filter: 0\n" +
+ " strict: true\n" +
+ " -\n" +
+ " filepath: composer.json\n" +
+ " filter: Narrowspark\\\\Library\n" +
+ " -\n" +
+ " filepath: composer.json\n" +
+ " filter: Narrowspark\\\\Library\n" +
+ " -\n" +
+ " filepath: composer.json\n" +
+ " filter: narrowspark\n" +
+ " -\n" +
+ " filepath: composer.json\n" +
+ " filter: narrowspark/php-library-template\n",
+ );
+ fs.writeFileSync(
+ path.join(templateRepositoryPath, "composer.json"),
+ "{\n" +
+ ' "name": "narrowspark/php-library-template",\n' +
+ ' "type": "library",\n' +
+ ' "description": "Provides a GitHub repository template for a Narrowspark PHP library, using GitHub actions.",\n' +
+ ' "keywords": [\n' +
+ ' "narrowspark"\n' +
+ " ],\n" +
+ ' "homepage": "http://github.com/narrowspark/php-library-template",\n' +
+ ' "license": "MIT",\n' +
+ ' "authors": [\n' +
+ " {\n" +
+ ' "name": "Daniel Bannert",\n' +
+ ' "email": "d.bannert@anolilab.de",\n' +
+ ' "homepage": "http://www.anolilab.de",\n' +
+ ' "role": "Developer"\n' +
+ " }\n" +
+ " ],\n" +
+ ' "require": {\n' +
+ ' "php": "^7.4",\n' +
+ ' "thecodingmachine/safe": "^1.1.1"\n' +
+ " },\n" +
+ ' "require-dev": {\n' +
+ ' "ext-json": "*",\n' +
+ ' "phpunit/phpunit": "^9.1.5",\n' +
+ ' "thecodingmachine/phpstan-safe-rule": "^1.0.0"\n' +
+ " },\n" +
+ ' "config": {\n' +
+ ' "preferred-install": "dist",\n' +
+ ' "sort-packages": true\n' +
+ " },\n" +
+ ' "extra": {\n' +
+ ' "branch-alias": {\n' +
+ ' "dev-master": "1.0-dev"\n' +
+ " },\n" +
+ ' "prefetcher": {\n' +
+ ' "require": {\n' +
+ ' "phpunit/phpunit": "^8.0 || ^9.0"\n' +
+ " }\n" +
+ " }\n" +
+ " },\n" +
+ ' "autoload": {\n' +
+ ' "psr-4": {\n' +
+ ' "Narrowspark\\\\Library\\\\": "src/"\n' +
+ " },\n" +
+ ' "exclude-from-classmap": [\n' +
+ ' "/tests/"\n' +
+ " ]\n" +
+ " },\n" +
+ ' "autoload-dev": {\n' +
+ ' "psr-4": {\n' +
+ ' "Narrowspark\\\\Library\\\\Tests\\\\": "tests/"\n' +
+ " }\n" +
+ " },\n" +
+ ' "minimum-stability": "dev",\n' +
+ ' "prefer-stable": true,\n' +
+ ' "scripts": {\n' +
+ ' "post-install-cmd": "composer --working-dir=./.build install --lock",\n' +
+ ' "post-update-cmd": "composer --working-dir=./.build update --lock",\n' +
+ ' "changelog": "composer --working-dir=./.build changelog",\n' +
+ ' "coverage": [\n' +
+ ' "phpunit --dump-xdebug-filter=./.build/phpunit/.xdebug-filter.php",\n' +
+ ' "phpunit --prepend=./.build/phpunit/.xdebug-filter.php --coverage-html=./.build/phpunit/coverage"\n' +
+ " ],\n" +
+ ' "cs": "composer --working-dir=./.build cs -- -v",\n' +
+ ' "cs:check": "composer --working-dir=./.build cs:check -- -v",\n' +
+ ' "infection": "composer --working-dir=./.build infection -- --min-covered-msi=73 --min-msi=61",\n' +
+ ' "phpstan": "composer --working-dir=./.build phpstan -- --memory-limit=-1",\n' +
+ ' "phpstan:baseline": "composer --working-dir=./.build phpstan:baseline -- --memory-limit=-1",\n' +
+ ' "psalm": "composer --working-dir=./.build psalm",\n' +
+ ' "psalm:baseline": "composer --working-dir=./.build psalm:baseline",\n' +
+ ' "psalm:fix": "composer --working-dir=./.build psalm:fix",\n' +
+ ' "rector-src": "composer --working-dir=./.build rector-src",\n' +
+ ' "rector-src:fix": "composer --working-dir=./.build rector-src:fix",\n' +
+ ' "rector-tests": "composer --working-dir=./.build rector-tests",\n' +
+ ' "rector-tests:fix": "composer --working-dir=./.build rector-tests:fix",\n' +
+ ' "req:check": "composer --working-dir=./.build req:check",\n' +
+ ' "test": "phpunit"\n' +
+ " },\n" +
+ ' "support": {\n' +
+ ' "issues": "https://github.com/narrowspark/php-library-template/issues",\n' +
+ ' "source": "https://github.com/narrowspark/php-library-template"\n' +
+ " }\n" +
+ "}",
+ );
+ const testFilePathB = createFile(
+ path.join(gitHubWorkspace, "composer.json"),
+ "{\n" +
+ ' "name": "testomat/terminal-colour",\n' +
+ ' "type": "library",\n' +
+ ' "description": "Return your terminal message in style! Change the text style, text color and text background color from the terminal, console or shell interface with ANSI color codes.",\n' +
+ ' "keywords": [\n' +
+ ' "narrowspark",\n' +
+ ' "testomat",\n' +
+ ' "color",\n' +
+ ' "terminal",\n' +
+ ' "colour",\n' +
+ ' "ansi",\n' +
+ ' "style",\n' +
+ ' "truecolor",\n' +
+ ' "color256",\n' +
+ ' "color16"\n' +
+ " ],\n" +
+ ' "homepage": "http://github.com/testomat/terminal-colour",\n' +
+ ' "license": "MIT",\n' +
+ ' "authors": [\n' +
+ " {\n" +
+ ' "name": "Daniel Bannert",\n' +
+ ' "email": "d.bannert@anolilab.de",\n' +
+ ' "homepage": "http://www.anolilab.de",\n' +
+ ' "role": "Developer"\n' +
+ " }\n" +
+ " ],\n" +
+ ' "require": {\n' +
+ ' "php": "^7.3",\n' +
+ ' "thecodingmachine/safe": "^1.1.1"\n' +
+ " },\n" +
+ ' "require-dev": {\n' +
+ ' "ext-json": "*",\n' +
+ ' "phpunit/phpunit": "^9.1.4"\n' +
+ " },\n" +
+ ' "config": {\n' +
+ ' "preferred-install": "dist",\n' +
+ ' "sort-packages": true\n' +
+ " },\n" +
+ ' "extra": {\n' +
+ ' "branch-alias": {\n' +
+ ' "dev-master": "1.1-dev"\n' +
+ " },\n" +
+ ' "prefetcher": {\n' +
+ ' "require": {\n' +
+ ' "phpunit/phpunit": "^8.0 || ^9.0"\n' +
+ " }\n" +
+ " }\n" +
+ " },\n" +
+ ' "autoload": {\n' +
+ ' "psr-4": {\n' +
+ ' "Testomat\\\\TerminalColour\\\\": "src/"\n' +
+ " },\n" +
+ ' "exclude-from-classmap": [\n' +
+ ' "/tests/"\n' +
+ " ]\n" +
+ " },\n" +
+ ' "autoload-dev": {\n' +
+ ' "psr-4": {\n' +
+ ' "Testomat\\\\TerminalColour\\\\Tests\\\\": "tests/"\n' +
+ " }\n" +
+ " },\n" +
+ ' "minimum-stability": "dev",\n' +
+ ' "prefer-stable": true,\n' +
+ ' "scripts": {\n' +
+ ' "changelog": "composer --working-dir=./.build changelog",\n' +
+ ' "coverage": [\n' +
+ ' "phpunit --dump-xdebug-filter=./.build/phpunit/.xdebug-filter.php",\n' +
+ ' "phpunit --prepend=./.build/phpunit/.xdebug-filter.php --coverage-html=./.build/phpunit/coverage"\n' +
+ " ],\n" +
+ ' "cs": "composer --working-dir=./.build cs -- -v",\n' +
+ ' "cs:check": "composer --working-dir=./.build cs:check -- -v",\n' +
+ ' "phpstan": "composer --working-dir=./.build phpstan -- --memory-limit=-1",\n' +
+ ' "psalm": "composer --working-dir=./.build psalm",\n' +
+ ' "psalm:fix": "composer --working-dir=./.build psalm:fix",\n' +
+ ' "infection": "composer --working-dir=./.build infection -- --min-covered-msi=89 --min-msi=89",\n' +
+ ' "rector-src": "composer --working-dir=./.build rector-src",\n' +
+ ' "rector-src:fix": "composer --working-dir=./.build rector-src:fix",\n' +
+ ' "rector-tests": "composer --working-dir=./.build rector-tests",\n' +
+ ' "rector-tests:fix": "composer --working-dir=./.build rector-tests:fix",\n' +
+ ' "test": "phpunit",\n' +
+ ' "post-install-cmd": "composer --working-dir=./.build install --lock",\n' +
+ ' "post-update-cmd": "composer --working-dir=./.build update --lock"\n' +
+ " },\n" +
+ ' "support": {\n' +
+ ' "issues": "https://github.com/testomat/terminal-colour/issues",\n' +
+ ' "source": "https://github.com/testomat/terminal-colour"\n' +
+ " }\n" +
+ "}",
+ );
- settings = new Settings(context)
- settings.templateRepositoryPath = templateRepositoryPath
+ settings = new Settings(context);
+ settings.templateRepositoryPath = templateRepositoryPath;
- await sync(settings)
+ await sync(settings);
- expect(await fs.readFile(testFilePathB, 'utf8')).toBe(
- '{\n' +
- ' "name": "testomat/terminal-colour",\n' +
- ' "type": "library",\n' +
- ' "description": "Return your terminal message in style! Change the text style, text color and text background color from the terminal, console or shell interface with ANSI color codes.",\n' +
- ' "keywords": [\n' +
- ' "narrowspark",\n' +
- ' "testomat",\n' +
- ' "color",\n' +
- ' "terminal",\n' +
- ' "colour",\n' +
- ' "ansi",\n' +
- ' "style",\n' +
- ' "truecolor",\n' +
- ' "color256",\n' +
- ' "color16"\n' +
- ' ],\n' +
- ' "homepage": "http://github.com/testomat/terminal-colour",\n' +
- ' "license": "MIT",\n' +
- ' "authors": [\n' +
- ' {\n' +
- ' "name": "Daniel Bannert",\n' +
- ' "email": "d.bannert@anolilab.de",\n' +
- ' "homepage": "http://www.anolilab.de",\n' +
- ' "role": "Developer"\n' +
- ' }\n' +
- ' ],\n' +
- ' "require": {\n' +
- ' "php": "^7.3",\n' +
- ' "thecodingmachine/safe": "^1.1.1"\n' +
- ' },\n' +
- ' "require-dev": {\n' +
- ' "ext-json": "*",\n' +
- ' "phpunit/phpunit": "^9.1.5",\n' +
- ' "thecodingmachine/phpstan-safe-rule": "^1.0.0"\n' +
- ' },\n' +
- ' "config": {\n' +
- ' "preferred-install": "dist",\n' +
- ' "sort-packages": true\n' +
- ' },\n' +
- ' "extra": {\n' +
- ' "branch-alias": {\n' +
- ' "dev-master": "1.1-dev"\n' +
- ' },\n' +
- ' "prefetcher": {\n' +
- ' "require": {\n' +
- ' "phpunit/phpunit": "^8.0 || ^9.0"\n' +
- ' }\n' +
- ' }\n' +
- ' },\n' +
- ' "autoload": {\n' +
- ' "psr-4": {\n' +
- ' "Testomat\\\\TerminalColour\\\\": "src/"\n' +
- ' },\n' +
- ' "exclude-from-classmap": [\n' +
- ' "/tests/"\n' +
- ' ]\n' +
- ' },\n' +
- ' "autoload-dev": {\n' +
- ' "psr-4": {\n' +
- ' "Testomat\\\\TerminalColour\\\\Tests\\\\": "tests/"\n' +
- ' }\n' +
- ' },\n' +
- ' "minimum-stability": "dev",\n' +
- ' "prefer-stable": true,\n' +
- ' "scripts": {\n' +
- ' "post-install-cmd": "composer --working-dir=./.build install --lock",\n' +
- ' "post-update-cmd": "composer --working-dir=./.build update --lock",\n' +
- ' "changelog": "composer --working-dir=./.build changelog",\n' +
- ' "coverage": [\n' +
- ' "phpunit --dump-xdebug-filter=./.build/phpunit/.xdebug-filter.php",\n' +
- ' "phpunit --prepend=./.build/phpunit/.xdebug-filter.php --coverage-html=./.build/phpunit/coverage"\n' +
- ' ],\n' +
- ' "cs": "composer --working-dir=./.build cs -- -v",\n' +
- ' "cs:check": "composer --working-dir=./.build cs:check -- -v",\n' +
- ' "infection": "composer --working-dir=./.build infection -- --min-covered-msi=73 --min-msi=61",\n' +
- ' "phpstan": "composer --working-dir=./.build phpstan -- --memory-limit=-1",\n' +
- ' "phpstan:baseline": "composer --working-dir=./.build phpstan:baseline -- --memory-limit=-1",\n' +
- ' "psalm": "composer --working-dir=./.build psalm",\n' +
- ' "psalm:baseline": "composer --working-dir=./.build psalm:baseline",\n' +
- ' "psalm:fix": "composer --working-dir=./.build psalm:fix",\n' +
- ' "rector-src": "composer --working-dir=./.build rector-src",\n' +
- ' "rector-src:fix": "composer --working-dir=./.build rector-src:fix",\n' +
- ' "rector-tests": "composer --working-dir=./.build rector-tests",\n' +
- ' "rector-tests:fix": "composer --working-dir=./.build rector-tests:fix",\n' +
- ' "req:check": "composer --working-dir=./.build req:check",\n' +
- ' "test": "phpunit"\n' +
- ' },\n' +
- ' "support": {\n' +
- ' "issues": "https://github.com/testomat/terminal-colour/issues",\n' +
- ' "source": "https://github.com/testomat/terminal-colour"\n' +
- ' }\n' +
- '}'
- )
- })
-})
+ expect(await fs.readFile(testFilePathB, "utf8")).toBe(
+ "{\n" +
+ ' "name": "testomat/terminal-colour",\n' +
+ ' "type": "library",\n' +
+ ' "description": "Return your terminal message in style! Change the text style, text color and text background color from the terminal, console or shell interface with ANSI color codes.",\n' +
+ ' "keywords": [\n' +
+ ' "narrowspark",\n' +
+ ' "testomat",\n' +
+ ' "color",\n' +
+ ' "terminal",\n' +
+ ' "colour",\n' +
+ ' "ansi",\n' +
+ ' "style",\n' +
+ ' "truecolor",\n' +
+ ' "color256",\n' +
+ ' "color16"\n' +
+ " ],\n" +
+ ' "homepage": "http://github.com/testomat/terminal-colour",\n' +
+ ' "license": "MIT",\n' +
+ ' "authors": [\n' +
+ " {\n" +
+ ' "name": "Daniel Bannert",\n' +
+ ' "email": "d.bannert@anolilab.de",\n' +
+ ' "homepage": "http://www.anolilab.de",\n' +
+ ' "role": "Developer"\n' +
+ " }\n" +
+ " ],\n" +
+ ' "require": {\n' +
+ ' "php": "^7.3",\n' +
+ ' "thecodingmachine/safe": "^1.1.1"\n' +
+ " },\n" +
+ ' "require-dev": {\n' +
+ ' "ext-json": "*",\n' +
+ ' "phpunit/phpunit": "^9.1.5",\n' +
+ ' "thecodingmachine/phpstan-safe-rule": "^1.0.0"\n' +
+ " },\n" +
+ ' "config": {\n' +
+ ' "preferred-install": "dist",\n' +
+ ' "sort-packages": true\n' +
+ " },\n" +
+ ' "extra": {\n' +
+ ' "branch-alias": {\n' +
+ ' "dev-master": "1.1-dev"\n' +
+ " },\n" +
+ ' "prefetcher": {\n' +
+ ' "require": {\n' +
+ ' "phpunit/phpunit": "^8.0 || ^9.0"\n' +
+ " }\n" +
+ " }\n" +
+ " },\n" +
+ ' "autoload": {\n' +
+ ' "psr-4": {\n' +
+ ' "Testomat\\\\TerminalColour\\\\": "src/"\n' +
+ " },\n" +
+ ' "exclude-from-classmap": [\n' +
+ ' "/tests/"\n' +
+ " ]\n" +
+ " },\n" +
+ ' "autoload-dev": {\n' +
+ ' "psr-4": {\n' +
+ ' "Testomat\\\\TerminalColour\\\\Tests\\\\": "tests/"\n' +
+ " }\n" +
+ " },\n" +
+ ' "minimum-stability": "dev",\n' +
+ ' "prefer-stable": true,\n' +
+ ' "scripts": {\n' +
+ ' "post-install-cmd": "composer --working-dir=./.build install --lock",\n' +
+ ' "post-update-cmd": "composer --working-dir=./.build update --lock",\n' +
+ ' "changelog": "composer --working-dir=./.build changelog",\n' +
+ ' "coverage": [\n' +
+ ' "phpunit --dump-xdebug-filter=./.build/phpunit/.xdebug-filter.php",\n' +
+ ' "phpunit --prepend=./.build/phpunit/.xdebug-filter.php --coverage-html=./.build/phpunit/coverage"\n' +
+ " ],\n" +
+ ' "cs": "composer --working-dir=./.build cs -- -v",\n' +
+ ' "cs:check": "composer --working-dir=./.build cs:check -- -v",\n' +
+ ' "infection": "composer --working-dir=./.build infection -- --min-covered-msi=73 --min-msi=61",\n' +
+ ' "phpstan": "composer --working-dir=./.build phpstan -- --memory-limit=-1",\n' +
+ ' "phpstan:baseline": "composer --working-dir=./.build phpstan:baseline -- --memory-limit=-1",\n' +
+ ' "psalm": "composer --working-dir=./.build psalm",\n' +
+ ' "psalm:baseline": "composer --working-dir=./.build psalm:baseline",\n' +
+ ' "psalm:fix": "composer --working-dir=./.build psalm:fix",\n' +
+ ' "rector-src": "composer --working-dir=./.build rector-src",\n' +
+ ' "rector-src:fix": "composer --working-dir=./.build rector-src:fix",\n' +
+ ' "rector-tests": "composer --working-dir=./.build rector-tests",\n' +
+ ' "rector-tests:fix": "composer --working-dir=./.build rector-tests:fix",\n' +
+ ' "req:check": "composer --working-dir=./.build req:check",\n' +
+ ' "test": "phpunit"\n' +
+ " },\n" +
+ ' "support": {\n' +
+ ' "issues": "https://github.com/testomat/terminal-colour/issues",\n' +
+ ' "source": "https://github.com/testomat/terminal-colour"\n' +
+ " }\n" +
+ "}",
+ );
+ });
+});
diff --git a/jest.config.js b/jest.config.js
index fc6202c1..64fc9140 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -10,9 +10,4 @@ module.exports = {
roots: ['/__tests__'],
verbose: true,
collectCoverage: true,
- globals: {
- 'ts-jest': {
- packageJson: 'package.json',
- },
- },
}
diff --git a/src/github-action-context.ts b/src/github-action-context.ts
index f77d45fb..9c2ba15e 100644
--- a/src/github-action-context.ts
+++ b/src/github-action-context.ts
@@ -3,8 +3,8 @@ import { IWebhookPayload } from "./interfaces";
import { EOL } from "os";
export class GithubActionContext {
- payload: IWebhookPayload;
- ref: string;
+ private payload: IWebhookPayload;
+ public ref: string;
constructor() {
this.payload = {};
diff --git a/src/settings.ts b/src/settings.ts
index a5794cd8..eb863c26 100644
--- a/src/settings.ts
+++ b/src/settings.ts
@@ -57,7 +57,8 @@ export class Settings implements ISettings {
"LICENSE.md",
"README.md",
"UPGRADE.md",
- ].concat(core.getInput("ignore_list", { required: false }) || []),
+ ].concat(ignoreList),
+ filters,
clean: (core.getInput("clean") || "true").toUpperCase() === "TRUE",
};
}
diff --git a/yarn.lock b/yarn.lock
index 74b31486..bbff953f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1779,20 +1779,6 @@
dependencies:
"@types/yargs-parser" "*"
-"@typescript-eslint/eslint-plugin@>=2.25.0":
- version "4.15.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.2.tgz#981b26b4076c62a5a55873fbef3fe98f83360c61"
- integrity sha512-uiQQeu9tWl3f1+oK0yoAv9lt/KXO24iafxgQTkIYO/kitruILGx3uH+QtIAHqxFV+yIsdnJH+alel9KuE3J15Q==
- dependencies:
- "@typescript-eslint/experimental-utils" "4.15.2"
- "@typescript-eslint/scope-manager" "4.15.2"
- 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/eslint-plugin@^4.14.2":
version "4.15.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.1.tgz#835f64aa0a403e5e9e64c10ceaf8d05c3f015180"
@@ -1819,18 +1805,6 @@
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
-"@typescript-eslint/experimental-utils@4.15.2":
- version "4.15.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.2.tgz#5efd12355bd5b535e1831282e6cf465b9a71cf36"
- integrity sha512-Fxoshw8+R5X3/Vmqwsjc8nRO/7iTysRtDqx6rlfLZ7HbT8TZhPeQqbPjTyk2RheH3L8afumecTQnUc9EeXxohQ==
- dependencies:
- "@types/json-schema" "^7.0.3"
- "@typescript-eslint/scope-manager" "4.15.2"
- "@typescript-eslint/types" "4.15.2"
- "@typescript-eslint/typescript-estree" "4.15.2"
- eslint-scope "^5.0.0"
- eslint-utils "^2.0.0"
-
"@typescript-eslint/experimental-utils@^2.32.0":
version "2.34.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f"
@@ -1852,16 +1826,6 @@
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
-"@typescript-eslint/parser@>=2.25.0", "@typescript-eslint/parser@^4.15.2":
- version "4.15.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.15.2.tgz#c804474321ef76a3955aec03664808f0d6e7872e"
- integrity sha512-SHeF8xbsC6z2FKXsaTb1tBCf0QZsjJ94H6Bo51Y1aVEZ4XAefaw5ZAilMoDPlGghe+qtq7XdTiDlGfVTOmvA+Q==
- dependencies:
- "@typescript-eslint/scope-manager" "4.15.2"
- "@typescript-eslint/types" "4.15.2"
- "@typescript-eslint/typescript-estree" "4.15.2"
- debug "^4.1.1"
-
"@typescript-eslint/parser@^4.14.2":
version "4.15.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.15.1.tgz#4c91a0602733db63507e1dbf13187d6c71a153c4"
@@ -1872,6 +1836,16 @@
"@typescript-eslint/typescript-estree" "4.15.1"
debug "^4.1.1"
+"@typescript-eslint/parser@^4.15.2":
+ version "4.15.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.15.2.tgz#c804474321ef76a3955aec03664808f0d6e7872e"
+ integrity sha512-SHeF8xbsC6z2FKXsaTb1tBCf0QZsjJ94H6Bo51Y1aVEZ4XAefaw5ZAilMoDPlGghe+qtq7XdTiDlGfVTOmvA+Q==
+ dependencies:
+ "@typescript-eslint/scope-manager" "4.15.2"
+ "@typescript-eslint/types" "4.15.2"
+ "@typescript-eslint/typescript-estree" "4.15.2"
+ debug "^4.1.1"
+
"@typescript-eslint/scope-manager@4.15.1":
version "4.15.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.15.1.tgz#f6511eb38def2a8a6be600c530c243bbb56ac135"
@@ -3549,11 +3523,6 @@ escodegen@^1.14.1:
optionalDependencies:
source-map "~0.6.1"
-eslint-config-prettier@>=6.10.1:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.0.0.tgz#024d661444319686c588c8849c8da33815dbdb1c"
- integrity sha512-5EaAVPsIHu+grmm5WKjxUia4yHgRrbkd8I0ffqUSwixCPMVBrbS97UnzlEY/Q7OWo584vgixefM0kJnUfo/VjA==
-
eslint-import-resolver-node@^0.3.4:
version "0.3.4"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717"
@@ -3617,7 +3586,7 @@ eslint-plugin-es@^3.0.0:
eslint-utils "^2.0.0"
regexpp "^3.0.0"
-eslint-plugin-eslint-comments@>=3.0.1, eslint-plugin-eslint-comments@^3.2.0:
+eslint-plugin-eslint-comments@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz#9e1cd7b4413526abb313933071d7aba05ca12ffa"
integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==
@@ -3625,22 +3594,7 @@ eslint-plugin-eslint-comments@>=3.0.1, eslint-plugin-eslint-comments@^3.2.0:
escape-string-regexp "^1.0.5"
ignore "^5.0.5"
-eslint-plugin-github@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-github/-/eslint-plugin-github-4.1.1.tgz#d3e38dbe3610043066edca622eb944aa02b09aee"
- integrity sha512-MzCh4P4zVvR/13AHtumzZ3znq0cbUE7lXehyBEpFURD/EHdx/+7qW+0c+ySTrteImpX9LGLJFTYNtu10BifkbQ==
- dependencies:
- "@typescript-eslint/eslint-plugin" ">=2.25.0"
- "@typescript-eslint/parser" ">=2.25.0"
- eslint-config-prettier ">=6.10.1"
- eslint-plugin-eslint-comments ">=3.0.1"
- eslint-plugin-import ">=2.20.1"
- eslint-plugin-prettier ">=3.1.2"
- eslint-rule-documentation ">=1.0.0"
- prettier ">=1.12.0"
- svg-element-attributes ">=1.3.1"
-
-eslint-plugin-import@>=2.20.1, eslint-plugin-import@^2.22.1:
+eslint-plugin-import@^2.22.1:
version "2.22.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702"
integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==
@@ -3680,7 +3634,7 @@ eslint-plugin-jest-formatting@^2.0.1:
resolved "https://registry.yarnpkg.com/eslint-plugin-jest-formatting/-/eslint-plugin-jest-formatting-2.0.1.tgz#8f4297bf5b6c2cdd9b2c20a57892f0302b52c20a"
integrity sha512-t6oc6GcXqzQ4lwatnVoKxGTLqo8kFIdA5kpaS3mrkwnTNxhsgFo9reMFdrtNtllx72ohNUsXsay7RJR/LLLk3Q==
-eslint-plugin-jest@^24.1.3, eslint-plugin-jest@^24.1.5:
+eslint-plugin-jest@^24.1.3:
version "24.1.5"
resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.1.5.tgz#1e866a9f0deac587d0a3d5d7cefe99815a580de2"
integrity sha512-FIP3lwC8EzEG+rOs1y96cOJmMVpdFNreoDJv29B5vIupVssRi8zrSY3QadogT0K3h1Y8TMxJ6ZSAzYUmFCp2hg==
@@ -3784,13 +3738,6 @@ eslint-plugin-prefer-object-spread@^1.2.1:
resolved "https://registry.yarnpkg.com/eslint-plugin-prefer-object-spread/-/eslint-plugin-prefer-object-spread-1.2.1.tgz#27fb91853690cceb3ae6101d9c8aecc6a67a402c"
integrity sha1-J/uRhTaQzOs65hAdnIrsxqZ6QCw=
-eslint-plugin-prettier@>=3.1.2:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7"
- integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ==
- dependencies:
- prettier-linter-helpers "^1.0.0"
-
eslint-plugin-promise@^4.2.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz#61485df2a359e03149fdafc0a68b0e030ad2ac45"
@@ -3897,11 +3844,6 @@ eslint-rule-composer@^0.3.0:
resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9"
integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==
-eslint-rule-documentation@>=1.0.0:
- version "1.0.23"
- resolved "https://registry.yarnpkg.com/eslint-rule-documentation/-/eslint-rule-documentation-1.0.23.tgz#4e0886145597a78d24524ec7e0cf18c6fedc23a8"
- integrity sha512-pWReu3fkohwyvztx/oQWWgld2iad25TfUdi6wvhhaDPIQjHU/pyvlKgXFw1kX31SQK2Nq9MH+vRDWB0ZLy8fYw==
-
eslint-scope@5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5"
@@ -4185,11 +4127,6 @@ fast-deep-equal@^3.1.1:
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-fast-diff@^1.1.2:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
- integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
-
fast-glob@^3.1.1:
version "3.2.5"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"
@@ -7298,14 +7235,7 @@ prepend-http@^2.0.0:
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
-prettier-linter-helpers@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"
- integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==
- dependencies:
- fast-diff "^1.1.2"
-
-prettier@>=1.12.0, prettier@^2.2.1:
+prettier@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5"
integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==
@@ -8645,11 +8575,6 @@ supports-hyperlinks@^2.0.0:
has-flag "^4.0.0"
supports-color "^7.0.0"
-svg-element-attributes@>=1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/svg-element-attributes/-/svg-element-attributes-1.3.1.tgz#0c55afac6284291ab563d0913c062cf78a8c0ddb"
- integrity sha512-Bh05dSOnJBf3miNMqpsormfNtfidA/GxQVakhtn0T4DECWKeXQRQUceYjJ+OxYiiLdGe4Jo9iFV8wICFapFeIA==
-
symbol-tree@^3.2.4:
version "3.2.4"
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
From 298f0241edd751e75f698983863ec8722bfd6f03 Mon Sep 17 00:00:00 2001
From: prisis
Date: Mon, 1 Mar 2021 19:09:39 +0100
Subject: [PATCH 21/21] feat: added utf-32
---
package.json | 1 -
src/diff/assert-safe.ts | 25 +++++
src/diff/common-prefix.ts | 11 ++-
src/diff/common-suffix.ts | 15 ++-
src/diff/diff-chars-to-lines.ts | 22 +++--
src/diff/diff-lines-to-chars.ts | 13 ++-
src/diff/diff-match-patch.ts | 129 +++++++++++++++++---------
src/diff/utf32.ts | 156 ++++++++++++++++++++++++++++++++
8 files changed, 312 insertions(+), 60 deletions(-)
create mode 100644 src/diff/assert-safe.ts
create mode 100644 src/diff/utf32.ts
diff --git a/package.json b/package.json
index b4a86c79..229da7fa 100644
--- a/package.json
+++ b/package.json
@@ -56,7 +56,6 @@
"@octokit/action": "^3.4.0",
"@octokit/plugin-retry": "^3.0.7",
"@octokit/core": "^3.2.5",
- "diff": "^5.0.0",
"filehound": "^1.17.4",
"fs-extra": "^9.1.0",
"uuid": "^8.3.2",
diff --git a/src/diff/assert-safe.ts b/src/diff/assert-safe.ts
new file mode 100644
index 00000000..14b2e97b
--- /dev/null
+++ b/src/diff/assert-safe.ts
@@ -0,0 +1,25 @@
+import { Utf32 } from "./utf32";
+
+const assertSafe = (obj: any) => {
+ if (obj.codePoints) {
+ return;
+ }
+
+ if (typeof obj === "string") {
+ console.assert(!Utf32.hasSupplemental(obj), obj);
+ }
+
+ if (typeof obj === "object") {
+ for (let i = 0; i < obj.length; i++) {
+ assertSafe(obj[i]);
+ }
+ }
+
+ if (typeof obj === "number") {
+ return;
+ }
+
+ console.assert("Unknown object type", obj);
+};
+
+export default assertSafe;
diff --git a/src/diff/common-prefix.ts b/src/diff/common-prefix.ts
index 206b35cd..8d8892c7 100644
--- a/src/diff/common-prefix.ts
+++ b/src/diff/common-prefix.ts
@@ -18,6 +18,8 @@
* @author fraser@google.com (Neil Fraser)
*/
+import {Utf32} from './utf32'
+
/**
* Determine the common prefix of two strings.
*
@@ -32,6 +34,13 @@ export const commonPrefix = (text1: string, text2: string): number => {
if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {
return 0;
}
+
+ // Check for Unicode
+ if (Utf32.hasSupplemental(text1) || Utf32.hasSupplemental(text2)) {
+ text1 = Utf32.from(text1);
+ text2 = Utf32.from(text2);
+ }
+
// Binary search.
// Performance analysis: https://neil.fraser.name/news/2007/10/09/
let pointerMin = 0;
@@ -40,7 +49,7 @@ export const commonPrefix = (text1: string, text2: string): number => {
let pointerStart = 0;
while (pointerMin < pointerMid) {
- if (text1.substring(pointerStart, pointerMid) == text2.substring(pointerStart, pointerMid)) {
+ if (text1.substring(pointerStart, pointerMid).toString() == text2.substring(pointerStart, pointerMid).toString()) {
pointerMin = pointerMid;
pointerStart = pointerMin;
} else {
diff --git a/src/diff/common-suffix.ts b/src/diff/common-suffix.ts
index 268df7a9..dd02fbdc 100644
--- a/src/diff/common-suffix.ts
+++ b/src/diff/common-suffix.ts
@@ -18,6 +18,8 @@
* @author fraser@google.com (Neil Fraser)
*/
+import { Utf32 } from "./utf32";
+
/**
* Determine the common suffix of two strings.
*
@@ -26,11 +28,18 @@
*
* @return {number} The number of characters common to the end of each string.
*/
-export const commonSuffix = (text1: string, text2: string): number => {
+export const commonSuffix = (text1: string | Utf32, text2: string | Utf32): number => {
// Quick check for common null cases.
if (!text1 || !text2 || text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {
return 0;
}
+
+ // Check for Unicode
+ if (Utf32.hasSupplemental(text1) || Utf32.hasSupplemental(text2)) {
+ text1 = Utf32.from(text1 as string);
+ text2 = Utf32.from(text2 as string);
+ }
+
// Binary search.
// Performance analysis: https://neil.fraser.name/news/2007/10/09/
let pointerMin = 0;
@@ -40,8 +49,8 @@ export const commonSuffix = (text1: string, text2: string): number => {
while (pointerMin < pointerMid) {
if (
- text1.substring(text1.length - pointerMid, text1.length - pointerEnd) ==
- text2.substring(text2.length - pointerMid, text2.length - pointerEnd)
+ text1.substring(text1.length - pointerMid, text1.length - pointerEnd).toString() ==
+ text2.substring(text2.length - pointerMid, text2.length - pointerEnd).toString()
) {
pointerMin = pointerMid;
pointerEnd = pointerMin;
diff --git a/src/diff/diff-chars-to-lines.ts b/src/diff/diff-chars-to-lines.ts
index 276b30d7..283c4488 100644
--- a/src/diff/diff-chars-to-lines.ts
+++ b/src/diff/diff-chars-to-lines.ts
@@ -19,6 +19,7 @@
*/
import { Diff } from "./diff";
+import assertSafe from './assert-safe'
/**
* Rehydrate the text in a diff from a string of line hashes to real lines of
@@ -28,14 +29,23 @@ import { Diff } from "./diff";
* @param {!Array.} lineArray Array of unique strings.
*/
export const diffCharsToLines = (diffs: Diff[], lineArray: string[]) => {
- for (let i = 0; i < diffs.length; i++) {
- const chars = diffs[i].text;
- const text: string[] = [];
+ assertSafe(lineArray)
- for (let j = 0; j < chars.length; j++) {
- text[j] = lineArray[chars.charCodeAt(j)];
+ for (let x = 0; x < diffs.length; x++) {
+ const chars = diffs[x].text;
+ let text;
+
+ if (chars.length === 0) {
+ // don't lose string type (regular or utf32_string)
+ text = lineArray[0].substring(0, 0);
+ } else {
+ text = lineArray[chars.charCodeAt(0)]
+ }
+
+ for (let y = 1; y < chars.length; y++) {
+ text = text.concat(lineArray[chars.charCodeAt(y)]);
}
- diffs[i].text = text.join("");
+ diffs[x].text = text;
}
};
diff --git a/src/diff/diff-lines-to-chars.ts b/src/diff/diff-lines-to-chars.ts
index b5cbad35..89d64fb1 100644
--- a/src/diff/diff-lines-to-chars.ts
+++ b/src/diff/diff-lines-to-chars.ts
@@ -17,6 +17,7 @@
*
* @author fraser@google.com (Neil Fraser)
*/
+import assertSafe from "./assert-safe";
interface IOutput {
chars1: string;
@@ -37,12 +38,15 @@ interface IOutput {
* The zeroth element of the array of unique strings is intentionally blank.
*/
export const diffLinesToChars = (text1: string, text2: string): IOutput => {
+ assertSafe(text1);
+ assertSafe(text2);
+
const lineArray: string[] = []; // e.g. lineArray[4] == 'Hello\n'
const lineHash: { [key: string]: number } = {}; // e.g. lineHash['Hello\n'] == 4
// '\x00' is a valid character, but various debuggers don't like it.
// So we'll insert a junk entry to avoid generating a null character.
- lineArray[0] = "";
+ lineArray[0] = text1.substring(0, 0);
/**
* Split a text into an array of strings. Reduce the texts to a string of
@@ -70,9 +74,10 @@ export const diffLinesToChars = (text1: string, text2: string): IOutput => {
}
let line = text.substring(lineStart, lineEnd + 1);
+ const lineKey = line.toString();
- if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) : lineHash[line] !== undefined) {
- chars += String.fromCharCode(lineHash[line]);
+ if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(lineKey) : lineHash[lineKey] !== undefined) {
+ chars += String.fromCharCode(lineHash[lineKey]);
} else {
if (lineArrayLength == maxLines) {
// Bail out at 65535 because
@@ -82,7 +87,7 @@ export const diffLinesToChars = (text1: string, text2: string): IOutput => {
}
chars += String.fromCharCode(lineArrayLength);
- lineHash[line] = lineArrayLength;
+ lineHash[lineKey] = lineArrayLength;
lineArray[lineArrayLength++] = line;
}
diff --git a/src/diff/diff-match-patch.ts b/src/diff/diff-match-patch.ts
index 9c91b8b1..423493af 100644
--- a/src/diff/diff-match-patch.ts
+++ b/src/diff/diff-match-patch.ts
@@ -32,6 +32,8 @@ import { diffCommonOverlap } from "./diff-common-overlap";
import { matchAlphabet } from "./match-alphabet";
import { patchDeepObjectCopy } from "./patch-deep-object-copy";
import { diffText } from "./diff-text";
+import { Utf32 } from "./utf32";
+import assertSafe from './assert-safe'
export default class DiffMatchPatch {
DiffTimeout: number;
@@ -49,6 +51,12 @@ export default class DiffMatchPatch {
private static blankLineEndRegex = /\n\r?\n$/;
private static blankLineStartRegex = /^\r?\n\r?\n/;
+ // Maximum length of a match for blank line regexes
+ private static blankLineEndRegexMaxLength = 3;
+ private static blankLineStartRegexMaxLength = 4;
+
+ private utf32: Utf32;
+
constructor() {
// Defaults.
// Redefine these in your program to override the defaults.
@@ -73,6 +81,8 @@ export default class DiffMatchPatch {
// The number of bits in an int.
this.MatchMaxBits = 32;
+
+ this.utf32 = new Utf32();
}
/**
@@ -103,7 +113,7 @@ export default class DiffMatchPatch {
const deadline = optDeadline;
// Check for equality (speedup).
- if (text1 == text2) {
+ if (text1.toString() == text2.toString()) {
if (text1 !== "") {
return [new Diff(DIFF_EQUAL, text1)];
}
@@ -111,6 +121,12 @@ export default class DiffMatchPatch {
return [];
}
+ // Check for Unicode
+ if (Utf32.hasSupplemental(text1) || Utf32.hasSupplemental(text2)) {
+ text1 = this.utf32.from(text1);
+ text2 = this.utf32.from(text2);
+ }
+
if (typeof optCheckLines == "undefined") {
optCheckLines = true;
}
@@ -137,11 +153,11 @@ export default class DiffMatchPatch {
const diffs = this.diffCompute(text1, text2, checkLines, deadline);
// Restore the prefix and suffix.
- if (prefix) {
+ if (prefix.length) {
diffs.unshift(new Diff(DIFF_EQUAL, prefix));
}
- if (suffix) {
+ if (suffix.length) {
diffs.push(new Diff(DIFF_EQUAL, suffix));
}
@@ -243,6 +259,9 @@ export default class DiffMatchPatch {
* @private
*/
private diffLineMode(text1: string, text2: string, deadline: number): Diff[] {
+ assertSafe(text1);
+ assertSafe(text2);
+
// Scan the text on a line-by-line basis first.
const a = diffLinesToChars(text1, text2);
text1 = a.chars1;
@@ -322,6 +341,9 @@ export default class DiffMatchPatch {
* @private
*/
private diffBisect(text1: string, text2: string, deadline: number): Diff[] {
+ assertSafe(text1);
+ assertSafe(text2);
+
// Cache the text lengths to prevent multiple calls.
const text1Length = text1.length;
const text2Length = text2.length;
@@ -467,6 +489,9 @@ export default class DiffMatchPatch {
* @private
*/
private diffBisectSplit(text1: string, text2: string, x: number, y: number, deadline: number): Diff[] {
+ assertSafe(text1);
+ assertSafe(text2);
+
const text1a = text1.substring(0, x);
const text2a = text2.substring(0, y);
const text1b = text1.substring(x);
@@ -717,17 +742,18 @@ export default class DiffMatchPatch {
*/
private cleanupSemanticLossless(diffs: Diff[]) {
/**
- * Given two strings, compute a score representing whether the internal
+ * Given a string and a boundary, compute a score representing whether the
* boundary falls on logical boundaries.
* Scores range from 6 (best) to 0 (worst).
* Closure, but does not reference any external variables.
- * @param {string} one First string.
- * @param {string} two Second string.
+ *
+ * @param {string} buffer String containing the boundary and surrounding text.
+ * @param {number} index Index of the boundary.
* @return {number} The score.
* @private
*/
- function diffCleanupSemanticScore(one: string, two: string): number {
- if (!one || !two) {
+ function diffCleanupSemanticScore(buffer: string, index: number): number {
+ if (index === 0 || index === buffer.length) {
// Edges are the best.
return 6;
}
@@ -737,16 +763,24 @@ export default class DiffMatchPatch {
// 'whitespace'. Since this function's purpose is largely cosmetic,
// the choice has been made to use each language's native features
// rather than force total conformity.
- const char1 = one.charAt(one.length - 1);
- const char2 = two.charAt(0);
+ const char1 = buffer.charAt(index - 1);
+ const char2 = buffer.charAt(index);
const nonAlphaNumeric1 = char1.match(DiffMatchPatch.nonAlphaNumericRegex);
const nonAlphaNumeric2 = char2.match(DiffMatchPatch.nonAlphaNumericRegex);
const whitespace1 = nonAlphaNumeric1 && char1.match(DiffMatchPatch.whitespaceRegex);
const whitespace2 = nonAlphaNumeric2 && char2.match(DiffMatchPatch.whitespaceRegex);
const lineBreak1 = whitespace1 && char1.match(DiffMatchPatch.linebreakRegex);
const lineBreak2 = whitespace2 && char2.match(DiffMatchPatch.linebreakRegex);
- const blankLine1 = lineBreak1 && one.match(DiffMatchPatch.blankLineEndRegex);
- const blankLine2 = lineBreak2 && two.match(DiffMatchPatch.blankLineStartRegex);
+ const blankLine1 =
+ lineBreak1 &&
+ buffer
+ .substring(index - DiffMatchPatch.blankLineEndRegexMaxLength, index)
+ .match(DiffMatchPatch.blankLineEndRegex);
+ const blankLine2 =
+ lineBreak2 &&
+ buffer
+ .substring(index, index + DiffMatchPatch.blankLineStartRegexMaxLength)
+ .match(DiffMatchPatch.blankLineStartRegex);
if (blankLine1 || blankLine2) {
// Five points for blank lines.
@@ -777,51 +811,47 @@ export default class DiffMatchPatch {
let equality1 = diffs[pointer - 1].text;
let edit = diffs[pointer].text;
let equality2 = diffs[pointer + 1].text;
+ let buffer = equality1 + edit + equality2;
// First, shift the edit as far left as possible.
- const commonOffset = commonSuffix(equality1, edit);
- if (commonOffset) {
- const commonString = edit.substring(edit.length - commonOffset);
-
- equality1 = equality1.substring(0, equality1.length - commonOffset);
- edit = commonString + edit.substring(0, edit.length - commonOffset);
- equality2 = commonString + equality2;
- }
+ let offsetLeft = commonSuffix(equality1, edit);
+ let offsetRight = commonPrefix(edit, equality2);
+ let originalEditStart = equality1.length;
+ let editStart = originalEditStart - offsetLeft;
+ let maxEditStart = originalEditStart + offsetRight;
+ let editEnd = editStart + edit.length;
// Second, step character by character right, looking for the best fit.
- let bestEquality1 = equality1;
- let bestEdit = edit;
- let bestEquality2 = equality2;
- let bestScore = diffCleanupSemanticScore(equality1, edit) + diffCleanupSemanticScore(edit, equality2);
+ let bestEditStart = editStart;
+ let bestEditEnd = editEnd;
+ let bestScore = diffCleanupSemanticScore(buffer, editStart) + diffCleanupSemanticScore(buffer, editEnd);
+
+ while (editStart < maxEditStart) {
+ editStart += 1;
+ editEnd += 1;
- while (edit.charAt(0) === equality2.charAt(0)) {
- equality1 += edit.charAt(0);
- edit = edit.substring(1) + equality2.charAt(0);
- equality2 = equality2.substring(1);
+ const score =
+ diffCleanupSemanticScore(buffer, editStart) + diffCleanupSemanticScore(buffer, editEnd);
- const score = diffCleanupSemanticScore(equality1, edit) + diffCleanupSemanticScore(edit, equality2);
// The >= encourages trailing rather than leading whitespace on edits.
if (score >= bestScore) {
bestScore = score;
- bestEquality1 = equality1;
- bestEdit = edit;
- bestEquality2 = equality2;
+ bestEditStart = editStart;
+ bestEditEnd = editEnd;
}
}
- if (diffs[pointer - 1].text != bestEquality1) {
+ if (bestEditStart != originalEditStart) {
// We have an improvement, save it back to the diff.
- if (bestEquality1) {
- diffs[pointer - 1].text = bestEquality1;
+ if (bestEditStart > 0) {
+ diffs[pointer - 1][1] = buffer.substring(0, bestEditStart);
} else {
diffs.splice(pointer - 1, 1);
pointer--;
}
-
- diffs[pointer].text = bestEdit;
-
- if (bestEquality2) {
- diffs[pointer + 1].text = bestEquality2;
+ diffs[pointer][1] = buffer.substring(bestEditStart, bestEditEnd);
+ if (bestEditEnd < buffer.length) {
+ diffs[pointer + 1][1] = buffer.substring(bestEditEnd);
} else {
diffs.splice(pointer + 1, 1);
pointer--;
@@ -1024,6 +1054,8 @@ export default class DiffMatchPatch {
* @return {number} Best match index or -1.
*/
private matchBiTap(text: string, pattern: string, loc: number): number {
+ assertSafe(text);
+
if (pattern.length > this.MatchMaxBits) {
throw new Error("Pattern too long for this browser.");
}
@@ -1175,7 +1207,7 @@ export default class DiffMatchPatch {
let charCount2 = 0; // Number of characters into the text2 string.
// Start with text1 (prePatchText) and apply the diffs until we arrive at
- // text2 (postPatchText). We recreate the patches one by one to determine
+ // text2 (postPatchText). We recreate the patches one by one to determine
// context info.
let prePatchText = text1;
let postPatchText = text1;
@@ -1195,13 +1227,13 @@ export default class DiffMatchPatch {
patch.diffs[patchDiffLength++] = diffs[x];
patch.length2 += diffText.length;
postPatchText =
- postPatchText.substring(0, charCount2) + diffText + postPatchText.substring(charCount2);
+ postPatchText.substring(0, charCount2).concat(diffText, postPatchText.substring(charCount2));
break;
case DIFF_DELETE:
patch.length1 += diffText.length;
patch.diffs[patchDiffLength++] = diffs[x];
postPatchText =
- postPatchText.substring(0, charCount2) + postPatchText.substring(charCount2 + diffText.length);
+ postPatchText.substring(0, charCount2).concat(postPatchText.substring(charCount2 + diffText.length));
break;
case DIFF_EQUAL:
if (diffText.length <= 2 * this.PatchMargin && patchDiffLength && diffs.length != x + 1) {
@@ -1228,6 +1260,11 @@ export default class DiffMatchPatch {
break;
}
+ // Check for Unicode
+ if (this.utf32.hasSupplemental(text)) {
+ text = this.utf32.from(text);
+ }
+
// Update the current character count.
if (diffType !== DIFF_INSERT) {
charCount1 += diffText.length;
@@ -1563,6 +1600,8 @@ export default class DiffMatchPatch {
* @private
*/
private patchAddContext(patch: PatchObject, text: string) {
+ assertSafe(text);
+
if (text.length == 0) {
return;
}
@@ -1589,14 +1628,14 @@ export default class DiffMatchPatch {
// Add the prefix.
const prefix = text.substring(patch.start2 - padding, patch.start2);
- if (prefix) {
+ if (prefix.length) {
patch.diffs.unshift(new Diff(DIFF_EQUAL, prefix));
}
// Add the suffix.
const suffix = text.substring(patch.start2 + patch.length1, patch.start2 + patch.length1 + padding);
- if (suffix) {
+ if (suffix.length) {
patch.diffs.push(new Diff(DIFF_EQUAL, suffix));
}
diff --git a/src/diff/utf32.ts b/src/diff/utf32.ts
new file mode 100644
index 00000000..c54e1dfd
--- /dev/null
+++ b/src/diff/utf32.ts
@@ -0,0 +1,156 @@
+export class Utf32 {
+ public static force_utf32_string: boolean = false;
+
+ public string: string = "";
+ public codePoints: (number | undefined)[];
+ public length: number = 0;
+
+ constructor() {
+ this.string = "";
+ this.codePoints = [];
+ this.length = 0;
+ }
+
+ public static hasSupplemental(text: string | Utf32): boolean {
+ // Require at least String.prototype.codePointAt(), ES5+
+ if (!String.prototype.codePointAt) {
+ return false;
+ }
+
+ if (text.codePoints) {
+ // Argument is another utf32_string; do not re-convert
+ return false;
+ }
+
+ if (Utf32.force_utf32_string) {
+ // Override: force utf32_string conversion
+ return true;
+ }
+
+ for (let i = 0; i < text.length; i++) {
+ const ch = text.charCodeAt(i);
+
+ if (ch >= 0xd800 && ch <= 0xdfff) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public static from(text: string): Utf32 {
+ const result = new Utf32();
+
+ for (let i = 0; i < text.length; i++) {
+ const cp = text.codePointAt(i);
+
+ result.codePoints.push(cp);
+
+ if (cp !== undefined && cp > 0xffff) {
+ i++;
+ }
+ }
+
+ result.string = text;
+ result.length = result.codePoints.length;
+
+ return result;
+ }
+
+ charAt(i: number) {
+ if (i < 0 || i >= this.length) {
+ return "";
+ }
+
+ return String.fromCodePoint(this.codePoints[i]);
+ }
+
+ charCodeAt(i: number) {
+ if (i < 0 || i >= this.length) {
+ return 0;
+ }
+
+ return this.codePoints[i];
+ }
+
+ substring(start, end) {
+ const result = new Utf32();
+ // Implemented according to String.substring specification:
+ // https://www.ecma-international.org/ecma-262/5.1/#sec-15.5.4.15
+ let len = this.length;
+ // TODO: Check for integers like the spec says?
+ const intStart = start;
+ const intEnd = typeof end === "undefined" ? len : end;
+ const finalStart = Math.min(Math.max(intStart, 0), len);
+ const finalEnd = Math.min(Math.max(intEnd, 0), len);
+ const from = Math.min(finalStart, finalEnd);
+ const to = Math.max(finalStart, finalEnd);
+
+ // Compute the indices for the actual substring; we must maintain the string
+ // because toString() operations are expected to be fast.
+ let stringFrom = 0;
+
+ for (let i = 0; i < from; i++) {
+ stringFrom += this.codePoints[i] <= 0xffff ? 1 : 2;
+ }
+
+ let stringTo = stringFrom;
+
+ for (let i = from; i < to; i++) {
+ stringTo += this.codePoints[i] <= 0xffff ? 1 : 2;
+ }
+
+ result.string = this.string.substring(stringFrom, stringTo);
+ result.codePoints = this.codePoints.slice(from, to);
+ result.length = result.codePoints.length;
+
+ return result;
+ }
+
+ indexOf(other, start) {
+ return this.string.indexOf(other.toString(), start);
+ }
+
+ lastIndexOf(other, start) {
+ return this.string.lastIndexOf(other.toString(), start);
+ }
+
+ concat() {
+ if (arguments.length > 1) {
+ const first = this.concat(arguments[0]);
+
+ return first.concat.apply(first, Array.prototype.slice.call(arguments, 1));
+ }
+
+ // Make sure input is a utf32_string
+ let other = arguments[0];
+
+ if (!other.codePoints) {
+ other = this.from(other);
+ }
+
+ const result = new Utf32();
+
+ result.string = this.string + other.string;
+ result.codePoints = [].concat(this.codePoints, other.codePoints);
+ result.length = result.codePoints.length;
+
+ return result;
+ }
+
+ match() {
+ return this.string.match.apply(this.string, arguments);
+ }
+
+ replace() {
+ return this.from(this.string.replace.apply(this.string, arguments));
+ }
+
+ valueOf() {
+ throw new Error("warning: implicit conversion attempted on utf32_string; use toString instead");
+ }
+
+ toString() {
+ return this.string;
+ }
+}