sa2kit 1.6.48 → 1.6.49

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.
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkJ6KKMP7V_js = require('../../chunk-J6KKMP7V.js');
3
+ var chunk7JN25DJB_js = require('../../chunk-7JN25DJB.js');
4
4
  require('../../chunk-XYQMAF7H.js');
5
- require('../../chunk-ERNZE5CJ.js');
5
+ require('../../chunk-IZOIVYOW.js');
6
6
  var chunkVLZ5N6XZ_js = require('../../chunk-VLZ5N6XZ.js');
7
7
  require('../../chunk-M4HGHTIC.js');
8
8
  require('../../chunk-6AHYPPUP.js');
@@ -58,26 +58,26 @@ var ArtworkMigrator = class {
58
58
  console.log("\u{1F50D} [ArtworkMigrator] \u5206\u6790\u73B0\u6709\u6570\u636E...");
59
59
  const whereConditions = [];
60
60
  if (this.config.collectionIds && this.config.collectionIds.length > 0) {
61
- whereConditions.push(drizzleOrm.inArray(chunkJ6KKMP7V_js.comicUniverseArtworks.collectionId, this.config.collectionIds));
61
+ whereConditions.push(drizzleOrm.inArray(chunk7JN25DJB_js.comicUniverseArtworks.collectionId, this.config.collectionIds));
62
62
  }
63
63
  whereConditions.push(
64
64
  drizzleOrm.and(
65
65
  drizzleOrm.or(
66
- drizzleOrm.isNull(chunkJ6KKMP7V_js.comicUniverseArtworks.fileId),
67
- drizzleOrm.eq(chunkJ6KKMP7V_js.comicUniverseArtworks.migrationStatus, "pending"),
68
- drizzleOrm.eq(chunkJ6KKMP7V_js.comicUniverseArtworks.migrationStatus, "failed")
66
+ drizzleOrm.isNull(chunk7JN25DJB_js.comicUniverseArtworks.fileId),
67
+ drizzleOrm.eq(chunk7JN25DJB_js.comicUniverseArtworks.migrationStatus, "pending"),
68
+ drizzleOrm.eq(chunk7JN25DJB_js.comicUniverseArtworks.migrationStatus, "failed")
69
69
  ),
70
70
  // 必须有image数据(兼容可能的null值)
71
- drizzleOrm.eq(chunkJ6KKMP7V_js.comicUniverseArtworks.isActive, true)
71
+ drizzleOrm.eq(chunk7JN25DJB_js.comicUniverseArtworks.isActive, true)
72
72
  )
73
73
  );
74
74
  const query = this.db.select({
75
- id: chunkJ6KKMP7V_js.comicUniverseArtworks.id,
76
- title: chunkJ6KKMP7V_js.comicUniverseArtworks.title,
77
- image: chunkJ6KKMP7V_js.comicUniverseArtworks.image,
78
- collectionId: chunkJ6KKMP7V_js.comicUniverseArtworks.collectionId,
79
- migrationStatus: chunkJ6KKMP7V_js.comicUniverseArtworks.migrationStatus
80
- }).from(chunkJ6KKMP7V_js.comicUniverseArtworks);
75
+ id: chunk7JN25DJB_js.comicUniverseArtworks.id,
76
+ title: chunk7JN25DJB_js.comicUniverseArtworks.title,
77
+ image: chunk7JN25DJB_js.comicUniverseArtworks.image,
78
+ collectionId: chunk7JN25DJB_js.comicUniverseArtworks.collectionId,
79
+ migrationStatus: chunk7JN25DJB_js.comicUniverseArtworks.migrationStatus
80
+ }).from(chunk7JN25DJB_js.comicUniverseArtworks);
81
81
  if (whereConditions.length > 0) {
82
82
  query.where(drizzleOrm.and(...whereConditions));
83
83
  }
@@ -195,15 +195,15 @@ var ArtworkMigrator = class {
195
195
  }
196
196
  let collectionIds = this.config.collectionIds;
197
197
  if (!collectionIds) {
198
- const artworks = await this.db.select({ collectionId: chunkJ6KKMP7V_js.comicUniverseArtworks.collectionId }).from(chunkJ6KKMP7V_js.comicUniverseArtworks).where(drizzleOrm.eq(chunkJ6KKMP7V_js.comicUniverseArtworks.isActive, true));
198
+ const artworks = await this.db.select({ collectionId: chunk7JN25DJB_js.comicUniverseArtworks.collectionId }).from(chunk7JN25DJB_js.comicUniverseArtworks).where(drizzleOrm.eq(chunk7JN25DJB_js.comicUniverseArtworks.isActive, true));
199
199
  const uniqueCollectionIds = [...new Set(artworks.map((a) => a.collectionId))];
200
200
  collectionIds = uniqueCollectionIds;
201
201
  }
202
202
  if (collectionIds && collectionIds.length > 0) {
203
203
  const collections = await this.db.select({
204
- id: chunkJ6KKMP7V_js.comicUniverseCollections.id,
205
- title: chunkJ6KKMP7V_js.comicUniverseCollections.title
206
- }).from(chunkJ6KKMP7V_js.comicUniverseCollections).where(drizzleOrm.inArray(chunkJ6KKMP7V_js.comicUniverseCollections.id, collectionIds));
204
+ id: chunk7JN25DJB_js.comicUniverseCollections.id,
205
+ title: chunk7JN25DJB_js.comicUniverseCollections.title
206
+ }).from(chunk7JN25DJB_js.comicUniverseCollections).where(drizzleOrm.inArray(chunk7JN25DJB_js.comicUniverseCollections.id, collectionIds));
207
207
  for (const collection of collections) {
208
208
  const folderName = `Collection-${collection.id}`;
209
209
  let collectionFolder = this.folderCache.get(folderName);
@@ -249,7 +249,7 @@ var ArtworkMigrator = class {
249
249
  if (!fs.existsSync(backupDir)) {
250
250
  fs.mkdirSync(backupDir, { recursive: true });
251
251
  }
252
- const artworks = await this.db.select().from(chunkJ6KKMP7V_js.comicUniverseArtworks).where(drizzleOrm.eq(chunkJ6KKMP7V_js.comicUniverseArtworks.isActive, true));
252
+ const artworks = await this.db.select().from(chunk7JN25DJB_js.comicUniverseArtworks).where(drizzleOrm.eq(chunk7JN25DJB_js.comicUniverseArtworks.isActive, true));
253
253
  fs.writeFileSync(
254
254
  path.join(backupDir, "artworks_backup.json"),
255
255
  JSON.stringify(artworks, null, 2)
@@ -263,19 +263,19 @@ var ArtworkMigrator = class {
263
263
  console.log("\u{1F504} [ArtworkMigrator] \u5F00\u59CB\u6279\u91CF\u8FC1\u79FB...");
264
264
  const whereConditions = [];
265
265
  if (this.config.collectionIds && this.config.collectionIds.length > 0) {
266
- whereConditions.push(drizzleOrm.inArray(chunkJ6KKMP7V_js.comicUniverseArtworks.collectionId, this.config.collectionIds));
266
+ whereConditions.push(drizzleOrm.inArray(chunk7JN25DJB_js.comicUniverseArtworks.collectionId, this.config.collectionIds));
267
267
  }
268
268
  whereConditions.push(
269
269
  drizzleOrm.and(
270
270
  drizzleOrm.or(
271
- drizzleOrm.isNull(chunkJ6KKMP7V_js.comicUniverseArtworks.fileId),
272
- drizzleOrm.eq(chunkJ6KKMP7V_js.comicUniverseArtworks.migrationStatus, "pending"),
273
- drizzleOrm.eq(chunkJ6KKMP7V_js.comicUniverseArtworks.migrationStatus, "failed")
271
+ drizzleOrm.isNull(chunk7JN25DJB_js.comicUniverseArtworks.fileId),
272
+ drizzleOrm.eq(chunk7JN25DJB_js.comicUniverseArtworks.migrationStatus, "pending"),
273
+ drizzleOrm.eq(chunk7JN25DJB_js.comicUniverseArtworks.migrationStatus, "failed")
274
274
  ),
275
- drizzleOrm.eq(chunkJ6KKMP7V_js.comicUniverseArtworks.isActive, true)
275
+ drizzleOrm.eq(chunk7JN25DJB_js.comicUniverseArtworks.isActive, true)
276
276
  )
277
277
  );
278
- const query = this.db.select().from(chunkJ6KKMP7V_js.comicUniverseArtworks);
278
+ const query = this.db.select().from(chunk7JN25DJB_js.comicUniverseArtworks);
279
279
  if (whereConditions.length > 0) {
280
280
  query.where(drizzleOrm.and(...whereConditions));
281
281
  }
@@ -367,11 +367,11 @@ var ArtworkMigrator = class {
367
367
  }).returning();
368
368
  }
369
369
  if (!this.config.dryRun && fileRecord) {
370
- await this.db.update(chunkJ6KKMP7V_js.comicUniverseArtworks).set({
370
+ await this.db.update(chunk7JN25DJB_js.comicUniverseArtworks).set({
371
371
  fileId: fileRecord.id,
372
372
  migrationStatus: "completed",
373
373
  updatedAt: /* @__PURE__ */ new Date()
374
- }).where(drizzleOrm.eq(chunkJ6KKMP7V_js.comicUniverseArtworks.id, artwork.id));
374
+ }).where(drizzleOrm.eq(chunk7JN25DJB_js.comicUniverseArtworks.id, artwork.id));
375
375
  }
376
376
  this.stats.successCount++;
377
377
  this.stats.processedFileSize += fileSize;
@@ -427,7 +427,7 @@ var ArtworkMigrator = class {
427
427
  */
428
428
  async rollbackArtwork(artworkId) {
429
429
  console.log(`\u{1F504} [ArtworkMigrator] \u56DE\u6EDA\u4F5C\u54C1: ${artworkId}`);
430
- const [artwork] = await this.db.select().from(chunkJ6KKMP7V_js.comicUniverseArtworks).where(drizzleOrm.eq(chunkJ6KKMP7V_js.comicUniverseArtworks.id, artworkId)).limit(1);
430
+ const [artwork] = await this.db.select().from(chunk7JN25DJB_js.comicUniverseArtworks).where(drizzleOrm.eq(chunk7JN25DJB_js.comicUniverseArtworks.id, artworkId)).limit(1);
431
431
  if (!artwork) {
432
432
  throw new Error(`\u4F5C\u54C1 ${artworkId} \u4E0D\u5B58\u5728`);
433
433
  }
@@ -443,11 +443,11 @@ var ArtworkMigrator = class {
443
443
  }
444
444
  await this.db.delete(chunkVLZ5N6XZ_js.fileMetadata).where(drizzleOrm.eq(chunkVLZ5N6XZ_js.fileMetadata.id, artwork.fileId));
445
445
  }
446
- await this.db.update(chunkJ6KKMP7V_js.comicUniverseArtworks).set({
446
+ await this.db.update(chunk7JN25DJB_js.comicUniverseArtworks).set({
447
447
  fileId: null,
448
448
  migrationStatus: "pending",
449
449
  updatedAt: /* @__PURE__ */ new Date()
450
- }).where(drizzleOrm.eq(chunkJ6KKMP7V_js.comicUniverseArtworks.id, artworkId));
450
+ }).where(drizzleOrm.eq(chunk7JN25DJB_js.comicUniverseArtworks.id, artworkId));
451
451
  console.log(`\u2705 [ArtworkMigrator] \u4F5C\u54C1 ${artworkId} \u56DE\u6EDA\u5B8C\u6210`);
452
452
  }
453
453
  };
@@ -1,6 +1,6 @@
1
- import { comicUniverseArtworks, comicUniverseCollections } from '../../chunk-RZCEWMOR.mjs';
1
+ import { comicUniverseArtworks, comicUniverseCollections } from '../../chunk-SHY424RZ.mjs';
2
2
  import '../../chunk-PAX4S7QM.mjs';
3
- import '../../chunk-6ZREZAGB.mjs';
3
+ import '../../chunk-GFVAIT6Y.mjs';
4
4
  import { fileStorageProviders, fileFolders, fileMetadata } from '../../chunk-QROLPPXP.mjs';
5
5
  import '../../chunk-76V7EKBX.mjs';
6
6
  import '../../chunk-VTGPHE4Z.mjs';
@@ -2454,7 +2454,10 @@ declare class MasterpiecesConfigDbService$1 {
2454
2454
  declare class CategoriesDbService$1 {
2455
2455
  private readonly db;
2456
2456
  constructor(db: any);
2457
- getCategories(): Promise<string[]>;
2457
+ getCategories(): Promise<Array<{
2458
+ name: string;
2459
+ description?: string | null;
2460
+ }>>;
2458
2461
  createCategory(name: string, description?: string): Promise<void>;
2459
2462
  }
2460
2463
  declare class TagsDbService$1 {
@@ -2534,7 +2537,10 @@ declare class MasterpiecesConfigDbService {
2534
2537
  private mapDbConfigToType;
2535
2538
  }
2536
2539
  declare class CategoriesDbService {
2537
- getCategories(): Promise<string[]>;
2540
+ getCategories(): Promise<Array<{
2541
+ name: string;
2542
+ description?: string | null;
2543
+ }>>;
2538
2544
  createCategory(name: string, description?: string): Promise<void>;
2539
2545
  }
2540
2546
  declare class TagsDbService {
@@ -2454,7 +2454,10 @@ declare class MasterpiecesConfigDbService$1 {
2454
2454
  declare class CategoriesDbService$1 {
2455
2455
  private readonly db;
2456
2456
  constructor(db: any);
2457
- getCategories(): Promise<string[]>;
2457
+ getCategories(): Promise<Array<{
2458
+ name: string;
2459
+ description?: string | null;
2460
+ }>>;
2458
2461
  createCategory(name: string, description?: string): Promise<void>;
2459
2462
  }
2460
2463
  declare class TagsDbService$1 {
@@ -2534,7 +2537,10 @@ declare class MasterpiecesConfigDbService {
2534
2537
  private mapDbConfigToType;
2535
2538
  }
2536
2539
  declare class CategoriesDbService {
2537
- getCategories(): Promise<string[]>;
2540
+ getCategories(): Promise<Array<{
2541
+ name: string;
2542
+ description?: string | null;
2543
+ }>>;
2538
2544
  createCategory(name: string, description?: string): Promise<void>;
2539
2545
  }
2540
2546
  declare class TagsDbService {
@@ -1,175 +1,175 @@
1
1
  'use strict';
2
2
 
3
- var chunkJ6KKMP7V_js = require('../../chunk-J6KKMP7V.js');
3
+ var chunk7JN25DJB_js = require('../../chunk-7JN25DJB.js');
4
4
  var chunkXYQMAF7H_js = require('../../chunk-XYQMAF7H.js');
5
- require('../../chunk-ERNZE5CJ.js');
5
+ require('../../chunk-IZOIVYOW.js');
6
6
  require('../../chunk-Z6ZWNWWR.js');
7
7
 
8
8
 
9
9
 
10
10
  Object.defineProperty(exports, "BookingCommandError", {
11
11
  enumerable: true,
12
- get: function () { return chunkJ6KKMP7V_js.BookingCommandError; }
12
+ get: function () { return chunk7JN25DJB_js.BookingCommandError; }
13
13
  });
14
14
  Object.defineProperty(exports, "BookingCommandService", {
15
15
  enumerable: true,
16
- get: function () { return chunkJ6KKMP7V_js.BookingCommandService; }
16
+ get: function () { return chunk7JN25DJB_js.BookingCommandService; }
17
17
  });
18
18
  Object.defineProperty(exports, "BookingQueryService", {
19
19
  enumerable: true,
20
- get: function () { return chunkJ6KKMP7V_js.BookingQueryService; }
20
+ get: function () { return chunk7JN25DJB_js.BookingQueryService; }
21
21
  });
22
22
  Object.defineProperty(exports, "CategoriesDbService", {
23
23
  enumerable: true,
24
- get: function () { return chunkJ6KKMP7V_js.CategoriesDbService; }
24
+ get: function () { return chunk7JN25DJB_js.CategoriesDbService; }
25
25
  });
26
26
  Object.defineProperty(exports, "MasterpiecesConfigDbService", {
27
27
  enumerable: true,
28
- get: function () { return chunkJ6KKMP7V_js.MasterpiecesConfigDbService; }
28
+ get: function () { return chunk7JN25DJB_js.MasterpiecesConfigDbService; }
29
29
  });
30
30
  Object.defineProperty(exports, "PopupConfigService", {
31
31
  enumerable: true,
32
- get: function () { return chunkJ6KKMP7V_js.PopupConfigService; }
32
+ get: function () { return chunk7JN25DJB_js.PopupConfigService; }
33
33
  });
34
34
  Object.defineProperty(exports, "ShowmasterConfigService", {
35
35
  enumerable: true,
36
- get: function () { return chunkJ6KKMP7V_js.ShowmasterConfigService; }
36
+ get: function () { return chunk7JN25DJB_js.ShowmasterConfigService; }
37
37
  });
38
38
  Object.defineProperty(exports, "TagsDbService", {
39
39
  enumerable: true,
40
- get: function () { return chunkJ6KKMP7V_js.TagsDbService; }
40
+ get: function () { return chunk7JN25DJB_js.TagsDbService; }
41
41
  });
42
42
  Object.defineProperty(exports, "artworksDbService", {
43
43
  enumerable: true,
44
- get: function () { return chunkJ6KKMP7V_js.artworksDbService; }
44
+ get: function () { return chunk7JN25DJB_js.artworksDbService; }
45
45
  });
46
46
  Object.defineProperty(exports, "categoriesDbService", {
47
47
  enumerable: true,
48
- get: function () { return chunkJ6KKMP7V_js.categoriesDbService; }
48
+ get: function () { return chunk7JN25DJB_js.categoriesDbService; }
49
49
  });
50
50
  Object.defineProperty(exports, "collectionsDbService", {
51
51
  enumerable: true,
52
- get: function () { return chunkJ6KKMP7V_js.collectionsDbService; }
52
+ get: function () { return chunk7JN25DJB_js.collectionsDbService; }
53
53
  });
54
54
  Object.defineProperty(exports, "comicUniverseArtworks", {
55
55
  enumerable: true,
56
- get: function () { return chunkJ6KKMP7V_js.comicUniverseArtworks; }
56
+ get: function () { return chunk7JN25DJB_js.comicUniverseArtworks; }
57
57
  });
58
58
  Object.defineProperty(exports, "comicUniverseArtworksRelations", {
59
59
  enumerable: true,
60
- get: function () { return chunkJ6KKMP7V_js.comicUniverseArtworksRelations; }
60
+ get: function () { return chunk7JN25DJB_js.comicUniverseArtworksRelations; }
61
61
  });
62
62
  Object.defineProperty(exports, "comicUniverseBookings", {
63
63
  enumerable: true,
64
- get: function () { return chunkJ6KKMP7V_js.comicUniverseBookings; }
64
+ get: function () { return chunk7JN25DJB_js.comicUniverseBookings; }
65
65
  });
66
66
  Object.defineProperty(exports, "comicUniverseBookingsRelations", {
67
67
  enumerable: true,
68
- get: function () { return chunkJ6KKMP7V_js.comicUniverseBookingsRelations; }
68
+ get: function () { return chunk7JN25DJB_js.comicUniverseBookingsRelations; }
69
69
  });
70
70
  Object.defineProperty(exports, "comicUniverseCategories", {
71
71
  enumerable: true,
72
- get: function () { return chunkJ6KKMP7V_js.comicUniverseCategories; }
72
+ get: function () { return chunk7JN25DJB_js.comicUniverseCategories; }
73
73
  });
74
74
  Object.defineProperty(exports, "comicUniverseCategoriesRelations", {
75
75
  enumerable: true,
76
- get: function () { return chunkJ6KKMP7V_js.comicUniverseCategoriesRelations; }
76
+ get: function () { return chunk7JN25DJB_js.comicUniverseCategoriesRelations; }
77
77
  });
78
78
  Object.defineProperty(exports, "comicUniverseCollectionTags", {
79
79
  enumerable: true,
80
- get: function () { return chunkJ6KKMP7V_js.comicUniverseCollectionTags; }
80
+ get: function () { return chunk7JN25DJB_js.comicUniverseCollectionTags; }
81
81
  });
82
82
  Object.defineProperty(exports, "comicUniverseCollectionTagsRelations", {
83
83
  enumerable: true,
84
- get: function () { return chunkJ6KKMP7V_js.comicUniverseCollectionTagsRelations; }
84
+ get: function () { return chunk7JN25DJB_js.comicUniverseCollectionTagsRelations; }
85
85
  });
86
86
  Object.defineProperty(exports, "comicUniverseCollections", {
87
87
  enumerable: true,
88
- get: function () { return chunkJ6KKMP7V_js.comicUniverseCollections; }
88
+ get: function () { return chunk7JN25DJB_js.comicUniverseCollections; }
89
89
  });
90
90
  Object.defineProperty(exports, "comicUniverseCollectionsRelations", {
91
91
  enumerable: true,
92
- get: function () { return chunkJ6KKMP7V_js.comicUniverseCollectionsRelations; }
92
+ get: function () { return chunk7JN25DJB_js.comicUniverseCollectionsRelations; }
93
93
  });
94
94
  Object.defineProperty(exports, "comicUniverseConfigs", {
95
95
  enumerable: true,
96
- get: function () { return chunkJ6KKMP7V_js.comicUniverseConfigs; }
96
+ get: function () { return chunk7JN25DJB_js.comicUniverseConfigs; }
97
97
  });
98
98
  Object.defineProperty(exports, "comicUniverseConfigsRelations", {
99
99
  enumerable: true,
100
- get: function () { return chunkJ6KKMP7V_js.comicUniverseConfigsRelations; }
100
+ get: function () { return chunk7JN25DJB_js.comicUniverseConfigsRelations; }
101
101
  });
102
102
  Object.defineProperty(exports, "comicUniverseTags", {
103
103
  enumerable: true,
104
- get: function () { return chunkJ6KKMP7V_js.comicUniverseTags; }
104
+ get: function () { return chunk7JN25DJB_js.comicUniverseTags; }
105
105
  });
106
106
  Object.defineProperty(exports, "comicUniverseTagsRelations", {
107
107
  enumerable: true,
108
- get: function () { return chunkJ6KKMP7V_js.comicUniverseTagsRelations; }
108
+ get: function () { return chunk7JN25DJB_js.comicUniverseTagsRelations; }
109
109
  });
110
110
  Object.defineProperty(exports, "createBookingCommandService", {
111
111
  enumerable: true,
112
- get: function () { return chunkJ6KKMP7V_js.createBookingCommandService; }
112
+ get: function () { return chunk7JN25DJB_js.createBookingCommandService; }
113
113
  });
114
114
  Object.defineProperty(exports, "createBookingQueryService", {
115
115
  enumerable: true,
116
- get: function () { return chunkJ6KKMP7V_js.createBookingQueryService; }
116
+ get: function () { return chunk7JN25DJB_js.createBookingQueryService; }
117
117
  });
118
118
  Object.defineProperty(exports, "createCategoriesDbService", {
119
119
  enumerable: true,
120
- get: function () { return chunkJ6KKMP7V_js.createCategoriesDbService; }
120
+ get: function () { return chunk7JN25DJB_js.createCategoriesDbService; }
121
121
  });
122
122
  Object.defineProperty(exports, "createMasterpiecesConfigDbService", {
123
123
  enumerable: true,
124
- get: function () { return chunkJ6KKMP7V_js.createMasterpiecesConfigDbService; }
124
+ get: function () { return chunk7JN25DJB_js.createMasterpiecesConfigDbService; }
125
125
  });
126
126
  Object.defineProperty(exports, "createPopupConfigService", {
127
127
  enumerable: true,
128
- get: function () { return chunkJ6KKMP7V_js.createPopupConfigService; }
128
+ get: function () { return chunk7JN25DJB_js.createPopupConfigService; }
129
129
  });
130
130
  Object.defineProperty(exports, "createShowmasterConfigService", {
131
131
  enumerable: true,
132
- get: function () { return chunkJ6KKMP7V_js.createShowmasterConfigService; }
132
+ get: function () { return chunk7JN25DJB_js.createShowmasterConfigService; }
133
133
  });
134
134
  Object.defineProperty(exports, "createTagsDbService", {
135
135
  enumerable: true,
136
- get: function () { return chunkJ6KKMP7V_js.createTagsDbService; }
136
+ get: function () { return chunk7JN25DJB_js.createTagsDbService; }
137
137
  });
138
138
  Object.defineProperty(exports, "initializeShowmasterpieceDb", {
139
139
  enumerable: true,
140
- get: function () { return chunkJ6KKMP7V_js.initializeShowmasterpieceDb; }
140
+ get: function () { return chunk7JN25DJB_js.initializeShowmasterpieceDb; }
141
141
  });
142
142
  Object.defineProperty(exports, "masterpiecesConfigDbService", {
143
143
  enumerable: true,
144
- get: function () { return chunkJ6KKMP7V_js.masterpiecesConfigDbService; }
144
+ get: function () { return chunk7JN25DJB_js.masterpiecesConfigDbService; }
145
145
  });
146
146
  Object.defineProperty(exports, "popupConfigs", {
147
147
  enumerable: true,
148
- get: function () { return chunkJ6KKMP7V_js.popupConfigs; }
148
+ get: function () { return chunk7JN25DJB_js.popupConfigs; }
149
149
  });
150
150
  Object.defineProperty(exports, "popupConfigsRelations", {
151
151
  enumerable: true,
152
- get: function () { return chunkJ6KKMP7V_js.popupConfigsRelations; }
152
+ get: function () { return chunk7JN25DJB_js.popupConfigsRelations; }
153
153
  });
154
154
  Object.defineProperty(exports, "showmasterConfigCategories", {
155
155
  enumerable: true,
156
- get: function () { return chunkJ6KKMP7V_js.showmasterConfigCategories; }
156
+ get: function () { return chunk7JN25DJB_js.showmasterConfigCategories; }
157
157
  });
158
158
  Object.defineProperty(exports, "showmasterConfigHistory", {
159
159
  enumerable: true,
160
- get: function () { return chunkJ6KKMP7V_js.showmasterConfigHistory; }
160
+ get: function () { return chunk7JN25DJB_js.showmasterConfigHistory; }
161
161
  });
162
162
  Object.defineProperty(exports, "showmasterConfigItems", {
163
163
  enumerable: true,
164
- get: function () { return chunkJ6KKMP7V_js.showmasterConfigItems; }
164
+ get: function () { return chunk7JN25DJB_js.showmasterConfigItems; }
165
165
  });
166
166
  Object.defineProperty(exports, "showmasterConfigPermissions", {
167
167
  enumerable: true,
168
- get: function () { return chunkJ6KKMP7V_js.showmasterConfigPermissions; }
168
+ get: function () { return chunk7JN25DJB_js.showmasterConfigPermissions; }
169
169
  });
170
170
  Object.defineProperty(exports, "tagsDbService", {
171
171
  enumerable: true,
172
- get: function () { return chunkJ6KKMP7V_js.tagsDbService; }
172
+ get: function () { return chunk7JN25DJB_js.tagsDbService; }
173
173
  });
174
174
  Object.defineProperty(exports, "getShowMasterpieceFileConfig", {
175
175
  enumerable: true,
@@ -1,6 +1,6 @@
1
- export { BookingCommandError, BookingCommandService, BookingQueryService, CategoriesDbService, MasterpiecesConfigDbService, PopupConfigService, ShowmasterConfigService, TagsDbService, artworksDbService, categoriesDbService, collectionsDbService, comicUniverseArtworks, comicUniverseArtworksRelations, comicUniverseBookings, comicUniverseBookingsRelations, comicUniverseCategories, comicUniverseCategoriesRelations, comicUniverseCollectionTags, comicUniverseCollectionTagsRelations, comicUniverseCollections, comicUniverseCollectionsRelations, comicUniverseConfigs, comicUniverseConfigsRelations, comicUniverseTags, comicUniverseTagsRelations, createBookingCommandService, createBookingQueryService, createCategoriesDbService, createMasterpiecesConfigDbService, createPopupConfigService, createShowmasterConfigService, createTagsDbService, initializeShowmasterpieceDb, masterpiecesConfigDbService, popupConfigs, popupConfigsRelations, showmasterConfigCategories, showmasterConfigHistory, showmasterConfigItems, showmasterConfigPermissions, tagsDbService } from '../../chunk-RZCEWMOR.mjs';
1
+ export { BookingCommandError, BookingCommandService, BookingQueryService, CategoriesDbService, MasterpiecesConfigDbService, PopupConfigService, ShowmasterConfigService, TagsDbService, artworksDbService, categoriesDbService, collectionsDbService, comicUniverseArtworks, comicUniverseArtworksRelations, comicUniverseBookings, comicUniverseBookingsRelations, comicUniverseCategories, comicUniverseCategoriesRelations, comicUniverseCollectionTags, comicUniverseCollectionTagsRelations, comicUniverseCollections, comicUniverseCollectionsRelations, comicUniverseConfigs, comicUniverseConfigsRelations, comicUniverseTags, comicUniverseTagsRelations, createBookingCommandService, createBookingQueryService, createCategoriesDbService, createMasterpiecesConfigDbService, createPopupConfigService, createShowmasterConfigService, createTagsDbService, initializeShowmasterpieceDb, masterpiecesConfigDbService, popupConfigs, popupConfigsRelations, showmasterConfigCategories, showmasterConfigHistory, showmasterConfigItems, showmasterConfigPermissions, tagsDbService } from '../../chunk-SHY424RZ.mjs';
2
2
  export { getShowMasterpieceFileConfig } from '../../chunk-PAX4S7QM.mjs';
3
- import '../../chunk-6ZREZAGB.mjs';
3
+ import '../../chunk-GFVAIT6Y.mjs';
4
4
  import '../../chunk-WMJKH4XE.mjs';
5
5
  //# sourceMappingURL=index.mjs.map
6
6
  //# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sa2kit",
3
- "version": "1.6.48",
3
+ "version": "1.6.49",
4
4
  "description": "A modern, type-safe React utility library with cross-platform support and platform adapters",
5
5
  "keywords": [
6
6
  "react",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/showmasterpiece/types/index.ts"],"names":[],"mappings":"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","file":"chunk-6ZREZAGB.mjs","sourcesContent":["/**\n * ShowMasterpiece 模块类型定义\n * \n * 包含画集、作品、配置等相关的TypeScript类型定义\n */\n\n// ===== 画集分类枚举 =====\n\n/**\n * 画集分类枚举\n * \n * 定义画集的各种分类:\n * - COLLECTION: 画集 - 用于展示艺术作品\n * - ACRYLIC: 立牌 - 立牌制品\n * - BADGE: 吧唧 - 徽章类商品\n * - COLOR_PAPER: 色纸 - 彩色纸张制品\n * - POSTCARD: 明信片 - 明信片类商品\n * - LASER_TICKET: 镭射票 - 镭射票类商品\n * - CANVAS_BAG: 帆布包 - 帆布包类商品\n * - SUPPORT_STICK: 应援棒 - 应援棒类商品\n * - OTHER: 挂件/钥匙扣 - 挂件/钥匙扣类商品\n */\nexport enum CollectionCategory {\n /** 画集 - 用于展示艺术作品 */\n COLLECTION = 'collection',\n /** 立牌 - 立牌制品 */\n ACRYLIC = 'acrylic',\n /** 吧唧 - 徽章类商品 */\n BADGE = 'badge',\n /** 色纸 - 彩色纸张制品 */\n COLOR_PAPER = 'color_paper',\n /** 透卡 - 透明卡片制品 */\n TRANSPARENT_CARD = 'transparent_card',\n /** 明信片 - 明信片类商品 */\n POSTCARD = 'postcard',\n /** 镭射票 - 镭射票类商品 */\n LASER_TICKET = 'laser_ticket',\n /** 帆布包 - 帆布包类商品 */\n CANVAS_BAG = 'canvas_bag',\n /** 线圈笔记本 - 线圈装订笔记本 */\n SPIRAL_NOTEBOOK = 'spiral_notebook',\n /** 鼠标垫 - 鼠标垫类商品 */\n MOUSE_PAD = 'mouse_pad',\n /** 应援棒 - 应援棒类商品 */\n SUPPORT_STICK = 'support_stick',\n /** 挂件/钥匙扣 - 挂件/钥匙扣类商品 */\n KEYCHAIN = 'keychain',\n /** 其它 */\n OTHER = 'other'\n}\n\n/**\n * 画集分类类型\n * 使用枚举值作为类型\n */\nexport type CollectionCategoryType = `${CollectionCategory}` | string;\n\n/**\n * 分类信息接口\n * 包含分类值和显示名称\n */\nexport interface CategoryInfo {\n /** 分类值 */\n value: CollectionCategoryType;\n /** 显示名称 */\n displayName: string;\n /** 描述信息 */\n description?: string;\n}\n\n// ===== 基础类型定义 =====\n\n/**\n * 艺术作品页面数据结构\n * \n * 表示画集中的单个作品页面,包含图片、标题、描述等信息。\n * 每个画集包含多个这样的作品页面。\n */\nexport interface ArtworkPage {\n /** 作品的唯一标识符 */\n id: number;\n \n /** 作品标题 */\n title: string;\n \n /** 编号 */\n number: string;\n \n /** 作品图片(支持URL或base64编码) */\n image: string;\n \n /** 通用文件服务的图片文件ID(新架构,可选) */\n fileId?: string;\n \n /** 作品描述 */\n description: string;\n \n /** 创作时间(可选) */\n createdTime?: string;\n \n /** 作品主题(可选) */\n theme?: string;\n \n /** 作品年份(可选) */\n year?: string;\n \n /** 创作媒介(可选) */\n medium?: string;\n \n /** 作品尺寸(可选) */\n dimensions?: string;\n \n /** 在画集中的显示顺序 */\n pageOrder: number;\n \n /** 是否激活(可选,默认true) */\n isActive?: boolean;\n \n /** 创建时间(可选) */\n createdAt?: string;\n \n /** 更新时间(可选) */\n updatedAt?: string;\n}\n\n/**\n * 艺术画集数据结构\n * \n * 表示一个完整的艺术画集,包含多个作品页面和相关元数据。\n * 这是系统中的核心数据模型之一。\n */\nexport interface ArtCollection {\n /** 画集的唯一标识符 */\n id: number;\n \n /** 画集标题 */\n title: string;\n \n /** 编号 */\n number: string;\n \n /** 画集封面图片路径 */\n coverImage: string;\n \n /** 通用文件服务的封面图片文件ID(新架构,可选) */\n coverImageFileId?: string;\n \n /** 画集描述 */\n description: string;\n \n /** 画集包含的所有作品页面 */\n pages: ArtworkPage[];\n \n /** 画集分类(使用枚举值) */\n category: CollectionCategoryType;\n \n /** 画集标签列表(可选) */\n tags?: string[];\n \n /** 是否已发布(可选,默认true) */\n isPublished?: boolean;\n \n /** 画集价格(单位:元,可选) */\n price?: number;\n \n /** 创建时间(可选) */\n createdAt?: string;\n \n /** 更新时间(可选) */\n updatedAt?: string;\n}\n\n// ===== 配置相关类型 =====\n\n/**\n * 系统配置数据结构\n * \n * 存储ShowMasterpiece模块的全局配置信息,\n * 包括网站设置、显示选项、功能开关等。\n */\nexport interface MasterpiecesConfig {\n /** 网站名称 */\n siteName: string;\n \n /** 网站描述 */\n siteDescription?: string;\n \n /** 首页主标题 */\n heroTitle: string;\n \n /** 首页副标题 */\n heroSubtitle?: string;\n \n /** 每页显示的最大画集数量 */\n maxCollectionsPerPage: number;\n \n /** 是否启用搜索功能 */\n enableSearch: boolean;\n \n /** 是否启用分类功能 */\n enableCategories: boolean;\n\n /** 首页分类Tab配置 */\n homeTabConfig: HomeTabConfigItem[];\n \n /** 默认分类 */\n defaultCategory: string;\n \n /** 主题模式:light(浅色)、dark(深色)、auto(自动) */\n theme: 'light' | 'dark' | 'auto';\n \n /** 界面语言:zh(中文)、en(英文) */\n language: 'zh' | 'en';\n}\n\nexport interface HomeTabConfigItem {\n category: CollectionCategoryType;\n visible: boolean;\n order: number;\n}\n\nexport const defaultHomeTabCategoryOrder: CollectionCategoryType[] = [\n CollectionCategory.CANVAS_BAG,\n CollectionCategory.SPIRAL_NOTEBOOK,\n CollectionCategory.MOUSE_PAD,\n CollectionCategory.ACRYLIC,\n CollectionCategory.BADGE,\n CollectionCategory.COLOR_PAPER,\n CollectionCategory.KEYCHAIN,\n CollectionCategory.TRANSPARENT_CARD,\n CollectionCategory.LASER_TICKET,\n];\n\nexport function buildDefaultHomeTabConfig(): HomeTabConfigItem[] {\n return [];\n}\n\nexport function normalizeHomeTabConfig(\n input?: HomeTabConfigItem[] | null,\n): HomeTabConfigItem[] {\n if (!input || input.length === 0) {\n return [];\n }\n\n const filtered = input\n .filter((item) => item && typeof item.category === 'string' && item.category.trim().length > 0)\n .map((item) => ({\n category: item.category,\n visible: item.visible ?? true,\n order: Number.isFinite(item.order) ? Number(item.order) : 0,\n }));\n\n if (filtered.length === 0) {\n return [];\n }\n\n filtered.sort((a, b) => a.order - b.order);\n const normalized = filtered.map((item, index) => ({ ...item, order: index }));\n\n if (!normalized.some((item) => item.visible)) {\n const firstItem = normalized[0];\n if (firstItem) {\n normalized[0] = { ...firstItem, visible: true };\n }\n }\n\n return normalized;\n}\n\n// ===== 表单数据类型 =====\n\n/**\n * 画集表单数据结构\n * \n * 用于创建和编辑画集时的表单数据\n */\nexport interface CollectionFormData {\n /** 画集标题 */\n title: string;\n \n /** 编号 */\n number: string;\n \n /** 封面图片 */\n coverImage: string;\n \n /** 通用文件服务的封面图片文件ID */\n coverImageFileId?: string;\n \n /** 画集描述 */\n description: string;\n \n /** 画集分类(使用枚举值) */\n category: CollectionCategoryType;\n \n /** 画集标签列表 */\ntags: string[];\n \n /** 是否已发布 */\n isPublished: boolean;\n \n /** 画集价格(单位:元,可选) */\n price?: number;\n}\n\n/**\n * 作品表单数据结构\n * \n * 用于创建和编辑作品时的表单数据\n */\nexport interface ArtworkFormData {\n /** 作品标题 */\n title: string;\n \n /** 编号 */\n number: string;\n \n /** 作品图片 */\n image?: string;\n \n /** 通用文件服务的图片文件ID */\n fileId?: string;\n \n /** 作品描述 */\n description: string;\n \n /** 创作时间 */\n createdTime: string;\n \n /** 作品主题 */\n theme: string;\n}\n\n/**\n * 配置表单数据结构\n * \n * 用于编辑系统配置时的表单数据\n */\nexport interface ConfigFormData {\n /** 网站名称 */\n siteName: string;\n \n /** 网站描述 */\n siteDescription: string;\n \n /** 首页主标题 */\n heroTitle: string;\n \n /** 首页副标题 */\n heroSubtitle: string;\n \n /** 每页显示的最大画集数量 */\n maxCollectionsPerPage: number;\n \n /** 是否启用搜索功能 */\n enableSearch: boolean;\n \n /** 是否启用分类功能 */\n enableCategories: boolean;\n\n /** 首页分类Tab配置 */\n homeTabConfig: HomeTabConfigItem[];\n \n /** 默认分类 */\n defaultCategory: string;\n \n /** 主题模式 */\n theme: 'light' | 'dark' | 'auto';\n \n /** 界面语言 */\n language: 'zh' | 'en';\n}\n\n// ===== 工具函数 =====\n\n/**\n * 获取所有可用的画集分类\n * \n * @returns 分类枚举值数组\n */\nexport function getAvailableCategories(): CollectionCategoryType[] {\n return [];\n}\n\n/**\n * 验证分类是否为有效值\n * \n * @param category - 要验证的分类值\n * @returns 是否为有效分类\n */\nexport function isValidCategory(category: string): category is CollectionCategoryType {\n if (typeof category !== 'string') {\n return false;\n }\n return category.trim().length > 0;\n}\n\n/**\n * 分类信息映射\n * 为每个分类提供完整的信息对象\n */\nexport const categories = {\n [CollectionCategory.COLLECTION]: {\n value: CollectionCategory.COLLECTION,\n displayName: '画集',\n description: '用于展示艺术作品'\n },\n [CollectionCategory.ACRYLIC]: {\n value: CollectionCategory.ACRYLIC,\n displayName: '立牌',\n description: '立牌制品'\n },\n [CollectionCategory.BADGE]: {\n value: CollectionCategory.BADGE,\n displayName: '吧唧',\n description: '徽章类商品'\n },\n [CollectionCategory.COLOR_PAPER]: {\n value: CollectionCategory.COLOR_PAPER,\n displayName: '色纸',\n description: '彩色纸张制品'\n },\n [CollectionCategory.TRANSPARENT_CARD]: {\n value: CollectionCategory.TRANSPARENT_CARD,\n displayName: '透卡',\n description: '透明卡片制品'\n },\n [CollectionCategory.POSTCARD]: {\n value: CollectionCategory.POSTCARD,\n displayName: '明信片',\n description: '明信片类商品'\n },\n [CollectionCategory.LASER_TICKET]: {\n value: CollectionCategory.LASER_TICKET,\n displayName: '镭射票',\n description: '镭射票类商品'\n },\n [CollectionCategory.CANVAS_BAG]: {\n value: CollectionCategory.CANVAS_BAG,\n displayName: '帆布包',\n description: '帆布包类商品'\n },\n [CollectionCategory.SPIRAL_NOTEBOOK]: {\n value: CollectionCategory.SPIRAL_NOTEBOOK,\n displayName: '线圈笔记本',\n description: '线圈装订笔记本'\n },\n [CollectionCategory.MOUSE_PAD]: {\n value: CollectionCategory.MOUSE_PAD,\n displayName: '鼠标垫',\n description: '鼠标垫类商品'\n },\n [CollectionCategory.SUPPORT_STICK]: {\n value: CollectionCategory.SUPPORT_STICK,\n displayName: '应援棒',\n description: '应援棒类商品'\n },\n [CollectionCategory.KEYCHAIN]: {\n value: CollectionCategory.KEYCHAIN,\n displayName: '挂件/钥匙扣',\n description: '挂件/钥匙扣类商品'\n },\n [CollectionCategory.OTHER]: {\n value: CollectionCategory.OTHER,\n displayName: '其它',\n description: '其他类型商品'\n }\n} as const satisfies Record<CollectionCategory, CategoryInfo>;\n\n\n/**\n * 获取分类的显示名称\n * 支持 collection.category.displayName 的调用方式\n */\nexport function getCategoryDisplayName(category: CollectionCategoryType): string {\n return categories[category as CollectionCategory]?.displayName || category;\n}\n\n/**\n * 获取分类的完整信息\n * 支持 collection.category.displayName 的调用方式\n */\nexport function getCategoryInfo(category: CollectionCategoryType): CategoryInfo {\n return categories[category as CollectionCategory] || {\n value: category,\n displayName: category,\n description: ''\n };\n}\n\n/**\n * 扩展 CollectionCategoryType,使其支持 displayName 属性访问\n * 使用方式: collection.category.displayName\n */\ndeclare global {\n interface String {\n get displayName(): string;\n get categoryInfo(): CategoryInfo;\n }\n}\n\n// 为字符串类型添加 displayName getter(避免重复定义)\nif (!Object.getOwnPropertyDescriptor(String.prototype, 'displayName')) {\n Object.defineProperty(String.prototype, 'displayName', {\n get(this: string): string {\n return getCategoryDisplayName(this as CollectionCategoryType);\n }\n });\n}\n\n// 为字符串类型添加 categoryInfo getter(避免重复定义)\nif (!Object.getOwnPropertyDescriptor(String.prototype, 'categoryInfo')) {\n Object.defineProperty(String.prototype, 'categoryInfo', {\n get(this: string): CategoryInfo {\n return getCategoryInfo(this as CollectionCategoryType);\n }\n });\n}\n\n/**\n * 获取分类的描述信息 (枚举调用方式)\n */\nexport const CategoryDescription = {\n [CollectionCategory.COLLECTION]: '用于展示艺术作品,包含多个作品页面的画集',\n [CollectionCategory.ACRYLIC]: '立牌制品,如亚克力立牌、展示立牌等',\n [CollectionCategory.BADGE]: '徽章类商品,如徽章、钥匙扣等',\n [CollectionCategory.COLOR_PAPER]: '彩色纸张制品,如彩色卡纸、彩色打印纸等',\n [CollectionCategory.TRANSPARENT_CARD]: '透明卡片制品,如透明卡片、透明卡等',\n [CollectionCategory.POSTCARD]: '明信片类商品,如艺术明信片、纪念明信片等',\n [CollectionCategory.LASER_TICKET]: '镭射票类商品,如演唱会门票、电影票等',\n [CollectionCategory.CANVAS_BAG]: '帆布包类商品,如帆布袋、帆布背包等',\n [CollectionCategory.SPIRAL_NOTEBOOK]: '线圈装订笔记本,如线圈笔记本、线圈装订笔记本等',\n [CollectionCategory.MOUSE_PAD]: '鼠标垫类商品,如鼠标垫、鼠标垫等',\n [CollectionCategory.SUPPORT_STICK]: '应援棒类商品,如荧光棒、应援棒等',\n [CollectionCategory.KEYCHAIN]: '挂件/钥匙扣类商品,如装饰挂件、钥匙扣等',\n [CollectionCategory.OTHER]: '挂件/钥匙扣类商品,如装饰挂件、钥匙扣等'\n} as const;\n\n// ===== 上下文类型导出 =====\nexport type { CartContextState } from './context'; \n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/showmasterpiece/types/index.ts"],"names":[],"mappings":"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","file":"chunk-ERNZE5CJ.js","sourcesContent":["/**\n * ShowMasterpiece 模块类型定义\n * \n * 包含画集、作品、配置等相关的TypeScript类型定义\n */\n\n// ===== 画集分类枚举 =====\n\n/**\n * 画集分类枚举\n * \n * 定义画集的各种分类:\n * - COLLECTION: 画集 - 用于展示艺术作品\n * - ACRYLIC: 立牌 - 立牌制品\n * - BADGE: 吧唧 - 徽章类商品\n * - COLOR_PAPER: 色纸 - 彩色纸张制品\n * - POSTCARD: 明信片 - 明信片类商品\n * - LASER_TICKET: 镭射票 - 镭射票类商品\n * - CANVAS_BAG: 帆布包 - 帆布包类商品\n * - SUPPORT_STICK: 应援棒 - 应援棒类商品\n * - OTHER: 挂件/钥匙扣 - 挂件/钥匙扣类商品\n */\nexport enum CollectionCategory {\n /** 画集 - 用于展示艺术作品 */\n COLLECTION = 'collection',\n /** 立牌 - 立牌制品 */\n ACRYLIC = 'acrylic',\n /** 吧唧 - 徽章类商品 */\n BADGE = 'badge',\n /** 色纸 - 彩色纸张制品 */\n COLOR_PAPER = 'color_paper',\n /** 透卡 - 透明卡片制品 */\n TRANSPARENT_CARD = 'transparent_card',\n /** 明信片 - 明信片类商品 */\n POSTCARD = 'postcard',\n /** 镭射票 - 镭射票类商品 */\n LASER_TICKET = 'laser_ticket',\n /** 帆布包 - 帆布包类商品 */\n CANVAS_BAG = 'canvas_bag',\n /** 线圈笔记本 - 线圈装订笔记本 */\n SPIRAL_NOTEBOOK = 'spiral_notebook',\n /** 鼠标垫 - 鼠标垫类商品 */\n MOUSE_PAD = 'mouse_pad',\n /** 应援棒 - 应援棒类商品 */\n SUPPORT_STICK = 'support_stick',\n /** 挂件/钥匙扣 - 挂件/钥匙扣类商品 */\n KEYCHAIN = 'keychain',\n /** 其它 */\n OTHER = 'other'\n}\n\n/**\n * 画集分类类型\n * 使用枚举值作为类型\n */\nexport type CollectionCategoryType = `${CollectionCategory}` | string;\n\n/**\n * 分类信息接口\n * 包含分类值和显示名称\n */\nexport interface CategoryInfo {\n /** 分类值 */\n value: CollectionCategoryType;\n /** 显示名称 */\n displayName: string;\n /** 描述信息 */\n description?: string;\n}\n\n// ===== 基础类型定义 =====\n\n/**\n * 艺术作品页面数据结构\n * \n * 表示画集中的单个作品页面,包含图片、标题、描述等信息。\n * 每个画集包含多个这样的作品页面。\n */\nexport interface ArtworkPage {\n /** 作品的唯一标识符 */\n id: number;\n \n /** 作品标题 */\n title: string;\n \n /** 编号 */\n number: string;\n \n /** 作品图片(支持URL或base64编码) */\n image: string;\n \n /** 通用文件服务的图片文件ID(新架构,可选) */\n fileId?: string;\n \n /** 作品描述 */\n description: string;\n \n /** 创作时间(可选) */\n createdTime?: string;\n \n /** 作品主题(可选) */\n theme?: string;\n \n /** 作品年份(可选) */\n year?: string;\n \n /** 创作媒介(可选) */\n medium?: string;\n \n /** 作品尺寸(可选) */\n dimensions?: string;\n \n /** 在画集中的显示顺序 */\n pageOrder: number;\n \n /** 是否激活(可选,默认true) */\n isActive?: boolean;\n \n /** 创建时间(可选) */\n createdAt?: string;\n \n /** 更新时间(可选) */\n updatedAt?: string;\n}\n\n/**\n * 艺术画集数据结构\n * \n * 表示一个完整的艺术画集,包含多个作品页面和相关元数据。\n * 这是系统中的核心数据模型之一。\n */\nexport interface ArtCollection {\n /** 画集的唯一标识符 */\n id: number;\n \n /** 画集标题 */\n title: string;\n \n /** 编号 */\n number: string;\n \n /** 画集封面图片路径 */\n coverImage: string;\n \n /** 通用文件服务的封面图片文件ID(新架构,可选) */\n coverImageFileId?: string;\n \n /** 画集描述 */\n description: string;\n \n /** 画集包含的所有作品页面 */\n pages: ArtworkPage[];\n \n /** 画集分类(使用枚举值) */\n category: CollectionCategoryType;\n \n /** 画集标签列表(可选) */\n tags?: string[];\n \n /** 是否已发布(可选,默认true) */\n isPublished?: boolean;\n \n /** 画集价格(单位:元,可选) */\n price?: number;\n \n /** 创建时间(可选) */\n createdAt?: string;\n \n /** 更新时间(可选) */\n updatedAt?: string;\n}\n\n// ===== 配置相关类型 =====\n\n/**\n * 系统配置数据结构\n * \n * 存储ShowMasterpiece模块的全局配置信息,\n * 包括网站设置、显示选项、功能开关等。\n */\nexport interface MasterpiecesConfig {\n /** 网站名称 */\n siteName: string;\n \n /** 网站描述 */\n siteDescription?: string;\n \n /** 首页主标题 */\n heroTitle: string;\n \n /** 首页副标题 */\n heroSubtitle?: string;\n \n /** 每页显示的最大画集数量 */\n maxCollectionsPerPage: number;\n \n /** 是否启用搜索功能 */\n enableSearch: boolean;\n \n /** 是否启用分类功能 */\n enableCategories: boolean;\n\n /** 首页分类Tab配置 */\n homeTabConfig: HomeTabConfigItem[];\n \n /** 默认分类 */\n defaultCategory: string;\n \n /** 主题模式:light(浅色)、dark(深色)、auto(自动) */\n theme: 'light' | 'dark' | 'auto';\n \n /** 界面语言:zh(中文)、en(英文) */\n language: 'zh' | 'en';\n}\n\nexport interface HomeTabConfigItem {\n category: CollectionCategoryType;\n visible: boolean;\n order: number;\n}\n\nexport const defaultHomeTabCategoryOrder: CollectionCategoryType[] = [\n CollectionCategory.CANVAS_BAG,\n CollectionCategory.SPIRAL_NOTEBOOK,\n CollectionCategory.MOUSE_PAD,\n CollectionCategory.ACRYLIC,\n CollectionCategory.BADGE,\n CollectionCategory.COLOR_PAPER,\n CollectionCategory.KEYCHAIN,\n CollectionCategory.TRANSPARENT_CARD,\n CollectionCategory.LASER_TICKET,\n];\n\nexport function buildDefaultHomeTabConfig(): HomeTabConfigItem[] {\n return [];\n}\n\nexport function normalizeHomeTabConfig(\n input?: HomeTabConfigItem[] | null,\n): HomeTabConfigItem[] {\n if (!input || input.length === 0) {\n return [];\n }\n\n const filtered = input\n .filter((item) => item && typeof item.category === 'string' && item.category.trim().length > 0)\n .map((item) => ({\n category: item.category,\n visible: item.visible ?? true,\n order: Number.isFinite(item.order) ? Number(item.order) : 0,\n }));\n\n if (filtered.length === 0) {\n return [];\n }\n\n filtered.sort((a, b) => a.order - b.order);\n const normalized = filtered.map((item, index) => ({ ...item, order: index }));\n\n if (!normalized.some((item) => item.visible)) {\n const firstItem = normalized[0];\n if (firstItem) {\n normalized[0] = { ...firstItem, visible: true };\n }\n }\n\n return normalized;\n}\n\n// ===== 表单数据类型 =====\n\n/**\n * 画集表单数据结构\n * \n * 用于创建和编辑画集时的表单数据\n */\nexport interface CollectionFormData {\n /** 画集标题 */\n title: string;\n \n /** 编号 */\n number: string;\n \n /** 封面图片 */\n coverImage: string;\n \n /** 通用文件服务的封面图片文件ID */\n coverImageFileId?: string;\n \n /** 画集描述 */\n description: string;\n \n /** 画集分类(使用枚举值) */\n category: CollectionCategoryType;\n \n /** 画集标签列表 */\ntags: string[];\n \n /** 是否已发布 */\n isPublished: boolean;\n \n /** 画集价格(单位:元,可选) */\n price?: number;\n}\n\n/**\n * 作品表单数据结构\n * \n * 用于创建和编辑作品时的表单数据\n */\nexport interface ArtworkFormData {\n /** 作品标题 */\n title: string;\n \n /** 编号 */\n number: string;\n \n /** 作品图片 */\n image?: string;\n \n /** 通用文件服务的图片文件ID */\n fileId?: string;\n \n /** 作品描述 */\n description: string;\n \n /** 创作时间 */\n createdTime: string;\n \n /** 作品主题 */\n theme: string;\n}\n\n/**\n * 配置表单数据结构\n * \n * 用于编辑系统配置时的表单数据\n */\nexport interface ConfigFormData {\n /** 网站名称 */\n siteName: string;\n \n /** 网站描述 */\n siteDescription: string;\n \n /** 首页主标题 */\n heroTitle: string;\n \n /** 首页副标题 */\n heroSubtitle: string;\n \n /** 每页显示的最大画集数量 */\n maxCollectionsPerPage: number;\n \n /** 是否启用搜索功能 */\n enableSearch: boolean;\n \n /** 是否启用分类功能 */\n enableCategories: boolean;\n\n /** 首页分类Tab配置 */\n homeTabConfig: HomeTabConfigItem[];\n \n /** 默认分类 */\n defaultCategory: string;\n \n /** 主题模式 */\n theme: 'light' | 'dark' | 'auto';\n \n /** 界面语言 */\n language: 'zh' | 'en';\n}\n\n// ===== 工具函数 =====\n\n/**\n * 获取所有可用的画集分类\n * \n * @returns 分类枚举值数组\n */\nexport function getAvailableCategories(): CollectionCategoryType[] {\n return [];\n}\n\n/**\n * 验证分类是否为有效值\n * \n * @param category - 要验证的分类值\n * @returns 是否为有效分类\n */\nexport function isValidCategory(category: string): category is CollectionCategoryType {\n if (typeof category !== 'string') {\n return false;\n }\n return category.trim().length > 0;\n}\n\n/**\n * 分类信息映射\n * 为每个分类提供完整的信息对象\n */\nexport const categories = {\n [CollectionCategory.COLLECTION]: {\n value: CollectionCategory.COLLECTION,\n displayName: '画集',\n description: '用于展示艺术作品'\n },\n [CollectionCategory.ACRYLIC]: {\n value: CollectionCategory.ACRYLIC,\n displayName: '立牌',\n description: '立牌制品'\n },\n [CollectionCategory.BADGE]: {\n value: CollectionCategory.BADGE,\n displayName: '吧唧',\n description: '徽章类商品'\n },\n [CollectionCategory.COLOR_PAPER]: {\n value: CollectionCategory.COLOR_PAPER,\n displayName: '色纸',\n description: '彩色纸张制品'\n },\n [CollectionCategory.TRANSPARENT_CARD]: {\n value: CollectionCategory.TRANSPARENT_CARD,\n displayName: '透卡',\n description: '透明卡片制品'\n },\n [CollectionCategory.POSTCARD]: {\n value: CollectionCategory.POSTCARD,\n displayName: '明信片',\n description: '明信片类商品'\n },\n [CollectionCategory.LASER_TICKET]: {\n value: CollectionCategory.LASER_TICKET,\n displayName: '镭射票',\n description: '镭射票类商品'\n },\n [CollectionCategory.CANVAS_BAG]: {\n value: CollectionCategory.CANVAS_BAG,\n displayName: '帆布包',\n description: '帆布包类商品'\n },\n [CollectionCategory.SPIRAL_NOTEBOOK]: {\n value: CollectionCategory.SPIRAL_NOTEBOOK,\n displayName: '线圈笔记本',\n description: '线圈装订笔记本'\n },\n [CollectionCategory.MOUSE_PAD]: {\n value: CollectionCategory.MOUSE_PAD,\n displayName: '鼠标垫',\n description: '鼠标垫类商品'\n },\n [CollectionCategory.SUPPORT_STICK]: {\n value: CollectionCategory.SUPPORT_STICK,\n displayName: '应援棒',\n description: '应援棒类商品'\n },\n [CollectionCategory.KEYCHAIN]: {\n value: CollectionCategory.KEYCHAIN,\n displayName: '挂件/钥匙扣',\n description: '挂件/钥匙扣类商品'\n },\n [CollectionCategory.OTHER]: {\n value: CollectionCategory.OTHER,\n displayName: '其它',\n description: '其他类型商品'\n }\n} as const satisfies Record<CollectionCategory, CategoryInfo>;\n\n\n/**\n * 获取分类的显示名称\n * 支持 collection.category.displayName 的调用方式\n */\nexport function getCategoryDisplayName(category: CollectionCategoryType): string {\n return categories[category as CollectionCategory]?.displayName || category;\n}\n\n/**\n * 获取分类的完整信息\n * 支持 collection.category.displayName 的调用方式\n */\nexport function getCategoryInfo(category: CollectionCategoryType): CategoryInfo {\n return categories[category as CollectionCategory] || {\n value: category,\n displayName: category,\n description: ''\n };\n}\n\n/**\n * 扩展 CollectionCategoryType,使其支持 displayName 属性访问\n * 使用方式: collection.category.displayName\n */\ndeclare global {\n interface String {\n get displayName(): string;\n get categoryInfo(): CategoryInfo;\n }\n}\n\n// 为字符串类型添加 displayName getter(避免重复定义)\nif (!Object.getOwnPropertyDescriptor(String.prototype, 'displayName')) {\n Object.defineProperty(String.prototype, 'displayName', {\n get(this: string): string {\n return getCategoryDisplayName(this as CollectionCategoryType);\n }\n });\n}\n\n// 为字符串类型添加 categoryInfo getter(避免重复定义)\nif (!Object.getOwnPropertyDescriptor(String.prototype, 'categoryInfo')) {\n Object.defineProperty(String.prototype, 'categoryInfo', {\n get(this: string): CategoryInfo {\n return getCategoryInfo(this as CollectionCategoryType);\n }\n });\n}\n\n/**\n * 获取分类的描述信息 (枚举调用方式)\n */\nexport const CategoryDescription = {\n [CollectionCategory.COLLECTION]: '用于展示艺术作品,包含多个作品页面的画集',\n [CollectionCategory.ACRYLIC]: '立牌制品,如亚克力立牌、展示立牌等',\n [CollectionCategory.BADGE]: '徽章类商品,如徽章、钥匙扣等',\n [CollectionCategory.COLOR_PAPER]: '彩色纸张制品,如彩色卡纸、彩色打印纸等',\n [CollectionCategory.TRANSPARENT_CARD]: '透明卡片制品,如透明卡片、透明卡等',\n [CollectionCategory.POSTCARD]: '明信片类商品,如艺术明信片、纪念明信片等',\n [CollectionCategory.LASER_TICKET]: '镭射票类商品,如演唱会门票、电影票等',\n [CollectionCategory.CANVAS_BAG]: '帆布包类商品,如帆布袋、帆布背包等',\n [CollectionCategory.SPIRAL_NOTEBOOK]: '线圈装订笔记本,如线圈笔记本、线圈装订笔记本等',\n [CollectionCategory.MOUSE_PAD]: '鼠标垫类商品,如鼠标垫、鼠标垫等',\n [CollectionCategory.SUPPORT_STICK]: '应援棒类商品,如荧光棒、应援棒等',\n [CollectionCategory.KEYCHAIN]: '挂件/钥匙扣类商品,如装饰挂件、钥匙扣等',\n [CollectionCategory.OTHER]: '挂件/钥匙扣类商品,如装饰挂件、钥匙扣等'\n} as const;\n\n// ===== 上下文类型导出 =====\nexport type { CartContextState } from './context'; \n"]}