packages/* は internal-packages パターン(TS ソースを直接 export → 消費側 Next.js の transpilePackages)。ここは各 src/index.ts の主要 export をパッケージ横断で 1 枚にした索引である。網羅性優先なので詳細は各章へ。export の真実源は常に index.ts で、この表と食い違ったら index.ts を正とする。
@event/* 15 パッケージ
| パッケージ | 役割 | 主要 export |
|---|---|---|
| @event/fours-sdk | 唯一の型付き 4S クライアント(直 fetch 禁止) | createFoursConfig foursFetch fetchEvent listSessionsFromEvent adaptSession adaptSpeaker fetch4SUser fetchOrgMembers verify4SUser createSessionCodec isResourceOwner mergeCollectionCanonical safetyGuard verifyWebhookSignature createLoginProxyHandler createCognitoRefreshHandler(ブラウザ側は subpath /client) |
| @event/schema | 正規ドメイン型(ID は全域 id) | 型 Session Speaker Room Venue FloorPlan Sponsor PassTier Visibility / 登録簿 LOCKED_SESSION_FIELDS CARD_OVERLAY_FIELDS |
| @event/core | 共有インフラの背骨 | createContentStore createSharedPasswordAuth constantTimeEqual loginJitter kv hasKv defineEnv envExample withCronAuth createNextConfig buildSecurityHeaders buildCsp |
| @event/cms | JSON-as-DB + schema 駆動 admin(UI は /ui) | genId 型 FieldSchema ResourceSchema / createResourceRegistry createContentReader applyLockedGuard createCmsActions pickPublicFields validatePayload createCmsRouteHandlers |
| @event/session-card | 1A–10A photo-first カード(barrel 再輸出) | engine: fitTitleLayout breakTitleLines visualWidth fitRole fitSpeakerName computeBalance computeGridBalance effectiveVariant buildResolved / render: SessionCard ScaledCard SessionCardDesigner(persist は subpath /persist) |
| @event/crm-schema | MCP-first 二層 DB | createManifestIndex addExtensionField STANDARD_CORE_FIELDS DEFAULT_MANIFEST CRM_TABLES user organization member entityLp auditLog db guardedUpdate guardedArchive |
| @event/feedback | サーベイ / ランキング / ライブ投票(lib のみ) | DEFAULT_FACE_SCALE createFeedbackStore rankSubjects subjectScore aggregate responsesToCsv createSubmitHandler createLiveStore hostKeyFor verifyHostKey |
| @event/shell | realm / nav / シェル(UI は /ui) | defineRealms createNavRegistry createDevLoginHandler createAuthGateMiddleware defineEventConfig composeFeatures isFeatureEnabled envExampleFor |
| @event/booking | 予約 / waitlist / 見積 + 帳票 UI(/ui) | createReservationStore createBookingActions defineBookingConfig reservationTableSql / computeQuote makeEstimateNo createNeonQuoteStore createBlobQuoteStore yen formatJst / /ui: QuoteDocument |
| @event/mailer | Resend + Slack Block Kit(server 専用) | createMailer defineTemplate renderShell ctaButton escapeHtml / invitationTemplate otpTemplate notifyTemplate / slackBlocks keyValueBlocks postToSlack |
| @event/mcp | MCP server テンプレ(stdio + HTTP 同一 tool 群) | createEventMcpServer startStdio createMcpHttpHandler EventTool text json dbToolGroup contentToolGroup foursToolGroup resolveMcpSettings DEFAULT_MCP_SETTINGS |
| @event/networking | マッチング / 名鑑 / プライバシー(lib のみ) | normalizeName matchName buildDictionary jaroWinkler / isEligibleForListing canContact sanitizeSubjectForPublic applyKAnonymity / resolveTier parseCsv rankByCount createRegistrySchema |
| @event/spatial | map / timetable / expo プリミティブ | SvgHotspotLayer("use client")/ lanePack + JST formatTime 群 / timetable model / spatial config |
| @event/visuals | ビジュアル生成フレームワーク | resolveBrand brandCssVars(brand)/ printScale aSeriesMm(formats)/ defineTemplate createTemplateRegistry(templates)/ VisualChrome(chrome) |
| @event/asset-kit | DOM→PNG/PDF/.ai + Blob store(index なし・subpath) | /server: createAssetStore createUploadHandler / /bulk: bulkZip downloadBlob / /capture: exportPng exportPdf exportAi copyPngToClipboard ExportFmt / /image: uploadImageWithVariants |
パッケージでないもの
packages/create-event-app は @event/* ではなく CLI(bin: create-event-app → bin.mjs)。ライブラリ export は持たない(npx create-event-app <name> のテンプレート生成器)。
subpath / UI の分離規約
- UI 同梱パッケージは React コンポーネントを別 subpath に切る:
@event/cms/ui@event/shell/ui。lib 本体は React 非依存を保つ - server 専用は subpath で隔離:
@event/session-card/persist、@event/asset-kit/server。edge / client バンドルに node:fs / crypto を混入させない @event/asset-kitだけは barrel(index.ts)を持たず、server/bulk/capture/imageの 4 subpath をpackage.jsonのexportsで公開する(serverless サイズ配慮で sharp / pdf-lib を使う route だけに載せるため)