create-ailk 0.1.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/component-catalog.md +210 -52
- package/dist/cli.js +0 -0
- package/dist/lib/apply-module-patches.d.ts +47 -0
- package/dist/lib/apply-module-patches.js +370 -0
- package/dist/lib/extract-module-bundle.d.ts +12 -3
- package/dist/lib/extract-module-bundle.js +236 -24
- package/dist/lib/fetch-module.d.ts +3 -38
- package/dist/lib/fetch-module.js +26 -8
- package/dist/lib/module-license-gate.d.ts +2 -0
- package/dist/lib/module-license-gate.js +1 -0
- package/dist/lib/paid-paths.d.ts +16 -0
- package/dist/lib/paid-paths.js +90 -0
- package/dist/module-architecture.d.ts +139 -23
- package/dist/module-architecture.js +668 -25
- package/dist/parse-args.d.ts +2 -2
- package/dist/parse-args.js +3 -1
- package/dist/programmatic.d.ts +2 -1
- package/dist/programmatic.js +15 -4
- package/dist/surfaces.d.ts +12 -36
- package/dist/surfaces.js +35 -5
- package/dist/sync-routes.js +31 -1
- package/package.json +14 -15
- package/templates/.claude/agents/web.md +2 -3
- package/templates/.claude/rules/architecture.md +5 -5
- package/templates/.claude/skills/README.md +2 -1
- package/templates/.env.example +21 -9
- package/templates/CONVENTIONS.md +6 -7
- package/templates/apps/api/.env.example +9 -0
- package/templates/apps/api/CLAUDE.md +35 -4
- package/templates/apps/api/package.json +0 -1
- package/templates/apps/api/src/__tests__/cors.test.ts +195 -0
- package/templates/apps/api/src/__tests__/module-exclusion.test.ts +60 -2
- package/templates/apps/api/src/__tests__/vercel-handler.test.ts +159 -0
- package/templates/apps/api/src/config/__tests__/modules.test.ts +76 -0
- package/templates/apps/api/src/config/index.ts +19 -0
- package/templates/apps/api/src/config/modules.ts +12 -14
- package/templates/apps/api/src/lib/__mocks__/prisma.ts +13 -0
- package/templates/apps/api/src/lib/__tests__/slice-load.test.ts +89 -0
- package/templates/apps/api/src/lib/slice-load.ts +90 -0
- package/templates/apps/api/src/openapi/__tests__/openapi.test.ts +52 -32
- package/templates/apps/api/src/openapi/__tests__/spec-identity.test.ts +182 -0
- package/templates/apps/api/src/openapi/__tests__/surface-drift.test.ts +293 -0
- package/templates/apps/api/src/openapi/index.ts +9 -3
- package/templates/apps/api/src/openapi/spec.ts +505 -65
- package/templates/apps/api/src/openapi/surface-drift.ts +195 -0
- package/templates/apps/api/src/routes/content/__tests__/create.test.ts +14 -0
- package/templates/apps/api/src/routes/content/__tests__/delete.test.ts +14 -0
- package/templates/apps/api/src/routes/content/__tests__/update.test.ts +14 -0
- package/templates/apps/api/src/routes/content/index.ts +38 -11
- package/templates/apps/api/src/routes/project-listings/__tests__/configured-application.test.ts +28 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/drafts.test.ts +144 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/founder-identity.test.ts +796 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/me.test.ts +478 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/public.test.ts +38 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/resume-email.test.ts +814 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/site-answers.test.ts +717 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/site-key.test.ts +35 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/structured-address.test.ts +484 -0
- package/templates/apps/api/src/routes/project-listings/index.ts +52 -10
- package/templates/apps/api/src/routes/project-listings/me.ts +86 -0
- package/templates/apps/api/src/routes/project-listings/patch-draft.ts +5 -0
- package/templates/apps/api/src/routes/project-listings/public.ts +5 -0
- package/templates/apps/api/src/routes/project-listings/respond.ts +11 -0
- package/templates/apps/api/src/routes/project-listings/resume-token.ts +5 -0
- package/templates/apps/api/src/routes/project-listings/start.ts +38 -0
- package/templates/apps/api/src/routes/project-listings/submit.ts +5 -0
- package/templates/apps/api/src/routes/project-listings/verify-email.ts +150 -0
- package/templates/apps/api/src/server.ts +471 -133
- package/templates/apps/api/src/services/__tests__/consent-migration.test.ts +65 -0
- package/templates/apps/api/src/services/__tests__/consent.test.ts +282 -0
- package/templates/apps/api/src/services/consent.ts +236 -0
- package/templates/apps/api/src/services/deliverable-fulfillment.ts +10 -0
- package/templates/apps/api/src/services/listing-config.ts +58 -0
- package/templates/apps/api/src/services/project-listing-resume-email.ts +326 -0
- package/templates/apps/api/src/services/project-listings.ts +602 -29
- package/templates/apps/api/src/vercel-handler.ts +60 -26
- package/templates/apps/mcp/.env.example +8 -0
- package/templates/apps/mcp/CLAUDE.md +2 -2
- package/templates/apps/mcp/__tests__/catalog-drift.test.ts +21 -0
- package/templates/apps/mcp/__tests__/config/modules.test.ts +78 -0
- package/templates/apps/mcp/__tests__/module-exclusion.test.ts +1 -1
- package/templates/apps/mcp/src/config/modules.ts +14 -13
- package/templates/apps/mcp/src/server.ts +8 -4
- package/templates/apps/mcp/src/tools/index.ts +7 -22
- package/templates/apps/web/.env.example +15 -0
- package/templates/apps/web/app/[locale]/(authed)/{waitlist/__tests__ → __tests__}/gate.test.tsx +4 -4
- package/templates/apps/web/app/[locale]/flows/[slug]/FlowStepperClient.tsx +2 -1
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/FlowStepperClient.permalink.test.tsx +2 -1
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/FlowStepperClient.test.tsx +2 -1
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/flow.actions.test.ts +1 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/two-route-tool.test.tsx +1 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/flow.actions.ts +2 -1
- package/templates/apps/web/app/[locale]/flows/[slug]/page.tsx +1 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/start/page.tsx +1 -0
- package/templates/apps/web/app/[locale]/layout.tsx +13 -1
- package/templates/apps/web/app/llms.txt/route.ts +12 -9
- package/templates/apps/web/jest.config.cjs +20 -13
- package/templates/apps/web/lib/__tests__/site-theme.test.ts +112 -0
- package/templates/apps/web/lib/site-brand.tsx +4 -1
- package/templates/apps/web/lib/site-theme.ts +74 -0
- package/templates/apps/web/next.config.mjs +1 -3
- package/templates/apps/web/package.json +1 -6
- package/templates/apps/web/public/android-chrome-192x192.png +0 -0
- package/templates/apps/web/public/android-chrome-512x512.png +0 -0
- package/templates/apps/web/public/apple-touch-icon.png +0 -0
- package/templates/apps/web/public/favicon-16x16.png +0 -0
- package/templates/apps/web/public/favicon-32x32.png +0 -0
- package/templates/apps/web/public/favicon.ico +0 -0
- package/templates/apps/web/public/favicon.svg +6 -3
- package/templates/apps/web/public/lockup-horizontal.svg +4 -0
- package/templates/apps/web/public/logomark.svg +4 -0
- package/templates/apps/web/public/site.webmanifest +2 -2
- package/templates/apps/web/public/wordmark.svg +4 -0
- package/templates/content/_site.mdx +12 -0
- package/templates/database/CHANGELOG.md +94 -0
- package/templates/database/inbox/schema.prisma +165 -0
- package/templates/database/migrations/20260911140000_listing_structured_address/migration.sql +32 -0
- package/templates/database/migrations/20260911180000_consent_grants/migration.sql +71 -0
- package/templates/database/migrations/20260911200000_listing_site_answers/migration.sql +30 -0
- package/templates/database/migrations/20260912120000_listing_owner_link/migration.sql +49 -0
- package/templates/database/migrations/20260914120000_listing_founder_identity/migration.sql +123 -0
- package/templates/database/package.json +1 -1
- package/templates/database/scripts/db-generate-locked.sh +0 -0
- package/templates/package.json +1 -1
- package/templates/.claude/skills/scaffold-commerce/SKILL.md +0 -807
- package/templates/.claude/skills/scaffold-commerce/references/lookup-keys-template.md +0 -71
- package/templates/.claude/skills/scaffold-commerce/references/marketplace-brand-pages.md +0 -83
- package/templates/.claude/skills/scaffold-commerce/templates/checkout-route.template.ts +0 -370
- package/templates/.claude/skills/scaffold-commerce/templates/invoice-route.template.ts +0 -376
- package/templates/.claude/skills/scaffold-commerce/templates/marketplace-cta-route.tsx.tmpl +0 -72
- package/templates/.claude/skills/scaffold-commerce/templates/payment-link-route.template.ts +0 -471
- package/templates/.claude/skills/scaffold-commerce/templates/portal-route.template.ts +0 -365
- package/templates/.claude/skills/scaffold-commerce/templates/stripe-config.template.ts +0 -60
- package/templates/.claude/skills/scaffold-commerce/templates/subscription-route.template.ts +0 -446
- package/templates/apps/api/src/__tests__/server.test.ts +0 -253
- package/templates/apps/api/src/bin/deliverable-resend.ts +0 -144
- package/templates/apps/api/src/bin/deliverable-upload.ts +0 -114
- package/templates/apps/api/src/bin/followup-sweep.ts +0 -44
- package/templates/apps/api/src/bin/listing-csv-sweep.ts +0 -46
- package/templates/apps/api/src/bin/seed-presets.ts +0 -58
- package/templates/apps/api/src/bin/seed-waitlist-experiments.ts +0 -104
- package/templates/apps/api/src/bin/session-retention-sweep.ts +0 -46
- package/templates/apps/api/src/lib/__tests__/stripe.test.ts +0 -74
- package/templates/apps/api/src/lib/stripe.ts +0 -52
- package/templates/apps/api/src/lib/tenant-db.ts +0 -225
- package/templates/apps/api/src/lib/ws-token.ts +0 -91
- package/templates/apps/api/src/middleware/tenant.ts +0 -99
- package/templates/apps/api/src/routes/billing/__tests__/portal.test.ts +0 -450
- package/templates/apps/api/src/routes/billing/__tests__/read.test.ts +0 -262
- package/templates/apps/api/src/routes/billing/__tests__/usage.test.ts +0 -436
- package/templates/apps/api/src/routes/billing/index.ts +0 -36
- package/templates/apps/api/src/routes/billing/portal.ts +0 -182
- package/templates/apps/api/src/routes/billing/read.ts +0 -75
- package/templates/apps/api/src/routes/billing/usage.ts +0 -153
- package/templates/apps/api/src/routes/checkout/__tests__/sessions.test.ts +0 -687
- package/templates/apps/api/src/routes/checkout/index.ts +0 -13
- package/templates/apps/api/src/routes/checkout/sessions.ts +0 -197
- package/templates/apps/api/src/routes/deliverables/__tests__/index.test.ts +0 -393
- package/templates/apps/api/src/routes/deliverables/index.ts +0 -200
- package/templates/apps/api/src/routes/flow-checkouts/__tests__/index.test.ts +0 -443
- package/templates/apps/api/src/routes/flow-checkouts/index.ts +0 -82
- package/templates/apps/api/src/routes/flows/README.md +0 -147
- package/templates/apps/api/src/routes/flows/__tests__/index.test.ts +0 -752
- package/templates/apps/api/src/routes/flows/__tests__/recommender.test.ts +0 -671
- package/templates/apps/api/src/routes/flows/index.ts +0 -202
- package/templates/apps/api/src/routes/flows/recommender.ts +0 -443
- package/templates/apps/api/src/routes/project-listings/__tests__/copy-edit.test.ts +0 -815
- package/templates/apps/api/src/routes/project-listings/__tests__/tenant-isolation.test.ts +0 -566
- package/templates/apps/api/src/routes/project-listings/get.ts +0 -70
- package/templates/apps/api/src/routes/project-listings/list.ts +0 -47
- package/templates/apps/api/src/routes/project-listings/patch.ts +0 -136
- package/templates/apps/api/src/routes/schedule/__tests__/index.test.ts +0 -490
- package/templates/apps/api/src/routes/schedule/index.ts +0 -249
- package/templates/apps/api/src/routes/slack/__tests__/actions.test.ts +0 -385
- package/templates/apps/api/src/routes/slack/actions.ts +0 -177
- package/templates/apps/api/src/routes/slack/index.ts +0 -38
- package/templates/apps/api/src/routes/waitlist-experiments/__tests__/tenant-isolation.test.ts +0 -577
- package/templates/apps/api/src/routes/waitlist-experiments/comparison.ts +0 -78
- package/templates/apps/api/src/routes/waitlist-experiments/index.ts +0 -41
- package/templates/apps/api/src/routes/waitlist-experiments/list.ts +0 -64
- package/templates/apps/api/src/routes/waitlist-experiments/respond.ts +0 -42
- package/templates/apps/api/src/routes/waitlist-experiments/signup.ts +0 -84
- package/templates/apps/api/src/routes/waitlist-experiments/signups.ts +0 -119
- package/templates/apps/api/src/routes/waitlist-signups/__tests__/index.test.ts +0 -238
- package/templates/apps/api/src/routes/waitlist-signups/index.ts +0 -101
- package/templates/apps/api/src/routes/webhooks/README.md +0 -80
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-flow-checkout.test.ts +0 -315
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-idempotency.test.ts +0 -247
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-org-billing.test.ts +0 -270
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-rate-limit.test.ts +0 -198
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe.test.ts +0 -633
- package/templates/apps/api/src/routes/webhooks/index.ts +0 -41
- package/templates/apps/api/src/routes/webhooks/stripe.ts +0 -481
- package/templates/apps/api/src/routes/workspaces/__tests__/config-tenant-isolation.test.ts +0 -356
- package/templates/apps/api/src/routes/workspaces/__tests__/tenant-isolation.test.ts +0 -671
- package/templates/apps/api/src/routes/workspaces/config.ts +0 -125
- package/templates/apps/api/src/routes/workspaces/index.ts +0 -194
- package/templates/apps/api/src/routes/workspaces/sessions.ts +0 -218
- package/templates/apps/api/src/services/__tests__/flow-aggregate.test.ts +0 -425
- package/templates/apps/api/src/services/__tests__/flow-engine.test.ts +0 -2840
- package/templates/apps/api/src/services/__tests__/lead-promotion.test.ts +0 -393
- package/templates/apps/api/src/services/__tests__/listing-csv-sweep.test.ts +0 -560
- package/templates/apps/api/src/services/__tests__/playbook-compile.test.ts +0 -406
- package/templates/apps/api/src/services/__tests__/playbook-render.test.ts +0 -290
- package/templates/apps/api/src/services/__tests__/project-listing-decision.test.ts +0 -736
- package/templates/apps/api/src/services/__tests__/project-listing-flow.test.ts +0 -475
- package/templates/apps/api/src/services/__tests__/project-listing-issue.test.ts +0 -340
- package/templates/apps/api/src/services/__tests__/recommender-capture.test.ts +0 -983
- package/templates/apps/api/src/services/__tests__/tenant-context-cascade.test.ts +0 -71
- package/templates/apps/api/src/services/__tests__/tenant-context.test.ts +0 -379
- package/templates/apps/api/src/services/__tests__/usage-metering.test.ts +0 -768
- package/templates/apps/api/src/services/__tests__/waitlist-dashboard.test.ts +0 -1314
- package/templates/apps/api/src/services/__tests__/waitlist-experiments.test.ts +0 -341
- package/templates/apps/api/src/services/__tests__/waitlist-followup.test.ts +0 -567
- package/templates/apps/api/src/services/__tests__/waitlist-scoring.test.ts +0 -474
- package/templates/apps/api/src/services/__tests__/waitlist-signups.test.ts +0 -354
- package/templates/apps/api/src/services/flow-aggregate.ts +0 -232
- package/templates/apps/api/src/services/flow-checkouts.ts +0 -123
- package/templates/apps/api/src/services/flow-engine.ts +0 -1278
- package/templates/apps/api/src/services/lead-promotion.ts +0 -176
- package/templates/apps/api/src/services/listing-csv-sweep.ts +0 -455
- package/templates/apps/api/src/services/playbook-compile.ts +0 -398
- package/templates/apps/api/src/services/playbook-render.ts +0 -263
- package/templates/apps/api/src/services/project-listing-decision.ts +0 -490
- package/templates/apps/api/src/services/project-listing-flow.ts +0 -426
- package/templates/apps/api/src/services/project-listing-issue.ts +0 -251
- package/templates/apps/api/src/services/recommender-capture.ts +0 -835
- package/templates/apps/api/src/services/scheduling/cal-provider.ts +0 -392
- package/templates/apps/api/src/services/scheduling/index.ts +0 -63
- package/templates/apps/api/src/services/scheduling/types.ts +0 -88
- package/templates/apps/api/src/services/tenant-context.ts +0 -451
- package/templates/apps/api/src/services/usage-metering.ts +0 -699
- package/templates/apps/api/src/services/waitlist-dashboard.ts +0 -947
- package/templates/apps/api/src/services/waitlist-experiments.ts +0 -213
- package/templates/apps/api/src/services/waitlist-followup.ts +0 -486
- package/templates/apps/api/src/services/waitlist-scoring.ts +0 -166
- package/templates/apps/api/src/services/waitlist-signups.ts +0 -165
- package/templates/apps/mcp/__tests__/schedule_tools.test.ts +0 -242
- package/templates/apps/mcp/src/tools/create_booking.ts +0 -58
- package/templates/apps/mcp/src/tools/get_event_meta.ts +0 -55
- package/templates/apps/mcp/src/tools/get_flow.ts +0 -61
- package/templates/apps/mcp/src/tools/list_availability.ts +0 -67
- package/templates/apps/mcp/src/tools/submit_flow_step.ts +0 -83
- package/templates/apps/web/app/[locale]/(authed)/waitlist/[experimentId]/page.tsx +0 -309
- package/templates/apps/web/app/[locale]/(authed)/waitlist/[experimentId]/signups/[leadId]/page.tsx +0 -149
- package/templates/apps/web/app/[locale]/(authed)/waitlist/__tests__/comparison.test.tsx +0 -273
- package/templates/apps/web/app/[locale]/(authed)/waitlist/__tests__/list.test.tsx +0 -171
- package/templates/apps/web/app/[locale]/(authed)/waitlist/__tests__/signup.test.tsx +0 -179
- package/templates/apps/web/app/[locale]/(authed)/waitlist/components/ExperimentsTable.tsx +0 -116
- package/templates/apps/web/app/[locale]/(authed)/waitlist/components/OfferFunnelTable.tsx +0 -66
- package/templates/apps/web/app/[locale]/(authed)/waitlist/components/RollupTicker.tsx +0 -61
- package/templates/apps/web/app/[locale]/(authed)/waitlist/components/ScoreTrace.tsx +0 -114
- package/templates/apps/web/app/[locale]/(authed)/waitlist/components/SignupsTable.tsx +0 -139
- package/templates/apps/web/app/[locale]/(authed)/waitlist/components/WaitlistComparisonTabs.tsx +0 -85
- package/templates/apps/web/app/[locale]/(authed)/waitlist/components/status-badges.tsx +0 -67
- package/templates/apps/web/app/[locale]/(authed)/waitlist/page.tsx +0 -179
- package/templates/apps/web/app/[locale]/blog/[[...slug]]/page.tsx +0 -178
- package/templates/apps/web/app/[locale]/dev/purchase/__tests__/actions.test.ts +0 -160
- package/templates/apps/web/app/[locale]/dev/purchase/error.tsx +0 -25
- package/templates/apps/web/app/[locale]/dev/purchase/page.tsx +0 -117
- package/templates/apps/web/app/[locale]/dev/purchase/purchase.actions.ts +0 -58
- package/templates/apps/web/app/[locale]/docs/[[...slug]]/page.tsx +0 -119
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/checkout.actions.test.ts +0 -287
- package/templates/apps/web/app/[locale]/flows/[slug]/checkout.actions.ts +0 -254
- package/templates/apps/web/app/[locale]/flows/[slug]/results/[payload]/ResultsClient.tsx +0 -532
- package/templates/apps/web/app/[locale]/flows/[slug]/results/[payload]/ResultsEmailStep.tsx +0 -121
- package/templates/apps/web/app/[locale]/flows/[slug]/results/[payload]/__tests__/ResultsClient.checkout.test.tsx +0 -457
- package/templates/apps/web/app/[locale]/flows/[slug]/results/[payload]/__tests__/page.test.tsx +0 -396
- package/templates/apps/web/app/[locale]/flows/[slug]/results/[payload]/page.tsx +0 -114
- package/templates/apps/web/app/[locale]/projects/apply/ListingApplicationClient.tsx +0 -110
- package/templates/apps/web/app/[locale]/projects/apply/__tests__/ListingApplicationClient.test.tsx +0 -96
- package/templates/apps/web/app/[locale]/schedule/__tests__/page.test.tsx +0 -117
- package/templates/apps/web/app/[locale]/schedule/confirmed/__tests__/page.test.tsx +0 -96
- package/templates/apps/web/app/[locale]/schedule/confirmed/page.tsx +0 -92
- package/templates/apps/web/app/[locale]/schedule/page.tsx +0 -82
- package/templates/apps/web/content/en/blog/README.txt +0 -25
- package/templates/apps/web/content/en/docs/index.mdx +0 -28
- package/templates/apps/web/lib/__mocks__/source-server.js +0 -31
- package/templates/apps/web/lib/blog-list-data.ts +0 -95
- package/templates/apps/web/lib/blog-post-data.ts +0 -79
- package/templates/apps/web/lib/source.ts +0 -34
- package/templates/apps/web/public/logomark-dark.svg +0 -4
- package/templates/apps/web/public/logomark-light.svg +0 -4
- package/templates/apps/web/source.config.ts +0 -78
|
@@ -1,26 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Module → architecture-slice registry.
|
|
3
|
-
*
|
|
4
|
-
* The single source that turns the `--modules` selection into a scaffolded
|
|
5
|
-
* site's `architecture.yaml` (its code-boundary config — the apps/packages/
|
|
6
|
-
* namespaces the linter walks + the import rules it enforces). Each recognized
|
|
7
|
-
* module maps to the architecture FRAGMENT it contributes; `deriveArchitecture`
|
|
8
|
-
* (derive-architecture.ts) composes a module-independent BASE + the selected
|
|
9
|
-
* slices into one deterministic document.
|
|
10
|
-
*
|
|
11
|
-
* Grounded in the root AILK `architecture.yaml` `composition_model`: a customer
|
|
12
|
-
* site is the three-tier AILK app (data · api · presentation) COMPOSED of the
|
|
13
|
-
* selected modules. `marketing` is the thin presentation default and is
|
|
14
|
-
* validated end-to-end; `docs` (a mountable presentation surface) and
|
|
15
|
-
* `multi-tenant` (a full-stack module) are registry-defined ahead of their
|
|
16
|
-
* template trees (per spec #3787 D3). `scheduling` (#4633) contributes all
|
|
17
|
-
* three tiers — the provider client, the /v1/schedule/* routes, and the
|
|
18
|
-
* booker + confirmation pages — into the marketing surface.
|
|
19
|
-
*
|
|
20
|
-
* Design (spec #3787 D1): a code registry, NOT N hand-maintained per-module
|
|
21
|
-
* `architecture.yaml` template files — a fixed template IS the drift this
|
|
22
|
-
* removes.
|
|
23
|
-
*/
|
|
24
1
|
import { type ModuleName } from "./parse-args.js";
|
|
25
2
|
/** A forbidden import/usage pattern the architecture linter enforces. */
|
|
26
3
|
export interface ForbiddenPattern {
|
|
@@ -127,6 +104,116 @@ export interface ModuleSlice {
|
|
|
127
104
|
* which miss eleven and over-mark three.
|
|
128
105
|
*/
|
|
129
106
|
ownedFiles?: string[];
|
|
107
|
+
/**
|
|
108
|
+
* Bundle-relative source → scaffold-relative destination (spec 5373 § D7).
|
|
109
|
+
* Every source must be a file the validated tar extraction produced in the
|
|
110
|
+
* bundle producer's staging directory — repo-relative, coinciding with the
|
|
111
|
+
* `ownedFiles`/`installMap`-source paths this module's producer step
|
|
112
|
+
* stages at, by construction. `extractModuleBundle` applies this map after
|
|
113
|
+
* the tar entries are validated: an absolute path, a `..` segment, or a
|
|
114
|
+
* path absent from staging rejects the whole bundle, as does a destination
|
|
115
|
+
* that resolves outside the scaffold. A mapped source is copied to its
|
|
116
|
+
* destination only, never also to its original path.
|
|
117
|
+
*/
|
|
118
|
+
installMap?: Record<string, string>;
|
|
119
|
+
/**
|
|
120
|
+
* Plain text `extractModuleBundle` prints to stdout after a successful
|
|
121
|
+
* merge, with C0/C1 control characters (other than newline) stripped
|
|
122
|
+
* first so a bundle cannot inject terminal escape sequences.
|
|
123
|
+
*/
|
|
124
|
+
postInstall?: string;
|
|
125
|
+
/**
|
|
126
|
+
* Declarative, all-or-nothing edits to files the buyer's scaffold already
|
|
127
|
+
* has (spec 5418 § 3 D1) — a sibling of `installMap`/`postInstall` above.
|
|
128
|
+
* `installMap`/`postInstall` can only ADD or PRINT; `patches` is the only
|
|
129
|
+
* mechanism that edits an existing scaffolded file (`package.json`,
|
|
130
|
+
* `tsconfig.json`, `next.config.mjs`, `jest.config.cjs`). Applied by
|
|
131
|
+
* `applyModulePatches` after `installMap`, before `postInstall` (D5).
|
|
132
|
+
*/
|
|
133
|
+
patches?: ModulePatch[];
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* The four target-file kinds a patch can address (spec 5418 § 3 D1).
|
|
137
|
+
* `"json"` covers both `package.json` (object-shaped fields: `dependencies`,
|
|
138
|
+
* `devDependencies`, `scripts`) and `tsconfig.json` (array-shaped:
|
|
139
|
+
* `references`) — distinguished by which op shape a `path` pairs with, not
|
|
140
|
+
* by a fourth kind. `next.config.mjs`/`jest.config.cjs` are code, not data,
|
|
141
|
+
* so each gets its own kind: a `next-config` op has no meaning against
|
|
142
|
+
* `jest.config.cjs`, and vice versa.
|
|
143
|
+
*/
|
|
144
|
+
export type ModulePatchKind = "json" | "next-config" | "jest-config";
|
|
145
|
+
/** One target file's patch set — every op in `ops` applies to `target`. */
|
|
146
|
+
export interface ModulePatch {
|
|
147
|
+
/**
|
|
148
|
+
* Scaffold-relative destination, e.g. "apps/web/package.json". Validated
|
|
149
|
+
* the same way an `installMap` destination is (D6): `resolve(targetDir,
|
|
150
|
+
* target)` must stay inside `targetDir`.
|
|
151
|
+
*/
|
|
152
|
+
target: string;
|
|
153
|
+
kind: ModulePatchKind;
|
|
154
|
+
ops: ModulePatchOp[];
|
|
155
|
+
}
|
|
156
|
+
export type ModulePatchOp = JsonMergeKeysOp | JsonAppendUniqueOp | AddTranspilePackageOp | WrapExportWithOp | AddModuleNameMapperOp | AddTransformIgnorePatternOp | AddTransformOp;
|
|
157
|
+
/** kind: "json" — object-shaped field (package.json dependencies/devDependencies/scripts). */
|
|
158
|
+
export interface JsonMergeKeysOp {
|
|
159
|
+
op: "merge-keys";
|
|
160
|
+
/** JSON-pointer segments to an OBJECT, e.g. ["dependencies"]. */
|
|
161
|
+
path: string[];
|
|
162
|
+
/** key -> value; each key is added, never overwritten (D2). */
|
|
163
|
+
entries: Record<string, string>;
|
|
164
|
+
}
|
|
165
|
+
/** kind: "json" — array-shaped field (tsconfig.json references). */
|
|
166
|
+
export interface JsonAppendUniqueOp {
|
|
167
|
+
op: "append-unique";
|
|
168
|
+
/** Segments to an ARRAY, e.g. ["references"]. */
|
|
169
|
+
path: string[];
|
|
170
|
+
/** Appended iff not already deep-equal-present (D2). */
|
|
171
|
+
items: unknown[];
|
|
172
|
+
}
|
|
173
|
+
/** kind: "next-config". */
|
|
174
|
+
export interface AddTranspilePackageOp {
|
|
175
|
+
op: "add-transpile-package";
|
|
176
|
+
/** e.g. "@working-theory/fumadocs-schema". */
|
|
177
|
+
package: string;
|
|
178
|
+
}
|
|
179
|
+
/** kind: "next-config". */
|
|
180
|
+
export interface WrapExportWithOp {
|
|
181
|
+
op: "wrap-export-with";
|
|
182
|
+
/** Exact line, e.g. 'import { createMDX } from "fumadocs-mdx/next";\n'. */
|
|
183
|
+
importLine: string;
|
|
184
|
+
/** Exact substring to wrap, e.g. "withNextIntl(nextConfig)". */
|
|
185
|
+
find: string;
|
|
186
|
+
/** e.g. "withNextIntl(createMDX()(nextConfig))". */
|
|
187
|
+
replaceWith: string;
|
|
188
|
+
}
|
|
189
|
+
/** kind: "jest-config". */
|
|
190
|
+
export interface AddModuleNameMapperOp {
|
|
191
|
+
op: "add-module-name-mapper";
|
|
192
|
+
/**
|
|
193
|
+
* The moduleNameMapper KEY, e.g. "^@/\\.source$" — the runtime value this
|
|
194
|
+
* op carries has two backslash characters, matching jest.config.cjs's own
|
|
195
|
+
* bytes (D3's escaping rule: the value is the literal text as it occurs in
|
|
196
|
+
* the target file, never re-escaped for a notation layer above it).
|
|
197
|
+
*/
|
|
198
|
+
pattern: string;
|
|
199
|
+
/** The mapped value. */
|
|
200
|
+
value: string;
|
|
201
|
+
}
|
|
202
|
+
/** kind: "jest-config". */
|
|
203
|
+
export interface AddTransformIgnorePatternOp {
|
|
204
|
+
op: "add-transform-ignore-pattern";
|
|
205
|
+
/** The CURRENT array-element string. */
|
|
206
|
+
find: string;
|
|
207
|
+
/** The WIDENED replacement. */
|
|
208
|
+
replaceWith: string;
|
|
209
|
+
}
|
|
210
|
+
/** kind: "jest-config". */
|
|
211
|
+
export interface AddTransformOp {
|
|
212
|
+
op: "add-transform";
|
|
213
|
+
/** The transform object's KEY (a regex string). */
|
|
214
|
+
pattern: string;
|
|
215
|
+
/** The mapped value, verbatim source text. */
|
|
216
|
+
value: string;
|
|
130
217
|
}
|
|
131
218
|
/**
|
|
132
219
|
* The module-independent base: `apps/web` (the Next.js presentation shell every
|
|
@@ -173,3 +260,32 @@ export declare const MODULE_SLICES: Record<ModuleName, ModuleSlice>;
|
|
|
173
260
|
* rejects unrecognized values upstream before they reach derivation).
|
|
174
261
|
*/
|
|
175
262
|
export declare function normalizeModules(modules: string[]): ModuleName[];
|
|
263
|
+
/**
|
|
264
|
+
* Template-relative paths that must never be written into `templates/` for a
|
|
265
|
+
* keyless starter: every PAID module's `ownedFiles` entry that resolves under
|
|
266
|
+
* a `build-templates` snapshot root, plus every file under those roots that
|
|
267
|
+
* imports one (transitively), which would otherwise ship dangling.
|
|
268
|
+
*
|
|
269
|
+
* This is the SINGLE starter-removal input for all four R1 extractions
|
|
270
|
+
* (#5364 commerce, #5365 docs + blog, #5366 signal-collectors, #5367 Pro Plus
|
|
271
|
+
* + scheduling). A module joins by gaining `ownedFiles` entries — never by
|
|
272
|
+
* adding a path to a list here.
|
|
273
|
+
*
|
|
274
|
+
* The input is `ownedFiles`, NOT the `oss: false` marker set. The two answer
|
|
275
|
+
* different questions: the strip's authority is their union (see the
|
|
276
|
+
* `ownedFiles` doc above), while the STARTER's authority is `ownedFiles`
|
|
277
|
+
* alone. The marker set includes the content-write trio, which D-44 keeps in
|
|
278
|
+
* public code licence-checked at runtime — deriving the starter exclusion from
|
|
279
|
+
* markers would remove a surface D-44 says must ship.
|
|
280
|
+
*
|
|
281
|
+
* Entries outside the snapshot roots — every `packages/**` path, and the paid
|
|
282
|
+
* app roots — are not snapshotted at all and are filtered here rather than
|
|
283
|
+
* special-cased at the call site. Today every glob entry is also out-of-root,
|
|
284
|
+
* so globs never reach the literal-path matcher below.
|
|
285
|
+
*
|
|
286
|
+
* @param snapshotRoots repo-relative roots `build-templates.mjs` snapshots.
|
|
287
|
+
* @param repoRoot absolute path to the monorepo root, for the import scan.
|
|
288
|
+
* Passed in rather than derived from `import.meta.url`, which ts-jest cannot
|
|
289
|
+
* load — the same reason `sync-routes.ts` documents for staying pure.
|
|
290
|
+
*/
|
|
291
|
+
export declare function paidModuleTemplateExclusions(snapshotRoots: readonly string[], repoRoot: string): string[];
|