From 5c8450a0a62bc6447ccc437b9681b5696ba870b2 Mon Sep 17 00:00:00 2001 From: Florian <45694132+flo-bit@users.noreply.github.com> Date: Thu, 23 Apr 2026 09:34:52 +0200 Subject: [PATCH] move templates --- docs/community-spec-mapping.md | 2 +- docs/spaces-spec-mapping.md | 2 +- .../community}/adopt.json | 0 .../community}/defs.json | 0 .../community}/delete.json | 0 .../community}/deleteRecord.json | 0 .../community}/getHealth.json | 0 .../community}/invite/create.json | 0 .../community}/invite/list.json | 0 .../community}/invite/redeem.json | 0 .../community}/invite/revoke.json | 0 .../community}/list.json | 0 .../community}/mint.json | 0 .../community}/putRecord.json | 0 .../community}/reauth.json | 0 .../community}/space/create.json | 0 .../community}/space/delete.json | 0 .../community}/space/deleteRecord.json | 0 .../community}/space/grant.json | 0 .../community}/space/listMembers.json | 0 .../community}/space/putRecord.json | 0 .../community}/space/resync.json | 0 .../community}/space/revoke.json | 0 .../community}/space/setAccessLevel.json | 0 .../community}/space/whoami.json | 0 .../realtime}/subscribe.json | 0 .../realtime}/ticket.json | 0 .../spaces}/addMember.json | 0 .../spaces}/createSpace.json | 0 .../spaces}/defs.json | 0 .../spaces}/deleteRecord.json | 0 .../spaces}/ext/invite/create.json | 0 .../spaces}/ext/invite/list.json | 0 .../spaces}/ext/invite/redeem.json | 0 .../spaces}/ext/invite/revoke.json | 0 .../spaces}/ext/whoami.json | 0 .../spaces}/getBlob.json | 0 .../spaces}/getRecord.json | 0 .../spaces}/getSpace.json | 0 .../spaces}/leaveSpace.json | 0 .../spaces}/listBlobs.json | 0 .../spaces}/listMembers.json | 0 .../spaces}/listRecords.json | 0 .../spaces}/listSpaces.json | 0 .../spaces}/putRecord.json | 0 .../spaces}/removeMember.json | 0 .../spaces}/uploadBlob.json | 0 lexicons/README.md | 6 ++- package.json | 8 +--- src/core/spaces/router.ts | 2 +- src/generate.ts | 37 ++++++------------- 51 files changed, 20 insertions(+), 37 deletions(-) rename {community-lexicon-templates => lexicon-templates/community}/adopt.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/defs.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/delete.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/deleteRecord.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/getHealth.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/invite/create.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/invite/list.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/invite/redeem.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/invite/revoke.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/list.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/mint.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/putRecord.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/reauth.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/space/create.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/space/delete.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/space/deleteRecord.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/space/grant.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/space/listMembers.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/space/putRecord.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/space/resync.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/space/revoke.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/space/setAccessLevel.json (100%) rename {community-lexicon-templates => lexicon-templates/community}/space/whoami.json (100%) rename {realtime-lexicon-templates => lexicon-templates/realtime}/subscribe.json (100%) rename {realtime-lexicon-templates => lexicon-templates/realtime}/ticket.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/addMember.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/createSpace.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/defs.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/deleteRecord.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/ext/invite/create.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/ext/invite/list.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/ext/invite/redeem.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/ext/invite/revoke.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/ext/whoami.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/getBlob.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/getRecord.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/getSpace.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/leaveSpace.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/listBlobs.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/listMembers.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/listRecords.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/listSpaces.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/putRecord.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/removeMember.json (100%) rename {spaces-lexicon-templates => lexicon-templates/spaces}/uploadBlob.json (100%) diff --git a/docs/community-spec-mapping.md b/docs/community-spec-mapping.md index 290ee62..902528b 100644 --- a/docs/community-spec-mapping.md +++ b/docs/community-spec-mapping.md @@ -48,7 +48,7 @@ Legend: ✅ aligned · ⚠️ partial / different granularity · ❌ missing · ## XRPC surface All endpoints emitted under `.community.*` from templates -in `community-lexicon-templates/`. Distinct from `.space.*` so the +in `lexicon-templates/community/`. Distinct from `.space.*` so the user-managed spaces surface stays clean. Community-managed spaces live under `.community.space.*` so the endpoint name reveals whether membership is user-controlled or community-controlled. diff --git a/docs/spaces-spec-mapping.md b/docs/spaces-spec-mapping.md index 3368191..e06eb2f 100644 --- a/docs/spaces-spec-mapping.md +++ b/docs/spaces-spec-mapping.md @@ -36,7 +36,7 @@ flow is shipped (same story we already have for public records via jetstream). ## Endpoints All endpoints are emitted under `.space.*` from templates in -`spaces-lexicon-templates/`. +`lexicon-templates/spaces/`. ### Read - `space.listSpaces` — caller's spaces (scope=member|owner) diff --git a/community-lexicon-templates/adopt.json b/lexicon-templates/community/adopt.json similarity index 100% rename from community-lexicon-templates/adopt.json rename to lexicon-templates/community/adopt.json diff --git a/community-lexicon-templates/defs.json b/lexicon-templates/community/defs.json similarity index 100% rename from community-lexicon-templates/defs.json rename to lexicon-templates/community/defs.json diff --git a/community-lexicon-templates/delete.json b/lexicon-templates/community/delete.json similarity index 100% rename from community-lexicon-templates/delete.json rename to lexicon-templates/community/delete.json diff --git a/community-lexicon-templates/deleteRecord.json b/lexicon-templates/community/deleteRecord.json similarity index 100% rename from community-lexicon-templates/deleteRecord.json rename to lexicon-templates/community/deleteRecord.json diff --git a/community-lexicon-templates/getHealth.json b/lexicon-templates/community/getHealth.json similarity index 100% rename from community-lexicon-templates/getHealth.json rename to lexicon-templates/community/getHealth.json diff --git a/community-lexicon-templates/invite/create.json b/lexicon-templates/community/invite/create.json similarity index 100% rename from community-lexicon-templates/invite/create.json rename to lexicon-templates/community/invite/create.json diff --git a/community-lexicon-templates/invite/list.json b/lexicon-templates/community/invite/list.json similarity index 100% rename from community-lexicon-templates/invite/list.json rename to lexicon-templates/community/invite/list.json diff --git a/community-lexicon-templates/invite/redeem.json b/lexicon-templates/community/invite/redeem.json similarity index 100% rename from community-lexicon-templates/invite/redeem.json rename to lexicon-templates/community/invite/redeem.json diff --git a/community-lexicon-templates/invite/revoke.json b/lexicon-templates/community/invite/revoke.json similarity index 100% rename from community-lexicon-templates/invite/revoke.json rename to lexicon-templates/community/invite/revoke.json diff --git a/community-lexicon-templates/list.json b/lexicon-templates/community/list.json similarity index 100% rename from community-lexicon-templates/list.json rename to lexicon-templates/community/list.json diff --git a/community-lexicon-templates/mint.json b/lexicon-templates/community/mint.json similarity index 100% rename from community-lexicon-templates/mint.json rename to lexicon-templates/community/mint.json diff --git a/community-lexicon-templates/putRecord.json b/lexicon-templates/community/putRecord.json similarity index 100% rename from community-lexicon-templates/putRecord.json rename to lexicon-templates/community/putRecord.json diff --git a/community-lexicon-templates/reauth.json b/lexicon-templates/community/reauth.json similarity index 100% rename from community-lexicon-templates/reauth.json rename to lexicon-templates/community/reauth.json diff --git a/community-lexicon-templates/space/create.json b/lexicon-templates/community/space/create.json similarity index 100% rename from community-lexicon-templates/space/create.json rename to lexicon-templates/community/space/create.json diff --git a/community-lexicon-templates/space/delete.json b/lexicon-templates/community/space/delete.json similarity index 100% rename from community-lexicon-templates/space/delete.json rename to lexicon-templates/community/space/delete.json diff --git a/community-lexicon-templates/space/deleteRecord.json b/lexicon-templates/community/space/deleteRecord.json similarity index 100% rename from community-lexicon-templates/space/deleteRecord.json rename to lexicon-templates/community/space/deleteRecord.json diff --git a/community-lexicon-templates/space/grant.json b/lexicon-templates/community/space/grant.json similarity index 100% rename from community-lexicon-templates/space/grant.json rename to lexicon-templates/community/space/grant.json diff --git a/community-lexicon-templates/space/listMembers.json b/lexicon-templates/community/space/listMembers.json similarity index 100% rename from community-lexicon-templates/space/listMembers.json rename to lexicon-templates/community/space/listMembers.json diff --git a/community-lexicon-templates/space/putRecord.json b/lexicon-templates/community/space/putRecord.json similarity index 100% rename from community-lexicon-templates/space/putRecord.json rename to lexicon-templates/community/space/putRecord.json diff --git a/community-lexicon-templates/space/resync.json b/lexicon-templates/community/space/resync.json similarity index 100% rename from community-lexicon-templates/space/resync.json rename to lexicon-templates/community/space/resync.json diff --git a/community-lexicon-templates/space/revoke.json b/lexicon-templates/community/space/revoke.json similarity index 100% rename from community-lexicon-templates/space/revoke.json rename to lexicon-templates/community/space/revoke.json diff --git a/community-lexicon-templates/space/setAccessLevel.json b/lexicon-templates/community/space/setAccessLevel.json similarity index 100% rename from community-lexicon-templates/space/setAccessLevel.json rename to lexicon-templates/community/space/setAccessLevel.json diff --git a/community-lexicon-templates/space/whoami.json b/lexicon-templates/community/space/whoami.json similarity index 100% rename from community-lexicon-templates/space/whoami.json rename to lexicon-templates/community/space/whoami.json diff --git a/realtime-lexicon-templates/subscribe.json b/lexicon-templates/realtime/subscribe.json similarity index 100% rename from realtime-lexicon-templates/subscribe.json rename to lexicon-templates/realtime/subscribe.json diff --git a/realtime-lexicon-templates/ticket.json b/lexicon-templates/realtime/ticket.json similarity index 100% rename from realtime-lexicon-templates/ticket.json rename to lexicon-templates/realtime/ticket.json diff --git a/spaces-lexicon-templates/addMember.json b/lexicon-templates/spaces/addMember.json similarity index 100% rename from spaces-lexicon-templates/addMember.json rename to lexicon-templates/spaces/addMember.json diff --git a/spaces-lexicon-templates/createSpace.json b/lexicon-templates/spaces/createSpace.json similarity index 100% rename from spaces-lexicon-templates/createSpace.json rename to lexicon-templates/spaces/createSpace.json diff --git a/spaces-lexicon-templates/defs.json b/lexicon-templates/spaces/defs.json similarity index 100% rename from spaces-lexicon-templates/defs.json rename to lexicon-templates/spaces/defs.json diff --git a/spaces-lexicon-templates/deleteRecord.json b/lexicon-templates/spaces/deleteRecord.json similarity index 100% rename from spaces-lexicon-templates/deleteRecord.json rename to lexicon-templates/spaces/deleteRecord.json diff --git a/spaces-lexicon-templates/ext/invite/create.json b/lexicon-templates/spaces/ext/invite/create.json similarity index 100% rename from spaces-lexicon-templates/ext/invite/create.json rename to lexicon-templates/spaces/ext/invite/create.json diff --git a/spaces-lexicon-templates/ext/invite/list.json b/lexicon-templates/spaces/ext/invite/list.json similarity index 100% rename from spaces-lexicon-templates/ext/invite/list.json rename to lexicon-templates/spaces/ext/invite/list.json diff --git a/spaces-lexicon-templates/ext/invite/redeem.json b/lexicon-templates/spaces/ext/invite/redeem.json similarity index 100% rename from spaces-lexicon-templates/ext/invite/redeem.json rename to lexicon-templates/spaces/ext/invite/redeem.json diff --git a/spaces-lexicon-templates/ext/invite/revoke.json b/lexicon-templates/spaces/ext/invite/revoke.json similarity index 100% rename from spaces-lexicon-templates/ext/invite/revoke.json rename to lexicon-templates/spaces/ext/invite/revoke.json diff --git a/spaces-lexicon-templates/ext/whoami.json b/lexicon-templates/spaces/ext/whoami.json similarity index 100% rename from spaces-lexicon-templates/ext/whoami.json rename to lexicon-templates/spaces/ext/whoami.json diff --git a/spaces-lexicon-templates/getBlob.json b/lexicon-templates/spaces/getBlob.json similarity index 100% rename from spaces-lexicon-templates/getBlob.json rename to lexicon-templates/spaces/getBlob.json diff --git a/spaces-lexicon-templates/getRecord.json b/lexicon-templates/spaces/getRecord.json similarity index 100% rename from spaces-lexicon-templates/getRecord.json rename to lexicon-templates/spaces/getRecord.json diff --git a/spaces-lexicon-templates/getSpace.json b/lexicon-templates/spaces/getSpace.json similarity index 100% rename from spaces-lexicon-templates/getSpace.json rename to lexicon-templates/spaces/getSpace.json diff --git a/spaces-lexicon-templates/leaveSpace.json b/lexicon-templates/spaces/leaveSpace.json similarity index 100% rename from spaces-lexicon-templates/leaveSpace.json rename to lexicon-templates/spaces/leaveSpace.json diff --git a/spaces-lexicon-templates/listBlobs.json b/lexicon-templates/spaces/listBlobs.json similarity index 100% rename from spaces-lexicon-templates/listBlobs.json rename to lexicon-templates/spaces/listBlobs.json diff --git a/spaces-lexicon-templates/listMembers.json b/lexicon-templates/spaces/listMembers.json similarity index 100% rename from spaces-lexicon-templates/listMembers.json rename to lexicon-templates/spaces/listMembers.json diff --git a/spaces-lexicon-templates/listRecords.json b/lexicon-templates/spaces/listRecords.json similarity index 100% rename from spaces-lexicon-templates/listRecords.json rename to lexicon-templates/spaces/listRecords.json diff --git a/spaces-lexicon-templates/listSpaces.json b/lexicon-templates/spaces/listSpaces.json similarity index 100% rename from spaces-lexicon-templates/listSpaces.json rename to lexicon-templates/spaces/listSpaces.json diff --git a/spaces-lexicon-templates/putRecord.json b/lexicon-templates/spaces/putRecord.json similarity index 100% rename from spaces-lexicon-templates/putRecord.json rename to lexicon-templates/spaces/putRecord.json diff --git a/spaces-lexicon-templates/removeMember.json b/lexicon-templates/spaces/removeMember.json similarity index 100% rename from spaces-lexicon-templates/removeMember.json rename to lexicon-templates/spaces/removeMember.json diff --git a/spaces-lexicon-templates/uploadBlob.json b/lexicon-templates/spaces/uploadBlob.json similarity index 100% rename from spaces-lexicon-templates/uploadBlob.json rename to lexicon-templates/spaces/uploadBlob.json diff --git a/lexicons/README.md b/lexicons/README.md index 45e1224..8534000 100644 --- a/lexicons/README.md +++ b/lexicons/README.md @@ -9,8 +9,10 @@ Place your own hand-authored lexicon JSON files here. Generated from the `pull.sources` list in `lex.config.js`. - **`lexicons-generated/`** — Auto-generated by `pnpm generate` from `app/config.ts`. Don't edit by hand. -- **`spaces-lexicon-templates/`** — Shipped library templates for permissioned spaces; - the generator instantiates them under `.space.*` into `lexicons-generated/`. +- **`lexicon-templates/{spaces,community,realtime}/`** — Shipped library templates; + the generator instantiates them under `.{space,community,realtime}.*` into + `lexicons-generated/`. `spaces/ext/` also emits `.spaceExt.*` (contrail + extras — invites, whoami — outside the permissioned-data spec). All three (`lexicons/`, `lexicons-pulled/`, `lexicons-generated/`) are picked up by `lex-cli generate` (see `lex.config.js` `files` glob). diff --git a/package.json b/package.json index 0b5edd9..9a5d155 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,7 @@ "sideEffects": false, "files": [ "dist", - "spaces-lexicon-templates/**/*.json", - "community-lexicon-templates/**/*.json", - "realtime-lexicon-templates/**/*.json" + "lexicon-templates/**/*.json" ], "exports": { ".": { @@ -39,9 +37,7 @@ "types": "./dist/sync/index.d.ts", "import": "./dist/sync/index.js" }, - "./spaces-lexicon-templates/*.json": "./spaces-lexicon-templates/*.json", - "./community-lexicon-templates/*.json": "./community-lexicon-templates/*.json", - "./realtime-lexicon-templates/*.json": "./realtime-lexicon-templates/*.json" + "./lexicon-templates/*.json": "./lexicon-templates/*.json" }, "repository": { "type": "git", diff --git a/src/core/spaces/router.ts b/src/core/spaces/router.ts index 4fef67a..a14c880 100644 --- a/src/core/spaces/router.ts +++ b/src/core/spaces/router.ts @@ -87,7 +87,7 @@ export function registerSpacesRoutes( /** Space endpoints are emitted per-deployment under the configured namespace; * the deployment owns and publishes its own lexicons. The library ships - * templates at `spaces-lexicon-templates/*` that the generator instantiates + * templates at `lexicon-templates/spaces/*` that the generator instantiates * under `.space.*` (spec-aligned) and `.spaceExt.*` (contrail * extras — invites, whoami — that the permissioned-data spec doesn't cover). */ const SPACE = `${config.namespace}.space`; diff --git a/src/generate.ts b/src/generate.ts index 2b43b2f..63e55d1 100644 --- a/src/generate.ts +++ b/src/generate.ts @@ -59,12 +59,15 @@ function fieldToParam(field: string): string { return field.replace(/\.(\w)/g, (_, c) => c.toUpperCase()); } -/** Locate the shipped space-template directory. Works in contrail's own repo - * and in downstream projects that depend on @atmo-dev/contrail. */ -function findSpaceTemplatesDir(rootDir: string): string | null { +/** Locate a shipped lexicon-template subdir (`spaces`/`community`/`realtime`). + * Works in contrail's own repo and in downstream projects that depend on + * @atmo-dev/contrail. All three module templates live under one + * `lexicon-templates/` parent; each subdir is instantiated by the generator + * into its own `.*` namespace. */ +function findTemplatesDir(rootDir: string, module: "spaces" | "community" | "realtime"): string | null { const candidates = [ - join(rootDir, "spaces-lexicon-templates"), - join(rootDir, "node_modules/@atmo-dev/contrail/spaces-lexicon-templates"), + join(rootDir, "lexicon-templates", module), + join(rootDir, "node_modules/@atmo-dev/contrail/lexicon-templates", module), ]; for (const p of candidates) { if (existsSync(p)) return p; @@ -72,27 +75,9 @@ function findSpaceTemplatesDir(rootDir: string): string | null { return null; } -function findCommunityTemplatesDir(rootDir: string): string | null { - const candidates = [ - join(rootDir, "community-lexicon-templates"), - join(rootDir, "node_modules/@atmo-dev/contrail/community-lexicon-templates"), - ]; - for (const p of candidates) { - if (existsSync(p)) return p; - } - return null; -} - -function findRealtimeTemplatesDir(rootDir: string): string | null { - const candidates = [ - join(rootDir, "realtime-lexicon-templates"), - join(rootDir, "node_modules/@atmo-dev/contrail/realtime-lexicon-templates"), - ]; - for (const p of candidates) { - if (existsSync(p)) return p; - } - return null; -} +const findSpaceTemplatesDir = (rootDir: string) => findTemplatesDir(rootDir, "spaces"); +const findCommunityTemplatesDir = (rootDir: string) => findTemplatesDir(rootDir, "community"); +const findRealtimeTemplatesDir = (rootDir: string) => findTemplatesDir(rootDir, "realtime"); /** Yield all JSON files under a directory (recursive). */ function* walkJson(dir: string): Generator { -- 2.51.2