@fas-core/shared-types 1.0.50 → 1.0.53
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/index.d.mts +42 -1
- package/dist/index.d.ts +42 -1
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +29 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -200,11 +200,22 @@ interface IStock extends BaseEntity {
|
|
|
200
200
|
lowStockThreshold: number;
|
|
201
201
|
}
|
|
202
202
|
|
|
203
|
+
/** Out-of-stock selling policy for a product/variant. */
|
|
204
|
+
declare const InventoryPolicyEnum: {
|
|
205
|
+
/** Hard-stop at available stock (no oversell). */
|
|
206
|
+
readonly DENY: "deny";
|
|
207
|
+
/** Allow backorder / oversell past available stock. */
|
|
208
|
+
readonly CONTINUE: "continue";
|
|
209
|
+
};
|
|
210
|
+
type InventoryPolicy = (typeof InventoryPolicyEnum)[keyof typeof InventoryPolicyEnum];
|
|
211
|
+
declare const INVENTORY_POLICY_VALUES: InventoryPolicy[];
|
|
212
|
+
|
|
203
213
|
interface IProductVariantFields {
|
|
204
214
|
description: string;
|
|
205
215
|
overview: string;
|
|
206
216
|
price: IPrice;
|
|
207
217
|
quantity: number;
|
|
218
|
+
inventoryPolicy: InventoryPolicy;
|
|
208
219
|
brand: IBrand;
|
|
209
220
|
store: IStore;
|
|
210
221
|
stock: IStock;
|
|
@@ -586,6 +597,36 @@ interface IUnmatched404 extends BaseEntity {
|
|
|
586
597
|
*/
|
|
587
598
|
declare const normalizePath: (input: string) => string;
|
|
588
599
|
|
|
600
|
+
/**
|
|
601
|
+
* Canonical cart pricing primitives, shared by the backend (authoritative —
|
|
602
|
+
* what the customer is charged) and the storefront configurator (live preview)
|
|
603
|
+
* so the two engines can never drift by a cent. Pure functions, no IO.
|
|
604
|
+
*
|
|
605
|
+
* Money is rounded to 2 decimals with a `Number.EPSILON` nudge so exact
|
|
606
|
+
* half-cent boundaries (e.g. 1.005) round half-up consistently across engines.
|
|
607
|
+
*/
|
|
608
|
+
/** Rounds a monetary amount to 2 decimals (half-up, float-noise-safe). */
|
|
609
|
+
declare const roundMoney: (amount: number) => number;
|
|
610
|
+
/** Clamps a requested quantity to a valid line quantity (integer >= 1). */
|
|
611
|
+
declare const normalizeLineQuantity: (quantity: number) => number;
|
|
612
|
+
/** A single add-on priced against a base unit (selection resolved to its values). */
|
|
613
|
+
interface AddonAmountInput {
|
|
614
|
+
price: number;
|
|
615
|
+
pricingType: PricingType;
|
|
616
|
+
quantity: number;
|
|
617
|
+
}
|
|
618
|
+
/**
|
|
619
|
+
* One add-on's per-(base-)unit contribution, **rounded to a cent**: a FIXED
|
|
620
|
+
* add-on contributes its price; a PERCENTAGE add-on contributes that percent of
|
|
621
|
+
* the base unit price — each times the add-on's own quantity.
|
|
622
|
+
*
|
|
623
|
+
* Per-add-on rounding is the canon (not rounding the summed total once), so each
|
|
624
|
+
* add-on's displayed price is exactly what it adds to the line.
|
|
625
|
+
*/
|
|
626
|
+
declare const addonUnitAmount: (addon: AddonAmountInput, baseUnitPrice: number) => number;
|
|
627
|
+
/** Total add-on contribution per base unit: per-add-on rounding, then summed. */
|
|
628
|
+
declare const addonsUnitAmount: (addons: AddonAmountInput[], baseUnitPrice: number) => number;
|
|
629
|
+
|
|
589
630
|
interface ICartItem extends BaseEntity {
|
|
590
631
|
cart: ICart;
|
|
591
632
|
product: IProduct;
|
|
@@ -604,4 +645,4 @@ interface ICart extends BaseEntity {
|
|
|
604
645
|
pricing: ISummaryPricing;
|
|
605
646
|
}
|
|
606
647
|
|
|
607
|
-
export { ADMIN_ROLES, type ApiResponse, type BaseEntity, DiscountTypeEnum, type IAddonConfig, type IAddonGroup, type IAddress, type IAdmin, type IAdminCreate, type IAdminRoleType, type IAdminSafe, type IAdminUpdate, type IBrand, type ICart, type ICartItem, type ICategory, type ICompliance, type IContact, type IContent, type ICountry, type ICoupon, type ICurrency, type ICustomer, type IDiscountType, type IDocumentation, type IKeyValue, type ILinePricing, type IMediaAsset, type IOrder, type IOrderItem, type IOrderTransaction, type IPrice, type IProduct, type IProductOptionGroup, type IProductOptionValue, type IProductRelationGroup, type IProductTechnicalSpec, type IProductTechnicalSpecTable, type IProductVariantFields, type IProductVariantOptionGroup, type IProductVariantOptionMatrix, type IProductVariantOptionValue, type IRedirect, type IRefundTransaction, type IRelationGroup, type ISEOMetaData, type IShipping, type IState, type IStock, type IStore, type IStoreSettings, type ISummaryPricing, type ITechSpec, type ITechnicalSpecColumn, type ITechnicalSpecGroup, type ITransactionBase, type IUnmatched404, type IVariant, type IVariantOptionSelection, type Metadata, ORDER_STATUS_VALUES, OrderStatusEnum, PAYMENT_METHOD_VALUES, PAYMENT_STATUS_VALUES, type Paginated, PaymentMethodEnum, PaymentStatusEnum, type PricingType, type ProductVariantType, type RedirectTargetType, type SoftDeleteFilter, type StockStatus, TRANSACTION_TYPE_VALUES, TransactionTypeEnum, type VariantOptionMode, normalizePath, paymentMethodColorMap, paymentStatusColorMap, statusColors, typeColorMap };
|
|
648
|
+
export { ADMIN_ROLES, type AddonAmountInput, type ApiResponse, type BaseEntity, DiscountTypeEnum, type IAddonConfig, type IAddonGroup, type IAddress, type IAdmin, type IAdminCreate, type IAdminRoleType, type IAdminSafe, type IAdminUpdate, type IBrand, type ICart, type ICartItem, type ICategory, type ICompliance, type IContact, type IContent, type ICountry, type ICoupon, type ICurrency, type ICustomer, type IDiscountType, type IDocumentation, type IKeyValue, type ILinePricing, type IMediaAsset, INVENTORY_POLICY_VALUES, type IOrder, type IOrderItem, type IOrderTransaction, type IPrice, type IProduct, type IProductOptionGroup, type IProductOptionValue, type IProductRelationGroup, type IProductTechnicalSpec, type IProductTechnicalSpecTable, type IProductVariantFields, type IProductVariantOptionGroup, type IProductVariantOptionMatrix, type IProductVariantOptionValue, type IRedirect, type IRefundTransaction, type IRelationGroup, type ISEOMetaData, type IShipping, type IState, type IStock, type IStore, type IStoreSettings, type ISummaryPricing, type ITechSpec, type ITechnicalSpecColumn, type ITechnicalSpecGroup, type ITransactionBase, type IUnmatched404, type IVariant, type IVariantOptionSelection, type InventoryPolicy, InventoryPolicyEnum, type Metadata, ORDER_STATUS_VALUES, OrderStatusEnum, PAYMENT_METHOD_VALUES, PAYMENT_STATUS_VALUES, type Paginated, PaymentMethodEnum, PaymentStatusEnum, type PricingType, type ProductVariantType, type RedirectTargetType, type SoftDeleteFilter, type StockStatus, TRANSACTION_TYPE_VALUES, TransactionTypeEnum, type VariantOptionMode, addonUnitAmount, addonsUnitAmount, normalizeLineQuantity, normalizePath, paymentMethodColorMap, paymentStatusColorMap, roundMoney, statusColors, typeColorMap };
|
package/dist/index.d.ts
CHANGED
|
@@ -200,11 +200,22 @@ interface IStock extends BaseEntity {
|
|
|
200
200
|
lowStockThreshold: number;
|
|
201
201
|
}
|
|
202
202
|
|
|
203
|
+
/** Out-of-stock selling policy for a product/variant. */
|
|
204
|
+
declare const InventoryPolicyEnum: {
|
|
205
|
+
/** Hard-stop at available stock (no oversell). */
|
|
206
|
+
readonly DENY: "deny";
|
|
207
|
+
/** Allow backorder / oversell past available stock. */
|
|
208
|
+
readonly CONTINUE: "continue";
|
|
209
|
+
};
|
|
210
|
+
type InventoryPolicy = (typeof InventoryPolicyEnum)[keyof typeof InventoryPolicyEnum];
|
|
211
|
+
declare const INVENTORY_POLICY_VALUES: InventoryPolicy[];
|
|
212
|
+
|
|
203
213
|
interface IProductVariantFields {
|
|
204
214
|
description: string;
|
|
205
215
|
overview: string;
|
|
206
216
|
price: IPrice;
|
|
207
217
|
quantity: number;
|
|
218
|
+
inventoryPolicy: InventoryPolicy;
|
|
208
219
|
brand: IBrand;
|
|
209
220
|
store: IStore;
|
|
210
221
|
stock: IStock;
|
|
@@ -586,6 +597,36 @@ interface IUnmatched404 extends BaseEntity {
|
|
|
586
597
|
*/
|
|
587
598
|
declare const normalizePath: (input: string) => string;
|
|
588
599
|
|
|
600
|
+
/**
|
|
601
|
+
* Canonical cart pricing primitives, shared by the backend (authoritative —
|
|
602
|
+
* what the customer is charged) and the storefront configurator (live preview)
|
|
603
|
+
* so the two engines can never drift by a cent. Pure functions, no IO.
|
|
604
|
+
*
|
|
605
|
+
* Money is rounded to 2 decimals with a `Number.EPSILON` nudge so exact
|
|
606
|
+
* half-cent boundaries (e.g. 1.005) round half-up consistently across engines.
|
|
607
|
+
*/
|
|
608
|
+
/** Rounds a monetary amount to 2 decimals (half-up, float-noise-safe). */
|
|
609
|
+
declare const roundMoney: (amount: number) => number;
|
|
610
|
+
/** Clamps a requested quantity to a valid line quantity (integer >= 1). */
|
|
611
|
+
declare const normalizeLineQuantity: (quantity: number) => number;
|
|
612
|
+
/** A single add-on priced against a base unit (selection resolved to its values). */
|
|
613
|
+
interface AddonAmountInput {
|
|
614
|
+
price: number;
|
|
615
|
+
pricingType: PricingType;
|
|
616
|
+
quantity: number;
|
|
617
|
+
}
|
|
618
|
+
/**
|
|
619
|
+
* One add-on's per-(base-)unit contribution, **rounded to a cent**: a FIXED
|
|
620
|
+
* add-on contributes its price; a PERCENTAGE add-on contributes that percent of
|
|
621
|
+
* the base unit price — each times the add-on's own quantity.
|
|
622
|
+
*
|
|
623
|
+
* Per-add-on rounding is the canon (not rounding the summed total once), so each
|
|
624
|
+
* add-on's displayed price is exactly what it adds to the line.
|
|
625
|
+
*/
|
|
626
|
+
declare const addonUnitAmount: (addon: AddonAmountInput, baseUnitPrice: number) => number;
|
|
627
|
+
/** Total add-on contribution per base unit: per-add-on rounding, then summed. */
|
|
628
|
+
declare const addonsUnitAmount: (addons: AddonAmountInput[], baseUnitPrice: number) => number;
|
|
629
|
+
|
|
589
630
|
interface ICartItem extends BaseEntity {
|
|
590
631
|
cart: ICart;
|
|
591
632
|
product: IProduct;
|
|
@@ -604,4 +645,4 @@ interface ICart extends BaseEntity {
|
|
|
604
645
|
pricing: ISummaryPricing;
|
|
605
646
|
}
|
|
606
647
|
|
|
607
|
-
export { ADMIN_ROLES, type ApiResponse, type BaseEntity, DiscountTypeEnum, type IAddonConfig, type IAddonGroup, type IAddress, type IAdmin, type IAdminCreate, type IAdminRoleType, type IAdminSafe, type IAdminUpdate, type IBrand, type ICart, type ICartItem, type ICategory, type ICompliance, type IContact, type IContent, type ICountry, type ICoupon, type ICurrency, type ICustomer, type IDiscountType, type IDocumentation, type IKeyValue, type ILinePricing, type IMediaAsset, type IOrder, type IOrderItem, type IOrderTransaction, type IPrice, type IProduct, type IProductOptionGroup, type IProductOptionValue, type IProductRelationGroup, type IProductTechnicalSpec, type IProductTechnicalSpecTable, type IProductVariantFields, type IProductVariantOptionGroup, type IProductVariantOptionMatrix, type IProductVariantOptionValue, type IRedirect, type IRefundTransaction, type IRelationGroup, type ISEOMetaData, type IShipping, type IState, type IStock, type IStore, type IStoreSettings, type ISummaryPricing, type ITechSpec, type ITechnicalSpecColumn, type ITechnicalSpecGroup, type ITransactionBase, type IUnmatched404, type IVariant, type IVariantOptionSelection, type Metadata, ORDER_STATUS_VALUES, OrderStatusEnum, PAYMENT_METHOD_VALUES, PAYMENT_STATUS_VALUES, type Paginated, PaymentMethodEnum, PaymentStatusEnum, type PricingType, type ProductVariantType, type RedirectTargetType, type SoftDeleteFilter, type StockStatus, TRANSACTION_TYPE_VALUES, TransactionTypeEnum, type VariantOptionMode, normalizePath, paymentMethodColorMap, paymentStatusColorMap, statusColors, typeColorMap };
|
|
648
|
+
export { ADMIN_ROLES, type AddonAmountInput, type ApiResponse, type BaseEntity, DiscountTypeEnum, type IAddonConfig, type IAddonGroup, type IAddress, type IAdmin, type IAdminCreate, type IAdminRoleType, type IAdminSafe, type IAdminUpdate, type IBrand, type ICart, type ICartItem, type ICategory, type ICompliance, type IContact, type IContent, type ICountry, type ICoupon, type ICurrency, type ICustomer, type IDiscountType, type IDocumentation, type IKeyValue, type ILinePricing, type IMediaAsset, INVENTORY_POLICY_VALUES, type IOrder, type IOrderItem, type IOrderTransaction, type IPrice, type IProduct, type IProductOptionGroup, type IProductOptionValue, type IProductRelationGroup, type IProductTechnicalSpec, type IProductTechnicalSpecTable, type IProductVariantFields, type IProductVariantOptionGroup, type IProductVariantOptionMatrix, type IProductVariantOptionValue, type IRedirect, type IRefundTransaction, type IRelationGroup, type ISEOMetaData, type IShipping, type IState, type IStock, type IStore, type IStoreSettings, type ISummaryPricing, type ITechSpec, type ITechnicalSpecColumn, type ITechnicalSpecGroup, type ITransactionBase, type IUnmatched404, type IVariant, type IVariantOptionSelection, type InventoryPolicy, InventoryPolicyEnum, type Metadata, ORDER_STATUS_VALUES, OrderStatusEnum, PAYMENT_METHOD_VALUES, PAYMENT_STATUS_VALUES, type Paginated, PaymentMethodEnum, PaymentStatusEnum, type PricingType, type ProductVariantType, type RedirectTargetType, type SoftDeleteFilter, type StockStatus, TRANSACTION_TYPE_VALUES, TransactionTypeEnum, type VariantOptionMode, addonUnitAmount, addonsUnitAmount, normalizeLineQuantity, normalizePath, paymentMethodColorMap, paymentStatusColorMap, roundMoney, statusColors, typeColorMap };
|
package/dist/index.js
CHANGED
|
@@ -22,6 +22,8 @@ var index_exports = {};
|
|
|
22
22
|
__export(index_exports, {
|
|
23
23
|
ADMIN_ROLES: () => ADMIN_ROLES,
|
|
24
24
|
DiscountTypeEnum: () => DiscountTypeEnum,
|
|
25
|
+
INVENTORY_POLICY_VALUES: () => INVENTORY_POLICY_VALUES,
|
|
26
|
+
InventoryPolicyEnum: () => InventoryPolicyEnum,
|
|
25
27
|
ORDER_STATUS_VALUES: () => ORDER_STATUS_VALUES,
|
|
26
28
|
OrderStatusEnum: () => OrderStatusEnum,
|
|
27
29
|
PAYMENT_METHOD_VALUES: () => PAYMENT_METHOD_VALUES,
|
|
@@ -30,9 +32,13 @@ __export(index_exports, {
|
|
|
30
32
|
PaymentStatusEnum: () => PaymentStatusEnum,
|
|
31
33
|
TRANSACTION_TYPE_VALUES: () => TRANSACTION_TYPE_VALUES,
|
|
32
34
|
TransactionTypeEnum: () => TransactionTypeEnum,
|
|
35
|
+
addonUnitAmount: () => addonUnitAmount,
|
|
36
|
+
addonsUnitAmount: () => addonsUnitAmount,
|
|
37
|
+
normalizeLineQuantity: () => normalizeLineQuantity,
|
|
33
38
|
normalizePath: () => normalizePath,
|
|
34
39
|
paymentMethodColorMap: () => paymentMethodColorMap,
|
|
35
40
|
paymentStatusColorMap: () => paymentStatusColorMap,
|
|
41
|
+
roundMoney: () => roundMoney,
|
|
36
42
|
statusColors: () => statusColors,
|
|
37
43
|
typeColorMap: () => typeColorMap
|
|
38
44
|
});
|
|
@@ -56,6 +62,15 @@ var DiscountTypeEnum = {
|
|
|
56
62
|
FIXED: "FIXED"
|
|
57
63
|
};
|
|
58
64
|
|
|
65
|
+
// src/inventory/interface.ts
|
|
66
|
+
var InventoryPolicyEnum = {
|
|
67
|
+
/** Hard-stop at available stock (no oversell). */
|
|
68
|
+
DENY: "deny",
|
|
69
|
+
/** Allow backorder / oversell past available stock. */
|
|
70
|
+
CONTINUE: "continue"
|
|
71
|
+
};
|
|
72
|
+
var INVENTORY_POLICY_VALUES = Object.values(InventoryPolicyEnum);
|
|
73
|
+
|
|
59
74
|
// src/path/index.ts
|
|
60
75
|
var normalizePath = (input) => {
|
|
61
76
|
if (!input || typeof input !== "string") return "/";
|
|
@@ -77,6 +92,20 @@ var normalizePath = (input) => {
|
|
|
77
92
|
return path || "/";
|
|
78
93
|
};
|
|
79
94
|
|
|
95
|
+
// src/pricing/index.ts
|
|
96
|
+
var roundMoney = (amount) => {
|
|
97
|
+
if (!Number.isFinite(amount)) return 0;
|
|
98
|
+
return Math.round((amount + Number.EPSILON) * 100) / 100;
|
|
99
|
+
};
|
|
100
|
+
var normalizeLineQuantity = (quantity) => Math.max(1, Math.floor(Number(quantity)) || 1);
|
|
101
|
+
var addonUnitAmount = (addon, baseUnitPrice) => {
|
|
102
|
+
const value = Number.isFinite(addon.price) ? addon.price : 0;
|
|
103
|
+
const quantity = Number.isFinite(addon.quantity) ? addon.quantity : 1;
|
|
104
|
+
const amount = addon.pricingType === "PERCENTAGE" ? baseUnitPrice * (value / 100) : value;
|
|
105
|
+
return roundMoney(amount * quantity);
|
|
106
|
+
};
|
|
107
|
+
var addonsUnitAmount = (addons, baseUnitPrice) => roundMoney(addons.reduce((sum, addon) => sum + addonUnitAmount(addon, baseUnitPrice), 0));
|
|
108
|
+
|
|
80
109
|
// src/order/interface.ts
|
|
81
110
|
var OrderStatusEnum = {
|
|
82
111
|
CREATED: "CREATED",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/admin/interface.ts","../src/coupon/interface.ts","../src/path/index.ts","../src/order/interface.ts","../src/transaction/interface.ts"],"sourcesContent":["export * from './address';\nexport * from './admin';\nexport * from './base';\nexport * from './common';\nexport * from './country';\nexport * from './customer';\nexport * from './state';\nexport * from './store';\nexport * from './currency';\nexport * from './contact';\nexport * from './coupon';\nexport * from './product';\nexport * from './productVariantOptions';\nexport * from './productTechnicalSpec';\nexport * from './addonConfig';\nexport * from './relationGroup';\nexport * from './redirect';\nexport * from './path';\nexport * from './variant';\nexport * from './productVariant';\nexport * from './order';\nexport * from './orderItem';\nexport * from './cart';\nexport * from './cartItem';\nexport * from './category';\nexport * from './brand';\nexport * from './stock';\nexport * from './transaction';\n","import type { BaseEntity } from '../base/interface';\n\nexport type IAdminRoleType =\n | 'Admin'\n | 'Super Admin'\n | 'Cashier'\n | 'Manager'\n | 'CEO'\n | 'Driver'\n | 'Security Guard'\n | 'Accountant';\n\nexport const ADMIN_ROLES: IAdminRoleType[] = [\n 'Admin',\n 'Super Admin',\n 'Cashier',\n 'Manager',\n 'CEO',\n 'Driver',\n 'Security Guard',\n 'Accountant',\n];\n\nexport interface IAdmin extends BaseEntity {\n firstName: string;\n lastName: string;\n email: string;\n phoneNumber: string;\n status: boolean;\n password: string;\n role: IAdminRoleType;\n access_list: string[];\n joiningDate: Date;\n profileImage: string;\n lastLogin: Date;\n}\n\nexport type IAdminCreate = Omit<IAdmin, keyof BaseEntity>;\nexport type IAdminUpdate = Partial<IAdminCreate>;\nexport type IAdminSafe = Omit<IAdmin, 'password'>;\n","import type { BaseEntity } from \"../base\";\nimport type { IStore } from \"../store\";\n\nexport const DiscountTypeEnum = {\n PERCENTAGE: \"PERCENTAGE\",\n FIXED: \"FIXED\",\n} as const;\n\nexport type DiscountTypeEnum = (typeof DiscountTypeEnum)[keyof typeof DiscountTypeEnum];\n\nexport interface IDiscountType {\n type: DiscountTypeEnum;\n value: number;\n}\n\nexport interface ICoupon extends BaseEntity {\n title: string;\n couponCode: string;\n startTime: Date;\n endTime: Date;\n discountType: IDiscountType;\n minimumAmount: number;\n isPromotional: boolean;\n status: boolean;\n stores: IStore[];\n}\n","/**\n * Normalizes a URL or path into a canonical, lookup-stable path so old-site URLs\n * match reliably regardless of how they were entered (full URL, casing, trailing\n * slash, query/hash, encoding). Shared by the backend (storing `fromPath`) and\n * the storefront proxy (matching incoming paths) so the two can never drift.\n *\n * Examples:\n * \"https://old.com/Shop/Item/?x=1#a\" -> \"/shop/item\"\n * \"Foo//Bar/\" -> \"/foo/bar\"\n * \"\" -> \"/\"\n */\nexport const normalizePath = (input: string): string => {\n if (!input || typeof input !== \"string\") return \"/\";\n\n let path = input.trim();\n\n // Strip protocol + host if a full URL was pasted.\n if (/^https?:\\/\\//i.test(path)) {\n try {\n path = new URL(path).pathname;\n } catch {\n // fall through with the raw value\n }\n }\n\n // Drop query string and hash fragment.\n path = path.split(\"?\")[0].split(\"#\")[0];\n\n // Decode percent-encoding (best effort).\n try {\n path = decodeURIComponent(path);\n } catch {\n // keep as-is if malformed\n }\n\n // Ensure a single leading slash, collapse repeats, lowercase.\n if (!path.startsWith(\"/\")) path = `/${path}`;\n path = path.replace(/\\/{2,}/g, \"/\").toLowerCase();\n\n // Strip trailing slash except for the root.\n if (path.length > 1) path = path.replace(/\\/+$/, \"\");\n\n return path || \"/\";\n};\n","import type { BaseEntity } from \"../base\";\nimport type { ISummaryPricing, Metadata } from \"../common\";\nimport type { ICoupon } from \"../coupon\";\nimport type { ICustomer } from \"../customer\";\nimport type { IOrderItem } from \"../orderItem\";\nimport type { IStore } from \"../store\";\nimport type { IOrderTransaction, IRefundTransaction } from \"../transaction\";\nimport type { PaymentMethodEnum, PaymentStatusEnum } from \"../transaction\";\n\nexport const OrderStatusEnum = {\n CREATED: \"CREATED\",\n RECEIVED: \"RECEIVED\",\n PENDING: \"PENDING\",\n CONFIRMED: \"CONFIRMED\",\n PROCESSING: \"PROCESSING\",\n SHIPPED: \"SHIPPED\",\n DELIVERED: \"DELIVERED\",\n CANCELED: \"CANCELED\",\n FAILED: \"FAILED\",\n REFUNDED: \"REFUNDED\",\n PARTIALLY_REFUNDED: \"PARTIALLY_REFUNDED\",\n ARCHIVED: \"ARCHIVED\",\n RETURNED: \"RETURNED\",\n} as const;\n\nexport type OrderStatusEnum = (typeof OrderStatusEnum)[keyof typeof OrderStatusEnum];\nexport const ORDER_STATUS_VALUES = Object.values(OrderStatusEnum);\n\nexport const statusColors: Record<OrderStatusEnum, string> = {\n [OrderStatusEnum.CREATED]: \"default\",\n [OrderStatusEnum.RECEIVED]: \"cyan\",\n [OrderStatusEnum.PENDING]: \"gold\",\n [OrderStatusEnum.CONFIRMED]: \"blue\",\n [OrderStatusEnum.PROCESSING]: \"cyan\",\n [OrderStatusEnum.SHIPPED]: \"purple\",\n [OrderStatusEnum.DELIVERED]: \"green\",\n [OrderStatusEnum.CANCELED]: \"volcano\",\n [OrderStatusEnum.FAILED]: \"red\",\n [OrderStatusEnum.REFUNDED]: \"orange\",\n [OrderStatusEnum.PARTIALLY_REFUNDED]: \"magenta\",\n [OrderStatusEnum.ARCHIVED]: \"gray\",\n [OrderStatusEnum.RETURNED]: \"purple\",\n};\n\nexport interface IOrder extends BaseEntity {\n orderId: string;\n orderItems: IOrderItem[];\n customer: ICustomer;\n coupon: ICoupon;\n store: IStore;\n status: OrderStatusEnum;\n paymentStatus: PaymentStatusEnum;\n paymentMethod: PaymentMethodEnum;\n metaData: Metadata;\n orderTransactions: IOrderTransaction[];\n refundTransactions: IRefundTransaction[];\n pricing: ISummaryPricing;\n}\n","import type { BaseEntity } from \"../base\";\nimport type { Metadata } from \"../common\";\nimport type { IOrder } from \"../order\";\nimport type { ICurrency } from \"../currency\";\n\nexport const PaymentStatusEnum = {\n INITIATED: 'INITIATED',\n PENDING: 'PENDING',\n PROCESSING: 'PROCESSING',\n FAILED: 'FAILED',\n CANCELLED: 'CANCELLED',\n PENDING_CAPTURE: 'PENDING_CAPTURE',\n COMPLETED: 'COMPLETED',\n VOIDED: 'VOIDED',\n REDIRECTED_TO_GATEWAY: 'REDIRECTED_TO_GATEWAY',\n UNKNOWN: 'UNKNOWN',\n REFUNDED: 'REFUNDED',\n PARTIALLY_REFUNDED: 'PARTIALLY_REFUNDED',\n} as const;\n\nexport type PaymentStatusEnum = (typeof PaymentStatusEnum)[keyof typeof PaymentStatusEnum];\nexport const PAYMENT_STATUS_VALUES = Object.values(PaymentStatusEnum);\n\nexport const paymentStatusColorMap: Record<PaymentStatusEnum, string> = {\n [PaymentStatusEnum.INITIATED]: 'default',\n [PaymentStatusEnum.PENDING]: 'gold',\n [PaymentStatusEnum.PROCESSING]: 'cyan',\n [PaymentStatusEnum.FAILED]: 'red',\n [PaymentStatusEnum.CANCELLED]: 'volcano',\n [PaymentStatusEnum.PENDING_CAPTURE]: 'blue',\n [PaymentStatusEnum.COMPLETED]: 'green',\n [PaymentStatusEnum.VOIDED]: 'magenta',\n [PaymentStatusEnum.REDIRECTED_TO_GATEWAY]: 'purple',\n [PaymentStatusEnum.UNKNOWN]: 'gray',\n [PaymentStatusEnum.REFUNDED]: 'orange',\n [PaymentStatusEnum.PARTIALLY_REFUNDED]: 'magenta',\n};\n\nexport const PaymentMethodEnum = {\n CREDIT_CARD: 'CREDIT_CARD',\n PAYPAL: 'PAYPAL',\n STRIPE: 'STRIPE',\n CHECK: 'CHECK',\n APPLE_PAY: 'APPLE_PAY',\n} as const;\n\nexport type PaymentMethodEnum = (typeof PaymentMethodEnum)[keyof typeof PaymentMethodEnum];\nexport const PAYMENT_METHOD_VALUES = Object.values(PaymentMethodEnum);\n\nexport const paymentMethodColorMap: Record<PaymentMethodEnum, string> = {\n [PaymentMethodEnum.CREDIT_CARD]: 'blue',\n [PaymentMethodEnum.PAYPAL]: 'geekblue',\n [PaymentMethodEnum.STRIPE]: 'purple',\n [PaymentMethodEnum.CHECK]: 'orange',\n [PaymentMethodEnum.APPLE_PAY]: 'black',\n};\n\nexport const TransactionTypeEnum = {\n ORDER: \"ORDER\",\n REFUND: \"REFUND\",\n} as const;\n\nexport type TransactionTypeEnum = (typeof TransactionTypeEnum)[keyof typeof TransactionTypeEnum];\n\nexport const TRANSACTION_TYPE_VALUES = Object.values(TransactionTypeEnum);\n\nexport const typeColorMap: Record<TransactionTypeEnum, string> = {\n [TransactionTypeEnum.ORDER]: \"blue\",\n [TransactionTypeEnum.REFUND]: \"purple\",\n};\n\nexport interface ITransactionBase extends BaseEntity {\n order: IOrder;\n currency: ICurrency;\n transactionId: string;\n amount: number;\n status: PaymentStatusEnum;\n paymentMethod: PaymentMethodEnum;\n gatewayId?: string;\n metaData?: Metadata;\n comment?: string;\n isPaymentLink?: boolean;\n refundedAmount?: number;\n proofFileId?: string;\n}\n\nexport interface IOrderTransaction extends ITransactionBase {\n type: typeof TransactionTypeEnum.ORDER;\n}\n\nexport interface IRefundTransaction extends ITransactionBase {\n type: typeof TransactionTypeEnum.REFUND;\n originalTransaction?: ITransactionBase;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/admin/interface.ts","../src/coupon/interface.ts","../src/inventory/interface.ts","../src/path/index.ts","../src/pricing/index.ts","../src/order/interface.ts","../src/transaction/interface.ts"],"sourcesContent":["export * from './address';\nexport * from './admin';\nexport * from './base';\nexport * from './common';\nexport * from './country';\nexport * from './customer';\nexport * from './state';\nexport * from './store';\nexport * from './currency';\nexport * from './contact';\nexport * from './coupon';\nexport * from './product';\nexport * from './productVariantOptions';\nexport * from './productTechnicalSpec';\nexport * from './addonConfig';\nexport * from './relationGroup';\nexport * from './inventory';\nexport * from './redirect';\nexport * from './path';\nexport * from './pricing';\nexport * from './variant';\nexport * from './productVariant';\nexport * from './order';\nexport * from './orderItem';\nexport * from './cart';\nexport * from './cartItem';\nexport * from './category';\nexport * from './brand';\nexport * from './stock';\nexport * from './transaction';\n","import type { BaseEntity } from '../base/interface';\n\nexport type IAdminRoleType =\n | 'Admin'\n | 'Super Admin'\n | 'Cashier'\n | 'Manager'\n | 'CEO'\n | 'Driver'\n | 'Security Guard'\n | 'Accountant';\n\nexport const ADMIN_ROLES: IAdminRoleType[] = [\n 'Admin',\n 'Super Admin',\n 'Cashier',\n 'Manager',\n 'CEO',\n 'Driver',\n 'Security Guard',\n 'Accountant',\n];\n\nexport interface IAdmin extends BaseEntity {\n firstName: string;\n lastName: string;\n email: string;\n phoneNumber: string;\n status: boolean;\n password: string;\n role: IAdminRoleType;\n access_list: string[];\n joiningDate: Date;\n profileImage: string;\n lastLogin: Date;\n}\n\nexport type IAdminCreate = Omit<IAdmin, keyof BaseEntity>;\nexport type IAdminUpdate = Partial<IAdminCreate>;\nexport type IAdminSafe = Omit<IAdmin, 'password'>;\n","import type { BaseEntity } from \"../base\";\nimport type { IStore } from \"../store\";\n\nexport const DiscountTypeEnum = {\n PERCENTAGE: \"PERCENTAGE\",\n FIXED: \"FIXED\",\n} as const;\n\nexport type DiscountTypeEnum = (typeof DiscountTypeEnum)[keyof typeof DiscountTypeEnum];\n\nexport interface IDiscountType {\n type: DiscountTypeEnum;\n value: number;\n}\n\nexport interface ICoupon extends BaseEntity {\n title: string;\n couponCode: string;\n startTime: Date;\n endTime: Date;\n discountType: IDiscountType;\n minimumAmount: number;\n isPromotional: boolean;\n status: boolean;\n stores: IStore[];\n}\n","/** Out-of-stock selling policy for a product/variant. */\nexport const InventoryPolicyEnum = {\n /** Hard-stop at available stock (no oversell). */\n DENY: \"deny\",\n /** Allow backorder / oversell past available stock. */\n CONTINUE: \"continue\",\n} as const;\n\nexport type InventoryPolicy = (typeof InventoryPolicyEnum)[keyof typeof InventoryPolicyEnum];\n\nexport const INVENTORY_POLICY_VALUES: InventoryPolicy[] = Object.values(InventoryPolicyEnum);\n","/**\n * Normalizes a URL or path into a canonical, lookup-stable path so old-site URLs\n * match reliably regardless of how they were entered (full URL, casing, trailing\n * slash, query/hash, encoding). Shared by the backend (storing `fromPath`) and\n * the storefront proxy (matching incoming paths) so the two can never drift.\n *\n * Examples:\n * \"https://old.com/Shop/Item/?x=1#a\" -> \"/shop/item\"\n * \"Foo//Bar/\" -> \"/foo/bar\"\n * \"\" -> \"/\"\n */\nexport const normalizePath = (input: string): string => {\n if (!input || typeof input !== \"string\") return \"/\";\n\n let path = input.trim();\n\n // Strip protocol + host if a full URL was pasted.\n if (/^https?:\\/\\//i.test(path)) {\n try {\n path = new URL(path).pathname;\n } catch {\n // fall through with the raw value\n }\n }\n\n // Drop query string and hash fragment.\n path = path.split(\"?\")[0].split(\"#\")[0];\n\n // Decode percent-encoding (best effort).\n try {\n path = decodeURIComponent(path);\n } catch {\n // keep as-is if malformed\n }\n\n // Ensure a single leading slash, collapse repeats, lowercase.\n if (!path.startsWith(\"/\")) path = `/${path}`;\n path = path.replace(/\\/{2,}/g, \"/\").toLowerCase();\n\n // Strip trailing slash except for the root.\n if (path.length > 1) path = path.replace(/\\/+$/, \"\");\n\n return path || \"/\";\n};\n","import type { PricingType } from \"../addonConfig\";\n\n/**\n * Canonical cart pricing primitives, shared by the backend (authoritative —\n * what the customer is charged) and the storefront configurator (live preview)\n * so the two engines can never drift by a cent. Pure functions, no IO.\n *\n * Money is rounded to 2 decimals with a `Number.EPSILON` nudge so exact\n * half-cent boundaries (e.g. 1.005) round half-up consistently across engines.\n */\n\n/** Rounds a monetary amount to 2 decimals (half-up, float-noise-safe). */\nexport const roundMoney = (amount: number): number => {\n if (!Number.isFinite(amount)) return 0;\n return Math.round((amount + Number.EPSILON) * 100) / 100;\n};\n\n/** Clamps a requested quantity to a valid line quantity (integer >= 1). */\nexport const normalizeLineQuantity = (quantity: number): number =>\n Math.max(1, Math.floor(Number(quantity)) || 1);\n\n/** A single add-on priced against a base unit (selection resolved to its values). */\nexport interface AddonAmountInput {\n price: number;\n pricingType: PricingType;\n quantity: number;\n}\n\n/**\n * One add-on's per-(base-)unit contribution, **rounded to a cent**: a FIXED\n * add-on contributes its price; a PERCENTAGE add-on contributes that percent of\n * the base unit price — each times the add-on's own quantity.\n *\n * Per-add-on rounding is the canon (not rounding the summed total once), so each\n * add-on's displayed price is exactly what it adds to the line.\n */\nexport const addonUnitAmount = (addon: AddonAmountInput, baseUnitPrice: number): number => {\n const value = Number.isFinite(addon.price) ? addon.price : 0;\n const quantity = Number.isFinite(addon.quantity) ? addon.quantity : 1;\n const amount = addon.pricingType === \"PERCENTAGE\" ? baseUnitPrice * (value / 100) : value;\n return roundMoney(amount * quantity);\n};\n\n/** Total add-on contribution per base unit: per-add-on rounding, then summed. */\nexport const addonsUnitAmount = (addons: AddonAmountInput[], baseUnitPrice: number): number =>\n roundMoney(addons.reduce((sum, addon) => sum + addonUnitAmount(addon, baseUnitPrice), 0));\n","import type { BaseEntity } from \"../base\";\nimport type { ISummaryPricing, Metadata } from \"../common\";\nimport type { ICoupon } from \"../coupon\";\nimport type { ICustomer } from \"../customer\";\nimport type { IOrderItem } from \"../orderItem\";\nimport type { IStore } from \"../store\";\nimport type { IOrderTransaction, IRefundTransaction } from \"../transaction\";\nimport type { PaymentMethodEnum, PaymentStatusEnum } from \"../transaction\";\n\nexport const OrderStatusEnum = {\n CREATED: \"CREATED\",\n RECEIVED: \"RECEIVED\",\n PENDING: \"PENDING\",\n CONFIRMED: \"CONFIRMED\",\n PROCESSING: \"PROCESSING\",\n SHIPPED: \"SHIPPED\",\n DELIVERED: \"DELIVERED\",\n CANCELED: \"CANCELED\",\n FAILED: \"FAILED\",\n REFUNDED: \"REFUNDED\",\n PARTIALLY_REFUNDED: \"PARTIALLY_REFUNDED\",\n ARCHIVED: \"ARCHIVED\",\n RETURNED: \"RETURNED\",\n} as const;\n\nexport type OrderStatusEnum = (typeof OrderStatusEnum)[keyof typeof OrderStatusEnum];\nexport const ORDER_STATUS_VALUES = Object.values(OrderStatusEnum);\n\nexport const statusColors: Record<OrderStatusEnum, string> = {\n [OrderStatusEnum.CREATED]: \"default\",\n [OrderStatusEnum.RECEIVED]: \"cyan\",\n [OrderStatusEnum.PENDING]: \"gold\",\n [OrderStatusEnum.CONFIRMED]: \"blue\",\n [OrderStatusEnum.PROCESSING]: \"cyan\",\n [OrderStatusEnum.SHIPPED]: \"purple\",\n [OrderStatusEnum.DELIVERED]: \"green\",\n [OrderStatusEnum.CANCELED]: \"volcano\",\n [OrderStatusEnum.FAILED]: \"red\",\n [OrderStatusEnum.REFUNDED]: \"orange\",\n [OrderStatusEnum.PARTIALLY_REFUNDED]: \"magenta\",\n [OrderStatusEnum.ARCHIVED]: \"gray\",\n [OrderStatusEnum.RETURNED]: \"purple\",\n};\n\nexport interface IOrder extends BaseEntity {\n orderId: string;\n orderItems: IOrderItem[];\n customer: ICustomer;\n coupon: ICoupon;\n store: IStore;\n status: OrderStatusEnum;\n paymentStatus: PaymentStatusEnum;\n paymentMethod: PaymentMethodEnum;\n metaData: Metadata;\n orderTransactions: IOrderTransaction[];\n refundTransactions: IRefundTransaction[];\n pricing: ISummaryPricing;\n}\n","import type { BaseEntity } from \"../base\";\nimport type { Metadata } from \"../common\";\nimport type { IOrder } from \"../order\";\nimport type { ICurrency } from \"../currency\";\n\nexport const PaymentStatusEnum = {\n INITIATED: 'INITIATED',\n PENDING: 'PENDING',\n PROCESSING: 'PROCESSING',\n FAILED: 'FAILED',\n CANCELLED: 'CANCELLED',\n PENDING_CAPTURE: 'PENDING_CAPTURE',\n COMPLETED: 'COMPLETED',\n VOIDED: 'VOIDED',\n REDIRECTED_TO_GATEWAY: 'REDIRECTED_TO_GATEWAY',\n UNKNOWN: 'UNKNOWN',\n REFUNDED: 'REFUNDED',\n PARTIALLY_REFUNDED: 'PARTIALLY_REFUNDED',\n} as const;\n\nexport type PaymentStatusEnum = (typeof PaymentStatusEnum)[keyof typeof PaymentStatusEnum];\nexport const PAYMENT_STATUS_VALUES = Object.values(PaymentStatusEnum);\n\nexport const paymentStatusColorMap: Record<PaymentStatusEnum, string> = {\n [PaymentStatusEnum.INITIATED]: 'default',\n [PaymentStatusEnum.PENDING]: 'gold',\n [PaymentStatusEnum.PROCESSING]: 'cyan',\n [PaymentStatusEnum.FAILED]: 'red',\n [PaymentStatusEnum.CANCELLED]: 'volcano',\n [PaymentStatusEnum.PENDING_CAPTURE]: 'blue',\n [PaymentStatusEnum.COMPLETED]: 'green',\n [PaymentStatusEnum.VOIDED]: 'magenta',\n [PaymentStatusEnum.REDIRECTED_TO_GATEWAY]: 'purple',\n [PaymentStatusEnum.UNKNOWN]: 'gray',\n [PaymentStatusEnum.REFUNDED]: 'orange',\n [PaymentStatusEnum.PARTIALLY_REFUNDED]: 'magenta',\n};\n\nexport const PaymentMethodEnum = {\n CREDIT_CARD: 'CREDIT_CARD',\n PAYPAL: 'PAYPAL',\n STRIPE: 'STRIPE',\n CHECK: 'CHECK',\n APPLE_PAY: 'APPLE_PAY',\n} as const;\n\nexport type PaymentMethodEnum = (typeof PaymentMethodEnum)[keyof typeof PaymentMethodEnum];\nexport const PAYMENT_METHOD_VALUES = Object.values(PaymentMethodEnum);\n\nexport const paymentMethodColorMap: Record<PaymentMethodEnum, string> = {\n [PaymentMethodEnum.CREDIT_CARD]: 'blue',\n [PaymentMethodEnum.PAYPAL]: 'geekblue',\n [PaymentMethodEnum.STRIPE]: 'purple',\n [PaymentMethodEnum.CHECK]: 'orange',\n [PaymentMethodEnum.APPLE_PAY]: 'black',\n};\n\nexport const TransactionTypeEnum = {\n ORDER: \"ORDER\",\n REFUND: \"REFUND\",\n} as const;\n\nexport type TransactionTypeEnum = (typeof TransactionTypeEnum)[keyof typeof TransactionTypeEnum];\n\nexport const TRANSACTION_TYPE_VALUES = Object.values(TransactionTypeEnum);\n\nexport const typeColorMap: Record<TransactionTypeEnum, string> = {\n [TransactionTypeEnum.ORDER]: \"blue\",\n [TransactionTypeEnum.REFUND]: \"purple\",\n};\n\nexport interface ITransactionBase extends BaseEntity {\n order: IOrder;\n currency: ICurrency;\n transactionId: string;\n amount: number;\n status: PaymentStatusEnum;\n paymentMethod: PaymentMethodEnum;\n gatewayId?: string;\n metaData?: Metadata;\n comment?: string;\n isPaymentLink?: boolean;\n refundedAmount?: number;\n proofFileId?: string;\n}\n\nexport interface IOrderTransaction extends ITransactionBase {\n type: typeof TransactionTypeEnum.ORDER;\n}\n\nexport interface IRefundTransaction extends ITransactionBase {\n type: typeof TransactionTypeEnum.REFUND;\n originalTransaction?: ITransactionBase;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACYO,IAAM,cAAgC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;;;AClBO,IAAM,mBAAmB;AAAA,EAC5B,YAAY;AAAA,EACZ,OAAO;AACX;;;ACLO,IAAM,sBAAsB;AAAA;AAAA,EAE/B,MAAM;AAAA;AAAA,EAEN,UAAU;AACd;AAIO,IAAM,0BAA6C,OAAO,OAAO,mBAAmB;;;ACCpF,IAAM,gBAAgB,CAAC,UAA0B;AACpD,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAEhD,MAAI,OAAO,MAAM,KAAK;AAGtB,MAAI,gBAAgB,KAAK,IAAI,GAAG;AAC5B,QAAI;AACA,aAAO,IAAI,IAAI,IAAI,EAAE;AAAA,IACzB,QAAQ;AAAA,IAER;AAAA,EACJ;AAGA,SAAO,KAAK,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;AAGtC,MAAI;AACA,WAAO,mBAAmB,IAAI;AAAA,EAClC,QAAQ;AAAA,EAER;AAGA,MAAI,CAAC,KAAK,WAAW,GAAG,EAAG,QAAO,IAAI,IAAI;AAC1C,SAAO,KAAK,QAAQ,WAAW,GAAG,EAAE,YAAY;AAGhD,MAAI,KAAK,SAAS,EAAG,QAAO,KAAK,QAAQ,QAAQ,EAAE;AAEnD,SAAO,QAAQ;AACnB;;;AC/BO,IAAM,aAAa,CAAC,WAA2B;AAClD,MAAI,CAAC,OAAO,SAAS,MAAM,EAAG,QAAO;AACrC,SAAO,KAAK,OAAO,SAAS,OAAO,WAAW,GAAG,IAAI;AACzD;AAGO,IAAM,wBAAwB,CAAC,aAClC,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,QAAQ,CAAC,KAAK,CAAC;AAiB1C,IAAM,kBAAkB,CAAC,OAAyB,kBAAkC;AACvF,QAAM,QAAQ,OAAO,SAAS,MAAM,KAAK,IAAI,MAAM,QAAQ;AAC3D,QAAM,WAAW,OAAO,SAAS,MAAM,QAAQ,IAAI,MAAM,WAAW;AACpE,QAAM,SAAS,MAAM,gBAAgB,eAAe,iBAAiB,QAAQ,OAAO;AACpF,SAAO,WAAW,SAAS,QAAQ;AACvC;AAGO,IAAM,mBAAmB,CAAC,QAA4B,kBACzD,WAAW,OAAO,OAAO,CAAC,KAAK,UAAU,MAAM,gBAAgB,OAAO,aAAa,GAAG,CAAC,CAAC;;;ACpCrF,IAAM,kBAAkB;AAAA,EAC3B,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,WAAW;AAAA,EACX,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,oBAAoB;AAAA,EACpB,UAAU;AAAA,EACV,UAAU;AACd;AAGO,IAAM,sBAAsB,OAAO,OAAO,eAAe;AAEzD,IAAM,eAAgD;AAAA,EACzD,CAAC,gBAAgB,OAAO,GAAG;AAAA,EAC3B,CAAC,gBAAgB,QAAQ,GAAG;AAAA,EAC5B,CAAC,gBAAgB,OAAO,GAAG;AAAA,EAC3B,CAAC,gBAAgB,SAAS,GAAG;AAAA,EAC7B,CAAC,gBAAgB,UAAU,GAAG;AAAA,EAC9B,CAAC,gBAAgB,OAAO,GAAG;AAAA,EAC3B,CAAC,gBAAgB,SAAS,GAAG;AAAA,EAC7B,CAAC,gBAAgB,QAAQ,GAAG;AAAA,EAC5B,CAAC,gBAAgB,MAAM,GAAG;AAAA,EAC1B,CAAC,gBAAgB,QAAQ,GAAG;AAAA,EAC5B,CAAC,gBAAgB,kBAAkB,GAAG;AAAA,EACtC,CAAC,gBAAgB,QAAQ,GAAG;AAAA,EAC5B,CAAC,gBAAgB,QAAQ,GAAG;AAChC;;;ACrCO,IAAM,oBAAoB;AAAA,EAC7B,WAAW;AAAA,EACX,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,uBAAuB;AAAA,EACvB,SAAS;AAAA,EACT,UAAU;AAAA,EACV,oBAAoB;AACxB;AAGO,IAAM,wBAAwB,OAAO,OAAO,iBAAiB;AAE7D,IAAM,wBAA2D;AAAA,EACpE,CAAC,kBAAkB,SAAS,GAAG;AAAA,EAC/B,CAAC,kBAAkB,OAAO,GAAG;AAAA,EAC7B,CAAC,kBAAkB,UAAU,GAAG;AAAA,EAChC,CAAC,kBAAkB,MAAM,GAAG;AAAA,EAC5B,CAAC,kBAAkB,SAAS,GAAG;AAAA,EAC/B,CAAC,kBAAkB,eAAe,GAAG;AAAA,EACrC,CAAC,kBAAkB,SAAS,GAAG;AAAA,EAC/B,CAAC,kBAAkB,MAAM,GAAG;AAAA,EAC5B,CAAC,kBAAkB,qBAAqB,GAAG;AAAA,EAC3C,CAAC,kBAAkB,OAAO,GAAG;AAAA,EAC7B,CAAC,kBAAkB,QAAQ,GAAG;AAAA,EAC9B,CAAC,kBAAkB,kBAAkB,GAAG;AAC5C;AAEO,IAAM,oBAAoB;AAAA,EAC7B,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,WAAW;AACf;AAGO,IAAM,wBAAwB,OAAO,OAAO,iBAAiB;AAE7D,IAAM,wBAA2D;AAAA,EACpE,CAAC,kBAAkB,WAAW,GAAG;AAAA,EACjC,CAAC,kBAAkB,MAAM,GAAG;AAAA,EAC5B,CAAC,kBAAkB,MAAM,GAAG;AAAA,EAC5B,CAAC,kBAAkB,KAAK,GAAG;AAAA,EAC3B,CAAC,kBAAkB,SAAS,GAAG;AACnC;AAEO,IAAM,sBAAsB;AAAA,EAC/B,OAAO;AAAA,EACP,QAAQ;AACZ;AAIO,IAAM,0BAA0B,OAAO,OAAO,mBAAmB;AAEjE,IAAM,eAAoD;AAAA,EAC7D,CAAC,oBAAoB,KAAK,GAAG;AAAA,EAC7B,CAAC,oBAAoB,MAAM,GAAG;AAClC;","names":[]}
|
package/dist/index.mjs
CHANGED
|
@@ -16,6 +16,15 @@ var DiscountTypeEnum = {
|
|
|
16
16
|
FIXED: "FIXED"
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
+
// src/inventory/interface.ts
|
|
20
|
+
var InventoryPolicyEnum = {
|
|
21
|
+
/** Hard-stop at available stock (no oversell). */
|
|
22
|
+
DENY: "deny",
|
|
23
|
+
/** Allow backorder / oversell past available stock. */
|
|
24
|
+
CONTINUE: "continue"
|
|
25
|
+
};
|
|
26
|
+
var INVENTORY_POLICY_VALUES = Object.values(InventoryPolicyEnum);
|
|
27
|
+
|
|
19
28
|
// src/path/index.ts
|
|
20
29
|
var normalizePath = (input) => {
|
|
21
30
|
if (!input || typeof input !== "string") return "/";
|
|
@@ -37,6 +46,20 @@ var normalizePath = (input) => {
|
|
|
37
46
|
return path || "/";
|
|
38
47
|
};
|
|
39
48
|
|
|
49
|
+
// src/pricing/index.ts
|
|
50
|
+
var roundMoney = (amount) => {
|
|
51
|
+
if (!Number.isFinite(amount)) return 0;
|
|
52
|
+
return Math.round((amount + Number.EPSILON) * 100) / 100;
|
|
53
|
+
};
|
|
54
|
+
var normalizeLineQuantity = (quantity) => Math.max(1, Math.floor(Number(quantity)) || 1);
|
|
55
|
+
var addonUnitAmount = (addon, baseUnitPrice) => {
|
|
56
|
+
const value = Number.isFinite(addon.price) ? addon.price : 0;
|
|
57
|
+
const quantity = Number.isFinite(addon.quantity) ? addon.quantity : 1;
|
|
58
|
+
const amount = addon.pricingType === "PERCENTAGE" ? baseUnitPrice * (value / 100) : value;
|
|
59
|
+
return roundMoney(amount * quantity);
|
|
60
|
+
};
|
|
61
|
+
var addonsUnitAmount = (addons, baseUnitPrice) => roundMoney(addons.reduce((sum, addon) => sum + addonUnitAmount(addon, baseUnitPrice), 0));
|
|
62
|
+
|
|
40
63
|
// src/order/interface.ts
|
|
41
64
|
var OrderStatusEnum = {
|
|
42
65
|
CREATED: "CREATED",
|
|
@@ -127,6 +150,8 @@ var typeColorMap = {
|
|
|
127
150
|
export {
|
|
128
151
|
ADMIN_ROLES,
|
|
129
152
|
DiscountTypeEnum,
|
|
153
|
+
INVENTORY_POLICY_VALUES,
|
|
154
|
+
InventoryPolicyEnum,
|
|
130
155
|
ORDER_STATUS_VALUES,
|
|
131
156
|
OrderStatusEnum,
|
|
132
157
|
PAYMENT_METHOD_VALUES,
|
|
@@ -135,9 +160,13 @@ export {
|
|
|
135
160
|
PaymentStatusEnum,
|
|
136
161
|
TRANSACTION_TYPE_VALUES,
|
|
137
162
|
TransactionTypeEnum,
|
|
163
|
+
addonUnitAmount,
|
|
164
|
+
addonsUnitAmount,
|
|
165
|
+
normalizeLineQuantity,
|
|
138
166
|
normalizePath,
|
|
139
167
|
paymentMethodColorMap,
|
|
140
168
|
paymentStatusColorMap,
|
|
169
|
+
roundMoney,
|
|
141
170
|
statusColors,
|
|
142
171
|
typeColorMap
|
|
143
172
|
};
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/admin/interface.ts","../src/coupon/interface.ts","../src/path/index.ts","../src/order/interface.ts","../src/transaction/interface.ts"],"sourcesContent":["import type { BaseEntity } from '../base/interface';\n\nexport type IAdminRoleType =\n | 'Admin'\n | 'Super Admin'\n | 'Cashier'\n | 'Manager'\n | 'CEO'\n | 'Driver'\n | 'Security Guard'\n | 'Accountant';\n\nexport const ADMIN_ROLES: IAdminRoleType[] = [\n 'Admin',\n 'Super Admin',\n 'Cashier',\n 'Manager',\n 'CEO',\n 'Driver',\n 'Security Guard',\n 'Accountant',\n];\n\nexport interface IAdmin extends BaseEntity {\n firstName: string;\n lastName: string;\n email: string;\n phoneNumber: string;\n status: boolean;\n password: string;\n role: IAdminRoleType;\n access_list: string[];\n joiningDate: Date;\n profileImage: string;\n lastLogin: Date;\n}\n\nexport type IAdminCreate = Omit<IAdmin, keyof BaseEntity>;\nexport type IAdminUpdate = Partial<IAdminCreate>;\nexport type IAdminSafe = Omit<IAdmin, 'password'>;\n","import type { BaseEntity } from \"../base\";\nimport type { IStore } from \"../store\";\n\nexport const DiscountTypeEnum = {\n PERCENTAGE: \"PERCENTAGE\",\n FIXED: \"FIXED\",\n} as const;\n\nexport type DiscountTypeEnum = (typeof DiscountTypeEnum)[keyof typeof DiscountTypeEnum];\n\nexport interface IDiscountType {\n type: DiscountTypeEnum;\n value: number;\n}\n\nexport interface ICoupon extends BaseEntity {\n title: string;\n couponCode: string;\n startTime: Date;\n endTime: Date;\n discountType: IDiscountType;\n minimumAmount: number;\n isPromotional: boolean;\n status: boolean;\n stores: IStore[];\n}\n","/**\n * Normalizes a URL or path into a canonical, lookup-stable path so old-site URLs\n * match reliably regardless of how they were entered (full URL, casing, trailing\n * slash, query/hash, encoding). Shared by the backend (storing `fromPath`) and\n * the storefront proxy (matching incoming paths) so the two can never drift.\n *\n * Examples:\n * \"https://old.com/Shop/Item/?x=1#a\" -> \"/shop/item\"\n * \"Foo//Bar/\" -> \"/foo/bar\"\n * \"\" -> \"/\"\n */\nexport const normalizePath = (input: string): string => {\n if (!input || typeof input !== \"string\") return \"/\";\n\n let path = input.trim();\n\n // Strip protocol + host if a full URL was pasted.\n if (/^https?:\\/\\//i.test(path)) {\n try {\n path = new URL(path).pathname;\n } catch {\n // fall through with the raw value\n }\n }\n\n // Drop query string and hash fragment.\n path = path.split(\"?\")[0].split(\"#\")[0];\n\n // Decode percent-encoding (best effort).\n try {\n path = decodeURIComponent(path);\n } catch {\n // keep as-is if malformed\n }\n\n // Ensure a single leading slash, collapse repeats, lowercase.\n if (!path.startsWith(\"/\")) path = `/${path}`;\n path = path.replace(/\\/{2,}/g, \"/\").toLowerCase();\n\n // Strip trailing slash except for the root.\n if (path.length > 1) path = path.replace(/\\/+$/, \"\");\n\n return path || \"/\";\n};\n","import type { BaseEntity } from \"../base\";\nimport type { ISummaryPricing, Metadata } from \"../common\";\nimport type { ICoupon } from \"../coupon\";\nimport type { ICustomer } from \"../customer\";\nimport type { IOrderItem } from \"../orderItem\";\nimport type { IStore } from \"../store\";\nimport type { IOrderTransaction, IRefundTransaction } from \"../transaction\";\nimport type { PaymentMethodEnum, PaymentStatusEnum } from \"../transaction\";\n\nexport const OrderStatusEnum = {\n CREATED: \"CREATED\",\n RECEIVED: \"RECEIVED\",\n PENDING: \"PENDING\",\n CONFIRMED: \"CONFIRMED\",\n PROCESSING: \"PROCESSING\",\n SHIPPED: \"SHIPPED\",\n DELIVERED: \"DELIVERED\",\n CANCELED: \"CANCELED\",\n FAILED: \"FAILED\",\n REFUNDED: \"REFUNDED\",\n PARTIALLY_REFUNDED: \"PARTIALLY_REFUNDED\",\n ARCHIVED: \"ARCHIVED\",\n RETURNED: \"RETURNED\",\n} as const;\n\nexport type OrderStatusEnum = (typeof OrderStatusEnum)[keyof typeof OrderStatusEnum];\nexport const ORDER_STATUS_VALUES = Object.values(OrderStatusEnum);\n\nexport const statusColors: Record<OrderStatusEnum, string> = {\n [OrderStatusEnum.CREATED]: \"default\",\n [OrderStatusEnum.RECEIVED]: \"cyan\",\n [OrderStatusEnum.PENDING]: \"gold\",\n [OrderStatusEnum.CONFIRMED]: \"blue\",\n [OrderStatusEnum.PROCESSING]: \"cyan\",\n [OrderStatusEnum.SHIPPED]: \"purple\",\n [OrderStatusEnum.DELIVERED]: \"green\",\n [OrderStatusEnum.CANCELED]: \"volcano\",\n [OrderStatusEnum.FAILED]: \"red\",\n [OrderStatusEnum.REFUNDED]: \"orange\",\n [OrderStatusEnum.PARTIALLY_REFUNDED]: \"magenta\",\n [OrderStatusEnum.ARCHIVED]: \"gray\",\n [OrderStatusEnum.RETURNED]: \"purple\",\n};\n\nexport interface IOrder extends BaseEntity {\n orderId: string;\n orderItems: IOrderItem[];\n customer: ICustomer;\n coupon: ICoupon;\n store: IStore;\n status: OrderStatusEnum;\n paymentStatus: PaymentStatusEnum;\n paymentMethod: PaymentMethodEnum;\n metaData: Metadata;\n orderTransactions: IOrderTransaction[];\n refundTransactions: IRefundTransaction[];\n pricing: ISummaryPricing;\n}\n","import type { BaseEntity } from \"../base\";\nimport type { Metadata } from \"../common\";\nimport type { IOrder } from \"../order\";\nimport type { ICurrency } from \"../currency\";\n\nexport const PaymentStatusEnum = {\n INITIATED: 'INITIATED',\n PENDING: 'PENDING',\n PROCESSING: 'PROCESSING',\n FAILED: 'FAILED',\n CANCELLED: 'CANCELLED',\n PENDING_CAPTURE: 'PENDING_CAPTURE',\n COMPLETED: 'COMPLETED',\n VOIDED: 'VOIDED',\n REDIRECTED_TO_GATEWAY: 'REDIRECTED_TO_GATEWAY',\n UNKNOWN: 'UNKNOWN',\n REFUNDED: 'REFUNDED',\n PARTIALLY_REFUNDED: 'PARTIALLY_REFUNDED',\n} as const;\n\nexport type PaymentStatusEnum = (typeof PaymentStatusEnum)[keyof typeof PaymentStatusEnum];\nexport const PAYMENT_STATUS_VALUES = Object.values(PaymentStatusEnum);\n\nexport const paymentStatusColorMap: Record<PaymentStatusEnum, string> = {\n [PaymentStatusEnum.INITIATED]: 'default',\n [PaymentStatusEnum.PENDING]: 'gold',\n [PaymentStatusEnum.PROCESSING]: 'cyan',\n [PaymentStatusEnum.FAILED]: 'red',\n [PaymentStatusEnum.CANCELLED]: 'volcano',\n [PaymentStatusEnum.PENDING_CAPTURE]: 'blue',\n [PaymentStatusEnum.COMPLETED]: 'green',\n [PaymentStatusEnum.VOIDED]: 'magenta',\n [PaymentStatusEnum.REDIRECTED_TO_GATEWAY]: 'purple',\n [PaymentStatusEnum.UNKNOWN]: 'gray',\n [PaymentStatusEnum.REFUNDED]: 'orange',\n [PaymentStatusEnum.PARTIALLY_REFUNDED]: 'magenta',\n};\n\nexport const PaymentMethodEnum = {\n CREDIT_CARD: 'CREDIT_CARD',\n PAYPAL: 'PAYPAL',\n STRIPE: 'STRIPE',\n CHECK: 'CHECK',\n APPLE_PAY: 'APPLE_PAY',\n} as const;\n\nexport type PaymentMethodEnum = (typeof PaymentMethodEnum)[keyof typeof PaymentMethodEnum];\nexport const PAYMENT_METHOD_VALUES = Object.values(PaymentMethodEnum);\n\nexport const paymentMethodColorMap: Record<PaymentMethodEnum, string> = {\n [PaymentMethodEnum.CREDIT_CARD]: 'blue',\n [PaymentMethodEnum.PAYPAL]: 'geekblue',\n [PaymentMethodEnum.STRIPE]: 'purple',\n [PaymentMethodEnum.CHECK]: 'orange',\n [PaymentMethodEnum.APPLE_PAY]: 'black',\n};\n\nexport const TransactionTypeEnum = {\n ORDER: \"ORDER\",\n REFUND: \"REFUND\",\n} as const;\n\nexport type TransactionTypeEnum = (typeof TransactionTypeEnum)[keyof typeof TransactionTypeEnum];\n\nexport const TRANSACTION_TYPE_VALUES = Object.values(TransactionTypeEnum);\n\nexport const typeColorMap: Record<TransactionTypeEnum, string> = {\n [TransactionTypeEnum.ORDER]: \"blue\",\n [TransactionTypeEnum.REFUND]: \"purple\",\n};\n\nexport interface ITransactionBase extends BaseEntity {\n order: IOrder;\n currency: ICurrency;\n transactionId: string;\n amount: number;\n status: PaymentStatusEnum;\n paymentMethod: PaymentMethodEnum;\n gatewayId?: string;\n metaData?: Metadata;\n comment?: string;\n isPaymentLink?: boolean;\n refundedAmount?: number;\n proofFileId?: string;\n}\n\nexport interface IOrderTransaction extends ITransactionBase {\n type: typeof TransactionTypeEnum.ORDER;\n}\n\nexport interface IRefundTransaction extends ITransactionBase {\n type: typeof TransactionTypeEnum.REFUND;\n originalTransaction?: ITransactionBase;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/admin/interface.ts","../src/coupon/interface.ts","../src/inventory/interface.ts","../src/path/index.ts","../src/pricing/index.ts","../src/order/interface.ts","../src/transaction/interface.ts"],"sourcesContent":["import type { BaseEntity } from '../base/interface';\n\nexport type IAdminRoleType =\n | 'Admin'\n | 'Super Admin'\n | 'Cashier'\n | 'Manager'\n | 'CEO'\n | 'Driver'\n | 'Security Guard'\n | 'Accountant';\n\nexport const ADMIN_ROLES: IAdminRoleType[] = [\n 'Admin',\n 'Super Admin',\n 'Cashier',\n 'Manager',\n 'CEO',\n 'Driver',\n 'Security Guard',\n 'Accountant',\n];\n\nexport interface IAdmin extends BaseEntity {\n firstName: string;\n lastName: string;\n email: string;\n phoneNumber: string;\n status: boolean;\n password: string;\n role: IAdminRoleType;\n access_list: string[];\n joiningDate: Date;\n profileImage: string;\n lastLogin: Date;\n}\n\nexport type IAdminCreate = Omit<IAdmin, keyof BaseEntity>;\nexport type IAdminUpdate = Partial<IAdminCreate>;\nexport type IAdminSafe = Omit<IAdmin, 'password'>;\n","import type { BaseEntity } from \"../base\";\nimport type { IStore } from \"../store\";\n\nexport const DiscountTypeEnum = {\n PERCENTAGE: \"PERCENTAGE\",\n FIXED: \"FIXED\",\n} as const;\n\nexport type DiscountTypeEnum = (typeof DiscountTypeEnum)[keyof typeof DiscountTypeEnum];\n\nexport interface IDiscountType {\n type: DiscountTypeEnum;\n value: number;\n}\n\nexport interface ICoupon extends BaseEntity {\n title: string;\n couponCode: string;\n startTime: Date;\n endTime: Date;\n discountType: IDiscountType;\n minimumAmount: number;\n isPromotional: boolean;\n status: boolean;\n stores: IStore[];\n}\n","/** Out-of-stock selling policy for a product/variant. */\nexport const InventoryPolicyEnum = {\n /** Hard-stop at available stock (no oversell). */\n DENY: \"deny\",\n /** Allow backorder / oversell past available stock. */\n CONTINUE: \"continue\",\n} as const;\n\nexport type InventoryPolicy = (typeof InventoryPolicyEnum)[keyof typeof InventoryPolicyEnum];\n\nexport const INVENTORY_POLICY_VALUES: InventoryPolicy[] = Object.values(InventoryPolicyEnum);\n","/**\n * Normalizes a URL or path into a canonical, lookup-stable path so old-site URLs\n * match reliably regardless of how they were entered (full URL, casing, trailing\n * slash, query/hash, encoding). Shared by the backend (storing `fromPath`) and\n * the storefront proxy (matching incoming paths) so the two can never drift.\n *\n * Examples:\n * \"https://old.com/Shop/Item/?x=1#a\" -> \"/shop/item\"\n * \"Foo//Bar/\" -> \"/foo/bar\"\n * \"\" -> \"/\"\n */\nexport const normalizePath = (input: string): string => {\n if (!input || typeof input !== \"string\") return \"/\";\n\n let path = input.trim();\n\n // Strip protocol + host if a full URL was pasted.\n if (/^https?:\\/\\//i.test(path)) {\n try {\n path = new URL(path).pathname;\n } catch {\n // fall through with the raw value\n }\n }\n\n // Drop query string and hash fragment.\n path = path.split(\"?\")[0].split(\"#\")[0];\n\n // Decode percent-encoding (best effort).\n try {\n path = decodeURIComponent(path);\n } catch {\n // keep as-is if malformed\n }\n\n // Ensure a single leading slash, collapse repeats, lowercase.\n if (!path.startsWith(\"/\")) path = `/${path}`;\n path = path.replace(/\\/{2,}/g, \"/\").toLowerCase();\n\n // Strip trailing slash except for the root.\n if (path.length > 1) path = path.replace(/\\/+$/, \"\");\n\n return path || \"/\";\n};\n","import type { PricingType } from \"../addonConfig\";\n\n/**\n * Canonical cart pricing primitives, shared by the backend (authoritative —\n * what the customer is charged) and the storefront configurator (live preview)\n * so the two engines can never drift by a cent. Pure functions, no IO.\n *\n * Money is rounded to 2 decimals with a `Number.EPSILON` nudge so exact\n * half-cent boundaries (e.g. 1.005) round half-up consistently across engines.\n */\n\n/** Rounds a monetary amount to 2 decimals (half-up, float-noise-safe). */\nexport const roundMoney = (amount: number): number => {\n if (!Number.isFinite(amount)) return 0;\n return Math.round((amount + Number.EPSILON) * 100) / 100;\n};\n\n/** Clamps a requested quantity to a valid line quantity (integer >= 1). */\nexport const normalizeLineQuantity = (quantity: number): number =>\n Math.max(1, Math.floor(Number(quantity)) || 1);\n\n/** A single add-on priced against a base unit (selection resolved to its values). */\nexport interface AddonAmountInput {\n price: number;\n pricingType: PricingType;\n quantity: number;\n}\n\n/**\n * One add-on's per-(base-)unit contribution, **rounded to a cent**: a FIXED\n * add-on contributes its price; a PERCENTAGE add-on contributes that percent of\n * the base unit price — each times the add-on's own quantity.\n *\n * Per-add-on rounding is the canon (not rounding the summed total once), so each\n * add-on's displayed price is exactly what it adds to the line.\n */\nexport const addonUnitAmount = (addon: AddonAmountInput, baseUnitPrice: number): number => {\n const value = Number.isFinite(addon.price) ? addon.price : 0;\n const quantity = Number.isFinite(addon.quantity) ? addon.quantity : 1;\n const amount = addon.pricingType === \"PERCENTAGE\" ? baseUnitPrice * (value / 100) : value;\n return roundMoney(amount * quantity);\n};\n\n/** Total add-on contribution per base unit: per-add-on rounding, then summed. */\nexport const addonsUnitAmount = (addons: AddonAmountInput[], baseUnitPrice: number): number =>\n roundMoney(addons.reduce((sum, addon) => sum + addonUnitAmount(addon, baseUnitPrice), 0));\n","import type { BaseEntity } from \"../base\";\nimport type { ISummaryPricing, Metadata } from \"../common\";\nimport type { ICoupon } from \"../coupon\";\nimport type { ICustomer } from \"../customer\";\nimport type { IOrderItem } from \"../orderItem\";\nimport type { IStore } from \"../store\";\nimport type { IOrderTransaction, IRefundTransaction } from \"../transaction\";\nimport type { PaymentMethodEnum, PaymentStatusEnum } from \"../transaction\";\n\nexport const OrderStatusEnum = {\n CREATED: \"CREATED\",\n RECEIVED: \"RECEIVED\",\n PENDING: \"PENDING\",\n CONFIRMED: \"CONFIRMED\",\n PROCESSING: \"PROCESSING\",\n SHIPPED: \"SHIPPED\",\n DELIVERED: \"DELIVERED\",\n CANCELED: \"CANCELED\",\n FAILED: \"FAILED\",\n REFUNDED: \"REFUNDED\",\n PARTIALLY_REFUNDED: \"PARTIALLY_REFUNDED\",\n ARCHIVED: \"ARCHIVED\",\n RETURNED: \"RETURNED\",\n} as const;\n\nexport type OrderStatusEnum = (typeof OrderStatusEnum)[keyof typeof OrderStatusEnum];\nexport const ORDER_STATUS_VALUES = Object.values(OrderStatusEnum);\n\nexport const statusColors: Record<OrderStatusEnum, string> = {\n [OrderStatusEnum.CREATED]: \"default\",\n [OrderStatusEnum.RECEIVED]: \"cyan\",\n [OrderStatusEnum.PENDING]: \"gold\",\n [OrderStatusEnum.CONFIRMED]: \"blue\",\n [OrderStatusEnum.PROCESSING]: \"cyan\",\n [OrderStatusEnum.SHIPPED]: \"purple\",\n [OrderStatusEnum.DELIVERED]: \"green\",\n [OrderStatusEnum.CANCELED]: \"volcano\",\n [OrderStatusEnum.FAILED]: \"red\",\n [OrderStatusEnum.REFUNDED]: \"orange\",\n [OrderStatusEnum.PARTIALLY_REFUNDED]: \"magenta\",\n [OrderStatusEnum.ARCHIVED]: \"gray\",\n [OrderStatusEnum.RETURNED]: \"purple\",\n};\n\nexport interface IOrder extends BaseEntity {\n orderId: string;\n orderItems: IOrderItem[];\n customer: ICustomer;\n coupon: ICoupon;\n store: IStore;\n status: OrderStatusEnum;\n paymentStatus: PaymentStatusEnum;\n paymentMethod: PaymentMethodEnum;\n metaData: Metadata;\n orderTransactions: IOrderTransaction[];\n refundTransactions: IRefundTransaction[];\n pricing: ISummaryPricing;\n}\n","import type { BaseEntity } from \"../base\";\nimport type { Metadata } from \"../common\";\nimport type { IOrder } from \"../order\";\nimport type { ICurrency } from \"../currency\";\n\nexport const PaymentStatusEnum = {\n INITIATED: 'INITIATED',\n PENDING: 'PENDING',\n PROCESSING: 'PROCESSING',\n FAILED: 'FAILED',\n CANCELLED: 'CANCELLED',\n PENDING_CAPTURE: 'PENDING_CAPTURE',\n COMPLETED: 'COMPLETED',\n VOIDED: 'VOIDED',\n REDIRECTED_TO_GATEWAY: 'REDIRECTED_TO_GATEWAY',\n UNKNOWN: 'UNKNOWN',\n REFUNDED: 'REFUNDED',\n PARTIALLY_REFUNDED: 'PARTIALLY_REFUNDED',\n} as const;\n\nexport type PaymentStatusEnum = (typeof PaymentStatusEnum)[keyof typeof PaymentStatusEnum];\nexport const PAYMENT_STATUS_VALUES = Object.values(PaymentStatusEnum);\n\nexport const paymentStatusColorMap: Record<PaymentStatusEnum, string> = {\n [PaymentStatusEnum.INITIATED]: 'default',\n [PaymentStatusEnum.PENDING]: 'gold',\n [PaymentStatusEnum.PROCESSING]: 'cyan',\n [PaymentStatusEnum.FAILED]: 'red',\n [PaymentStatusEnum.CANCELLED]: 'volcano',\n [PaymentStatusEnum.PENDING_CAPTURE]: 'blue',\n [PaymentStatusEnum.COMPLETED]: 'green',\n [PaymentStatusEnum.VOIDED]: 'magenta',\n [PaymentStatusEnum.REDIRECTED_TO_GATEWAY]: 'purple',\n [PaymentStatusEnum.UNKNOWN]: 'gray',\n [PaymentStatusEnum.REFUNDED]: 'orange',\n [PaymentStatusEnum.PARTIALLY_REFUNDED]: 'magenta',\n};\n\nexport const PaymentMethodEnum = {\n CREDIT_CARD: 'CREDIT_CARD',\n PAYPAL: 'PAYPAL',\n STRIPE: 'STRIPE',\n CHECK: 'CHECK',\n APPLE_PAY: 'APPLE_PAY',\n} as const;\n\nexport type PaymentMethodEnum = (typeof PaymentMethodEnum)[keyof typeof PaymentMethodEnum];\nexport const PAYMENT_METHOD_VALUES = Object.values(PaymentMethodEnum);\n\nexport const paymentMethodColorMap: Record<PaymentMethodEnum, string> = {\n [PaymentMethodEnum.CREDIT_CARD]: 'blue',\n [PaymentMethodEnum.PAYPAL]: 'geekblue',\n [PaymentMethodEnum.STRIPE]: 'purple',\n [PaymentMethodEnum.CHECK]: 'orange',\n [PaymentMethodEnum.APPLE_PAY]: 'black',\n};\n\nexport const TransactionTypeEnum = {\n ORDER: \"ORDER\",\n REFUND: \"REFUND\",\n} as const;\n\nexport type TransactionTypeEnum = (typeof TransactionTypeEnum)[keyof typeof TransactionTypeEnum];\n\nexport const TRANSACTION_TYPE_VALUES = Object.values(TransactionTypeEnum);\n\nexport const typeColorMap: Record<TransactionTypeEnum, string> = {\n [TransactionTypeEnum.ORDER]: \"blue\",\n [TransactionTypeEnum.REFUND]: \"purple\",\n};\n\nexport interface ITransactionBase extends BaseEntity {\n order: IOrder;\n currency: ICurrency;\n transactionId: string;\n amount: number;\n status: PaymentStatusEnum;\n paymentMethod: PaymentMethodEnum;\n gatewayId?: string;\n metaData?: Metadata;\n comment?: string;\n isPaymentLink?: boolean;\n refundedAmount?: number;\n proofFileId?: string;\n}\n\nexport interface IOrderTransaction extends ITransactionBase {\n type: typeof TransactionTypeEnum.ORDER;\n}\n\nexport interface IRefundTransaction extends ITransactionBase {\n type: typeof TransactionTypeEnum.REFUND;\n originalTransaction?: ITransactionBase;\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED