mirror of
https://github.com/djdevin/recflare.git
synced 2026-09-08 06:31:27 -07:00
Initial commit
This commit is contained in:
@@ -0,0 +1,166 @@
|
||||
import { NewPackageAnswers, NewWorkerAnswers } from './answers'
|
||||
import {
|
||||
pascalText,
|
||||
pascalTextPlural,
|
||||
pascalTextSingular,
|
||||
slugifyText,
|
||||
slugifyTextPlural,
|
||||
slugifyTextSingular,
|
||||
} from './helpers/slugify'
|
||||
import { nameValidator } from './helpers/validate'
|
||||
import { fixAll } from './plugins/fix-all'
|
||||
import { fixDepsAndFormat } from './plugins/fix-deps-and-format'
|
||||
import { pnpmInstall } from './plugins/pnpm-install'
|
||||
|
||||
import type { PlopTypes } from '@turbo/gen'
|
||||
import type { PnpmInstallData } from './plugins/pnpm-install'
|
||||
|
||||
export default function generator(plop: PlopTypes.NodePlopAPI): void {
|
||||
plop.setActionType('pnpmInstall', pnpmInstall as PlopTypes.CustomActionFunction)
|
||||
plop.setActionType('fixAll', fixAll as PlopTypes.CustomActionFunction)
|
||||
plop.setActionType('fixDepsAndFormat', fixDepsAndFormat as PlopTypes.CustomActionFunction)
|
||||
|
||||
plop.setHelper('slug', slugifyText)
|
||||
plop.setHelper('slug-s', slugifyTextSingular)
|
||||
plop.setHelper('slug-p', slugifyTextPlural)
|
||||
|
||||
plop.setHelper('pascal', pascalText)
|
||||
plop.setHelper('pascal-s', pascalTextSingular)
|
||||
plop.setHelper('pascal-p', pascalTextPlural)
|
||||
|
||||
plop.setGenerator('new-worker', {
|
||||
description: 'Create a new Cloudflare Worker using Hono',
|
||||
prompts: [
|
||||
{
|
||||
type: 'input',
|
||||
name: 'name',
|
||||
message: 'name of worker',
|
||||
validate: nameValidator,
|
||||
},
|
||||
],
|
||||
actions: (data: unknown) => {
|
||||
const answers = NewWorkerAnswers.parse(data)
|
||||
process.chdir(answers.turbo.paths.root)
|
||||
const destination = `apps/${slugifyText(answers.name)}`
|
||||
|
||||
const actions: PlopTypes.Actions = [
|
||||
{
|
||||
type: 'addMany',
|
||||
base: 'templates/fetch-worker',
|
||||
destination,
|
||||
templateFiles: ['templates/fetch-worker/**/**.hbs'],
|
||||
data: answers,
|
||||
},
|
||||
{ type: 'pnpmInstall', data: { ...answers, destination } satisfies PnpmInstallData },
|
||||
{ type: 'fixAll' },
|
||||
{ type: 'pnpmInstall', data: { ...answers, destination } satisfies PnpmInstallData },
|
||||
]
|
||||
|
||||
return actions
|
||||
},
|
||||
})
|
||||
|
||||
plop.setGenerator('new-worker-vite', {
|
||||
description: 'Create a new Cloudflare Worker using Hono and Vite',
|
||||
prompts: [
|
||||
{
|
||||
type: 'input',
|
||||
name: 'name',
|
||||
message: 'name of worker',
|
||||
validate: nameValidator,
|
||||
},
|
||||
],
|
||||
actions: (data: unknown) => {
|
||||
const answers = NewWorkerAnswers.parse(data)
|
||||
process.chdir(answers.turbo.paths.root)
|
||||
const destination = `apps/${slugifyText(answers.name)}`
|
||||
|
||||
const actions: PlopTypes.Actions = [
|
||||
{
|
||||
type: 'addMany',
|
||||
base: 'templates/fetch-worker-vite',
|
||||
destination,
|
||||
templateFiles: ['templates/fetch-worker-vite/**/**.hbs'],
|
||||
data: answers,
|
||||
},
|
||||
{ type: 'pnpmInstall', data: { ...answers, destination } satisfies PnpmInstallData },
|
||||
{ type: 'fixAll' },
|
||||
{ type: 'pnpmInstall', data: { ...answers, destination } satisfies PnpmInstallData },
|
||||
]
|
||||
|
||||
return actions
|
||||
},
|
||||
})
|
||||
|
||||
plop.setGenerator('new-worker-minimal', {
|
||||
description: 'Create a new Cloudflare Worker with a minimal fetch handler',
|
||||
prompts: [
|
||||
{
|
||||
type: 'input',
|
||||
name: 'name',
|
||||
message: 'name of worker',
|
||||
validate: nameValidator,
|
||||
},
|
||||
],
|
||||
actions: (data: unknown) => {
|
||||
const answers = NewWorkerAnswers.parse(data)
|
||||
process.chdir(answers.turbo.paths.root)
|
||||
const destination = `apps/${slugifyText(answers.name)}`
|
||||
|
||||
const actions: PlopTypes.Actions = [
|
||||
{
|
||||
type: 'addMany',
|
||||
base: 'templates/fetch-worker-minimal',
|
||||
destination,
|
||||
templateFiles: ['templates/fetch-worker-minimal/**/**.hbs'],
|
||||
data: answers,
|
||||
},
|
||||
{ type: 'pnpmInstall', data: { ...answers, destination } satisfies PnpmInstallData },
|
||||
{ type: 'fixAll' },
|
||||
{ type: 'pnpmInstall', data: { ...answers, destination } satisfies PnpmInstallData },
|
||||
]
|
||||
|
||||
return actions
|
||||
},
|
||||
})
|
||||
|
||||
plop.setGenerator('new-package', {
|
||||
description: 'Create a new shared package',
|
||||
prompts: [
|
||||
{
|
||||
type: 'input',
|
||||
name: 'name',
|
||||
message: 'name of package',
|
||||
validate: nameValidator,
|
||||
},
|
||||
{
|
||||
type: 'confirm',
|
||||
name: 'usedInWorkers',
|
||||
message: 'Will this package be used within Cloudflare Workers?',
|
||||
default: true,
|
||||
},
|
||||
],
|
||||
actions: (data: unknown) => {
|
||||
const answers = NewPackageAnswers.parse(data)
|
||||
process.chdir(answers.turbo.paths.root)
|
||||
const destination = `packages/${slugifyText(answers.name)}`
|
||||
|
||||
const actions: PlopTypes.Actions = [
|
||||
{
|
||||
type: 'addMany',
|
||||
base: 'templates/package',
|
||||
destination,
|
||||
templateFiles: ['templates/package/**/**.hbs'],
|
||||
data: {
|
||||
...answers,
|
||||
tsconfigType: answers.usedInWorkers ? 'workers-lib.json' : 'lib.json',
|
||||
},
|
||||
},
|
||||
{ type: 'fixDepsAndFormat' },
|
||||
{ type: 'pnpmInstall', data: { ...answers, destination } satisfies PnpmInstallData },
|
||||
]
|
||||
|
||||
return actions
|
||||
},
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user