diff --git a/.gitattributes b/.gitattributes
index dc1f539b..dcab098d 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -7,4 +7,6 @@
*.css linguist-detectable=false
*.json linguist-detectable=false
*.yaml linguist-detectable=false
-*.md linguist-detectable=false
\ No newline at end of file
+*.md linguist-detectable=false
+*.sh linguist-detectable=false
+*.hbs linguist-detectable=false
\ No newline at end of file
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index ee820524..656cc3c3 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -28,7 +28,7 @@ jobs:
cache: "pnpm"
- name: Install Dependencies
- run: pnpm i
+ run: pnpm i --only=dev
- name: Check Spelling
run: pnpm spell:check
diff --git a/.github/workflows/danger.yml b/.github/workflows/danger.yml
new file mode 100644
index 00000000..0eb1cf92
--- /dev/null
+++ b/.github/workflows/danger.yml
@@ -0,0 +1,32 @@
+name: Danger JS
+
+on: [pull_request]
+
+jobs:
+ pr-checks:
+ runs-on: windows-2022
+
+ strategy:
+ matrix:
+ node: [12, 14, 16]
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - uses: pnpm/action-setup@v2.0.1
+ with:
+ version: latest
+
+ - name: Use NodeJS ${{ matrix.node }} & Cache
+ uses: actions/setup-node@v2
+ with:
+ node-version: ${{ matrix.node }}
+ cache: "pnpm"
+
+ - name: Install Dependencies
+ run: pnpm i --only=dev
+
+ - name: Danger Checks
+ run: pnpm exec danger ci
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/size.yml b/.github/workflows/size.yml
deleted file mode 100644
index d44e1e78..00000000
--- a/.github/workflows/size.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-name: Compressed Size Check
-
-on:
- pull_request:
- branches: ["master"]
-
-jobs:
- size:
- runs-on: windows-2022
-
- steps:
- - uses: actions/checkout@v2
-
- - uses: pnpm/action-setup@v2.0.1
- with:
- version: latest
-
- - uses: preactjs/compressed-size-action@v2
- with:
- repo-token: "${{ secrets.GITHUB_TOKEN }}"
- pattern: "**/build/**/*.js"
- exclude: "{**/*.map,**/node_modules/**}"
diff --git a/.husky/commit-msg b/.husky/commit-msg
new file mode 100644
index 00000000..10cb5510
--- /dev/null
+++ b/.husky/commit-msg
@@ -0,0 +1,4 @@
+#!/bin/sh
+. "$(dirname "$0")/_/husky.sh"
+
+pnpm commitlint --edit "$1"
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 00000000..f21a039a
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,10 @@
+build
+coverage
+dist
+node_modules
+
+**/*.hbs
+
+# Cache
+.eslintcache
+.stylelintcache
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 838944c0..e16fa4c3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,17 +1,68 @@
# Change Log
-All notable changes to the TabMerger extension will be documented in this file.
+All notable changes to TabMerger will be documented in this file.
-## [v2.0.0](https://github.com/lbragile/TabMerger/tree/v2.0.0) - Mar 6, 2021
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and TabMerger adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [Unreleased](https://github.com/lbragile/TabMerger/compare/v2.0.0...HEAD) (11 January 2022)
+
+### Added
+
+- Color Picker [`e3af217`](https://github.com/lbragile/TabMerger/commit/e3af2178d456e106e304186abec5082ad7ee43a9)
+- Import Functionality [`7fc174c`](https://github.com/lbragile/TabMerger/commit/7fc174c8f031b3874b8c781d93ac37ce7e90caa7)
+- HTML export logic - note about downloads folder & copy indicator [`3423a6d`](https://github.com/lbragile/TabMerger/commit/3423a6dee2753259dc4001ce83046d80f63ceb1c)
+- Dynamic link to extension settings page [`7d1796b`](https://github.com/lbragile/TabMerger/commit/7d1796b508f65145a923776be3d53eb2739a4f98)
+- Duplicate, merge, replace, and unite functionality to groups [`35cb0c8`](https://github.com/lbragile/TabMerger/commit/35cb0c8d70a03754c7dce77d7398dd36999ffee3)
+- Window favorite and incognito [`4fa8c8b`](https://github.com/lbragile/TabMerger/commit/4fa8c8bb1e531daea444190670382b7eba8b8a85)
+- Settings dropdown along with basic functionality for its items [`3fe0e87`](https://github.com/lbragile/TabMerger/commit/3fe0e87f066f5477a6649c521570086a1a467c06)
+- Close window and tab functionality [`07005dc`](https://github.com/lbragile/TabMerger/commit/07005dcb13b74eb8571e62923f96071a4e4b8a44)
+- Logic to remove empty source windows on dnd [`fb386c7`](https://github.com/lbragile/TabMerger/commit/fb386c76494c74ac94904f51a49cdf097d42f88f)
+- Logic to determine drag over a group & ability to drop windows and tabs into group [`fa2bb1c`](https://github.com/lbragile/TabMerger/commit/fa2bb1c806916841f5510c1717f56ba268ebddbf)
+- Popup to window context menu [`790d803`](https://github.com/lbragile/TabMerger/commit/790d80344c43ac250170fba542fca140a9a853f9)
+- Search functionality along with highlighting [`f0953f9`](https://github.com/lbragile/TabMerger/commit/f0953f97b93f58cc2965a3bf286c392f90a66e4e)
+- `Windows` with `Tabs` to the main area [`1910ec5`](https://github.com/lbragile/TabMerger/commit/1910ec5c04a9fa24579d04c9ec07c8c9640bb44b)
+- `SidePanel` with containers [`f468f25`](https://github.com/lbragile/TabMerger/commit/f468f259f1a51d90ee5e4f1a9ab3f18a12f31a2b)
+- Group icon since now an extra group is shown when a tab/window is dragged [`d6a79cb`](https://github.com/lbragile/TabMerger/commit/d6a79cb5659db51c52b67454794746d515850ece)
+- Extra window on tab drag & Cleanup logic to remove empty groups/windows [`d6a79cb`](https://github.com/lbragile/TabMerger/commit/d6a79cb5659db51c52b67454794746d515850ece)
+
+### Fixed
+
+- Tab and window delete logic [`4fa8c8b`](https://github.com/lbragile/TabMerger/commit/4fa8c8bb1e531daea444190670382b7eba8b8a85)
+- Color picker issues [`2dc7057`](https://github.com/lbragile/TabMerger/commit/2dc70577fb0fa9f2d119a61caf71bc2c1f05dbdf)
+- Settings dropdown styling & used outside click to hide window context menu [`3df317e`](https://github.com/lbragile/TabMerger/commit/3df317e5a0cb58c72df1c407a996c89a8c01f398)
+- First group not populating properly on initial open [`3df317e`](https://github.com/lbragile/TabMerger/commit/3df317e5a0cb58c72df1c407a996c89a8c01f398)
+- Dnd issues [`863dabb`](https://github.com/lbragile/TabMerger/commit/863dabbd1fece82f61e4f5d538924bd04f0a0d4b)
+- Drag auto scroll for groups & allow combining for tabs / windows in group drop [`82db9f0`](https://github.com/lbragile/TabMerger/commit/82db9f05f8789318e2f506f28fb4ab947a9e8f49)
+- Persistance by creating `useStorage` custom hook [`7b6ace0`](https://github.com/lbragile/TabMerger/commit/7b6ace0aea906bf90596572a9efc19aa97c166c9)
+- Group color updates [`7b6ace0`](https://github.com/lbragile/TabMerger/commit/7b6ace0aea906bf90596572a9efc19aa97c166c9)
+- Tab create & update and window create & focus logic [`83684a3`](https://github.com/lbragile/TabMerger/commit/83684a3a4216c843f432bcad86d83f42ec95acc1)
+- Group delete logic [`4b8f0b1`](https://github.com/lbragile/TabMerger/commit/4b8f0b196ae272c29603f8f05114eb05b65274cb)
+- Popup overflow text [`857465c`](https://github.com/lbragile/TabMerger/commit/857465c18d963bfc2805a940cbe0bd260c2e17ce)
+- Bug where dragging out of last group leaving it blank caused a crash [`f229e6d`](https://github.com/lbragile/TabMerger/commit/f229e6d7398bc9cb89bad03591b4f8a5e9231414)
+- Dnd into group where extra tabs remained & active drag group did not change [`8bbbd5e`](https://github.com/lbragile/TabMerger/commit/8bbbd5eec0405e2ce1d6cd07f71fc7c7389c20ab)
+
+### Changed
+
+- Position of close icon in window & shape in tab [`8bbbd5e`](https://github.com/lbragile/TabMerger/commit/8bbbd5eec0405e2ce1d6cd07f71fc7c7389c20ab)
+- Visibility of tabs on window drag [`fb386c7`](https://github.com/lbragile/TabMerger/commit/fb386c76494c74ac94904f51a49cdf097d42f88f)
+- Improved element keyboard focus [`4fa8c8b`](https://github.com/lbragile/TabMerger/commit/4fa8c8bb1e531daea444190670382b7eba8b8a85)
+- Split `updateWindows` reducer to distinguish between side panel and in same group dnd [`cf04d63`](https://github.com/lbragile/TabMerger/commit/cf04d638bad3b02a93acf382c83816255aad363a)
+- Improved same group window dnd logic [`cf04d63`](https://github.com/lbragile/TabMerger/commit/cf04d638bad3b02a93acf382c83816255aad363a)
+- Styling of window [`060fb8c`](https://github.com/lbragile/TabMerger/commit/060fb8c61a6911c94edc62b64ad26c3681ab5641)
+- Icon for search with a button toggle. Tab count for each window within a group [`060fb8c`](https://github.com/lbragile/TabMerger/commit/060fb8c61a6911c94edc62b64ad26c3681ab5641)
+
+
+
+## [v2.0.0](https://github.com/lbragile/TabMerger/compare/v1.6.2...v2.0.0) (06 March 2021)
### Added
- Automatic backup for JSON & Sync
-- Group color randomizer
+- Group color randomizing
- Tooltips can be hidden/shown in settings
- SaveAs menu for JSON Export to allow you to pick location (Can be turned off in settings)
-## Fixed
+### Fixed
- Firefox external (Keyboard Shortcuts / Right Click Menu) merging
- Settings page design with extra convenient functionality
@@ -22,9 +73,7 @@ All notable changes to the TabMerger extension will be documented in this file.
- Confirmation boxes with sleek notification menus
- Extra details on main page that are relevant to each user
----
-
-## [v1.6.2](https://github.com/lbragile/TabMerger/tree/v1.6.2) - Feb 16, 2021
+## [v1.6.2](https://github.com/lbragile/TabMerger/compare/v1.6.1...v1.6.2) (16 February 2021)
### Added
@@ -41,9 +90,7 @@ All notable changes to the TabMerger extension will be documented in this file.
- Merge button icons to remove confusion on direction of merging and popup text
----
-
-## [v1.6.1](https://github.com/lbragile/TabMerger/tree/v1.6.1) - Feb 6, 2021
+## [v1.6.1](https://github.com/lbragile/TabMerger/compare/v1.6.0...v1.6.1) (06 February 2021)
### Fixed
@@ -53,9 +100,7 @@ All notable changes to the TabMerger extension will be documented in this file.
- Hidden/empty (no tab) groups from the print friendly PDF
----
-
-## [v1.6.0](https://github.com/lbragile/TabMerger/tree/v1.6.0) - Feb 4, 2021
+## [v1.6.0](https://github.com/lbragile/TabMerger/compare/v1.5.0...v1.6.0) (04 February 2021)
### Added
@@ -85,9 +130,7 @@ All notable changes to the TabMerger extension will be documented in this file.
- Page UI improvements
- Fail safe JSON property names to allow better imports from similarly structured JSON files generated by other applications
----
-
-## [v1.5.0](https://github.com/lbragile/TabMerger/tree/v1.5.0) - Jan 8, 2021
+## [v1.5.0](https://github.com/lbragile/TabMerger/compare/v1.4.3...v1.5.0) (08 January 2021)
### Changed
@@ -97,17 +140,13 @@ All notable changes to the TabMerger extension will be documented in this file.
- Scroll to bottom upon adding group
- New homepage website which loads much faster, providing better User Experience
----
-
-## [v1.4.1 to v1.4.3](https://github.com/lbragile/TabMerger/tree/v1.4.3) - Dec 22, 2020
+## [v1.4.1 - v1.4.3](https://github.com/lbragile/TabMerger/compare/v1.4.0...v1.4.3) (22 December 2020)
### Fixed
- Bugs in sync & incognito operation (stable as of v1.4.3)
----
-
-## [v1.4.0](https://github.com/lbragile/TabMerger/tree/v1.4.0) - Dec 21, 2020
+## [v1.4.0](https://github.com/lbragile/TabMerger/compare/v1.3.0...v1.4.0) (21 December 2020)
### Changed
@@ -119,9 +158,7 @@ All notable changes to the TabMerger extension will be documented in this file.
- Deprecated PDF Export
----
-
-## [v1.3.0 to v1.3.1](https://github.com/lbragile/TabMerger/tree/v1.3.0) - Dec 14, 2020
+## [v1.3.0 - v1.3.1](https://github.com/lbragile/TabMerger/compare/v1.2.1...v1.3.0) (14 December 2020)
### Added
@@ -138,9 +175,7 @@ All notable changes to the TabMerger extension will be documented in this file.
- Can restore settings back to default
----
-
-## [v1.2.1](https://github.com/lbragile/TabMerger/tree/v1.2.1) - Dec 6, 2020
+## [v1.2.1](https://github.com/lbragile/TabMerger/compare/v1.2.0...v1.2.1) (06 December 2020)
## Added
@@ -154,9 +189,7 @@ All notable changes to the TabMerger extension will be documented in this file.
- Better UI for both FireFox and Chrome versions
- Further support for languages added
----
-
-## [v1.2.0](https://github.com/lbragile/TabMerger/tree/v1.2.0) - Dec 3, 2020
+## [v1.2.0](https://github.com/lbragile/TabMerger/compare/bd7f947...v1.2.0) (03 December 2020)
### Added
@@ -167,35 +200,27 @@ All notable changes to the TabMerger extension will be documented in this file.
- New tab merging functionality allows user to merge within each group directly
- Better logic for merging prevents extension page from "moving around"
----
-
-## v1.1.3 - Dec 1, 2020
+## [v1.1.3](https://github.com/lbragile/TabMerger/compare/20533f0...bd7f947) (01 December 2020)
### Fixed
- Issue where extension icon click caused items to close without being merged in FireFox
- Group title change persistence
----
-
-## v1.1.0 to v1.1.2 - Nov 30, 2020
+## [v1.1.0 - v1.1.2](https://github.com/lbragile/TabMerger/compare/f61488f...20533f0) (30 November 2020)
### Added
- Dark Mode
- [FireFox](https://addons.mozilla.org/en-CA/firefox/addon/tabmerger/) support
----
-
-## v1.0.1 - Nov 28, 2020
+## [v1.0.1](https://github.com/lbragile/TabMerger/compare/bae006f...f61488f) (28 November 2020)
### Added
- Demo video and improved UI
- Broader language support
----
-
-## v1.0.0 - Nov 28, 2020
+## [v1.0.0](https://github.com/lbragile/TabMerger/compare/5ffab12...bae006f) (28 November 2020)
- Initial release includes core merging, grouping, restoring functionality
diff --git a/README.md b/README.md
index b7d617c5..df139c73 100644
--- a/README.md
+++ b/README.md
@@ -22,11 +22,11 @@
Tired of searching through squished icons to find a tab you are sure is there?
-With TabMerger you can simplify this clutter while increasing productivity in a highly organized and customizable fashion!
+TabMerger simplifies this clutter while increasing productivity in a highly organized and customizable fashion!
-With one click, you can have everything in a common location, where you can then re-arrange into appropriate groups, add custom notes, and so much more.
-
-All items are stored internally for you to use at a later time, even when you close the browser window(s) - reducing memory consumption and speeding up your machine. Lots of analytics keep you informed.
+In one click, you can have everything in a common location, where you can then re-arrange into appropriate groups, add custom notes, and so much more.
+All items are stored internally for you to use at a later time, even when you close the browser window(s) - reducing memory consumption and speeding up your machine.
+Lots of analytics keep you informed.
## ⭐ Review
diff --git a/config/.cspell.json b/config/.cspell.json
index 0094c022..14e7ae0c 100644
--- a/config/.cspell.json
+++ b/config/.cspell.json
@@ -7,18 +7,21 @@
"Atlassian",
"Bragilevsky",
"camelcase",
+ "commitlint",
"Discardable",
"dotenv",
"dropzone",
"eligrey",
"fontawesome",
"fortawesome",
+ "keepachangelog",
"lbragile",
"lightgray",
"Lior",
"Maddern",
"mantine",
"mantinedev",
+ "markdownlint",
"newtab",
"noreferrer",
"pnpm",
@@ -26,6 +29,7 @@
"prettierrc",
"reduxjs",
"Rtishchev",
+ "shorthash",
"SIDEPANEL",
"Sitnik",
"Stoiber",
diff --git a/config/auto-changelog.json b/config/auto-changelog.json
new file mode 100644
index 00000000..cf3829cf
--- /dev/null
+++ b/config/auto-changelog.json
@@ -0,0 +1,7 @@
+{
+ "template": "./templates/changelog-template.hbs",
+ "startingDate": "2022-01-01",
+ "commitLimit": false,
+ "sortCommits": "date-desc",
+ "unreleased": true
+}
diff --git a/dangerfile.ts b/dangerfile.ts
new file mode 100644
index 00000000..ceab18fe
--- /dev/null
+++ b/dangerfile.ts
@@ -0,0 +1,137 @@
+import { markdown, danger, warn, fail } from "danger";
+
+const BIG_PR_THRESHOLD = 1000;
+const LONG_COMMIT_MESSAGE_THRESHOLD = 125;
+
+function generateCollapsibleList(items: string[], summary: string): string {
+ return `
+
+ ${summary}
+
+ ${items.map((item) => `- ${danger.github.utils.fileLinks([item])}
`).join("\n")}
+
+
+ `;
+}
+
+function getPrefixSymbol(val: number) {
+ return val > 0 ? "🔴 " : val < 0 ? "🟢 " : "🟡 ";
+}
+
+function formatByteStr(bytes: number, addPrefix = false) {
+ const [kiloBytes, megaBytes, gigaBytes] = [1, 2, 3].map((exp) => 1e3 ** exp);
+
+ const outputStr =
+ bytes < kiloBytes
+ ? bytes + " B"
+ : bytes < megaBytes
+ ? (bytes / kiloBytes).toFixed(2) + " KB"
+ : bytes < gigaBytes
+ ? (bytes / megaBytes).toFixed(2) + " MB"
+ : (bytes / gigaBytes).toFixed(2) + " GB";
+
+ return `${addPrefix ? getPrefixSymbol(bytes) : ""}${outputStr}`;
+}
+
+(async function () {
+ const packageChanged = danger.git.modified_files.includes("package.json");
+ const lockfileChanged = danger.git.modified_files.includes("pnpm-lock.yaml");
+ const PACKAGE_CHECK_MESSAGE = `Changes found in package.json, but not in pnpm-lock.yaml - 'Forgot to run \`pnpm i\`?'`;
+
+ const linesAdded = danger.github.pr.additions;
+ const linesDeleted = danger.github.pr.deletions;
+ const BIG_PR_MESSAGE = `Big PR (# added: ${linesAdded}, # deleted: ${linesDeleted}), please keep your PR small to make it easier to review`;
+
+ const malformedCommits = danger.git.commits.filter((commit) => {
+ const subject = commit.message.split("\n")[0];
+
+ return (
+ (!subject.match(/^(feat|fix|build|chore|ci|style|refactor|perf|test|docs):/i) &&
+ !subject.includes("Merge pull request")) ||
+ subject.length > LONG_COMMIT_MESSAGE_THRESHOLD
+ );
+ });
+
+ const MALFORMED_COMMIT_MESSAGE = `
+ Some commit messages do not match the expected format (helps us generate changelogs).
+
+
+
+ Violating Commits
+
+ ${malformedCommits
+ .map((item) => `- ${item.message.split("\n")[0]} (${item.sha.slice(0, 7)})
`)
+ .join("\n")}
+
+
+ See ${danger.utils.href(
+ "https://www.conventionalcommits.org/en/v1.0.0/",
+ "Conventional Commits"
+ )} for expected formatting.
+ `;
+
+ const filesChanged = [...danger.git.modified_files, ...danger.git.created_files, ...danger.git.deleted_files];
+
+ const fileSizeMapper: Record<"filename" | "base" | "current" | "diff" | "percent", string>[] = [];
+ const totalChange: Record<"base" | "current" | "diff", number> = { base: 0, current: 0, diff: 0 };
+ for (const file of filesChanged) {
+ if (file !== "pnpm-lock.yaml") {
+ const { before, after } = await danger.git.diffForFile(file);
+
+ const unMinifiedSizeDiffInBytes = after.length - before.length;
+ const percentageChanged = before.length === 0 ? 100 : (unMinifiedSizeDiffInBytes * 100) / before.length;
+
+ totalChange.base += before.length;
+ totalChange.current += after.length;
+ totalChange.diff += unMinifiedSizeDiffInBytes;
+
+ fileSizeMapper.push({
+ filename: file,
+ base: formatByteStr(before.length),
+ current: formatByteStr(after.length),
+ diff: formatByteStr(unMinifiedSizeDiffInBytes, true),
+ percent: `${getPrefixSymbol(percentageChanged)}${percentageChanged.toFixed(2)}%`
+ });
+ }
+ }
+
+ const totalPercentage = (totalChange.diff * 100) / totalChange.base;
+
+ // MESSAGES
+
+ if (packageChanged && !lockfileChanged) warn(PACKAGE_CHECK_MESSAGE);
+
+ if (linesAdded + linesDeleted > BIG_PR_THRESHOLD && !lockfileChanged) warn(BIG_PR_MESSAGE);
+
+ if (malformedCommits.length > 0) fail(MALFORMED_COMMIT_MESSAGE);
+
+ markdown(`
+ ## PR Snapshot
+
+ Comparing: ${danger.git.base.slice(0, 7)}...${danger.git.head.slice(0, 7)}
+
+ Note: the following excludes changes to \`pnpm-lock.yaml\` due to its volatile nature.
+
+ | Filename | Base | Current | +/- | % |
+ |---------:|:----:|:-------:|:---|:---|
+ ${fileSizeMapper
+ .map(
+ (item) =>
+ `| ${danger.github.utils.fileLinks([item.filename])} | ${item.base} | ${item.current} | ${item.diff} | ${
+ item.percent
+ } |`
+ )
+ .join("\n")}
+ | Total | ${formatByteStr(totalChange.base)} | ${formatByteStr(totalChange.current)} | ${formatByteStr(
+ totalChange.diff,
+ true
+ )} | ${getPrefixSymbol(totalPercentage)}${totalPercentage.toFixed(2)}% |
+
+ ### Summary
+ ${generateCollapsibleList(danger.git.modified_files, "Changed Files")}
+
+ ${generateCollapsibleList(danger.git.created_files, "Created Files")}
+
+ ${generateCollapsibleList(danger.git.deleted_files, "Deleted Files")}
+ `);
+})();
diff --git a/package.json b/package.json
index 2da52914..a061fb59 100644
--- a/package.json
+++ b/package.json
@@ -20,10 +20,13 @@
"@babel/preset-env": "^7.16.7",
"@babel/preset-react": "^7.16.7",
"@babel/preset-typescript": "^7.16.7",
+ "@commitlint/cli": "^16.0.2",
+ "@commitlint/config-conventional": "^16.0.0",
"@fortawesome/fontawesome-svg-core": "^1.2.36",
"@fortawesome/free-regular-svg-icons": "^5.15.4",
"@fortawesome/free-solid-svg-icons": "^5.15.4",
"@fortawesome/react-fontawesome": "^0.1.16",
+ "@octokit/core": "^3.5.1",
"@types/chrome": "^0.0.175",
"@types/express": "^4.17.13",
"@types/file-saver": "^2.0.4",
@@ -43,6 +46,7 @@
"copy-webpack-plugin": "^10.2.0",
"cross-env": "^7.0.3",
"cspell": "^5.15.1",
+ "danger": "^10.8.0",
"dotenv-webpack": "^7.0.3",
"eslint": "^8.6.0",
"eslint-import-resolver-typescript": "^2.5.0",
@@ -52,6 +56,7 @@
"eslint-plugin-react-hooks": "^4.3.0",
"eslint-plugin-styled-components-a11y": "0.0.34",
"eslint-webpack-plugin": "^3.1.1",
+ "husky": "^7.0.4",
"postcss": "^8.4.5",
"postcss-scss": "^4.0.2",
"prettier": "^2.5.1",
@@ -73,6 +78,7 @@
"webpack-cli": "^4.9.1"
},
"peerDependencies": {
+ "@octokit/core": "^3.5.1",
"postcss": "8.4.5",
"react-is": "17.0.2"
},
@@ -86,7 +92,8 @@
"webpack": "webpack --config config/webpack.config.js --progress",
"start": "cross-env NODE_ENV=development pnpm webpack",
"build": "cross-env NODE_ENV=production pnpm webpack",
- "remotedev": "remotedev --hostname=localhost --port=8080 --logLevel=0"
+ "remotedev": "remotedev --hostname=localhost --port=8080 --logLevel=0",
+ "changelog": "auto-changelog --config ./config/auto-changelog.json"
},
"babel": {
"extends": "./config/.babelrc.json"
@@ -97,6 +104,11 @@
"stylelint": {
"extends": "./config/.stylelintrc.json"
},
+ "commitlint": {
+ "extends": [
+ "@commitlint/config-conventional"
+ ]
+ },
"browserslist": {
"production": [
">0.2%",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 41ac0ef1..92076200 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -5,10 +5,13 @@ specifiers:
'@babel/preset-env': ^7.16.7
'@babel/preset-react': ^7.16.7
'@babel/preset-typescript': ^7.16.7
+ '@commitlint/cli': ^16.0.2
+ '@commitlint/config-conventional': ^16.0.0
'@fortawesome/fontawesome-svg-core': ^1.2.36
'@fortawesome/free-regular-svg-icons': ^5.15.4
'@fortawesome/free-solid-svg-icons': ^5.15.4
'@fortawesome/react-fontawesome': ^0.1.16
+ '@octokit/core': ^3.5.1
'@types/chrome': ^0.0.175
'@types/express': ^4.17.13
'@types/file-saver': ^2.0.4
@@ -28,6 +31,7 @@ specifiers:
copy-webpack-plugin: ^10.2.0
cross-env: ^7.0.3
cspell: ^5.15.1
+ danger: ^10.8.0
dotenv-webpack: ^7.0.3
eslint: ^8.6.0
eslint-import-resolver-typescript: ^2.5.0
@@ -38,6 +42,7 @@ specifiers:
eslint-plugin-styled-components-a11y: 0.0.34
eslint-webpack-plugin: ^3.1.1
file-saver: ^2.0.5
+ husky: ^7.0.4
nanoid: ^3.1.30
postcss: ^8.4.5
postcss-scss: ^4.0.2
@@ -82,10 +87,13 @@ devDependencies:
'@babel/preset-env': 7.16.7_@babel+core@7.16.7
'@babel/preset-react': 7.16.7_@babel+core@7.16.7
'@babel/preset-typescript': 7.16.7_@babel+core@7.16.7
+ '@commitlint/cli': 16.0.2_@types+node@17.0.8
+ '@commitlint/config-conventional': 16.0.0
'@fortawesome/fontawesome-svg-core': 1.2.36
'@fortawesome/free-regular-svg-icons': 5.15.4
'@fortawesome/free-solid-svg-icons': 5.15.4
'@fortawesome/react-fontawesome': 0.1.16_f515edce028694561ceb456e3dba224c
+ '@octokit/core': 3.5.1
'@types/chrome': 0.0.175
'@types/express': 4.17.13
'@types/file-saver': 2.0.4
@@ -105,6 +113,7 @@ devDependencies:
copy-webpack-plugin: 10.2.0_webpack@5.65.0
cross-env: 7.0.3
cspell: 5.15.1
+ danger: 10.8.0_@octokit+core@3.5.1
dotenv-webpack: 7.0.3_webpack@5.65.0
eslint: 8.6.0
eslint-import-resolver-typescript: 2.5.0_b5a36b8c1535387c8dd00eff7ec6b551
@@ -114,6 +123,7 @@ devDependencies:
eslint-plugin-react-hooks: 4.3.0_eslint@8.6.0
eslint-plugin-styled-components-a11y: 0.0.34_d1ce764200bc98fcd9d24536c20beb43
eslint-webpack-plugin: 3.1.1_eslint@8.6.0+webpack@5.65.0
+ husky: 7.0.4
postcss: 8.4.5
postcss-scss: 4.0.2_postcss@8.4.5
prettier: 2.5.1
@@ -1200,6 +1210,14 @@ packages:
'@babel/helper-plugin-utils': 7.16.7
dev: true
+ /@babel/polyfill/7.12.1:
+ resolution: {integrity: sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==}
+ deprecated: 🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.
+ dependencies:
+ core-js: 2.6.12
+ regenerator-runtime: 0.13.9
+ dev: true
+
/@babel/preset-env/7.16.7_@babel+core@7.16.7:
resolution: {integrity: sha512-urX3Cee4aOZbRWOSa3mKPk0aqDikfILuo+C7qq7HY0InylGNZ1fekq9jmlr3pLWwZHF4yD7heQooc2Pow2KMyQ==}
engines: {node: '>=6.9.0'}
@@ -1394,6 +1412,166 @@ packages:
to-fast-properties: 2.0.0
dev: true
+ /@commitlint/cli/16.0.2_@types+node@17.0.8:
+ resolution: {integrity: sha512-Jt7iaBjoLGC5Nq4dHPTvTYnqPGkElFPBtTXTvBpTgatZApczyjI2plE0oG4GYWPp1suHIS/VdVDOMpPZjGVusg==}
+ engines: {node: '>=v12'}
+ hasBin: true
+ dependencies:
+ '@commitlint/format': 16.0.0
+ '@commitlint/lint': 16.0.0
+ '@commitlint/load': 16.0.0_@types+node@17.0.8
+ '@commitlint/read': 16.0.0
+ '@commitlint/types': 16.0.0
+ lodash: 4.17.21
+ resolve-from: 5.0.0
+ resolve-global: 1.0.0
+ yargs: 17.3.1
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ dev: true
+
+ /@commitlint/config-conventional/16.0.0:
+ resolution: {integrity: sha512-mN7J8KlKFn0kROd+q9PB01sfDx/8K/R25yITspL1No8PB4oj9M1p77xWjP80hPydqZG9OvQq+anXK3ZWeR7s3g==}
+ engines: {node: '>=v12'}
+ dependencies:
+ conventional-changelog-conventionalcommits: 4.6.3
+ dev: true
+
+ /@commitlint/config-validator/16.0.0:
+ resolution: {integrity: sha512-i80DGlo1FeC5jZpuoNV9NIjQN/m2dDV3jYGWg+1Wr+KldptkUHXj+6GY1Akll66lJ3D8s6aUGi3comPLHPtWHg==}
+ engines: {node: '>=v12'}
+ dependencies:
+ '@commitlint/types': 16.0.0
+ ajv: 6.12.6
+ dev: true
+
+ /@commitlint/ensure/16.0.0:
+ resolution: {integrity: sha512-WdMySU8DCTaq3JPf0tZFCKIUhqxaL54mjduNhu8v4D2AMUVIIQKYMGyvXn94k8begeW6iJkTf9cXBArayskE7Q==}
+ engines: {node: '>=v12'}
+ dependencies:
+ '@commitlint/types': 16.0.0
+ lodash: 4.17.21
+ dev: true
+
+ /@commitlint/execute-rule/16.0.0:
+ resolution: {integrity: sha512-8edcCibmBb386x5JTHSPHINwA5L0xPkHQFY8TAuDEt5QyRZY/o5DF8OPHSa5Hx2xJvGaxxuIz4UtAT6IiRDYkw==}
+ engines: {node: '>=v12'}
+ dev: true
+
+ /@commitlint/format/16.0.0:
+ resolution: {integrity: sha512-9yp5NCquXL1jVMKL0ZkRwJf/UHdebvCcMvICuZV00NQGYSAL89O398nhqrqxlbjBhM5EZVq0VGcV5+7r3D4zAA==}
+ engines: {node: '>=v12'}
+ dependencies:
+ '@commitlint/types': 16.0.0
+ chalk: 4.1.2
+ dev: true
+
+ /@commitlint/is-ignored/16.0.0:
+ resolution: {integrity: sha512-gmAQcwIGC/R/Lp0CEb2b5bfGC7MT5rPe09N8kOGjO/NcdNmfFSZMquwrvNJsq9hnAP0skRdHIsqwlkENkN4Lag==}
+ engines: {node: '>=v12'}
+ dependencies:
+ '@commitlint/types': 16.0.0
+ semver: 7.3.5
+ dev: true
+
+ /@commitlint/lint/16.0.0:
+ resolution: {integrity: sha512-HNl15bRC0h+pLzbMzQC3tM0j1aESXsLYhElqKnXcf5mnCBkBkHzu6WwJW8rZbfxX+YwJmNljN62cPhmdBo8x0A==}
+ engines: {node: '>=v12'}
+ dependencies:
+ '@commitlint/is-ignored': 16.0.0
+ '@commitlint/parse': 16.0.0
+ '@commitlint/rules': 16.0.0
+ '@commitlint/types': 16.0.0
+ dev: true
+
+ /@commitlint/load/16.0.0_@types+node@17.0.8:
+ resolution: {integrity: sha512-7WhrGCkP6K/XfjBBguLkkI2XUdiiIyMGlNsSoSqgRNiD352EiffhFEApMy1/XOU+viwBBm/On0n5p0NC7e9/4A==}
+ engines: {node: '>=v12'}
+ dependencies:
+ '@commitlint/config-validator': 16.0.0
+ '@commitlint/execute-rule': 16.0.0
+ '@commitlint/resolve-extends': 16.0.0
+ '@commitlint/types': 16.0.0
+ chalk: 4.1.2
+ cosmiconfig: 7.0.1
+ cosmiconfig-typescript-loader: 1.0.3_faf01e1d5a40372a98081522dcafc186
+ lodash: 4.17.21
+ resolve-from: 5.0.0
+ typescript: 4.5.4
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ dev: true
+
+ /@commitlint/message/16.0.0:
+ resolution: {integrity: sha512-CmK2074SH1Ws6kFMEKOKH/7hMekGVbOD6vb4alCOo2+33ZSLUIX8iNkDYyrw38Jwg6yWUhLjyQLUxREeV+QIUA==}
+ engines: {node: '>=v12'}
+ dev: true
+
+ /@commitlint/parse/16.0.0:
+ resolution: {integrity: sha512-F9EjFlMw4MYgBEqoRrWZZKQBzdiJzPBI0qFDFqwUvfQsMmXEREZ242T4R5bFwLINWaALFLHEIa/FXEPa6QxCag==}
+ engines: {node: '>=v12'}
+ dependencies:
+ '@commitlint/types': 16.0.0
+ conventional-changelog-angular: 5.0.13
+ conventional-commits-parser: 3.2.4
+ dev: true
+
+ /@commitlint/read/16.0.0:
+ resolution: {integrity: sha512-H4T2zsfmYQK9B+JtoQaCXWBHUhgIJyOzWZjSfuIV9Ce69/OgHoffNpLZPF2lX6yKuDrS1SQFhI/kUCjVc/e4ew==}
+ engines: {node: '>=v12'}
+ dependencies:
+ '@commitlint/top-level': 16.0.0
+ '@commitlint/types': 16.0.0
+ fs-extra: 10.0.0
+ git-raw-commits: 2.0.11
+ dev: true
+
+ /@commitlint/resolve-extends/16.0.0:
+ resolution: {integrity: sha512-Z/w9MAQUcxeawpCLtjmkVNXAXOmB2nhW+LYmHEZcx9O6UTauF/1+uuZ2/r0MtzTe1qw2JD+1QHVhEWYHVPlkdA==}
+ engines: {node: '>=v12'}
+ dependencies:
+ '@commitlint/config-validator': 16.0.0
+ '@commitlint/types': 16.0.0
+ import-fresh: 3.3.0
+ lodash: 4.17.21
+ resolve-from: 5.0.0
+ resolve-global: 1.0.0
+ dev: true
+
+ /@commitlint/rules/16.0.0:
+ resolution: {integrity: sha512-AOl0y2SBTdJ1bvIv8nwHvQKRT/jC1xb09C5VZwzHoT8sE8F54KDeEzPCwHQFgUcWdGLyS10kkOTAH2MyA8EIlg==}
+ engines: {node: '>=v12'}
+ dependencies:
+ '@commitlint/ensure': 16.0.0
+ '@commitlint/message': 16.0.0
+ '@commitlint/to-lines': 16.0.0
+ '@commitlint/types': 16.0.0
+ execa: 5.1.1
+ dev: true
+
+ /@commitlint/to-lines/16.0.0:
+ resolution: {integrity: sha512-iN/qU38TCKU7uKOg6RXLpD49wNiuI0TqMqybHbjefUeP/Jmzxa8ishryj0uLyVdrAl1ZjGeD1ukXGMTtvqz8iA==}
+ engines: {node: '>=v12'}
+ dev: true
+
+ /@commitlint/top-level/16.0.0:
+ resolution: {integrity: sha512-/Jt6NLxyFkpjL5O0jxurZPCHURZAm7cQCqikgPCwqPAH0TLgwqdHjnYipl8J+AGnAMGDip4FNLoYrtgIpZGBYw==}
+ engines: {node: '>=v12'}
+ dependencies:
+ find-up: 5.0.0
+ dev: true
+
+ /@commitlint/types/16.0.0:
+ resolution: {integrity: sha512-+0FvYOAS39bJ4aKjnYn/7FD4DfWkmQ6G/06I4F0Gvu4KS5twirEg8mIcLhmeRDOOKn4Tp8PwpLwBiSA6npEMQA==}
+ engines: {node: '>=v12'}
+ dependencies:
+ chalk: 4.1.2
+ dev: true
+
/@cspell/cspell-bundled-dicts/5.15.1:
resolution: {integrity: sha512-OYVO7E37TOl/sM96MovfnSyUg7DXxC5St6pP/Rjqe8PaRedcGkrygDo1v7Cj0WYzGROlegFMk6h2BEnAfGFt8w==}
engines: {node: '>=12.13.0'}
@@ -1590,6 +1768,18 @@ packages:
resolution: {integrity: sha512-n9So2C2Zw+uSDRzb2h9wq3PjZBqoHx+vBvu6a34H2qpumNjZ6HaEronrzX5tXJJXzOtocIQYrLxdd128TAU3+g==}
dev: true
+ /@cspotcode/source-map-consumer/0.8.0:
+ resolution: {integrity: sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==}
+ engines: {node: '>= 12'}
+ dev: true
+
+ /@cspotcode/source-map-support/0.7.0:
+ resolution: {integrity: sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==}
+ engines: {node: '>=12'}
+ dependencies:
+ '@cspotcode/source-map-consumer': 0.8.0
+ dev: true
+
/@discoveryjs/json-ext/0.5.6:
resolution: {integrity: sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==}
engines: {node: '>=10.0.0'}
@@ -1707,6 +1897,143 @@ packages:
fastq: 1.13.0
dev: true
+ /@octokit/auth-token/2.5.0:
+ resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==}
+ dependencies:
+ '@octokit/types': 6.34.0
+ dev: true
+
+ /@octokit/core/3.5.1:
+ resolution: {integrity: sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==}
+ dependencies:
+ '@octokit/auth-token': 2.5.0
+ '@octokit/graphql': 4.8.0
+ '@octokit/request': 5.6.2
+ '@octokit/request-error': 2.1.0
+ '@octokit/types': 6.34.0
+ before-after-hook: 2.2.2
+ universal-user-agent: 6.0.0
+ dev: true
+
+ /@octokit/endpoint/6.0.12:
+ resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==}
+ dependencies:
+ '@octokit/types': 6.34.0
+ is-plain-object: 5.0.0
+ universal-user-agent: 6.0.0
+ dev: true
+
+ /@octokit/graphql/4.8.0:
+ resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==}
+ dependencies:
+ '@octokit/request': 5.6.2
+ '@octokit/types': 6.34.0
+ universal-user-agent: 6.0.0
+ dev: true
+
+ /@octokit/openapi-types/11.2.0:
+ resolution: {integrity: sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==}
+ dev: true
+
+ /@octokit/plugin-paginate-rest/1.1.2:
+ resolution: {integrity: sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q==}
+ dependencies:
+ '@octokit/types': 2.16.2
+ dev: true
+
+ /@octokit/plugin-request-log/1.0.4_@octokit+core@3.5.1:
+ resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==}
+ peerDependencies:
+ '@octokit/core': '>=3'
+ dependencies:
+ '@octokit/core': 3.5.1
+ dev: true
+
+ /@octokit/plugin-rest-endpoint-methods/2.4.0:
+ resolution: {integrity: sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ==}
+ dependencies:
+ '@octokit/types': 2.16.2
+ deprecation: 2.3.1
+ dev: true
+
+ /@octokit/request-error/1.2.1:
+ resolution: {integrity: sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA==}
+ dependencies:
+ '@octokit/types': 2.16.2
+ deprecation: 2.3.1
+ once: 1.4.0
+ dev: true
+
+ /@octokit/request-error/2.1.0:
+ resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==}
+ dependencies:
+ '@octokit/types': 6.34.0
+ deprecation: 2.3.1
+ once: 1.4.0
+ dev: true
+
+ /@octokit/request/5.6.2:
+ resolution: {integrity: sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==}
+ dependencies:
+ '@octokit/endpoint': 6.0.12
+ '@octokit/request-error': 2.1.0
+ '@octokit/types': 6.34.0
+ is-plain-object: 5.0.0
+ node-fetch: 2.6.1
+ universal-user-agent: 6.0.0
+ dev: true
+
+ /@octokit/rest/16.43.2_@octokit+core@3.5.1:
+ resolution: {integrity: sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ==}
+ dependencies:
+ '@octokit/auth-token': 2.5.0
+ '@octokit/plugin-paginate-rest': 1.1.2
+ '@octokit/plugin-request-log': 1.0.4_@octokit+core@3.5.1
+ '@octokit/plugin-rest-endpoint-methods': 2.4.0
+ '@octokit/request': 5.6.2
+ '@octokit/request-error': 1.2.1
+ atob-lite: 2.0.0
+ before-after-hook: 2.2.2
+ btoa-lite: 1.0.0
+ deprecation: 2.3.1
+ lodash.get: 4.4.2
+ lodash.set: 4.3.2
+ lodash.uniq: 4.5.0
+ octokit-pagination-methods: 1.1.0
+ once: 1.4.0
+ universal-user-agent: 4.0.1
+ transitivePeerDependencies:
+ - '@octokit/core'
+ dev: true
+
+ /@octokit/types/2.16.2:
+ resolution: {integrity: sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==}
+ dependencies:
+ '@types/node': 17.0.8
+ dev: true
+
+ /@octokit/types/6.34.0:
+ resolution: {integrity: sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==}
+ dependencies:
+ '@octokit/openapi-types': 11.2.0
+ dev: true
+
+ /@tsconfig/node10/1.0.8:
+ resolution: {integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==}
+ dev: true
+
+ /@tsconfig/node12/1.0.9:
+ resolution: {integrity: sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==}
+ dev: true
+
+ /@tsconfig/node14/1.0.1:
+ resolution: {integrity: sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==}
+ dev: true
+
+ /@tsconfig/node16/1.0.2:
+ resolution: {integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==}
+ dev: true
+
/@types/body-parser/1.19.2:
resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==}
dependencies:
@@ -2192,10 +2519,25 @@ packages:
resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
dev: true
+ /JSONStream/1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+ dev: true
+
/abbrev/1.1.1:
resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
dev: true
+ /abort-controller/3.0.0:
+ resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
+ engines: {node: '>=6.5'}
+ dependencies:
+ event-target-shim: 5.0.1
+ dev: true
+
/accepts/1.3.7:
resolution: {integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==}
engines: {node: '>= 0.6'}
@@ -2220,12 +2562,24 @@ packages:
acorn: 8.7.0
dev: true
+ /acorn-walk/8.2.0:
+ resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
+ engines: {node: '>=0.4.0'}
+ dev: true
+
/acorn/8.7.0:
resolution: {integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==}
engines: {node: '>=0.4.0'}
hasBin: true
dev: true
+ /agent-base/4.3.0:
+ resolution: {integrity: sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==}
+ engines: {node: '>= 4.0.0'}
+ dependencies:
+ es6-promisify: 5.0.0
+ dev: true
+
/ajv-formats/2.1.1:
resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
peerDependenciesMeta:
@@ -2395,6 +2749,10 @@ packages:
readable-stream: 2.3.7
dev: true
+ /arg/4.1.3:
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
+ dev: true
+
/argparse/2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
dev: true
@@ -2431,6 +2789,10 @@ packages:
resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=}
dev: true
+ /array-ify/1.0.0:
+ resolution: {integrity: sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=}
+ dev: true
+
/array-includes/3.1.4:
resolution: {integrity: sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==}
engines: {node: '>= 0.4'}
@@ -2503,6 +2865,12 @@ packages:
engines: {node: '>=8'}
dev: true
+ /async-retry/1.2.3:
+ resolution: {integrity: sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==}
+ dependencies:
+ retry: 0.12.0
+ dev: true
+
/async/2.0.0:
resolution: {integrity: sha1-0JAK04WvE4BFQKEJxCFm4657K50=}
dependencies:
@@ -2525,6 +2893,14 @@ packages:
resolution: {integrity: sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==}
dev: true
+ /asynckit/0.4.0:
+ resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=}
+ dev: true
+
+ /atob-lite/2.0.0:
+ resolution: {integrity: sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=}
+ dev: true
+
/atob/2.1.2:
resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==}
engines: {node: '>= 4.5.0'}
@@ -2662,6 +3038,10 @@ packages:
safe-buffer: 5.1.2
dev: true
+ /before-after-hook/2.2.2:
+ resolution: {integrity: sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==}
+ dev: true
+
/big.js/5.2.2:
resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
dev: true
@@ -2728,6 +3108,10 @@ packages:
picocolors: 1.0.0
dev: true
+ /btoa-lite/1.0.0:
+ resolution: {integrity: sha1-M3dm2hWAEhD92VbCLpxokaudAzc=}
+ dev: true
+
/buffer-equal-constant-time/1.0.1:
resolution: {integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=}
dev: true
@@ -2876,6 +3260,14 @@ packages:
resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==}
dev: true
+ /cliui/7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+ dev: true
+
/clone-deep/4.0.1:
resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
engines: {node: '>=6'}
@@ -2939,6 +3331,18 @@ packages:
resolution: {integrity: sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==}
dev: true
+ /colors/1.4.0:
+ resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==}
+ engines: {node: '>=0.1.90'}
+ dev: true
+
+ /combined-stream/1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ delayed-stream: 1.0.0
+ dev: true
+
/commander/2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
dev: true
@@ -2968,6 +3372,13 @@ packages:
resolution: {integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=}
dev: true
+ /compare-func/2.0.0:
+ resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
+ dependencies:
+ array-ify: 1.0.0
+ dot-prop: 5.3.0
+ dev: true
+
/component-emitter/1.2.1:
resolution: {integrity: sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=}
dev: true
@@ -3012,6 +3423,36 @@ packages:
engines: {node: '>= 0.6'}
dev: true
+ /conventional-changelog-angular/5.0.13:
+ resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==}
+ engines: {node: '>=10'}
+ dependencies:
+ compare-func: 2.0.0
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-conventionalcommits/4.6.3:
+ resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==}
+ engines: {node: '>=10'}
+ dependencies:
+ compare-func: 2.0.0
+ lodash: 4.17.21
+ q: 1.5.1
+ dev: true
+
+ /conventional-commits-parser/3.2.4:
+ resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ is-text-path: 1.0.1
+ JSONStream: 1.3.5
+ lodash: 4.17.21
+ meow: 8.1.2
+ split2: 3.2.2
+ through2: 4.0.2
+ dev: true
+
/convert-source-map/1.8.0:
resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==}
dependencies:
@@ -3077,6 +3518,22 @@ packages:
vary: 1.1.2
dev: true
+ /cosmiconfig-typescript-loader/1.0.3_faf01e1d5a40372a98081522dcafc186:
+ resolution: {integrity: sha512-ARo21VjxdacJUcHxgVMEYNIoVPYiuKOEwWBIYej4M22+pEbe3LzKgmht2UPM+0u7/T/KnZf2r/5IzHv2Nwz+/w==}
+ engines: {node: '>=12', npm: '>=6'}
+ peerDependencies:
+ '@types/node': '*'
+ typescript: '>=3'
+ dependencies:
+ '@types/node': 17.0.8
+ cosmiconfig: 7.0.1
+ ts-node: 10.4.0_faf01e1d5a40372a98081522dcafc186
+ typescript: 4.5.4
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ dev: true
+
/cosmiconfig/7.0.1:
resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==}
engines: {node: '>=10'}
@@ -3088,6 +3545,10 @@ packages:
yaml: 1.10.2
dev: true
+ /create-require/1.1.1:
+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
+ dev: true
+
/cross-env/7.0.3:
resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
@@ -3096,6 +3557,17 @@ packages:
cross-spawn: 7.0.3
dev: true
+ /cross-spawn/6.0.5:
+ resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==}
+ engines: {node: '>=4.8'}
+ 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
+
/cross-spawn/7.0.3:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
engines: {node: '>= 8'}
@@ -3215,6 +3687,56 @@ packages:
resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
dev: true
+ /danger/10.8.0_@octokit+core@3.5.1:
+ resolution: {integrity: sha512-s4Ge4jKQdENdVhGndHpnXnUmfR60IHQeIxkZlHIupHKmYiMYWYCazlTtTS1ieApYhhKPrtEgZYXF7zQ6SBg9lw==}
+ hasBin: true
+ dependencies:
+ '@babel/polyfill': 7.12.1
+ '@octokit/rest': 16.43.2_@octokit+core@3.5.1
+ async-retry: 1.2.3
+ chalk: 2.4.2
+ commander: 2.20.3
+ debug: 4.3.3
+ fast-json-patch: 3.1.0
+ get-stdin: 6.0.0
+ gitlab: 10.2.1
+ http-proxy-agent: 2.1.0
+ https-proxy-agent: 2.2.4
+ hyperlinker: 1.0.0
+ json5: 2.2.0
+ jsonpointer: 5.0.0
+ jsonwebtoken: 8.5.1
+ lodash.find: 4.6.0
+ lodash.includes: 4.3.0
+ lodash.isobject: 3.0.2
+ lodash.keys: 4.2.0
+ lodash.mapvalues: 4.6.0
+ lodash.memoize: 4.1.2
+ memfs-or-file-map-to-github-branch: 1.2.0_@octokit+core@3.5.1
+ micromatch: 4.0.4
+ node-cleanup: 2.1.2
+ node-fetch: 2.6.1
+ override-require: 1.1.1
+ p-limit: 2.3.0
+ parse-diff: 0.7.1
+ parse-git-config: 2.0.3
+ parse-github-url: 1.0.2
+ parse-link-header: 2.0.0
+ pinpoint: 1.1.0
+ prettyjson: 1.2.4
+ readline-sync: 1.4.10
+ require-from-string: 2.0.2
+ supports-hyperlinks: 1.0.1
+ transitivePeerDependencies:
+ - '@octokit/core'
+ - supports-color
+ dev: true
+
+ /dargs/7.0.0:
+ resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==}
+ engines: {node: '>=8'}
+ dev: true
+
/debug/2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
dependencies:
@@ -3318,6 +3840,11 @@ packages:
isobject: 3.0.1
dev: true
+ /delayed-stream/1.0.0:
+ resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=}
+ engines: {node: '>=0.4.0'}
+ dev: true
+
/delegates/1.0.0:
resolution: {integrity: sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=}
dev: true
@@ -3336,6 +3863,10 @@ packages:
resolution: {integrity: sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=}
dev: true
+ /deprecation/2.3.1:
+ resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
+ dev: true
+
/destroy/1.0.4:
resolution: {integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=}
dev: true
@@ -3351,6 +3882,11 @@ packages:
hasBin: true
dev: true
+ /diff/4.0.2:
+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+ engines: {node: '>=0.3.1'}
+ dev: true
+
/dir-glob/3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
@@ -3438,6 +3974,12 @@ packages:
engines: {node: '>= 0.8'}
dev: true
+ /end-of-stream/1.4.4:
+ resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+ dependencies:
+ once: 1.4.0
+ dev: true
+
/enhanced-resolve/5.8.3:
resolution: {integrity: sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==}
engines: {node: '>=10.13.0'}
@@ -3504,6 +4046,16 @@ packages:
is-symbol: 1.0.4
dev: true
+ /es6-promise/4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+ dev: true
+
+ /es6-promisify/5.0.0:
+ resolution: {integrity: sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=}
+ dependencies:
+ es6-promise: 4.2.8
+ dev: true
+
/escalade/3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
engines: {node: '>=6'}
@@ -3823,11 +4375,29 @@ packages:
engines: {node: '>= 0.6'}
dev: true
+ /event-target-shim/5.0.1:
+ resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
+ engines: {node: '>=6'}
+ dev: true
+
/events/3.3.0:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'}
dev: true
+ /execa/1.0.0:
+ resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==}
+ engines: {node: '>=6'}
+ 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.6
+ strip-eof: 1.0.0
+ dev: true
+
/execa/5.1.1:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
@@ -3968,6 +4538,10 @@ packages:
micromatch: 4.0.4
dev: true
+ /fast-json-patch/3.1.0:
+ resolution: {integrity: sha512-IhpytlsVTRndz0hU5t0/MGzS/etxLlfrpG5V5M9mVbuj9TrJLWaMfsox9REM5rkuGX0T+5qjpe8XA1o0gZ42nA==}
+ dev: true
+
/fast-json-stable-stringify/2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
dev: true
@@ -4028,6 +4602,11 @@ packages:
to-regex-range: 5.0.1
dev: true
+ /filter-obj/1.1.0:
+ resolution: {integrity: sha1-mzERErxsYSehbgFsbF1/GeCAXFs=}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
/finalhandler/1.1.2:
resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
engines: {node: '>= 0.8'}
@@ -4128,6 +4707,15 @@ packages:
for-in: 1.0.2
dev: true
+ /form-data/2.5.1:
+ resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==}
+ engines: {node: '>= 0.12'}
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.34
+ dev: true
+
/forwarded/0.2.0:
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
engines: {node: '>= 0.6'}
@@ -4145,6 +4733,11 @@ packages:
engines: {node: '>= 0.6'}
dev: true
+ /fs-exists-sync/0.1.0:
+ resolution: {integrity: sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
/fs-extra/10.0.0:
resolution: {integrity: sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==}
engines: {node: '>=12'}
@@ -4203,6 +4796,11 @@ packages:
engines: {node: '>=6.9.0'}
dev: true
+ /get-caller-file/2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+ dev: true
+
/get-intrinsic/1.1.1:
resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==}
dependencies:
@@ -4215,11 +4813,23 @@ packages:
resolution: {integrity: sha1-uuDfq6WIoMYNeDTA2Nwv9g7u8v4=}
dev: true
+ /get-stdin/6.0.0:
+ resolution: {integrity: sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==}
+ engines: {node: '>=4'}
+ dev: true
+
/get-stdin/8.0.0:
resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==}
engines: {node: '>=10'}
dev: true
+ /get-stream/4.1.0:
+ resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==}
+ engines: {node: '>=6'}
+ dependencies:
+ pump: 3.0.0
+ dev: true
+
/get-stream/6.0.1:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
@@ -4242,6 +4852,41 @@ packages:
resolution: {integrity: sha1-q93z1dHnfdlnzPorA2oKH7Jv1/c=}
dev: true
+ /git-config-path/1.0.1:
+ resolution: {integrity: sha1-bTP37WPbDQ4RgTFQO6s6ykfVRmQ=}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ extend-shallow: 2.0.1
+ fs-exists-sync: 0.1.0
+ homedir-polyfill: 1.0.3
+ dev: true
+
+ /git-raw-commits/2.0.11:
+ resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ dargs: 7.0.0
+ lodash: 4.17.21
+ meow: 8.1.2
+ split2: 3.2.2
+ through2: 4.0.2
+ dev: true
+
+ /gitlab/10.2.1:
+ resolution: {integrity: sha512-z+DxRF1C9uayVbocs9aJkJz+kGy14TSm1noB/rAIEBbXOkOYbjKxyuqJzt+0zeFpXFdgA0yq6DVVbvM7HIfGwg==}
+ engines: {node: '>=10.0.0'}
+ deprecated: 'The gitlab package has found a new home in the @gitbeaker organization. For the latest gitlab node library, check out @gitbeaker/node. A full list of the features can be found here: https://github.com/jdalrymple/gitbeaker#readme'
+ dependencies:
+ form-data: 2.5.1
+ humps: 2.0.1
+ ky: 0.12.0
+ ky-universal: 0.3.0_ky@0.12.0
+ li: 1.3.0
+ query-string: 6.14.1
+ universal-url: 2.0.0
+ dev: true
+
/glob-parent/5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@@ -4415,6 +5060,11 @@ packages:
resolution: {integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==}
dev: true
+ /has-flag/2.0.0:
+ resolution: {integrity: sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
/has-flag/3.0.0:
resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=}
engines: {node: '>=4'}
@@ -4484,6 +5134,11 @@ packages:
function-bind: 1.1.1
dev: true
+ /hasurl/1.0.0:
+ resolution: {integrity: sha512-43ypUd3DbwyCT01UYpA99AEZxZ4aKtRxWGBHEIbjcOsUghd9YUON0C+JF6isNjaiwC/UF5neaUudy6JS9jZPZQ==}
+ engines: {node: '>= 4'}
+ dev: true
+
/hoist-non-react-statics/3.3.2:
resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
dependencies:
@@ -4523,11 +5178,42 @@ packages:
toidentifier: 1.0.1
dev: true
+ /http-proxy-agent/2.1.0:
+ resolution: {integrity: sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==}
+ engines: {node: '>= 4.5.0'}
+ dependencies:
+ agent-base: 4.3.0
+ debug: 3.1.0
+ dev: true
+
+ /https-proxy-agent/2.2.4:
+ resolution: {integrity: sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==}
+ engines: {node: '>= 4.5.0'}
+ dependencies:
+ agent-base: 4.3.0
+ debug: 3.2.7
+ dev: true
+
/human-signals/2.1.0:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
dev: true
+ /humps/2.0.1:
+ resolution: {integrity: sha1-3QLqYIG9BWjcXQcxhEY5V7qe+ao=}
+ dev: true
+
+ /husky/7.0.4:
+ resolution: {integrity: sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==}
+ engines: {node: '>=12'}
+ hasBin: true
+ dev: true
+
+ /hyperlinker/1.0.0:
+ resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==}
+ engines: {node: '>=4'}
+ dev: true
+
/iconv-lite/0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
@@ -4607,7 +5293,7 @@ packages:
engines: {node: '>=6.0.0'}
dependencies:
ansi-escapes: 3.2.0
- chalk: 2.3.2
+ chalk: 2.4.2
cli-cursor: 2.1.0
cli-width: 2.2.1
external-editor: 2.2.0
@@ -4857,6 +5543,11 @@ packages:
resolution: {integrity: sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==}
dev: true
+ /is-stream/1.1.0:
+ resolution: {integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ=}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
/is-stream/2.0.1:
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
engines: {node: '>=8'}
@@ -4876,6 +5567,13 @@ packages:
has-symbols: 1.0.2
dev: true
+ /is-text-path/1.0.1:
+ resolution: {integrity: sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ text-extensions: 1.9.0
+ dev: true
+
/is-typedarray/1.0.0:
resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=}
dev: true
@@ -5005,6 +5703,16 @@ packages:
graceful-fs: 4.2.9
dev: true
+ /jsonparse/1.3.1:
+ resolution: {integrity: sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=}
+ engines: {'0': node >= 0.2.0}
+ dev: true
+
+ /jsonpointer/5.0.0:
+ resolution: {integrity: sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
/jsonwebtoken/8.5.1:
resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==}
engines: {node: '>=4', npm: '>=1.4.28'}
@@ -5095,6 +5803,22 @@ packages:
resolution: {integrity: sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==}
dev: true
+ /ky-universal/0.3.0_ky@0.12.0:
+ resolution: {integrity: sha512-CM4Bgb2zZZpsprcjI6DNYTaH3oGHXL2u7BU4DK+lfCuC4snkt9/WRpMYeKbBbXscvKkeqBwzzjFX2WwmKY5K/A==}
+ engines: {node: '>=8'}
+ peerDependencies:
+ ky: '>=0.12.0'
+ dependencies:
+ abort-controller: 3.0.0
+ ky: 0.12.0
+ node-fetch: 2.6.1
+ dev: true
+
+ /ky/0.12.0:
+ resolution: {integrity: sha512-t9b7v3V2fGwAcQnnDDQwKQGF55eWrf4pwi1RN08Fy8b/9GEwV7Ea0xQiaSW6ZbeghBHIwl8kgnla4vVo9seepQ==}
+ engines: {node: '>=8'}
+ dev: true
+
/language-subtag-registry/0.3.21:
resolution: {integrity: sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==}
dev: true
@@ -5113,6 +5837,10 @@ packages:
type-check: 0.4.0
dev: true
+ /li/1.3.0:
+ resolution: {integrity: sha1-IsWbyu+qmo7zWc91l4TkvxBq6hs=}
+ dev: true
+
/liftoff/2.5.0:
resolution: {integrity: sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=}
engines: {node: '>= 0.8'}
@@ -5188,6 +5916,14 @@ packages:
resolution: {integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168=}
dev: true
+ /lodash.find/4.6.0:
+ resolution: {integrity: sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=}
+ dev: true
+
+ /lodash.get/4.4.2:
+ resolution: {integrity: sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=}
+ dev: true
+
/lodash.includes/4.3.0:
resolution: {integrity: sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=}
dev: true
@@ -5204,6 +5940,10 @@ packages:
resolution: {integrity: sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=}
dev: true
+ /lodash.isobject/3.0.2:
+ resolution: {integrity: sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=}
+ dev: true
+
/lodash.isplainobject/4.0.6:
resolution: {integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=}
dev: true
@@ -5212,6 +5952,18 @@ packages:
resolution: {integrity: sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=}
dev: true
+ /lodash.keys/4.2.0:
+ resolution: {integrity: sha1-oIYCrBLk+4P5H8H7ejYKTZujUgU=}
+ dev: true
+
+ /lodash.mapvalues/4.6.0:
+ resolution: {integrity: sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=}
+ dev: true
+
+ /lodash.memoize/4.1.2:
+ resolution: {integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=}
+ dev: true
+
/lodash.merge/4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
dev: true
@@ -5220,10 +5972,22 @@ packages:
resolution: {integrity: sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=}
dev: true
+ /lodash.set/4.3.2:
+ resolution: {integrity: sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=}
+ dev: true
+
+ /lodash.sortby/4.7.0:
+ resolution: {integrity: sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=}
+ dev: true
+
/lodash.truncate/4.4.2:
resolution: {integrity: sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=}
dev: true
+ /lodash.uniq/4.5.0:
+ resolution: {integrity: sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=}
+ dev: true
+
/lodash/4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
dev: true
@@ -5241,6 +6005,11 @@ packages:
yallist: 4.0.0
dev: true
+ /macos-release/2.5.0:
+ resolution: {integrity: sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==}
+ engines: {node: '>=6'}
+ dev: true
+
/make-dir/3.1.0:
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
engines: {node: '>=8'}
@@ -5248,6 +6017,10 @@ packages:
semver: 6.3.0
dev: true
+ /make-error/1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+ dev: true
+
/make-iterator/1.0.1:
resolution: {integrity: sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==}
engines: {node: '>=0.10.0'}
@@ -5286,10 +6059,35 @@ packages:
engines: {node: '>= 0.6'}
dev: true
+ /memfs-or-file-map-to-github-branch/1.2.0_@octokit+core@3.5.1:
+ resolution: {integrity: sha512-PloI9AkRXrLQuBU1s7eYQpl+4hkL0U0h23lddMaJ3ZGUufn8pdNRxd1kCfBqL5gISCFQs78ttXS15e4/f5vcTA==}
+ dependencies:
+ '@octokit/rest': 16.43.2_@octokit+core@3.5.1
+ transitivePeerDependencies:
+ - '@octokit/core'
+ dev: true
+
/memoize-one/5.2.1:
resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==}
dev: false
+ /meow/8.1.2:
+ resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@types/minimist': 1.2.2
+ 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.3
+ read-pkg-up: 7.0.1
+ redent: 3.0.0
+ trim-newlines: 3.0.1
+ type-fest: 0.18.1
+ yargs-parser: 20.2.9
+ dev: true
+
/meow/9.0.0:
resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==}
engines: {node: '>=10'}
@@ -5524,6 +6322,19 @@ packages:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
dev: true
+ /nice-try/1.0.5:
+ resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
+ dev: true
+
+ /node-cleanup/2.1.2:
+ resolution: {integrity: sha1-esGavSl+Caf3KnFUXZUbUX5N3iw=}
+ dev: true
+
+ /node-fetch/2.6.1:
+ resolution: {integrity: sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==}
+ engines: {node: 4.x || >=6.0.0}
+ dev: true
+
/node-pre-gyp/0.11.0:
resolution: {integrity: sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==}
deprecated: 'Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future'
@@ -5599,6 +6410,13 @@ packages:
npm-normalize-package-bin: 1.0.1
dev: true
+ /npm-run-path/2.0.2:
+ resolution: {integrity: sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=}
+ engines: {node: '>=4'}
+ dependencies:
+ path-key: 2.0.1
+ dev: true
+
/npm-run-path/4.0.1:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'}
@@ -5718,6 +6536,10 @@ packages:
es-abstract: 1.19.1
dev: true
+ /octokit-pagination-methods/1.1.0:
+ resolution: {integrity: sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==}
+ dev: true
+
/on-finished/2.3.0:
resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=}
engines: {node: '>= 0.8'}
@@ -5767,6 +6589,14 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /os-name/3.1.0:
+ resolution: {integrity: sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==}
+ engines: {node: '>=6'}
+ dependencies:
+ macos-release: 2.5.0
+ windows-release: 3.3.3
+ dev: true
+
/os-tmpdir/1.0.2:
resolution: {integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=}
engines: {node: '>=0.10.0'}
@@ -5779,6 +6609,15 @@ packages:
os-tmpdir: 1.0.2
dev: true
+ /override-require/1.1.1:
+ resolution: {integrity: sha1-auIvresfhQ/7DPTCD/e4fl62UN8=}
+ dev: true
+
+ /p-finally/1.0.0:
+ resolution: {integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=}
+ engines: {node: '>=4'}
+ dev: true
+
/p-limit/1.3.0:
resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==}
engines: {node: '>=4'}
@@ -5845,6 +6684,10 @@ packages:
callsites: 3.1.0
dev: true
+ /parse-diff/0.7.1:
+ resolution: {integrity: sha512-1j3l8IKcy4yRK2W4o9EYvJLSzpAVwz4DXqCewYyx2vEwk2gcf3DBPqc8Fj4XV3K33OYJ08A8fWwyu/ykD/HUSg==}
+ dev: true
+
/parse-filepath/1.0.2:
resolution: {integrity: sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=}
engines: {node: '>=0.8'}
@@ -5854,6 +6697,21 @@ packages:
path-root: 0.1.1
dev: true
+ /parse-git-config/2.0.3:
+ resolution: {integrity: sha512-Js7ueMZOVSZ3tP8C7E3KZiHv6QQl7lnJ+OkbxoaFazzSa2KyEHqApfGbU3XboUgUnq4ZuUmskUpYKTNx01fm5A==}
+ engines: {node: '>=6'}
+ dependencies:
+ expand-tilde: 2.0.2
+ git-config-path: 1.0.1
+ ini: 1.3.8
+ dev: true
+
+ /parse-github-url/1.0.2:
+ resolution: {integrity: sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+ dev: true
+
/parse-json/5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
@@ -5864,6 +6722,12 @@ packages:
lines-and-columns: 1.2.4
dev: true
+ /parse-link-header/2.0.0:
+ resolution: {integrity: sha512-xjU87V0VyHZybn2RrCX5TIFGxTVZE6zqqZWMPlIKiSKuWh/X5WZdt+w1Ki1nXB+8L/KtL+nZ4iq+sfI6MrhhMw==}
+ dependencies:
+ xtend: 4.0.2
+ dev: true
+
/parse-passwd/1.0.0:
resolution: {integrity: sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=}
engines: {node: '>=0.10.0'}
@@ -5894,6 +6758,11 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /path-key/2.0.1:
+ resolution: {integrity: sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=}
+ engines: {node: '>=4'}
+ dev: true
+
/path-key/3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
@@ -5941,6 +6810,10 @@ packages:
engines: {node: '>=8.6'}
dev: true
+ /pinpoint/1.1.0:
+ resolution: {integrity: sha1-DPd1eml38b9/ajIge3CeN3OI6HQ=}
+ dev: true
+
/pkg-dir/4.2.0:
resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
engines: {node: '>=8'}
@@ -6019,6 +6892,14 @@ packages:
hasBin: true
dev: true
+ /prettyjson/1.2.4:
+ resolution: {integrity: sha512-w5IwaFqR3qFgl2WT7FE5zRh23TCWMM7nXwPrZaW2UdJKjumsriVrmaCOJ9EUd/nDt/LG2cCcVOIvwL4FzWRzFw==}
+ hasBin: true
+ dependencies:
+ colors: 1.4.0
+ minimist: 1.2.5
+ dev: true
+
/process-nextick-args/2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
dev: true
@@ -6043,16 +6924,38 @@ packages:
ipaddr.js: 1.9.1
dev: true
+ /pump/3.0.0:
+ resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
+ dependencies:
+ end-of-stream: 1.4.4
+ once: 1.4.0
+ dev: true
+
/punycode/2.1.1:
resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
engines: {node: '>=6'}
dev: true
+ /q/1.5.1:
+ resolution: {integrity: sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=}
+ engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
+ dev: true
+
/qs/6.9.6:
resolution: {integrity: sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==}
engines: {node: '>=0.6'}
dev: true
+ /query-string/6.14.1:
+ resolution: {integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==}
+ engines: {node: '>=6'}
+ dependencies:
+ decode-uri-component: 0.2.0
+ filter-obj: 1.1.0
+ split-on-first: 1.1.0
+ strict-uri-encode: 2.0.0
+ dev: true
+
/querystring/0.2.0:
resolution: {integrity: sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=}
engines: {node: '>=0.4.x'}
@@ -6228,6 +7131,20 @@ packages:
util-deprecate: 1.0.2
dev: true
+ /readable-stream/3.6.0:
+ resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==}
+ engines: {node: '>= 6'}
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+ dev: true
+
+ /readline-sync/1.4.10:
+ resolution: {integrity: sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==}
+ engines: {node: '>= 0.8.0'}
+ dev: true
+
/rechoir/0.6.2:
resolution: {integrity: sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=}
engines: {node: '>= 0.10'}
@@ -6410,6 +7327,11 @@ packages:
engines: {node: '>=0.10'}
dev: true
+ /require-directory/2.1.1:
+ resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
/require-from-string/2.0.2:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
@@ -6481,6 +7403,11 @@ packages:
engines: {node: '>=0.12'}
dev: true
+ /retry/0.12.0:
+ resolution: {integrity: sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=}
+ engines: {node: '>= 4'}
+ dev: true
+
/reusify/1.0.4:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -6724,6 +7651,13 @@ packages:
resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==}
dev: true
+ /shebang-command/1.2.0:
+ resolution: {integrity: sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ shebang-regex: 1.0.0
+ dev: true
+
/shebang-command/2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -6731,6 +7665,11 @@ packages:
shebang-regex: 3.0.0
dev: true
+ /shebang-regex/1.0.0:
+ resolution: {integrity: sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
/shebang-regex/3.0.0:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
@@ -6920,6 +7859,11 @@ packages:
hasBin: true
dev: true
+ /split-on-first/1.1.0:
+ resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==}
+ engines: {node: '>=6'}
+ dev: true
+
/split-string/3.1.0:
resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==}
engines: {node: '>=0.10.0'}
@@ -6927,6 +7871,12 @@ packages:
extend-shallow: 3.0.2
dev: true
+ /split2/3.2.2:
+ resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==}
+ dependencies:
+ readable-stream: 3.6.0
+ dev: true
+
/sqlite3/4.2.0:
resolution: {integrity: sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg==}
requiresBuild: true
@@ -6948,6 +7898,11 @@ packages:
engines: {node: '>= 0.6'}
dev: true
+ /strict-uri-encode/2.0.0:
+ resolution: {integrity: sha1-ucczDHBChi9rFC3CdLvMWGbONUY=}
+ engines: {node: '>=4'}
+ dev: true
+
/string-width/1.0.2:
resolution: {integrity: sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=}
engines: {node: '>=0.10.0'}
@@ -7033,6 +7988,11 @@ packages:
engines: {node: '>=4'}
dev: true
+ /strip-eof/1.0.0:
+ resolution: {integrity: sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
/strip-final-newline/2.0.0:
resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
engines: {node: '>=6'}
@@ -7243,6 +8203,14 @@ packages:
has-flag: 4.0.0
dev: true
+ /supports-hyperlinks/1.0.1:
+ resolution: {integrity: sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==}
+ engines: {node: '>=4'}
+ dependencies:
+ has-flag: 2.0.0
+ supports-color: 5.5.0
+ dev: true
+
/supports-preserve-symlinks-flag/1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
@@ -7338,6 +8306,11 @@ packages:
source-map-support: 0.5.21
dev: true
+ /text-extensions/1.9.0:
+ resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==}
+ engines: {node: '>=0.10'}
+ dev: true
+
/text-table/0.2.0:
resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=}
dev: true
@@ -7346,6 +8319,12 @@ packages:
resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=}
dev: true
+ /through2/4.0.2:
+ resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==}
+ dependencies:
+ readable-stream: 3.6.0
+ dev: true
+
/tildify/1.2.0:
resolution: {integrity: sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=}
engines: {node: '>=0.10.0'}
@@ -7406,6 +8385,12 @@ packages:
engines: {node: '>=0.6'}
dev: true
+ /tr46/1.0.1:
+ resolution: {integrity: sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=}
+ dependencies:
+ punycode: 2.1.1
+ dev: true
+
/trim-newlines/3.0.1:
resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
engines: {node: '>=8'}
@@ -7432,6 +8417,36 @@ packages:
webpack: 5.65.0_webpack-cli@4.9.1
dev: true
+ /ts-node/10.4.0_faf01e1d5a40372a98081522dcafc186:
+ resolution: {integrity: sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': '>=1.2.50'
+ '@swc/wasm': '>=1.2.50'
+ '@types/node': '*'
+ typescript: '>=2.7'
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+ dependencies:
+ '@cspotcode/source-map-support': 0.7.0
+ '@tsconfig/node10': 1.0.8
+ '@tsconfig/node12': 1.0.9
+ '@tsconfig/node14': 1.0.1
+ '@tsconfig/node16': 1.0.2
+ '@types/node': 17.0.8
+ acorn: 8.7.0
+ acorn-walk: 8.2.0
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 4.5.4
+ yn: 3.1.1
+ dev: true
+
/tsconfig-paths-webpack-plugin/3.5.2:
resolution: {integrity: sha512-EhnfjHbzm5IYI9YPNVIxx1moxMI4bpHD2e0zTXeDNQcwjjRaGepP7IhTHJkyDBG0CAOoxRfe7jCG630Ou+C6Pw==}
dependencies:
@@ -7572,6 +8587,24 @@ packages:
crypto-random-string: 2.0.0
dev: true
+ /universal-url/2.0.0:
+ resolution: {integrity: sha512-3DLtXdm/G1LQMCnPj+Aw7uDoleQttNHp2g5FnNQKR6cP6taNWS1b/Ehjjx4PVyvejKi3TJyu8iBraKM4q3JQPg==}
+ engines: {node: '>= 6'}
+ dependencies:
+ hasurl: 1.0.0
+ whatwg-url: 7.1.0
+ dev: true
+
+ /universal-user-agent/4.0.1:
+ resolution: {integrity: sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg==}
+ dependencies:
+ os-name: 3.1.0
+ dev: true
+
+ /universal-user-agent/6.0.0:
+ resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==}
+ dev: true
+
/universalify/0.1.2:
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
engines: {node: '>= 4.0.0'}
@@ -7697,6 +8730,10 @@ packages:
graceful-fs: 4.2.9
dev: true
+ /webidl-conversions/4.0.2:
+ resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
+ dev: true
+
/webpack-cli/4.9.1_webpack@5.65.0:
resolution: {integrity: sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==}
engines: {node: '>=10.13.0'}
@@ -7786,6 +8823,14 @@ packages:
- uglify-js
dev: true
+ /whatwg-url/7.1.0:
+ resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
+ dependencies:
+ lodash.sortby: 4.7.0
+ tr46: 1.0.1
+ webidl-conversions: 4.0.2
+ dev: true
+
/which-boxed-primitive/1.0.2:
resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
dependencies:
@@ -7814,18 +8859,34 @@ packages:
/wide-align/1.1.5:
resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
dependencies:
- string-width: 1.0.2
+ string-width: 4.2.3
dev: true
/wildcard/2.0.0:
resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==}
dev: true
+ /windows-release/3.3.3:
+ resolution: {integrity: sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg==}
+ engines: {node: '>=6'}
+ dependencies:
+ execa: 1.0.0
+ dev: true
+
/word-wrap/1.2.3:
resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
engines: {node: '>=0.10.0'}
dev: true
+ /wrap-ansi/7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ dev: true
+
/wrappy/1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
dev: true
@@ -7857,6 +8918,16 @@ packages:
engines: {node: '>=8'}
dev: true
+ /xtend/4.0.2:
+ resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+ engines: {node: '>=0.4'}
+ dev: true
+
+ /y18n/5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+ dev: true
+
/yallist/3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
dev: true
@@ -7875,6 +8946,29 @@ packages:
engines: {node: '>=10'}
dev: true
+ /yargs-parser/21.0.0:
+ resolution: {integrity: sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /yargs/17.3.1:
+ resolution: {integrity: sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==}
+ engines: {node: '>=12'}
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.1
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.0.0
+ dev: true
+
+ /yn/3.1.1:
+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
+ engines: {node: '>=6'}
+ dev: true
+
/yocto-queue/0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
diff --git a/templates/changelog-template.hbs b/templates/changelog-template.hbs
new file mode 100644
index 00000000..30755f98
--- /dev/null
+++ b/templates/changelog-template.hbs
@@ -0,0 +1,81 @@
+# Change Log
+
+All notable changes to TabMerger will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and TabMerger adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+{{#each releases}}
+ ## [{{title}}]({{href}}) ({{niceDate}})
+
+ ### Added
+
+ {{#each merges}}
+ {{#matches message '(feat|fix|perf|refactor|test):\sadd(ed)?' flags="i"}}
+ - {{#if commit.breaking}}**Breaking change:** {{/if}}{{message}}{{#if href}} [`!{{id}}`]({{href}}){{/if}}
+ {{/matches}}
+ {{/each}}
+ {{#each fixes}}
+ {{#matches commit.subject '(feat|fix|perf|refactor|test):.+?add(ed)?' flags="i"}}
+ - {{#if commit.breaking}}**Breaking change:** {{/if}}{{commit.subject}}{{#each fixes}}{{#if href}} [`#{{id}}`]({{href}}){{/if}}{{/each}}
+ {{/matches}}
+ {{/each}}
+ {{#each commits}}
+ {{#matches subject '(feat|fix|perf|refactor|test):.+?add(ed)?' flags="i"}}
+ - {{#if breaking}}**Breaking change:** {{/if}}{{subject}}{{#if href}} [`{{shorthash}}`]({{href}}){{/if}}
+ {{/matches}}
+ {{/each}}
+
+ ### Fixed
+
+ {{#each merges}}
+ {{#matches message '(feat|fix|perf|refactor|test):\sfix(ed)?' flags="i"}}
+ - {{#if commit.breaking}}**Breaking change:** {{/if}}{{message}}{{#if href}} [`!{{id}}`]({{href}}){{/if}}
+ {{/matches}}
+ {{/each}}
+ {{#each fixes}}
+ {{#matches commit.subject '(feat|fix|perf|refactor|test):.+?fix(ed)?' flags="i"}}
+ - {{#if commit.breaking}}**Breaking change:** {{/if}}{{commit.subject}}{{#each fixes}}{{#if href}} [`#{{id}}`]({{href}}){{/if}}{{/each}}
+ {{/matches}}
+ {{/each}}
+ {{#each commits}}
+ {{#matches subject '(feat|fix|perf|refactor|test):.+?fix(ed)?' flags="i"}}
+ - {{#if breaking}}**Breaking change:** {{/if}}{{subject}}{{#if href}} [`{{shorthash}}`]({{href}}){{/if}}
+ {{/matches}}
+ {{/each}}
+
+ ### Changed
+
+ {{#each merges}}
+ {{#matches message '(feat|fix|perf|refactor|test):\s(changed?|adjust(ed)?|updated?|upgraded?)' flags="i"}}
+ - {{#if commit.breaking}}**Breaking change:** {{/if}}{{message}}{{#if href}} [`!{{id}}`]({{href}}){{/if}}
+ {{/matches}}
+ {{/each}}
+ {{#each fixes}}
+ {{#matches commit.subject '(feat|fix|perf|refactor|test):.+?(changed?|adjust(ed)?|updated?|upgraded?)' flags="i"}}
+ - {{#if commit.breaking}}**Breaking change:** {{/if}}{{commit.subject}}{{#each fixes}}{{#if href}} [`#{{id}}`]({{href}}){{/if}}{{/each}}
+ {{/matches}}
+ {{/each}}
+ {{#each commits}}
+ {{#matches subject '(feat|fix|perf|refactor|test):.+?(changed?|adjust(ed)?|updated?|upgraded?)' flags="i"}}
+ - {{#if breaking}}**Breaking change:** {{/if}}{{subject}}{{#if href}} [`{{shorthash}}`]({{href}}){{/if}}
+ {{/matches}}
+ {{/each}}
+
+ ### Removed
+
+ {{#each merges}}
+ {{#matches message '(feat|fix|perf|refactor|test):\sremoved?' flags="i"}}
+ - {{#if commit.breaking}}**Breaking change:** {{/if}}{{message}}{{#if href}} [`!{{id}}`]({{href}}){{/if}}
+ {{/matches}}
+ {{/each}}
+ {{#each fixes}}
+ {{#matches commit.subject '(feat|fix|perf|refactor|test):.+?removed?' flags="i"}}
+ - {{#if commit.breaking}}**Breaking change:** {{/if}}{{commit.subject}}{{#each fixes}}{{#if href}} [`#{{id}}`]({{href}}){{/if}}{{/each}}
+ {{/matches}}
+ {{/each}}
+ {{#each commits}}
+ {{#matches subject '(feat|fix|perf|refactor|test):.+?removed?' flags="i"}}
+ - {{#if breaking}}**Breaking change:** {{/if}}{{subject}}{{#if href}} [`{{shorthash}}`]({{href}}){{/if}}
+ {{/matches}}
+ {{/each}}
+{{/each}}
\ No newline at end of file