enh: release template

This commit is contained in:
Ben Allfree 2024-02-22 13:22:28 -08:00
parent e0464f9007
commit d800010c83
7 changed files with 308 additions and 193 deletions

View File

@ -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.

View File

@ -34,7 +34,7 @@
"prod:edge:health": "tsx src/cli/edge-health.ts", "prod:edge:health": "tsx src/cli/edge-health.ts",
"prod:edge:syslog": "tsx src/cli/edge-syslogd.ts", "prod:edge:syslog": "tsx src/cli/edge-syslogd.ts",
"prod:mothership": "tsx src/cli/mothership.ts", "prod:mothership": "tsx src/cli/mothership.ts",
"plop": "plop", "plop": "plop --no-progress",
"nofile": "cat /proc/sys/fs/file-nr", "nofile": "cat /proc/sys/fs/file-nr",
"mail": "tsx ./src/cli/sendmail.ts" "mail": "tsx ./src/cli/sendmail.ts"
}, },
@ -101,7 +101,9 @@
"@types/eventsource": "^1.1.14", "@types/eventsource": "^1.1.14",
"@types/express": "^4.17.21", "@types/express": "^4.17.21",
"@types/http-proxy": "^1.17.13", "@types/http-proxy": "^1.17.13",
"@types/inquirer": "^9.0.7",
"@types/js-cookie": "^3.0.5", "@types/js-cookie": "^3.0.5",
"@types/js-yaml": "^4.0.9",
"@types/json-stringify-safe": "^5.0.2", "@types/json-stringify-safe": "^5.0.2",
"@types/marked": "^4.3.2", "@types/marked": "^4.3.2",
"@types/memorystream": "^0.3.3", "@types/memorystream": "^0.3.3",
@ -119,6 +121,7 @@
"dotenv-cli": "^7.3.0", "dotenv-cli": "^7.3.0",
"express": "^4.18.2", "express": "^4.18.2",
"http-proxy-middleware": "^2.0.6", "http-proxy-middleware": "^2.0.6",
"inquirer": "^9.2.15",
"ip-cidr": "^3.1.0", "ip-cidr": "^3.1.0",
"js-yaml": "^4.1.0", "js-yaml": "^4.1.0",
"plop": "^4.0.0", "plop": "^4.0.0",
@ -127,7 +130,7 @@
"prettier-plugin-jsdoc": "^1.3.0", "prettier-plugin-jsdoc": "^1.3.0",
"prettier-plugin-organize-imports": "^3.2.3", "prettier-plugin-organize-imports": "^3.2.3",
"prettier-plugin-svelte": "^3.0.3", "prettier-plugin-svelte": "^3.0.3",
"rizzdown": "^0.0.6", "rizzdown": "^0.0.7",
"svelte": "^4.2.2", "svelte": "^4.2.2",
"tslib": "^2.6.2", "tslib": "^2.6.2",
"tsx": "^3.14.0", "tsx": "^3.14.0",

View File

@ -1,11 +1,34 @@
--- ---
title: {{{yamlEncode title}}} title: {{{yamlEncode title}}}
date: {{isoTimestamp}} date: {{isoTimestamp}}
description: {{{ yamlEncode description }}} description: {{{yamlEncode opengraph}}}
--- ---
[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}}}.
{{{summary}}} {{{summary}}}
{{{ detail }}} # Thanks
PocketHost is the zero-config multitenant PocketBase server. Learn more at https://pockethost.io and join our [Discord community](https://discord.gg/HsSjcuPRWX). 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 :)

View File

@ -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',
},
],
})
}

169
plopfile.mjs Normal file
View File

@ -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',
},
]
},
})
}

131
pnpm-lock.yaml generated
View File

@ -153,9 +153,15 @@ importers:
'@types/http-proxy': '@types/http-proxy':
specifier: ^1.17.13 specifier: ^1.17.13
version: 1.17.13 version: 1.17.13
'@types/inquirer':
specifier: ^9.0.7
version: 9.0.7
'@types/js-cookie': '@types/js-cookie':
specifier: ^3.0.5 specifier: ^3.0.5
version: 3.0.5 version: 3.0.5
'@types/js-yaml':
specifier: ^4.0.9
version: 4.0.9
'@types/json-stringify-safe': '@types/json-stringify-safe':
specifier: ^5.0.2 specifier: ^5.0.2
version: 5.0.2 version: 5.0.2
@ -201,12 +207,18 @@ importers:
dotenv-cli: dotenv-cli:
specifier: ^7.3.0 specifier: ^7.3.0
version: 7.3.0 version: 7.3.0
enquirer:
specifier: ^2.4.1
version: 2.4.1
express: express:
specifier: ^4.18.2 specifier: ^4.18.2
version: 4.18.2 version: 4.18.2
http-proxy-middleware: http-proxy-middleware:
specifier: ^2.0.6 specifier: ^2.0.6
version: 2.0.6(@types/express@4.17.21) version: 2.0.6(@types/express@4.17.21)
inquirer:
specifier: ^9.2.15
version: 9.2.15
ip-cidr: ip-cidr:
specifier: ^3.1.0 specifier: ^3.1.0
version: 3.1.0 version: 3.1.0
@ -215,7 +227,7 @@ importers:
version: 4.1.0 version: 4.1.0
plop: plop:
specifier: ^4.0.0 specifier: ^4.0.0
version: 4.0.0 version: 4.0.1
postinstall-postinstall: postinstall-postinstall:
specifier: ^2.1.0 specifier: ^2.1.0
version: 2.1.0 version: 2.1.0
@ -232,8 +244,8 @@ importers:
specifier: ^3.0.3 specifier: ^3.0.3
version: 3.0.3(prettier@3.0.3)(svelte@4.2.2) version: 3.0.3(prettier@3.0.3)(svelte@4.2.2)
rizzdown: rizzdown:
specifier: ^0.0.6 specifier: ^0.0.7
version: 0.0.6 version: 0.0.7
svelte: svelte:
specifier: ^4.2.2 specifier: ^4.2.2
version: 4.2.2 version: 4.2.2
@ -932,8 +944,8 @@ packages:
resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==} resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==}
dev: true dev: true
/@ljharb/through@2.3.11: /@ljharb/through@2.3.12:
resolution: {integrity: sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w==} resolution: {integrity: sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
dependencies: dependencies:
call-bind: 1.0.5 call-bind: 1.0.5
@ -1456,8 +1468,8 @@ packages:
'@types/node': 20.8.10 '@types/node': 20.8.10
dev: true dev: true
/@types/inquirer@9.0.6: /@types/inquirer@9.0.7:
resolution: {integrity: sha512-1Go1AAP/yOy3Pth5Xf1DC3nfZ03cJLCPx6E2YnSN/5I3w1jHBVH4170DkZ+JxfmA7c9kL9+bf9z3FRGa4kNAqg==} resolution: {integrity: sha512-Q0zyBupO6NxGRZut/JdmqYKOnN95Eg5V8Csg3PGKkP+FnvsUZx1jAyK7fztIszxxMuoBA6E3KXWvdZVXIpx60g==}
dependencies: dependencies:
'@types/through': 0.0.32 '@types/through': 0.0.32
rxjs: 7.8.1 rxjs: 7.8.1
@ -1467,6 +1479,10 @@ packages:
resolution: {integrity: sha512-dtLshqoiGRDHbHueIT9sjkd2F4tW1qPSX2xKAQK8p1e6pM+Z913GM1shv7dOqqasEMYbC5zEaClJomQe8OtQLA==} resolution: {integrity: sha512-dtLshqoiGRDHbHueIT9sjkd2F4tW1qPSX2xKAQK8p1e6pM+Z913GM1shv7dOqqasEMYbC5zEaClJomQe8OtQLA==}
dev: true dev: true
/@types/js-yaml@4.0.9:
resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==}
dev: true
/@types/json-stringify-safe@5.0.2: /@types/json-stringify-safe@5.0.2:
resolution: {integrity: sha512-NJdNTdatSiYvxdPLwgQImChxTfPECXYkdB6wC71dO3GCz2z/s/ZkkHXHaUlSVvnbsRUQg8Al3cT8Wp08wMF3zA==} resolution: {integrity: sha512-NJdNTdatSiYvxdPLwgQImChxTfPECXYkdB6wC71dO3GCz2z/s/ZkkHXHaUlSVvnbsRUQg8Al3cT8Wp08wMF3zA==}
dev: true dev: true
@ -1477,8 +1493,8 @@ packages:
'@types/node': 20.8.10 '@types/node': 20.8.10
dev: true dev: true
/@types/liftoff@4.0.2: /@types/liftoff@4.0.3:
resolution: {integrity: sha512-X7Su8/zN7UgpA9nULCQwx9qy1RqcjUFmUVhj9kkjxXF5gIjZYC97lMRggyhV1/Y7M4rmEZ90jijAWVFWDVN//w==} resolution: {integrity: sha512-UgbL2kR5pLrWICvr8+fuSg0u43LY250q7ZMkC+XKC3E+rs/YBDEnQIzsnhU5dYsLlwMi3R75UvCL87pObP1sxw==}
dependencies: dependencies:
'@types/fined': 1.1.4 '@types/fined': 1.1.4
'@types/node': 20.8.10 '@types/node': 20.8.10
@ -2412,6 +2428,11 @@ packages:
resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==}
engines: {node: '>=6'} engines: {node: '>=6'}
/cli-spinners@2.9.2:
resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
engines: {node: '>=6'}
dev: true
/cli-width@4.1.0: /cli-width@4.1.0:
resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
engines: {node: '>= 12'} engines: {node: '>= 12'}
@ -3256,6 +3277,11 @@ packages:
/escape-html@1.0.3: /escape-html@1.0.3:
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 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: /escape-string-regexp@2.0.0:
resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
engines: {node: '>=8'} engines: {node: '>=8'}
@ -3500,12 +3526,11 @@ packages:
hasBin: true hasBin: true
dev: true dev: true
/figures@5.0.0: /figures@3.2.0:
resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==} resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
engines: {node: '>=14'} engines: {node: '>=8'}
dependencies: dependencies:
escape-string-regexp: 5.0.0 escape-string-regexp: 1.0.5
is-unicode-supported: 1.3.0
dev: true dev: true
/file-type@17.1.6: /file-type@17.1.6:
@ -3787,6 +3812,11 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*} 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: /get-intrinsic@1.2.2:
resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==}
dependencies: dependencies:
@ -4267,17 +4297,17 @@ packages:
engines: {node: '>=10'} engines: {node: '>=10'}
dev: true dev: true
/inquirer@9.2.11: /inquirer@9.2.15:
resolution: {integrity: sha512-B2LafrnnhbRzCWfAdOXisUzL89Kg8cVJlYmhqoi3flSiV/TveO+nsXwgKr9h9PIo+J1hz7nBSk6gegRIMBBf7g==} resolution: {integrity: sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==}
engines: {node: '>=14.18.0'} engines: {node: '>=18'}
dependencies: dependencies:
'@ljharb/through': 2.3.11 '@ljharb/through': 2.3.12
ansi-escapes: 4.3.2 ansi-escapes: 4.3.2
chalk: 5.3.0 chalk: 5.3.0
cli-cursor: 3.1.0 cli-cursor: 3.1.0
cli-width: 4.1.0 cli-width: 4.1.0
external-editor: 3.1.0 external-editor: 3.1.0
figures: 5.0.0 figures: 3.2.0
lodash: 4.17.21 lodash: 4.17.21
mute-stream: 1.0.0 mute-stream: 1.0.0
ora: 5.4.1 ora: 5.4.1
@ -4540,6 +4570,11 @@ packages:
resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==}
engines: {node: '>=12'} 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: /is-windows@1.0.2:
resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@ -4827,6 +4862,14 @@ packages:
chalk: 5.3.0 chalk: 5.3.0
is-unicode-supported: 1.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: /logform@2.6.0:
resolution: {integrity: sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==} resolution: {integrity: sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
@ -5577,12 +5620,12 @@ packages:
resolution: {integrity: sha512-lKFSRSRuDHhwDKMUobdsvaWCbbDRbV3jMUSMiajQSQux1aNUevAZVxUHc2JERI//W8ABPRbi3ebYuSuIzkNIpQ==} resolution: {integrity: sha512-lKFSRSRuDHhwDKMUobdsvaWCbbDRbV3jMUSMiajQSQux1aNUevAZVxUHc2JERI//W8ABPRbi3ebYuSuIzkNIpQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies: dependencies:
'@types/inquirer': 9.0.6 '@types/inquirer': 9.0.7
change-case: 4.1.2 change-case: 4.1.2
del: 7.1.0 del: 7.1.0
globby: 13.2.2 globby: 13.2.2
handlebars: 4.7.8 handlebars: 4.7.8
inquirer: 9.2.11 inquirer: 9.2.15
isbinaryfile: 5.0.0 isbinaryfile: 5.0.0
lodash.get: 4.4.2 lodash.get: 4.4.2
lower-case: 2.0.2 lower-case: 2.0.2
@ -5788,6 +5831,21 @@ packages:
string-width: 6.1.0 string-width: 6.1.0
strip-ansi: 7.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: /os-filter-obj@2.0.0:
resolution: {integrity: sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==} resolution: {integrity: sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==}
engines: {node: '>=4'} engines: {node: '>=4'}
@ -6051,18 +6109,18 @@ packages:
semver-compare: 1.0.0 semver-compare: 1.0.0
dev: true dev: true
/plop@4.0.0: /plop@4.0.1:
resolution: {integrity: sha512-6hsuNofd5crnl7upQSRyw+7zVBZqxF9UZoWqsKqtPthpvtgUuYD+atBx7ZD9RT8qXWnylyCt9bpvYLZPexxDMg==} resolution: {integrity: sha512-5n8QU93kvL/ObOzBcPAB1siVFtAH1TZM6TntJ3JK5kXT0jIgnQV+j+uaOWWFJlg1cNkzLYm8klgASF65K36q9w==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} engines: {node: '>=18'}
hasBin: true hasBin: true
dependencies: dependencies:
'@types/liftoff': 4.0.2 '@types/liftoff': 4.0.3
chalk: 5.3.0 chalk: 5.3.0
interpret: 3.1.1 interpret: 3.1.1
liftoff: 4.0.0 liftoff: 4.0.0
minimist: 1.2.8 minimist: 1.2.8
node-plop: 0.32.0 node-plop: 0.32.0
ora: 7.0.1 ora: 8.0.1
v8flags: 4.0.1 v8flags: 4.0.1
dev: true dev: true
@ -6656,8 +6714,9 @@ packages:
dependencies: dependencies:
glob: 7.2.3 glob: 7.2.3
/rizzdown@0.0.6: /rizzdown@0.0.7:
resolution: {integrity: sha512-PI5asys+xYXgit0TPiFo34Wtug8LJK+8cM2CeULqYYp7sTs1KZi6efgiyzfc7M2l4MSxawdqbjtT9Xq6BUgAqw==} resolution: {integrity: sha512-gL+Vz1qMNAIoEgtYzJ+PbB0rZFtI+GJ/C+vXC9/IM1O3F21AgboBWrqGM7Ls5L7GiG1o933vApjulun/hdto2g==}
engines: {node: '>=16'}
hasBin: true hasBin: true
dependencies: dependencies:
bottleneck: 2.19.5 bottleneck: 2.19.5
@ -6669,7 +6728,7 @@ packages:
figlet: 1.7.0 figlet: 1.7.0
find-up: 6.3.0 find-up: 6.3.0
front-matter: 4.0.2 front-matter: 4.0.2
inquirer: 9.2.11 inquirer: 9.2.15
marked: 9.1.5 marked: 9.1.5
openai: 4.14.2 openai: 4.14.2
ora: 7.0.1 ora: 7.0.1
@ -7108,6 +7167,11 @@ packages:
dependencies: dependencies:
bl: 5.1.0 bl: 5.1.0
/stdin-discarder@0.2.2:
resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==}
engines: {node: '>=18'}
dev: true
/streamx@2.15.2: /streamx@2.15.2:
resolution: {integrity: sha512-b62pAV/aeMjUoRN2C/9F0n+G8AfcJjNC0zw/ZmOHeFsIe4m4GzjVW9m6VHXVjk536NbdU9JRwKMJRfkc+zUFTg==} resolution: {integrity: sha512-b62pAV/aeMjUoRN2C/9F0n+G8AfcJjNC0zw/ZmOHeFsIe4m4GzjVW9m6VHXVjk536NbdU9JRwKMJRfkc+zUFTg==}
dependencies: dependencies:
@ -7148,6 +7212,15 @@ packages:
emoji-regex: 10.3.0 emoji-regex: 10.3.0
strip-ansi: 7.1.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: /string_decoder@0.10.31:
resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==}
dev: true dev: true

View File

@ -24,5 +24,5 @@
"$shared": ["src/shared"] "$shared": ["src/shared"]
} }
}, },
"include": ["./src"] "include": ["./src", "plopfile.mjs"]
} }