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