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:
9
pnpm-lock.yaml
generated
9
pnpm-lock.yaml
generated
@@ -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':
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
packages:
|
||||
- "apps/*"
|
||||
- "packages/*"
|
||||
- "turbo/generators"
|
||||
|
||||
20
turbo/generators/config.test.ts
Normal file
20
turbo/generators/config.test.ts
Normal 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([]);
|
||||
});
|
||||
});
|
||||
@@ -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`
|
||||
*
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
11
turbo/generators/vitest.config.ts
Normal file
11
turbo/generators/vitest.config.ts
Normal 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,
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user