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} + +
+ `; +} + +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 + +
+ 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