@pisell/pisellos 0.0.569 → 0.10.2
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.
- package/dist/core/index.js +10 -6
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -3
- package/dist/model/strategy/adapter/promotion/index.js +9 -0
- package/dist/model/strategy/adapter/walletPass/evaluator.js +7 -5
- package/dist/model/strategy/adapter/walletPass/example.js +26 -3
- package/dist/model/strategy/adapter/walletPass/index.js +5 -5
- package/dist/model/strategy/adapter/walletPass/type.d.ts +0 -3
- package/dist/model/strategy/adapter/walletPass/utils.d.ts +0 -26
- package/dist/model/strategy/adapter/walletPass/utils.js +17 -92
- package/dist/model/strategy/strategy-example.js +19 -5
- package/dist/modules/BaseModule.d.ts +1 -1
- package/dist/modules/BaseModule.js +8 -10
- package/dist/modules/Cart/index.js +3 -0
- package/dist/modules/Cart/utils/cartProduct.js +1 -0
- package/dist/modules/Cart/utils/cartResource.js +0 -2
- package/dist/modules/Cart/utils/changePrice.js +9 -16
- package/dist/modules/Date/index.js +5 -1
- package/dist/modules/Discount/index.d.ts +0 -1
- package/dist/modules/Discount/index.js +7 -22
- package/dist/modules/Discount/types.d.ts +0 -1
- package/dist/modules/OpenData/index.js +2 -0
- package/dist/modules/Order/index.js +70 -40
- package/dist/modules/Payment/index.js +162 -97
- package/dist/modules/Payment/types.d.ts +4 -8
- package/dist/modules/Payment/walletpass.d.ts +0 -2
- package/dist/modules/Payment/walletpass.js +5 -4
- package/dist/modules/ProductList/index.d.ts +1 -1
- package/dist/modules/ProductList/index.js +3 -12
- package/dist/modules/ProductList/types.d.ts +0 -1
- package/dist/modules/Rules/index.js +126 -427
- package/dist/modules/SalesSummary/utils.js +1 -2
- package/dist/modules/Schedule/getDateIsInSchedule.js +0 -5
- package/dist/modules/Schedule/index.js +1 -0
- package/dist/modules/Schedule/utils.js +1 -0
- package/dist/modules/Step/index.js +1 -0
- package/dist/modules/Summary/utils.js +22 -43
- package/dist/plugins/request.js +4 -1
- package/dist/plugins/window.js +6 -2
- package/dist/server/index.js +129 -97
- package/dist/server/modules/menu/index.js +41 -32
- package/dist/server/modules/order/index.js +4 -2
- package/dist/server/modules/products/index.js +42 -24
- package/dist/server/modules/quotation/index.js +38 -29
- package/dist/server/modules/resource/index.js +4 -3
- package/dist/server/modules/schedule/index.js +35 -27
- package/dist/server/utils/product.js +1 -0
- package/dist/solution/BaseSales/index.js +41 -38
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingByStep/index.js +60 -11
- package/dist/solution/BookingByStep/utils/capacity.js +11 -1
- package/dist/solution/BookingByStep/utils/resources.js +3 -1
- package/dist/solution/BookingByStep/utils/timeslots.js +43 -2
- package/dist/solution/BookingTicket/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.js +2 -0
- package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +7 -6
- package/dist/solution/BookingTicket/utils/scan/handleScan.js +31 -25
- package/dist/solution/BookingTicket/utils/scan/index.js +10 -6
- package/dist/solution/BuyTickets/index.js +12 -9
- package/dist/solution/Checkout/index.js +252 -177
- package/dist/solution/Checkout/utils/index.js +16 -4
- package/dist/solution/RegisterAndLogin/index.js +76 -30
- package/dist/solution/ScanOrder/index.js +60 -50
- package/dist/solution/ShopDiscount/index.js +14 -15
- package/dist/solution/ShopDiscount/types.d.ts +4 -5
- package/dist/solution/ShopDiscount/utils.d.ts +0 -9
- package/dist/solution/ShopDiscount/utils.js +0 -9
- package/dist/solution/VenueBooking/index.d.ts +3 -31
- package/dist/solution/VenueBooking/index.js +496 -651
- package/dist/solution/VenueBooking/types.d.ts +1 -3
- package/dist/solution/VenueBooking/types.js +0 -1
- package/dist/solution/VenueBooking/utils/dateSummary.d.ts +2 -2
- package/dist/solution/VenueBooking/utils/dateSummary.js +25 -12
- package/dist/solution/VenueBooking/utils/timeSlot.d.ts +0 -2
- package/dist/solution/VenueBooking/utils/timeSlot.js +4 -9
- package/dist/types/index.d.ts +1 -1
- package/dist/utils/task.js +18 -15
- package/dist/utils/watch.js +1 -0
- package/lib/apis/picoding.js +0 -2
- package/lib/core/index.js +132 -130
- package/lib/effects/index.js +57 -46
- package/lib/index.d.ts +0 -1
- package/lib/index.js +50 -92
- package/lib/model/index.js +21 -14
- package/lib/model/strategy/adapter/dataVariant/adapter.js +50 -38
- package/lib/model/strategy/adapter/dataVariant/evaluator.js +236 -162
- package/lib/model/strategy/adapter/dataVariant/examples.js +237 -229
- package/lib/model/strategy/adapter/dataVariant/index.js +34 -39
- package/lib/model/strategy/adapter/dataVariant/type.js +28 -57
- package/lib/model/strategy/adapter/index.js +64 -100
- package/lib/model/strategy/adapter/itemRule/adapter.js +144 -156
- package/lib/model/strategy/adapter/itemRule/evaluator.js +48 -36
- package/lib/model/strategy/adapter/itemRule/examples.js +225 -295
- package/lib/model/strategy/adapter/itemRule/index.js +57 -83
- package/lib/model/strategy/adapter/itemRule/type.js +36 -97
- package/lib/model/strategy/adapter/promotion/adapter.js +63 -84
- package/lib/model/strategy/adapter/promotion/evaluator.js +231 -381
- package/lib/model/strategy/adapter/promotion/examples.js +159 -139
- package/lib/model/strategy/adapter/promotion/index.js +49 -1
- package/lib/model/strategy/adapter/promotion/type.js +35 -199
- package/lib/model/strategy/adapter/type.js +16 -4
- package/lib/model/strategy/adapter/walletPass/evaluator.js +152 -180
- package/lib/model/strategy/adapter/walletPass/example.js +190 -217
- package/lib/model/strategy/adapter/walletPass/index.js +51 -75
- package/lib/model/strategy/adapter/walletPass/locales.js +58 -36
- package/lib/model/strategy/adapter/walletPass/type.d.ts +0 -3
- package/lib/model/strategy/adapter/walletPass/type.js +16 -4
- package/lib/model/strategy/adapter/walletPass/utils.d.ts +0 -26
- package/lib/model/strategy/adapter/walletPass/utils.js +383 -678
- package/lib/model/strategy/engine.js +168 -270
- package/lib/model/strategy/index.js +34 -49
- package/lib/model/strategy/strategy-example.js +239 -243
- package/lib/model/strategy/type.js +40 -100
- package/lib/modules/Account/index.js +53 -39
- package/lib/modules/Account/types.js +33 -20
- package/lib/modules/AccountList/index.js +154 -116
- package/lib/modules/AccountList/types.js +31 -30
- package/lib/modules/AccountList/utils.js +30 -18
- package/lib/modules/BaseModule.d.ts +1 -1
- package/lib/modules/BaseModule.js +46 -25
- package/lib/modules/BookingContext/index.js +136 -158
- package/lib/modules/BookingContext/types.js +32 -46
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +143 -131
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +82 -75
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +150 -170
- package/lib/modules/BookingContext/utils/flexible.js +55 -38
- package/lib/modules/BookingContext/utils/formatResourceList.js +34 -19
- package/lib/modules/BookingContext/utils/index.js +41 -124
- package/lib/modules/BookingContext/utils/noResource.js +70 -58
- package/lib/modules/BookingContext/utils/orderLineDisplay.js +41 -14
- package/lib/modules/BookingContext/utils/productExtend.js +155 -202
- package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
- package/lib/modules/BookingContext/utils/resourceSelection.js +41 -19
- package/lib/modules/BookingContext/utils/resources.js +167 -209
- package/lib/modules/BookingContext/utils/serviceTimes.js +116 -115
- package/lib/modules/BookingContext/utils/timeSlices.js +80 -70
- package/lib/modules/Cart/index.js +124 -170
- package/lib/modules/Cart/types.js +51 -46
- package/lib/modules/Cart/utils/cartAccount.js +39 -40
- package/lib/modules/Cart/utils/cartDate.js +61 -56
- package/lib/modules/Cart/utils/cartDiscount.js +33 -28
- package/lib/modules/Cart/utils/cartNote.js +32 -27
- package/lib/modules/Cart/utils/cartProduct.js +251 -321
- package/lib/modules/Cart/utils/cartRelationForms.js +35 -29
- package/lib/modules/Cart/utils/cartResource.js +78 -72
- package/lib/modules/Cart/utils/changePrice.js +50 -28
- package/lib/modules/Cart/utils/index.js +48 -106
- package/lib/modules/Customer/constants.js +34 -13
- package/lib/modules/Customer/index.js +169 -232
- package/lib/modules/Customer/types.js +35 -38
- package/lib/modules/Date/index.js +115 -116
- package/lib/modules/Date/types.js +28 -16
- package/lib/modules/Date/utils.js +123 -174
- package/lib/modules/Discount/index.d.ts +0 -1
- package/lib/modules/Discount/index.js +128 -130
- package/lib/modules/Discount/types.d.ts +0 -1
- package/lib/modules/Discount/types.js +31 -9
- package/lib/modules/Guests/index.js +56 -30
- package/lib/modules/Guests/types.js +33 -23
- package/lib/modules/Holder/index.js +189 -209
- package/lib/modules/Holder/types.js +16 -4
- package/lib/modules/Holder/utils.js +49 -20
- package/lib/modules/OpenData/index.js +76 -69
- package/lib/modules/OpenData/types.js +16 -4
- package/lib/modules/OpenData/utils.js +78 -44
- package/lib/modules/Order/index.js +1909 -1572
- package/lib/modules/Order/types.js +35 -78
- package/lib/modules/Order/utils/bundleDiscountHydration.js +74 -41
- package/lib/modules/Order/utils/manualProductDiscount.js +123 -124
- package/lib/modules/Order/utils/orderCollectionIdentity.js +210 -148
- package/lib/modules/Order/utils.js +634 -799
- package/lib/modules/Payment/cash.js +33 -20
- package/lib/modules/Payment/cashRecommendationAlgorithm.js +76 -145
- package/lib/modules/Payment/eftpos.js +30 -16
- package/lib/modules/Payment/index.js +378 -518
- package/lib/modules/Payment/mx51.js +0 -1
- package/lib/modules/Payment/types.d.ts +4 -8
- package/lib/modules/Payment/types.js +107 -216
- package/lib/modules/Payment/utils.js +48 -51
- package/lib/modules/Payment/walletpass.d.ts +0 -2
- package/lib/modules/Payment/walletpass.js +211 -226
- package/lib/modules/Product/index.js +46 -51
- package/lib/modules/Product/types.js +16 -4
- package/lib/modules/Product/utils.js +33 -32
- package/lib/modules/ProductList/index.d.ts +1 -1
- package/lib/modules/ProductList/index.js +117 -117
- package/lib/modules/ProductList/types.d.ts +0 -1
- package/lib/modules/ProductList/types.js +31 -9
- package/lib/modules/Quotation/index.js +100 -66
- package/lib/modules/Quotation/types.js +16 -4
- package/lib/modules/Resource/index.js +59 -27
- package/lib/modules/Resource/types.js +32 -22
- package/lib/modules/Resource/utils.js +38 -30
- package/lib/modules/ResourcePlanner/index.js +61 -60
- package/lib/modules/ResourcePlanner/planner.js +384 -346
- package/lib/modules/ResourcePlanner/types.js +16 -4
- package/lib/modules/Rules/index.js +903 -1475
- package/lib/modules/Rules/types.js +40 -17
- package/lib/modules/SalesSummary/index.js +90 -85
- package/lib/modules/SalesSummary/types.js +16 -4
- package/lib/modules/SalesSummary/utils.js +427 -351
- package/lib/modules/ScanOrderLogger/index.js +79 -59
- package/lib/modules/ScanOrderLogger/providers/feishu.js +78 -54
- package/lib/modules/ScanOrderLogger/providers/grafana.js +36 -13
- package/lib/modules/ScanOrderLogger/types.js +16 -4
- package/lib/modules/Schedule/getDateIsInSchedule.js +163 -339
- package/lib/modules/Schedule/index.js +114 -100
- package/lib/modules/Schedule/type.js +16 -4
- package/lib/modules/Schedule/types.js +16 -4
- package/lib/modules/Schedule/utils.js +291 -433
- package/lib/modules/Step/index.js +52 -40
- package/lib/modules/Step/tyeps.js +16 -4
- package/lib/modules/Summary/index.js +71 -66
- package/lib/modules/Summary/types.js +16 -4
- package/lib/modules/Summary/utils.js +418 -791
- package/lib/modules/SurchargeList/index.js +60 -46
- package/lib/modules/SurchargeList/types.js +16 -4
- package/lib/modules/index.js +63 -245
- package/lib/plugins/app.js +16 -4
- package/lib/plugins/index.js +25 -36
- package/lib/plugins/request.js +126 -137
- package/lib/plugins/shopStore.js +16 -4
- package/lib/plugins/user.js +16 -4
- package/lib/plugins/window.js +179 -171
- package/lib/server/index.js +2337 -2675
- package/lib/server/modules/floor-plan/index.js +123 -102
- package/lib/server/modules/floor-plan/types.js +30 -15
- package/lib/server/modules/index.js +68 -106
- package/lib/server/modules/menu/index.js +122 -146
- package/lib/server/modules/menu/types.js +31 -18
- package/lib/server/modules/order/index.js +642 -567
- package/lib/server/modules/order/types.js +32 -117
- package/lib/server/modules/order/utils/filterBookings.js +194 -219
- package/lib/server/modules/order/utils/filterOrders.js +92 -118
- package/lib/server/modules/payment/index.js +83 -59
- package/lib/server/modules/payment/types.js +16 -4
- package/lib/server/modules/products/index.js +459 -575
- package/lib/server/modules/products/types.js +34 -44
- package/lib/server/modules/quotation/index.js +172 -137
- package/lib/server/modules/quotation/types.js +31 -21
- package/lib/server/modules/resource/index.js +184 -213
- package/lib/server/modules/resource/types.js +33 -42
- package/lib/server/modules/schedule/index.js +123 -135
- package/lib/server/modules/schedule/types.js +21 -14
- package/lib/server/modules/schedule/utils.js +163 -334
- package/lib/server/types.js +16 -4
- package/lib/server/utils/index.js +23 -25
- package/lib/server/utils/product.js +139 -196
- package/lib/server/utils/schedule.js +41 -34
- package/lib/server/utils/small-ticket.js +456 -478
- package/lib/server/utils/time.js +49 -40
- package/lib/solution/BaseSales/index.js +1016 -850
- package/lib/solution/BaseSales/types.js +37 -41
- package/lib/solution/BaseSales/utils/cartPromotion.js +460 -611
- package/lib/solution/BaseSales/utils/parseSalesResponse.js +105 -85
- package/lib/solution/BaseSales/utils/quotationPrice.js +114 -56
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +143 -102
- package/lib/solution/BaseSales/utils.js +140 -155
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingByStep/index.js +1340 -1530
- package/lib/solution/BookingByStep/types.js +99 -40
- package/lib/solution/BookingByStep/utils/capacity.js +160 -192
- package/lib/solution/BookingByStep/utils/products.js +52 -42
- package/lib/solution/BookingByStep/utils/resources.js +330 -527
- package/lib/solution/BookingByStep/utils/stock.js +44 -65
- package/lib/solution/BookingByStep/utils/timeslots.js +131 -129
- package/lib/solution/BookingTicket/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.js +459 -543
- package/lib/solution/BookingTicket/types.js +77 -99
- package/lib/solution/BookingTicket/utils/addProductDecision.js +184 -219
- package/lib/solution/BookingTicket/utils/addTimeAvailability.js +89 -58
- package/lib/solution/BookingTicket/utils/bookingStatus.js +78 -107
- package/lib/solution/BookingTicket/utils/cartView.js +94 -110
- package/lib/solution/BookingTicket/utils/exampleData.js +0 -185
- package/lib/solution/BookingTicket/utils/orderCustomer.js +41 -18
- package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +86 -219
- package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +93 -144
- package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +91 -79
- package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +41 -54
- package/lib/solution/BookingTicket/utils/scan/handleScan.js +81 -84
- package/lib/solution/BookingTicket/utils/scan/index.js +104 -98
- package/lib/solution/BookingTicket/utils/scan/scanCache.js +43 -90
- package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +64 -52
- package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +58 -56
- package/lib/solution/BuyTickets/index.js +70 -67
- package/lib/solution/BuyTickets/types.js +38 -22
- package/lib/solution/Checkout/index.js +1158 -1451
- package/lib/solution/Checkout/types.js +61 -91
- package/lib/solution/Checkout/utils/index.js +156 -228
- package/lib/solution/PlaceOrder/index.js +0 -55
- package/lib/solution/RegisterAndLogin/config.js +460 -493
- package/lib/solution/RegisterAndLogin/index.js +630 -633
- package/lib/solution/RegisterAndLogin/types.js +76 -189
- package/lib/solution/RegisterAndLogin/utils.js +125 -183
- package/lib/solution/Sales/index.js +320 -317
- package/lib/solution/Sales/types.js +33 -27
- package/lib/solution/ScanOrder/index.js +862 -831
- package/lib/solution/ScanOrder/types.js +34 -33
- package/lib/solution/ScanOrder/utils.js +371 -406
- package/lib/solution/ShopDiscount/index.js +233 -235
- package/lib/solution/ShopDiscount/types.d.ts +4 -5
- package/lib/solution/ShopDiscount/types.js +37 -15
- package/lib/solution/ShopDiscount/utils.d.ts +0 -9
- package/lib/solution/ShopDiscount/utils.js +172 -309
- package/lib/solution/UnifiedBookingSales/index.js +405 -379
- package/lib/solution/UnifiedBookingSales/types.js +31 -12
- package/lib/solution/VenueBooking/index.d.ts +3 -31
- package/lib/solution/VenueBooking/index.js +916 -967
- package/lib/solution/VenueBooking/types.d.ts +1 -3
- package/lib/solution/VenueBooking/types.js +39 -20
- package/lib/solution/VenueBooking/utils/dateSummary.d.ts +2 -2
- package/lib/solution/VenueBooking/utils/dateSummary.js +62 -25
- package/lib/solution/VenueBooking/utils/resource.js +54 -31
- package/lib/solution/VenueBooking/utils/slotMerge.js +107 -94
- package/lib/solution/VenueBooking/utils/timeSlot.d.ts +0 -2
- package/lib/solution/VenueBooking/utils/timeSlot.js +133 -138
- package/lib/solution/VenueBooking/utils.js +67 -130
- package/lib/solution/index.js +41 -124
- package/lib/store/createStore.js +29 -32
- package/lib/types/index.d.ts +1 -1
- package/lib/types/index.js +16 -4
- package/lib/utils/task.js +36 -36
- package/lib/utils/watch.js +47 -81
- package/package.json +2 -4
- package/dist/solution/VenueBooking/utils/smartPricing.d.ts +0 -70
- package/dist/solution/VenueBooking/utils/smartPricing.js +0 -233
- package/lib/solution/VenueBooking/utils/smartPricing.d.ts +0 -70
- package/lib/solution/VenueBooking/utils/smartPricing.js +0 -192
|
@@ -1,126 +1,105 @@
|
|
|
1
|
-
|
|
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);
|
|
2
18
|
|
|
3
|
-
|
|
4
|
-
|
|
19
|
+
// src/solution/RegisterAndLogin/utils.ts
|
|
20
|
+
var utils_exports = {};
|
|
21
|
+
__export(utils_exports, {
|
|
22
|
+
debounce: () => debounce,
|
|
23
|
+
deepClone: () => deepClone,
|
|
24
|
+
formatEmailDisplay: () => formatEmailDisplay,
|
|
25
|
+
formatPhoneDisplay: () => formatPhoneDisplay,
|
|
26
|
+
formatTimestamp: () => formatTimestamp,
|
|
27
|
+
generateRandomString: () => generateRandomString,
|
|
28
|
+
getDeviceType: () => getDeviceType,
|
|
29
|
+
getOAuthProviderDisplayName: () => getOAuthProviderDisplayName,
|
|
30
|
+
getOAuthProviderIconUrl: () => getOAuthProviderIconUrl,
|
|
31
|
+
getTimeDifference: () => getTimeDifference,
|
|
32
|
+
isAndroidDevice: () => isAndroidDevice,
|
|
33
|
+
isIOSDevice: () => isIOSDevice,
|
|
34
|
+
isMobileDevice: () => isMobileDevice,
|
|
35
|
+
isTimestampExpired: () => isTimestampExpired,
|
|
36
|
+
isWebAuthnSupported: () => isWebAuthnSupported,
|
|
37
|
+
safeJsonParse: () => safeJsonParse,
|
|
38
|
+
safeJsonStringify: () => safeJsonStringify,
|
|
39
|
+
throttle: () => throttle,
|
|
40
|
+
validateEmail: () => validateEmail,
|
|
41
|
+
validatePassword: () => validatePassword,
|
|
42
|
+
validatePhone: () => validatePhone,
|
|
43
|
+
validateVerificationCode: () => validateVerificationCode
|
|
5
44
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
8
|
-
exports.formatEmailDisplay = formatEmailDisplay;
|
|
9
|
-
exports.formatPhoneDisplay = formatPhoneDisplay;
|
|
10
|
-
exports.formatTimestamp = formatTimestamp;
|
|
11
|
-
exports.generateRandomString = generateRandomString;
|
|
12
|
-
exports.getDeviceType = getDeviceType;
|
|
13
|
-
exports.getOAuthProviderDisplayName = getOAuthProviderDisplayName;
|
|
14
|
-
exports.getOAuthProviderIconUrl = getOAuthProviderIconUrl;
|
|
15
|
-
exports.getTimeDifference = getTimeDifference;
|
|
16
|
-
exports.isAndroidDevice = isAndroidDevice;
|
|
17
|
-
exports.isIOSDevice = isIOSDevice;
|
|
18
|
-
exports.isMobileDevice = isMobileDevice;
|
|
19
|
-
exports.isTimestampExpired = isTimestampExpired;
|
|
20
|
-
exports.isWebAuthnSupported = isWebAuthnSupported;
|
|
21
|
-
exports.safeJsonParse = safeJsonParse;
|
|
22
|
-
exports.safeJsonStringify = safeJsonStringify;
|
|
23
|
-
exports.throttle = throttle;
|
|
24
|
-
exports.validateEmail = validateEmail;
|
|
25
|
-
exports.validatePassword = validatePassword;
|
|
26
|
-
exports.validatePhone = validatePhone;
|
|
27
|
-
exports.validateVerificationCode = validateVerificationCode;
|
|
28
|
-
var _types = require("./types");
|
|
29
|
-
/**
|
|
30
|
-
* 注册登录工具函数
|
|
31
|
-
*/
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* 验证邮箱格式
|
|
35
|
-
*/
|
|
45
|
+
module.exports = __toCommonJS(utils_exports);
|
|
46
|
+
var import_types = require("./types");
|
|
36
47
|
function validateEmail(email) {
|
|
37
48
|
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
38
49
|
return emailRegex.test(email);
|
|
39
50
|
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* 验证手机号格式(支持多种国际格式)
|
|
43
|
-
*/
|
|
44
51
|
function validatePhone(phone) {
|
|
45
|
-
|
|
46
|
-
const cleanPhone = phone.replace(/[^\d+]/g, '');
|
|
47
|
-
|
|
48
|
-
// 基本的手机号验证规则
|
|
52
|
+
const cleanPhone = phone.replace(/[^\d+]/g, "");
|
|
49
53
|
const phoneRegex = /^(\+\d{1,3}[- ]?)?\d{10,14}$/;
|
|
50
54
|
return phoneRegex.test(cleanPhone);
|
|
51
55
|
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* 验证密码强度
|
|
55
|
-
*/
|
|
56
56
|
function validatePassword(password) {
|
|
57
57
|
const errors = [];
|
|
58
58
|
if (password.length < 8) {
|
|
59
|
-
errors.push(
|
|
59
|
+
errors.push("密码长度至少为8位");
|
|
60
60
|
}
|
|
61
61
|
if (password.length > 128) {
|
|
62
|
-
errors.push(
|
|
62
|
+
errors.push("密码长度不能超过128位");
|
|
63
63
|
}
|
|
64
64
|
if (!/[a-z]/.test(password)) {
|
|
65
|
-
errors.push(
|
|
65
|
+
errors.push("密码必须包含至少一个小写字母");
|
|
66
66
|
}
|
|
67
67
|
if (!/[A-Z]/.test(password)) {
|
|
68
|
-
errors.push(
|
|
68
|
+
errors.push("密码必须包含至少一个大写字母");
|
|
69
69
|
}
|
|
70
70
|
if (!/\d/.test(password)) {
|
|
71
|
-
errors.push(
|
|
71
|
+
errors.push("密码必须包含至少一个数字");
|
|
72
72
|
}
|
|
73
73
|
if (!/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password)) {
|
|
74
|
-
errors.push(
|
|
74
|
+
errors.push("密码必须包含至少一个特殊字符");
|
|
75
75
|
}
|
|
76
76
|
return {
|
|
77
77
|
isValid: errors.length === 0,
|
|
78
78
|
errors
|
|
79
79
|
};
|
|
80
80
|
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* 验证验证码格式
|
|
84
|
-
*/
|
|
85
81
|
function validateVerificationCode(code, type) {
|
|
86
|
-
|
|
87
|
-
const cleanCode = code.replace(/\s/g, '');
|
|
82
|
+
const cleanCode = code.replace(/\s/g, "");
|
|
88
83
|
switch (type) {
|
|
89
|
-
case
|
|
90
|
-
case
|
|
91
|
-
// 通常是4-8位数字
|
|
84
|
+
case import_types.VerificationCodeType.EMAIL:
|
|
85
|
+
case import_types.VerificationCodeType.SMS:
|
|
92
86
|
return /^\d{4,8}$/.test(cleanCode);
|
|
93
87
|
default:
|
|
94
88
|
return false;
|
|
95
89
|
}
|
|
96
90
|
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* 格式化手机号显示
|
|
100
|
-
*/
|
|
101
91
|
function formatPhoneDisplay(phone) {
|
|
102
|
-
|
|
103
|
-
const cleanPhone = phone.replace(/[^\d+]/g, '');
|
|
104
|
-
|
|
105
|
-
// 如果是中国手机号(11位数字)
|
|
92
|
+
const cleanPhone = phone.replace(/[^\d+]/g, "");
|
|
106
93
|
if (/^\d{11}$/.test(cleanPhone)) {
|
|
107
|
-
return cleanPhone.replace(/(\d{3})(\d{4})(\d{4})/,
|
|
94
|
+
return cleanPhone.replace(/(\d{3})(\d{4})(\d{4})/, "$1 $2 $3");
|
|
108
95
|
}
|
|
109
|
-
|
|
110
|
-
// 如果是国际号码(以 + 开头)
|
|
111
|
-
if (cleanPhone.startsWith('+')) {
|
|
96
|
+
if (cleanPhone.startsWith("+")) {
|
|
112
97
|
return cleanPhone;
|
|
113
98
|
}
|
|
114
|
-
|
|
115
|
-
// 其他格式保持原样
|
|
116
99
|
return phone;
|
|
117
100
|
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* 格式化邮箱显示(隐藏部分字符)
|
|
121
|
-
*/
|
|
122
101
|
function formatEmailDisplay(email, maskLength = 3) {
|
|
123
|
-
const [localPart, domain] = email.split(
|
|
102
|
+
const [localPart, domain] = email.split("@");
|
|
124
103
|
if (!localPart || !domain) {
|
|
125
104
|
return email;
|
|
126
105
|
}
|
|
@@ -129,110 +108,76 @@ function formatEmailDisplay(email, maskLength = 3) {
|
|
|
129
108
|
}
|
|
130
109
|
const visibleStart = localPart.substring(0, maskLength);
|
|
131
110
|
const visibleEnd = localPart.substring(localPart.length - maskLength);
|
|
132
|
-
const maskedPart =
|
|
111
|
+
const maskedPart = "*".repeat(localPart.length - maskLength * 2);
|
|
133
112
|
return `${visibleStart}${maskedPart}${visibleEnd}@${domain}`;
|
|
134
113
|
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* 生成随机字符串(用于状态参数等)
|
|
138
|
-
*/
|
|
139
114
|
function generateRandomString(length = 32) {
|
|
140
|
-
const chars =
|
|
141
|
-
let result =
|
|
115
|
+
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
116
|
+
let result = "";
|
|
142
117
|
for (let i = 0; i < length; i++) {
|
|
143
118
|
result += chars.charAt(Math.floor(Math.random() * chars.length));
|
|
144
119
|
}
|
|
145
120
|
return result;
|
|
146
121
|
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* 获取 OAuth 提供商的显示名称
|
|
150
|
-
*/
|
|
151
122
|
function getOAuthProviderDisplayName(provider) {
|
|
152
123
|
const displayNames = {
|
|
153
|
-
[
|
|
154
|
-
[
|
|
155
|
-
[
|
|
156
|
-
[
|
|
157
|
-
[
|
|
124
|
+
[import_types.OAuthProvider.FACEBOOK]: "Facebook",
|
|
125
|
+
[import_types.OAuthProvider.APPLE]: "Apple",
|
|
126
|
+
[import_types.OAuthProvider.GOOGLE]: "Google",
|
|
127
|
+
[import_types.OAuthProvider.WECHAT]: "微信",
|
|
128
|
+
[import_types.OAuthProvider.GITHUB]: "GitHub"
|
|
158
129
|
};
|
|
159
130
|
return displayNames[provider] || provider;
|
|
160
131
|
}
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* 获取 OAuth 提供商的图标 URL
|
|
164
|
-
*/
|
|
165
132
|
function getOAuthProviderIconUrl(provider) {
|
|
166
133
|
const iconUrls = {
|
|
167
|
-
[
|
|
168
|
-
[
|
|
169
|
-
[
|
|
170
|
-
[
|
|
171
|
-
[
|
|
134
|
+
[import_types.OAuthProvider.FACEBOOK]: "https://cdn.jsdelivr.net/npm/simple-icons@v9/icons/facebook.svg",
|
|
135
|
+
[import_types.OAuthProvider.APPLE]: "https://cdn.jsdelivr.net/npm/simple-icons@v9/icons/apple.svg",
|
|
136
|
+
[import_types.OAuthProvider.GOOGLE]: "https://cdn.jsdelivr.net/npm/simple-icons@v9/icons/google.svg",
|
|
137
|
+
[import_types.OAuthProvider.WECHAT]: "https://cdn.jsdelivr.net/npm/simple-icons@v9/icons/wechat.svg",
|
|
138
|
+
[import_types.OAuthProvider.GITHUB]: "https://cdn.jsdelivr.net/npm/simple-icons@v9/icons/github.svg"
|
|
172
139
|
};
|
|
173
|
-
return iconUrls[provider] ||
|
|
140
|
+
return iconUrls[provider] || "";
|
|
174
141
|
}
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
* 检查是否在移动设备上
|
|
178
|
-
*/
|
|
179
142
|
function isMobileDevice() {
|
|
180
|
-
if (typeof window ===
|
|
143
|
+
if (typeof window === "undefined") {
|
|
181
144
|
return false;
|
|
182
145
|
}
|
|
183
|
-
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
|
|
146
|
+
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
|
|
147
|
+
navigator.userAgent
|
|
148
|
+
);
|
|
184
149
|
}
|
|
185
|
-
|
|
186
|
-
/**
|
|
187
|
-
* 检查是否支持 WebAuthn
|
|
188
|
-
*/
|
|
189
150
|
function isWebAuthnSupported() {
|
|
190
|
-
if (typeof window ===
|
|
151
|
+
if (typeof window === "undefined") {
|
|
191
152
|
return false;
|
|
192
153
|
}
|
|
193
154
|
return !!(navigator.credentials && navigator.credentials.create);
|
|
194
155
|
}
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* 检查是否在 iOS 设备上
|
|
198
|
-
*/
|
|
199
156
|
function isIOSDevice() {
|
|
200
|
-
if (typeof window ===
|
|
157
|
+
if (typeof window === "undefined") {
|
|
201
158
|
return false;
|
|
202
159
|
}
|
|
203
160
|
return /iPad|iPhone|iPod/.test(navigator.userAgent);
|
|
204
161
|
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* 检查是否在 Android 设备上
|
|
208
|
-
*/
|
|
209
162
|
function isAndroidDevice() {
|
|
210
|
-
if (typeof window ===
|
|
163
|
+
if (typeof window === "undefined") {
|
|
211
164
|
return false;
|
|
212
165
|
}
|
|
213
166
|
return /Android/.test(navigator.userAgent);
|
|
214
167
|
}
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* 获取设备类型
|
|
218
|
-
*/
|
|
219
168
|
function getDeviceType() {
|
|
220
|
-
if (typeof window ===
|
|
221
|
-
return
|
|
169
|
+
if (typeof window === "undefined") {
|
|
170
|
+
return "desktop";
|
|
222
171
|
}
|
|
223
172
|
const userAgent = navigator.userAgent;
|
|
224
173
|
if (/iPad/.test(userAgent)) {
|
|
225
|
-
return
|
|
174
|
+
return "tablet";
|
|
226
175
|
}
|
|
227
176
|
if (/Android|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent)) {
|
|
228
|
-
return
|
|
177
|
+
return "mobile";
|
|
229
178
|
}
|
|
230
|
-
return
|
|
179
|
+
return "desktop";
|
|
231
180
|
}
|
|
232
|
-
|
|
233
|
-
/**
|
|
234
|
-
* 防抖函数
|
|
235
|
-
*/
|
|
236
181
|
function debounce(func, wait) {
|
|
237
182
|
let timeout = null;
|
|
238
183
|
return (...args) => {
|
|
@@ -244,10 +189,6 @@ function debounce(func, wait) {
|
|
|
244
189
|
}, wait);
|
|
245
190
|
};
|
|
246
191
|
}
|
|
247
|
-
|
|
248
|
-
/**
|
|
249
|
-
* 节流函数
|
|
250
|
-
*/
|
|
251
192
|
function throttle(func, wait) {
|
|
252
193
|
let lastTime = 0;
|
|
253
194
|
return (...args) => {
|
|
@@ -258,21 +199,17 @@ function throttle(func, wait) {
|
|
|
258
199
|
}
|
|
259
200
|
};
|
|
260
201
|
}
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* 深拷贝对象
|
|
264
|
-
*/
|
|
265
202
|
function deepClone(obj) {
|
|
266
|
-
if (obj === null || typeof obj !==
|
|
203
|
+
if (obj === null || typeof obj !== "object") {
|
|
267
204
|
return obj;
|
|
268
205
|
}
|
|
269
206
|
if (obj instanceof Date) {
|
|
270
207
|
return new Date(obj.getTime());
|
|
271
208
|
}
|
|
272
209
|
if (obj instanceof Array) {
|
|
273
|
-
return obj.map(item => deepClone(item));
|
|
210
|
+
return obj.map((item) => deepClone(item));
|
|
274
211
|
}
|
|
275
|
-
if (typeof obj ===
|
|
212
|
+
if (typeof obj === "object") {
|
|
276
213
|
const cloned = {};
|
|
277
214
|
for (const key in obj) {
|
|
278
215
|
if (obj.hasOwnProperty(key)) {
|
|
@@ -283,55 +220,60 @@ function deepClone(obj) {
|
|
|
283
220
|
}
|
|
284
221
|
return obj;
|
|
285
222
|
}
|
|
286
|
-
|
|
287
|
-
/**
|
|
288
|
-
* 安全的 JSON 解析
|
|
289
|
-
*/
|
|
290
223
|
function safeJsonParse(jsonString, defaultValue) {
|
|
291
224
|
try {
|
|
292
225
|
return JSON.parse(jsonString);
|
|
293
226
|
} catch (error) {
|
|
294
|
-
console.warn(
|
|
227
|
+
console.warn("JSON 解析失败:", error);
|
|
295
228
|
return defaultValue;
|
|
296
229
|
}
|
|
297
230
|
}
|
|
298
|
-
|
|
299
|
-
/**
|
|
300
|
-
* 安全的 JSON 字符串化
|
|
301
|
-
*/
|
|
302
|
-
function safeJsonStringify(obj, defaultValue = '{}') {
|
|
231
|
+
function safeJsonStringify(obj, defaultValue = "{}") {
|
|
303
232
|
try {
|
|
304
233
|
return JSON.stringify(obj);
|
|
305
234
|
} catch (error) {
|
|
306
|
-
console.warn(
|
|
235
|
+
console.warn("JSON 字符串化失败:", error);
|
|
307
236
|
return defaultValue;
|
|
308
237
|
}
|
|
309
238
|
}
|
|
310
|
-
|
|
311
|
-
/**
|
|
312
|
-
* 格式化时间戳为可读时间
|
|
313
|
-
*/
|
|
314
|
-
function formatTimestamp(timestamp, format = 'YYYY-MM-DD HH:mm:ss') {
|
|
239
|
+
function formatTimestamp(timestamp, format = "YYYY-MM-DD HH:mm:ss") {
|
|
315
240
|
const date = new Date(timestamp);
|
|
316
241
|
const year = date.getFullYear();
|
|
317
|
-
const month = String(date.getMonth() + 1).padStart(2,
|
|
318
|
-
const day = String(date.getDate()).padStart(2,
|
|
319
|
-
const hours = String(date.getHours()).padStart(2,
|
|
320
|
-
const minutes = String(date.getMinutes()).padStart(2,
|
|
321
|
-
const seconds = String(date.getSeconds()).padStart(2,
|
|
322
|
-
return format.replace(
|
|
242
|
+
const month = String(date.getMonth() + 1).padStart(2, "0");
|
|
243
|
+
const day = String(date.getDate()).padStart(2, "0");
|
|
244
|
+
const hours = String(date.getHours()).padStart(2, "0");
|
|
245
|
+
const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
246
|
+
const seconds = String(date.getSeconds()).padStart(2, "0");
|
|
247
|
+
return format.replace("YYYY", year.toString()).replace("MM", month).replace("DD", day).replace("HH", hours).replace("mm", minutes).replace("ss", seconds);
|
|
323
248
|
}
|
|
324
|
-
|
|
325
|
-
/**
|
|
326
|
-
* 计算两个时间戳之间的差值(秒)
|
|
327
|
-
*/
|
|
328
249
|
function getTimeDifference(timestamp1, timestamp2) {
|
|
329
|
-
return Math.abs(timestamp1 - timestamp2) /
|
|
250
|
+
return Math.abs(timestamp1 - timestamp2) / 1e3;
|
|
330
251
|
}
|
|
331
|
-
|
|
332
|
-
/**
|
|
333
|
-
* 检查时间戳是否过期
|
|
334
|
-
*/
|
|
335
|
-
function isTimestampExpired(timestamp, expirationTime = 5 * 60 * 1000) {
|
|
252
|
+
function isTimestampExpired(timestamp, expirationTime = 5 * 60 * 1e3) {
|
|
336
253
|
return Date.now() - timestamp > expirationTime;
|
|
337
|
-
}
|
|
254
|
+
}
|
|
255
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
256
|
+
0 && (module.exports = {
|
|
257
|
+
debounce,
|
|
258
|
+
deepClone,
|
|
259
|
+
formatEmailDisplay,
|
|
260
|
+
formatPhoneDisplay,
|
|
261
|
+
formatTimestamp,
|
|
262
|
+
generateRandomString,
|
|
263
|
+
getDeviceType,
|
|
264
|
+
getOAuthProviderDisplayName,
|
|
265
|
+
getOAuthProviderIconUrl,
|
|
266
|
+
getTimeDifference,
|
|
267
|
+
isAndroidDevice,
|
|
268
|
+
isIOSDevice,
|
|
269
|
+
isMobileDevice,
|
|
270
|
+
isTimestampExpired,
|
|
271
|
+
isWebAuthnSupported,
|
|
272
|
+
safeJsonParse,
|
|
273
|
+
safeJsonStringify,
|
|
274
|
+
throttle,
|
|
275
|
+
validateEmail,
|
|
276
|
+
validatePassword,
|
|
277
|
+
validatePhone,
|
|
278
|
+
validateVerificationCode
|
|
279
|
+
});
|