diff --git a/package.json b/package.json index f39377bb..1732f942 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,8 @@ "@typescript-eslint/parser": "^6.13.1", "esbuild": "^0.19.8", "eslint": "^8.54.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.1", "husky": "^8.0.3", "knip": "^3.3.0", "lint-staged": "^15.1.0", diff --git a/static/main-module.ts b/static/main-module.ts new file mode 100644 index 00000000..384d47a7 --- /dev/null +++ b/static/main-module.ts @@ -0,0 +1,48 @@ +import { Octokit } from "@octokit/rest"; +import { GitHubIssue } from "./github-types"; +import { displayIssues } from "./scripts/display-issues"; + +export async function mainModule() { + const container = document.getElementById("issues-container") as HTMLDivElement; + if (!container) { + throw new Error("Could not find issues container"); + } + await fetchIssues(); + + async function fetchIssues() { + try { + const cachedIssues = localStorage.getItem("githubIssues"); + + if (cachedIssues) { + try { + const issues = JSON.parse(cachedIssues); + const sortedIssues = sortIssuesByComments(issues); + displayIssues(container, sortedIssues); + } catch (error) { + console.error(error); + } + } + + const octokit = new Octokit(); + + const freshIssues = (await octokit.paginate("GET /repos/ubiquity/devpool-directory/issues")) as GitHubIssue[]; + localStorage.setItem("githubIssues", JSON.stringify(freshIssues)); + const sortedIssues = sortIssuesByComments(freshIssues); + displayIssues(container, sortedIssues); + } catch (error) { + container.innerHTML = `

Error loading issues: ${error}

`; + } + } + + function sortIssuesByComments(issues: GitHubIssue[]) { + return issues.sort((a, b) => { + if (a.comments > b.comments) { + return -1; + } + if (a.comments < b.comments) { + return 1; + } + return 0; + }); + } +} diff --git a/static/main.ts b/static/main.ts index 31531515..092690d6 100644 --- a/static/main.ts +++ b/static/main.ts @@ -1,63 +1,5 @@ -import { Octokit } from "@octokit/rest"; -import { GitHubIssue } from "./github-types"; +import { mainModule } from "./main-module"; -export async function mainModule() { - await fetchIssues(); - - async function fetchIssues() { - const container = document.getElementById("issues-container"); - if (!container) { - throw new Error("Could not find issues container"); - } - container.innerHTML = "

Loading issues...

"; - - try { - const cachedIssues = localStorage.getItem("githubIssues"); - let issues: GitHubIssue[]; - - const octokit = new Octokit(); - const freshIssues = await octokit.paginate("GET /repos/ubiquity/devpool-directory/issues") as GitHubIssue[]; - - if (cachedIssues) { - issues = JSON.parse(cachedIssues); - // Update the cache with fresh issues - localStorage.setItem("githubIssues", JSON.stringify(freshIssues)); - } else { - issues = freshIssues; - localStorage.setItem("githubIssues", JSON.stringify(issues)); - } - - const sortedIssues = sortIssuesByComments(issues); - displayIssues(sortedIssues); - } catch (error) { - container.innerHTML = `

Error loading issues: ${error}

`; - } - } - - function displayIssues(issues: GitHubIssue[]) { - const container = document.getElementById("issues-container"); - issues.forEach((issue) => { - const issueElement = document.createElement("div"); - issueElement.innerHTML = ` -

${issue.title}

-

${issue.body}

- `; - container?.appendChild(issueElement); - }); - } - - function sortIssuesByComments(issues: GitHubIssue[]) { - return issues.sort((a, b) => { - if (a.comments > b.comments) { - return -1; - } - if (a.comments < b.comments) { - return 1; - } - return 0; - }); - } -} mainModule() .then(() => { console.log("mainModule loaded"); diff --git a/static/scripts/display-issues.ts b/static/scripts/display-issues.ts new file mode 100644 index 00000000..62339839 --- /dev/null +++ b/static/scripts/display-issues.ts @@ -0,0 +1,52 @@ +import { GitHubIssue } from "../github-types"; + +export function displayIssues(container: HTMLDivElement, issues: GitHubIssue[]) { + container.innerHTML = ""; + let delay = 0; + const baseDelay = 125; // Base delay in milliseconds + + issues.forEach((issue, index) => { + const issueWrapper = document.createElement("div"); + const issueElement = document.createElement("div"); + issueWrapper.classList.add("issue-element-wrapper"); + issueElement.classList.add("issue-element-inner"); + issueWrapper.classList.add("issue-fade-in"); + + // Calculate the delay using an approximation of the cubic-bezier(0,1,1,1) easing function + delay = baseDelay * ((index * index) / (issues.length - 1)); + + issueElement.style.animationDelay = `${delay}ms`; + + // Parse organization name and repository name from the issue's URL + + const urlRegex = /(https?:\/\/[^\s]+)/g; + const mirrorUrls = issue.body.match(urlRegex); + + const urlPattern = /https:\/\/github\.com\/([^/]+)\/([^/]+)\//; + const match = mirrorUrls?.shift()?.match(urlPattern); + const organizationName = match?.[1]; + const repositoryName = match?.[2]; + + issueElement.innerHTML = ` +

${issue.title}

+

${organizationName}

+

${repositoryName}

+ `; + + issueElement.addEventListener("click", () => { + console.log(issue); + + // console.log(foundUrls); + // window.open(foundUrls?.shift(), "_blank"); + }); + + issueWrapper.appendChild(issueElement); + + // Append the issue element after the delay + setTimeout(() => { + container.appendChild(issueWrapper); + // Trigger the animation by adding the 'visible' class + issueElement.classList.add("visible"); + }, delay); + }); +} diff --git a/static/style.css b/static/style.css index b4f9a6a9..b5ce3a2b 100644 --- a/static/style.css +++ b/static/style.css @@ -1,9 +1,16 @@ +html, body { - font-family: "Proxima Nova", "Ubiquity Nova", sans-serif; background-color: #06061aff; - color: #fff; + margin: 0; + padding: 0; background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABYWlDQ1BrQ0dDb2xvclNwYWNlRGlzcGxheVAzAAAokWNgYFJJLCjIYWFgYMjNKykKcndSiIiMUmB/yMAOhLwMYgwKicnFBY4BAT5AJQwwGhV8u8bACKIv64LMOiU1tUm1XsDXYqbw1YuvRJsw1aMArpTU4mQg/QeIU5MLikoYGBhTgGzl8pICELsDyBYpAjoKyJ4DYqdD2BtA7CQI+whYTUiQM5B9A8hWSM5IBJrB+API1klCEk9HYkPtBQFul8zigpzESoUAYwKuJQOUpFaUgGjn/ILKosz0jBIFR2AopSp45iXr6SgYGRiaMzCAwhyi+nMgOCwZxc4gxJrvMzDY7v////9uhJjXfgaGjUCdXDsRYhoWDAyC3AwMJ3YWJBYlgoWYgZgpLY2B4dNyBgbeSAYG4QtAPdHFacZGYHlGHicGBtZ7//9/VmNgYJ/MwPB3wv//vxf9//93MVDzHQaGA3kAFSFl7jXH0fsAAAA4ZVhJZk1NACoAAAAIAAGHaQAEAAAAAQAAABoAAAAAAAKgAgAEAAAAAQAAABigAwAEAAAAAQAAABgAAAAAwf1XlwAAACNJREFUSA3t0IEAAAAMBKFHm7/UTaQQWnXDgAEDBgwYMGDgAXaJAz4RVVHYAAAAAElFTkSuQmCC"); } +* { + font-family: "Proxima Nova", "Ubiquity Nova", sans-serif; + color: #fff; + font-weight: 400; + /* opacity:0.875; */ +} @font-face { font-family: "Ubiquity Nova"; font-style: normal; @@ -15,28 +22,98 @@ body { url(./fonts/ubiquity-nova-standard.ttf) format("truetype"); } -#issues-container { - margin: 20px; - padding: 10px; - border: 1px solid #ddd; - border-radius: 8px; +@keyframes fadeIn { + from { + opacity: 0; + /* background-color: #fff; */ + filter: blur(16px); + margin-left: 100vw; + } + to { + opacity: 0.75; + /* background-color: transparent; */ + filter: blur(0px); + margin-left: 1px; + } +} + +.issue-fade-in { + animation-name: fadeIn; + animation-duration: 0.5s; + animation-fill-mode: forwards; + opacity: 0; + animation-timing-function: cubic-bezier(0, 1, 1, 1); } -#issues-container div { - padding: 10px; - border-bottom: 1px solid #eee; +#issues-container { + /* margin: 20px; */ + /* padding: 10px; */ + /* border: 1px solid #808080; */ + /* border-radius: 8px; */ + padding: 8px; + /* border-left: 1px solid; */ } -#issues-container div:last-child { +#issues-container > div:first-child { + border-top: 1px solid #80808040; +} +#issues-container > div:last-child { + border-bottom: 1px solid #80808040; +} +/* #issues-container > div:last-child { border-bottom: none; +} */ +#issues-container > div { + padding: 8px 16px; + border-bottom: 1px solid #80808040; + /* opacity: 0.875 */ + /* margin: 24px auto; */ + /* line-height: 1; */ + overflow: hidden; + border-left: 1px solid #80808040; + cursor: pointer; +} +#issues-container > div:hover { + opacity: 1 !important; + border-left: 4px solid #808080; + padding-left: 13px; +} +#issues-container > div:active { + border-left: 4px solid #fff; } h3 { - margin: 0 0 10px 0; - color: #333; + margin: auto; + line-height: 1; + white-space: pre; + font-size: 16px; + /* font-weight: 100; */ } p { margin: 0; - color: #666; + line-height: 1; + color: #ffffffbf; + font-size: 12px; + text-align: right; + letter-spacing: 0.5px; + text-rendering: geometricPrecision; + position: absolute; + top: 0; + right: 0; +} + +.issue-element-inner { + margin: 12px auto; + position: relative; +} + +p.organization-name { + /* margin-bottom: 12px; */ + opacity: 0.5; + transform: translateY(-50%); +} +p.repository-name { + /* margin-top: 12px; */ + transform: translateY(50%); } diff --git a/tsconfig.json b/tsconfig.json index fb96ead8..23bf9f26 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -55,7 +55,7 @@ // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./static/dist", /* Specify an output folder for all emitted files. */ + "outDir": "./static/dist" /* Specify an output folder for all emitted files. */, // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ diff --git a/yarn.lock b/yarn.lock index 41f632e8..af4bf3ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -837,6 +837,20 @@ __metadata: languageName: node linkType: hard +"@pkgr/utils@npm:^2.3.1": + version: 2.4.2 + resolution: "@pkgr/utils@npm:2.4.2" + dependencies: + cross-spawn: ^7.0.3 + fast-glob: ^3.3.0 + is-glob: ^4.0.3 + open: ^9.1.0 + picocolors: ^1.0.0 + tslib: ^2.6.0 + checksum: 24e04c121269317d259614cd32beea3af38277151c4002df5883c4be920b8e3490bb897748e844f9d46bf68230f86dabd4e8f093773130e7e60529a769a132fc + languageName: node + linkType: hard + "@pnpm/constants@npm:7.1.1": version: 7.1.1 resolution: "@pnpm/constants@npm:7.1.1" @@ -1430,6 +1444,13 @@ __metadata: languageName: node linkType: hard +"big-integer@npm:^1.6.44": + version: 1.6.52 + resolution: "big-integer@npm:1.6.52" + checksum: 6e86885787a20fed96521958ae9086960e4e4b5e74d04f3ef7513d4d0ad631a9f3bde2730fc8aaa4b00419fc865f6ec573e5320234531ef37505da7da192c40b + languageName: node + linkType: hard + "bole@npm:^5.0.0": version: 5.0.9 resolution: "bole@npm:5.0.9" @@ -1440,6 +1461,15 @@ __metadata: languageName: node linkType: hard +"bplist-parser@npm:^0.2.0": + version: 0.2.0 + resolution: "bplist-parser@npm:0.2.0" + dependencies: + big-integer: ^1.6.44 + checksum: d5339dd16afc51de6c88f88f58a45b72ed6a06aa31f5557d09877575f220b7c1d3fbe375da0b62e6a10d4b8ed80523567e351f24014f5bc886ad523758142cdd + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -1477,6 +1507,15 @@ __metadata: languageName: node linkType: hard +"bundle-name@npm:^3.0.0": + version: 3.0.0 + resolution: "bundle-name@npm:3.0.0" + dependencies: + run-applescript: ^5.0.0 + checksum: edf2b1fbe6096ed32e7566947ace2ea937ee427391744d7510a2880c4b9a5b3543d3f6c551236a29e5c87d3195f8e2912516290e638c15bcbede7b37cc375615 + languageName: node + linkType: hard + "cacache@npm:^17.0.0": version: 17.1.3 resolution: "cacache@npm:17.1.3" @@ -1856,6 +1895,28 @@ __metadata: languageName: node linkType: hard +"default-browser-id@npm:^3.0.0": + version: 3.0.0 + resolution: "default-browser-id@npm:3.0.0" + dependencies: + bplist-parser: ^0.2.0 + untildify: ^4.0.0 + checksum: 279c7ad492542e5556336b6c254a4eaf31b2c63a5433265655ae6e47301197b6cfb15c595a6fdc6463b2ff8e1a1a1ed3cba56038a60e1527ba4ab1628c6b9941 + languageName: node + linkType: hard + +"default-browser@npm:^4.0.0": + version: 4.0.0 + resolution: "default-browser@npm:4.0.0" + dependencies: + bundle-name: ^3.0.0 + default-browser-id: ^3.0.0 + execa: ^7.1.1 + titleize: ^3.0.0 + checksum: 40c5af984799042b140300be5639c9742599bda76dc9eba5ac9ad5943c83dd36cebc4471eafcfddf8e0ec817166d5ba89d56f08e66a126c7c7908a179cead1a7 + languageName: node + linkType: hard + "defaults@npm:^1.0.3": version: 1.0.4 resolution: "defaults@npm:1.0.4" @@ -1865,6 +1926,13 @@ __metadata: languageName: node linkType: hard +"define-lazy-prop@npm:^3.0.0": + version: 3.0.0 + resolution: "define-lazy-prop@npm:3.0.0" + checksum: 54884f94caac0791bf6395a3ec530ce901cf71c47b0196b8754f3fd17edb6c0e80149c1214429d851873bb0d689dbe08dcedbb2306dc45c8534a5934723851b6 + languageName: node + linkType: hard + "define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0": version: 1.2.0 resolution: "define-properties@npm:1.2.0" @@ -2244,6 +2312,36 @@ __metadata: languageName: node linkType: hard +"eslint-config-prettier@npm:^9.0.0": + version: 9.0.0 + resolution: "eslint-config-prettier@npm:9.0.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 362e991b6cb343f79362bada2d97c202e5303e6865888918a7445c555fb75e4c078b01278e90be98aa98ae22f8597d8e93d48314bec6824f540f7efcab3ce451 + languageName: node + linkType: hard + +"eslint-plugin-prettier@npm:^5.0.1": + version: 5.0.1 + resolution: "eslint-plugin-prettier@npm:5.0.1" + dependencies: + prettier-linter-helpers: ^1.0.0 + synckit: ^0.8.5 + peerDependencies: + "@types/eslint": ">=8.0.0" + eslint: ">=8.0.0" + prettier: ">=3.0.0" + peerDependenciesMeta: + "@types/eslint": + optional: true + eslint-config-prettier: + optional: true + checksum: c2261033b97bafe99ccb7cc47c2fac6fa85b8bbc8b128042e52631f906b69e12afed2cdd9d7e3021cc892ee8dd4204a3574e1f32a0b718b4bb3b440944b6983b + languageName: node + linkType: hard + "eslint-scope@npm:^7.2.2": version: 7.2.2 resolution: "eslint-scope@npm:7.2.2" @@ -2400,6 +2498,23 @@ __metadata: languageName: node linkType: hard +"execa@npm:^7.1.1": + version: 7.2.0 + resolution: "execa@npm:7.2.0" + dependencies: + cross-spawn: ^7.0.3 + get-stream: ^6.0.1 + human-signals: ^4.3.0 + is-stream: ^3.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^5.1.0 + onetime: ^6.0.0 + signal-exit: ^3.0.7 + strip-final-newline: ^3.0.0 + checksum: 14fd17ba0ca8c87b277584d93b1d9fc24f2a65e5152b31d5eb159a3b814854283eaae5f51efa9525e304447e2f757c691877f7adff8fde5746aae67eb1edd1cc + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.1 resolution: "exponential-backoff@npm:3.1.1" @@ -2414,7 +2529,14 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:3.3.2, fast-glob@npm:^3.3.2": +"fast-diff@npm:^1.1.2": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: d22d371b994fdc8cce9ff510d7b8dc4da70ac327bcba20df607dd5b9cae9f908f4d1028f5fe467650f058d1e7270235ae0b8230809a262b4df587a3b3aa216c3 + languageName: node + linkType: hard + +"fast-glob@npm:3.3.2, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.2": version: 3.3.2 resolution: "fast-glob@npm:3.3.2" dependencies: @@ -2695,7 +2817,7 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^6.0.0": +"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": version: 6.0.1 resolution: "get-stream@npm:6.0.1" checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad @@ -3002,6 +3124,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^4.3.0": + version: 4.3.1 + resolution: "human-signals@npm:4.3.1" + checksum: 6f12958df3f21b6fdaf02d90896c271df00636a31e2bbea05bddf817a35c66b38a6fdac5863e2df85bd52f34958997f1f50350ff97249e1dff8452865d5235d1 + languageName: node + linkType: hard + "human-signals@npm:^5.0.0": version: 5.0.0 resolution: "human-signals@npm:5.0.0" @@ -3192,6 +3321,24 @@ __metadata: languageName: node linkType: hard +"is-docker@npm:^2.0.0": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 + languageName: node + linkType: hard + +"is-docker@npm:^3.0.0": + version: 3.0.0 + resolution: "is-docker@npm:3.0.0" + bin: + is-docker: cli.js + checksum: b698118f04feb7eaf3338922bd79cba064ea54a1c3db6ec8c0c8d8ee7613e7e5854d802d3ef646812a8a3ace81182a085dfa0a71cc68b06f3fa794b9783b3c90 + languageName: node + linkType: hard + "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -3222,6 +3369,17 @@ __metadata: languageName: node linkType: hard +"is-inside-container@npm:^1.0.0": + version: 1.0.0 + resolution: "is-inside-container@npm:1.0.0" + dependencies: + is-docker: ^3.0.0 + bin: + is-inside-container: cli.js + checksum: c50b75a2ab66ab3e8b92b3bc534e1ea72ca25766832c0623ac22d134116a98bcf012197d1caabe1d1c4bd5f84363d4aa5c36bb4b585fbcaf57be172cd10a1a03 + languageName: node + linkType: hard + "is-iterable@npm:^1.1.0": version: 1.1.1 resolution: "is-iterable@npm:1.1.1" @@ -3369,6 +3527,15 @@ __metadata: languageName: node linkType: hard +"is-wsl@npm:^2.2.0": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: ^2.0.0 + checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -4317,6 +4484,18 @@ __metadata: languageName: node linkType: hard +"open@npm:^9.1.0": + version: 9.1.0 + resolution: "open@npm:9.1.0" + dependencies: + default-browser: ^4.0.0 + define-lazy-prop: ^3.0.0 + is-inside-container: ^1.0.0 + is-wsl: ^2.2.0 + checksum: 3993c0f61d51fed8ac290e99c9c3cf45d3b6cfb3e2aa2b74cafd312c3486c22fd81df16ac8f3ab91dd8a4e3e729a16fc2480cfc406c4833416cf908acf1ae7c9 + languageName: node + linkType: hard + "optionator@npm:^0.9.3": version: 0.9.3 resolution: "optionator@npm:0.9.3" @@ -4531,6 +4710,13 @@ __metadata: languageName: node linkType: hard +"picocolors@npm:^1.0.0": + version: 1.0.0 + resolution: "picocolors@npm:1.0.0" + checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 + languageName: node + linkType: hard + "picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" @@ -4570,6 +4756,15 @@ __metadata: languageName: node linkType: hard +"prettier-linter-helpers@npm:^1.0.0": + version: 1.0.0 + resolution: "prettier-linter-helpers@npm:1.0.0" + dependencies: + fast-diff: ^1.1.2 + checksum: 00ce8011cf6430158d27f9c92cfea0a7699405633f7f1d4a45f07e21bf78e99895911cbcdc3853db3a824201a7c745bd49bfea8abd5fb9883e765a90f74f8392 + languageName: node + linkType: hard + "prettier@npm:^3.1.0": version: 3.1.0 resolution: "prettier@npm:3.1.0" @@ -4831,6 +5026,15 @@ __metadata: languageName: node linkType: hard +"run-applescript@npm:^5.0.0": + version: 5.0.0 + resolution: "run-applescript@npm:5.0.0" + dependencies: + execa: ^5.0.0 + checksum: d00c2dbfa5b2d774de7451194b8b125f40f65fc183de7d9dcae97f57f59433586d3c39b9001e111c38bfa24c3436c99df1bb4066a2a0c90d39a8c4cd6889af77 + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -5300,6 +5504,16 @@ __metadata: languageName: node linkType: hard +"synckit@npm:^0.8.5": + version: 0.8.5 + resolution: "synckit@npm:0.8.5" + dependencies: + "@pkgr/utils": ^2.3.1 + tslib: ^2.5.0 + checksum: 8a9560e5d8f3d94dc3cf5f7b9c83490ffa30d320093560a37b88f59483040771fd1750e76b9939abfbb1b5a23fd6dfbae77f6b338abffe7cae7329cd9b9bb86b + languageName: node + linkType: hard + "tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.1.15 resolution: "tar@npm:6.1.15" @@ -5344,6 +5558,13 @@ __metadata: languageName: node linkType: hard +"titleize@npm:^3.0.0": + version: 3.0.0 + resolution: "titleize@npm:3.0.0" + checksum: 71fbbeabbfb36ccd840559f67f21e356e1d03da2915b32d2ae1a60ddcc13a124be2739f696d2feb884983441d159a18649e8d956648d591bdad35c430a6b6d28 + languageName: node + linkType: hard + "to-no-case@npm:^1.0.0": version: 1.0.2 resolution: "to-no-case@npm:1.0.2" @@ -5407,6 +5628,8 @@ __metadata: dotenv: ^16.3.1 esbuild: ^0.19.8 eslint: ^8.54.0 + eslint-config-prettier: ^9.0.0 + eslint-plugin-prettier: ^5.0.1 husky: ^8.0.3 knip: ^3.3.0 lint-staged: ^15.1.0 @@ -5417,6 +5640,13 @@ __metadata: languageName: unknown linkType: soft +"tslib@npm:^2.5.0, tslib@npm:^2.6.0": + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad + languageName: node + linkType: hard + "tsx@npm:^4.6.0": version: 4.6.0 resolution: "tsx@npm:4.6.0" @@ -5584,6 +5814,13 @@ __metadata: languageName: node linkType: hard +"untildify@npm:^4.0.0": + version: 4.0.0 + resolution: "untildify@npm:4.0.0" + checksum: 39ced9c418a74f73f0a56e1ba4634b4d959422dff61f4c72a8e39f60b99380c1b45ed776fbaa0a4101b157e4310d873ad7d114e8534ca02609b4916bb4187fb9 + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1"