feat(generators): add core-package entry + dispatch table (empty)

Registers pnpm turbo gen core-package with an empty choices list and a
dispatch table that throws for unknown names. Adds vitest config + test
script to turbo/generators and adds it to the pnpm workspace so tests
run via pnpm --filter @repo/turbo-generators test.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-09 13:22:20 +02:00
parent 723729dd9e
commit c59f5552af
6 changed files with 80 additions and 1 deletions

9
pnpm-lock.yaml generated
View File

@@ -576,6 +576,9 @@ importers:
packages/core-realtime:
dependencies:
'@repo/core-shared':
specifier: workspace:*
version: link:../core-shared
payload:
specifier: ^3.0.0
version: 3.81.0(graphql@16.13.2)(typescript@5.9.3)
@@ -957,6 +960,12 @@ importers:
specifier: ^3.1.0
version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@25.0.1)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)
turbo/generators:
devDependencies:
vitest:
specifier: ^3.1.0
version: 3.2.4(@types/debug@4.1.13)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@25.0.1)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)
packages:
'@adobe/css-tools@4.4.4':

View File

@@ -1,3 +1,4 @@
packages:
- "apps/*"
- "packages/*"
- "turbo/generators"

View File

@@ -0,0 +1,20 @@
import { describe, it, expect } from "vitest";
import type { PlopTypes } from "@turbo/gen";
import generator from "./config";
describe("core-package generator", () => {
it("is registered with an empty choices list initially", () => {
const captured: Array<{ name: string; def: PlopTypes.PlopGeneratorConfig }> = [];
const plopMock = {
setHelper: () => {},
setGenerator: (name: string, def: PlopTypes.PlopGeneratorConfig) =>
captured.push({ name, def }),
} as unknown as PlopTypes.NodePlopAPI;
generator(plopMock);
const corePkg = captured.find((c) => c.name === "core-package");
expect(corePkg).toBeDefined();
const prompts = corePkg!.def.prompts as Array<{ name: string; choices: unknown[] }>;
expect(prompts[0]!.name).toBe("name");
expect(prompts[0]!.choices).toEqual([]);
});
});

View File

@@ -491,6 +491,38 @@ export default function generator(plop: PlopTypes.NodePlopAPI): void {
},
});
/**
* Turbo generator: `core-package`
*
* Scaffolds an optional core package back into a slimmed template. Each
* name maps to a verbatim snapshot of the package captured at generator-add
* time. Phases 3-6 each register one entry in CORE_PACKAGE_GENERATORS.
*/
const CORE_PACKAGE_GENERATORS: Record<string, () => PlopTypes.ActionType[]> =
{
// Phases 3-6 each insert one entry here.
};
plop.setGenerator("core-package", {
description: "Scaffold an optional core package (realtime, events, trpc, ui)",
prompts: [
{
type: "list",
name: "name",
message: "Which optional core package?",
choices: [],
},
],
actions: (answers) => {
const a = answers as { name: string };
const handler = CORE_PACKAGE_GENERATORS[a.name];
if (!handler) {
throw new Error(`No generator for core-package '${a.name}'`);
}
return handler();
},
});
/**
* Turbo generator: `job`
*

View File

@@ -2,5 +2,11 @@
"name": "@repo/turbo-generators",
"private": true,
"version": "0.0.0",
"type": "module"
"type": "module",
"scripts": {
"test": "vitest run"
},
"devDependencies": {
"vitest": "^3.1.0"
}
}

View File

@@ -0,0 +1,11 @@
import { defineConfig } from "vitest/config";
export default defineConfig({
test: {
globals: true,
environment: "node",
include: ["*.test.ts", "lib/*.test.ts"],
clearMocks: true,
restoreMocks: true,
},
});