diff --git a/.gitattributes b/.gitattributes index f11dd22f..52faefba 100644 --- a/.gitattributes +++ b/.gitattributes @@ -9,5 +9,5 @@ *.yaml linguist-detectable=false *.md linguist-detectable=false *.sh linguist-detectable=false -*.hbs linguist-detectable=false -.env linguist-detectable=false \ No newline at end of file +.env.example linguist-detectable=false +.husky/* linguist-detectable=false \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index e16fa4c3..12420ccc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,10 +4,25 @@ 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). -## [Unreleased](https://github.com/lbragile/TabMerger/compare/v2.0.0...HEAD) (11 January 2022) + + + + +## [Unreleased](https://github.com/lbragile/TabMerger/compare/v2.0.0...HEAD) (Jan 26 2022) ### Added +- Global settings menu [`!42`](https://github.com/lbragile/TabMerger/pull/42) +- Success button on save [`#41`](https://github.com/lbragile/TabMerger/issues/41) +- Basic theme logic & colors in `ThemeProvider` [`#41`](https://github.com/lbragile/TabMerger/issues/41) +- `removeFile` and `erase` history abilities based on user input [`#41`](https://github.com/lbragile/TabMerger/issues/41) +- Auto export and sync functionality [`#41`](https://github.com/lbragile/TabMerger/issues/41) +- UI to `General` & `Filter` tabs [`#41`](https://github.com/lbragile/TabMerger/issues/41) +- Default group info change & extracted common values into constants [`#41`](https://github.com/lbragile/TabMerger/issues/41) +- Ability to focus search bar using shortcuts [`#41`](https://github.com/lbragile/TabMerger/issues/41) +- Keyboard shortcut commands [`#41`](https://github.com/lbragile/TabMerger/issues/41) +- `enter` (blur) vs `ctrl + enter` (show dropdown) in window title edit mode [`#38`](https://github.com/lbragile/TabMerger/issues/38) +- Window renaming abilities [`#38`](https://github.com/lbragile/TabMerger/issues/38) - 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) @@ -27,6 +42,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ### Fixed +- Local storage for enabling/disabling keyboard shortcuts [`#41`](https://github.com/lbragile/TabMerger/issues/41) - 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) @@ -43,6 +59,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ### Changed +- Theme values & improved tab index mobility for groups [`#41`](https://github.com/lbragile/TabMerger/issues/41) +- Dark mode theme for many components [`#41`](https://github.com/lbragile/TabMerger/issues/41) - 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) @@ -51,9 +69,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - 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) +## [v2.0.0](https://github.com/lbragile/TabMerger/compare/v1.6.2...v2.0.0) (Mar 06 2021) ### Added @@ -73,7 +89,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - 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/compare/v1.6.1...v1.6.2) (16 February 2021) +## [v1.6.2](https://github.com/lbragile/TabMerger/compare/v1.6.1...v1.6.2) (Feb 16 2021) ### Added @@ -90,7 +106,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - Merge button icons to remove confusion on direction of merging and popup text -## [v1.6.1](https://github.com/lbragile/TabMerger/compare/v1.6.0...v1.6.1) (06 February 2021) +## [v1.6.1](https://github.com/lbragile/TabMerger/compare/v1.6.0...v1.6.1) (Feb 06 2021) ### Fixed @@ -100,7 +116,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - Hidden/empty (no tab) groups from the print friendly PDF -## [v1.6.0](https://github.com/lbragile/TabMerger/compare/v1.5.0...v1.6.0) (04 February 2021) +## [v1.6.0](https://github.com/lbragile/TabMerger/compare/v1.5.0...v1.6.0) (Feb 04 2021) ### Added @@ -130,7 +146,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - 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/compare/v1.4.3...v1.5.0) (08 January 2021) +## [v1.5.0](https://github.com/lbragile/TabMerger/compare/v1.4.3...v1.5.0) (Jan 08 2021) ### Changed @@ -140,13 +156,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - Scroll to bottom upon adding group - New homepage website which loads much faster, providing better User Experience -## [v1.4.1 - v1.4.3](https://github.com/lbragile/TabMerger/compare/v1.4.0...v1.4.3) (22 December 2020) +## [v1.4.3](https://github.com/lbragile/TabMerger/compare/v1.4.0...v1.4.3) (Dec 22 2020) ### Fixed - Bugs in sync & incognito operation (stable as of v1.4.3) -## [v1.4.0](https://github.com/lbragile/TabMerger/compare/v1.3.0...v1.4.0) (21 December 2020) +## [v1.4.0](https://github.com/lbragile/TabMerger/compare/v1.3.0...v1.4.0) (Dec 21 2020) ### Changed @@ -158,7 +174,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - Deprecated PDF Export -## [v1.3.0 - v1.3.1](https://github.com/lbragile/TabMerger/compare/v1.2.1...v1.3.0) (14 December 2020) +## [v1.3.1](https://github.com/lbragile/TabMerger/compare/v1.2.1...v1.3.0) (Dec 14 2020) ### Added @@ -175,7 +191,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - Can restore settings back to default -## [v1.2.1](https://github.com/lbragile/TabMerger/compare/v1.2.0...v1.2.1) (06 December 2020) +## [v1.2.1](https://github.com/lbragile/TabMerger/compare/v1.2.0...v1.2.1) (Dec 06 2020) ## Added @@ -189,7 +205,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - Better UI for both FireFox and Chrome versions - Further support for languages added -## [v1.2.0](https://github.com/lbragile/TabMerger/compare/bd7f947...v1.2.0) (03 December 2020) +## [v1.2.0](https://github.com/lbragile/TabMerger/compare/bd7f947...v1.2.0) (Dec 03 2020) ### Added @@ -200,27 +216,27 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - 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](https://github.com/lbragile/TabMerger/compare/20533f0...bd7f947) (01 December 2020) +## [v1.1.3](https://github.com/lbragile/TabMerger/compare/20533f0...bd7f947) (Dec 01 2020) ### Fixed - Issue where extension icon click caused items to close without being merged in FireFox - Group title change persistence -## [v1.1.0 - v1.1.2](https://github.com/lbragile/TabMerger/compare/f61488f...20533f0) (30 November 2020) +## [v1.1.2](https://github.com/lbragile/TabMerger/compare/f61488f...20533f0) (Nov 30 2020) ### Added - Dark Mode - [FireFox](https://addons.mozilla.org/en-CA/firefox/addon/tabmerger/) support -## [v1.0.1](https://github.com/lbragile/TabMerger/compare/bae006f...f61488f) (28 November 2020) +## [v1.0.1](https://github.com/lbragile/TabMerger/compare/bae006f...f61488f) (Nov 28 2020) ### Added - Demo video and improved UI - Broader language support -## [v1.0.0](https://github.com/lbragile/TabMerger/compare/5ffab12...bae006f) (28 November 2020) +## [v1.0.0](https://github.com/lbragile/TabMerger/compare/5ffab12...bae006f) (Nov 28 2020) - Initial release includes core merging, grouping, restoring functionality diff --git a/autoChangeLog.ts b/autoChangeLog.ts new file mode 100644 index 00000000..a8e2e7f1 --- /dev/null +++ b/autoChangeLog.ts @@ -0,0 +1,119 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const { execSync } = require("child_process"); +const fs = require("fs"); + +/** + * @see https://stackoverflow.com/questions/14618022/how-does-git-log-since-count + */ +const afterDate = "2022-01-26T00:00:00-08:00"; + +const data = execSync(`git log --after=${afterDate}`, { encoding: "utf-8" }); +const latestTag = execSync("git describe --tags --abbrev=0", { encoding: "utf-8" }).replace("\n", ""); + +const commitArr: string[] = data + .replace(/(?<=commit\s\w{40}\n)(?:.+\n){2,3}/g, "") + .split(/commit\s/) + .filter((x: string) => x !== ""); + +function addMarkdownEntries(type: keyof typeof keepAChangeLog, title: string) { + if (keepAChangeLog[type].length > 0) { + markdownStr += `\n${title}\n\n`; + + keepAChangeLog[type].forEach((item) => { + const baseURL = `https://github.com/lbragile/TabMerger/${ + item.type === "pr" ? "pull" : item.type === "issue" ? "issues" : "commit" + }`; + + const id = item.type === "pr" ? `!${item.id}` : item.type === "issue" ? `#${item.id}` : item.hash.slice(0, 7); + const path = item.type === "regular" ? item.hash : item.id; + markdownStr += `- ${item.subject[0].toUpperCase() + item.subject.slice(1)} [\`${id}\`](${baseURL}/${path})\n`; + }); + } +} + +const keepAChangeLog: Record< + "added" | "fixed" | "changed" | "removed", + { type: "pr" | "issue" | "regular"; hash: string; subject: string; id?: string }[] +> = { + added: [], + fixed: [], + changed: [], + removed: [] +}; + +const getRegExp = (ending: string) => new RegExp(`(feat|fix|perf|refactor|test)(\\(.+?\\))?:\\s${ending}`, "i"); + +const insertIntoChangeLog = (type: keyof typeof keepAChangeLog, commit: string) => { + const hash = commit.slice(0, 40); + + const result = commit.match(/((feat|fix|perf|refactor|test)(\(.+?\))?:\s.+?\s(?.+))\n/); + const { subject } = result?.groups ?? {}; + + if (commit.includes("Merge pull request #")) { + const result = commit.match(/Merge pull request #(?\d+)\s/); + const { id } = result?.groups ?? {}; + keepAChangeLog[type].push({ type: "pr", hash, subject, id }); + } else if (commit.includes("Refs: #")) { + const result = commit.match(/Refs: #(?\d+)\s/); + const { id } = result?.groups ?? {}; + keepAChangeLog[type].push({ type: "issue", hash, subject, id }); + } else { + keepAChangeLog[type].push({ type: "regular", hash, subject }); + } +}; + +function formatByteStr(bytes: number) { + 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 outputStr; +} + +commitArr.forEach((commit) => { + if (getRegExp("add(ed)?").test(commit)) { + insertIntoChangeLog("added", commit); + } else if (getRegExp("fix(ed)?").test(commit)) { + insertIntoChangeLog("fixed", commit); + } else if (getRegExp("(changed?|adjust(ed)?|updated?|upgraded?)").test(commit)) { + insertIntoChangeLog("changed", commit); + } else if (getRegExp("removed?").test(commit)) { + insertIntoChangeLog("removed", commit); + } +}); + +const dateStr = new Date().toDateString().slice(4); +let markdownStr = `\n## [Unreleased](https://github.com/lbragile/TabMerger/compare/${latestTag}...HEAD) (${dateStr})\n`; + +addMarkdownEntries("added", "### Added"); +addMarkdownEntries("fixed", "### Fixed"); +addMarkdownEntries("changed", "### Changed"); +addMarkdownEntries("removed", "### Removed"); + +const CHANGELOG_PATH = "CHANGELOG.md"; +fs.readFile(CHANGELOG_PATH, "utf8", function (err: Error, data: string) { + if (err) return console.error(err); + + const startComment = ""; + const endComment = ""; + const replaceText = new RegExp(`(?<=${startComment})(.*)(?=${endComment})`, "s"); + const match = data.match(replaceText); + + if (match) { + const text = data.replace(replaceText, markdownStr); + + fs.writeFile(CHANGELOG_PATH, text, (err: Error) => { + if (err) return console.error(err); + console.info(`[Auto Changelog]: Success 🎉 - wrote ${formatByteStr(markdownStr.length)}`); + }); + } else { + console.info(`[Auto Changelog]: Failure ❌ - could not find start/end comments`); + } +}); diff --git a/config/auto-changelog.json b/config/auto-changelog.json deleted file mode 100644 index cf3829cf..00000000 --- a/config/auto-changelog.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "template": "./templates/changelog-template.hbs", - "startingDate": "2022-01-01", - "commitLimit": false, - "sortCommits": "date-desc", - "unreleased": true -} diff --git a/dangerfile.ts b/dangerfile.ts index ceab18fe..2646ad8c 100644 --- a/dangerfile.ts +++ b/dangerfile.ts @@ -8,7 +8,7 @@ function generateCollapsibleList(items: string[], summary: string): string {
${summary}
    - ${items.map((item) => `
  • ${danger.github.utils.fileLinks([item])}
  • `).join("\n")} + ${items.map((item) => `
  • ${danger.github.utils.fileLinks([item], false)}
  • `).join("\n")}
`; @@ -46,7 +46,7 @@ function formatByteStr(bytes: number, addPrefix = false) { const subject = commit.message.split("\n")[0]; return ( - (!subject.match(/^(feat|fix|build|chore|ci|style|refactor|perf|test|docs):/i) && + (!subject.match(/^(feat|fix|build|chore|ci|style|refactor|perf|test|docs)(\(.+?\))?:/i) && !subject.includes("Merge pull request")) || subject.length > LONG_COMMIT_MESSAGE_THRESHOLD ); @@ -54,8 +54,7 @@ function formatByteStr(bytes: number, addPrefix = false) { const MALFORMED_COMMIT_MESSAGE = ` Some commit messages do not match the expected format (helps us generate changelogs). -
-
+
Violating Commits
    @@ -64,6 +63,7 @@ function formatByteStr(bytes: number, addPrefix = false) { .join("\n")}
+ See ${danger.utils.href( "https://www.conventionalcommits.org/en/v1.0.0/", "Conventional Commits" @@ -110,6 +110,9 @@ function formatByteStr(bytes: number, addPrefix = false) { Comparing: ${danger.git.base.slice(0, 7)}...${danger.git.head.slice(0, 7)} +
+ Insights + Note: the following excludes changes to \`pnpm-lock.yaml\` due to its volatile nature. | Filename | Base | Current | +/- | % | @@ -117,7 +120,7 @@ function formatByteStr(bytes: number, addPrefix = false) { ${fileSizeMapper .map( (item) => - `| ${danger.github.utils.fileLinks([item.filename])} | ${item.base} | ${item.current} | ${item.diff} | ${ + `| ${danger.github.utils.fileLinks([item.filename], false)} | ${item.base} | ${item.current} | ${item.diff} | ${ item.percent } |` ) @@ -127,6 +130,8 @@ function formatByteStr(bytes: number, addPrefix = false) { true )} | ${getPrefixSymbol(totalPercentage)}${totalPercentage.toFixed(2)}% | +
+ ### Summary ${generateCollapsibleList(danger.git.modified_files, "Changed Files")} diff --git a/package.json b/package.json index 6c87e202..1e0b3785 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "stylelint-processor-styled-components": "^1.10.0", "stylelint-webpack-plugin": "^3.1.1", "ts-loader": "^9.2.6", + "ts-node-dev": "^1.1.8", "tsconfig-paths-webpack-plugin": "^3.5.2", "typescript": "^4.5.4", "url-loader": "^4.1.1", @@ -83,7 +84,7 @@ "webpack": "webpack --config config/webpack.config.js --progress", "start": "cross-env NODE_ENV=development pnpm webpack", "build": "cross-env NODE_ENV=production pnpm webpack", - "changelog": "auto-changelog --config ./config/auto-changelog.json" + "changelog": "pnpm ts-node-dev autoChangeLog.ts" }, "babel": { "extends": "./config/.babelrc.json" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fd400be8..f131a785 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -56,6 +56,7 @@ specifiers: stylelint-processor-styled-components: ^1.10.0 stylelint-webpack-plugin: ^3.1.1 ts-loader: ^9.2.6 + ts-node-dev: ^1.1.8 tsconfig-paths-webpack-plugin: ^3.5.2 typescript: ^4.5.4 url-loader: ^4.1.1 @@ -120,6 +121,7 @@ devDependencies: stylelint-processor-styled-components: 1.10.0 stylelint-webpack-plugin: 3.1.1_stylelint@14.2.0+webpack@5.66.0 ts-loader: 9.2.6_typescript@4.5.4+webpack@5.66.0 + ts-node-dev: 1.1.8_typescript@4.5.4 tsconfig-paths-webpack-plugin: 3.5.2 typescript: 4.5.4 url-loader: 4.1.1_webpack@5.66.0 @@ -2186,6 +2188,14 @@ packages: '@types/node': 17.0.10 dev: true + /@types/strip-bom/3.0.0: + resolution: {integrity: sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=} + dev: true + + /@types/strip-json-comments/0.0.30: + resolution: {integrity: sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==} + dev: true + /@types/styled-components/5.1.20: resolution: {integrity: sha512-TvpQceFwnxJJsAzR1aHsYpL5DxWMHRzM2/0EA6sGtRjV6DtJubmNxeoPMPiIPQzKEGNHccwObXO7Hug/iwm1Xw==} dependencies: @@ -2577,6 +2587,14 @@ packages: color-convert: 2.0.1 dev: true + /anymatch/3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + /arg/4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true @@ -2771,6 +2789,11 @@ packages: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: true + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -2860,6 +2883,21 @@ packages: supports-color: 7.2.0 dev: true + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.2 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /chrome-trace-event/1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} @@ -3422,6 +3460,12 @@ packages: engines: {node: '>=10'} dev: true + /dynamic-dedupe/0.3.0: + resolution: {integrity: sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE=} + dependencies: + xtend: 4.0.2 + dev: true + /ecdsa-sig-formatter/1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} dependencies: @@ -4024,6 +4068,14 @@ packages: resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} dev: true + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true @@ -4414,6 +4466,13 @@ packages: has-bigints: 1.0.1 dev: true + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + /is-boolean-object/1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} @@ -5015,6 +5074,12 @@ packages: resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} dev: true + /mkdirp/1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + dev: true + /ms/2.0.0: resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} dev: true @@ -5621,6 +5686,13 @@ packages: util-deprecate: 1.0.2 dev: true + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + /readline-sync/1.4.10: resolution: {integrity: sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==} engines: {node: '>= 0.8.0'} @@ -5768,6 +5840,13 @@ packages: engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true + /rimraf/2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true + dependencies: + glob: 7.2.0 + dev: true + /rimraf/3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true @@ -6060,6 +6139,11 @@ packages: min-indent: 1.0.1 dev: true + /strip-json-comments/2.0.1: + resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=} + engines: {node: '>=0.10.0'} + dev: true + /strip-json-comments/3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -6367,6 +6451,11 @@ packages: punycode: 2.1.1 dev: true + /tree-kill/1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + dev: true + /trim-newlines/3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} @@ -6387,6 +6476,30 @@ packages: webpack: 5.66.0_webpack-cli@4.9.1 dev: true + /ts-node-dev/1.1.8_typescript@4.5.4: + resolution: {integrity: sha512-Q/m3vEwzYwLZKmV6/0VlFxcZzVV/xcgOt+Tx/VjaaRHyiBcFlV0541yrT09QjzzCxlDZ34OzKjrFAynlmtflEg==} + engines: {node: '>=0.8.0'} + hasBin: true + peerDependencies: + node-notifier: '*' + typescript: '*' + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + chokidar: 3.5.3 + dynamic-dedupe: 0.3.0 + minimist: 1.2.5 + mkdirp: 1.0.4 + resolve: 1.21.0 + rimraf: 2.7.1 + source-map-support: 0.5.21 + tree-kill: 1.2.2 + ts-node: 9.1.1_typescript@4.5.4 + tsconfig: 7.0.0 + typescript: 4.5.4 + dev: true + /ts-node/10.4.0_82b55006877de54992e74492b614ace9: resolution: {integrity: sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==} hasBin: true @@ -6417,6 +6530,22 @@ packages: yn: 3.1.1 dev: true + /ts-node/9.1.1_typescript@4.5.4: + resolution: {integrity: sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==} + engines: {node: '>=10.0.0'} + hasBin: true + peerDependencies: + typescript: '>=2.7' + dependencies: + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + source-map-support: 0.5.21 + typescript: 4.5.4 + yn: 3.1.1 + dev: true + /tsconfig-paths-webpack-plugin/3.5.2: resolution: {integrity: sha512-EhnfjHbzm5IYI9YPNVIxx1moxMI4bpHD2e0zTXeDNQcwjjRaGepP7IhTHJkyDBG0CAOoxRfe7jCG630Ou+C6Pw==} dependencies: @@ -6434,6 +6563,15 @@ packages: strip-bom: 3.0.0 dev: true + /tsconfig/7.0.0: + resolution: {integrity: sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==} + dependencies: + '@types/strip-bom': 3.0.0 + '@types/strip-json-comments': 0.0.30 + strip-bom: 3.0.0 + strip-json-comments: 2.0.1 + dev: true + /tslib/1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true diff --git a/templates/changelog-template.hbs b/templates/changelog-template.hbs deleted file mode 100644 index 30755f98..00000000 --- a/templates/changelog-template.hbs +++ /dev/null @@ -1,81 +0,0 @@ -# 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