From d800010c83f63c1f2ef7071536b306e1d91a3743 Mon Sep 17 00:00:00 2001 From: Ben Allfree Date: Thu, 22 Feb 2024 13:22:28 -0800 Subject: [PATCH] enh: release template --- .rizzdown/blog/style.md | 4 +- package.json | 7 +- plop-templates/blog.hbs | 35 +++++++-- plopfile.js | 153 ------------------------------------ plopfile.mjs | 169 ++++++++++++++++++++++++++++++++++++++++ pnpm-lock.yaml | 131 ++++++++++++++++++++++++------- tsconfig.json | 2 +- 7 files changed, 308 insertions(+), 193 deletions(-) delete mode 100644 plopfile.js create mode 100644 plopfile.mjs diff --git a/.rizzdown/blog/style.md b/.rizzdown/blog/style.md index 5f8f7393..7c107b12 100644 --- a/.rizzdown/blog/style.md +++ b/.rizzdown/blog/style.md @@ -1,3 +1,3 @@ -This is a blog for web and mobile app developers. They are interested in BaaS, as this is our central product. They tend to be well-versed in Typescript and JavaScript, but only have 2-5 years of experience. They like making little apps and invetions to serve specific verticals that they find interesting. They like open source, and they like independence and soveirgnty. The blog should have a factual tone with no embellishments. You can include up to one pop culture reference per article, but it should not be a central point. +This is a blog for web and mobile app developers. They are interested in BaaS, as this is our central product. They tend to be well-versed in Typescript and JavaScript, but only have 2-5 years of experience. They like making little apps and inventions to serve specific verticals that they find interesting. They like open source, and they like independence and sovereignty. The blog should have a factual tone with no embellishments. You can include up to one pop culture reference per article, but it should not be a central point. -Use third person language. Do not refer to 'we' or use colloqualisms. Avoid phrases like "squshed pesky bugs" and playful language. Be direct, to the point, and do not attempt to introduce personality into the prose. +Use third person language. Do not refer to 'we' or use colloquialisms. Avoid phrases like "squashed pesky bugs" and playful language. Be direct, to the point, and do not attempt to introduce personality into the prose. diff --git a/package.json b/package.json index 94579fad..97eca472 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "prod:edge:health": "tsx src/cli/edge-health.ts", "prod:edge:syslog": "tsx src/cli/edge-syslogd.ts", "prod:mothership": "tsx src/cli/mothership.ts", - "plop": "plop", + "plop": "plop --no-progress", "nofile": "cat /proc/sys/fs/file-nr", "mail": "tsx ./src/cli/sendmail.ts" }, @@ -101,7 +101,9 @@ "@types/eventsource": "^1.1.14", "@types/express": "^4.17.21", "@types/http-proxy": "^1.17.13", + "@types/inquirer": "^9.0.7", "@types/js-cookie": "^3.0.5", + "@types/js-yaml": "^4.0.9", "@types/json-stringify-safe": "^5.0.2", "@types/marked": "^4.3.2", "@types/memorystream": "^0.3.3", @@ -119,6 +121,7 @@ "dotenv-cli": "^7.3.0", "express": "^4.18.2", "http-proxy-middleware": "^2.0.6", + "inquirer": "^9.2.15", "ip-cidr": "^3.1.0", "js-yaml": "^4.1.0", "plop": "^4.0.0", @@ -127,7 +130,7 @@ "prettier-plugin-jsdoc": "^1.3.0", "prettier-plugin-organize-imports": "^3.2.3", "prettier-plugin-svelte": "^3.0.3", - "rizzdown": "^0.0.6", + "rizzdown": "^0.0.7", "svelte": "^4.2.2", "tslib": "^2.6.2", "tsx": "^3.14.0", diff --git a/plop-templates/blog.hbs b/plop-templates/blog.hbs index 97f0e128..fb236fc0 100644 --- a/plop-templates/blog.hbs +++ b/plop-templates/blog.hbs @@ -1,11 +1,34 @@ --- -title: {{{ yamlEncode title }}} -date: {{ isoTimestamp }} -description: {{{ yamlEncode description }}} +title: {{{yamlEncode title}}} +date: {{isoTimestamp}} +description: {{{yamlEncode opengraph}}} --- -{{{ summary }}} +[https://pockethost.io](https://pockethost.io) and [PocketHost](https://github.com/pockethost/pockethost), the open source, _zero-config / up-in-30-seconds_, multitenant PocketBase server, have reached v{{{version}}}. -{{{ detail }}} +{{{summary}}} -PocketHost is the zero-config multitenant PocketBase server. Learn more at https://pockethost.io and join our [Discord community](https://discord.gg/HsSjcuPRWX). +# Thanks + +Thank you to all the [PocketHost contributors](https://github.com/pockethost/pockethost/graphs/contributors). You guys are really coming through while I'm down in the trenches keeping servers running. Onward! :) + +I also want to mention the thriving Discord community. We have over 500 members and many daily active users who discuss PocketBase programming topics as well as get support for PocketHost. If you want to really feel a sense of vibrancy, it's happing in [our Discord community](https://discord.gg/HsSjcuPRWX). + +# Overview + +Here is what AI decided based on the change log (powered by [rizzdown](https://benallfree/rizzdown))... + +{{{overview}}} + +# Stats + +``` +you complete me +``` + +# Change Log + +{{{change_log}}} + +You can try PocketHost and learn more at https://pockethost.io. Our thriving [Discord +community](https://discord.gg/HsSjcuPRWX) awaits you :) \ No newline at end of file diff --git a/plopfile.js b/plopfile.js deleted file mode 100644 index 3d589909..00000000 --- a/plopfile.js +++ /dev/null @@ -1,153 +0,0 @@ -import chalk from 'chalk' -import { execSync } from 'child_process' -import yaml from 'js-yaml' -import ora from 'ora' -import { join } from 'path' -import { cwd } from 'process' - -export default function (plop) { - plop.setHelper('isoTimestamp', function () { - return new Date().toISOString() - }) - - plop.setHelper('yamlEncode', function (text) { - return yaml.dump(text).trim() - }) - - plop.setGenerator('blog-article', { - description: 'Generate a new blog article', - prompts: [ - { - type: 'input', - name: 'synopsis', - message: '30-50 word synopsis of the news you wish to announce', - }, - ], - actions: [ - async function (data) { - const profilePath = join(cwd(), `.rizzdown/blog`) - const subjectMatter = data.synopsis - - const { factory } = await import('rizzdown') - const { generate } = factory({ profilePath, subjectMatter }) - - const spin = async (title, prompt) => { - const spinner = ora().start(title) - const res = await generate(prompt, {}) - spinner.stopAndPersist({ symbol: chalk.green(`✔︎`) }) - return res - } - - data.title = await spin( - `Generating title...`, - `A title for this blog post, no more than 10 words. No exaggerations or puffery. Factual. ASCII characters only. Do not enclose in quotations.`, - ) - - data.description = await spin( - `Generating description...`, - `An OpenGraph summary/description for this blog post, no more than 50 words. A call to action. Factual. ASCII characters only.`, - ) - - data.summary = await spin( - `Generating summary...`, - `A one-paragraph introductory summary. ASCII characters only.`, - ) - - data.detail = await spin( - `Generating detail...`, - `A detailed analysis of the importance and use of this news. ASCII characters only.`, - ) - - console.log({ data }) - }, - { - type: 'add', - path: 'frontends/lander/content/blog/{{dashCase title}}.md', - templateFile: 'plop-templates/blog.hbs', - }, - ], - }) - - plop.setGenerator('blog-release', { - description: 'Generate a new release announcement', - prompts: [], - actions: [ - async function (data) { - const commitsSinceLast = execSync( - `git log $(git describe --tags --abbrev=0)..HEAD --oneline | grep -E "fix:|enh:|feat:" | sed 's/^[^ ]*/\*/' filename | sort`, - ) - .toString() - .replace(/^\S+?\s/gm, '') - .split(/\n/) - .filter((v) => !!v) - - console.log(`Commits since last release:`) - - commitsSinceLast.forEach((line) => console.log(` * ${line}`)) - const { releaseType } = await prompter.prompt({ - type: 'select', - name: 'releaseType', - choices: ['major', 'minor', 'patch'], - message: `What type of release is this?`, - initial: 2, - }) - execSync(`yarn version --no-git-tag-version --${releaseType}`) - const version = require(join(cwd(), './package.json')).version - console.log( - `Great, a ${releaseType} release. The new version will be ${version}.`, - ) - - const summaries = [] - for (i = 0; i < commitsSinceLast.length; i++) { - const commit = commitsSinceLast[i] - const { summary } = await prompter.prompt({ - type: 'input', - name: 'summary', - message: `Please summarize this commit log (enter to leave as is):`, - initial: commit, - }) - summaries.push(summary) - } - - const profilePath = join(cwd(), `.rizzdown/blog`) - const subjectMatter = data.synopsis - - const { generate } = factory({ profilePath, subjectMatter }) - - const spin = async (title, prompt) => { - const spinner = ora().start(title) - const res = await generate(prompt, {}) - spinner.stopAndPersist({ symbol: chalk.green(`✔︎`) }) - return res - } - - data.title = await spin( - `Generating title...`, - `A title for this blog post, no more than 10 words. No exaggerations or puffery. Factual. ASCII characters only. Do not enclose in quotations.`, - ) - - data.description = await spin( - `Generating description...`, - `An OpenGraph summary/description for this blog post, no more than 50 words. A call to action. Factual. ASCII characters only.`, - ) - - data.summary = await spin( - `Generating summary...`, - `A one-paragraph introductory summary. ASCII characters only.`, - ) - - data.detail = await spin( - `Generating detail...`, - `A detailed analysis of the importance and use of this news. ASCII characters only.`, - ) - - console.log({ data }) - }, - { - type: 'add', - path: 'frontends/lander/content/blog/{{dashCase title}}.md', - templateFile: 'plop-templates/blog.hbs', - }, - ], - }) -} diff --git a/plopfile.mjs b/plopfile.mjs new file mode 100644 index 00000000..d56d6dd9 --- /dev/null +++ b/plopfile.mjs @@ -0,0 +1,169 @@ +import chalk from 'chalk' +import { execSync } from 'child_process' +import { readFileSync } from 'fs' +import yaml from 'js-yaml' +import ora from 'ora' +import { join } from 'path' +import { cwd } from 'process' +import factory from 'rizzdown' + +/** @typedef {import('plop').NodePlopAPI} Plop */ + +export default function (/** @type {Plop} */ plop) { + plop.setHelper('isoTimestamp', function () { + return new Date().toISOString() + }) + + plop.setHelper('yamlEncode', function (text) { + return yaml.dump(text).trim() + }) + + plop.setGenerator('blog-article', { + description: 'Generate a new blog article', + prompts: [ + { + type: 'input', + name: 'synopsis', + message: '30-50 word synopsis of the news you wish to announce', + }, + ], + actions: [ + async function (data) { + const profilePath = join(cwd(), `.rizzdown/blog`) + const subjectMatter = data.synopsis + + const { factory } = await import('rizzdown') + const { generate } = factory({ profilePath, subjectMatter }) + + const spin = async (title, prompt) => { + const spinner = ora().start(title) + const res = await generate(prompt, {}) + spinner.stopAndPersist({ symbol: chalk.green(`✔︎`) }) + return res + } + + data.title = await spin( + `Generating title...`, + `A title for this blog post, no more than 10 words. No exaggerations or puffery. Factual. ASCII characters only. Do not enclose in quotations.`, + ) + + data.description = await spin( + `Generating description...`, + `An OpenGraph summary/description for this blog post, no more than 50 words. A call to action. Factual. ASCII characters only.`, + ) + + data.summary = await spin( + `Generating summary...`, + `A one-paragraph introductory summary. ASCII characters only.`, + ) + + data.detail = await spin( + `Generating detail...`, + `A detailed analysis of the importance and use of this news. ASCII characters only.`, + ) + + console.log({ data }) + }, + { + type: 'add', + path: 'frontends/lander/content/blog/{{dashCase title}}.md', + templateFile: 'plop-templates/blog.hbs', + }, + ], + }) + + plop.setGenerator('blog-release', { + description: 'Generate a new release announcement', + prompts: [ + { + type: 'list', + name: 'releaseType', + choices: ['major', 'minor', 'patch'], + message: `What type of release is this?`, + default: 2, + }, + { + type: 'input', + name: 'summary', + message: `What is this release about, generally?`, + }, + ], + actions: (data) => { + if (!data) throw new Error(`data expected`) + return [ + async () => { + const { releaseType, summary } = data + const commitsSinceLast = execSync( + `git log $(git describe --tags --abbrev=0)..HEAD --oneline | grep -E "fix:|enh:|feat:" | sed 's/^[^ ]*/\*/' | sort`, + ) + .toString() + .replace(/^\S+?\s/gm, '') + .split(/\n/) + .filter((v) => !!v) + + console.log(`Commits since last release:`) + commitsSinceLast.forEach((line) => console.log(` * ${line}`)) + + execSync(`npm version --no-git-tag-version ${releaseType}`) + const { version } = JSON.parse( + readFileSync(join(cwd(), './package.json')).toString(), + ) + console.log( + `Great, a ${releaseType} release. The new version will be ${version}.`, + ) + + const summaries = [] + // for (let i = 0; i < commitsSinceLast.length; i++) { + // const commit = commitsSinceLast[i] + // const { summary } = await inquirer.prompt({ + // type: 'input', + // name: 'summary', + // message: `Please summarize this commit log (enter to leave as is):`, + // default: commit, + // }) + // summaries.push(summary) + // } + summaries.push(...commitsSinceLast) + + const profilePath = join(cwd(), `.rizzdown/blog`) + const subjectMatter = `# PocketHost v${version} release\n\n## Summary\n\n${summary}\n\n###Detailed updates\n\n${summaries.join( + `\n`, + )}` + + const { generate } = factory({ profilePath, subjectMatter }) + + const spin = async ( + /** @type {string} */ title, + /** @type {string} */ prompt, + ) => { + const spinner = ora().start(title) + const res = await generate(prompt, {}) + spinner.stopAndPersist({ symbol: chalk.green(`✔︎`) }) + return res + } + + data.version = version + + data.title = `PocketHost v${version}` + + data.opengraph = await spin( + `Generating description...`, + `An OpenGraph summary/description for this blog post, no more than 50 words. A call to action. Factual. ASCII characters only. Use reflective and dry technical language, no calls to action or 'consumer' sounding language.`, + ) + + data.overview = await spin( + `Generating overview...`, + `1-3 short paragraphs organizing the major changes and discussing their importance. ASCII characters only. Use reflective and dry technical language, no calls to action or 'consumer' sounding language`, + ) + + data.change_log = summaries.map((line) => `* ${line}`).join(`\n`) + }, + { + type: 'add', + path: 'frontends/lander/content/blog/{{dashCase title}}.md', + templateFile: 'plop-templates/blog.hbs', + }, + ] + }, + }) +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c19ecf49..129d4a6b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -153,9 +153,15 @@ importers: '@types/http-proxy': specifier: ^1.17.13 version: 1.17.13 + '@types/inquirer': + specifier: ^9.0.7 + version: 9.0.7 '@types/js-cookie': specifier: ^3.0.5 version: 3.0.5 + '@types/js-yaml': + specifier: ^4.0.9 + version: 4.0.9 '@types/json-stringify-safe': specifier: ^5.0.2 version: 5.0.2 @@ -201,12 +207,18 @@ importers: dotenv-cli: specifier: ^7.3.0 version: 7.3.0 + enquirer: + specifier: ^2.4.1 + version: 2.4.1 express: specifier: ^4.18.2 version: 4.18.2 http-proxy-middleware: specifier: ^2.0.6 version: 2.0.6(@types/express@4.17.21) + inquirer: + specifier: ^9.2.15 + version: 9.2.15 ip-cidr: specifier: ^3.1.0 version: 3.1.0 @@ -215,7 +227,7 @@ importers: version: 4.1.0 plop: specifier: ^4.0.0 - version: 4.0.0 + version: 4.0.1 postinstall-postinstall: specifier: ^2.1.0 version: 2.1.0 @@ -232,8 +244,8 @@ importers: specifier: ^3.0.3 version: 3.0.3(prettier@3.0.3)(svelte@4.2.2) rizzdown: - specifier: ^0.0.6 - version: 0.0.6 + specifier: ^0.0.7 + version: 0.0.7 svelte: specifier: ^4.2.2 version: 4.2.2 @@ -932,8 +944,8 @@ packages: resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==} dev: true - /@ljharb/through@2.3.11: - resolution: {integrity: sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w==} + /@ljharb/through@2.3.12: + resolution: {integrity: sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 @@ -1456,8 +1468,8 @@ packages: '@types/node': 20.8.10 dev: true - /@types/inquirer@9.0.6: - resolution: {integrity: sha512-1Go1AAP/yOy3Pth5Xf1DC3nfZ03cJLCPx6E2YnSN/5I3w1jHBVH4170DkZ+JxfmA7c9kL9+bf9z3FRGa4kNAqg==} + /@types/inquirer@9.0.7: + resolution: {integrity: sha512-Q0zyBupO6NxGRZut/JdmqYKOnN95Eg5V8Csg3PGKkP+FnvsUZx1jAyK7fztIszxxMuoBA6E3KXWvdZVXIpx60g==} dependencies: '@types/through': 0.0.32 rxjs: 7.8.1 @@ -1467,6 +1479,10 @@ packages: resolution: {integrity: sha512-dtLshqoiGRDHbHueIT9sjkd2F4tW1qPSX2xKAQK8p1e6pM+Z913GM1shv7dOqqasEMYbC5zEaClJomQe8OtQLA==} dev: true + /@types/js-yaml@4.0.9: + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + dev: true + /@types/json-stringify-safe@5.0.2: resolution: {integrity: sha512-NJdNTdatSiYvxdPLwgQImChxTfPECXYkdB6wC71dO3GCz2z/s/ZkkHXHaUlSVvnbsRUQg8Al3cT8Wp08wMF3zA==} dev: true @@ -1477,8 +1493,8 @@ packages: '@types/node': 20.8.10 dev: true - /@types/liftoff@4.0.2: - resolution: {integrity: sha512-X7Su8/zN7UgpA9nULCQwx9qy1RqcjUFmUVhj9kkjxXF5gIjZYC97lMRggyhV1/Y7M4rmEZ90jijAWVFWDVN//w==} + /@types/liftoff@4.0.3: + resolution: {integrity: sha512-UgbL2kR5pLrWICvr8+fuSg0u43LY250q7ZMkC+XKC3E+rs/YBDEnQIzsnhU5dYsLlwMi3R75UvCL87pObP1sxw==} dependencies: '@types/fined': 1.1.4 '@types/node': 20.8.10 @@ -2412,6 +2428,11 @@ packages: resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} engines: {node: '>=6'} + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + dev: true + /cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} @@ -3256,6 +3277,11 @@ packages: /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + /escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} @@ -3500,12 +3526,11 @@ packages: hasBin: true dev: true - /figures@5.0.0: - resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==} - engines: {node: '>=14'} + /figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} dependencies: - escape-string-regexp: 5.0.0 - is-unicode-supported: 1.3.0 + escape-string-regexp: 1.0.5 dev: true /file-type@17.1.6: @@ -3787,6 +3812,11 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + /get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} + dev: true + /get-intrinsic@1.2.2: resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} dependencies: @@ -4267,17 +4297,17 @@ packages: engines: {node: '>=10'} dev: true - /inquirer@9.2.11: - resolution: {integrity: sha512-B2LafrnnhbRzCWfAdOXisUzL89Kg8cVJlYmhqoi3flSiV/TveO+nsXwgKr9h9PIo+J1hz7nBSk6gegRIMBBf7g==} - engines: {node: '>=14.18.0'} + /inquirer@9.2.15: + resolution: {integrity: sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==} + engines: {node: '>=18'} dependencies: - '@ljharb/through': 2.3.11 + '@ljharb/through': 2.3.12 ansi-escapes: 4.3.2 chalk: 5.3.0 cli-cursor: 3.1.0 cli-width: 4.1.0 external-editor: 3.1.0 - figures: 5.0.0 + figures: 3.2.0 lodash: 4.17.21 mute-stream: 1.0.0 ora: 5.4.1 @@ -4540,6 +4570,11 @@ packages: resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} engines: {node: '>=12'} + /is-unicode-supported@2.0.0: + resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} + engines: {node: '>=18'} + dev: true + /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -4827,6 +4862,14 @@ packages: chalk: 5.3.0 is-unicode-supported: 1.3.0 + /log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + dependencies: + chalk: 5.3.0 + is-unicode-supported: 1.3.0 + dev: true + /logform@2.6.0: resolution: {integrity: sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==} engines: {node: '>= 12.0.0'} @@ -5577,12 +5620,12 @@ packages: resolution: {integrity: sha512-lKFSRSRuDHhwDKMUobdsvaWCbbDRbV3jMUSMiajQSQux1aNUevAZVxUHc2JERI//W8ABPRbi3ebYuSuIzkNIpQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - '@types/inquirer': 9.0.6 + '@types/inquirer': 9.0.7 change-case: 4.1.2 del: 7.1.0 globby: 13.2.2 handlebars: 4.7.8 - inquirer: 9.2.11 + inquirer: 9.2.15 isbinaryfile: 5.0.0 lodash.get: 4.4.2 lower-case: 2.0.2 @@ -5788,6 +5831,21 @@ packages: string-width: 6.1.0 strip-ansi: 7.1.0 + /ora@8.0.1: + resolution: {integrity: sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==} + engines: {node: '>=18'} + dependencies: + chalk: 5.3.0 + cli-cursor: 4.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.0.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.1.0 + strip-ansi: 7.1.0 + dev: true + /os-filter-obj@2.0.0: resolution: {integrity: sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==} engines: {node: '>=4'} @@ -6051,18 +6109,18 @@ packages: semver-compare: 1.0.0 dev: true - /plop@4.0.0: - resolution: {integrity: sha512-6hsuNofd5crnl7upQSRyw+7zVBZqxF9UZoWqsKqtPthpvtgUuYD+atBx7ZD9RT8qXWnylyCt9bpvYLZPexxDMg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /plop@4.0.1: + resolution: {integrity: sha512-5n8QU93kvL/ObOzBcPAB1siVFtAH1TZM6TntJ3JK5kXT0jIgnQV+j+uaOWWFJlg1cNkzLYm8klgASF65K36q9w==} + engines: {node: '>=18'} hasBin: true dependencies: - '@types/liftoff': 4.0.2 + '@types/liftoff': 4.0.3 chalk: 5.3.0 interpret: 3.1.1 liftoff: 4.0.0 minimist: 1.2.8 node-plop: 0.32.0 - ora: 7.0.1 + ora: 8.0.1 v8flags: 4.0.1 dev: true @@ -6656,8 +6714,9 @@ packages: dependencies: glob: 7.2.3 - /rizzdown@0.0.6: - resolution: {integrity: sha512-PI5asys+xYXgit0TPiFo34Wtug8LJK+8cM2CeULqYYp7sTs1KZi6efgiyzfc7M2l4MSxawdqbjtT9Xq6BUgAqw==} + /rizzdown@0.0.7: + resolution: {integrity: sha512-gL+Vz1qMNAIoEgtYzJ+PbB0rZFtI+GJ/C+vXC9/IM1O3F21AgboBWrqGM7Ls5L7GiG1o933vApjulun/hdto2g==} + engines: {node: '>=16'} hasBin: true dependencies: bottleneck: 2.19.5 @@ -6669,7 +6728,7 @@ packages: figlet: 1.7.0 find-up: 6.3.0 front-matter: 4.0.2 - inquirer: 9.2.11 + inquirer: 9.2.15 marked: 9.1.5 openai: 4.14.2 ora: 7.0.1 @@ -7108,6 +7167,11 @@ packages: dependencies: bl: 5.1.0 + /stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + dev: true + /streamx@2.15.2: resolution: {integrity: sha512-b62pAV/aeMjUoRN2C/9F0n+G8AfcJjNC0zw/ZmOHeFsIe4m4GzjVW9m6VHXVjk536NbdU9JRwKMJRfkc+zUFTg==} dependencies: @@ -7148,6 +7212,15 @@ packages: emoji-regex: 10.3.0 strip-ansi: 7.1.0 + /string-width@7.1.0: + resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} + engines: {node: '>=18'} + dependencies: + emoji-regex: 10.3.0 + get-east-asian-width: 1.2.0 + strip-ansi: 7.1.0 + dev: true + /string_decoder@0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} dev: true diff --git a/tsconfig.json b/tsconfig.json index bd0e2bae..ed3cde70 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -24,5 +24,5 @@ "$shared": ["src/shared"] } }, - "include": ["./src"] + "include": ["./src", "plopfile.mjs"] }