refactor: strip Phase/Plan/R-number references from source comments
This commit is contained in:
@@ -14,10 +14,10 @@ import {
|
||||
/**
|
||||
* Turbo generator: `feature`
|
||||
*
|
||||
* Scaffolds a Lazar-conformant feature package under `packages/<name>/`
|
||||
* Scaffolds a feature package under `packages/<name>/`
|
||||
* matching the shape of the existing `navigation` reference feature.
|
||||
*
|
||||
* Phase 1 scope (intentionally limited):
|
||||
* Scope (intentionally limited):
|
||||
* - Single entity, single use case (`getX`)
|
||||
* - Skips Payload CMS collection/global templates (integrations/cms/**)
|
||||
* - Skips UI query helpers (ui/query.ts) — emits an empty barrel
|
||||
@@ -38,8 +38,7 @@ export default function generator(plop: PlopTypes.NodePlopAPI): void {
|
||||
plop.setHelper("eq", (a: unknown, b: unknown) => a === b);
|
||||
|
||||
plop.setGenerator("feature", {
|
||||
description:
|
||||
"Scaffold a Lazar-conformant feature package (single entity / single use case)",
|
||||
description: "Scaffold a feature package (single entity / single use case)",
|
||||
prompts: [
|
||||
{
|
||||
type: "input",
|
||||
@@ -135,7 +134,8 @@ export default function generator(plop: PlopTypes.NodePlopAPI): void {
|
||||
{
|
||||
type: "add",
|
||||
path: "packages/{{kebabCase name}}/src/entities/models/{{kebabCase entity}}.test.ts",
|
||||
templateFile: "templates/feature/src/entities/models/entity.test.ts.hbs",
|
||||
templateFile:
|
||||
"templates/feature/src/entities/models/entity.test.ts.hbs",
|
||||
},
|
||||
{
|
||||
type: "add",
|
||||
@@ -255,7 +255,8 @@ export default function generator(plop: PlopTypes.NodePlopAPI): void {
|
||||
{
|
||||
type: "add",
|
||||
path: "packages/{{kebabCase name}}/src/integrations/api/procedures.ts",
|
||||
templateFile: "templates/feature/src/integrations/api/procedures.ts.hbs",
|
||||
templateFile:
|
||||
"templates/feature/src/integrations/api/procedures.ts.hbs",
|
||||
},
|
||||
{
|
||||
type: "add",
|
||||
@@ -265,10 +266,11 @@ export default function generator(plop: PlopTypes.NodePlopAPI): void {
|
||||
{
|
||||
type: "add",
|
||||
path: "packages/{{kebabCase name}}/src/integrations/api/router.test.ts",
|
||||
templateFile: "templates/feature/src/integrations/api/router.test.ts.hbs",
|
||||
templateFile:
|
||||
"templates/feature/src/integrations/api/router.test.ts.hbs",
|
||||
},
|
||||
|
||||
// Seeds + factories + contracts (Phase 1: minimal stubs that still typecheck/test)
|
||||
// Seeds + factories + contracts (minimal stubs that still typecheck/test)
|
||||
{
|
||||
type: "add",
|
||||
path: "packages/{{kebabCase name}}/src/__seeds__/dev.ts",
|
||||
@@ -282,7 +284,8 @@ export default function generator(plop: PlopTypes.NodePlopAPI): void {
|
||||
{
|
||||
type: "add",
|
||||
path: "packages/{{kebabCase name}}/src/__factories__/{{kebabCase entity}}.factory.ts",
|
||||
templateFile: "templates/feature/src/__factories__/entity.factory.ts.hbs",
|
||||
templateFile:
|
||||
"templates/feature/src/__factories__/entity.factory.ts.hbs",
|
||||
},
|
||||
{
|
||||
type: "add",
|
||||
@@ -291,7 +294,7 @@ export default function generator(plop: PlopTypes.NodePlopAPI): void {
|
||||
"templates/feature/src/__contracts__/entity-repository.contract.ts.hbs",
|
||||
},
|
||||
|
||||
// ui — empty barrel for Phase 1 (./ui subpath kept reserved)
|
||||
// ui — empty barrel (./ui subpath kept reserved)
|
||||
{
|
||||
type: "add",
|
||||
path: "packages/{{kebabCase name}}/src/ui/index.ts",
|
||||
@@ -300,7 +303,11 @@ export default function generator(plop: PlopTypes.NodePlopAPI): void {
|
||||
|
||||
// Final manual-wiring instructions printed to the user
|
||||
function printNextSteps(answers: Record<string, unknown>): string {
|
||||
const a = answers as { name: string; entity: string; entityPlural: string };
|
||||
const a = answers as {
|
||||
name: string;
|
||||
entity: string;
|
||||
entityPlural: string;
|
||||
};
|
||||
const kebab = a.name;
|
||||
const constSym = a.name.toUpperCase().replace(/-/g, "_");
|
||||
const pkg = `@repo/${kebab}`;
|
||||
@@ -602,11 +609,18 @@ import noRealtimeHandlerReexport from "./rules/no-realtime-handler-reexport.js";
|
||||
"packages/core-eslint/rules",
|
||||
),
|
||||
() => {
|
||||
addToTranspilePackages("apps/web-next/next.config.mjs", "@repo/core-realtime");
|
||||
addToTranspilePackages(
|
||||
"apps/web-next/next.config.mjs",
|
||||
"@repo/core-realtime",
|
||||
);
|
||||
return "Added @repo/core-realtime to transpilePackages.";
|
||||
},
|
||||
() => {
|
||||
addBoundariesEntry("packages/core-eslint/base.js", "packages/core-realtime", { mode: "folder" });
|
||||
addBoundariesEntry(
|
||||
"packages/core-eslint/base.js",
|
||||
"packages/core-realtime",
|
||||
{ mode: "folder" },
|
||||
);
|
||||
return "Added core-realtime boundaries entry.";
|
||||
},
|
||||
() => {
|
||||
@@ -634,7 +648,10 @@ import noRealtimeHandlerReexport from "./rules/no-realtime-handler-reexport.js";
|
||||
},
|
||||
...emitTemplateTree("core-package/events", "packages/core-events"),
|
||||
() => {
|
||||
addToTranspilePackages("apps/web-next/next.config.mjs", "@repo/core-events");
|
||||
addToTranspilePackages(
|
||||
"apps/web-next/next.config.mjs",
|
||||
"@repo/core-events",
|
||||
);
|
||||
return "Added @repo/core-events to transpilePackages.";
|
||||
},
|
||||
() => {
|
||||
@@ -654,7 +671,10 @@ import noRealtimeHandlerReexport from "./rules/no-realtime-handler-reexport.js";
|
||||
},
|
||||
...emitTemplateTree("core-package/trpc", "packages/core-trpc"),
|
||||
() => {
|
||||
addToTranspilePackages("apps/web-next/next.config.mjs", "@repo/core-trpc");
|
||||
addToTranspilePackages(
|
||||
"apps/web-next/next.config.mjs",
|
||||
"@repo/core-trpc",
|
||||
);
|
||||
return "Added @repo/core-trpc to transpilePackages.";
|
||||
},
|
||||
printTrpcNextSteps,
|
||||
@@ -666,7 +686,10 @@ import noRealtimeHandlerReexport from "./rules/no-realtime-handler-reexport.js";
|
||||
},
|
||||
...emitTemplateTree("core-package/ui", "packages/core-ui"),
|
||||
() => {
|
||||
addToTranspilePackages("apps/web-next/next.config.mjs", "@repo/core-ui");
|
||||
addToTranspilePackages(
|
||||
"apps/web-next/next.config.mjs",
|
||||
"@repo/core-ui",
|
||||
);
|
||||
return "Added @repo/core-ui to transpilePackages.";
|
||||
},
|
||||
printUiNextSteps,
|
||||
@@ -678,7 +701,10 @@ import noRealtimeHandlerReexport from "./rules/no-realtime-handler-reexport.js";
|
||||
},
|
||||
...emitTemplateTree("core-package/audit", "packages/core-audit"),
|
||||
() => {
|
||||
addToTranspilePackages("apps/web-next/next.config.mjs", "@repo/core-audit");
|
||||
addToTranspilePackages(
|
||||
"apps/web-next/next.config.mjs",
|
||||
"@repo/core-audit",
|
||||
);
|
||||
return "Added @repo/core-audit to transpilePackages.";
|
||||
},
|
||||
printAuditNextSteps,
|
||||
@@ -686,7 +712,8 @@ import noRealtimeHandlerReexport from "./rules/no-realtime-handler-reexport.js";
|
||||
};
|
||||
|
||||
plop.setGenerator("core-package", {
|
||||
description: "Scaffold an optional core package (realtime, events, trpc, ui, audit)",
|
||||
description:
|
||||
"Scaffold an optional core package (realtime, events, trpc, ui, audit)",
|
||||
prompts: [
|
||||
{
|
||||
type: "list",
|
||||
@@ -949,7 +976,9 @@ function consumeActions(a: {
|
||||
const cmsIndexFile = `packages/${a.feature}/src/integrations/cms/index.ts`;
|
||||
return [
|
||||
() => {
|
||||
assertAnchors(process.cwd(), symbolFile, ["// <gen:event-handler-symbols>"]);
|
||||
assertAnchors(process.cwd(), symbolFile, [
|
||||
"// <gen:event-handler-symbols>",
|
||||
]);
|
||||
assertAnchors(process.cwd(), bindProdFile, ["// <gen:event-handlers>"]);
|
||||
assertAnchors(process.cwd(), bindDevFile, ["// <gen:event-handlers>"]);
|
||||
assertAnchors(process.cwd(), cmsIndexFile, ["// <gen:job-tasks>"]);
|
||||
@@ -1153,7 +1182,9 @@ function realtimeHandlerActions(a: {
|
||||
assertAnchors(process.cwd(), symbolFile, [
|
||||
"// <gen:realtime-handler-symbols>",
|
||||
]);
|
||||
assertAnchors(process.cwd(), bindProdFile, ["// <gen:realtime-handlers>"]);
|
||||
assertAnchors(process.cwd(), bindProdFile, [
|
||||
"// <gen:realtime-handlers>",
|
||||
]);
|
||||
assertAnchors(process.cwd(), bindDevFile, ["// <gen:realtime-handlers>"]);
|
||||
return "All required anchors present";
|
||||
},
|
||||
@@ -1241,7 +1272,7 @@ function printTrpcNextSteps(): string {
|
||||
"",
|
||||
" 2. apps/web-next/src/app/providers.tsx:",
|
||||
' - import { NextTrpcProvider } from "@repo/core-trpc/next";',
|
||||
" - wrap children: <NextTrpcProvider trpcUrl=\"/api/trpc\">{children}</NextTrpcProvider>",
|
||||
' - wrap children: <NextTrpcProvider trpcUrl="/api/trpc">{children}</NextTrpcProvider>',
|
||||
"",
|
||||
" 3. apps/web-next/src/app/api/trpc/[trpc]/route.ts:",
|
||||
' - import { fetchRequestHandler } from "@trpc/server/adapters/fetch";',
|
||||
@@ -1250,7 +1281,7 @@ function printTrpcNextSteps(): string {
|
||||
"",
|
||||
" 4. apps/web-tanstack/src/routes/__root.tsx:",
|
||||
' - import { TanstackTrpcProvider } from "@repo/core-trpc/tanstack";',
|
||||
" - wrap <Outlet /> with <TanstackTrpcProvider trpcUrl=\"http://localhost:3000/api/trpc\">",
|
||||
' - wrap <Outlet /> with <TanstackTrpcProvider trpcUrl="http://localhost:3000/api/trpc">',
|
||||
"",
|
||||
" 5. Add @repo/core-trpc to apps/web-next/package.json and apps/web-tanstack/package.json dependencies",
|
||||
"",
|
||||
@@ -1358,7 +1389,7 @@ function printAuditNextSteps(): string {
|
||||
"",
|
||||
"3. Mount the admin tRPC router in packages/core-api/src/root.ts:",
|
||||
' import { createAuditRouter } from "@repo/core-audit/api";',
|
||||
" // const { auditLog } = bindAudit(container, { payloadConfig, sinks: [\"payload\", \"stdout\"] });",
|
||||
' // const { auditLog } = bindAudit(container, { payloadConfig, sinks: ["payload", "stdout"] });',
|
||||
" // routers: { ..., audit: createAuditRouter(auditLog) },",
|
||||
"",
|
||||
"4. Bind audit in apps/web-next/src/server/bind-production.ts:",
|
||||
@@ -1371,7 +1402,7 @@ function printAuditNextSteps(): string {
|
||||
"5. Install user-collection hooks (recommended for DPA compliance):",
|
||||
" In packages/auth/src/di/bind-production.ts, gate on ctx.auditLog:",
|
||||
" if (ctx.auditLog) {",
|
||||
' const { createAuditErasureHook, createAuditAfterReadHook } =',
|
||||
" const { createAuditErasureHook, createAuditAfterReadHook } =",
|
||||
' await import("@repo/core-audit/hooks");',
|
||||
" // wire onto users collection — see docs/guides/audit-and-compliance.md",
|
||||
" }",
|
||||
|
||||
Reference in New Issue
Block a user