@pisell/pisellos 2.3.97 → 2.3.98

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.
@@ -0,0 +1,9 @@
1
+ // 导出评估器
2
+ export { PromotionEvaluator } from "./evaluator";
3
+
4
+ // 导出适配器
5
+ export { PromotionAdapter } from "./adapter";
6
+ export { default } from "./adapter";
7
+
8
+ // 导出策略配置示例常量
9
+ export { X_ITEMS_FOR_Y_PRICE_STRATEGY, BUY_X_GET_Y_FREE_STRATEGY, ITEM_REWARD_STRATEGY } from "./examples";
@@ -326,7 +326,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
326
326
  date: string;
327
327
  status: string;
328
328
  week: string;
329
- weekNum: 0 | 5 | 3 | 1 | 2 | 4 | 6;
329
+ weekNum: 0 | 2 | 1 | 3 | 4 | 5 | 6;
330
330
  }[]>;
331
331
  submitTimeSlot(timeSlots: TimeSliceItem): void;
332
332
  private getScheduleDataByIds;
@@ -345,7 +345,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
345
345
  count: number;
346
346
  left: number;
347
347
  summaryCount: number;
348
- status: "sold_out" | "lots_of_space" | "filling_up_fast";
348
+ status: "lots_of_space" | "filling_up_fast" | "sold_out";
349
349
  }[];
350
350
  /**
351
351
  * 找到多个资源的公共可用时间段
@@ -90,6 +90,13 @@ export declare class SalesImpl extends BaseModule implements Module, SalesModule
90
90
  private groupBookingsByResource;
91
91
  private isBookingMatchedResource;
92
92
  private sortMatchedBookings;
93
+ /** Unpaid:与 Current 重合的订单沿用 Current 顺序,其余欠款订单按开始时间降序追加。 */
94
+ private sortUnpaidBookings;
95
+ /**
96
+ * 构造资源详情的 Unpaid 列表:复用旧版当前/未来订单的展示计算,再补齐被预约状态/时间漏掉的欠款订单。
97
+ * Unpaid 的成员资格由调用方按付款状态筛好;这里仅负责展示字段与顺序。
98
+ */
99
+ private buildUnpaidBookings;
93
100
  /**
94
101
  * 资源下 bookings 的返回裁剪策略:
95
102
  * 1) 优先返回当前时刻正在进行中的预约(允许并发返回多条)
@@ -485,6 +485,64 @@ export var SalesImpl = /*#__PURE__*/function (_BaseModule) {
485
485
  });
486
486
  }
487
487
 
488
+ /** Unpaid:与 Current 重合的订单沿用 Current 顺序,其余欠款订单按开始时间降序追加。 */
489
+ }, {
490
+ key: "sortUnpaidBookings",
491
+ value: function sortUnpaidBookings(bookings, currentBookings) {
492
+ var _this4 = this;
493
+ var currentOrderIndexes = new Map(currentBookings.map(function (booking, index) {
494
+ return [String(booking.order.order_id), index];
495
+ }));
496
+ return _toConsumableArray(bookings).sort(function (left, right) {
497
+ var leftIndex = currentOrderIndexes.get(String(left.order.order_id));
498
+ var rightIndex = currentOrderIndexes.get(String(right.order.order_id));
499
+ if (leftIndex !== undefined || rightIndex !== undefined) {
500
+ if (leftIndex === undefined) return 1;
501
+ if (rightIndex === undefined) return -1;
502
+ return leftIndex - rightIndex;
503
+ }
504
+ var leftStartAt = _this4.toBookingDateTime(left.start_date, left.start_time).valueOf();
505
+ var rightStartAt = _this4.toBookingDateTime(right.start_date, right.start_time).valueOf();
506
+ return rightStartAt - leftStartAt;
507
+ });
508
+ }
509
+
510
+ /**
511
+ * 构造资源详情的 Unpaid 列表:复用旧版当前/未来订单的展示计算,再补齐被预约状态/时间漏掉的欠款订单。
512
+ * Unpaid 的成员资格由调用方按付款状态筛好;这里仅负责展示字段与顺序。
513
+ */
514
+ }, {
515
+ key: "buildUnpaidBookings",
516
+ value: function buildUnpaidBookings(current, deviceCurrent, unpaidBookingList, currentBookings) {
517
+ var _this5 = this;
518
+ var legacyPrioritizedBookings = this.pickBookingsForCurrentPoint(current, this.normalizeResourceBookings(current, deviceCurrent, unpaidBookingList), {
519
+ includeAllFuture: true
520
+ });
521
+ var allBookings = this.sortMatchedBookings(unpaidBookingList.map(function (booking) {
522
+ var normalized = _this5.normalizeMatchedBooking(current, deviceCurrent, booking, {
523
+ includeCompleted: true
524
+ });
525
+ if (normalized) return normalized;
526
+ var appointmentStatus = _this5.getBookingAppointmentStatus(booking);
527
+ var status = appointmentStatus === 'started' ? 'occupied' : appointmentStatus === 'completed' ? 'completed' : 'reserved';
528
+ return _objectSpread(_objectSpread({}, booking), {}, {
529
+ status: status,
530
+ isTimeout: false,
531
+ timeoutTime: undefined,
532
+ progressPercent: undefined,
533
+ lateTime: undefined,
534
+ reserved_status: undefined,
535
+ remainingReserveTime: undefined
536
+ });
537
+ }));
538
+ var legacyOrderIds = new Set(legacyPrioritizedBookings.map(function (booking) {
539
+ return String(booking.order.order_id);
540
+ }));
541
+ return this.sortUnpaidBookings([].concat(_toConsumableArray(legacyPrioritizedBookings), _toConsumableArray(allBookings.filter(function (booking) {
542
+ return !legacyOrderIds.has(String(booking.order.order_id));
543
+ }))), currentBookings);
544
+ }
545
+
488
546
  /**
489
547
  * 资源下 bookings 的返回裁剪策略:
490
548
  * 1) 优先返回当前时刻正在进行中的预约(允许并发返回多条)
@@ -496,7 +554,7 @@ export var SalesImpl = /*#__PURE__*/function (_BaseModule) {
496
554
  }, {
497
555
  key: "pickBookingsForCurrentPoint",
498
556
  value: function pickBookingsForCurrentPoint(current, bookings) {
499
- var _this4 = this;
557
+ var _this6 = this;
500
558
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
501
559
  if (bookings.length === 0) return [];
502
560
  var _this$getOperatingDay = this.getOperatingDayRange(current),
@@ -505,17 +563,17 @@ export var SalesImpl = /*#__PURE__*/function (_BaseModule) {
505
563
 
506
564
  // 仅保留与 current 所属营业日窗口有时间交集的预约,避免跨营业日误命中
507
565
  var dayScopedBookings = bookings.filter(function (booking) {
508
- var startAt = _this4.toBookingDateTime(booking.start_date, booking.start_time);
509
- var endAt = _this4.toBookingDateTime(booking.end_date, booking.end_time);
566
+ var startAt = _this6.toBookingDateTime(booking.start_date, booking.start_time);
567
+ var endAt = _this6.toBookingDateTime(booking.end_date, booking.end_time);
510
568
  if (!startAt.isValid() || !endAt.isValid()) return false;
511
- return startAt.isBefore(operatingDayEndExclusive) && _this4.isSameOrAfter(endAt, operatingDayStart);
569
+ return startAt.isBefore(operatingDayEndExclusive) && _this6.isSameOrAfter(endAt, operatingDayStart);
512
570
  });
513
571
  if (dayScopedBookings.length === 0) return [];
514
572
  var appendNextStartGroupIfNeeded = function appendNextStartGroupIfNeeded(selectedBookings) {
515
573
  if (selectedBookings.length === 0) return selectedBookings;
516
574
  if (options.includeAllFuture) {
517
575
  var allFutureBookings = dayScopedBookings.filter(function (booking) {
518
- var startAt = _this4.toBookingDateTime(booking.start_date, booking.start_time);
576
+ var startAt = _this6.toBookingDateTime(booking.start_date, booking.start_time);
519
577
  return startAt.isValid() && startAt.isAfter(current);
520
578
  });
521
579
  return [].concat(_toConsumableArray(selectedBookings), _toConsumableArray(allFutureBookings));
@@ -525,21 +583,21 @@ export var SalesImpl = /*#__PURE__*/function (_BaseModule) {
525
583
  });
526
584
  if (!shouldAppendNextGroup) return selectedBookings;
527
585
  var selectedStartValues = new Set(selectedBookings.map(function (booking) {
528
- return _this4.toBookingDateTime(booking.start_date, booking.start_time);
586
+ return _this6.toBookingDateTime(booking.start_date, booking.start_time);
529
587
  }).filter(function (startAt) {
530
588
  return startAt.isValid();
531
589
  }).map(function (startAt) {
532
590
  return startAt.valueOf();
533
591
  }));
534
592
  var futureCandidates = dayScopedBookings.filter(function (booking) {
535
- var startAt = _this4.toBookingDateTime(booking.start_date, booking.start_time);
593
+ var startAt = _this6.toBookingDateTime(booking.start_date, booking.start_time);
536
594
  if (!startAt.isValid()) return false;
537
595
  return startAt.isAfter(current) && !selectedStartValues.has(startAt.valueOf());
538
596
  });
539
597
  if (futureCandidates.length === 0) return selectedBookings;
540
- var nextStartAt = _this4.toBookingDateTime(futureCandidates[0].start_date, futureCandidates[0].start_time).valueOf();
598
+ var nextStartAt = _this6.toBookingDateTime(futureCandidates[0].start_date, futureCandidates[0].start_time).valueOf();
541
599
  var nextStartGroup = futureCandidates.filter(function (booking) {
542
- var startAt = _this4.toBookingDateTime(booking.start_date, booking.start_time);
600
+ var startAt = _this6.toBookingDateTime(booking.start_date, booking.start_time);
543
601
  return startAt.isValid() && startAt.valueOf() === nextStartAt;
544
602
  });
545
603
  if (nextStartGroup.length === 0) return selectedBookings;
@@ -551,10 +609,10 @@ export var SalesImpl = /*#__PURE__*/function (_BaseModule) {
551
609
 
552
610
  // active: current 处于 [startAt, endAt] 区间
553
611
  var activeBookings = dayScopedBookings.filter(function (booking) {
554
- var startAt = _this4.toBookingDateTime(booking.start_date, booking.start_time);
555
- var endAt = _this4.toBookingDateTime(booking.end_date, booking.end_time);
612
+ var startAt = _this6.toBookingDateTime(booking.start_date, booking.start_time);
613
+ var endAt = _this6.toBookingDateTime(booking.end_date, booking.end_time);
556
614
  if (!startAt.isValid() || !endAt.isValid()) return false;
557
- return _this4.isSameOrAfter(current, startAt) && _this4.isSameOrBefore(current, endAt);
615
+ return _this6.isSameOrAfter(current, startAt) && _this6.isSameOrBefore(current, endAt);
558
616
  });
559
617
  if (activeBookings.length > 0) return appendNextStartGroupIfNeeded(activeBookings);
560
618
 
@@ -566,14 +624,14 @@ export var SalesImpl = /*#__PURE__*/function (_BaseModule) {
566
624
 
567
625
  // upcoming: 从未来预约里只取最早那一组(同 start_time)
568
626
  var upcoming = dayScopedBookings.filter(function (booking) {
569
- var startAt = _this4.toBookingDateTime(booking.start_date, booking.start_time);
627
+ var startAt = _this6.toBookingDateTime(booking.start_date, booking.start_time);
570
628
  return startAt.isValid() && startAt.isAfter(current);
571
629
  });
572
630
  if (upcoming.length > 0) {
573
631
  if (options.includeAllFuture) return upcoming;
574
632
  var firstStartAt = this.toBookingDateTime(upcoming[0].start_date, upcoming[0].start_time).valueOf();
575
633
  var upcomingStartGroup = upcoming.filter(function (booking) {
576
- var startAt = _this4.toBookingDateTime(booking.start_date, booking.start_time);
634
+ var startAt = _this6.toBookingDateTime(booking.start_date, booking.start_time);
577
635
  return startAt.valueOf() === firstStartAt;
578
636
  });
579
637
  return appendNextStartGroupIfNeeded(upcomingStartGroup);
@@ -626,10 +684,10 @@ export var SalesImpl = /*#__PURE__*/function (_BaseModule) {
626
684
  }, {
627
685
  key: "normalizeResourceBookings",
628
686
  value: function normalizeResourceBookings(current, deviceCurrent, bookingList) {
629
- var _this5 = this;
687
+ var _this7 = this;
630
688
  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
631
689
  var normalizedBookings = bookingList.map(function (booking) {
632
- return _this5.normalizeMatchedBooking(current, deviceCurrent, booking, options);
690
+ return _this7.normalizeMatchedBooking(current, deviceCurrent, booking, options);
633
691
  }).filter(function (booking) {
634
692
  return Boolean(booking);
635
693
  }).filter(function (booking) {
@@ -759,7 +817,7 @@ export var SalesImpl = /*#__PURE__*/function (_BaseModule) {
759
817
  var _getResourceBookingList = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(currentTime) {
760
818
  var _resourceResponse$dat,
761
819
  _resourceResponse$dat2,
762
- _this6 = this;
820
+ _this8 = this;
763
821
  var bookingList,
764
822
  deviceTime,
765
823
  current,
@@ -815,16 +873,16 @@ export var SalesImpl = /*#__PURE__*/function (_BaseModule) {
815
873
  rawBookingMap = this.groupBookingsByResource(bookingList);
816
874
  bookingMap = this.groupBookingsByResource(normalizedBookings); // 输出:每个资源都返回;bookings 可能是 0 / 1 / 多条(并发场景)
817
875
  list = resourceList.map(function (resource) {
818
- var resourceId = _this6.getResourceId(resource);
876
+ var resourceId = _this8.getResourceId(resource);
819
877
  var rawMatchedBookings = rawBookingMap.get(String(resourceId)) || [];
820
878
  var matchedBookings = bookingMap.get(String(resourceId)) || [];
821
879
  var statsBookings = rawMatchedBookings.filter(function (booking) {
822
- return _this6.isBookingIncludedInStats(booking);
880
+ return _this8.isBookingIncludedInStats(booking);
823
881
  });
824
- var orderCount = _this6.countBookingOrders(statsBookings);
882
+ var orderCount = _this8.countBookingOrders(statsBookings);
825
883
  var bookingCount = statsBookings.length;
826
- var compeleteBookingCount = _this6.countCompletedBookings(statsBookings);
827
- var bookings = _this6.pickBookingsForCurrentPoint(current, matchedBookings);
884
+ var compeleteBookingCount = _this8.countCompletedBookings(statsBookings);
885
+ var bookings = _this8.pickBookingsForCurrentPoint(current, matchedBookings);
828
886
  return _objectSpread(_objectSpread({}, resource), {}, {
829
887
  resource_id: resourceId,
830
888
  orderCount: orderCount,
@@ -861,7 +919,7 @@ export var SalesImpl = /*#__PURE__*/function (_BaseModule) {
861
919
  var _getResourceBookingItem = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(params) {
862
920
  var _resourceResponse$dat3,
863
921
  _resourceResponse$dat4,
864
- _this7 = this,
922
+ _this9 = this,
865
923
  _params$bookingList;
866
924
  var current, deviceCurrent, resourceResponse, resourceList, targetResource, resourceId, matchedBookingList, statsBookingList, completedBookingList, unpaidBookingList, bookings, completedBookings, unpaidBookings, orderCount, bookingCount, compeleteBookingCount;
867
925
  return _regeneratorRuntime().wrap(function _callee6$(_context6) {
@@ -901,7 +959,7 @@ export var SalesImpl = /*#__PURE__*/function (_BaseModule) {
901
959
  return _context6.abrupt("return", null);
902
960
  case 12:
903
961
  targetResource = resourceList.find(function (resource) {
904
- return String(_this7.getResourceId(resource)) === String(params.resourceId);
962
+ return String(_this9.getResourceId(resource)) === String(params.resourceId);
905
963
  });
906
964
  if (targetResource) {
907
965
  _context6.next = 15;
@@ -911,18 +969,18 @@ export var SalesImpl = /*#__PURE__*/function (_BaseModule) {
911
969
  case 15:
912
970
  resourceId = this.getResourceId(targetResource);
913
971
  matchedBookingList = params.bookingList.filter(function (booking) {
914
- return _this7.isBookingMatchedResource(booking, resourceId);
972
+ return _this9.isBookingMatchedResource(booking, resourceId);
915
973
  });
916
974
  statsBookingList = matchedBookingList.filter(function (booking) {
917
- return _this7.isBookingIncludedInStats(booking);
975
+ return _this9.isBookingIncludedInStats(booking);
918
976
  });
919
977
  completedBookingList = matchedBookingList.filter(function (booking) {
920
- return _this7.getBookingAppointmentStatus(booking) === 'completed';
978
+ return _this9.getBookingAppointmentStatus(booking) === 'completed';
921
979
  }); // const unpaidBookingList = matchedBookingList.filter(
922
980
  // (booking) => this.getBookingOrderPaymentStatus(booking) === 'unpaid' || this.getBookingOrderPaymentStatus(booking) === 'payment_processing',
923
981
  // );
924
982
  unpaidBookingList = matchedBookingList.filter(function (booking) {
925
- return _this7.isUnpaidBooking(booking);
983
+ return _this9.isUnpaidBooking(booking);
926
984
  });
927
985
  bookings = this.pickBookingsForCurrentPoint(current, this.normalizeResourceBookings(current, deviceCurrent, matchedBookingList), {
928
986
  includeAllFuture: true
@@ -938,9 +996,7 @@ export var SalesImpl = /*#__PURE__*/function (_BaseModule) {
938
996
  remainingReserveTime: undefined
939
997
  });
940
998
  });
941
- unpaidBookings = this.pickBookingsForCurrentPoint(current, this.normalizeResourceBookings(current, deviceCurrent, unpaidBookingList), {
942
- includeAllFuture: true
943
- });
999
+ unpaidBookings = this.buildUnpaidBookings(current, deviceCurrent, unpaidBookingList, bookings);
944
1000
  orderCount = this.countBookingOrders(statsBookingList);
945
1001
  bookingCount = statsBookingList.length;
946
1002
  compeleteBookingCount = this.countCompletedBookings(statsBookingList);
@@ -326,7 +326,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
326
326
  date: string;
327
327
  status: string;
328
328
  week: string;
329
- weekNum: 0 | 5 | 3 | 1 | 2 | 4 | 6;
329
+ weekNum: 0 | 2 | 1 | 3 | 4 | 5 | 6;
330
330
  }[]>;
331
331
  submitTimeSlot(timeSlots: TimeSliceItem): void;
332
332
  private getScheduleDataByIds;
@@ -345,7 +345,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
345
345
  count: number;
346
346
  left: number;
347
347
  summaryCount: number;
348
- status: "sold_out" | "lots_of_space" | "filling_up_fast";
348
+ status: "lots_of_space" | "filling_up_fast" | "sold_out";
349
349
  }[];
350
350
  /**
351
351
  * 找到多个资源的公共可用时间段
@@ -90,6 +90,13 @@ export declare class SalesImpl extends BaseModule implements Module, SalesModule
90
90
  private groupBookingsByResource;
91
91
  private isBookingMatchedResource;
92
92
  private sortMatchedBookings;
93
+ /** Unpaid:与 Current 重合的订单沿用 Current 顺序,其余欠款订单按开始时间降序追加。 */
94
+ private sortUnpaidBookings;
95
+ /**
96
+ * 构造资源详情的 Unpaid 列表:复用旧版当前/未来订单的展示计算,再补齐被预约状态/时间漏掉的欠款订单。
97
+ * Unpaid 的成员资格由调用方按付款状态筛好;这里仅负责展示字段与顺序。
98
+ */
99
+ private buildUnpaidBookings;
93
100
  /**
94
101
  * 资源下 bookings 的返回裁剪策略:
95
102
  * 1) 优先返回当前时刻正在进行中的预约(允许并发返回多条)
@@ -340,6 +340,53 @@ class SalesImpl extends _BaseModule.BaseModule {
340
340
  });
341
341
  }
342
342
 
343
+ /** Unpaid:与 Current 重合的订单沿用 Current 顺序,其余欠款订单按开始时间降序追加。 */
344
+ sortUnpaidBookings(bookings, currentBookings) {
345
+ const currentOrderIndexes = new Map(currentBookings.map((booking, index) => [String(booking.order.order_id), index]));
346
+ return [...bookings].sort((left, right) => {
347
+ const leftIndex = currentOrderIndexes.get(String(left.order.order_id));
348
+ const rightIndex = currentOrderIndexes.get(String(right.order.order_id));
349
+ if (leftIndex !== undefined || rightIndex !== undefined) {
350
+ if (leftIndex === undefined) return 1;
351
+ if (rightIndex === undefined) return -1;
352
+ return leftIndex - rightIndex;
353
+ }
354
+ const leftStartAt = this.toBookingDateTime(left.start_date, left.start_time).valueOf();
355
+ const rightStartAt = this.toBookingDateTime(right.start_date, right.start_time).valueOf();
356
+ return rightStartAt - leftStartAt;
357
+ });
358
+ }
359
+
360
+ /**
361
+ * 构造资源详情的 Unpaid 列表:复用旧版当前/未来订单的展示计算,再补齐被预约状态/时间漏掉的欠款订单。
362
+ * Unpaid 的成员资格由调用方按付款状态筛好;这里仅负责展示字段与顺序。
363
+ */
364
+ buildUnpaidBookings(current, deviceCurrent, unpaidBookingList, currentBookings) {
365
+ const legacyPrioritizedBookings = this.pickBookingsForCurrentPoint(current, this.normalizeResourceBookings(current, deviceCurrent, unpaidBookingList), {
366
+ includeAllFuture: true
367
+ });
368
+ const allBookings = this.sortMatchedBookings(unpaidBookingList.map(booking => {
369
+ const normalized = this.normalizeMatchedBooking(current, deviceCurrent, booking, {
370
+ includeCompleted: true
371
+ });
372
+ if (normalized) return normalized;
373
+ const appointmentStatus = this.getBookingAppointmentStatus(booking);
374
+ const status = appointmentStatus === 'started' ? 'occupied' : appointmentStatus === 'completed' ? 'completed' : 'reserved';
375
+ return {
376
+ ...booking,
377
+ status,
378
+ isTimeout: false,
379
+ timeoutTime: undefined,
380
+ progressPercent: undefined,
381
+ lateTime: undefined,
382
+ reserved_status: undefined,
383
+ remainingReserveTime: undefined
384
+ };
385
+ }));
386
+ const legacyOrderIds = new Set(legacyPrioritizedBookings.map(booking => String(booking.order.order_id)));
387
+ return this.sortUnpaidBookings([...legacyPrioritizedBookings, ...allBookings.filter(booking => !legacyOrderIds.has(String(booking.order.order_id)))], currentBookings);
388
+ }
389
+
343
390
  /**
344
391
  * 资源下 bookings 的返回裁剪策略:
345
392
  * 1) 优先返回当前时刻正在进行中的预约(允许并发返回多条)
@@ -679,9 +726,7 @@ class SalesImpl extends _BaseModule.BaseModule {
679
726
  remainingReserveTime: undefined
680
727
  };
681
728
  });
682
- const unpaidBookings = this.pickBookingsForCurrentPoint(current, this.normalizeResourceBookings(current, deviceCurrent, unpaidBookingList), {
683
- includeAllFuture: true
684
- });
729
+ const unpaidBookings = this.buildUnpaidBookings(current, deviceCurrent, unpaidBookingList, bookings);
685
730
  const orderCount = this.countBookingOrders(statsBookingList);
686
731
  const bookingCount = statsBookingList.length;
687
732
  const compeleteBookingCount = this.countCompletedBookings(statsBookingList);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "private": false,
3
3
  "name": "@pisell/pisellos",
4
- "version": "2.3.97",
4
+ "version": "2.3.98",
5
5
  "description": "一个可扩展的前端模块化SDK框架,支持插件系统",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",