joshuakgoldberg 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -29,6 +29,7 @@ Also cats. 🐱
29
29
  Because I'm independent, I rely on sponsors to fund my work.
30
30
  They deserve our sincere appreciation and gratitude.
31
31
 
32
+ <!-- spell-checker: disable -->
32
33
  <!-- markdownlint-disable sentences-per-line -->
33
34
  <table width="100%">
34
35
  <thead>
@@ -44,14 +45,23 @@ They deserve our sincere appreciation and gratitude.
44
45
  <a href="https://github.com/beyang">
45
46
  <img alt="Beyang Liu" src="https://github.com/beyang.png?size=100" />
46
47
  </a>
48
+ <a href="https://github.com/constituentvoice">
49
+ <img alt="Constituent Voice" src="https://github.com/constituentvoice.png?size=100" />
50
+ </a>
47
51
  <a href="https://github.com/Loops-so">
48
52
  <img alt="Loops" src="https://github.com/Loops-so.png?size=100" />
49
53
  </a>
54
+ <a href="https://github.com/webpro">
55
+ <img alt="Lars Kappert" src="https://github.com/webpro.png?size=100" />
56
+ </a>
50
57
  </td>
51
58
  <td >
52
59
  <a href="https://github.com/AkiraBrand">
53
60
  <img alt="Akira " src="https://github.com/AkiraBrand.png?size=50" />
54
61
  </a>
62
+ <a href="https://github.com/ElianCodes">
63
+ <img alt="Elian ☕️" src="https://github.com/ElianCodes.png?size=50" />
64
+ </a>
55
65
  <a href="https://github.com/eps1lon">
56
66
  <img alt="Sebastian Silbermann" src="https://github.com/eps1lon.png?size=50" />
57
67
  </a>
@@ -79,8 +89,8 @@ They deserve our sincere appreciation and gratitude.
79
89
  <a href="https://github.com/kitsonk">
80
90
  <img alt="Kitson Kelly" src="https://github.com/kitsonk.png?size=50" />
81
91
  </a>
82
- <a href="https://github.com/nickytonline">
83
- <img alt="Nick Taylor" src="https://github.com/nickytonline.png?size=50" />
92
+ <a href="https://github.com/rtbenfield">
93
+ <img alt="Tyler Benfield" src="https://github.com/rtbenfield.png?size=50" />
84
94
  </a>
85
95
  <a href="https://github.com/rwaskiewicz">
86
96
  <img alt="Ryan Waskiewicz" src="https://github.com/rwaskiewicz.png?size=50" />
@@ -96,9 +106,6 @@ They deserve our sincere appreciation and gratitude.
96
106
  <a href="https://github.com/danfry1">
97
107
  <img alt="Daniel Fry" src="https://github.com/danfry1.png?size=50" />
98
108
  </a>
99
- <a href="https://github.com/ElianCodes">
100
- <img alt="Elian ☕️" src="https://github.com/ElianCodes.png?size=50" />
101
- </a>
102
109
  <a href="https://github.com/johnnyreilly">
103
110
  <img alt="John Reilly" src="https://github.com/johnnyreilly.png?size=50" />
104
111
  </a>
@@ -108,6 +115,9 @@ They deserve our sincere appreciation and gratitude.
108
115
  <a href="https://github.com/kevinctofel">
109
116
  <img alt="Kevin C. Tofel" src="https://github.com/kevinctofel.png?size=50" />
110
117
  </a>
118
+ <a href="https://github.com/nickytonline">
119
+ <img alt="Nick Taylor" src="https://github.com/nickytonline.png?size=50" />
120
+ </a>
111
121
  <a href="https://github.com/santoshyadavdev">
112
122
  <img alt="Santosh Yadav" src="https://github.com/santoshyadavdev.png?size=50" />
113
123
  </a>
@@ -120,6 +130,9 @@ They deserve our sincere appreciation and gratitude.
120
130
  <a href="https://github.com/usmangenx">
121
131
  <img alt="Muhammad Usman Javed" src="https://github.com/usmangenx.png?size=50" />
122
132
  </a>
133
+ <a href="https://github.com/xavdid">
134
+ <img alt="David Brownman" src="https://github.com/xavdid.png?size=50" />
135
+ </a>
123
136
  </td>
124
137
  </tr>
125
138
  </tbody>
@@ -158,10 +171,10 @@ If you work with TypeScript, you may have used one of the open source projects I
158
171
  <td><img alt="Stars: TypeStat" src="https://img.shields.io/github/stars/JoshuaKGoldberg/TypeStat" /></td>
159
172
  </tr>
160
173
  <tr>
161
- <th span="row"><a href="https://github.com/JoshuaKGoldberg/create-typescript-app">create-typescript-app</a></th>
162
- <td>Quickstart-friendly TypeScript template with comprehensive formatting, linting, releases, testing, and other great tooling built-in.</td>
174
+ <th span="row"><a href="https://github.com/JoshuaKGoldberg/JoshuaKGoldberg">JoshuaKGoldberg</a></th>
175
+ <td>Quickstart-friendly TypeScript template with comprehensive formatting, linting, releases, testing, and other great tooling built-in. ✨</td>
163
176
  <td>Creator & maintainer</td>
164
- <td><img alt="Stars: create-typescript-app" src="https://img.shields.io/github/stars/JoshuaKGoldberg/create-typescript-app" /></td>
177
+ <td><img alt="Stars: JoshuaKGoldberg" src="https://img.shields.io/github/stars/JoshuaKGoldberg/JoshuaKGoldberg" /></td>
165
178
  </tr>
166
179
  </tbody>
167
180
  </table>
@@ -207,7 +220,7 @@ These projects will help you add emoji delighters to your page quickly.
207
220
  </tr>
208
221
  <tr>
209
222
  <th span="row"><a href="https://github.com/JoshuaKGoldberg/astro-konamimojisplosion">astro-konamimojisplosion</a></th>
210
- <td>Astro integration to quickly integrate konamimojisplosion into your site. 🎉 ✨ 🎆</td>
223
+ <td>Astro integration to quickly load konamimojisplosion into your site. 🎉 ✨ 🎆</td>
211
224
  <td>Creator & maintainer</td>
212
225
  <td><img alt="Stars: astro-konamimojisplosion" src="https://img.shields.io/github/stars/JoshuaKGoldberg/astro-konamimojisplosion" /></td>
213
226
  </tr>
@@ -293,6 +306,12 @@ I work on assorted projects in the JavaScript/TypeScript ecosystem that make it
293
306
  <td>Creator & maintainer</td>
294
307
  <td><img alt="Stars: prettier-plugin-curly" src="https://img.shields.io/github/stars/JoshuaKGoldberg/prettier-plugin-curly" /></td>
295
308
  </tr>
309
+ <tr>
310
+ <th span="row"><a href="https://github.com/JoshuaKGoldberg/ts-api-utils">ts-api-utils</a></th>
311
+ <td>Utility functions for working with TypeScript's API. Successor to the wonderful ajafff/tsutils.</td>
312
+ <td>Creator & maintainer</td>
313
+ <td><img alt="Stars: ts-api-utils" src="https://img.shields.io/github/stars/JoshuaKGoldberg/ts-api-utils" /></td>
314
+ </tr>
296
315
  <tr>
297
316
  <th span="row"><a href="https://github.com/JoshuaKGoldberg/refined-saved-replies">refined-saved-replies</a></th>
298
317
  <td>A Chrome extension for GitHub's Saved Replies that adds replies from a repository's .github/replies.yml.</td>
@@ -312,14 +331,14 @@ I work on assorted projects in the JavaScript/TypeScript ecosystem that make it
312
331
  <td><img alt="Stars: ts-function-inliner" src="https://img.shields.io/github/stars/JoshuaKGoldberg/ts-function-inliner" /></td>
313
332
  </tr>
314
333
  <tr>
315
- <th span="row"><a href="https://github.com/JoshuaKGoldberg/ts-api-utils">ts-api-utils</a></th>
316
- <td>Utility functions for working with TypeScript's API. Successor to the wonderful ajafff/tsutils.</td>
334
+ <th span="row"><a href="https://github.com/JoshuaKGoldberg/cached-factory">cached-factory</a></th>
335
+ <td>Creates and caches values under keys. 🏭</td>
317
336
  <td>Creator & maintainer</td>
318
- <td><img alt="Stars: ts-api-utils" src="https://img.shields.io/github/stars/JoshuaKGoldberg/ts-api-utils" /></td>
337
+ <td><img alt="Stars: cached-factory" src="https://img.shields.io/github/stars/JoshuaKGoldberg/cached-factory" /></td>
319
338
  </tr>
320
339
  <tr>
321
340
  <th span="row"><a href="https://github.com/JoshuaKGoldberg/console-fail-test">console-fail-test</a></th>
322
- <td>Gently fails test runs if the console was used during them. ✋</td>
341
+ <td>Gently fails test runs if the console was used during them.</td>
323
342
  <td>Creator & maintainer</td>
324
343
  <td><img alt="Stars: console-fail-test" src="https://img.shields.io/github/stars/JoshuaKGoldberg/console-fail-test" /></td>
325
344
  </tr>
@@ -331,22 +350,22 @@ I work on assorted projects in the JavaScript/TypeScript ecosystem that make it
331
350
  </tr>
332
351
  <tr>
333
352
  <th span="row"><a href="https://github.com/JoshuaKGoldberg/are-docs-informative">are-docs-informative</a></th>
334
- <td>Checks whether a documentation description introduces any new information.</td>
353
+ <td>Checks whether a documentation description introduces any new information. ℹ️</td>
335
354
  <td>Creator & maintainer</td>
336
355
  <td><img alt="Stars: are-docs-informative" src="https://img.shields.io/github/stars/JoshuaKGoldberg/are-docs-informative" /></td>
337
356
  </tr>
338
- <tr>
339
- <th span="row"><a href="https://github.com/JoshuaKGoldberg/tidelift-me-up">tidelift-me-up</a></th>
340
- <td>Finds your npm packages that are eligible for Tidelift funding. 💸</td>
341
- <td>Creator & maintainer</td>
342
- <td><img alt="Stars: tidelift-me-up" src="https://img.shields.io/github/stars/JoshuaKGoldberg/tidelift-me-up" /></td>
343
- </tr>
344
357
  <tr>
345
358
  <th span="row"><a href="https://github.com/JoshuaKGoldberg/should-semantic-release">should-semantic-release</a></th>
346
359
  <td>Checks whether a semantic release should be run for a commit.</td>
347
360
  <td>Creator & maintainer</td>
348
361
  <td><img alt="Stars: should-semantic-release" src="https://img.shields.io/github/stars/JoshuaKGoldberg/should-semantic-release" /></td>
349
362
  </tr>
363
+ <tr>
364
+ <th span="row"><a href="https://github.com/JoshuaKGoldberg/tidelift-me-up">tidelift-me-up</a></th>
365
+ <td>Finds your npm packages that are eligible for Tidelift funding. 💸</td>
366
+ <td>Creator & maintainer</td>
367
+ <td><img alt="Stars: tidelift-me-up" src="https://img.shields.io/github/stars/JoshuaKGoldberg/tidelift-me-up" /></td>
368
+ </tr>
350
369
  <tr>
351
370
  <th span="row"><a href="https://github.com/JoshuaKGoldberg/github-sponsors-to-markdown">github-sponsors-to-markdown</a></th>
352
371
  <td>Creates a Markdown table summarizing your GitHub sponsors.</td>
@@ -355,7 +374,7 @@ I work on assorted projects in the JavaScript/TypeScript ecosystem that make it
355
374
  </tr>
356
375
  <tr>
357
376
  <th span="row"><a href="https://github.com/JoshuaKGoldberg/all-contributors-for-repository">all-contributors-for-repository</a></th>
358
- <td>Generates an allcontributors list for an existing repository. 👪</td>
377
+ <td>Generates an allcontributors list for an existing repository. 🤝</td>
359
378
  <td>Creator & maintainer</td>
360
379
  <td><img alt="Stars: all-contributors-for-repository" src="https://img.shields.io/github/stars/JoshuaKGoldberg/all-contributors-for-repository" /></td>
361
380
  </tr>
@@ -377,15 +396,10 @@ I work on assorted projects in the JavaScript/TypeScript ecosystem that make it
377
396
  <td>Creator & maintainer</td>
378
397
  <td><img alt="Stars: sinon-timers-repeatable" src="https://img.shields.io/github/stars/JoshuaKGoldberg/sinon-timers-repeatable" /></td>
379
398
  </tr>
380
- <tr>
381
- <th span="row"><a href="https://github.com/JoshuaKGoldberg/cached-factory">cached-factory</a></th>
382
- <td>Creates and caches values under keys. 🏭</td>
383
- <td>Creator & maintainer</td>
384
- <td><img alt="Stars: cached-factory" src="https://img.shields.io/github/stars/JoshuaKGoldberg/cached-factory" /></td>
385
- </tr>
386
399
  </tbody>
387
400
  </table>
388
401
  <!-- markdownlint-enable sentences-per-line -->
402
+ <!-- spell-checker: enable -->
389
403
 
390
404
  ## Development
391
405
 
@@ -401,17 +415,7 @@ Thanks! 💖
401
415
  <table>
402
416
  <tbody>
403
417
  <tr>
404
- <td align="center" valign="top" width="14.28%"><a href="http://www.joshuakgoldberg.com"><img src="https://avatars.githubusercontent.com/u/3335181?v=4?s=100" width="100px;" alt="Josh Goldberg"/><br /><sub><b>Josh Goldberg</b></sub></a><br />
405
- <a href="https://github.com/JoshuaKGoldberg/JoshuaKGoldberg/issues?q=author%3AJoshuaKGoldberg" title="Bug reports">🐛</a>
406
- <a href="https://github.com/JoshuaKGoldberg/JoshuaKGoldberg/commits?author=JoshuaKGoldberg" title="Code">💻</a>
407
- <a href="#maintenance-JoshuaKGoldberg" title="Maintenance">🚧</a>
408
- <a href="https://github.com/JoshuaKGoldberg/JoshuaKGoldberg/pulls?q=is%3Apr+reviewed-by%3AJoshuaKGoldberg" title="Reviewed Pull Requests">👀</a>
409
- <a href="#tool-JoshuaKGoldberg" title="Tools">🔧</a>
410
- <a href="https://github.com/JoshuaKGoldberg/JoshuaKGoldberg/commits?author=JoshuaKGoldberg" title="Documentation">📖</a>
411
- <a href="#infra-JoshuaKGoldberg" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a>
412
- <a href="https://github.com/JoshuaKGoldberg/JoshuaKGoldberg/commits?author=JoshuaKGoldberg" title="Tests">⚠️</a>
413
- <a href="#content-JoshuaKGoldberg" title="Content">🖋</a>
414
- <a href="#ideas-JoshuaKGoldberg" title="Ideas, Planning, & Feedback">🤔</a>
418
+ <td align="center" valign="top" width="14.28%"><a href="http://www.joshuakgoldberg.com"><img src="https://avatars.githubusercontent.com/u/3335181?v=4?s=100" width="100px;" alt="Josh Goldberg"/><br /><sub><b>Josh Goldberg</b></sub></a><br /><a href="#maintenance-JoshuaKGoldberg" title="Maintenance">🚧</a> <a href="#tool-JoshuaKGoldberg" title="Tools">🔧</a></td>
415
419
  </tr>
416
420
  </tbody>
417
421
  </table>
@@ -424,4 +428,4 @@ Thanks! 💖
424
428
 
425
429
  <!-- You can remove this notice if you don't want it 🙂 no worries! -->
426
430
 
427
- > 💙 This package is based on [@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg)'s [create-typescript-app](https://github.com/JoshuaKGoldberg/create-typescript-app).
431
+ > 💙 This package is based on [@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg)'s [JoshuaKGoldberg](https://github.com/JoshuaKGoldberg/JoshuaKGoldberg).
package/lib/add/cli.js CHANGED
@@ -1,3 +1,4 @@
1
1
  import { add } from "./index.js";
2
2
  const repos = Array.from(new Set(process.argv.slice(2).sort()));
3
3
  await add(repos);
4
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/add/cli.ts"],"sourcesContent":["import { add } from \"./index.js\";\n\nconst repos = Array.from(new Set(process.argv.slice(2).sort()));\n\nawait add(repos);\n"],"mappings":"AAAA,SAAS,WAAW;AAEpB,MAAM,QAAQ,MAAM,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;AAE9D,MAAM,IAAI,KAAK;","names":[]}
package/lib/add/index.js CHANGED
@@ -42,3 +42,4 @@ async function add(repos) {
42
42
  export {
43
43
  add
44
44
  };
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/add/index.ts"],"sourcesContent":["import chalk from \"chalk\";\n\nimport { projectCategories } from \"../projects.js\";\nimport { writeProjects } from \"../shared/writeProjects.js\";\n\nexport async function add(repos: string[]) {\n\tconst categoryKey = \"Tooling\";\n\n\tif (!repos.length) {\n\t\tthrow new Error(\"No repositories provided.\");\n\t}\n\n\tconst existingProjectNames = new Set(\n\t\tprojectCategories[categoryKey].projects.map((project) => project.repo),\n\t);\n\n\tconst newRepos = repos.filter((repo) => {\n\t\tconst exists = existingProjectNames.has(repo);\n\n\t\tif (exists) {\n\t\t\tconsole.warn(chalk.yellow(`Repo ${repo} already exists...`));\n\t\t\treturn false;\n\t\t}\n\n\t\tconsole.info(chalk.blue(`Repo ${repo} does not already exist.`));\n\t\treturn true;\n\t});\n\n\tif (!newRepos.length) {\n\t\tconsole.log(chalk.green(\"Nothing to update. Bailing.\"));\n\t} else {\n\t\tawait writeProjects({\n\t\t\t...projectCategories,\n\t\t\t[categoryKey]: {\n\t\t\t\t...projectCategories[categoryKey],\n\t\t\t\tprojects: [\n\t\t\t\t\t...projectCategories[categoryKey].projects,\n\t\t\t\t\t...newRepos.map((repo) => ({\n\t\t\t\t\t\tdescription: \"\",\n\t\t\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\t\t\trepo,\n\t\t\t\t\t\tstars: -1,\n\t\t\t\t\t})),\n\t\t\t\t],\n\t\t\t},\n\t\t});\n\n\t\tconsole.log(chalk.green(\"Now run the generate command.\"));\n\t}\n}\n"],"mappings":"AAAA,OAAO,WAAW;AAElB,SAAS,yBAAyB;AAClC,SAAS,qBAAqB;AAE9B,eAAsB,IAAI,OAAiB;AAC1C,QAAM,cAAc;AAEpB,MAAI,CAAC,MAAM,QAAQ;AAClB,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC5C;AAEA,QAAM,uBAAuB,IAAI;AAAA,IAChC,kBAAkB,WAAW,EAAE,SAAS,IAAI,CAAC,YAAY,QAAQ,IAAI;AAAA,EACtE;AAEA,QAAM,WAAW,MAAM,OAAO,CAAC,SAAS;AACvC,UAAM,SAAS,qBAAqB,IAAI,IAAI;AAE5C,QAAI,QAAQ;AACX,cAAQ,KAAK,MAAM,OAAO,QAAQ,IAAI,oBAAoB,CAAC;AAC3D,aAAO;AAAA,IACR;AAEA,YAAQ,KAAK,MAAM,KAAK,QAAQ,IAAI,0BAA0B,CAAC;AAC/D,WAAO;AAAA,EACR,CAAC;AAED,MAAI,CAAC,SAAS,QAAQ;AACrB,YAAQ,IAAI,MAAM,MAAM,6BAA6B,CAAC;AAAA,EACvD,OAAO;AACN,UAAM,cAAc;AAAA,MACnB,GAAG;AAAA,MACH,CAAC,WAAW,GAAG;AAAA,QACd,GAAG,kBAAkB,WAAW;AAAA,QAChC,UAAU;AAAA,UACT,GAAG,kBAAkB,WAAW,EAAE;AAAA,UAClC,GAAG,SAAS,IAAI,CAAC,UAAU;AAAA,YAC1B,aAAa;AAAA,YACb,OAAO;AAAA,YACP;AAAA,YACA,OAAO;AAAA,UACR,EAAE;AAAA,QACH;AAAA,MACD;AAAA,IACD,CAAC;AAED,YAAQ,IAAI,MAAM,MAAM,+BAA+B,CAAC;AAAA,EACzD;AACD;","names":[]}
@@ -1,2 +1,3 @@
1
1
  import { generate } from "./index.js";
2
2
  await generate();
3
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/generate/cli.ts"],"sourcesContent":["import { generate } from \"./index.js\";\n\nawait generate();\n"],"mappings":"AAAA,SAAS,gBAAgB;AAEzB,MAAM,SAAS;","names":[]}
@@ -34,3 +34,4 @@ async function generateProjects() {
34
34
  export {
35
35
  generateProjects
36
36
  };
37
+ //# sourceMappingURL=generateProjects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/generate/generateProjects.ts"],"sourcesContent":["import * as emoji from \"node-emoji\";\nimport { Octokit } from \"octokit\";\n\nimport { projectCategories } from \"../projects.js\";\nimport { writeProjects } from \"../shared/writeProjects.js\";\nimport { Project } from \"../types.js\";\n\nexport async function generateProjects() {\n\tconst { GH_TOKEN: auth } = process.env;\n\tif (!auth) {\n\t\tthrow new Error(\"No auth token specified by process.env.GH_TOKEN.\");\n\t}\n\n\tconst octokit = new Octokit({ auth });\n\n\tfor (const { projects } of Object.values(projectCategories)) {\n\t\tawait processProjects(projects);\n\t}\n\n\tasync function processProjects(projects: Project[]) {\n\t\tprojects.sort((a, b) => b.stars - a.stars);\n\n\t\tfor (const project of projects) {\n\t\t\tawait processProject(project);\n\t\t}\n\t}\n\n\tasync function processProject(project: Project) {\n\t\tconst { owner, repo } = project;\n\t\tconst response = await octokit.rest.repos.get({ owner, repo });\n\n\t\tproject.description = emoji.emojify(\n\t\t\tresponse.data.description ?? project.description,\n\t\t);\n\t\tproject.stars = response.data.stargazers_count;\n\n\t\tif (project.more) {\n\t\t\tawait processProjects(project.more);\n\t\t}\n\t}\n\n\tawait writeProjects(projectCategories);\n\n\treturn projectCategories;\n}\n"],"mappings":"AAAA,YAAY,WAAW;AACvB,SAAS,eAAe;AAExB,SAAS,yBAAyB;AAClC,SAAS,qBAAqB;AAG9B,eAAsB,mBAAmB;AACxC,QAAM,EAAE,UAAU,KAAK,IAAI,QAAQ;AACnC,MAAI,CAAC,MAAM;AACV,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACnE;AAEA,QAAM,UAAU,IAAI,QAAQ,EAAE,KAAK,CAAC;AAEpC,aAAW,EAAE,SAAS,KAAK,OAAO,OAAO,iBAAiB,GAAG;AAC5D,UAAM,gBAAgB,QAAQ;AAAA,EAC/B;AAEA,iBAAe,gBAAgB,UAAqB;AACnD,aAAS,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAEzC,eAAW,WAAW,UAAU;AAC/B,YAAM,eAAe,OAAO;AAAA,IAC7B;AAAA,EACD;AAEA,iBAAe,eAAe,SAAkB;AAC/C,UAAM,EAAE,OAAO,KAAK,IAAI;AACxB,UAAM,WAAW,MAAM,QAAQ,KAAK,MAAM,IAAI,EAAE,OAAO,KAAK,CAAC;AAE7D,YAAQ,cAAc,MAAM;AAAA,MAC3B,SAAS,KAAK,eAAe,QAAQ;AAAA,IACtC;AACA,YAAQ,QAAQ,SAAS,KAAK;AAE9B,QAAI,QAAQ,MAAM;AACjB,YAAM,gBAAgB,QAAQ,IAAI;AAAA,IACnC;AAAA,EACD;AAEA,QAAM,cAAc,iBAAiB;AAErC,SAAO;AACR;","names":[]}
@@ -41,3 +41,4 @@ ${description.replaceAll(". ", ".\n")}
41
41
  export {
42
42
  generateProjectsTable
43
43
  };
44
+ //# sourceMappingURL=generateProjectsTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/generate/generateProjectsTable.ts"],"sourcesContent":["import { Project } from \"../types.js\";\n\nexport interface ProjectsTableOptions {\n\tdescription: string;\n\tprojects: Project[];\n\ttitle: string;\n}\n\nexport function generateProjectsTable({\n\tdescription,\n\tprojects,\n\ttitle,\n}: ProjectsTableOptions) {\n\treturn `\n### ${title}\n\n${description.replaceAll(\". \", \".\\n\")}\n\n<!-- markdownlint-disable sentences-per-line -->\n<table width=\"100%\">\n\t<thead>\n\t\t<th span=\"col\">Project ⚙️</th>\n\t\t<th span=\"col\">Description 📝</th>\n\t\t<th span=\"col\">Role 🧑‍🏭</th>\n\t\t<th span=\"col\">Stars ⭐</th>\n\t</thead>\n\t<tbody>\n\t\t${projects\n\t\t\t.map(\n\t\t\t\t({\n\t\t\t\t\tdescription,\n\t\t\t\t\towner,\n\t\t\t\t\trepo,\n\t\t\t\t\tname = repo,\n\t\t\t\t\trole = \"Creator & maintainer\",\n\t\t\t\t}) =>\n\t\t\t\t\t`\n\t\t<tr>\n\t\t\t<th span=\"row\"><a href=\"https://github.com/${owner}/${repo}\">${name}</a></th>\n\t\t\t<td>${description}</td>\n\t\t\t<td>${role}</td>\n\t\t\t<td><img alt=\"Stars: ${name}\" src=\"https://img.shields.io/github/stars/${owner}/${repo}\" /></td>\n\t\t</tr>\n\t\t`.trim(),\n\t\t\t)\n\t\t\t.join(\"\\n\\t\\t\")}\n\t</tbody>\n</table>\n<!-- markdownlint-enable sentences-per-line -->\n`.trimStart();\n}\n"],"mappings":"AAQO,SAAS,sBAAsB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AACD,GAAyB;AACxB,SAAO;AAAA,MACF,KAAK;AAAA;AAAA,EAET,YAAY,WAAW,MAAM,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWjC,SACA;AAAA,IACA,CAAC;AAAA,MACA,aAAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,IACR,MACC;AAAA;AAAA,gDAE2C,KAAK,IAAI,IAAI,KAAK,IAAI;AAAA,SAC7DA,YAAW;AAAA,SACX,IAAI;AAAA,0BACa,IAAI,8CAA8C,KAAK,IAAI,IAAI;AAAA;AAAA,IAErF,KAAK;AAAA,EACN,EACC,KAAK,MAAQ,CAAC;AAAA;AAAA;AAAA;AAAA,EAIhB,UAAU;AACZ;","names":["description"]}
@@ -11,3 +11,4 @@ async function generateProjectsTables() {
11
11
  export {
12
12
  generateProjectsTables
13
13
  };
14
+ //# sourceMappingURL=generateProjectsTables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/generate/generateProjectsTables.ts"],"sourcesContent":["import { generateProjects } from \"./generateProjects.js\";\nimport { generateProjectsTable } from \"./generateProjectsTable.js\";\n\nexport async function generateProjectsTables() {\n\tconst projectsData = await generateProjects();\n\n\treturn (\n\t\tawait Promise.all(\n\t\t\tObject.entries(projectsData).map(([title, section]) =>\n\t\t\t\tgenerateProjectsTable({ ...section, title }),\n\t\t\t),\n\t\t)\n\t).join(\"\\n\");\n}\n"],"mappings":"AAAA,SAAS,wBAAwB;AACjC,SAAS,6BAA6B;AAEtC,eAAsB,yBAAyB;AAC9C,QAAM,eAAe,MAAM,iBAAiB;AAE5C,UACC,MAAM,QAAQ;AAAA,IACb,OAAO,QAAQ,YAAY,EAAE;AAAA,MAAI,CAAC,CAAC,OAAO,OAAO,MAChD,sBAAsB,EAAE,GAAG,SAAS,MAAM,CAAC;AAAA,IAC5C;AAAA,EACD,GACC,KAAK,IAAI;AACZ;","names":[]}
@@ -30,3 +30,4 @@ async function buildSponsorsTable() {
30
30
  export {
31
31
  buildSponsorsTable
32
32
  };
33
+ //# sourceMappingURL=generateSponsorsTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/generate/generateSponsorsTable.ts"],"sourcesContent":["import { githubSponsorsToMarkdown } from \"github-sponsors-to-markdown\";\n\nexport async function buildSponsorsTable() {\n\treturn await githubSponsorsToMarkdown({\n\t\tlogin: \"JoshuaKGoldberg\",\n\t\ttiers: {\n\t\t\tBronze: {\n\t\t\t\tlabel: \"Bronze Sponsors (&gt;=$5/mo)\",\n\t\t\t\tminimum: 5,\n\t\t\t\tsize: 50,\n\t\t\t},\n\t\t\tGold: {\n\t\t\t\tlabel: \"Gold Sponsors (&gt;=$25/mo)\",\n\t\t\t\tminimum: 25,\n\t\t\t\tsize: 100,\n\t\t\t},\n\t\t\tPlatinum: {\n\t\t\t\tlabel: \"Platinum Sponsors (&gt;=$100/mo)\",\n\t\t\t\tminimum: 100,\n\t\t\t\tsize: 150,\n\t\t\t},\n\t\t\tSilver: {\n\t\t\t\tlabel: \"Silver Sponsors (&gt;=$10/mo)\",\n\t\t\t\tminimum: 10,\n\t\t\t\tsize: 50,\n\t\t\t},\n\t\t},\n\t\tverbose: true,\n\t});\n}\n"],"mappings":"AAAA,SAAS,gCAAgC;AAEzC,eAAsB,qBAAqB;AAC1C,SAAO,MAAM,yBAAyB;AAAA,IACrC,OAAO;AAAA,IACP,OAAO;AAAA,MACN,QAAQ;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,MACP;AAAA,MACA,MAAM;AAAA,QACL,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,MACP;AAAA,MACA,UAAU;AAAA,QACT,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,MACP;AAAA,MACA,QAAQ;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,MACP;AAAA,IACD;AAAA,IACA,SAAS;AAAA,EACV,CAAC;AACF;","names":[]}
@@ -55,3 +55,4 @@ ${(await fs.readFile("./README.md")).toString().split("## Development")[1]}
55
55
  export {
56
56
  generate
57
57
  };
58
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/generate/index.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\n\nimport { writeFile } from \"../shared/writeFile.js\";\nimport { generateProjectsTables } from \"./generateProjectsTables.js\";\nimport { buildSponsorsTable } from \"./generateSponsorsTable.js\";\n\nexport async function generate() {\n\tconst content = `\n## Hi, I'm Josh! 💖\n\n<!--\nFun fact: the entirety of this README.md is auto-generated!\nSee https://github.com/JoshuaKGoldberg/JoshuaKGoldberg.\n-->\n\n[![Follow on Bluesky](https://img.shields.io/badge/Follow-Bluesky-3B82F6.svg)](https://staging.bsky.app/profile/joshuakgoldberg.com)\n[![Follow on Mastodon](https://img.shields.io/badge/Follow-Mastodon-5A47DC.svg)](https://fosstodon.org/@JoshuaKGoldberg)\n[![Follow on Twitch](https://img.shields.io/badge/Follow-Twitch-9147FF.svg)](https://twitch.tv/JoshuaKGoldberg)\n[![Follow on Twitter](https://img.shields.io/badge/Follow-Twitter-1DA1F2.svg)](https://twitter.com/JoshuaKGoldberg)\n[![Subscribe on YouTube](https://img.shields.io/badge/Subscribe-YouTube-FF0000.svg)](https://youtube.com/@JoshuaKGoldberg)\n\n[![Email Me](https://img.shields.io/badge/Email-github@joshuakgoldberg.com-007735.svg)](mailto:me@joshuakgoldberg.com)\n[![Sponsor on GitHub](https://img.shields.io/badge/Sponsor-GitHub-6cc644.svg)](https://github.com/sponsors/joshuakgoldberg)\n\nI'm an independent full time open source developer.\n\nI work on projects in the TypeScript ecosystem, most notably [typescript-eslint](https://typescript-eslint.io): the tooling that enables ESLint and Prettier to run on TypeScript code.\nI'm also the author of O'Reilly's [_Learning TypeScript_ book](https://www.learningtypescript.com), a Microsoft MVP for developer technologies, and an active conference speaker.\n\nMy personal projects range from static analysis to meta-languages to recreating retro games in the browser.\nAlso cats. 🐱\n\n---\n\n## Thanks to my Sponsors\n\nBecause I'm independent, I rely on sponsors to fund my work.\nThey deserve our sincere appreciation and gratitude.\n\n<!-- markdownlint-disable sentences-per-line -->\n${await buildSponsorsTable()}\n<!-- markdownlint-enable sentences-per-line -->\n\n> 💚 Motivated to support my work, or just want your image here?\n> See my [GitHub Sponsors profile](https://github.com/sponsors/JoshuaKGoldberg).\n> Thanks!\n\n## What I'm Working On\n\n${await generateProjectsTables()}\n\n## Development\n${(await fs.readFile(\"./README.md\")).toString().split(\"## Development\")[1]}\n`.trimStart();\n\n\tawait writeFile(\"./README.md\", content, \"markdown\");\n}\n"],"mappings":"AAAA,OAAO,QAAQ;AAEf,SAAS,iBAAiB;AAC1B,SAAS,8BAA8B;AACvC,SAAS,0BAA0B;AAEnC,eAAsB,WAAW;AAChC,QAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiCf,MAAM,mBAAmB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS1B,MAAM,uBAAuB,CAAC;AAAA;AAAA;AAAA,GAG7B,MAAM,GAAG,SAAS,aAAa,GAAG,SAAS,EAAE,MAAM,gBAAgB,EAAE,CAAC,CAAC;AAAA,EACxE,UAAU;AAEX,QAAM,UAAU,eAAe,SAAS,UAAU;AACnD;","names":[]}
package/lib/index.js CHANGED
@@ -2,3 +2,4 @@ import { projectCategories } from "./projects.js";
2
2
  export {
3
3
  projectCategories
4
4
  };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { projectCategories } from \"./projects.js\";\n\nexport { projectCategories };\n\nexport type * from \"./types.js\";\n"],"mappings":"AAAA,SAAS,yBAAyB;","names":[]}
package/lib/projects.js CHANGED
@@ -11,20 +11,20 @@ const projectCategories = {
11
11
  owner: "typescript-eslint",
12
12
  repo: "typescript-eslint",
13
13
  role: "Maintainer",
14
- stars: 13788
14
+ stars: 13813
15
15
  },
16
16
  {
17
17
  description: "Converts JavaScript to TypeScript and TypeScript to better TypeScript.",
18
- image: "https://www.joshuakgoldberg.com/img/typestat.png",
19
18
  owner: "JoshuaKGoldberg",
20
19
  repo: "TypeStat",
21
- stars: 1595
20
+ stars: 1661
22
21
  },
23
22
  {
24
- description: "Quickstart-friendly TypeScript template with comprehensive formatting, linting, releases, testing, and other great tooling built-in.",
23
+ description: "A quickstart-friendly TypeScript template with comprehensive formatting, linting, releases, testing, and other great tooling built-in. \u2728",
24
+ image: "https://www.joshuakgoldberg.com/img/create-typescript-app.png",
25
25
  owner: "JoshuaKGoldberg",
26
26
  repo: "create-typescript-app",
27
- stars: 334
27
+ stars: 352
28
28
  }
29
29
  ]
30
30
  },
@@ -36,7 +36,7 @@ const projectCategories = {
36
36
  owner: "omnidan",
37
37
  repo: "node-emoji",
38
38
  role: "Junior maintainer",
39
- stars: 1228
39
+ stars: 1230
40
40
  },
41
41
  {
42
42
  description: "\u{1F4A5} Blasts \u{1F604} emoji \u{1F60A} like \u{1F386} fireworks \u{1F387} all up in your \u{1F4BB} HTML \u{1F4C4} page. \u{1F60D}",
@@ -45,7 +45,7 @@ const projectCategories = {
45
45
  },
46
46
  owner: "JoshuaKGoldberg",
47
47
  repo: "Emojisplosion",
48
- stars: 86
48
+ stars: 88
49
49
  },
50
50
  {
51
51
  description: "Connects konami-code-js to emojisplosion for a glorious easter egg. \u{1F389} \u2728 \u{1F386}",
@@ -60,7 +60,7 @@ const projectCategories = {
60
60
  stars: 3
61
61
  },
62
62
  {
63
- description: "Astro integration to quickly integrate konamimojisplosion into your site. \u{1F389} \u2728 \u{1F386}",
63
+ description: "Astro integration to quickly load konamimojisplosion into your site. \u{1F389} \u2728 \u{1F386}",
64
64
  owner: "JoshuaKGoldberg",
65
65
  repo: "astro-konamimojisplosion",
66
66
  stars: 1
@@ -77,7 +77,7 @@ const projectCategories = {
77
77
  owner: "JoshuaKGoldberg",
78
78
  repo: "Old-Deleted-FullScreenMario",
79
79
  role: "Creator",
80
- stars: 2993
80
+ stars: 2994
81
81
  },
82
82
  {
83
83
  description: "A free HTML5 remake of the original Pokemon, expanded for modern browsing.",
@@ -96,7 +96,7 @@ const projectCategories = {
96
96
  description: "Choosing a modern JavaScript UI framework, Pokemon-style.",
97
97
  owner: "JoshuaKGoldberg",
98
98
  repo: "ChooseYourFramework",
99
- stars: 67
99
+ stars: 68
100
100
  },
101
101
  {
102
102
  description: "A unified syntax that compiles into your favorite OOP languages. \u{1F99C}",
@@ -123,7 +123,7 @@ const projectCategories = {
123
123
  ],
124
124
  owner: "budgielang",
125
125
  repo: "Budgie",
126
- stars: 59
126
+ stars: 58
127
127
  }
128
128
  ]
129
129
  },
@@ -135,7 +135,7 @@ const projectCategories = {
135
135
  owner: "dmnd",
136
136
  repo: "dedent",
137
137
  role: "Adoptive maintainer",
138
- stars: 754
138
+ stars: 755
139
139
  },
140
140
  {
141
141
  description: "ESLint plugin with $ExpectType, $ExpectError, and $ExpectTypeSnapshot type assertions",
@@ -148,13 +148,19 @@ const projectCategories = {
148
148
  description: "Prettier plugin to enforce consistent brace style for all control statements.",
149
149
  owner: "JoshuaKGoldberg",
150
150
  repo: "prettier-plugin-curly",
151
- stars: 31
151
+ stars: 32
152
+ },
153
+ {
154
+ description: "Utility functions for working with TypeScript's API. Successor to the wonderful ajafff/tsutils.",
155
+ owner: "JoshuaKGoldberg",
156
+ repo: "ts-api-utils",
157
+ stars: 21
152
158
  },
153
159
  {
154
160
  description: "A Chrome extension for GitHub's Saved Replies that adds replies from a repository's .github/replies.yml.",
155
161
  owner: "JoshuaKGoldberg",
156
162
  repo: "refined-saved-replies",
157
- stars: 21
163
+ stars: 20
158
164
  },
159
165
  {
160
166
  description: "\u{1F3AD} Mocks out Redux actions and selectors for clean React Jest tests.",
@@ -169,10 +175,10 @@ const projectCategories = {
169
175
  stars: 20
170
176
  },
171
177
  {
172
- description: "Utility functions for working with TypeScript's API. Successor to the wonderful ajafff/tsutils.",
178
+ description: "Creates and caches values under keys. \u{1F3ED}",
173
179
  owner: "JoshuaKGoldberg",
174
- repo: "ts-api-utils",
175
- stars: 15
180
+ repo: "cached-factory",
181
+ stars: 13
176
182
  },
177
183
  {
178
184
  description: "Gently fails test runs if the console was used during them.",
@@ -187,21 +193,21 @@ const projectCategories = {
187
193
  stars: 9
188
194
  },
189
195
  {
190
- description: "Checks whether a documentation description introduces any new information.",
196
+ description: "Checks whether a documentation description introduces any new information. \u2139\uFE0F",
191
197
  owner: "JoshuaKGoldberg",
192
198
  repo: "are-docs-informative",
193
199
  stars: 7
194
200
  },
195
201
  {
196
- description: "Finds your npm packages that are eligible for Tidelift funding. \u{1F4B8}",
202
+ description: "Checks whether a semantic release should be run for a commit.",
197
203
  owner: "JoshuaKGoldberg",
198
- repo: "tidelift-me-up",
199
- stars: 6
204
+ repo: "should-semantic-release",
205
+ stars: 7
200
206
  },
201
207
  {
202
- description: "Checks whether a semantic release should be run for a commit.",
208
+ description: "Finds your npm packages that are eligible for Tidelift funding. \u{1F4B8}",
203
209
  owner: "JoshuaKGoldberg",
204
- repo: "should-semantic-release",
210
+ repo: "tidelift-me-up",
205
211
  stars: 6
206
212
  },
207
213
  {
@@ -211,7 +217,7 @@ const projectCategories = {
211
217
  stars: 4
212
218
  },
213
219
  {
214
- description: "Generates an allcontributors list for an existing repository. \u{1F46A}",
220
+ description: "Generates an allcontributors list for an existing repository. \u{1F91D}",
215
221
  owner: "JoshuaKGoldberg",
216
222
  repo: "all-contributors-for-repository",
217
223
  stars: 3
@@ -236,12 +242,6 @@ const projectCategories = {
236
242
  owner: "JoshuaKGoldberg",
237
243
  repo: "sinon-timers-repeatable",
238
244
  stars: 1
239
- },
240
- {
241
- description: "Creates and caches values under keys. \u{1F3ED}",
242
- owner: "JoshuaKGoldberg",
243
- repo: "cached-factory",
244
- stars: 1
245
245
  }
246
246
  ]
247
247
  }
@@ -249,3 +249,4 @@ const projectCategories = {
249
249
  export {
250
250
  projectCategories
251
251
  };
252
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/projects.ts"],"sourcesContent":["/* cspell:disable */\nimport { ProjectCategory } from \"./types.js\";\n\nexport const projectCategories: Record<string, ProjectCategory> = {\n\t\"Biggest Projects\": {\n\t\tdescription:\n\t\t\t\"If you work with TypeScript, you may have used one of the open source projects I support:\",\n\t\tprojects: [\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"✨ Monorepo for all the tooling which enables ESLint to support TypeScript\",\n\t\t\t\timage: \"https://www.joshuakgoldberg.com/img/ts-eslint.svg\",\n\t\t\t\tlinks: {\n\t\t\t\t\tSite: \"https://typescript-eslint.io\",\n\t\t\t\t},\n\t\t\t\towner: \"typescript-eslint\",\n\t\t\t\trepo: \"typescript-eslint\",\n\t\t\t\trole: \"Maintainer\",\n\t\t\t\tstars: 13813,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"Converts JavaScript to TypeScript and TypeScript to better TypeScript.\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"TypeStat\",\n\t\t\t\tstars: 1661,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"A quickstart-friendly TypeScript template with comprehensive formatting, linting, releases, testing, and other great tooling built-in. ✨\",\n\t\t\t\timage: \"https://www.joshuakgoldberg.com/img/create-typescript-app.png\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"create-typescript-app\",\n\t\t\t\tstars: 352,\n\t\t\t},\n\t\t],\n\t},\n\tEmojis: {\n\t\tdescription:\n\t\t\t\"I also have an interest in making web apps more delightful. These projects will help you add emoji delighters to your page quickly.\",\n\t\tprojects: [\n\t\t\t{\n\t\t\t\tdescription: \"😏 simple emoji support for node.js projects\",\n\t\t\t\towner: \"omnidan\",\n\t\t\t\trepo: \"node-emoji\",\n\t\t\t\trole: \"Junior maintainer\",\n\t\t\t\tstars: 1230,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"💥 Blasts 😄 emoji 😊 like 🎆 fireworks 🎇 all up in your 💻 HTML 📄 page. 😍\",\n\t\t\t\tlinks: {\n\t\t\t\t\tSite: \"https://emojisplosion.dev\",\n\t\t\t\t},\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"Emojisplosion\",\n\t\t\t\tstars: 88,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"Connects konami-code-js to emojisplosion for a glorious easter egg. 🎉 ✨ 🎆\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"Konamimojisplosion\",\n\t\t\t\tstars: 9,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"TypeDoc plugin to quickly integrate konamimojisplosion into your docs site. 🎉 ✨ 🎆\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"typedoc-plugin-konamimojisplosion\",\n\t\t\t\tstars: 3,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"Astro integration to quickly load konamimojisplosion into your site. 🎉 ✨ 🎆\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"astro-konamimojisplosion\",\n\t\t\t\tstars: 1,\n\t\t\t},\n\t\t],\n\t},\n\t\"Just For Fun\": {\n\t\tdescription:\n\t\t\t\"These projects I do because I think they're fascinating and/or fun, if not particularly useful:\",\n\t\tprojects: [\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"An HTML5 remake of the original Super Mario Brothers - expanded for wide screens.\",\n\t\t\t\timage: \"https://www.joshuakgoldberg.com/images/fullscreenmario.png\",\n\t\t\t\tname: \"FullScreenMario\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"Old-Deleted-FullScreenMario\",\n\t\t\t\trole: \"Creator\",\n\t\t\t\tstars: 2994,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"A free HTML5 remake of the original Pokemon, expanded for modern browsing.\",\n\t\t\t\timage: \"https://www.joshuakgoldberg.com/images/fullscreenpokemon.png\",\n\t\t\t\towner: \"FullScreenShenanigans\",\n\t\t\t\trepo: \"FullScreenPokemon\",\n\t\t\t\tstars: 205,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"Bare-bones, highly modular game engine for 2D 8-bit games.\",\n\t\t\t\towner: \"FullScreenShenanigans\",\n\t\t\t\trepo: \"EightBittr\",\n\t\t\t\tstars: 70,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"Choosing a modern JavaScript UI framework, Pokemon-style.\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"ChooseYourFramework\",\n\t\t\t\tstars: 68,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"A unified syntax that compiles into your favorite OOP languages. 🦜\",\n\t\t\t\timage: \"https://www.joshuakgoldberg.com/images/budgie.png\",\n\t\t\t\tmore: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdescription: \"A natural language layer on top of Budgie. 🦜\",\n\t\t\t\t\t\towner: \"budgielang\",\n\t\t\t\t\t\trepo: \"NBudgie\",\n\t\t\t\t\t\tstars: 2,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdescription: \"Converts TypeScript code to Budgie. 🦜\",\n\t\t\t\t\t\towner: \"budgielang\",\n\t\t\t\t\t\trepo: \"ts-budgie\",\n\t\t\t\t\t\tstars: 2,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdescription: \"Compiles C# code to Budgie. 🦜\",\n\t\t\t\t\t\towner: \"budgielang\",\n\t\t\t\t\t\trepo: \"CS-Budgie\",\n\t\t\t\t\t\tstars: 1,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\towner: \"budgielang\",\n\t\t\t\trepo: \"Budgie\",\n\t\t\t\tstars: 58,\n\t\t\t},\n\t\t],\n\t},\n\tTooling: {\n\t\tdescription:\n\t\t\t\"I work on assorted projects in the JavaScript/TypeScript ecosystem that make it easier to write high quality applications.\",\n\t\tprojects: [\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"⬅️ ES6 string tag that strips indentation from multi-line strings.\",\n\t\t\t\towner: \"dmnd\",\n\t\t\t\trepo: \"dedent\",\n\t\t\t\trole: \"Adoptive maintainer\",\n\t\t\t\tstars: 755,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"ESLint plugin with $ExpectType, $ExpectError, and $ExpectTypeSnapshot type assertions\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"eslint-plugin-expect-type\",\n\t\t\t\trole: \"Adoptive maintainer\",\n\t\t\t\tstars: 64,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"Prettier plugin to enforce consistent brace style for all control statements.\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"prettier-plugin-curly\",\n\t\t\t\tstars: 32,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"Utility functions for working with TypeScript's API. Successor to the wonderful ajafff/tsutils.\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"ts-api-utils\",\n\t\t\t\tstars: 21,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"A Chrome extension for GitHub's Saved Replies that adds replies from a repository's .github/replies.yml.\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"refined-saved-replies\",\n\t\t\t\tstars: 20,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"🎭 Mocks out Redux actions and selectors for clean React Jest tests.\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"mock-react-redux\",\n\t\t\t\tstars: 20,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"TypeScript transformation that inlines calls to small functions. ⚡️\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"ts-function-inliner\",\n\t\t\t\tstars: 20,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription: \"Creates and caches values under keys. 🏭\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"cached-factory\",\n\t\t\t\tstars: 13,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"Gently fails test runs if the console was used during them.\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"console-fail-test\",\n\t\t\t\tstars: 10,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"Fills in missing allcontributors entries for a repository. 👪\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"all-contributors-auto-action\",\n\t\t\t\tstars: 9,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"Checks whether a documentation description introduces any new information. ℹ️\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"are-docs-informative\",\n\t\t\t\tstars: 7,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"Checks whether a semantic release should be run for a commit.\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"should-semantic-release\",\n\t\t\t\tstars: 7,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"Finds your npm packages that are eligible for Tidelift funding. 💸\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"tidelift-me-up\",\n\t\t\t\tstars: 6,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"Creates a Markdown table summarizing your GitHub sponsors.\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"github-sponsors-to-markdown\",\n\t\t\t\tstars: 4,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"Generates an allcontributors list for an existing repository. 🤝\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"all-contributors-for-repository\",\n\t\t\t\tstars: 3,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription: \"Find your npm packages eligible for Tidelift funding. 💸\",\n\t\t\t\tlinks: {\n\t\t\t\t\tSite: \"https://tidelift-me-up-site.vercel.app/\",\n\t\t\t\t},\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"tidelift-me-up-site\",\n\t\t\t\tstars: 3,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription: \"Contributed markdownlint rule for one sentence per line.\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"sentences-per-line\",\n\t\t\t\tstars: 2,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"A version of Sinon's `useFakeTimers` that you can call multiple times in a test.\",\n\t\t\t\towner: \"JoshuaKGoldberg\",\n\t\t\t\trepo: \"sinon-timers-repeatable\",\n\t\t\t\tstars: 1,\n\t\t\t},\n\t\t],\n\t},\n};\n"],"mappings":"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","names":[]}
@@ -11,3 +11,4 @@ async function writeFile(filePath, contents, parser) {
11
11
  export {
12
12
  writeFile
13
13
  };
14
+ //# sourceMappingURL=writeFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/shared/writeFile.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\nimport prettier from \"prettier\";\n\nlet config: null | prettier.Options = null;\n\nexport async function writeFile(\n\tfilePath: string,\n\tcontents: string,\n\tparser: string,\n) {\n\tconfig ??= await prettier.resolveConfig(filePath);\n\n\tawait fs.writeFile(\n\t\tfilePath,\n\t\tawait prettier.format(contents, { parser, ...config }),\n\t);\n}\n"],"mappings":"AAAA,OAAO,QAAQ;AACf,OAAO,cAAc;AAErB,IAAI,SAAkC;AAEtC,eAAsB,UACrB,UACA,UACA,QACC;AACD,aAAW,MAAM,SAAS,cAAc,QAAQ;AAEhD,QAAM,GAAG;AAAA,IACR;AAAA,IACA,MAAM,SAAS,OAAO,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC;AAAA,EACtD;AACD;","names":[]}
@@ -16,3 +16,4 @@ async function writeProjects(projectCategories) {
16
16
  export {
17
17
  writeProjects
18
18
  };
19
+ //# sourceMappingURL=writeProjects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/shared/writeProjects.ts"],"sourcesContent":["import { ProjectCategory } from \"../types.js\";\nimport { writeFile } from \"./writeFile.js\";\n\nexport async function writeProjects(\n\tprojectCategories: Record<string, ProjectCategory>,\n) {\n\tawait writeFile(\n\t\t\"./src/projects.ts\",\n\t\t`/* cspell:disable */\n\t\timport { ProjectCategory } from \"./types.js\";\n\t\t\n\t\texport const projectCategories: Record<string, ProjectCategory> = ${JSON.stringify(\n\t\t\tprojectCategories,\n\t\t\tnull,\n\t\t\t4,\n\t\t)}`,\n\t\t\"typescript\",\n\t);\n}\n"],"mappings":"AACA,SAAS,iBAAiB;AAE1B,eAAsB,cACrB,mBACC;AACD,QAAM;AAAA,IACL;AAAA,IACA;AAAA;AAAA;AAAA,sEAGoE,KAAK;AAAA,MACxE;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAC;AAAA,IACD;AAAA,EACD;AACD;","names":[]}
package/lib/types.js CHANGED
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/package.json CHANGED
@@ -1,21 +1,19 @@
1
1
  {
2
2
  "name": "joshuakgoldberg",
3
- "version": "0.2.0",
4
- "description": "Packaged projects and personal GitHub README for JoshuaKGoldberg.",
3
+ "version": "0.2.2",
4
+ "description": "Packaged projects and personal GitHub README for JoshuaKGoldberg. 👋",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/JoshuaKGoldberg/JoshuaKGoldberg"
8
8
  },
9
9
  "license": "MIT",
10
10
  "author": {
11
- "name": "Josh Goldberg",
11
+ "name": "JoshuaKGoldberg",
12
12
  "email": "npm@joshuakgoldberg.com"
13
13
  },
14
14
  "type": "module",
15
15
  "main": "./lib/index.js",
16
- "bin": "./bin/joshuakgoldberg.js",
17
16
  "files": [
18
- "bin/",
19
17
  "lib/",
20
18
  "package.json",
21
19
  "LICENSE.md",
@@ -28,14 +26,15 @@
28
26
  "lint": "eslint . .*js --max-warnings 0 --report-unused-disable-directives",
29
27
  "lint:knip": "knip",
30
28
  "lint:md": "markdownlint \"**/*.md\" \".github/**/*.md\" --rules sentences-per-line",
31
- "lint:package": "npmPkgJsonLint .",
29
+ "lint:package-json": "npmPkgJsonLint .",
32
30
  "lint:packages": "pnpm dedupe --check",
33
31
  "lint:spelling": "cspell \"**\" \".github/**/*\"",
34
32
  "prepare": "husky install",
35
33
  "projects:add": "tsx src/add/cli.ts",
36
34
  "projects:generate": "tsx src/generate/cli.ts",
37
35
  "should-semantic-release": "should-semantic-release --verbose",
38
- "test": "vitest"
36
+ "test": "vitest",
37
+ "tsc": "tsc"
39
38
  },
40
39
  "lint-staged": {
41
40
  "*": "prettier --ignore-unknown --write"
@@ -44,52 +43,55 @@
44
43
  "chalk": "^5.3.0"
45
44
  },
46
45
  "devDependencies": {
47
- "@types/eslint": "^8.37.0",
48
- "@types/node": "^20.4.8",
49
- "@typescript-eslint/eslint-plugin": "^6.0.0",
50
- "@typescript-eslint/parser": "^6.0.0",
51
- "@vitest/coverage-istanbul": "^0.34.0",
46
+ "@types/eslint": "^8.44.2",
47
+ "@types/node": "^20.5.9",
48
+ "@typescript-eslint/eslint-plugin": "^6.6.0",
49
+ "@typescript-eslint/parser": "^6.6.0",
50
+ "@vitest/coverage-v8": "^0.34.3",
52
51
  "console-fail-test": "^0.2.3",
53
- "cspell": "^7.0.0",
54
- "eslint": "^8.40.0",
52
+ "cspell": "^7.3.2",
53
+ "eslint": "^8.48.0",
55
54
  "eslint-config-prettier": "^9.0.0",
56
- "eslint-plugin-deprecation": "^1.4.1",
55
+ "eslint-plugin-deprecation": "^1.5.0",
57
56
  "eslint-plugin-eslint-comments": "^3.2.0",
58
- "eslint-plugin-import": "^2.27.5",
59
- "eslint-plugin-jsdoc": "^46.0.0",
60
- "eslint-plugin-jsonc": "^2.8.0",
61
- "eslint-plugin-markdown": "^3.0.0",
62
- "eslint-plugin-n": "^16.0.0",
57
+ "eslint-plugin-import": "^2.28.1",
58
+ "eslint-plugin-jsdoc": "^46.5.1",
59
+ "eslint-plugin-jsonc": "^2.9.0",
60
+ "eslint-plugin-markdown": "^3.0.1",
61
+ "eslint-plugin-n": "^16.0.2",
63
62
  "eslint-plugin-no-only-tests": "^3.1.0",
64
- "eslint-plugin-perfectionist": "^1.4.0",
63
+ "eslint-plugin-perfectionist": "^1.5.1",
65
64
  "eslint-plugin-regexp": "^1.15.0",
66
- "eslint-plugin-vitest": "^0.2.2",
67
- "eslint-plugin-yml": "^1.7.0",
68
- "github-sponsors-to-markdown": "^0.0.7",
65
+ "eslint-plugin-vitest": "^0.3.1",
66
+ "eslint-plugin-yml": "^1.8.0",
67
+ "github-sponsors-to-markdown": "^0.1.1",
69
68
  "husky": "^8.0.3",
70
69
  "jsonc-eslint-parser": "^2.3.0",
71
- "knip": "2.19.11",
72
- "lint-staged": "^14.0.0",
70
+ "knip": "2.21.1",
71
+ "lint-staged": "^14.0.1",
73
72
  "markdownlint": "^0.30.0",
74
- "markdownlint-cli": "^0.35.0",
73
+ "markdownlint-cli": "^0.36.0",
75
74
  "node-emoji": "^2.1.0",
76
75
  "npm-package-json-lint": "^7.0.0",
77
76
  "npm-package-json-lint-config-default": "^6.0.0",
78
77
  "octokit": "^3.1.0",
79
- "prettier": "^3.0.1",
78
+ "prettier": "^3.0.3",
80
79
  "prettier-plugin-curly": "^0.1.2",
81
- "prettier-plugin-packagejson": "^2.4.3",
82
- "release-it": "^16.0.0",
80
+ "prettier-plugin-packagejson": "^2.4.5",
81
+ "release-it": "^16.1.5",
83
82
  "sentences-per-line": "^0.2.1",
84
83
  "should-semantic-release": "^0.1.1",
85
84
  "tsup": "^7.2.0",
86
- "tsx": "^3.12.7",
87
- "typescript": "^5.0.4",
88
- "vitest": "^0.34.0",
85
+ "tsx": "^3.12.8",
86
+ "typescript": "^5.2.2",
87
+ "vitest": "^0.34.3",
89
88
  "yaml-eslint-parser": "^1.2.2"
90
89
  },
91
- "packageManager": "pnpm@8.6.12",
90
+ "packageManager": "pnpm@8.7.0",
92
91
  "engines": {
93
92
  "node": ">=18"
93
+ },
94
+ "publishConfig": {
95
+ "provenance": true
94
96
  }
95
97
  }
@@ -1,116 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import chalk from "chalk";
4
-
5
- const socialRows = [
6
- [
7
- "#0085ff",
8
- "⛅️",
9
- "Bluesky ",
10
- "https://bsky.app/profile/joshuakgoldberg.com",
11
- 2,
12
- ],
13
- ["#6cc644", "🐙", "GitHub ", "https://github.com/JoshuaKGoldberg", 3],
14
- ["#6364ff", "🐘", "Mastodon", "https://fosstodon.org/@JoshuaKGoldberg", 3],
15
- ["#6441a5", "💬", "Twitch ", "https://twitch.tv/JoshuaKGoldberg", 3],
16
- ["#00acee", "🐦", "Twitter ", "https://twitter.com/JoshuaKGoldberg", 2],
17
- ["#FF0000", "🎥", "YouTube ", "https://youtube.com/@JoshuaKGoldberg", 0],
18
- ["#1170d0", "🌐", "www ", "https://joshuakgoldberg.com", 3],
19
- ];
20
-
21
- const longestLink = socialRows.reduce(
22
- (max, row) => Math.max(max, row[3].length),
23
- 0,
24
- );
25
-
26
- drawTable({
27
- footer: chalk.green(
28
- "💚 I'd greatly appreciate it if you could sponsor me on GitHub. 💚",
29
- ),
30
- header: "👋 Hi! I'm Josh. 👋",
31
- rows: [
32
- "🙂 I'm an open source maintainer in the TypeScript ecosystem. 🙂",
33
- "",
34
- {
35
- extra: "🖥️ ".length,
36
- text: "🖥️ I work to make web development better, most notably on typescript-eslint: 🖥️",
37
- },
38
- "the tooling that enables ESLint and Prettier to run on TypeScript code.",
39
- "",
40
- "🏆 I'm the author of Learning TypeScript (O'Reilly), a Microsoft MVP, an 🏆",
41
- "international conference speaker, a mentor, and a live code streamer.",
42
- "",
43
- {
44
- extra: " ".length - 1,
45
- text: "Find me on:",
46
- },
47
- "",
48
- ...socialRows.map(([color, emoji, label, link, extra]) => ({
49
- extra: 20 + extra,
50
- text: chalk.hex(color)(
51
- [
52
- " ",
53
- emoji,
54
- " ",
55
- label,
56
- " ".repeat(longestLink - link.length + 1),
57
- link,
58
- ].join(""),
59
- ),
60
- })),
61
- ],
62
- width: 87,
63
- });
64
-
65
- function drawTable({ footer, header, rows, width }) {
66
- let totalLines = rows.length + 12;
67
- let drawnLines = 0;
68
-
69
- rows = rows.map((line) =>
70
- typeof line === "string" ? { extra: 0, text: line } : line,
71
- );
72
-
73
- drawOverlay(`┌`, `┐`, header);
74
- drawLine("│", "│", " ", width, "");
75
-
76
- for (const { extra, text } of rows) {
77
- const padding = width - text.length + extra - 3;
78
- drawLine(`│ `, ` │`, " ", padding, text);
79
- }
80
-
81
- drawLine("│", "│", " ", width, "");
82
- drawOverlay(`└`, `┘`, footer, 10);
83
-
84
- function hexPercentage(value) {
85
- return Math.max(Math.min(value, 0.95), 0)
86
- .toString(16)
87
- .replace(/^.+\./, "")
88
- .repeat(2)
89
- .slice(0, 2);
90
- }
91
-
92
- function drawLine(before, after, horizontal, padding, text = "") {
93
- const colorize = chalk.hex(
94
- [
95
- "#",
96
- hexPercentage(Math.min((totalLines - drawnLines) / totalLines, 0.5)),
97
- hexPercentage((totalLines - drawnLines) ** 1.5 / totalLines),
98
- hexPercentage(Math.max((totalLines - drawnLines) / totalLines, 0.65)),
99
- ].join(""),
100
- );
101
-
102
- console.log(
103
- [
104
- colorize(before + horizontal.repeat(Math.ceil(padding / 2))),
105
- colorize(text),
106
- colorize(horizontal.repeat(Math.floor(padding / 2)) + after),
107
- ].join(""),
108
- );
109
-
110
- drawnLines += 1;
111
- }
112
-
113
- function drawOverlay(before, after, text, extra = 0) {
114
- drawLine(before, after, "─", width - text.length + extra - 2, ` ${text} `);
115
- }
116
- }