@pisell/pisellos 2.3.73 → 2.3.75

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 (296) hide show
  1. package/dist/core/index.d.ts +7 -0
  2. package/dist/core/index.js +111 -71
  3. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  4. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  5. package/dist/model/strategy/strategy-example.js +5 -19
  6. package/dist/modules/Cart/index.js +0 -3
  7. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  8. package/dist/modules/Date/index.js +1 -5
  9. package/dist/modules/Discount/index.js +2 -4
  10. package/dist/modules/OpenData/index.js +0 -2
  11. package/dist/modules/Order/index.d.ts +1 -1
  12. package/dist/modules/Order/index.js +36 -64
  13. package/dist/modules/Payment/index.js +97 -162
  14. package/dist/modules/Quotation/index.d.ts +6 -0
  15. package/dist/modules/Quotation/index.js +75 -19
  16. package/dist/modules/Rules/index.js +1 -4
  17. package/dist/modules/Schedule/index.js +0 -1
  18. package/dist/modules/Schedule/utils.js +0 -1
  19. package/dist/modules/Step/index.js +0 -1
  20. package/dist/plugins/request.d.ts +1 -0
  21. package/dist/plugins/request.js +1 -4
  22. package/dist/plugins/window.js +2 -6
  23. package/dist/server/index.d.ts +8 -2
  24. package/dist/server/index.js +303 -269
  25. package/dist/server/modules/floor-plan/index.d.ts +4 -0
  26. package/dist/server/modules/floor-plan/index.js +240 -98
  27. package/dist/server/modules/menu/index.js +75 -59
  28. package/dist/server/modules/order/index.d.ts +17 -7
  29. package/dist/server/modules/order/index.js +421 -211
  30. package/dist/server/modules/products/index.d.ts +8 -2
  31. package/dist/server/modules/products/index.js +191 -117
  32. package/dist/server/modules/quotation/index.js +29 -38
  33. package/dist/server/modules/resource/index.js +24 -17
  34. package/dist/server/modules/schedule/index.js +27 -35
  35. package/dist/server/utils/product.js +0 -1
  36. package/dist/solution/BaseSales/index.js +38 -41
  37. package/dist/solution/BookingByStep/index.d.ts +1 -1
  38. package/dist/solution/BookingByStep/index.js +7 -59
  39. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  40. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  41. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  42. package/dist/solution/BookingTicket/index.js +0 -2
  43. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  44. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  45. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  46. package/dist/solution/BuyTickets/index.js +9 -12
  47. package/dist/solution/Checkout/index.js +177 -252
  48. package/dist/solution/Checkout/utils/index.js +4 -16
  49. package/dist/solution/RegisterAndLogin/index.js +30 -76
  50. package/dist/solution/ScanOrder/index.js +50 -60
  51. package/dist/solution/ShopDiscount/index.js +2 -7
  52. package/dist/solution/VenueBooking/index.js +45 -55
  53. package/dist/utils/task.js +15 -18
  54. package/dist/utils/watch.js +0 -1
  55. package/lib/apis/picoding.js +2 -0
  56. package/lib/core/index.d.ts +7 -0
  57. package/lib/core/index.js +149 -131
  58. package/lib/effects/index.js +46 -57
  59. package/lib/index.js +82 -49
  60. package/lib/model/index.js +14 -21
  61. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  62. package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
  63. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  64. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  65. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  66. package/lib/model/strategy/adapter/index.js +100 -64
  67. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  68. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  69. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  70. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  71. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  72. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  73. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  74. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  75. package/lib/model/strategy/adapter/promotion/index.js +1 -0
  76. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  77. package/lib/model/strategy/adapter/type.js +4 -16
  78. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  79. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  80. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  81. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  82. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  83. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  84. package/lib/model/strategy/engine.js +270 -168
  85. package/lib/model/strategy/index.js +49 -34
  86. package/lib/model/strategy/strategy-example.js +243 -239
  87. package/lib/model/strategy/type.js +100 -40
  88. package/lib/modules/Account/index.js +39 -53
  89. package/lib/modules/Account/types.js +20 -33
  90. package/lib/modules/AccountList/index.js +116 -154
  91. package/lib/modules/AccountList/types.js +30 -31
  92. package/lib/modules/AccountList/utils.js +18 -30
  93. package/lib/modules/BaseModule.js +23 -42
  94. package/lib/modules/BookingContext/index.js +158 -136
  95. package/lib/modules/BookingContext/types.js +46 -32
  96. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  97. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  98. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  99. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  100. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  101. package/lib/modules/BookingContext/utils/index.js +124 -41
  102. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  103. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  104. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  105. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  106. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  107. package/lib/modules/BookingContext/utils/resources.js +209 -167
  108. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  109. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  110. package/lib/modules/Cart/index.js +170 -124
  111. package/lib/modules/Cart/types.js +46 -51
  112. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  113. package/lib/modules/Cart/utils/cartDate.js +56 -61
  114. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  115. package/lib/modules/Cart/utils/cartNote.js +27 -32
  116. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  117. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  118. package/lib/modules/Cart/utils/cartResource.js +70 -78
  119. package/lib/modules/Cart/utils/changePrice.js +22 -50
  120. package/lib/modules/Cart/utils/index.js +106 -48
  121. package/lib/modules/Customer/constants.js +13 -34
  122. package/lib/modules/Customer/index.js +235 -172
  123. package/lib/modules/Customer/types.js +38 -35
  124. package/lib/modules/Date/index.js +116 -115
  125. package/lib/modules/Date/types.js +16 -28
  126. package/lib/modules/Date/utils.js +174 -123
  127. package/lib/modules/Discount/index.js +122 -127
  128. package/lib/modules/Discount/types.js +9 -31
  129. package/lib/modules/Guests/index.js +30 -56
  130. package/lib/modules/Guests/types.js +23 -33
  131. package/lib/modules/Holder/index.js +209 -189
  132. package/lib/modules/Holder/types.js +4 -16
  133. package/lib/modules/Holder/utils.js +20 -49
  134. package/lib/modules/OpenData/index.js +70 -76
  135. package/lib/modules/OpenData/types.js +4 -16
  136. package/lib/modules/OpenData/utils.js +44 -78
  137. package/lib/modules/Order/index.d.ts +1 -1
  138. package/lib/modules/Order/index.js +1713 -2118
  139. package/lib/modules/Order/payment-utils.js +77 -120
  140. package/lib/modules/Order/types.js +88 -35
  141. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  142. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  143. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  144. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  145. package/lib/modules/Order/utils.js +814 -647
  146. package/lib/modules/Payment/cash.js +20 -33
  147. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  148. package/lib/modules/Payment/eftpos.js +16 -30
  149. package/lib/modules/Payment/index.js +532 -399
  150. package/lib/modules/Payment/mx51.js +1 -0
  151. package/lib/modules/Payment/types.js +230 -108
  152. package/lib/modules/Payment/utils.js +52 -51
  153. package/lib/modules/Payment/walletpass.js +485 -660
  154. package/lib/modules/Product/index.js +51 -46
  155. package/lib/modules/Product/types.js +4 -16
  156. package/lib/modules/Product/utils.js +32 -33
  157. package/lib/modules/ProductList/index.js +113 -123
  158. package/lib/modules/ProductList/types.js +9 -31
  159. package/lib/modules/Quotation/index.d.ts +6 -0
  160. package/lib/modules/Quotation/index.js +110 -103
  161. package/lib/modules/Quotation/types.js +4 -16
  162. package/lib/modules/Resource/index.js +27 -59
  163. package/lib/modules/Resource/types.js +22 -32
  164. package/lib/modules/Resource/utils.js +30 -38
  165. package/lib/modules/ResourcePlanner/index.js +25 -23
  166. package/lib/modules/ResourcePlanner/localClock.js +54 -119
  167. package/lib/modules/ResourcePlanner/planner.js +589 -770
  168. package/lib/modules/ResourcePlanner/types.js +10 -29
  169. package/lib/modules/Rules/index.js +1218 -959
  170. package/lib/modules/Rules/types.js +17 -40
  171. package/lib/modules/SalesSummary/index.js +85 -90
  172. package/lib/modules/SalesSummary/types.js +4 -16
  173. package/lib/modules/SalesSummary/utils.js +355 -430
  174. package/lib/modules/ScanOrderLogger/index.js +59 -79
  175. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  176. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  177. package/lib/modules/ScanOrderLogger/types.js +4 -16
  178. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  179. package/lib/modules/Schedule/index.js +100 -114
  180. package/lib/modules/Schedule/type.js +4 -16
  181. package/lib/modules/Schedule/types.js +4 -16
  182. package/lib/modules/Schedule/utils.js +433 -291
  183. package/lib/modules/Step/index.js +40 -52
  184. package/lib/modules/Step/tyeps.js +4 -16
  185. package/lib/modules/Summary/index.js +66 -71
  186. package/lib/modules/Summary/types.js +4 -16
  187. package/lib/modules/Summary/utils.js +773 -418
  188. package/lib/modules/SurchargeList/index.js +46 -60
  189. package/lib/modules/SurchargeList/types.js +4 -16
  190. package/lib/modules/index.js +245 -63
  191. package/lib/plugins/app.js +4 -16
  192. package/lib/plugins/index.js +36 -25
  193. package/lib/plugins/request.d.ts +1 -0
  194. package/lib/plugins/request.js +137 -126
  195. package/lib/plugins/shopStore.js +4 -16
  196. package/lib/plugins/user.js +4 -16
  197. package/lib/plugins/window.js +171 -179
  198. package/lib/server/index.d.ts +8 -2
  199. package/lib/server/index.js +3083 -2663
  200. package/lib/server/modules/floor-plan/index.d.ts +4 -0
  201. package/lib/server/modules/floor-plan/index.js +159 -127
  202. package/lib/server/modules/floor-plan/types.js +15 -30
  203. package/lib/server/modules/index.js +106 -68
  204. package/lib/server/modules/menu/index.js +170 -124
  205. package/lib/server/modules/menu/types.js +18 -31
  206. package/lib/server/modules/order/index.d.ts +17 -7
  207. package/lib/server/modules/order/index.js +916 -977
  208. package/lib/server/modules/order/types.js +122 -33
  209. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  210. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  211. package/lib/server/modules/payment/index.js +59 -83
  212. package/lib/server/modules/payment/types.js +4 -16
  213. package/lib/server/modules/products/index.d.ts +8 -2
  214. package/lib/server/modules/products/index.js +656 -471
  215. package/lib/server/modules/products/types.js +44 -34
  216. package/lib/server/modules/quotation/index.js +137 -172
  217. package/lib/server/modules/quotation/types.js +21 -31
  218. package/lib/server/modules/resource/index.js +225 -186
  219. package/lib/server/modules/resource/types.js +42 -33
  220. package/lib/server/modules/schedule/index.js +135 -123
  221. package/lib/server/modules/schedule/types.js +14 -21
  222. package/lib/server/modules/schedule/utils.js +334 -163
  223. package/lib/server/types.js +4 -16
  224. package/lib/server/utils/index.js +25 -23
  225. package/lib/server/utils/product.js +196 -139
  226. package/lib/server/utils/schedule.js +34 -41
  227. package/lib/server/utils/small-ticket.js +479 -456
  228. package/lib/server/utils/time.js +40 -49
  229. package/lib/solution/BaseSales/index.js +1186 -1410
  230. package/lib/solution/BaseSales/types.js +42 -38
  231. package/lib/solution/BaseSales/utils/cartPromotion.js +642 -498
  232. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  233. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  234. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +108 -145
  235. package/lib/solution/BaseSales/utils.js +158 -143
  236. package/lib/solution/BookingByStep/index.d.ts +1 -1
  237. package/lib/solution/BookingByStep/index.js +1527 -1340
  238. package/lib/solution/BookingByStep/types.js +40 -99
  239. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  240. package/lib/solution/BookingByStep/utils/products.js +42 -52
  241. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  242. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  243. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  244. package/lib/solution/BookingTicket/index.js +607 -522
  245. package/lib/solution/BookingTicket/types.js +99 -77
  246. package/lib/solution/BookingTicket/utils/addProductDecision.js +226 -189
  247. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  248. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  249. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  250. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  251. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  252. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  253. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  254. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  255. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  256. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  257. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  258. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  259. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  260. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  261. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  262. package/lib/solution/BuyTickets/index.js +67 -70
  263. package/lib/solution/BuyTickets/types.js +22 -38
  264. package/lib/solution/Checkout/index.js +1451 -1158
  265. package/lib/solution/Checkout/types.js +91 -61
  266. package/lib/solution/Checkout/utils/index.js +228 -156
  267. package/lib/solution/PlaceOrder/index.js +55 -0
  268. package/lib/solution/RegisterAndLogin/config.js +493 -460
  269. package/lib/solution/RegisterAndLogin/index.js +633 -630
  270. package/lib/solution/RegisterAndLogin/types.js +189 -76
  271. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  272. package/lib/solution/Sales/index.js +328 -324
  273. package/lib/solution/Sales/types.js +27 -33
  274. package/lib/solution/ScanOrder/index.js +832 -864
  275. package/lib/solution/ScanOrder/types.js +33 -34
  276. package/lib/solution/ScanOrder/utils.js +409 -374
  277. package/lib/solution/ShopDiscount/index.js +226 -232
  278. package/lib/solution/ShopDiscount/types.js +15 -37
  279. package/lib/solution/ShopDiscount/utils.js +300 -172
  280. package/lib/solution/UnifiedBookingSales/index.js +1035 -1201
  281. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
  282. package/lib/solution/UnifiedBookingSales/types.js +10 -32
  283. package/lib/solution/VenueBooking/index.js +811 -879
  284. package/lib/solution/VenueBooking/types.js +19 -39
  285. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  286. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  287. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  288. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  289. package/lib/solution/VenueBooking/utils.js +130 -67
  290. package/lib/solution/index.js +124 -41
  291. package/lib/store/createStore.js +32 -29
  292. package/lib/types/index.js +4 -16
  293. package/lib/utils/payment-number.js +26 -46
  294. package/lib/utils/task.js +36 -36
  295. package/lib/utils/watch.js +81 -47
  296. package/package.json +2 -1
@@ -1,67 +1,74 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
-
19
- // src/server/modules/resource/index.ts
20
- var resource_exports = {};
21
- __export(resource_exports, {
22
- ResourceHooks: () => import_types2.ResourceHooks,
23
- ResourceModule: () => ResourceModule,
24
- resourceModule: () => resourceModule
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ResourceHooks", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _types.ResourceHooks;
10
+ }
25
11
  });
26
- module.exports = __toCommonJS(resource_exports);
27
- var import_lodash_es = require("lodash-es");
28
- var import_BaseModule = require("../../../modules/BaseModule");
29
- var import_types = require("./types");
30
- var import_types2 = require("./types");
31
- var RESOURCE_STORE_NAME = "resources";
32
- var DEFAULT_PAGE_SIZE = 999;
33
- var RESOURCE_SYNC_DEBOUNCE_MS = 1e4;
34
- var ResourceModule = class extends import_BaseModule.BaseModule {
12
+ exports.resourceModule = exports.ResourceModule = void 0;
13
+ var _lodashEs = require("lodash-es");
14
+ var _BaseModule = require("../../../modules/BaseModule");
15
+ var _types = require("./types");
16
+ /**
17
+ * SQLite 存储名称
18
+ */
19
+ const RESOURCE_STORE_NAME = 'resources';
20
+ // const BOOKING_STORE_NAME = 'resource_bookings'
21
+
22
+ /**
23
+ * 默认分页大小
24
+ */
25
+ const DEFAULT_PAGE_SIZE = 999;
26
+
27
+ /**
28
+ * 同步防抖超时(毫秒)
29
+ */
30
+ const RESOURCE_SYNC_DEBOUNCE_MS = 10_000;
31
+
32
+ /**
33
+ * Resource 模块
34
+ */
35
+ class ResourceModule extends _BaseModule.BaseModule {
36
+ defaultName = 'resource';
37
+ defaultVersion = '1.0.0';
38
+ store;
39
+ dbManager;
40
+ logger; // LoggerManager 实例
41
+ resourceDataSource;
42
+
43
+ /** 倒排索引: resourceId -> ResourceBooking[] */
44
+ resourceIdIndex = new Map();
45
+
46
+ /** 待处理的同步消息队列 */
47
+ pendingSyncMessages = [];
48
+ syncTimer;
35
49
  constructor(name, version) {
36
50
  super(name, version);
37
- this.defaultName = "resource";
38
- this.defaultVersion = "1.0.0";
39
- /** 倒排索引: resourceId -> ResourceBooking[] */
40
- this.resourceIdIndex = /* @__PURE__ */ new Map();
41
- /** 待处理的同步消息队列 */
42
- this.pendingSyncMessages = [];
43
51
  }
52
+
44
53
  // ─────────────────────────────────────────────────────────────────
45
54
  // 初始化 & 生命周期
46
55
  // ─────────────────────────────────────────────────────────────────
56
+
47
57
  async initialize(core, options) {
48
- var _a, _b;
49
58
  this.core = core;
50
- this.store = options == null ? void 0 : options.store;
51
- if (Array.isArray((_a = options == null ? void 0 : options.initialState) == null ? void 0 : _a.list)) {
52
- this.store.list = ((_b = options == null ? void 0 : options.initialState) == null ? void 0 : _b.list).map(
53
- (item) => this.normalizeResource(item)
54
- );
59
+ this.store = options?.store;
60
+ if (Array.isArray(options?.initialState?.list)) {
61
+ this.store.list = (options?.initialState?.list).map(item => this.normalizeResource(item));
55
62
  this.syncResourcesMap();
56
- this.core.effects.emit(import_types.ResourceHooks.onResourcesChanged, this.store.list);
63
+ this.core.effects.emit(_types.ResourceHooks.onResourcesChanged, this.store.list);
57
64
  } else {
58
65
  this.store.list = [];
59
- this.store.map = /* @__PURE__ */ new Map();
66
+ this.store.map = new Map();
60
67
  }
61
68
  if (!Array.isArray(this.store.bookings)) {
62
69
  this.store.bookings = [];
63
70
  }
64
- const appPlugin = core.getPlugin("app");
71
+ const appPlugin = core.getPlugin('app');
65
72
  if (appPlugin) {
66
73
  const app = appPlugin.getApp();
67
74
  this.dbManager = app.sqlite || app.dbManager;
@@ -72,7 +79,7 @@ var ResourceModule = class extends import_BaseModule.BaseModule {
72
79
  logInfo(title, metadata) {
73
80
  if (this.logger) {
74
81
  this.logger.addLog({
75
- type: "info",
82
+ type: 'info',
76
83
  title: `[ResourceModule] ${title}`,
77
84
  metadata: metadata || {}
78
85
  });
@@ -81,121 +88,145 @@ var ResourceModule = class extends import_BaseModule.BaseModule {
81
88
  logError(title, error, metadata) {
82
89
  if (this.logger) {
83
90
  this.logger.addLog({
84
- type: "error",
91
+ type: 'error',
85
92
  title: `[ResourceModule] ${title}`,
86
93
  metadata: metadata || {}
87
94
  });
88
95
  }
89
96
  }
90
97
  async preload() {
91
- await this.setupResourceSync();
92
98
  const cachedResources = await this.loadResourcesFromSQLite();
93
99
  if (cachedResources.length > 0) {
94
- this.store.list = (0, import_lodash_es.cloneDeep)(cachedResources).map((item) => this.normalizeResource(item));
100
+ this.store.list = (0, _lodashEs.cloneDeep)(cachedResources).map(item => this.normalizeResource(item));
95
101
  this.syncResourcesMap();
96
- await this.safeEmit(import_types.ResourceHooks.onResourcesChanged, this.store.list);
97
- } else {
102
+ await this.safeEmit(_types.ResourceHooks.onResourcesChanged, this.store.list);
103
+
104
+ // 二次启动优先使用 SQLite。pubsub 注册及远端校准继续在后台执行,
105
+ // setupResourceSync 完成后会合并最新数据并回写 SQLite。
106
+ void this.setupResourceSync().catch(error => {
107
+ this.logError('后台初始化资源同步失败', error);
108
+ });
109
+ return;
110
+ }
111
+
112
+ // 首次启动没有本地数据时仍等待远端结果,保证进入业务页面前资源可用。
113
+ await this.setupResourceSync();
114
+ if (this.store.list.length === 0) {
98
115
  const resources = await this.loadResourcesByServer();
99
116
  if (resources.length > 0) {
100
- this.store.list = (0, import_lodash_es.cloneDeep)(resources).map((item) => this.normalizeResource(item));
117
+ this.store.list = (0, _lodashEs.cloneDeep)(resources).map(item => this.normalizeResource(item));
101
118
  this.syncResourcesMap();
102
- await this.safeEmit(import_types.ResourceHooks.onResourcesChanged, this.store.list);
119
+ await this.safeEmit(_types.ResourceHooks.onResourcesChanged, this.store.list);
103
120
  }
104
121
  }
122
+
123
+ // const cachedBookings = await this.loadBookingsFromSQLite()
124
+ // if (cachedBookings.length > 0) {
125
+ // this.store.bookings = cloneDeep(cachedBookings)
126
+ // this.syncBookingsIndex()
127
+ // }
105
128
  }
106
129
  getRoutes() {
107
130
  return [];
108
131
  }
109
132
  destroy() {
110
- var _a;
111
133
  if (this.syncTimer) {
112
134
  clearTimeout(this.syncTimer);
113
- this.syncTimer = void 0;
135
+ this.syncTimer = undefined;
114
136
  }
115
137
  this.pendingSyncMessages = [];
116
- if ((_a = this.resourceDataSource) == null ? void 0 : _a.destroy)
117
- this.resourceDataSource.destroy();
138
+ if (this.resourceDataSource?.destroy) this.resourceDataSource.destroy();
118
139
  super.destroy();
119
140
  }
141
+
120
142
  // ─────────────────────────────────────────────────────────────────
121
143
  // Resource CRUD
122
144
  // ─────────────────────────────────────────────────────────────────
145
+
123
146
  /**
124
147
  * 获取所有资源(支持 includeBookings 附加预订信息)
125
148
  */
126
149
  getResources(queryOptions) {
127
- this.logInfo("getResources", {
150
+ this.logInfo('getResources', {
128
151
  queryOptions
129
152
  });
130
- if (!(queryOptions == null ? void 0 : queryOptions.includeBookings)) {
153
+ if (!queryOptions?.includeBookings) {
131
154
  return this.store.list;
132
155
  }
133
- return this.store.list.map((resource) => this.attachBookingsToResource(resource));
156
+ return this.store.list.map(resource => this.attachBookingsToResource(resource));
134
157
  }
158
+
135
159
  /**
136
160
  * 根据 ID 获取单个资源
137
161
  */
138
162
  getResourceById(id, queryOptions) {
139
163
  const resource = this.store.map.get(id);
140
- if (!resource)
141
- return void 0;
142
- if (queryOptions == null ? void 0 : queryOptions.includeBookings) {
164
+ if (!resource) return undefined;
165
+ if (queryOptions?.includeBookings) {
143
166
  return this.attachBookingsToResource(resource);
144
167
  }
145
168
  return resource;
146
169
  }
170
+
147
171
  /**
148
172
  * 创建资源
149
173
  */
150
174
  createResource(data) {
151
- const id = (data == null ? void 0 : data.id) ?? (data == null ? void 0 : data.form_record_id) ?? Date.now();
152
- const resource = this.normalizeResource({ ...data, id });
175
+ const id = data?.id ?? data?.form_record_id ?? Date.now();
176
+ const resource = this.normalizeResource({
177
+ ...data,
178
+ id
179
+ });
153
180
  this.store.list.push(resource);
154
181
  this.store.map.set(resource.id, resource);
155
- this.saveResourcesToSQLite(this.store.list).catch(() => {
156
- });
157
- this.safeEmit(import_types.ResourceHooks.onResourcesChanged, this.store.list);
182
+ this.saveResourcesToSQLite(this.store.list).catch(() => {});
183
+ this.safeEmit(_types.ResourceHooks.onResourcesChanged, this.store.list);
158
184
  return resource;
159
185
  }
186
+
160
187
  /**
161
188
  * 更新资源
162
189
  */
163
190
  updateResource(id, data) {
164
- const index = this.store.list.findIndex((r) => this.getIdKey(r.id) === this.getIdKey(id));
165
- if (index === -1)
166
- return void 0;
167
- const updated = this.normalizeResource({ ...this.store.list[index], ...data, id });
191
+ const index = this.store.list.findIndex(r => this.getIdKey(r.id) === this.getIdKey(id));
192
+ if (index === -1) return undefined;
193
+ const updated = this.normalizeResource({
194
+ ...this.store.list[index],
195
+ ...data,
196
+ id
197
+ });
168
198
  this.store.list[index] = updated;
169
199
  this.store.map.set(updated.id, updated);
170
- this.saveResourcesToSQLite(this.store.list).catch(() => {
171
- });
172
- this.safeEmit(import_types.ResourceHooks.onResourcesChanged, this.store.list);
200
+ this.saveResourcesToSQLite(this.store.list).catch(() => {});
201
+ this.safeEmit(_types.ResourceHooks.onResourcesChanged, this.store.list);
173
202
  return updated;
174
203
  }
204
+
175
205
  /**
176
206
  * 删除资源
177
207
  */
178
208
  deleteResource(id) {
179
209
  const key = this.getIdKey(id);
180
- const index = this.store.list.findIndex((r) => this.getIdKey(r.id) === key);
181
- if (index === -1)
182
- return false;
210
+ const index = this.store.list.findIndex(r => this.getIdKey(r.id) === key);
211
+ if (index === -1) return false;
183
212
  this.store.list.splice(index, 1);
184
213
  this.store.map.delete(id);
185
- this.saveResourcesToSQLite(this.store.list).catch(() => {
186
- });
187
- this.safeEmit(import_types.ResourceHooks.onResourcesChanged, this.store.list);
214
+ this.saveResourcesToSQLite(this.store.list).catch(() => {});
215
+ this.safeEmit(_types.ResourceHooks.onResourcesChanged, this.store.list);
188
216
  return true;
189
217
  }
218
+
190
219
  // ─────────────────────────────────────────────────────────────────
191
220
  // Booking CRUD
192
221
  // ─────────────────────────────────────────────────────────────────
222
+
193
223
  /**
194
224
  * 根据资源 ID 获取预订列表
195
225
  */
196
226
  getBookingsByResourceId(resourceId) {
197
227
  return this.resourceIdIndex.get(resourceId) || [];
198
228
  }
229
+
199
230
  /**
200
231
  * 创建预订
201
232
  */
@@ -205,43 +236,52 @@ var ResourceModule = class extends import_BaseModule.BaseModule {
205
236
  // id,
206
237
  // ...booking,
207
238
  // } as ResourceBooking
239
+
208
240
  // this.store.bookings.push(normalized)
241
+
209
242
  // const rid = normalized.resource_id ?? normalized.resourceId
210
243
  // if (rid !== undefined) {
211
244
  // const existing = this.resourceIdIndex.get(rid) || []
212
245
  // existing.push(normalized)
213
246
  // this.resourceIdIndex.set(rid, existing)
214
247
  // }
248
+
215
249
  // this.saveBookingsToSQLite(this.store.bookings).catch(() => {})
216
250
  // this.safeEmit(ResourceHooks.onBookingsChanged, this.store.bookings)
217
251
  // return normalized
218
252
  // }
253
+
219
254
  /**
220
255
  * 更新预订
221
256
  */
222
257
  // updateBooking(id: ResourceId, data: Partial<ResourceBooking>): ResourceBooking | undefined {
223
258
  // const index = this.store.bookings.findIndex(b => this.getIdKey(b.id) === this.getIdKey(id))
224
259
  // if (index === -1) return undefined
260
+
225
261
  // const old = this.store.bookings[index]
226
262
  // const updated: ResourceBooking = { ...old, ...data, id: old.id } as ResourceBooking
227
263
  // this.store.bookings[index] = updated
264
+
228
265
  // this.rebuildBookingsIndex()
229
266
  // this.saveBookingsToSQLite(this.store.bookings).catch(() => {})
230
267
  // this.safeEmit(ResourceHooks.onBookingsChanged, this.store.bookings)
231
268
  // return updated
232
269
  // }
270
+
233
271
  /**
234
272
  * 删除预订
235
273
  */
236
274
  // deleteBooking(id: ResourceId): boolean {
237
275
  // const index = this.store.bookings.findIndex(b => this.getIdKey(b.id) === this.getIdKey(id))
238
276
  // if (index === -1) return false
277
+
239
278
  // this.store.bookings.splice(index, 1)
240
279
  // this.rebuildBookingsIndex()
241
280
  // this.saveBookingsToSQLite(this.store.bookings).catch(() => {})
242
281
  // this.safeEmit(ResourceHooks.onBookingsChanged, this.store.bookings)
243
282
  // return true
244
283
  // }
284
+
245
285
  /**
246
286
  * 清空缓存
247
287
  */
@@ -253,15 +293,19 @@ var ResourceModule = class extends import_BaseModule.BaseModule {
253
293
  if (this.dbManager) {
254
294
  try {
255
295
  await this.dbManager.clear(RESOURCE_STORE_NAME);
296
+ // await this.dbManager.clear(BOOKING_STORE_NAME)
256
297
  } catch {
298
+ // 清理失败不影响调用方
257
299
  }
258
300
  }
259
- await this.safeEmit(import_types.ResourceHooks.onResourcesChanged, this.store.list);
260
- await this.safeEmit(import_types.ResourceHooks.onBookingsChanged, this.store.bookings);
301
+ await this.safeEmit(_types.ResourceHooks.onResourcesChanged, this.store.list);
302
+ await this.safeEmit(_types.ResourceHooks.onBookingsChanged, this.store.bookings);
261
303
  }
304
+
262
305
  // ─────────────────────────────────────────────────────────────────
263
306
  // 内部工具方法
264
307
  // ─────────────────────────────────────────────────────────────────
308
+
265
309
  attachBookingsToResource(resource) {
266
310
  return {
267
311
  ...resource,
@@ -269,25 +313,23 @@ var ResourceModule = class extends import_BaseModule.BaseModule {
269
313
  };
270
314
  }
271
315
  normalizeIntegerIdValue(value) {
272
- if (typeof value !== "string")
273
- return value;
316
+ if (typeof value !== 'string') return value;
274
317
  const matched = value.match(/^(-?\d+)\.0+$/);
275
- if (!matched)
276
- return value;
318
+ if (!matched) return value;
277
319
  return matched[1];
278
320
  }
279
321
  normalizeResourceIdFields(resource) {
280
322
  resource.id = this.normalizeIntegerIdValue(resource.id);
281
- if (resource.form_record_id !== void 0) {
323
+ if (resource.form_record_id !== undefined) {
282
324
  resource.form_record_id = this.normalizeIntegerIdValue(resource.form_record_id);
283
325
  }
284
- if (resource.form_id !== void 0) {
326
+ if (resource.form_id !== undefined) {
285
327
  resource.form_id = this.normalizeIntegerIdValue(resource.form_id);
286
328
  }
287
- if (resource.resource_form_id !== void 0) {
329
+ if (resource.resource_form_id !== undefined) {
288
330
  resource.resource_form_id = this.normalizeIntegerIdValue(resource.resource_form_id);
289
331
  }
290
- if (resource.resource_id !== void 0) {
332
+ if (resource.resource_id !== undefined) {
291
333
  resource.resource_id = this.normalizeIntegerIdValue(resource.resource_id);
292
334
  }
293
335
  return resource;
@@ -295,21 +337,20 @@ var ResourceModule = class extends import_BaseModule.BaseModule {
295
337
  normalizeResource(resource) {
296
338
  const normalized = this.normalizeResourceIdFields({
297
339
  ...resource,
298
- id: this.normalizeIntegerIdValue((resource == null ? void 0 : resource.id) ?? (resource == null ? void 0 : resource.form_record_id) ?? "")
340
+ id: this.normalizeIntegerIdValue(resource?.id ?? resource?.form_record_id ?? '')
299
341
  });
300
- if (normalized.form_record_id === void 0 && normalized.id !== "") {
342
+ if (normalized.form_record_id === undefined && normalized.id !== '') {
301
343
  normalized.form_record_id = normalized.id;
302
344
  }
303
- if (normalized.resource_form_id === void 0 || normalized.resource_form_id === null) {
304
- normalized.resource_form_id = "";
345
+ if (normalized.resource_form_id === undefined || normalized.resource_form_id === null) {
346
+ normalized.resource_form_id = '';
305
347
  }
306
- if (normalized.schedule === void 0 || normalized.schedule === null) {
307
- normalized.schedule = "";
348
+ if (normalized.schedule === undefined || normalized.schedule === null) {
349
+ normalized.schedule = '';
308
350
  }
309
351
  if (Array.isArray(normalized.times)) {
310
- normalized.times = normalized.times.map((timeSlot) => {
311
- if (!timeSlot || typeof timeSlot !== "object")
312
- return timeSlot;
352
+ normalized.times = normalized.times.map(timeSlot => {
353
+ if (!timeSlot || typeof timeSlot !== 'object') return timeSlot;
313
354
  const startAt = timeSlot.start_at ?? timeSlot.start;
314
355
  const endAt = timeSlot.end_at ?? timeSlot.end;
315
356
  return {
@@ -322,7 +363,7 @@ var ResourceModule = class extends import_BaseModule.BaseModule {
322
363
  });
323
364
  }
324
365
  if (Array.isArray(normalized.children)) {
325
- normalized.children = normalized.children.map((child) => this.normalizeResource(child));
366
+ normalized.children = normalized.children.map(child => this.normalizeResource(child));
326
367
  }
327
368
  return normalized;
328
369
  }
@@ -330,11 +371,12 @@ var ResourceModule = class extends import_BaseModule.BaseModule {
330
371
  try {
331
372
  await this.core.effects.emit(event, payload);
332
373
  } catch (error) {
374
+ // 不让外部监听器异常影响资源模块预加载或清理流程
333
375
  console.error(`[ResourceModule] 事件派发失败: ${event}`, error);
334
376
  }
335
377
  }
336
378
  syncResourcesMap() {
337
- this.store.map = /* @__PURE__ */ new Map();
379
+ this.store.map = new Map();
338
380
  for (const resource of this.store.list) {
339
381
  this.store.map.set(resource.id, resource);
340
382
  }
@@ -343,8 +385,7 @@ var ResourceModule = class extends import_BaseModule.BaseModule {
343
385
  this.resourceIdIndex.clear();
344
386
  for (const booking of this.store.bookings) {
345
387
  const rid = booking.resource_id ?? booking.resourceId;
346
- if (rid === void 0)
347
- continue;
388
+ if (rid === undefined) continue;
348
389
  const existing = this.resourceIdIndex.get(rid) || [];
349
390
  existing.push(booking);
350
391
  this.resourceIdIndex.set(rid, existing);
@@ -356,32 +397,34 @@ var ResourceModule = class extends import_BaseModule.BaseModule {
356
397
  getIdKey(id) {
357
398
  return String(id);
358
399
  }
400
+
359
401
  // ─────────────────────────────────────────────────────────────────
360
402
  // 数据加载
361
403
  // ─────────────────────────────────────────────────────────────────
404
+
362
405
  async loadResourcesByServer() {
363
- if (!this.resourceDataSource)
364
- return [];
406
+ if (!this.resourceDataSource) return [];
365
407
  try {
366
408
  const response = await this.resourceDataSource.getResourcePage({
367
409
  num: DEFAULT_PAGE_SIZE,
368
410
  skip: 1
369
411
  });
370
- const resourceList = Array.isArray(response == null ? void 0 : response.list) ? response.list : [];
371
- const normalizedList = resourceList.map((item) => this.normalizeResource(item));
412
+ const resourceList = Array.isArray(response?.list) ? response.list : [];
413
+ const normalizedList = resourceList.map(item => this.normalizeResource(item));
372
414
  await this.saveResourcesToSQLite(normalizedList);
373
- await this.safeEmit(import_types.ResourceHooks.onResourcesLoaded, normalizedList);
415
+ await this.safeEmit(_types.ResourceHooks.onResourcesLoaded, normalizedList);
374
416
  return normalizedList;
375
417
  } catch {
376
418
  return [];
377
419
  }
378
420
  }
421
+
379
422
  // ─────────────────────────────────────────────────────────────────
380
423
  // SQLite 持久化
381
424
  // ─────────────────────────────────────────────────────────────────
425
+
382
426
  async loadResourcesFromSQLite() {
383
- if (!this.dbManager)
384
- return [];
427
+ if (!this.dbManager) return [];
385
428
  try {
386
429
  const resources = await this.dbManager.getAll(RESOURCE_STORE_NAME);
387
430
  return resources || [];
@@ -390,25 +433,24 @@ var ResourceModule = class extends import_BaseModule.BaseModule {
390
433
  }
391
434
  }
392
435
  async saveResourcesToSQLite(resourceList) {
393
- if (!this.dbManager)
394
- return;
436
+ if (!this.dbManager) return;
395
437
  try {
396
438
  await this.dbManager.clear(RESOURCE_STORE_NAME);
397
- if (resourceList.length === 0)
398
- return;
439
+ if (resourceList.length === 0) return;
399
440
  if (this.dbManager.bulkAdd) {
400
441
  await this.dbManager.bulkAdd(RESOURCE_STORE_NAME, resourceList);
401
442
  return;
402
443
  }
403
- await Promise.all(resourceList.map((r) => this.dbManager.add(RESOURCE_STORE_NAME, r)));
444
+ await Promise.all(resourceList.map(r => this.dbManager.add(RESOURCE_STORE_NAME, r)));
404
445
  } catch (error) {
405
- console.error("saveResourcesToSQLite error", error);
406
- this.logError("保存资源到 SQLite 失败", {
446
+ console.error('saveResourcesToSQLite error', error);
447
+ this.logError('保存资源到 SQLite 失败', {
407
448
  error: error instanceof Error ? error.message : String(error),
408
449
  resourceList: resourceList.length
409
450
  });
410
451
  }
411
452
  }
453
+
412
454
  // private async loadBookingsFromSQLite(): Promise<ResourceBooking[]> {
413
455
  // if (!this.dbManager) return []
414
456
  // try {
@@ -418,6 +460,7 @@ var ResourceModule = class extends import_BaseModule.BaseModule {
418
460
  // return []
419
461
  // }
420
462
  // }
463
+
421
464
  // private async saveBookingsToSQLite(bookings: ResourceBooking[]): Promise<void> {
422
465
  // if (!this.dbManager) return
423
466
  // try {
@@ -432,97 +475,95 @@ var ResourceModule = class extends import_BaseModule.BaseModule {
432
475
  // // 忽略 SQLite 异常
433
476
  // }
434
477
  // }
478
+
435
479
  // ─────────────────────────────────────────────────────────────────
436
480
  // pubsub 同步
437
481
  // ─────────────────────────────────────────────────────────────────
482
+
438
483
  initResourceDataSource() {
439
- var _a, _b;
440
- const ResourceDataSourceClass = (_b = (_a = this.core.serverOptions) == null ? void 0 : _a.All_DATA_SOURCES) == null ? void 0 : _b.ResourceDataSource;
441
- if (!ResourceDataSourceClass)
442
- return;
484
+ const ResourceDataSourceClass = this.core.serverOptions?.All_DATA_SOURCES?.ResourceDataSource;
485
+ if (!ResourceDataSourceClass) return;
443
486
  this.resourceDataSource = new ResourceDataSourceClass();
444
487
  }
445
488
  async setupResourceSync() {
446
- var _a, _b, _c;
447
- if (!this.resourceDataSource)
448
- return;
489
+ if (!this.resourceDataSource) return;
449
490
  const result = await this.resourceDataSource.run({
450
491
  pubsub: {
451
- callback: (res) => {
452
- const data = (res == null ? void 0 : res.data) || res;
453
- if (!data)
454
- return;
455
- const channelKey = data.module || "resource";
456
- this.pendingSyncMessages.push({ ...data, _channelKey: channelKey });
457
- if (this.syncTimer)
458
- clearTimeout(this.syncTimer);
492
+ callback: res => {
493
+ const data = res?.data || res;
494
+ if (!data) return;
495
+ const channelKey = data.module || 'resource';
496
+ this.pendingSyncMessages.push({
497
+ ...data,
498
+ _channelKey: channelKey
499
+ });
500
+ if (this.syncTimer) clearTimeout(this.syncTimer);
459
501
  this.syncTimer = setTimeout(() => {
460
502
  this.processSyncMessages();
461
503
  }, RESOURCE_SYNC_DEBOUNCE_MS);
462
504
  }
463
505
  }
464
506
  }).catch(() => {
507
+ // 忽略同步初始化异常
465
508
  });
466
- console.log("result", result);
467
- this.logInfo("setupResourceSync: 资源列表查询结果", { result });
468
- if ((_b = (_a = result == null ? void 0 : result.data) == null ? void 0 : _a.list) == null ? void 0 : _b.length) {
469
- await this.mergeResourcesToStore((_c = result == null ? void 0 : result.data) == null ? void 0 : _c.list);
509
+ this.logInfo('setupResourceSync: 资源列表查询结果', {
510
+ result
511
+ });
512
+ if (result?.data?.list?.length) {
513
+ await this.mergeResourcesToStore(result?.data?.list);
470
514
  }
471
515
  }
472
516
  async processSyncMessages() {
473
- var _a, _b, _c;
474
517
  const messages = [...this.pendingSyncMessages];
475
518
  this.pendingSyncMessages = [];
476
- if (messages.length === 0)
477
- return;
519
+ if (messages.length === 0) return;
478
520
  const deleteIds = [];
479
- const bodyUpdates = /* @__PURE__ */ new Map();
521
+ const bodyUpdates = new Map();
480
522
  const sseRefreshIds = [];
481
523
  for (const msg of messages) {
482
- if (msg.operation === "delete" || msg.action === "delete") {
483
- if ((_a = msg.ids) == null ? void 0 : _a.length)
484
- deleteIds.push(...msg.ids);
485
- else if (msg.id !== void 0)
486
- deleteIds.push(msg.id);
524
+ if (msg.operation === 'delete' || msg.action === 'delete') {
525
+ if (msg.ids?.length) deleteIds.push(...msg.ids);else if (msg.id !== undefined) deleteIds.push(msg.id);
487
526
  continue;
488
527
  }
489
528
  if (msg.body) {
490
529
  const bodyId = msg.body.id ?? msg.id;
491
- if (bodyId === void 0)
492
- continue;
493
- bodyUpdates.set(this.getIdKey(bodyId), { ...msg.body, id: bodyId });
530
+ if (bodyId === undefined) continue;
531
+ bodyUpdates.set(this.getIdKey(bodyId), {
532
+ ...msg.body,
533
+ id: bodyId
534
+ });
494
535
  continue;
495
536
  }
496
- if ((_b = msg.ids) == null ? void 0 : _b.length) {
537
+ if (msg.ids?.length) {
497
538
  sseRefreshIds.push(...msg.ids);
498
- } else if (msg.id !== void 0) {
539
+ } else if (msg.id !== undefined) {
499
540
  sseRefreshIds.push(msg.id);
500
- } else if ((_c = msg.relation_resource_ids) == null ? void 0 : _c.length) {
541
+ } else if (msg.relation_resource_ids?.length) {
501
542
  sseRefreshIds.push(...msg.relation_resource_ids);
502
543
  }
503
544
  }
504
545
  const uniqueDeleteIds = this.uniqueResourceIds(deleteIds);
505
546
  const uniqueSSEIds = this.uniqueResourceIds(sseRefreshIds);
506
547
  const bodyList = [...bodyUpdates.values()];
507
- if (uniqueDeleteIds.length > 0)
508
- await this.removeResourcesByIds(uniqueDeleteIds);
509
- if (bodyList.length > 0)
510
- await this.mergeResourcesToStore(bodyList);
548
+ if (uniqueDeleteIds.length > 0) await this.removeResourcesByIds(uniqueDeleteIds);
549
+ if (bodyList.length > 0) await this.mergeResourcesToStore(bodyList);
511
550
  if (uniqueSSEIds.length > 0) {
512
551
  const freshResources = await this.fetchResourcesBySSE(uniqueSSEIds);
513
- if (freshResources.length > 0)
514
- await this.mergeResourcesToStore(freshResources);
552
+ if (freshResources.length > 0) await this.mergeResourcesToStore(freshResources);
515
553
  }
516
- if (uniqueDeleteIds.length === 0 && bodyList.length === 0 && uniqueSSEIds.length === 0)
517
- return;
518
- await this.core.effects.emit(import_types.ResourceHooks.onResourcesSyncCompleted, null);
554
+ if (uniqueDeleteIds.length === 0 && bodyList.length === 0 && uniqueSSEIds.length === 0) return;
555
+ await this.core.effects.emit(_types.ResourceHooks.onResourcesSyncCompleted, null);
519
556
  }
520
557
  async fetchResourcesBySSE(ids) {
521
- if (!this.resourceDataSource)
522
- return [];
558
+ if (!this.resourceDataSource) return [];
523
559
  try {
524
560
  const list = await this.resourceDataSource.run({
525
- sse: { query: { type: "resource", ids } }
561
+ sse: {
562
+ query: {
563
+ type: 'resource',
564
+ ids
565
+ }
566
+ }
526
567
  });
527
568
  return list || [];
528
569
  } catch {
@@ -530,8 +571,8 @@ var ResourceModule = class extends import_BaseModule.BaseModule {
530
571
  }
531
572
  }
532
573
  async removeResourcesByIds(ids) {
533
- const keySet = new Set(ids.map((id) => this.getIdKey(id)));
534
- this.store.list = this.store.list.filter((r) => !keySet.has(this.getIdKey(r.id)));
574
+ const keySet = new Set(ids.map(id => this.getIdKey(id)));
575
+ this.store.list = this.store.list.filter(r => !keySet.has(this.getIdKey(r.id)));
535
576
  this.syncResourcesMap();
536
577
  if (this.dbManager) {
537
578
  try {
@@ -539,21 +580,20 @@ var ResourceModule = class extends import_BaseModule.BaseModule {
539
580
  await this.dbManager.delete(RESOURCE_STORE_NAME, id);
540
581
  }
541
582
  } catch {
583
+ // 忽略 SQLite 异常
542
584
  }
543
585
  }
544
- await this.safeEmit(import_types.ResourceHooks.onResourcesChanged, this.store.list);
586
+ await this.safeEmit(_types.ResourceHooks.onResourcesChanged, this.store.list);
545
587
  }
546
588
  async mergeResourcesToStore(freshResources) {
547
- const freshMap = /* @__PURE__ */ new Map();
589
+ const freshMap = new Map();
548
590
  for (const r of freshResources) {
549
- if ((r == null ? void 0 : r.id) === void 0)
550
- continue;
591
+ if (r?.id === undefined) continue;
551
592
  freshMap.set(this.getIdKey(r.id), this.normalizeResource(r));
552
593
  }
553
- const updatedList = this.store.list.map((r) => {
594
+ const updatedList = this.store.list.map(r => {
554
595
  const key = this.getIdKey(r.id);
555
- if (!freshMap.has(key))
556
- return r;
596
+ if (!freshMap.has(key)) return r;
557
597
  const fresh = freshMap.get(key);
558
598
  freshMap.delete(key);
559
599
  return fresh;
@@ -564,20 +604,19 @@ var ResourceModule = class extends import_BaseModule.BaseModule {
564
604
  this.store.list = updatedList;
565
605
  this.syncResourcesMap();
566
606
  await this.saveResourcesToSQLite(this.store.list);
567
- await this.safeEmit(import_types.ResourceHooks.onResourcesChanged, this.store.list);
607
+ await this.safeEmit(_types.ResourceHooks.onResourcesChanged, this.store.list);
568
608
  }
569
609
  uniqueResourceIds(ids) {
570
- const idMap = /* @__PURE__ */ new Map();
610
+ const idMap = new Map();
571
611
  for (const id of ids) {
572
612
  idMap.set(this.getIdKey(id), id);
573
613
  }
574
614
  return [...idMap.values()];
575
615
  }
576
- };
577
- var resourceModule = new ResourceModule();
578
- // Annotate the CommonJS export names for ESM import in node:
579
- 0 && (module.exports = {
580
- ResourceHooks,
581
- ResourceModule,
582
- resourceModule
583
- });
616
+ }
617
+
618
+ // ─────────────────────────────────────────────────────────────────
619
+ // 导出
620
+ // ─────────────────────────────────────────────────────────────────
621
+ exports.ResourceModule = ResourceModule;
622
+ const resourceModule = exports.resourceModule = new ResourceModule();