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:
|
packages/core-realtime:
|
||||||
dependencies:
|
dependencies:
|
||||||
|
'@repo/core-shared':
|
||||||
|
specifier: workspace:*
|
||||||
|
version: link:../core-shared
|
||||||
payload:
|
payload:
|
||||||
specifier: ^3.0.0
|
specifier: ^3.0.0
|
||||||
version: 3.81.0(graphql@16.13.2)(typescript@5.9.3)
|
version: 3.81.0(graphql@16.13.2)(typescript@5.9.3)
|
||||||
@@ -957,6 +960,12 @@ importers:
|
|||||||
specifier: ^3.1.0
|
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)
|
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:
|
packages:
|
||||||
|
|
||||||
'@adobe/css-tools@4.4.4':
|
'@adobe/css-tools@4.4.4':
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
packages:
|
packages:
|
||||||
- "apps/*"
|
- "apps/*"
|
||||||
- "packages/*"
|
- "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`
|
* Turbo generator: `job`
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -2,5 +2,11 @@
|
|||||||
"name": "@repo/turbo-generators",
|
"name": "@repo/turbo-generators",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.0",
|
"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