sa2kit 2.0.2 → 2.0.3
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/README.md +1 -1
- package/dist/calendar/routes/index.d.mts +118 -0
- package/dist/calendar/routes/index.d.ts +118 -0
- package/dist/calendar/routes/index.js +755 -0
- package/dist/calendar/routes/index.js.map +1 -0
- package/dist/calendar/routes/index.mjs +747 -0
- package/dist/calendar/routes/index.mjs.map +1 -0
- package/dist/festivalCard/index.d.mts +3 -2
- package/dist/festivalCard/index.d.ts +3 -2
- package/dist/festivalCard/routes/index.d.mts +42 -0
- package/dist/festivalCard/routes/index.d.ts +42 -0
- package/dist/festivalCard/routes/index.js +361 -0
- package/dist/festivalCard/routes/index.js.map +1 -0
- package/dist/festivalCard/routes/index.mjs +356 -0
- package/dist/festivalCard/routes/index.mjs.map +1 -0
- package/dist/festivalCard/server/index.d.mts +2 -2
- package/dist/festivalCard/server/index.d.ts +2 -2
- package/dist/festivalCardService-BFCRhJrq.d.ts +13 -0
- package/dist/festivalCardService-GriR2VMc.d.mts +13 -0
- package/dist/index.d.mts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/{festivalCardService-CZomuQ4E.d.mts → types-tQfupO6d.d.mts} +1 -11
- package/dist/{festivalCardService-CZomuQ4E.d.ts → types-tQfupO6d.d.ts} +1 -11
- package/package.json +11 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/festivalCard/server/db.ts","../../../src/festivalCard/core/defaults.ts","../../../src/festivalCard/core/normalize.ts","../../../src/festivalCard/server/schema/festivalCards.ts","../../../src/festivalCard/server/services/festivalCardDbService.ts","../../../src/festivalCard/server/services/drizzleDbAdapter.ts","../../../src/festivalCard/services/festivalCardService.ts","../../../src/festivalCard/routes/index.ts"],"names":["pgTable","text","jsonb","timestamp","desc","eq","NextResponse"],"mappings":"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","file":"index.js","sourcesContent":["import type { FestivalCardDbAdapter } from '../types';\n\nlet dbAdapter: FestivalCardDbAdapter | null = null;\n\nexport const initializeFestivalCardDb = (adapter: FestivalCardDbAdapter): void => {\n dbAdapter = adapter;\n};\n\nexport const getFestivalCardDb = (): FestivalCardDbAdapter | null => dbAdapter;\n","import type { FestivalCardConfig } from '../types';\n\nexport const DEFAULT_FESTIVAL_CARD_CONFIG: FestivalCardConfig = {\n id: 'default-festival-card',\n name: 'Holiday Card',\n theme: 'winter',\n coverTitle: 'Happy Holidays',\n coverSubtitle: 'Warm wishes for you',\n background: {\n colorA: '#0c1a34',\n colorB: '#1f4f8a',\n },\n backgroundMusic: {\n src: '',\n loop: true,\n autoPlay: false,\n volume: 0.5,\n },\n pages: [\n {\n id: 'page-1',\n title: '封面',\n background: { color: '#11284d' },\n elements: [\n {\n id: 'p1-text-1',\n type: 'text',\n x: 50,\n y: 20,\n content: '新年快乐',\n fontSize: 34,\n fontWeight: 700,\n align: 'center',\n color: '#f8fafc',\n },\n {\n id: 'p1-text-2',\n type: 'text',\n x: 50,\n y: 36,\n content: '愿这一年平安喜乐',\n fontSize: 18,\n fontWeight: 500,\n align: 'center',\n color: '#dbeafe',\n },\n {\n id: 'p1-image-1',\n type: 'image',\n x: 50,\n y: 68,\n width: 72,\n height: 42,\n src: 'https://images.unsplash.com/photo-1512389142860-9c449e58a543?auto=format&fit=crop&w=1200&q=80',\n fit: 'cover',\n borderRadius: 16,\n alt: 'holiday',\n isBackground: false,\n },\n ],\n },\n {\n id: 'page-2',\n title: '祝福',\n background: { color: '#1a3766' },\n elements: [\n {\n id: 'p2-text-1',\n type: 'text',\n x: 50,\n y: 28,\n content: '愿你新岁:',\n fontSize: 28,\n fontWeight: 700,\n align: 'center',\n color: '#fef3c7',\n },\n {\n id: 'p2-text-2',\n type: 'text',\n x: 50,\n y: 42,\n content: '所得皆所期,所失亦无碍',\n fontSize: 18,\n fontWeight: 500,\n align: 'center',\n color: '#f8fafc',\n },\n {\n id: 'p2-text-3',\n type: 'text',\n x: 50,\n y: 55,\n content: '愿你的每一步都走向光亮',\n fontSize: 16,\n fontWeight: 400,\n align: 'center',\n color: '#dbeafe',\n },\n ],\n },\n {\n id: 'page-3',\n title: '落款',\n background: { color: '#11284d' },\n elements: [\n {\n id: 'p3-image-1',\n type: 'image',\n x: 50,\n y: 34,\n width: 60,\n height: 42,\n src: 'https://images.unsplash.com/photo-1456324504439-367cee3b3c32?auto=format&fit=crop&w=1200&q=80',\n fit: 'cover',\n borderRadius: 14,\n alt: 'gift',\n isBackground: false,\n },\n {\n id: 'p3-text-1',\n type: 'text',\n x: 50,\n y: 72,\n content: 'Best wishes, from SA2Kit',\n fontSize: 18,\n fontWeight: 600,\n align: 'center',\n color: '#f8fafc',\n },\n ],\n },\n ],\n};\n","import { DEFAULT_FESTIVAL_CARD_CONFIG } from './defaults';\nimport type { FestivalCardConfig, FestivalCardPage } from '../types';\n\nconst ensurePage = (page: FestivalCardPage, index: number): FestivalCardPage => ({\n id: page.id || `page-${index + 1}`,\n title: page.title || `第 ${index + 1} 页`,\n elements: Array.isArray(page.elements) ? page.elements : [],\n background: page.background || {},\n});\n\nexport const normalizeFestivalCardConfig = (\n config?: Partial<FestivalCardConfig> | null\n): FestivalCardConfig => {\n const pages = config?.pages && config.pages.length > 0 ? config.pages : DEFAULT_FESTIVAL_CARD_CONFIG.pages;\n\n return {\n ...DEFAULT_FESTIVAL_CARD_CONFIG,\n ...config,\n background: {\n ...DEFAULT_FESTIVAL_CARD_CONFIG.background,\n ...(config?.background || {}),\n },\n backgroundMusic: {\n ...DEFAULT_FESTIVAL_CARD_CONFIG.backgroundMusic,\n ...(config?.backgroundMusic || {}),\n src: config?.backgroundMusic?.src ?? DEFAULT_FESTIVAL_CARD_CONFIG.backgroundMusic?.src ?? '',\n },\n pages: pages.map(ensurePage),\n };\n};\n\nexport const resizeFestivalCardPages = (config: FestivalCardConfig, pageCount: number): FestivalCardConfig => {\n const safeCount = Math.max(1, Math.min(12, Math.floor(pageCount || 1)));\n const nextPages = [...config.pages];\n\n while (nextPages.length < safeCount) {\n const idx = nextPages.length;\n nextPages.push({\n id: `page-${idx + 1}`,\n title: `第 ${idx + 1} 页`,\n elements: [],\n background: {},\n });\n }\n\n return {\n ...config,\n pages: nextPages.slice(0, safeCount),\n };\n};\n","import { pgTable, text, timestamp, jsonb } from 'drizzle-orm/pg-core';\nimport type { FestivalCardConfig } from '../../types';\n\nexport const festivalCardConfigs = pgTable('festival_card_configs', {\n id: text('id').primaryKey(),\n name: text('name'),\n config: jsonb('config').$type<FestivalCardConfig>().notNull(),\n createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),\n updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),\n});\n\n","import { desc, eq } from 'drizzle-orm';\nimport { normalizeFestivalCardConfig } from '../../core';\nimport type { FestivalCardConfig, FestivalCardConfigSummary } from '../../types';\nimport { festivalCardConfigs } from '../schema/festivalCards';\n\nexport type DrizzleLikeDb = {\n select: (...args: any[]) => any;\n insert: (...args: any[]) => any;\n update: (...args: any[]) => any;\n delete: (...args: any[]) => any;\n};\n\nconst toStoredConfig = (id: string, config: FestivalCardConfig): FestivalCardConfig => ({\n ...config,\n id,\n});\n\nexport class FestivalCardDbService {\n constructor(private readonly db: DrizzleLikeDb) {}\n\n async listConfigs(): Promise<FestivalCardConfigSummary[]> {\n const rows = await this.db\n .select({\n id: festivalCardConfigs.id,\n name: festivalCardConfigs.name,\n })\n .from(festivalCardConfigs)\n .orderBy(desc(festivalCardConfigs.updatedAt));\n return rows;\n }\n\n async getConfig(id: string): Promise<FestivalCardConfig | null> {\n const rows = await this.db\n .select()\n .from(festivalCardConfigs)\n .where(eq(festivalCardConfigs.id, id))\n .limit(1);\n const row = rows[0];\n if (!row) return null;\n const raw = row.config as FestivalCardConfig;\n return normalizeFestivalCardConfig({\n ...raw,\n id: row.id,\n name: row.name || raw.name,\n });\n }\n\n async saveConfig(id: string, config: FestivalCardConfig): Promise<void> {\n const normalized = normalizeFestivalCardConfig(toStoredConfig(id, config));\n const existing = await this.db\n .select({ id: festivalCardConfigs.id })\n .from(festivalCardConfigs)\n .where(eq(festivalCardConfigs.id, id))\n .limit(1);\n\n if (existing[0]) {\n await this.db\n .update(festivalCardConfigs)\n .set({\n name: normalized.name || id,\n config: normalized,\n updatedAt: new Date(),\n })\n .where(eq(festivalCardConfigs.id, id));\n return;\n }\n\n await this.db.insert(festivalCardConfigs).values({\n id,\n name: normalized.name || id,\n config: normalized,\n });\n }\n\n async deleteConfig(id: string): Promise<void> {\n await this.db.delete(festivalCardConfigs).where(eq(festivalCardConfigs.id, id));\n }\n}\n","import type { FestivalCardConfig, FestivalCardDbAdapter } from '../../types';\nimport { FestivalCardDbService } from './festivalCardDbService';\nimport type { DrizzleLikeDb } from './festivalCardDbService';\n\nexport type { DrizzleLikeDb } from './festivalCardDbService';\n\nexport const createFestivalCardDrizzleDbAdapter = (db: DrizzleLikeDb): FestivalCardDbAdapter => {\n const service = new FestivalCardDbService(db);\n\n return {\n listConfigs: () => service.listConfigs(),\n getConfig: (id: string) => service.getConfig(id),\n saveConfig: (id: string, config: FestivalCardConfig) => service.saveConfig(id, config),\n deleteConfig: (id: string) => service.deleteConfig(id),\n };\n};\n","import { DEFAULT_FESTIVAL_CARD_CONFIG, normalizeFestivalCardConfig } from '../core';\nimport { getFestivalCardDb } from '../server/db';\nimport type {\n FestivalCardConfig,\n FestivalCardConfigSummary,\n FestivalCardDbAdapter,\n FestivalCardServiceOptions,\n} from '../types';\n\nexport class FestivalCardService {\n private db: FestivalCardDbAdapter | null;\n\n constructor(options?: FestivalCardServiceOptions) {\n this.db = options?.db || getFestivalCardDb();\n }\n\n async listConfigs(): Promise<FestivalCardConfigSummary[]> {\n if (!this.db) {\n return [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card', name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];\n }\n\n if (this.db.listConfigs) {\n const list = await this.db.listConfigs();\n return list.length > 0\n ? list\n : [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card', name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];\n }\n\n return [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card', name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];\n }\n\n async getConfig(cardId = 'default-festival-card'): Promise<FestivalCardConfig> {\n if (!this.db) return DEFAULT_FESTIVAL_CARD_CONFIG;\n const config = await this.db.getConfig(cardId);\n return normalizeFestivalCardConfig(config);\n }\n\n async saveConfig(cardId: string, config: FestivalCardConfig): Promise<FestivalCardConfig> {\n const normalized = normalizeFestivalCardConfig(config);\n if (!this.db) return normalized;\n await this.db.saveConfig(cardId, normalized);\n return normalized;\n }\n\n async deleteConfig(cardId: string): Promise<void> {\n if (!this.db?.deleteConfig) return;\n await this.db.deleteConfig(cardId);\n }\n}\n\nconst memoryStore = new Map<string, FestivalCardConfig>();\nconst defaultId = DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card';\nif (!memoryStore.has(defaultId)) {\n memoryStore.set(defaultId, DEFAULT_FESTIVAL_CARD_CONFIG);\n}\n\nexport const createInMemoryFestivalCardDb = (): FestivalCardDbAdapter => ({\n listConfigs() {\n return Promise.resolve(\n Array.from(memoryStore.entries()).map(([id, config]) => ({\n id,\n name: config.name || id,\n }))\n );\n },\n getConfig(id: string) {\n return Promise.resolve(memoryStore.get(id) || null);\n },\n saveConfig(id: string, config: FestivalCardConfig) {\n memoryStore.set(id, config);\n return Promise.resolve();\n },\n deleteConfig(id: string) {\n memoryStore.delete(id);\n return Promise.resolve();\n },\n});\n","import { NextResponse } from 'next/server';\nimport { initializeFestivalCardDb } from '../server/db';\nimport { createFestivalCardDrizzleDbAdapter } from '../server/services/drizzleDbAdapter';\nimport { FestivalCardService } from '../services';\nimport { normalizeFestivalCardConfig } from '../core';\nimport type { FestivalCardConfig, FestivalCardDbAdapter } from '../types';\nimport type { DrizzleLikeDb } from '../server/services/drizzleDbAdapter';\nimport type { NextRequest } from 'next/server';\n\nexport interface FestivalCardRouteConfig {\n db?: unknown;\n dbAdapter?: FestivalCardDbAdapter;\n}\n\ntype RouteContext =\n | { params: { id: string } }\n | { params: Promise<{ id: string }> };\n\nconst createService = (config: FestivalCardRouteConfig) => {\n const adapter = resolveDbAdapter(config);\n if (adapter) initializeFestivalCardDb(adapter);\n return new FestivalCardService({ db: adapter || undefined });\n};\n\nconst resolveCardId = async (context: RouteContext): Promise<string> => {\n const params = await context.params;\n return params.id;\n};\n\nconst isFestivalCardAdapter = (value: unknown): value is FestivalCardDbAdapter => {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as Record<string, unknown>;\n return typeof candidate.getConfig === 'function' && typeof candidate.saveConfig === 'function';\n};\n\nconst isDrizzleDb = (value: unknown): value is DrizzleLikeDb => {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as Record<string, unknown>;\n return (\n typeof candidate.select === 'function' &&\n typeof candidate.insert === 'function' &&\n typeof candidate.update === 'function' &&\n typeof candidate.delete === 'function'\n );\n};\n\nconst resolveDbAdapter = (config: FestivalCardRouteConfig): FestivalCardDbAdapter | undefined => {\n if (config.dbAdapter) return config.dbAdapter;\n if (isFestivalCardAdapter(config.db)) return config.db;\n if (isDrizzleDb(config.db)) return createFestivalCardDrizzleDbAdapter(config.db);\n return undefined;\n};\n\nexport const createListFestivalCardsHandler = (config: FestivalCardRouteConfig = {}) => {\n const service = createService(config);\n return async (_request: NextRequest) => {\n try {\n const data = await service.listConfigs();\n return NextResponse.json({ success: true, data });\n } catch (error) {\n return NextResponse.json({ success: false, error: (error as Error).message }, { status: 500 });\n }\n };\n};\n\nexport const createGetFestivalCardHandler = (config: FestivalCardRouteConfig = {}) => {\n const service = createService(config);\n return async (_request: NextRequest, context: RouteContext) => {\n try {\n const cardId = await resolveCardId(context);\n const card = await service.getConfig(cardId);\n return NextResponse.json({ success: true, data: card });\n } catch (error) {\n return NextResponse.json({ success: false, error: (error as Error).message }, { status: 500 });\n }\n };\n};\n\nexport const createUpsertFestivalCardHandler = (config: FestivalCardRouteConfig = {}) => {\n const service = createService(config);\n return async (request: NextRequest, context: RouteContext) => {\n try {\n const cardId = await resolveCardId(context);\n const body: unknown = await request.json();\n const payload =\n body && typeof body === 'object' && 'config' in body\n ? (body as { config?: unknown }).config\n : undefined;\n const normalized = normalizeFestivalCardConfig((payload || {}) as Partial<FestivalCardConfig>);\n const data = await service.saveConfig(cardId, normalized);\n return NextResponse.json({ success: true, data });\n } catch (error) {\n return NextResponse.json({ success: false, error: (error as Error).message }, { status: 500 });\n }\n };\n};\n\nexport const createDeleteFestivalCardHandler = (config: FestivalCardRouteConfig = {}) => {\n const service = createService(config);\n return async (_request: NextRequest, context: RouteContext) => {\n try {\n const cardId = await resolveCardId(context);\n await service.deleteConfig(cardId);\n return NextResponse.json({ success: true });\n } catch (error) {\n return NextResponse.json({ success: false, error: (error as Error).message }, { status: 500 });\n }\n };\n};\n"]}
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
import { NextResponse } from 'next/server';
|
|
2
|
+
import { desc, eq } from 'drizzle-orm';
|
|
3
|
+
import { pgTable, timestamp, jsonb, text } from 'drizzle-orm/pg-core';
|
|
4
|
+
|
|
5
|
+
// src/festivalCard/routes/index.ts
|
|
6
|
+
|
|
7
|
+
// src/festivalCard/server/db.ts
|
|
8
|
+
var dbAdapter = null;
|
|
9
|
+
var initializeFestivalCardDb = (adapter) => {
|
|
10
|
+
dbAdapter = adapter;
|
|
11
|
+
};
|
|
12
|
+
var getFestivalCardDb = () => dbAdapter;
|
|
13
|
+
|
|
14
|
+
// src/festivalCard/core/defaults.ts
|
|
15
|
+
var DEFAULT_FESTIVAL_CARD_CONFIG = {
|
|
16
|
+
id: "default-festival-card",
|
|
17
|
+
name: "Holiday Card",
|
|
18
|
+
theme: "winter",
|
|
19
|
+
coverTitle: "Happy Holidays",
|
|
20
|
+
coverSubtitle: "Warm wishes for you",
|
|
21
|
+
background: {
|
|
22
|
+
colorA: "#0c1a34",
|
|
23
|
+
colorB: "#1f4f8a"
|
|
24
|
+
},
|
|
25
|
+
backgroundMusic: {
|
|
26
|
+
src: "",
|
|
27
|
+
loop: true,
|
|
28
|
+
autoPlay: false,
|
|
29
|
+
volume: 0.5
|
|
30
|
+
},
|
|
31
|
+
pages: [
|
|
32
|
+
{
|
|
33
|
+
id: "page-1",
|
|
34
|
+
title: "\u5C01\u9762",
|
|
35
|
+
background: { color: "#11284d" },
|
|
36
|
+
elements: [
|
|
37
|
+
{
|
|
38
|
+
id: "p1-text-1",
|
|
39
|
+
type: "text",
|
|
40
|
+
x: 50,
|
|
41
|
+
y: 20,
|
|
42
|
+
content: "\u65B0\u5E74\u5FEB\u4E50",
|
|
43
|
+
fontSize: 34,
|
|
44
|
+
fontWeight: 700,
|
|
45
|
+
align: "center",
|
|
46
|
+
color: "#f8fafc"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
id: "p1-text-2",
|
|
50
|
+
type: "text",
|
|
51
|
+
x: 50,
|
|
52
|
+
y: 36,
|
|
53
|
+
content: "\u613F\u8FD9\u4E00\u5E74\u5E73\u5B89\u559C\u4E50",
|
|
54
|
+
fontSize: 18,
|
|
55
|
+
fontWeight: 500,
|
|
56
|
+
align: "center",
|
|
57
|
+
color: "#dbeafe"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
id: "p1-image-1",
|
|
61
|
+
type: "image",
|
|
62
|
+
x: 50,
|
|
63
|
+
y: 68,
|
|
64
|
+
width: 72,
|
|
65
|
+
height: 42,
|
|
66
|
+
src: "https://images.unsplash.com/photo-1512389142860-9c449e58a543?auto=format&fit=crop&w=1200&q=80",
|
|
67
|
+
fit: "cover",
|
|
68
|
+
borderRadius: 16,
|
|
69
|
+
alt: "holiday",
|
|
70
|
+
isBackground: false
|
|
71
|
+
}
|
|
72
|
+
]
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: "page-2",
|
|
76
|
+
title: "\u795D\u798F",
|
|
77
|
+
background: { color: "#1a3766" },
|
|
78
|
+
elements: [
|
|
79
|
+
{
|
|
80
|
+
id: "p2-text-1",
|
|
81
|
+
type: "text",
|
|
82
|
+
x: 50,
|
|
83
|
+
y: 28,
|
|
84
|
+
content: "\u613F\u4F60\u65B0\u5C81\uFF1A",
|
|
85
|
+
fontSize: 28,
|
|
86
|
+
fontWeight: 700,
|
|
87
|
+
align: "center",
|
|
88
|
+
color: "#fef3c7"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
id: "p2-text-2",
|
|
92
|
+
type: "text",
|
|
93
|
+
x: 50,
|
|
94
|
+
y: 42,
|
|
95
|
+
content: "\u6240\u5F97\u7686\u6240\u671F\uFF0C\u6240\u5931\u4EA6\u65E0\u788D",
|
|
96
|
+
fontSize: 18,
|
|
97
|
+
fontWeight: 500,
|
|
98
|
+
align: "center",
|
|
99
|
+
color: "#f8fafc"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
id: "p2-text-3",
|
|
103
|
+
type: "text",
|
|
104
|
+
x: 50,
|
|
105
|
+
y: 55,
|
|
106
|
+
content: "\u613F\u4F60\u7684\u6BCF\u4E00\u6B65\u90FD\u8D70\u5411\u5149\u4EAE",
|
|
107
|
+
fontSize: 16,
|
|
108
|
+
fontWeight: 400,
|
|
109
|
+
align: "center",
|
|
110
|
+
color: "#dbeafe"
|
|
111
|
+
}
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
id: "page-3",
|
|
116
|
+
title: "\u843D\u6B3E",
|
|
117
|
+
background: { color: "#11284d" },
|
|
118
|
+
elements: [
|
|
119
|
+
{
|
|
120
|
+
id: "p3-image-1",
|
|
121
|
+
type: "image",
|
|
122
|
+
x: 50,
|
|
123
|
+
y: 34,
|
|
124
|
+
width: 60,
|
|
125
|
+
height: 42,
|
|
126
|
+
src: "https://images.unsplash.com/photo-1456324504439-367cee3b3c32?auto=format&fit=crop&w=1200&q=80",
|
|
127
|
+
fit: "cover",
|
|
128
|
+
borderRadius: 14,
|
|
129
|
+
alt: "gift",
|
|
130
|
+
isBackground: false
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
id: "p3-text-1",
|
|
134
|
+
type: "text",
|
|
135
|
+
x: 50,
|
|
136
|
+
y: 72,
|
|
137
|
+
content: "Best wishes, from SA2Kit",
|
|
138
|
+
fontSize: 18,
|
|
139
|
+
fontWeight: 600,
|
|
140
|
+
align: "center",
|
|
141
|
+
color: "#f8fafc"
|
|
142
|
+
}
|
|
143
|
+
]
|
|
144
|
+
}
|
|
145
|
+
]
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
// src/festivalCard/core/normalize.ts
|
|
149
|
+
var ensurePage = (page, index) => ({
|
|
150
|
+
id: page.id || `page-${index + 1}`,
|
|
151
|
+
title: page.title || `\u7B2C ${index + 1} \u9875`,
|
|
152
|
+
elements: Array.isArray(page.elements) ? page.elements : [],
|
|
153
|
+
background: page.background || {}
|
|
154
|
+
});
|
|
155
|
+
var normalizeFestivalCardConfig = (config) => {
|
|
156
|
+
const pages = config?.pages && config.pages.length > 0 ? config.pages : DEFAULT_FESTIVAL_CARD_CONFIG.pages;
|
|
157
|
+
return {
|
|
158
|
+
...DEFAULT_FESTIVAL_CARD_CONFIG,
|
|
159
|
+
...config,
|
|
160
|
+
background: {
|
|
161
|
+
...DEFAULT_FESTIVAL_CARD_CONFIG.background,
|
|
162
|
+
...config?.background || {}
|
|
163
|
+
},
|
|
164
|
+
backgroundMusic: {
|
|
165
|
+
...DEFAULT_FESTIVAL_CARD_CONFIG.backgroundMusic,
|
|
166
|
+
...config?.backgroundMusic || {},
|
|
167
|
+
src: config?.backgroundMusic?.src ?? DEFAULT_FESTIVAL_CARD_CONFIG.backgroundMusic?.src ?? ""
|
|
168
|
+
},
|
|
169
|
+
pages: pages.map(ensurePage)
|
|
170
|
+
};
|
|
171
|
+
};
|
|
172
|
+
var festivalCardConfigs = pgTable("festival_card_configs", {
|
|
173
|
+
id: text("id").primaryKey(),
|
|
174
|
+
name: text("name"),
|
|
175
|
+
config: jsonb("config").$type().notNull(),
|
|
176
|
+
createdAt: timestamp("created_at", { withTimezone: true }).defaultNow().notNull(),
|
|
177
|
+
updatedAt: timestamp("updated_at", { withTimezone: true }).defaultNow().notNull()
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
// src/festivalCard/server/services/festivalCardDbService.ts
|
|
181
|
+
var toStoredConfig = (id, config) => ({
|
|
182
|
+
...config,
|
|
183
|
+
id
|
|
184
|
+
});
|
|
185
|
+
var FestivalCardDbService = class {
|
|
186
|
+
constructor(db) {
|
|
187
|
+
this.db = db;
|
|
188
|
+
}
|
|
189
|
+
async listConfigs() {
|
|
190
|
+
const rows = await this.db.select({
|
|
191
|
+
id: festivalCardConfigs.id,
|
|
192
|
+
name: festivalCardConfigs.name
|
|
193
|
+
}).from(festivalCardConfigs).orderBy(desc(festivalCardConfigs.updatedAt));
|
|
194
|
+
return rows;
|
|
195
|
+
}
|
|
196
|
+
async getConfig(id) {
|
|
197
|
+
const rows = await this.db.select().from(festivalCardConfigs).where(eq(festivalCardConfigs.id, id)).limit(1);
|
|
198
|
+
const row = rows[0];
|
|
199
|
+
if (!row) return null;
|
|
200
|
+
const raw = row.config;
|
|
201
|
+
return normalizeFestivalCardConfig({
|
|
202
|
+
...raw,
|
|
203
|
+
id: row.id,
|
|
204
|
+
name: row.name || raw.name
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
async saveConfig(id, config) {
|
|
208
|
+
const normalized = normalizeFestivalCardConfig(toStoredConfig(id, config));
|
|
209
|
+
const existing = await this.db.select({ id: festivalCardConfigs.id }).from(festivalCardConfigs).where(eq(festivalCardConfigs.id, id)).limit(1);
|
|
210
|
+
if (existing[0]) {
|
|
211
|
+
await this.db.update(festivalCardConfigs).set({
|
|
212
|
+
name: normalized.name || id,
|
|
213
|
+
config: normalized,
|
|
214
|
+
updatedAt: /* @__PURE__ */ new Date()
|
|
215
|
+
}).where(eq(festivalCardConfigs.id, id));
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
await this.db.insert(festivalCardConfigs).values({
|
|
219
|
+
id,
|
|
220
|
+
name: normalized.name || id,
|
|
221
|
+
config: normalized
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
async deleteConfig(id) {
|
|
225
|
+
await this.db.delete(festivalCardConfigs).where(eq(festivalCardConfigs.id, id));
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
// src/festivalCard/server/services/drizzleDbAdapter.ts
|
|
230
|
+
var createFestivalCardDrizzleDbAdapter = (db) => {
|
|
231
|
+
const service = new FestivalCardDbService(db);
|
|
232
|
+
return {
|
|
233
|
+
listConfigs: () => service.listConfigs(),
|
|
234
|
+
getConfig: (id) => service.getConfig(id),
|
|
235
|
+
saveConfig: (id, config) => service.saveConfig(id, config),
|
|
236
|
+
deleteConfig: (id) => service.deleteConfig(id)
|
|
237
|
+
};
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
// src/festivalCard/services/festivalCardService.ts
|
|
241
|
+
var FestivalCardService = class {
|
|
242
|
+
constructor(options) {
|
|
243
|
+
this.db = options?.db || getFestivalCardDb();
|
|
244
|
+
}
|
|
245
|
+
async listConfigs() {
|
|
246
|
+
if (!this.db) {
|
|
247
|
+
return [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || "default-festival-card", name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];
|
|
248
|
+
}
|
|
249
|
+
if (this.db.listConfigs) {
|
|
250
|
+
const list = await this.db.listConfigs();
|
|
251
|
+
return list.length > 0 ? list : [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || "default-festival-card", name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];
|
|
252
|
+
}
|
|
253
|
+
return [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || "default-festival-card", name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];
|
|
254
|
+
}
|
|
255
|
+
async getConfig(cardId = "default-festival-card") {
|
|
256
|
+
if (!this.db) return DEFAULT_FESTIVAL_CARD_CONFIG;
|
|
257
|
+
const config = await this.db.getConfig(cardId);
|
|
258
|
+
return normalizeFestivalCardConfig(config);
|
|
259
|
+
}
|
|
260
|
+
async saveConfig(cardId, config) {
|
|
261
|
+
const normalized = normalizeFestivalCardConfig(config);
|
|
262
|
+
if (!this.db) return normalized;
|
|
263
|
+
await this.db.saveConfig(cardId, normalized);
|
|
264
|
+
return normalized;
|
|
265
|
+
}
|
|
266
|
+
async deleteConfig(cardId) {
|
|
267
|
+
if (!this.db?.deleteConfig) return;
|
|
268
|
+
await this.db.deleteConfig(cardId);
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
var memoryStore = /* @__PURE__ */ new Map();
|
|
272
|
+
var defaultId = DEFAULT_FESTIVAL_CARD_CONFIG.id || "default-festival-card";
|
|
273
|
+
if (!memoryStore.has(defaultId)) {
|
|
274
|
+
memoryStore.set(defaultId, DEFAULT_FESTIVAL_CARD_CONFIG);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// src/festivalCard/routes/index.ts
|
|
278
|
+
var createService = (config) => {
|
|
279
|
+
const adapter = resolveDbAdapter(config);
|
|
280
|
+
if (adapter) initializeFestivalCardDb(adapter);
|
|
281
|
+
return new FestivalCardService({ db: adapter || void 0 });
|
|
282
|
+
};
|
|
283
|
+
var resolveCardId = async (context) => {
|
|
284
|
+
const params = await context.params;
|
|
285
|
+
return params.id;
|
|
286
|
+
};
|
|
287
|
+
var isFestivalCardAdapter = (value) => {
|
|
288
|
+
if (!value || typeof value !== "object") return false;
|
|
289
|
+
const candidate = value;
|
|
290
|
+
return typeof candidate.getConfig === "function" && typeof candidate.saveConfig === "function";
|
|
291
|
+
};
|
|
292
|
+
var isDrizzleDb = (value) => {
|
|
293
|
+
if (!value || typeof value !== "object") return false;
|
|
294
|
+
const candidate = value;
|
|
295
|
+
return typeof candidate.select === "function" && typeof candidate.insert === "function" && typeof candidate.update === "function" && typeof candidate.delete === "function";
|
|
296
|
+
};
|
|
297
|
+
var resolveDbAdapter = (config) => {
|
|
298
|
+
if (config.dbAdapter) return config.dbAdapter;
|
|
299
|
+
if (isFestivalCardAdapter(config.db)) return config.db;
|
|
300
|
+
if (isDrizzleDb(config.db)) return createFestivalCardDrizzleDbAdapter(config.db);
|
|
301
|
+
return void 0;
|
|
302
|
+
};
|
|
303
|
+
var createListFestivalCardsHandler = (config = {}) => {
|
|
304
|
+
const service = createService(config);
|
|
305
|
+
return async (_request) => {
|
|
306
|
+
try {
|
|
307
|
+
const data = await service.listConfigs();
|
|
308
|
+
return NextResponse.json({ success: true, data });
|
|
309
|
+
} catch (error) {
|
|
310
|
+
return NextResponse.json({ success: false, error: error.message }, { status: 500 });
|
|
311
|
+
}
|
|
312
|
+
};
|
|
313
|
+
};
|
|
314
|
+
var createGetFestivalCardHandler = (config = {}) => {
|
|
315
|
+
const service = createService(config);
|
|
316
|
+
return async (_request, context) => {
|
|
317
|
+
try {
|
|
318
|
+
const cardId = await resolveCardId(context);
|
|
319
|
+
const card = await service.getConfig(cardId);
|
|
320
|
+
return NextResponse.json({ success: true, data: card });
|
|
321
|
+
} catch (error) {
|
|
322
|
+
return NextResponse.json({ success: false, error: error.message }, { status: 500 });
|
|
323
|
+
}
|
|
324
|
+
};
|
|
325
|
+
};
|
|
326
|
+
var createUpsertFestivalCardHandler = (config = {}) => {
|
|
327
|
+
const service = createService(config);
|
|
328
|
+
return async (request, context) => {
|
|
329
|
+
try {
|
|
330
|
+
const cardId = await resolveCardId(context);
|
|
331
|
+
const body = await request.json();
|
|
332
|
+
const payload = body && typeof body === "object" && "config" in body ? body.config : void 0;
|
|
333
|
+
const normalized = normalizeFestivalCardConfig(payload || {});
|
|
334
|
+
const data = await service.saveConfig(cardId, normalized);
|
|
335
|
+
return NextResponse.json({ success: true, data });
|
|
336
|
+
} catch (error) {
|
|
337
|
+
return NextResponse.json({ success: false, error: error.message }, { status: 500 });
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
};
|
|
341
|
+
var createDeleteFestivalCardHandler = (config = {}) => {
|
|
342
|
+
const service = createService(config);
|
|
343
|
+
return async (_request, context) => {
|
|
344
|
+
try {
|
|
345
|
+
const cardId = await resolveCardId(context);
|
|
346
|
+
await service.deleteConfig(cardId);
|
|
347
|
+
return NextResponse.json({ success: true });
|
|
348
|
+
} catch (error) {
|
|
349
|
+
return NextResponse.json({ success: false, error: error.message }, { status: 500 });
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
};
|
|
353
|
+
|
|
354
|
+
export { createDeleteFestivalCardHandler, createGetFestivalCardHandler, createListFestivalCardsHandler, createUpsertFestivalCardHandler };
|
|
355
|
+
//# sourceMappingURL=index.mjs.map
|
|
356
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/festivalCard/server/db.ts","../../../src/festivalCard/core/defaults.ts","../../../src/festivalCard/core/normalize.ts","../../../src/festivalCard/server/schema/festivalCards.ts","../../../src/festivalCard/server/services/festivalCardDbService.ts","../../../src/festivalCard/server/services/drizzleDbAdapter.ts","../../../src/festivalCard/services/festivalCardService.ts","../../../src/festivalCard/routes/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { FestivalCardDbAdapter } from '../types';\n\nlet dbAdapter: FestivalCardDbAdapter | null = null;\n\nexport const initializeFestivalCardDb = (adapter: FestivalCardDbAdapter): void => {\n dbAdapter = adapter;\n};\n\nexport const getFestivalCardDb = (): FestivalCardDbAdapter | null => dbAdapter;\n","import type { FestivalCardConfig } from '../types';\n\nexport const DEFAULT_FESTIVAL_CARD_CONFIG: FestivalCardConfig = {\n id: 'default-festival-card',\n name: 'Holiday Card',\n theme: 'winter',\n coverTitle: 'Happy Holidays',\n coverSubtitle: 'Warm wishes for you',\n background: {\n colorA: '#0c1a34',\n colorB: '#1f4f8a',\n },\n backgroundMusic: {\n src: '',\n loop: true,\n autoPlay: false,\n volume: 0.5,\n },\n pages: [\n {\n id: 'page-1',\n title: '封面',\n background: { color: '#11284d' },\n elements: [\n {\n id: 'p1-text-1',\n type: 'text',\n x: 50,\n y: 20,\n content: '新年快乐',\n fontSize: 34,\n fontWeight: 700,\n align: 'center',\n color: '#f8fafc',\n },\n {\n id: 'p1-text-2',\n type: 'text',\n x: 50,\n y: 36,\n content: '愿这一年平安喜乐',\n fontSize: 18,\n fontWeight: 500,\n align: 'center',\n color: '#dbeafe',\n },\n {\n id: 'p1-image-1',\n type: 'image',\n x: 50,\n y: 68,\n width: 72,\n height: 42,\n src: 'https://images.unsplash.com/photo-1512389142860-9c449e58a543?auto=format&fit=crop&w=1200&q=80',\n fit: 'cover',\n borderRadius: 16,\n alt: 'holiday',\n isBackground: false,\n },\n ],\n },\n {\n id: 'page-2',\n title: '祝福',\n background: { color: '#1a3766' },\n elements: [\n {\n id: 'p2-text-1',\n type: 'text',\n x: 50,\n y: 28,\n content: '愿你新岁:',\n fontSize: 28,\n fontWeight: 700,\n align: 'center',\n color: '#fef3c7',\n },\n {\n id: 'p2-text-2',\n type: 'text',\n x: 50,\n y: 42,\n content: '所得皆所期,所失亦无碍',\n fontSize: 18,\n fontWeight: 500,\n align: 'center',\n color: '#f8fafc',\n },\n {\n id: 'p2-text-3',\n type: 'text',\n x: 50,\n y: 55,\n content: '愿你的每一步都走向光亮',\n fontSize: 16,\n fontWeight: 400,\n align: 'center',\n color: '#dbeafe',\n },\n ],\n },\n {\n id: 'page-3',\n title: '落款',\n background: { color: '#11284d' },\n elements: [\n {\n id: 'p3-image-1',\n type: 'image',\n x: 50,\n y: 34,\n width: 60,\n height: 42,\n src: 'https://images.unsplash.com/photo-1456324504439-367cee3b3c32?auto=format&fit=crop&w=1200&q=80',\n fit: 'cover',\n borderRadius: 14,\n alt: 'gift',\n isBackground: false,\n },\n {\n id: 'p3-text-1',\n type: 'text',\n x: 50,\n y: 72,\n content: 'Best wishes, from SA2Kit',\n fontSize: 18,\n fontWeight: 600,\n align: 'center',\n color: '#f8fafc',\n },\n ],\n },\n ],\n};\n","import { DEFAULT_FESTIVAL_CARD_CONFIG } from './defaults';\nimport type { FestivalCardConfig, FestivalCardPage } from '../types';\n\nconst ensurePage = (page: FestivalCardPage, index: number): FestivalCardPage => ({\n id: page.id || `page-${index + 1}`,\n title: page.title || `第 ${index + 1} 页`,\n elements: Array.isArray(page.elements) ? page.elements : [],\n background: page.background || {},\n});\n\nexport const normalizeFestivalCardConfig = (\n config?: Partial<FestivalCardConfig> | null\n): FestivalCardConfig => {\n const pages = config?.pages && config.pages.length > 0 ? config.pages : DEFAULT_FESTIVAL_CARD_CONFIG.pages;\n\n return {\n ...DEFAULT_FESTIVAL_CARD_CONFIG,\n ...config,\n background: {\n ...DEFAULT_FESTIVAL_CARD_CONFIG.background,\n ...(config?.background || {}),\n },\n backgroundMusic: {\n ...DEFAULT_FESTIVAL_CARD_CONFIG.backgroundMusic,\n ...(config?.backgroundMusic || {}),\n src: config?.backgroundMusic?.src ?? DEFAULT_FESTIVAL_CARD_CONFIG.backgroundMusic?.src ?? '',\n },\n pages: pages.map(ensurePage),\n };\n};\n\nexport const resizeFestivalCardPages = (config: FestivalCardConfig, pageCount: number): FestivalCardConfig => {\n const safeCount = Math.max(1, Math.min(12, Math.floor(pageCount || 1)));\n const nextPages = [...config.pages];\n\n while (nextPages.length < safeCount) {\n const idx = nextPages.length;\n nextPages.push({\n id: `page-${idx + 1}`,\n title: `第 ${idx + 1} 页`,\n elements: [],\n background: {},\n });\n }\n\n return {\n ...config,\n pages: nextPages.slice(0, safeCount),\n };\n};\n","import { pgTable, text, timestamp, jsonb } from 'drizzle-orm/pg-core';\nimport type { FestivalCardConfig } from '../../types';\n\nexport const festivalCardConfigs = pgTable('festival_card_configs', {\n id: text('id').primaryKey(),\n name: text('name'),\n config: jsonb('config').$type<FestivalCardConfig>().notNull(),\n createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),\n updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),\n});\n\n","import { desc, eq } from 'drizzle-orm';\nimport { normalizeFestivalCardConfig } from '../../core';\nimport type { FestivalCardConfig, FestivalCardConfigSummary } from '../../types';\nimport { festivalCardConfigs } from '../schema/festivalCards';\n\nexport type DrizzleLikeDb = {\n select: (...args: any[]) => any;\n insert: (...args: any[]) => any;\n update: (...args: any[]) => any;\n delete: (...args: any[]) => any;\n};\n\nconst toStoredConfig = (id: string, config: FestivalCardConfig): FestivalCardConfig => ({\n ...config,\n id,\n});\n\nexport class FestivalCardDbService {\n constructor(private readonly db: DrizzleLikeDb) {}\n\n async listConfigs(): Promise<FestivalCardConfigSummary[]> {\n const rows = await this.db\n .select({\n id: festivalCardConfigs.id,\n name: festivalCardConfigs.name,\n })\n .from(festivalCardConfigs)\n .orderBy(desc(festivalCardConfigs.updatedAt));\n return rows;\n }\n\n async getConfig(id: string): Promise<FestivalCardConfig | null> {\n const rows = await this.db\n .select()\n .from(festivalCardConfigs)\n .where(eq(festivalCardConfigs.id, id))\n .limit(1);\n const row = rows[0];\n if (!row) return null;\n const raw = row.config as FestivalCardConfig;\n return normalizeFestivalCardConfig({\n ...raw,\n id: row.id,\n name: row.name || raw.name,\n });\n }\n\n async saveConfig(id: string, config: FestivalCardConfig): Promise<void> {\n const normalized = normalizeFestivalCardConfig(toStoredConfig(id, config));\n const existing = await this.db\n .select({ id: festivalCardConfigs.id })\n .from(festivalCardConfigs)\n .where(eq(festivalCardConfigs.id, id))\n .limit(1);\n\n if (existing[0]) {\n await this.db\n .update(festivalCardConfigs)\n .set({\n name: normalized.name || id,\n config: normalized,\n updatedAt: new Date(),\n })\n .where(eq(festivalCardConfigs.id, id));\n return;\n }\n\n await this.db.insert(festivalCardConfigs).values({\n id,\n name: normalized.name || id,\n config: normalized,\n });\n }\n\n async deleteConfig(id: string): Promise<void> {\n await this.db.delete(festivalCardConfigs).where(eq(festivalCardConfigs.id, id));\n }\n}\n","import type { FestivalCardConfig, FestivalCardDbAdapter } from '../../types';\nimport { FestivalCardDbService } from './festivalCardDbService';\nimport type { DrizzleLikeDb } from './festivalCardDbService';\n\nexport type { DrizzleLikeDb } from './festivalCardDbService';\n\nexport const createFestivalCardDrizzleDbAdapter = (db: DrizzleLikeDb): FestivalCardDbAdapter => {\n const service = new FestivalCardDbService(db);\n\n return {\n listConfigs: () => service.listConfigs(),\n getConfig: (id: string) => service.getConfig(id),\n saveConfig: (id: string, config: FestivalCardConfig) => service.saveConfig(id, config),\n deleteConfig: (id: string) => service.deleteConfig(id),\n };\n};\n","import { DEFAULT_FESTIVAL_CARD_CONFIG, normalizeFestivalCardConfig } from '../core';\nimport { getFestivalCardDb } from '../server/db';\nimport type {\n FestivalCardConfig,\n FestivalCardConfigSummary,\n FestivalCardDbAdapter,\n FestivalCardServiceOptions,\n} from '../types';\n\nexport class FestivalCardService {\n private db: FestivalCardDbAdapter | null;\n\n constructor(options?: FestivalCardServiceOptions) {\n this.db = options?.db || getFestivalCardDb();\n }\n\n async listConfigs(): Promise<FestivalCardConfigSummary[]> {\n if (!this.db) {\n return [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card', name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];\n }\n\n if (this.db.listConfigs) {\n const list = await this.db.listConfigs();\n return list.length > 0\n ? list\n : [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card', name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];\n }\n\n return [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card', name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];\n }\n\n async getConfig(cardId = 'default-festival-card'): Promise<FestivalCardConfig> {\n if (!this.db) return DEFAULT_FESTIVAL_CARD_CONFIG;\n const config = await this.db.getConfig(cardId);\n return normalizeFestivalCardConfig(config);\n }\n\n async saveConfig(cardId: string, config: FestivalCardConfig): Promise<FestivalCardConfig> {\n const normalized = normalizeFestivalCardConfig(config);\n if (!this.db) return normalized;\n await this.db.saveConfig(cardId, normalized);\n return normalized;\n }\n\n async deleteConfig(cardId: string): Promise<void> {\n if (!this.db?.deleteConfig) return;\n await this.db.deleteConfig(cardId);\n }\n}\n\nconst memoryStore = new Map<string, FestivalCardConfig>();\nconst defaultId = DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card';\nif (!memoryStore.has(defaultId)) {\n memoryStore.set(defaultId, DEFAULT_FESTIVAL_CARD_CONFIG);\n}\n\nexport const createInMemoryFestivalCardDb = (): FestivalCardDbAdapter => ({\n listConfigs() {\n return Promise.resolve(\n Array.from(memoryStore.entries()).map(([id, config]) => ({\n id,\n name: config.name || id,\n }))\n );\n },\n getConfig(id: string) {\n return Promise.resolve(memoryStore.get(id) || null);\n },\n saveConfig(id: string, config: FestivalCardConfig) {\n memoryStore.set(id, config);\n return Promise.resolve();\n },\n deleteConfig(id: string) {\n memoryStore.delete(id);\n return Promise.resolve();\n },\n});\n","import { NextResponse } from 'next/server';\nimport { initializeFestivalCardDb } from '../server/db';\nimport { createFestivalCardDrizzleDbAdapter } from '../server/services/drizzleDbAdapter';\nimport { FestivalCardService } from '../services';\nimport { normalizeFestivalCardConfig } from '../core';\nimport type { FestivalCardConfig, FestivalCardDbAdapter } from '../types';\nimport type { DrizzleLikeDb } from '../server/services/drizzleDbAdapter';\nimport type { NextRequest } from 'next/server';\n\nexport interface FestivalCardRouteConfig {\n db?: unknown;\n dbAdapter?: FestivalCardDbAdapter;\n}\n\ntype RouteContext =\n | { params: { id: string } }\n | { params: Promise<{ id: string }> };\n\nconst createService = (config: FestivalCardRouteConfig) => {\n const adapter = resolveDbAdapter(config);\n if (adapter) initializeFestivalCardDb(adapter);\n return new FestivalCardService({ db: adapter || undefined });\n};\n\nconst resolveCardId = async (context: RouteContext): Promise<string> => {\n const params = await context.params;\n return params.id;\n};\n\nconst isFestivalCardAdapter = (value: unknown): value is FestivalCardDbAdapter => {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as Record<string, unknown>;\n return typeof candidate.getConfig === 'function' && typeof candidate.saveConfig === 'function';\n};\n\nconst isDrizzleDb = (value: unknown): value is DrizzleLikeDb => {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as Record<string, unknown>;\n return (\n typeof candidate.select === 'function' &&\n typeof candidate.insert === 'function' &&\n typeof candidate.update === 'function' &&\n typeof candidate.delete === 'function'\n );\n};\n\nconst resolveDbAdapter = (config: FestivalCardRouteConfig): FestivalCardDbAdapter | undefined => {\n if (config.dbAdapter) return config.dbAdapter;\n if (isFestivalCardAdapter(config.db)) return config.db;\n if (isDrizzleDb(config.db)) return createFestivalCardDrizzleDbAdapter(config.db);\n return undefined;\n};\n\nexport const createListFestivalCardsHandler = (config: FestivalCardRouteConfig = {}) => {\n const service = createService(config);\n return async (_request: NextRequest) => {\n try {\n const data = await service.listConfigs();\n return NextResponse.json({ success: true, data });\n } catch (error) {\n return NextResponse.json({ success: false, error: (error as Error).message }, { status: 500 });\n }\n };\n};\n\nexport const createGetFestivalCardHandler = (config: FestivalCardRouteConfig = {}) => {\n const service = createService(config);\n return async (_request: NextRequest, context: RouteContext) => {\n try {\n const cardId = await resolveCardId(context);\n const card = await service.getConfig(cardId);\n return NextResponse.json({ success: true, data: card });\n } catch (error) {\n return NextResponse.json({ success: false, error: (error as Error).message }, { status: 500 });\n }\n };\n};\n\nexport const createUpsertFestivalCardHandler = (config: FestivalCardRouteConfig = {}) => {\n const service = createService(config);\n return async (request: NextRequest, context: RouteContext) => {\n try {\n const cardId = await resolveCardId(context);\n const body: unknown = await request.json();\n const payload =\n body && typeof body === 'object' && 'config' in body\n ? (body as { config?: unknown }).config\n : undefined;\n const normalized = normalizeFestivalCardConfig((payload || {}) as Partial<FestivalCardConfig>);\n const data = await service.saveConfig(cardId, normalized);\n return NextResponse.json({ success: true, data });\n } catch (error) {\n return NextResponse.json({ success: false, error: (error as Error).message }, { status: 500 });\n }\n };\n};\n\nexport const createDeleteFestivalCardHandler = (config: FestivalCardRouteConfig = {}) => {\n const service = createService(config);\n return async (_request: NextRequest, context: RouteContext) => {\n try {\n const cardId = await resolveCardId(context);\n await service.deleteConfig(cardId);\n return NextResponse.json({ success: true });\n } catch (error) {\n return NextResponse.json({ success: false, error: (error as Error).message }, { status: 500 });\n }\n };\n};\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { c as createInMemoryFestivalCardDb } from '../../festivalCardService-
|
|
1
|
+
import { c as FestivalCardDbAdapter, b as FestivalCardConfig, a as FestivalCardConfigSummary } from '../../types-tQfupO6d.mjs';
|
|
2
|
+
export { c as createInMemoryFestivalCardDb } from '../../festivalCardService-GriR2VMc.mjs';
|
|
3
3
|
import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
|
|
4
4
|
|
|
5
5
|
declare const initializeFestivalCardDb: (adapter: FestivalCardDbAdapter) => void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { c as createInMemoryFestivalCardDb } from '../../festivalCardService-
|
|
1
|
+
import { c as FestivalCardDbAdapter, b as FestivalCardConfig, a as FestivalCardConfigSummary } from '../../types-tQfupO6d.js';
|
|
2
|
+
export { c as createInMemoryFestivalCardDb } from '../../festivalCardService-BFCRhJrq.js';
|
|
3
3
|
import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
|
|
4
4
|
|
|
5
5
|
declare const initializeFestivalCardDb: (adapter: FestivalCardDbAdapter) => void;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { F as FestivalCardServiceOptions, a as FestivalCardConfigSummary, b as FestivalCardConfig, c as FestivalCardDbAdapter } from './types-tQfupO6d.js';
|
|
2
|
+
|
|
3
|
+
declare class FestivalCardService {
|
|
4
|
+
private db;
|
|
5
|
+
constructor(options?: FestivalCardServiceOptions);
|
|
6
|
+
listConfigs(): Promise<FestivalCardConfigSummary[]>;
|
|
7
|
+
getConfig(cardId?: string): Promise<FestivalCardConfig>;
|
|
8
|
+
saveConfig(cardId: string, config: FestivalCardConfig): Promise<FestivalCardConfig>;
|
|
9
|
+
deleteConfig(cardId: string): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
declare const createInMemoryFestivalCardDb: () => FestivalCardDbAdapter;
|
|
12
|
+
|
|
13
|
+
export { FestivalCardService as F, createInMemoryFestivalCardDb as c };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { F as FestivalCardServiceOptions, a as FestivalCardConfigSummary, b as FestivalCardConfig, c as FestivalCardDbAdapter } from './types-tQfupO6d.mjs';
|
|
2
|
+
|
|
3
|
+
declare class FestivalCardService {
|
|
4
|
+
private db;
|
|
5
|
+
constructor(options?: FestivalCardServiceOptions);
|
|
6
|
+
listConfigs(): Promise<FestivalCardConfigSummary[]>;
|
|
7
|
+
getConfig(cardId?: string): Promise<FestivalCardConfig>;
|
|
8
|
+
saveConfig(cardId: string, config: FestivalCardConfig): Promise<FestivalCardConfig>;
|
|
9
|
+
deleteConfig(cardId: string): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
declare const createInMemoryFestivalCardDb: () => FestivalCardDbAdapter;
|
|
12
|
+
|
|
13
|
+
export { FestivalCardService as F, createInMemoryFestivalCardDb as c };
|
package/dist/index.d.mts
CHANGED
|
@@ -13,7 +13,8 @@ export { FloatingMenu, FloatingMenuExample, Navigation, NavigationConfig, Naviga
|
|
|
13
13
|
export { DANMAKU_MAX_LENGTH, DANMAKU_TRACK_COUNT, DEFAULT_MAX_ACTIVE_FIREWORKS, DEFAULT_MAX_PARTICLES, DanmakuControllerOptions, DanmakuMessage, DanmakuOverlayItem, DanmakuPanel, DanmakuSendResult, FIREWORK_KIND_LABELS, FireworkEngineOptions, FireworkKind, FireworkLaunchPayload, FireworkPosition, FireworksCanvas, FireworksControlPanel, FireworksRealtimeConfig, FireworksRealtimeState, FireworksRealtimeUser, MIKU_PALETTE, MikuFireworks3D, MikuFireworks3DProps, NORMAL_PALETTE, UseFireworksEngineOptions, WebSocketTransport, WebSocketTransportCallbacks, useDanmakuController, useFireworksEngine, useFireworksRealtime } from './mikuFireworks3D/index.mjs';
|
|
14
14
|
export { ResolveScreenReceiverSignalUrlOptions, ScreenReceiverClientRole, ScreenReceiverErrorMessage, ScreenReceiverIncomingMessage, ScreenReceiverJoinMessage, ScreenReceiverJoinedMessage, ScreenReceiverLogEntry, ScreenReceiverPanel, ScreenReceiverPanelProps, ScreenReceiverPeerJoinedMessage, ScreenReceiverPeerLeftMessage, ScreenReceiverRole, ScreenReceiverRoomStateMessage, ScreenReceiverSignalMessage, ScreenReceiverSignalType, UseScreenReceiverOptions, UseScreenReceiverReturn, resolveScreenReceiverSignalUrl, useScreenReceiver } from './screenReceiver/index.mjs';
|
|
15
15
|
export { DEFAULT_FESTIVAL_CARD_CONFIG, FestivalCardBook3D, FestivalCardBook3DProps, FestivalCardConfigEditor, FestivalCardConfigPage, FestivalCardManagedPage, FestivalCardPageRenderer, FestivalCardStudio, normalizeFestivalCardConfig, resizeFestivalCardPages, useFestivalCardConfig } from './festivalCard/index.mjs';
|
|
16
|
-
export {
|
|
16
|
+
export { F as FestivalCardService, c as createInMemoryFestivalCardDb } from './festivalCardService-GriR2VMc.mjs';
|
|
17
|
+
export { j as FestivalCardAudioConfig, b as FestivalCardConfig, a as FestivalCardConfigSummary, c as FestivalCardDbAdapter, h as FestivalCardElement, e as FestivalCardElementBase, d as FestivalCardElementType, g as FestivalCardImageElement, i as FestivalCardPage, F as FestivalCardServiceOptions, f as FestivalCardTextElement } from './types-tQfupO6d.mjs';
|
|
17
18
|
export { f as BoothAuditEvent, g as BoothAuditEventType, b as BoothFileItem, c as BoothFileKind, h as BoothRedeemGuardLike, a as BoothUploadRecord, d as BoothVaultService, i as BoothVaultServiceOptions, B as BoothVaultStore, C as CreateBoothUploadInput, e as CreateBoothUploadResult } from './boothVaultService-Cn4WPhjg.mjs';
|
|
18
19
|
export { BoothConfigPage, BoothConfigPageProps, BoothRedeemPanel, BoothRedeemPanelProps, BoothSuccessCard, BoothSuccessCardProps, BoothUploadPanel, BoothUploadPanelProps, BoothUploadSubmitPayload, GenerateMatchCodeOptions, VocaloidBoothConfig, defaultVocaloidBoothConfig, generateMatchCode, normalizeMatchCode, normalizeVocaloidBoothConfig } from './vocaloidBooth/index.mjs';
|
|
19
20
|
import { M as MikuContestConfig, C as CreateMikuSubmissionInput, a as MikuSubmission, b as MikuSubmissionFilter, R as ReviewMikuSubmissionInput, V as VoteMikuSubmissionInput, c as MikuVoterRestriction, S as SetMikuVoterRestrictionInput, d as ResetMikuVotesInput, e as MikuAnnouncement, f as CreateMikuAnnouncementInput, g as MikuLeaderboardItem, h as MikuContestStateSnapshot, i as MikuSubmissionExportRow, j as MikuContestPersistedState, k as MikuSubmissionContent, l as MikuVoteRecord, m as MikuVotingRules, n as MikuContestApiClient, o as Requester } from './index-DrPcMJPc.mjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -13,7 +13,8 @@ export { FloatingMenu, FloatingMenuExample, Navigation, NavigationConfig, Naviga
|
|
|
13
13
|
export { DANMAKU_MAX_LENGTH, DANMAKU_TRACK_COUNT, DEFAULT_MAX_ACTIVE_FIREWORKS, DEFAULT_MAX_PARTICLES, DanmakuControllerOptions, DanmakuMessage, DanmakuOverlayItem, DanmakuPanel, DanmakuSendResult, FIREWORK_KIND_LABELS, FireworkEngineOptions, FireworkKind, FireworkLaunchPayload, FireworkPosition, FireworksCanvas, FireworksControlPanel, FireworksRealtimeConfig, FireworksRealtimeState, FireworksRealtimeUser, MIKU_PALETTE, MikuFireworks3D, MikuFireworks3DProps, NORMAL_PALETTE, UseFireworksEngineOptions, WebSocketTransport, WebSocketTransportCallbacks, useDanmakuController, useFireworksEngine, useFireworksRealtime } from './mikuFireworks3D/index.js';
|
|
14
14
|
export { ResolveScreenReceiverSignalUrlOptions, ScreenReceiverClientRole, ScreenReceiverErrorMessage, ScreenReceiverIncomingMessage, ScreenReceiverJoinMessage, ScreenReceiverJoinedMessage, ScreenReceiverLogEntry, ScreenReceiverPanel, ScreenReceiverPanelProps, ScreenReceiverPeerJoinedMessage, ScreenReceiverPeerLeftMessage, ScreenReceiverRole, ScreenReceiverRoomStateMessage, ScreenReceiverSignalMessage, ScreenReceiverSignalType, UseScreenReceiverOptions, UseScreenReceiverReturn, resolveScreenReceiverSignalUrl, useScreenReceiver } from './screenReceiver/index.js';
|
|
15
15
|
export { DEFAULT_FESTIVAL_CARD_CONFIG, FestivalCardBook3D, FestivalCardBook3DProps, FestivalCardConfigEditor, FestivalCardConfigPage, FestivalCardManagedPage, FestivalCardPageRenderer, FestivalCardStudio, normalizeFestivalCardConfig, resizeFestivalCardPages, useFestivalCardConfig } from './festivalCard/index.js';
|
|
16
|
-
export {
|
|
16
|
+
export { F as FestivalCardService, c as createInMemoryFestivalCardDb } from './festivalCardService-BFCRhJrq.js';
|
|
17
|
+
export { j as FestivalCardAudioConfig, b as FestivalCardConfig, a as FestivalCardConfigSummary, c as FestivalCardDbAdapter, h as FestivalCardElement, e as FestivalCardElementBase, d as FestivalCardElementType, g as FestivalCardImageElement, i as FestivalCardPage, F as FestivalCardServiceOptions, f as FestivalCardTextElement } from './types-tQfupO6d.js';
|
|
17
18
|
export { f as BoothAuditEvent, g as BoothAuditEventType, b as BoothFileItem, c as BoothFileKind, h as BoothRedeemGuardLike, a as BoothUploadRecord, d as BoothVaultService, i as BoothVaultServiceOptions, B as BoothVaultStore, C as CreateBoothUploadInput, e as CreateBoothUploadResult } from './boothVaultService-Cn4WPhjg.js';
|
|
18
19
|
export { BoothConfigPage, BoothConfigPageProps, BoothRedeemPanel, BoothRedeemPanelProps, BoothSuccessCard, BoothSuccessCardProps, BoothUploadPanel, BoothUploadPanelProps, BoothUploadSubmitPayload, GenerateMatchCodeOptions, VocaloidBoothConfig, defaultVocaloidBoothConfig, generateMatchCode, normalizeMatchCode, normalizeVocaloidBoothConfig } from './vocaloidBooth/index.js';
|
|
19
20
|
import { M as MikuContestConfig, C as CreateMikuSubmissionInput, a as MikuSubmission, b as MikuSubmissionFilter, R as ReviewMikuSubmissionInput, V as VoteMikuSubmissionInput, c as MikuVoterRestriction, S as SetMikuVoterRestrictionInput, d as ResetMikuVotesInput, e as MikuAnnouncement, f as CreateMikuAnnouncementInput, g as MikuLeaderboardItem, h as MikuContestStateSnapshot, i as MikuSubmissionExportRow, j as MikuContestPersistedState, k as MikuSubmissionContent, l as MikuVoteRecord, m as MikuVotingRules, n as MikuContestApiClient, o as Requester } from './index-DrPcMJPc.js';
|
|
@@ -67,14 +67,4 @@ interface FestivalCardServiceOptions {
|
|
|
67
67
|
db?: FestivalCardDbAdapter;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
private db;
|
|
72
|
-
constructor(options?: FestivalCardServiceOptions);
|
|
73
|
-
listConfigs(): Promise<FestivalCardConfigSummary[]>;
|
|
74
|
-
getConfig(cardId?: string): Promise<FestivalCardConfig>;
|
|
75
|
-
saveConfig(cardId: string, config: FestivalCardConfig): Promise<FestivalCardConfig>;
|
|
76
|
-
deleteConfig(cardId: string): Promise<void>;
|
|
77
|
-
}
|
|
78
|
-
declare const createInMemoryFestivalCardDb: () => FestivalCardDbAdapter;
|
|
79
|
-
|
|
80
|
-
export { type FestivalCardDbAdapter as F, type FestivalCardConfig as a, type FestivalCardConfigSummary as b, createInMemoryFestivalCardDb as c, FestivalCardService as d, type FestivalCardElementType as e, type FestivalCardElementBase as f, type FestivalCardTextElement as g, type FestivalCardImageElement as h, type FestivalCardElement as i, type FestivalCardPage as j, type FestivalCardAudioConfig as k, type FestivalCardServiceOptions as l };
|
|
70
|
+
export type { FestivalCardServiceOptions as F, FestivalCardConfigSummary as a, FestivalCardConfig as b, FestivalCardDbAdapter as c, FestivalCardElementType as d, FestivalCardElementBase as e, FestivalCardTextElement as f, FestivalCardImageElement as g, FestivalCardElement as h, FestivalCardPage as i, FestivalCardAudioConfig as j };
|
|
@@ -67,14 +67,4 @@ interface FestivalCardServiceOptions {
|
|
|
67
67
|
db?: FestivalCardDbAdapter;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
private db;
|
|
72
|
-
constructor(options?: FestivalCardServiceOptions);
|
|
73
|
-
listConfigs(): Promise<FestivalCardConfigSummary[]>;
|
|
74
|
-
getConfig(cardId?: string): Promise<FestivalCardConfig>;
|
|
75
|
-
saveConfig(cardId: string, config: FestivalCardConfig): Promise<FestivalCardConfig>;
|
|
76
|
-
deleteConfig(cardId: string): Promise<void>;
|
|
77
|
-
}
|
|
78
|
-
declare const createInMemoryFestivalCardDb: () => FestivalCardDbAdapter;
|
|
79
|
-
|
|
80
|
-
export { type FestivalCardDbAdapter as F, type FestivalCardConfig as a, type FestivalCardConfigSummary as b, createInMemoryFestivalCardDb as c, FestivalCardService as d, type FestivalCardElementType as e, type FestivalCardElementBase as f, type FestivalCardTextElement as g, type FestivalCardImageElement as h, type FestivalCardElement as i, type FestivalCardPage as j, type FestivalCardAudioConfig as k, type FestivalCardServiceOptions as l };
|
|
70
|
+
export type { FestivalCardServiceOptions as F, FestivalCardConfigSummary as a, FestivalCardConfig as b, FestivalCardDbAdapter as c, FestivalCardElementType as d, FestivalCardElementBase as e, FestivalCardTextElement as f, FestivalCardImageElement as g, FestivalCardElement as h, FestivalCardPage as i, FestivalCardAudioConfig as j };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sa2kit",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.3",
|
|
4
4
|
"description": "SA2Kit 2.0 — common API 稳定;business 实验田模块逐步迁出 profile-v1",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -344,6 +344,11 @@
|
|
|
344
344
|
"import": "./dist/calendar/index.mjs",
|
|
345
345
|
"require": "./dist/calendar/index.js"
|
|
346
346
|
},
|
|
347
|
+
"./calendar/routes": {
|
|
348
|
+
"types": "./dist/calendar/routes/index.d.ts",
|
|
349
|
+
"import": "./dist/calendar/routes/index.mjs",
|
|
350
|
+
"require": "./dist/calendar/routes/index.js"
|
|
351
|
+
},
|
|
347
352
|
"./common/auth/server": {
|
|
348
353
|
"types": "./dist/common/auth/server/index.d.ts",
|
|
349
354
|
"node": {
|
|
@@ -433,6 +438,11 @@
|
|
|
433
438
|
"import": "./dist/festivalCard/index.mjs",
|
|
434
439
|
"require": "./dist/festivalCard/index.js"
|
|
435
440
|
},
|
|
441
|
+
"./festivalCard/routes": {
|
|
442
|
+
"types": "./dist/festivalCard/routes/index.d.ts",
|
|
443
|
+
"import": "./dist/festivalCard/routes/index.mjs",
|
|
444
|
+
"require": "./dist/festivalCard/routes/index.js"
|
|
445
|
+
},
|
|
436
446
|
"./festivalCard/server": {
|
|
437
447
|
"types": "./dist/festivalCard/server/index.d.ts",
|
|
438
448
|
"import": "./dist/festivalCard/server/index.mjs",
|