sa2kit 1.6.91 → 1.6.96

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.
Files changed (117) hide show
  1. package/dist/client-BlkUL2To.d.ts +26 -0
  2. package/dist/client-DpMIhrlS.d.mts +26 -0
  3. package/dist/huarongdao/index.d.mts +8 -0
  4. package/dist/huarongdao/index.d.ts +8 -0
  5. package/dist/huarongdao/index.js +360 -0
  6. package/dist/huarongdao/index.js.map +1 -0
  7. package/dist/huarongdao/index.mjs +338 -0
  8. package/dist/huarongdao/index.mjs.map +1 -0
  9. package/dist/huarongdao/logic/index.d.mts +11 -0
  10. package/dist/huarongdao/logic/index.d.ts +11 -0
  11. package/dist/huarongdao/logic/index.js +89 -0
  12. package/dist/huarongdao/logic/index.js.map +1 -0
  13. package/dist/huarongdao/logic/index.mjs +81 -0
  14. package/dist/huarongdao/logic/index.mjs.map +1 -0
  15. package/dist/huarongdao/routes/index.d.mts +38 -0
  16. package/dist/huarongdao/routes/index.d.ts +38 -0
  17. package/dist/huarongdao/routes/index.js +114 -0
  18. package/dist/huarongdao/routes/index.js.map +1 -0
  19. package/dist/huarongdao/routes/index.mjs +108 -0
  20. package/dist/huarongdao/routes/index.mjs.map +1 -0
  21. package/dist/huarongdao/server/index.d.mts +14 -0
  22. package/dist/huarongdao/server/index.d.ts +14 -0
  23. package/dist/huarongdao/server/index.js +60 -0
  24. package/dist/huarongdao/server/index.js.map +1 -0
  25. package/dist/huarongdao/server/index.mjs +57 -0
  26. package/dist/huarongdao/server/index.mjs.map +1 -0
  27. package/dist/huarongdao/service/index.d.mts +31 -0
  28. package/dist/huarongdao/service/index.d.ts +31 -0
  29. package/dist/huarongdao/service/index.js +45 -0
  30. package/dist/huarongdao/service/index.js.map +1 -0
  31. package/dist/huarongdao/service/index.mjs +42 -0
  32. package/dist/huarongdao/service/index.mjs.map +1 -0
  33. package/dist/huarongdao/types/index.d.mts +46 -0
  34. package/dist/huarongdao/types/index.d.ts +46 -0
  35. package/dist/huarongdao/types/index.js +4 -0
  36. package/dist/huarongdao/types/index.js.map +1 -0
  37. package/dist/huarongdao/types/index.mjs +3 -0
  38. package/dist/huarongdao/types/index.mjs.map +1 -0
  39. package/dist/huarongdao/ui/web/index.d.mts +3 -0
  40. package/dist/huarongdao/ui/web/index.d.ts +3 -0
  41. package/dist/huarongdao/ui/web/index.js +237 -0
  42. package/dist/huarongdao/ui/web/index.js.map +1 -0
  43. package/dist/huarongdao/ui/web/index.mjs +229 -0
  44. package/dist/huarongdao/ui/web/index.mjs.map +1 -0
  45. package/dist/index-B48rcsqv.d.ts +27 -0
  46. package/dist/index-BNqJdwX4.d.ts +37 -0
  47. package/dist/index-C7yh6b5Q.d.mts +17 -0
  48. package/dist/index-CDapUIT5.d.mts +51 -0
  49. package/dist/index-Cv9jlnNz.d.ts +17 -0
  50. package/dist/index-D3UbkUai.d.ts +51 -0
  51. package/dist/index-DOtQI_mz.d.mts +37 -0
  52. package/dist/index-Da2X78GE.d.mts +27 -0
  53. package/dist/index.d.mts +18 -0
  54. package/dist/index.d.ts +18 -0
  55. package/dist/index.js +1707 -79
  56. package/dist/index.js.map +1 -1
  57. package/dist/index.mjs +1675 -82
  58. package/dist/index.mjs.map +1 -1
  59. package/dist/mikuContest/index.d.mts +13 -0
  60. package/dist/mikuContest/index.d.ts +13 -0
  61. package/dist/mikuContest/index.js +1310 -0
  62. package/dist/mikuContest/index.js.map +1 -0
  63. package/dist/mikuContest/index.mjs +1253 -0
  64. package/dist/mikuContest/index.mjs.map +1 -0
  65. package/dist/mikuContest/logic/index.d.mts +32 -0
  66. package/dist/mikuContest/logic/index.d.ts +32 -0
  67. package/dist/mikuContest/logic/index.js +511 -0
  68. package/dist/mikuContest/logic/index.js.map +1 -0
  69. package/dist/mikuContest/logic/index.mjs +483 -0
  70. package/dist/mikuContest/logic/index.mjs.map +1 -0
  71. package/dist/mikuContest/routes/index.d.mts +80 -0
  72. package/dist/mikuContest/routes/index.d.ts +80 -0
  73. package/dist/mikuContest/routes/index.js +821 -0
  74. package/dist/mikuContest/routes/index.js.map +1 -0
  75. package/dist/mikuContest/routes/index.mjs +791 -0
  76. package/dist/mikuContest/routes/index.mjs.map +1 -0
  77. package/dist/mikuContest/server/index.d.mts +766 -0
  78. package/dist/mikuContest/server/index.d.ts +766 -0
  79. package/dist/mikuContest/server/index.js +705 -0
  80. package/dist/mikuContest/server/index.js.map +1 -0
  81. package/dist/mikuContest/server/index.mjs +672 -0
  82. package/dist/mikuContest/server/index.mjs.map +1 -0
  83. package/dist/mikuContest/service/index.d.mts +30 -0
  84. package/dist/mikuContest/service/index.d.ts +30 -0
  85. package/dist/mikuContest/service/index.js +139 -0
  86. package/dist/mikuContest/service/index.js.map +1 -0
  87. package/dist/mikuContest/service/index.mjs +135 -0
  88. package/dist/mikuContest/service/index.mjs.map +1 -0
  89. package/dist/mikuContest/types/index.d.mts +179 -0
  90. package/dist/mikuContest/types/index.d.ts +179 -0
  91. package/dist/mikuContest/types/index.js +4 -0
  92. package/dist/mikuContest/types/index.js.map +1 -0
  93. package/dist/mikuContest/types/index.mjs +3 -0
  94. package/dist/mikuContest/types/index.mjs.map +1 -0
  95. package/dist/mikuContest/ui/miniapp/index.d.mts +3 -0
  96. package/dist/mikuContest/ui/miniapp/index.d.ts +3 -0
  97. package/dist/mikuContest/ui/miniapp/index.js +566 -0
  98. package/dist/mikuContest/ui/miniapp/index.js.map +1 -0
  99. package/dist/mikuContest/ui/miniapp/index.mjs +540 -0
  100. package/dist/mikuContest/ui/miniapp/index.mjs.map +1 -0
  101. package/dist/mikuContest/ui/web/index.d.mts +4 -0
  102. package/dist/mikuContest/ui/web/index.d.ts +4 -0
  103. package/dist/mikuContest/ui/web/index.js +353 -0
  104. package/dist/mikuContest/ui/web/index.js.map +1 -0
  105. package/dist/mikuContest/ui/web/index.mjs +343 -0
  106. package/dist/mikuContest/ui/web/index.mjs.map +1 -0
  107. package/dist/qqbot/server/index.d.mts +126 -1
  108. package/dist/qqbot/server/index.d.ts +126 -1
  109. package/dist/qqbot/server/index.js +250 -0
  110. package/dist/qqbot/server/index.js.map +1 -1
  111. package/dist/qqbot/server/index.mjs +246 -1
  112. package/dist/qqbot/server/index.mjs.map +1 -1
  113. package/dist/service-D7DM1wW-.d.ts +38 -0
  114. package/dist/service-DPr2rlvH.d.mts +38 -0
  115. package/dist/types-BS7Xz09b.d.mts +14 -0
  116. package/dist/types-k4koMp4m.d.ts +14 -0
  117. package/package.json +76 -1
@@ -0,0 +1,38 @@
1
+ import { HuarongdaoStateSnapshot, HuarongdaoConfig } from '../types/index.mjs';
2
+ import { createHuarongdaoService } from '../server/index.mjs';
3
+ import { NextRequest, NextResponse } from 'next/server';
4
+
5
+ interface HuarongdaoRouteConfig {
6
+ service?: ReturnType<typeof createHuarongdaoService>;
7
+ }
8
+ declare const createGetSnapshotHandler: (config?: HuarongdaoRouteConfig) => (_req: NextRequest) => Promise<NextResponse<{
9
+ success: boolean;
10
+ data: HuarongdaoStateSnapshot;
11
+ }>>;
12
+ declare const createListConfigsHandler: (config?: HuarongdaoRouteConfig) => (_req: NextRequest) => Promise<NextResponse<{
13
+ success: boolean;
14
+ data: HuarongdaoConfig[];
15
+ }>>;
16
+ declare const createCreateConfigHandler: (config?: HuarongdaoRouteConfig) => (req: NextRequest) => Promise<NextResponse<{
17
+ success: boolean;
18
+ data: HuarongdaoConfig;
19
+ }> | NextResponse<{
20
+ success: boolean;
21
+ error: string;
22
+ }>>;
23
+ declare const createUpdateConfigHandler: (config?: HuarongdaoRouteConfig) => (req: NextRequest) => Promise<NextResponse<{
24
+ success: boolean;
25
+ data: HuarongdaoConfig;
26
+ }> | NextResponse<{
27
+ success: boolean;
28
+ error: string;
29
+ }>>;
30
+ declare const createDeleteConfigHandler: (config?: HuarongdaoRouteConfig) => (req: NextRequest) => Promise<NextResponse<{
31
+ success: boolean;
32
+ data: boolean;
33
+ }> | NextResponse<{
34
+ success: boolean;
35
+ error: string;
36
+ }>>;
37
+
38
+ export { type HuarongdaoRouteConfig, createCreateConfigHandler, createDeleteConfigHandler, createGetSnapshotHandler, createListConfigsHandler, createUpdateConfigHandler };
@@ -0,0 +1,38 @@
1
+ import { HuarongdaoStateSnapshot, HuarongdaoConfig } from '../types/index.js';
2
+ import { createHuarongdaoService } from '../server/index.js';
3
+ import { NextRequest, NextResponse } from 'next/server';
4
+
5
+ interface HuarongdaoRouteConfig {
6
+ service?: ReturnType<typeof createHuarongdaoService>;
7
+ }
8
+ declare const createGetSnapshotHandler: (config?: HuarongdaoRouteConfig) => (_req: NextRequest) => Promise<NextResponse<{
9
+ success: boolean;
10
+ data: HuarongdaoStateSnapshot;
11
+ }>>;
12
+ declare const createListConfigsHandler: (config?: HuarongdaoRouteConfig) => (_req: NextRequest) => Promise<NextResponse<{
13
+ success: boolean;
14
+ data: HuarongdaoConfig[];
15
+ }>>;
16
+ declare const createCreateConfigHandler: (config?: HuarongdaoRouteConfig) => (req: NextRequest) => Promise<NextResponse<{
17
+ success: boolean;
18
+ data: HuarongdaoConfig;
19
+ }> | NextResponse<{
20
+ success: boolean;
21
+ error: string;
22
+ }>>;
23
+ declare const createUpdateConfigHandler: (config?: HuarongdaoRouteConfig) => (req: NextRequest) => Promise<NextResponse<{
24
+ success: boolean;
25
+ data: HuarongdaoConfig;
26
+ }> | NextResponse<{
27
+ success: boolean;
28
+ error: string;
29
+ }>>;
30
+ declare const createDeleteConfigHandler: (config?: HuarongdaoRouteConfig) => (req: NextRequest) => Promise<NextResponse<{
31
+ success: boolean;
32
+ data: boolean;
33
+ }> | NextResponse<{
34
+ success: boolean;
35
+ error: string;
36
+ }>>;
37
+
38
+ export { type HuarongdaoRouteConfig, createCreateConfigHandler, createDeleteConfigHandler, createGetSnapshotHandler, createListConfigsHandler, createUpdateConfigHandler };
@@ -0,0 +1,114 @@
1
+ 'use strict';
2
+
3
+ var server = require('next/server');
4
+
5
+ // src/huarongdao/routes/index.ts
6
+
7
+ // src/huarongdao/server/service.ts
8
+ var id = () => `puzzle_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
9
+ var HuarongdaoService = class {
10
+ constructor() {
11
+ this.configs = /* @__PURE__ */ new Map();
12
+ }
13
+ listConfigs() {
14
+ return [...this.configs.values()];
15
+ }
16
+ getBySlug(slug) {
17
+ return [...this.configs.values()].find((c) => c.slug === slug) || null;
18
+ }
19
+ createConfig(input) {
20
+ const now = (/* @__PURE__ */ new Date()).toISOString();
21
+ const next = {
22
+ id: id(),
23
+ slug: input.slug,
24
+ name: input.name,
25
+ description: input.description,
26
+ status: "draft",
27
+ rows: input.rows,
28
+ cols: input.cols,
29
+ sourceImageUrl: input.sourceImageUrl,
30
+ showReference: input.showReference ?? true,
31
+ shuffleSteps: input.shuffleSteps ?? 80,
32
+ timeLimitSec: input.timeLimitSec,
33
+ startMode: input.startMode ?? "random-solvable",
34
+ initialTiles: input.initialTiles,
35
+ createdAt: now,
36
+ updatedAt: now
37
+ };
38
+ this.configs.set(next.id, next);
39
+ return next;
40
+ }
41
+ updateConfig(id2, patch) {
42
+ const cur = this.configs.get(id2);
43
+ if (!cur) throw new Error("\u914D\u7F6E\u4E0D\u5B58\u5728");
44
+ const next = { ...cur, ...patch, id: cur.id, updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
45
+ this.configs.set(id2, next);
46
+ return next;
47
+ }
48
+ deleteConfig(id2) {
49
+ this.configs.delete(id2);
50
+ }
51
+ getSnapshot() {
52
+ const configs = this.listConfigs();
53
+ return {
54
+ configs,
55
+ activeConfig: configs.find((c) => c.status === "active")
56
+ };
57
+ }
58
+ };
59
+ var createHuarongdaoService = () => new HuarongdaoService();
60
+
61
+ // src/huarongdao/routes/index.ts
62
+ var resolveService = (config) => config?.service || createHuarongdaoService();
63
+ var createGetSnapshotHandler = (config) => {
64
+ const service = resolveService(config);
65
+ return async (_req) => server.NextResponse.json({ success: true, data: service.getSnapshot() });
66
+ };
67
+ var createListConfigsHandler = (config) => {
68
+ const service = resolveService(config);
69
+ return async (_req) => server.NextResponse.json({ success: true, data: service.listConfigs() });
70
+ };
71
+ var createCreateConfigHandler = (config) => {
72
+ const service = resolveService(config);
73
+ return async (req) => {
74
+ try {
75
+ const body = await req.json();
76
+ const data = service.createConfig(body);
77
+ return server.NextResponse.json({ success: true, data });
78
+ } catch (e) {
79
+ return server.NextResponse.json({ success: false, error: e.message }, { status: 400 });
80
+ }
81
+ };
82
+ };
83
+ var createUpdateConfigHandler = (config) => {
84
+ const service = resolveService(config);
85
+ return async (req) => {
86
+ try {
87
+ const body = await req.json();
88
+ const data = service.updateConfig(body.id, body.patch || {});
89
+ return server.NextResponse.json({ success: true, data });
90
+ } catch (e) {
91
+ return server.NextResponse.json({ success: false, error: e.message }, { status: 400 });
92
+ }
93
+ };
94
+ };
95
+ var createDeleteConfigHandler = (config) => {
96
+ const service = resolveService(config);
97
+ return async (req) => {
98
+ try {
99
+ const body = await req.json();
100
+ service.deleteConfig(body.id);
101
+ return server.NextResponse.json({ success: true, data: true });
102
+ } catch (e) {
103
+ return server.NextResponse.json({ success: false, error: e.message }, { status: 400 });
104
+ }
105
+ };
106
+ };
107
+
108
+ exports.createCreateConfigHandler = createCreateConfigHandler;
109
+ exports.createDeleteConfigHandler = createDeleteConfigHandler;
110
+ exports.createGetSnapshotHandler = createGetSnapshotHandler;
111
+ exports.createListConfigsHandler = createListConfigsHandler;
112
+ exports.createUpdateConfigHandler = createUpdateConfigHandler;
113
+ //# sourceMappingURL=index.js.map
114
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/huarongdao/server/service.ts","../../../src/huarongdao/routes/index.ts"],"names":["id","NextResponse"],"mappings":"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","file":"index.js","sourcesContent":["import type { CreateHuarongdaoConfigInput, HuarongdaoConfig, HuarongdaoStateSnapshot } from '../types';\n\nconst id = () => `puzzle_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;\n\nexport class HuarongdaoService {\n private readonly configs = new Map<string, HuarongdaoConfig>();\n\n listConfigs(): HuarongdaoConfig[] {\n return [...this.configs.values()];\n }\n\n getBySlug(slug: string): HuarongdaoConfig | null {\n return [...this.configs.values()].find((c) => c.slug === slug) || null;\n }\n\n createConfig(input: CreateHuarongdaoConfigInput): HuarongdaoConfig {\n const now = new Date().toISOString();\n const next: HuarongdaoConfig = {\n id: id(),\n slug: input.slug,\n name: input.name,\n description: input.description,\n status: 'draft',\n rows: input.rows,\n cols: input.cols,\n sourceImageUrl: input.sourceImageUrl,\n showReference: input.showReference ?? true,\n shuffleSteps: input.shuffleSteps ?? 80,\n timeLimitSec: input.timeLimitSec,\n startMode: input.startMode ?? 'random-solvable',\n initialTiles: input.initialTiles,\n createdAt: now,\n updatedAt: now,\n };\n this.configs.set(next.id, next);\n return next;\n }\n\n updateConfig(id: string, patch: Partial<HuarongdaoConfig>): HuarongdaoConfig {\n const cur = this.configs.get(id);\n if (!cur) throw new Error('配置不存在');\n const next: HuarongdaoConfig = { ...cur, ...patch, id: cur.id, updatedAt: new Date().toISOString() };\n this.configs.set(id, next);\n return next;\n }\n\n deleteConfig(id: string): void {\n this.configs.delete(id);\n }\n\n getSnapshot(): HuarongdaoStateSnapshot {\n const configs = this.listConfigs();\n return {\n configs,\n activeConfig: configs.find((c) => c.status === 'active'),\n };\n }\n}\n\nexport const createHuarongdaoService = () => new HuarongdaoService();\n","import { NextResponse } from 'next/server';\nimport type { NextRequest } from 'next/server';\nimport { createHuarongdaoService } from '../server';\nimport type { CreateHuarongdaoConfigInput, HuarongdaoConfig } from '../types';\n\nexport interface HuarongdaoRouteConfig {\n service?: ReturnType<typeof createHuarongdaoService>;\n}\n\nconst resolveService = (config?: HuarongdaoRouteConfig) => config?.service || createHuarongdaoService();\n\nexport const createGetSnapshotHandler = (config?: HuarongdaoRouteConfig) => {\n const service = resolveService(config);\n return async (_req: NextRequest) => NextResponse.json({ success: true, data: service.getSnapshot() });\n};\n\nexport const createListConfigsHandler = (config?: HuarongdaoRouteConfig) => {\n const service = resolveService(config);\n return async (_req: NextRequest) => NextResponse.json({ success: true, data: service.listConfigs() });\n};\n\nexport const createCreateConfigHandler = (config?: HuarongdaoRouteConfig) => {\n const service = resolveService(config);\n return async (req: NextRequest) => {\n try {\n const body = (await req.json()) as CreateHuarongdaoConfigInput;\n const data = service.createConfig(body);\n return NextResponse.json({ success: true, data });\n } catch (e) {\n return NextResponse.json({ success: false, error: (e as Error).message }, { status: 400 });\n }\n };\n};\n\nexport const createUpdateConfigHandler = (config?: HuarongdaoRouteConfig) => {\n const service = resolveService(config);\n return async (req: NextRequest) => {\n try {\n const body = (await req.json()) as { id: string; patch: Partial<HuarongdaoConfig> };\n const data = service.updateConfig(body.id, body.patch || {});\n return NextResponse.json({ success: true, data });\n } catch (e) {\n return NextResponse.json({ success: false, error: (e as Error).message }, { status: 400 });\n }\n };\n};\n\nexport const createDeleteConfigHandler = (config?: HuarongdaoRouteConfig) => {\n const service = resolveService(config);\n return async (req: NextRequest) => {\n try {\n const body = (await req.json()) as { id: string };\n service.deleteConfig(body.id);\n return NextResponse.json({ success: true, data: true });\n } catch (e) {\n return NextResponse.json({ success: false, error: (e as Error).message }, { status: 400 });\n }\n };\n};\n"]}
@@ -0,0 +1,108 @@
1
+ import { NextResponse } from 'next/server';
2
+
3
+ // src/huarongdao/routes/index.ts
4
+
5
+ // src/huarongdao/server/service.ts
6
+ var id = () => `puzzle_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
7
+ var HuarongdaoService = class {
8
+ constructor() {
9
+ this.configs = /* @__PURE__ */ new Map();
10
+ }
11
+ listConfigs() {
12
+ return [...this.configs.values()];
13
+ }
14
+ getBySlug(slug) {
15
+ return [...this.configs.values()].find((c) => c.slug === slug) || null;
16
+ }
17
+ createConfig(input) {
18
+ const now = (/* @__PURE__ */ new Date()).toISOString();
19
+ const next = {
20
+ id: id(),
21
+ slug: input.slug,
22
+ name: input.name,
23
+ description: input.description,
24
+ status: "draft",
25
+ rows: input.rows,
26
+ cols: input.cols,
27
+ sourceImageUrl: input.sourceImageUrl,
28
+ showReference: input.showReference ?? true,
29
+ shuffleSteps: input.shuffleSteps ?? 80,
30
+ timeLimitSec: input.timeLimitSec,
31
+ startMode: input.startMode ?? "random-solvable",
32
+ initialTiles: input.initialTiles,
33
+ createdAt: now,
34
+ updatedAt: now
35
+ };
36
+ this.configs.set(next.id, next);
37
+ return next;
38
+ }
39
+ updateConfig(id2, patch) {
40
+ const cur = this.configs.get(id2);
41
+ if (!cur) throw new Error("\u914D\u7F6E\u4E0D\u5B58\u5728");
42
+ const next = { ...cur, ...patch, id: cur.id, updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
43
+ this.configs.set(id2, next);
44
+ return next;
45
+ }
46
+ deleteConfig(id2) {
47
+ this.configs.delete(id2);
48
+ }
49
+ getSnapshot() {
50
+ const configs = this.listConfigs();
51
+ return {
52
+ configs,
53
+ activeConfig: configs.find((c) => c.status === "active")
54
+ };
55
+ }
56
+ };
57
+ var createHuarongdaoService = () => new HuarongdaoService();
58
+
59
+ // src/huarongdao/routes/index.ts
60
+ var resolveService = (config) => config?.service || createHuarongdaoService();
61
+ var createGetSnapshotHandler = (config) => {
62
+ const service = resolveService(config);
63
+ return async (_req) => NextResponse.json({ success: true, data: service.getSnapshot() });
64
+ };
65
+ var createListConfigsHandler = (config) => {
66
+ const service = resolveService(config);
67
+ return async (_req) => NextResponse.json({ success: true, data: service.listConfigs() });
68
+ };
69
+ var createCreateConfigHandler = (config) => {
70
+ const service = resolveService(config);
71
+ return async (req) => {
72
+ try {
73
+ const body = await req.json();
74
+ const data = service.createConfig(body);
75
+ return NextResponse.json({ success: true, data });
76
+ } catch (e) {
77
+ return NextResponse.json({ success: false, error: e.message }, { status: 400 });
78
+ }
79
+ };
80
+ };
81
+ var createUpdateConfigHandler = (config) => {
82
+ const service = resolveService(config);
83
+ return async (req) => {
84
+ try {
85
+ const body = await req.json();
86
+ const data = service.updateConfig(body.id, body.patch || {});
87
+ return NextResponse.json({ success: true, data });
88
+ } catch (e) {
89
+ return NextResponse.json({ success: false, error: e.message }, { status: 400 });
90
+ }
91
+ };
92
+ };
93
+ var createDeleteConfigHandler = (config) => {
94
+ const service = resolveService(config);
95
+ return async (req) => {
96
+ try {
97
+ const body = await req.json();
98
+ service.deleteConfig(body.id);
99
+ return NextResponse.json({ success: true, data: true });
100
+ } catch (e) {
101
+ return NextResponse.json({ success: false, error: e.message }, { status: 400 });
102
+ }
103
+ };
104
+ };
105
+
106
+ export { createCreateConfigHandler, createDeleteConfigHandler, createGetSnapshotHandler, createListConfigsHandler, createUpdateConfigHandler };
107
+ //# sourceMappingURL=index.mjs.map
108
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/huarongdao/server/service.ts","../../../src/huarongdao/routes/index.ts"],"names":["id"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { CreateHuarongdaoConfigInput, HuarongdaoConfig, HuarongdaoStateSnapshot } from '../types';\n\nconst id = () => `puzzle_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;\n\nexport class HuarongdaoService {\n private readonly configs = new Map<string, HuarongdaoConfig>();\n\n listConfigs(): HuarongdaoConfig[] {\n return [...this.configs.values()];\n }\n\n getBySlug(slug: string): HuarongdaoConfig | null {\n return [...this.configs.values()].find((c) => c.slug === slug) || null;\n }\n\n createConfig(input: CreateHuarongdaoConfigInput): HuarongdaoConfig {\n const now = new Date().toISOString();\n const next: HuarongdaoConfig = {\n id: id(),\n slug: input.slug,\n name: input.name,\n description: input.description,\n status: 'draft',\n rows: input.rows,\n cols: input.cols,\n sourceImageUrl: input.sourceImageUrl,\n showReference: input.showReference ?? true,\n shuffleSteps: input.shuffleSteps ?? 80,\n timeLimitSec: input.timeLimitSec,\n startMode: input.startMode ?? 'random-solvable',\n initialTiles: input.initialTiles,\n createdAt: now,\n updatedAt: now,\n };\n this.configs.set(next.id, next);\n return next;\n }\n\n updateConfig(id: string, patch: Partial<HuarongdaoConfig>): HuarongdaoConfig {\n const cur = this.configs.get(id);\n if (!cur) throw new Error('配置不存在');\n const next: HuarongdaoConfig = { ...cur, ...patch, id: cur.id, updatedAt: new Date().toISOString() };\n this.configs.set(id, next);\n return next;\n }\n\n deleteConfig(id: string): void {\n this.configs.delete(id);\n }\n\n getSnapshot(): HuarongdaoStateSnapshot {\n const configs = this.listConfigs();\n return {\n configs,\n activeConfig: configs.find((c) => c.status === 'active'),\n };\n }\n}\n\nexport const createHuarongdaoService = () => new HuarongdaoService();\n","import { NextResponse } from 'next/server';\nimport type { NextRequest } from 'next/server';\nimport { createHuarongdaoService } from '../server';\nimport type { CreateHuarongdaoConfigInput, HuarongdaoConfig } from '../types';\n\nexport interface HuarongdaoRouteConfig {\n service?: ReturnType<typeof createHuarongdaoService>;\n}\n\nconst resolveService = (config?: HuarongdaoRouteConfig) => config?.service || createHuarongdaoService();\n\nexport const createGetSnapshotHandler = (config?: HuarongdaoRouteConfig) => {\n const service = resolveService(config);\n return async (_req: NextRequest) => NextResponse.json({ success: true, data: service.getSnapshot() });\n};\n\nexport const createListConfigsHandler = (config?: HuarongdaoRouteConfig) => {\n const service = resolveService(config);\n return async (_req: NextRequest) => NextResponse.json({ success: true, data: service.listConfigs() });\n};\n\nexport const createCreateConfigHandler = (config?: HuarongdaoRouteConfig) => {\n const service = resolveService(config);\n return async (req: NextRequest) => {\n try {\n const body = (await req.json()) as CreateHuarongdaoConfigInput;\n const data = service.createConfig(body);\n return NextResponse.json({ success: true, data });\n } catch (e) {\n return NextResponse.json({ success: false, error: (e as Error).message }, { status: 400 });\n }\n };\n};\n\nexport const createUpdateConfigHandler = (config?: HuarongdaoRouteConfig) => {\n const service = resolveService(config);\n return async (req: NextRequest) => {\n try {\n const body = (await req.json()) as { id: string; patch: Partial<HuarongdaoConfig> };\n const data = service.updateConfig(body.id, body.patch || {});\n return NextResponse.json({ success: true, data });\n } catch (e) {\n return NextResponse.json({ success: false, error: (e as Error).message }, { status: 400 });\n }\n };\n};\n\nexport const createDeleteConfigHandler = (config?: HuarongdaoRouteConfig) => {\n const service = resolveService(config);\n return async (req: NextRequest) => {\n try {\n const body = (await req.json()) as { id: string };\n service.deleteConfig(body.id);\n return NextResponse.json({ success: true, data: true });\n } catch (e) {\n return NextResponse.json({ success: false, error: (e as Error).message }, { status: 400 });\n }\n };\n};\n"]}
@@ -0,0 +1,14 @@
1
+ import { HuarongdaoConfig, CreateHuarongdaoConfigInput, HuarongdaoStateSnapshot } from '../types/index.mjs';
2
+
3
+ declare class HuarongdaoService {
4
+ private readonly configs;
5
+ listConfigs(): HuarongdaoConfig[];
6
+ getBySlug(slug: string): HuarongdaoConfig | null;
7
+ createConfig(input: CreateHuarongdaoConfigInput): HuarongdaoConfig;
8
+ updateConfig(id: string, patch: Partial<HuarongdaoConfig>): HuarongdaoConfig;
9
+ deleteConfig(id: string): void;
10
+ getSnapshot(): HuarongdaoStateSnapshot;
11
+ }
12
+ declare const createHuarongdaoService: () => HuarongdaoService;
13
+
14
+ export { HuarongdaoService, createHuarongdaoService };
@@ -0,0 +1,14 @@
1
+ import { HuarongdaoConfig, CreateHuarongdaoConfigInput, HuarongdaoStateSnapshot } from '../types/index.js';
2
+
3
+ declare class HuarongdaoService {
4
+ private readonly configs;
5
+ listConfigs(): HuarongdaoConfig[];
6
+ getBySlug(slug: string): HuarongdaoConfig | null;
7
+ createConfig(input: CreateHuarongdaoConfigInput): HuarongdaoConfig;
8
+ updateConfig(id: string, patch: Partial<HuarongdaoConfig>): HuarongdaoConfig;
9
+ deleteConfig(id: string): void;
10
+ getSnapshot(): HuarongdaoStateSnapshot;
11
+ }
12
+ declare const createHuarongdaoService: () => HuarongdaoService;
13
+
14
+ export { HuarongdaoService, createHuarongdaoService };
@@ -0,0 +1,60 @@
1
+ 'use strict';
2
+
3
+ // src/huarongdao/server/service.ts
4
+ var id = () => `puzzle_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
5
+ var HuarongdaoService = class {
6
+ constructor() {
7
+ this.configs = /* @__PURE__ */ new Map();
8
+ }
9
+ listConfigs() {
10
+ return [...this.configs.values()];
11
+ }
12
+ getBySlug(slug) {
13
+ return [...this.configs.values()].find((c) => c.slug === slug) || null;
14
+ }
15
+ createConfig(input) {
16
+ const now = (/* @__PURE__ */ new Date()).toISOString();
17
+ const next = {
18
+ id: id(),
19
+ slug: input.slug,
20
+ name: input.name,
21
+ description: input.description,
22
+ status: "draft",
23
+ rows: input.rows,
24
+ cols: input.cols,
25
+ sourceImageUrl: input.sourceImageUrl,
26
+ showReference: input.showReference ?? true,
27
+ shuffleSteps: input.shuffleSteps ?? 80,
28
+ timeLimitSec: input.timeLimitSec,
29
+ startMode: input.startMode ?? "random-solvable",
30
+ initialTiles: input.initialTiles,
31
+ createdAt: now,
32
+ updatedAt: now
33
+ };
34
+ this.configs.set(next.id, next);
35
+ return next;
36
+ }
37
+ updateConfig(id2, patch) {
38
+ const cur = this.configs.get(id2);
39
+ if (!cur) throw new Error("\u914D\u7F6E\u4E0D\u5B58\u5728");
40
+ const next = { ...cur, ...patch, id: cur.id, updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
41
+ this.configs.set(id2, next);
42
+ return next;
43
+ }
44
+ deleteConfig(id2) {
45
+ this.configs.delete(id2);
46
+ }
47
+ getSnapshot() {
48
+ const configs = this.listConfigs();
49
+ return {
50
+ configs,
51
+ activeConfig: configs.find((c) => c.status === "active")
52
+ };
53
+ }
54
+ };
55
+ var createHuarongdaoService = () => new HuarongdaoService();
56
+
57
+ exports.HuarongdaoService = HuarongdaoService;
58
+ exports.createHuarongdaoService = createHuarongdaoService;
59
+ //# sourceMappingURL=index.js.map
60
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/huarongdao/server/service.ts"],"names":["id"],"mappings":";;;AAEA,IAAM,KAAK,MAAM,CAAA,OAAA,EAAU,KAAK,GAAA,EAAI,CAAE,SAAS,EAAE,CAAC,IAAI,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,EAAE,EAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAErF,IAAM,oBAAN,MAAwB;AAAA,EAAxB,WAAA,GAAA;AACL,IAAA,IAAA,CAAiB,OAAA,uBAAc,GAAA,EAA8B;AAAA,EAAA;AAAA,EAE7D,WAAA,GAAkC;AAChC,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAAA,EAClC;AAAA,EAEA,UAAU,IAAA,EAAuC;AAC/C,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,IAAI,CAAA,IAAK,IAAA;AAAA,EACpE;AAAA,EAEA,aAAa,KAAA,EAAsD;AACjE,IAAA,MAAM,GAAA,GAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACnC,IAAA,MAAM,IAAA,GAAyB;AAAA,MAC7B,IAAI,EAAA,EAAG;AAAA,MACP,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,MAAA,EAAQ,OAAA;AAAA,MACR,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,gBAAgB,KAAA,CAAM,cAAA;AAAA,MACtB,aAAA,EAAe,MAAM,aAAA,IAAiB,IAAA;AAAA,MACtC,YAAA,EAAc,MAAM,YAAA,IAAgB,EAAA;AAAA,MACpC,cAAc,KAAA,CAAM,YAAA;AAAA,MACpB,SAAA,EAAW,MAAM,SAAA,IAAa,iBAAA;AAAA,MAC9B,cAAc,KAAA,CAAM,YAAA;AAAA,MACpB,SAAA,EAAW,GAAA;AAAA,MACX,SAAA,EAAW;AAAA,KACb;AACA,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAC9B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,YAAA,CAAaA,KAAY,KAAA,EAAoD;AAC3E,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIA,GAAE,CAAA;AAC/B,IAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,gCAAO,CAAA;AACjC,IAAA,MAAM,IAAA,GAAyB,EAAE,GAAG,GAAA,EAAK,GAAG,KAAA,EAAO,EAAA,EAAI,GAAA,CAAI,EAAA,EAAI,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,aAAY,EAAE;AACnG,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIA,GAAAA,EAAI,IAAI,CAAA;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,aAAaA,GAAAA,EAAkB;AAC7B,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAOA,GAAE,CAAA;AAAA,EACxB;AAAA,EAEA,WAAA,GAAuC;AACrC,IAAA,MAAM,OAAA,GAAU,KAAK,WAAA,EAAY;AACjC,IAAA,OAAO;AAAA,MACL,OAAA;AAAA,MACA,cAAc,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,QAAQ;AAAA,KACzD;AAAA,EACF;AACF;AAEO,IAAM,uBAAA,GAA0B,MAAM,IAAI,iBAAA","file":"index.js","sourcesContent":["import type { CreateHuarongdaoConfigInput, HuarongdaoConfig, HuarongdaoStateSnapshot } from '../types';\n\nconst id = () => `puzzle_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;\n\nexport class HuarongdaoService {\n private readonly configs = new Map<string, HuarongdaoConfig>();\n\n listConfigs(): HuarongdaoConfig[] {\n return [...this.configs.values()];\n }\n\n getBySlug(slug: string): HuarongdaoConfig | null {\n return [...this.configs.values()].find((c) => c.slug === slug) || null;\n }\n\n createConfig(input: CreateHuarongdaoConfigInput): HuarongdaoConfig {\n const now = new Date().toISOString();\n const next: HuarongdaoConfig = {\n id: id(),\n slug: input.slug,\n name: input.name,\n description: input.description,\n status: 'draft',\n rows: input.rows,\n cols: input.cols,\n sourceImageUrl: input.sourceImageUrl,\n showReference: input.showReference ?? true,\n shuffleSteps: input.shuffleSteps ?? 80,\n timeLimitSec: input.timeLimitSec,\n startMode: input.startMode ?? 'random-solvable',\n initialTiles: input.initialTiles,\n createdAt: now,\n updatedAt: now,\n };\n this.configs.set(next.id, next);\n return next;\n }\n\n updateConfig(id: string, patch: Partial<HuarongdaoConfig>): HuarongdaoConfig {\n const cur = this.configs.get(id);\n if (!cur) throw new Error('配置不存在');\n const next: HuarongdaoConfig = { ...cur, ...patch, id: cur.id, updatedAt: new Date().toISOString() };\n this.configs.set(id, next);\n return next;\n }\n\n deleteConfig(id: string): void {\n this.configs.delete(id);\n }\n\n getSnapshot(): HuarongdaoStateSnapshot {\n const configs = this.listConfigs();\n return {\n configs,\n activeConfig: configs.find((c) => c.status === 'active'),\n };\n }\n}\n\nexport const createHuarongdaoService = () => new HuarongdaoService();\n"]}
@@ -0,0 +1,57 @@
1
+ // src/huarongdao/server/service.ts
2
+ var id = () => `puzzle_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
3
+ var HuarongdaoService = class {
4
+ constructor() {
5
+ this.configs = /* @__PURE__ */ new Map();
6
+ }
7
+ listConfigs() {
8
+ return [...this.configs.values()];
9
+ }
10
+ getBySlug(slug) {
11
+ return [...this.configs.values()].find((c) => c.slug === slug) || null;
12
+ }
13
+ createConfig(input) {
14
+ const now = (/* @__PURE__ */ new Date()).toISOString();
15
+ const next = {
16
+ id: id(),
17
+ slug: input.slug,
18
+ name: input.name,
19
+ description: input.description,
20
+ status: "draft",
21
+ rows: input.rows,
22
+ cols: input.cols,
23
+ sourceImageUrl: input.sourceImageUrl,
24
+ showReference: input.showReference ?? true,
25
+ shuffleSteps: input.shuffleSteps ?? 80,
26
+ timeLimitSec: input.timeLimitSec,
27
+ startMode: input.startMode ?? "random-solvable",
28
+ initialTiles: input.initialTiles,
29
+ createdAt: now,
30
+ updatedAt: now
31
+ };
32
+ this.configs.set(next.id, next);
33
+ return next;
34
+ }
35
+ updateConfig(id2, patch) {
36
+ const cur = this.configs.get(id2);
37
+ if (!cur) throw new Error("\u914D\u7F6E\u4E0D\u5B58\u5728");
38
+ const next = { ...cur, ...patch, id: cur.id, updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
39
+ this.configs.set(id2, next);
40
+ return next;
41
+ }
42
+ deleteConfig(id2) {
43
+ this.configs.delete(id2);
44
+ }
45
+ getSnapshot() {
46
+ const configs = this.listConfigs();
47
+ return {
48
+ configs,
49
+ activeConfig: configs.find((c) => c.status === "active")
50
+ };
51
+ }
52
+ };
53
+ var createHuarongdaoService = () => new HuarongdaoService();
54
+
55
+ export { HuarongdaoService, createHuarongdaoService };
56
+ //# sourceMappingURL=index.mjs.map
57
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/huarongdao/server/service.ts"],"names":["id"],"mappings":";AAEA,IAAM,KAAK,MAAM,CAAA,OAAA,EAAU,KAAK,GAAA,EAAI,CAAE,SAAS,EAAE,CAAC,IAAI,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,EAAE,EAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAErF,IAAM,oBAAN,MAAwB;AAAA,EAAxB,WAAA,GAAA;AACL,IAAA,IAAA,CAAiB,OAAA,uBAAc,GAAA,EAA8B;AAAA,EAAA;AAAA,EAE7D,WAAA,GAAkC;AAChC,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAAA,EAClC;AAAA,EAEA,UAAU,IAAA,EAAuC;AAC/C,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,IAAI,CAAA,IAAK,IAAA;AAAA,EACpE;AAAA,EAEA,aAAa,KAAA,EAAsD;AACjE,IAAA,MAAM,GAAA,GAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACnC,IAAA,MAAM,IAAA,GAAyB;AAAA,MAC7B,IAAI,EAAA,EAAG;AAAA,MACP,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,MAAA,EAAQ,OAAA;AAAA,MACR,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,gBAAgB,KAAA,CAAM,cAAA;AAAA,MACtB,aAAA,EAAe,MAAM,aAAA,IAAiB,IAAA;AAAA,MACtC,YAAA,EAAc,MAAM,YAAA,IAAgB,EAAA;AAAA,MACpC,cAAc,KAAA,CAAM,YAAA;AAAA,MACpB,SAAA,EAAW,MAAM,SAAA,IAAa,iBAAA;AAAA,MAC9B,cAAc,KAAA,CAAM,YAAA;AAAA,MACpB,SAAA,EAAW,GAAA;AAAA,MACX,SAAA,EAAW;AAAA,KACb;AACA,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAC9B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,YAAA,CAAaA,KAAY,KAAA,EAAoD;AAC3E,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIA,GAAE,CAAA;AAC/B,IAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,gCAAO,CAAA;AACjC,IAAA,MAAM,IAAA,GAAyB,EAAE,GAAG,GAAA,EAAK,GAAG,KAAA,EAAO,EAAA,EAAI,GAAA,CAAI,EAAA,EAAI,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,aAAY,EAAE;AACnG,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIA,GAAAA,EAAI,IAAI,CAAA;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,aAAaA,GAAAA,EAAkB;AAC7B,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAOA,GAAE,CAAA;AAAA,EACxB;AAAA,EAEA,WAAA,GAAuC;AACrC,IAAA,MAAM,OAAA,GAAU,KAAK,WAAA,EAAY;AACjC,IAAA,OAAO;AAAA,MACL,OAAA;AAAA,MACA,cAAc,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,QAAQ;AAAA,KACzD;AAAA,EACF;AACF;AAEO,IAAM,uBAAA,GAA0B,MAAM,IAAI,iBAAA","file":"index.mjs","sourcesContent":["import type { CreateHuarongdaoConfigInput, HuarongdaoConfig, HuarongdaoStateSnapshot } from '../types';\n\nconst id = () => `puzzle_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;\n\nexport class HuarongdaoService {\n private readonly configs = new Map<string, HuarongdaoConfig>();\n\n listConfigs(): HuarongdaoConfig[] {\n return [...this.configs.values()];\n }\n\n getBySlug(slug: string): HuarongdaoConfig | null {\n return [...this.configs.values()].find((c) => c.slug === slug) || null;\n }\n\n createConfig(input: CreateHuarongdaoConfigInput): HuarongdaoConfig {\n const now = new Date().toISOString();\n const next: HuarongdaoConfig = {\n id: id(),\n slug: input.slug,\n name: input.name,\n description: input.description,\n status: 'draft',\n rows: input.rows,\n cols: input.cols,\n sourceImageUrl: input.sourceImageUrl,\n showReference: input.showReference ?? true,\n shuffleSteps: input.shuffleSteps ?? 80,\n timeLimitSec: input.timeLimitSec,\n startMode: input.startMode ?? 'random-solvable',\n initialTiles: input.initialTiles,\n createdAt: now,\n updatedAt: now,\n };\n this.configs.set(next.id, next);\n return next;\n }\n\n updateConfig(id: string, patch: Partial<HuarongdaoConfig>): HuarongdaoConfig {\n const cur = this.configs.get(id);\n if (!cur) throw new Error('配置不存在');\n const next: HuarongdaoConfig = { ...cur, ...patch, id: cur.id, updatedAt: new Date().toISOString() };\n this.configs.set(id, next);\n return next;\n }\n\n deleteConfig(id: string): void {\n this.configs.delete(id);\n }\n\n getSnapshot(): HuarongdaoStateSnapshot {\n const configs = this.listConfigs();\n return {\n configs,\n activeConfig: configs.find((c) => c.status === 'active'),\n };\n }\n}\n\nexport const createHuarongdaoService = () => new HuarongdaoService();\n"]}
@@ -0,0 +1,31 @@
1
+ import { HuarongdaoStateSnapshot, HuarongdaoConfig, CreateHuarongdaoConfigInput } from '../types/index.mjs';
2
+
3
+ type HttpMethod = 'GET' | 'POST' | 'PATCH' | 'DELETE';
4
+ interface Requester {
5
+ <T>(url: string, options?: {
6
+ method?: HttpMethod;
7
+ body?: unknown;
8
+ }): Promise<T>;
9
+ }
10
+ declare const createHuarongdaoApiClient: (basePath: string, requester: Requester) => {
11
+ getSnapshot(): Promise<HuarongdaoStateSnapshot>;
12
+ listConfigs(): Promise<HuarongdaoConfig[]>;
13
+ createConfig(input: CreateHuarongdaoConfigInput): Promise<HuarongdaoConfig>;
14
+ updateConfig(id: string, patch: Partial<HuarongdaoConfig>): Promise<HuarongdaoConfig>;
15
+ deleteConfig(id: string): Promise<boolean>;
16
+ };
17
+
18
+ interface HuarongdaoWebClientOptions {
19
+ baseUrl?: string;
20
+ basePath?: string;
21
+ headers?: Record<string, string>;
22
+ }
23
+ declare const createHuarongdaoWebClient: (options?: HuarongdaoWebClientOptions) => {
24
+ getSnapshot(): Promise<HuarongdaoStateSnapshot>;
25
+ listConfigs(): Promise<HuarongdaoConfig[]>;
26
+ createConfig(input: CreateHuarongdaoConfigInput): Promise<HuarongdaoConfig>;
27
+ updateConfig(id: string, patch: Partial<HuarongdaoConfig>): Promise<HuarongdaoConfig>;
28
+ deleteConfig(id: string): Promise<boolean>;
29
+ };
30
+
31
+ export { type HttpMethod, type HuarongdaoWebClientOptions, type Requester, createHuarongdaoApiClient, createHuarongdaoWebClient };
@@ -0,0 +1,31 @@
1
+ import { HuarongdaoStateSnapshot, HuarongdaoConfig, CreateHuarongdaoConfigInput } from '../types/index.js';
2
+
3
+ type HttpMethod = 'GET' | 'POST' | 'PATCH' | 'DELETE';
4
+ interface Requester {
5
+ <T>(url: string, options?: {
6
+ method?: HttpMethod;
7
+ body?: unknown;
8
+ }): Promise<T>;
9
+ }
10
+ declare const createHuarongdaoApiClient: (basePath: string, requester: Requester) => {
11
+ getSnapshot(): Promise<HuarongdaoStateSnapshot>;
12
+ listConfigs(): Promise<HuarongdaoConfig[]>;
13
+ createConfig(input: CreateHuarongdaoConfigInput): Promise<HuarongdaoConfig>;
14
+ updateConfig(id: string, patch: Partial<HuarongdaoConfig>): Promise<HuarongdaoConfig>;
15
+ deleteConfig(id: string): Promise<boolean>;
16
+ };
17
+
18
+ interface HuarongdaoWebClientOptions {
19
+ baseUrl?: string;
20
+ basePath?: string;
21
+ headers?: Record<string, string>;
22
+ }
23
+ declare const createHuarongdaoWebClient: (options?: HuarongdaoWebClientOptions) => {
24
+ getSnapshot(): Promise<HuarongdaoStateSnapshot>;
25
+ listConfigs(): Promise<HuarongdaoConfig[]>;
26
+ createConfig(input: CreateHuarongdaoConfigInput): Promise<HuarongdaoConfig>;
27
+ updateConfig(id: string, patch: Partial<HuarongdaoConfig>): Promise<HuarongdaoConfig>;
28
+ deleteConfig(id: string): Promise<boolean>;
29
+ };
30
+
31
+ export { type HttpMethod, type HuarongdaoWebClientOptions, type Requester, createHuarongdaoApiClient, createHuarongdaoWebClient };
@@ -0,0 +1,45 @@
1
+ 'use strict';
2
+
3
+ // src/huarongdao/service/api/client.ts
4
+ var unwrap = (result) => {
5
+ if (!result.success || result.data === void 0) throw new Error(result.error || "\u8BF7\u6C42\u5931\u8D25");
6
+ return result.data;
7
+ };
8
+ var createHuarongdaoApiClient = (basePath, requester2) => ({
9
+ async getSnapshot() {
10
+ return unwrap(await requester2(`${basePath}/snapshot`, { method: "GET" }));
11
+ },
12
+ async listConfigs() {
13
+ return unwrap(await requester2(`${basePath}/configs`, { method: "GET" }));
14
+ },
15
+ async createConfig(input) {
16
+ return unwrap(await requester2(`${basePath}/configs`, { method: "POST", body: input }));
17
+ },
18
+ async updateConfig(id, patch) {
19
+ return unwrap(await requester2(`${basePath}/configs`, { method: "PATCH", body: { id, patch } }));
20
+ },
21
+ async deleteConfig(id) {
22
+ return unwrap(await requester2(`${basePath}/configs`, { method: "DELETE", body: { id } }));
23
+ }
24
+ });
25
+
26
+ // src/huarongdao/service/web/client.ts
27
+ var requester = (options) => {
28
+ const baseUrl = options.baseUrl || "";
29
+ return async (url, req) => {
30
+ const res = await fetch(`${baseUrl}${url}`, {
31
+ method: req?.method || "GET",
32
+ headers: { "Content-Type": "application/json", ...options.headers || {} },
33
+ body: req?.body ? JSON.stringify(req.body) : void 0
34
+ });
35
+ return await res.json();
36
+ };
37
+ };
38
+ var createHuarongdaoWebClient = (options = {}) => {
39
+ return createHuarongdaoApiClient(options.basePath || "/api/huarongdao", requester(options));
40
+ };
41
+
42
+ exports.createHuarongdaoApiClient = createHuarongdaoApiClient;
43
+ exports.createHuarongdaoWebClient = createHuarongdaoWebClient;
44
+ //# sourceMappingURL=index.js.map
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/huarongdao/service/api/client.ts","../../../src/huarongdao/service/web/client.ts"],"names":["requester"],"mappings":";;;AAaA,IAAM,MAAA,GAAS,CAAI,MAAA,KAA8B;AAC/C,EAAA,IAAI,CAAC,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,IAAA,KAAS,MAAA,EAAW,MAAM,IAAI,KAAA,CAAM,MAAA,CAAO,KAAA,IAAS,0BAAM,CAAA;AACxF,EAAA,OAAO,MAAA,CAAO,IAAA;AAChB,CAAA;AAEO,IAAM,yBAAA,GAA4B,CAAC,QAAA,EAAkBA,UAAAA,MAA0B;AAAA,EACpF,MAAM,WAAA,GAAgD;AACpD,IAAA,OAAO,MAAA,CAAO,MAAMA,UAAAA,CAAgD,CAAA,EAAG,QAAQ,aAAa,EAAE,MAAA,EAAQ,KAAA,EAAO,CAAC,CAAA;AAAA,EAChH,CAAA;AAAA,EACA,MAAM,WAAA,GAA2C;AAC/C,IAAA,OAAO,MAAA,CAAO,MAAMA,UAAAA,CAA2C,CAAA,EAAG,QAAQ,YAAY,EAAE,MAAA,EAAQ,KAAA,EAAO,CAAC,CAAA;AAAA,EAC1G,CAAA;AAAA,EACA,MAAM,aAAa,KAAA,EAA+D;AAChF,IAAA,OAAO,MAAA,CAAO,MAAMA,UAAAA,CAAyC,CAAA,EAAG,QAAQ,CAAA,QAAA,CAAA,EAAY,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAO,CAAC,CAAA;AAAA,EACtH,CAAA;AAAA,EACA,MAAM,YAAA,CAAa,EAAA,EAAY,KAAA,EAA6D;AAC1F,IAAA,OAAO,MAAA,CAAO,MAAMA,UAAAA,CAAyC,CAAA,EAAG,QAAQ,CAAA,QAAA,CAAA,EAAY,EAAE,MAAA,EAAQ,OAAA,EAAS,MAAM,EAAE,EAAA,EAAI,KAAA,EAAM,EAAG,CAAC,CAAA;AAAA,EAC/H,CAAA;AAAA,EACA,MAAM,aAAa,EAAA,EAA8B;AAC/C,IAAA,OAAO,MAAA,CAAO,MAAMA,UAAAA,CAAgC,CAAA,EAAG,QAAQ,CAAA,QAAA,CAAA,EAAY,EAAE,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,EAAE,EAAA,EAAG,EAAG,CAAC,CAAA;AAAA,EAChH;AACF,CAAA;;;AC1BA,IAAM,SAAA,GAAY,CAAC,OAAA,KAAmD;AACpE,EAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,EAAA;AACnC,EAAA,OAAO,OAAU,KAAa,GAAA,KAAuF;AACnH,IAAA,MAAM,MAAM,MAAM,KAAA,CAAM,GAAG,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI;AAAA,MAC1C,MAAA,EAAQ,KAAK,MAAA,IAAU,KAAA;AAAA,MACvB,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAoB,GAAI,OAAA,CAAQ,OAAA,IAAW,EAAC,EAAG;AAAA,MAC1E,MAAM,GAAA,EAAK,IAAA,GAAO,KAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,GAAI;AAAA,KAC9C,CAAA;AACD,IAAA,OAAQ,MAAM,IAAI,IAAA,EAAK;AAAA,EACzB,CAAA;AACF,CAAA;AAEO,IAAM,yBAAA,GAA4B,CAAC,OAAA,GAAsC,EAAC,KAAM;AACrF,EAAA,OAAO,0BAA0B,OAAA,CAAQ,QAAA,IAAY,iBAAA,EAAmB,SAAA,CAAU,OAAO,CAAC,CAAA;AAC5F","file":"index.js","sourcesContent":["import type { CreateHuarongdaoConfigInput, HuarongdaoConfig, HuarongdaoStateSnapshot } from '../../types';\n\nexport type HttpMethod = 'GET' | 'POST' | 'PATCH' | 'DELETE';\nexport interface Requester {\n <T>(url: string, options?: { method?: HttpMethod; body?: unknown }): Promise<T>;\n}\n\ninterface ApiEnvelope<T> {\n success: boolean;\n data?: T;\n error?: string;\n}\n\nconst unwrap = <T>(result: ApiEnvelope<T>): T => {\n if (!result.success || result.data === undefined) throw new Error(result.error || '请求失败');\n return result.data;\n};\n\nexport const createHuarongdaoApiClient = (basePath: string, requester: Requester) => ({\n async getSnapshot(): Promise<HuarongdaoStateSnapshot> {\n return unwrap(await requester<ApiEnvelope<HuarongdaoStateSnapshot>>(`${basePath}/snapshot`, { method: 'GET' }));\n },\n async listConfigs(): Promise<HuarongdaoConfig[]> {\n return unwrap(await requester<ApiEnvelope<HuarongdaoConfig[]>>(`${basePath}/configs`, { method: 'GET' }));\n },\n async createConfig(input: CreateHuarongdaoConfigInput): Promise<HuarongdaoConfig> {\n return unwrap(await requester<ApiEnvelope<HuarongdaoConfig>>(`${basePath}/configs`, { method: 'POST', body: input }));\n },\n async updateConfig(id: string, patch: Partial<HuarongdaoConfig>): Promise<HuarongdaoConfig> {\n return unwrap(await requester<ApiEnvelope<HuarongdaoConfig>>(`${basePath}/configs`, { method: 'PATCH', body: { id, patch } }));\n },\n async deleteConfig(id: string): Promise<boolean> {\n return unwrap(await requester<ApiEnvelope<boolean>>(`${basePath}/configs`, { method: 'DELETE', body: { id } }));\n },\n});\n","import { createHuarongdaoApiClient, type Requester } from '../api';\n\nexport interface HuarongdaoWebClientOptions {\n baseUrl?: string;\n basePath?: string;\n headers?: Record<string, string>;\n}\n\nconst requester = (options: HuarongdaoWebClientOptions): Requester => {\n const baseUrl = options.baseUrl || '';\n return async <T>(url: string, req?: { method?: 'GET' | 'POST' | 'PATCH' | 'DELETE'; body?: unknown }): Promise<T> => {\n const res = await fetch(`${baseUrl}${url}`, {\n method: req?.method || 'GET',\n headers: { 'Content-Type': 'application/json', ...(options.headers || {}) },\n body: req?.body ? JSON.stringify(req.body) : undefined,\n });\n return (await res.json()) as T;\n };\n};\n\nexport const createHuarongdaoWebClient = (options: HuarongdaoWebClientOptions = {}) => {\n return createHuarongdaoApiClient(options.basePath || '/api/huarongdao', requester(options));\n};\n"]}