@evershop/evershop 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/bin/build/client/index.js +1 -1
  2. package/bin/build/complie.js +1 -1
  3. package/bin/build/index.js +1 -1
  4. package/bin/build/server/index.js +1 -1
  5. package/bin/build/server/useDDL.js +1 -1
  6. package/bin/dev/index.js +2 -1
  7. package/bin/evershop +8 -7
  8. package/bin/extension/index.js +1 -1
  9. package/bin/install/index.js +1 -1
  10. package/bin/lib/addDefaultMiddlewareFuncs.js +2 -2
  11. package/bin/lib/app.js +1 -1
  12. package/bin/lib/bootstrap/migrate.js +1 -1
  13. package/bin/lib/buildEntry.js +1 -1
  14. package/bin/lib/onError.js +1 -1
  15. package/bin/lib/onListening.js +1 -1
  16. package/bin/lib/startUp.js +10 -9
  17. package/bin/lib/watch/watchComponents.js +16 -26
  18. package/bin/lib/watch/watchMF.js +1 -1
  19. package/bin/lib/watch/watchMR.js +1 -1
  20. package/bin/lib/watch/watchSchema.js +1 -1
  21. package/bin/user/changePassword.js +1 -1
  22. package/bin/user/create.js +1 -1
  23. package/package.json +2 -2
  24. package/src/components/admin/catalog/productEdit/category/CategoryItem.jsx +1 -1
  25. package/src/components/admin/catalog/productEdit/category/CategoryTree.jsx +1 -1
  26. package/src/components/admin/catalog/productEdit/variants/CreateVariantGroup.jsx +3 -8
  27. package/src/components/admin/catalog/productEdit/variants/Variant.jsx +1 -1
  28. package/src/components/admin/catalog/productEdit/variants/VariantModal.jsx +62 -6
  29. package/src/components/admin/catalog/productEdit/variants/Variants.jsx +1 -1
  30. package/src/components/admin/checkout/shippingSetting/Method.jsx +130 -0
  31. package/src/components/admin/{oms → checkout}/shippingSetting/MethodForm.jsx +124 -13
  32. package/src/components/admin/{oms → checkout}/shippingSetting/Methods.jsx +2 -2
  33. package/src/components/admin/checkout/shippingSetting/PriceBasedPrice.jsx +101 -0
  34. package/src/components/admin/checkout/shippingSetting/WeightBasedPrice.jsx +101 -0
  35. package/src/components/admin/{oms → checkout}/shippingSetting/Zone.jsx +34 -4
  36. package/src/components/admin/{oms → checkout}/shippingSetting/Zones.jsx +6 -3
  37. package/src/components/admin/promotion/couponEdit/AttributeGroupSelector.jsx +5 -5
  38. package/src/components/admin/promotion/couponEdit/CategorySelector.jsx +5 -5
  39. package/src/components/admin/promotion/couponEdit/CollectionSelector.jsx +5 -5
  40. package/src/components/admin/promotion/couponEdit/ProductSkuSelector.jsx +27 -6
  41. package/src/components/common/context/checkout.jsx +8 -14
  42. package/src/components/common/form/Field.jsx +1 -1
  43. package/src/components/common/form/fields/Input.jsx +2 -1
  44. package/src/components/common/form/validator.js +6 -2
  45. package/src/components/common/grid/headers/Dummy.jsx +1 -1
  46. package/src/components/common/grid/headers/Sortable.jsx +148 -0
  47. package/src/components/common/grid/rows/StatusRow.jsx +1 -1
  48. package/src/components/common/list/Filter.jsx +83 -0
  49. package/src/components/common/list/Filter.scss +39 -0
  50. package/src/components/frontStore/catalog/categoryView/filter/AttributeFilter.jsx +19 -5
  51. package/src/components/frontStore/catalog/categoryView/filter/CategoryFilter.jsx +59 -52
  52. package/src/components/frontStore/catalog/categoryView/filter/PriceFilter.jsx +20 -11
  53. package/src/components/frontStore/catalog/product/list/SortOptions.jsx +4 -2
  54. package/src/components/frontStore/catalog/product/list/Sorting.jsx +5 -5
  55. package/src/components/frontStore/checkout/checkout/payment/paymentStep/StepContent.jsx +9 -6
  56. package/src/components/frontStore/stripe/checkout/CheckoutForm.jsx +8 -4
  57. package/src/lib/event/callSubscibers.js +14 -11
  58. package/src/lib/event/event-manager.js +1 -1
  59. package/src/lib/event/loadSubscribers.js +2 -2
  60. package/src/lib/helpers.js +3 -1
  61. package/src/lib/log/CustomColorize.js +22 -0
  62. package/src/lib/log/logger.js +153 -19
  63. package/src/lib/middleware/Handler.js +2 -3
  64. package/src/lib/middleware/async.js +5 -9
  65. package/src/lib/middleware/sync.js +5 -10
  66. package/src/lib/middleware/tests/app/app.js +1 -1
  67. package/src/lib/router/buildAbsoluteUrl.js +1 -1
  68. package/src/lib/util/buildFilterFromUrl.js +31 -64
  69. package/src/lib/util/defaultPaginationFilters.js +102 -0
  70. package/src/lib/util/filterOperationMapp.js +16 -0
  71. package/src/lib/util/registry.js +44 -6
  72. package/src/lib/webpack/dev/createConfigClient.js +2 -0
  73. package/src/lib/webpack/loaders/AreaLoader.js +1 -1
  74. package/src/lib/webpack/loaders/loadTranslationFromCsv.js +1 -1
  75. package/src/lib/webpack/plugins/Tailwindcss.js +1 -1
  76. package/src/modules/auth/graphql/types/AdminUser/AdminUser.admin.resolvers.js +6 -6
  77. package/src/modules/auth/pages/admin/adminLogin/LoginForm.jsx +1 -15
  78. package/src/modules/base/api/global/[apiResponse]apiErrorHandler.js +2 -2
  79. package/src/modules/base/pages/global/[response]errorHandler.js +2 -2
  80. package/src/modules/catalog/api/addProductToCategory/addProducts.js +1 -1
  81. package/src/modules/catalog/api/addProductToCollection/addProducts.js +35 -22
  82. package/src/modules/catalog/api/removeProductFromCollection/removeProducts.js +20 -5
  83. package/src/modules/catalog/bootstrap.js +63 -0
  84. package/src/modules/catalog/graphql/types/Attribute/Attribute.admin.graphql +2 -2
  85. package/src/modules/catalog/graphql/types/Attribute/Attribute.admin.resolvers.js +48 -276
  86. package/src/modules/catalog/graphql/types/Category/Category.graphql +15 -2
  87. package/src/modules/catalog/graphql/types/Category/Category.resolvers.js +2 -2
  88. package/src/modules/catalog/graphql/types/Collection/Collection.resolvers.js +2 -2
  89. package/src/modules/catalog/graphql/types/Product/Product.resolvers.js +1 -1
  90. package/src/modules/catalog/graphql/types/Product/Variant/Variant.graphql +2 -2
  91. package/src/modules/catalog/graphql/types/Product/Variant/Variant.resolvers.js +68 -92
  92. package/src/modules/catalog/pages/admin/attributeEdit+attributeNew/General.jsx +13 -9
  93. package/src/modules/catalog/pages/admin/attributeGrid/Grid.jsx +82 -39
  94. package/src/modules/catalog/pages/admin/attributeGrid/index.js +1 -1
  95. package/src/modules/catalog/pages/admin/categoryEdit/Products.jsx +5 -5
  96. package/src/modules/catalog/pages/admin/categoryGrid/Grid.jsx +48 -16
  97. package/src/modules/catalog/pages/admin/categoryGrid/index.js +1 -1
  98. package/src/modules/catalog/pages/admin/collectionEdit/Products.jsx +5 -5
  99. package/src/modules/catalog/pages/admin/collectionGrid/Grid.jsx +46 -5
  100. package/src/modules/catalog/pages/admin/collectionGrid/index.js +1 -1
  101. package/src/modules/catalog/pages/admin/productEdit+productNew/Attributes.jsx +28 -24
  102. package/src/modules/catalog/pages/admin/productGrid/Grid.jsx +158 -26
  103. package/src/modules/catalog/pages/admin/productGrid/index.js +1 -2
  104. package/src/modules/catalog/pages/frontStore/all/SearchBox.jsx +2 -1
  105. package/src/modules/catalog/pages/frontStore/catalogSearch/[index]filters.js +4 -59
  106. package/src/modules/catalog/pages/frontStore/catalogSearch/index.js +11 -0
  107. package/src/modules/catalog/pages/frontStore/categoryView/Filter.jsx +22 -6
  108. package/src/modules/catalog/pages/frontStore/categoryView/Filter.scss +2 -0
  109. package/src/modules/catalog/pages/frontStore/categoryView/[index]filters.js +5 -105
  110. package/src/modules/catalog/pages/frontStore/homepage/FeaturedProducts.jsx +1 -1
  111. package/src/modules/catalog/pages/frontStore/productView/Form.jsx +8 -3
  112. package/src/modules/catalog/pages/frontStore/productView/Variants.jsx +102 -40
  113. package/src/modules/catalog/services/AttributeCollection.js +59 -0
  114. package/src/modules/catalog/services/AttributeGroupCollection.js +100 -0
  115. package/src/modules/catalog/services/CategoryCollection.js +27 -84
  116. package/src/modules/catalog/services/CollectionCollection.js +24 -72
  117. package/src/modules/catalog/services/ProductCollection.js +50 -216
  118. package/src/modules/catalog/services/attribute/deleteProductAttribute.js +15 -0
  119. package/src/modules/catalog/services/getAttributeGroupsBaseQuery.js +3 -0
  120. package/src/modules/catalog/services/getAttributesBaseQuery.js +3 -0
  121. package/src/modules/catalog/services/getCollectionsBaseQuery.js +0 -1
  122. package/src/modules/catalog/services/product/updateProduct.js +8 -2
  123. package/src/modules/catalog/services/registerDefaultAttributeCollectionFilters.js +149 -0
  124. package/src/modules/catalog/services/registerDefaultCategoryCollectionFilters.js +85 -0
  125. package/src/modules/catalog/services/registerDefaultCollectionCollectionFilters.js +65 -0
  126. package/src/modules/catalog/services/registerDefaultProductCollectionFilters.js +219 -0
  127. package/src/modules/catalog/subscribers/category_created/buildUrlRewrite.js +1 -1
  128. package/src/modules/catalog/subscribers/category_deleted/deleteUrlRewrite.js +1 -1
  129. package/src/modules/catalog/subscribers/category_updated/builUrlRewrite.js +1 -1
  130. package/src/modules/catalog/subscribers/product_created/builUrlRewrite.js +1 -1
  131. package/src/modules/catalog/subscribers/product_deleted/deleteUrlRewrite.js +1 -1
  132. package/src/modules/catalog/subscribers/product_image_added/localGenerateProductImageVariant.js +3 -3
  133. package/src/modules/checkout/api/addCartShippingMethod/saveShippingMethod.js +6 -1
  134. package/src/modules/checkout/api/createCart/[context]bodyParser[auth].js +5 -0
  135. package/src/modules/checkout/api/createCart/createNewCart.js +92 -0
  136. package/src/modules/checkout/api/createCart/payloadSchema.json +44 -0
  137. package/src/modules/checkout/api/createCart/route.json +5 -0
  138. package/src/modules/checkout/api/deleteShippingZone/deleteShippingZone.js +58 -0
  139. package/src/modules/checkout/api/deleteShippingZone/route.json +5 -0
  140. package/src/modules/checkout/api/deleteShippingZoneMethod/deleteShippingZoneMethod.js +85 -0
  141. package/src/modules/checkout/api/deleteShippingZoneMethod/route.json +5 -0
  142. package/src/modules/checkout/api/getShippingMethods/sendMethods.js +37 -0
  143. package/src/modules/checkout/api/updateShippingMethod/[context]borderParser[auth].js +5 -0
  144. package/src/modules/checkout/api/updateShippingMethod/payloadSchema.json +12 -0
  145. package/src/modules/checkout/api/updateShippingMethod/route.json +5 -0
  146. package/src/modules/checkout/api/updateShippingMethod/updateShippingMethod.js +64 -0
  147. package/src/modules/checkout/api/updateShippingZoneMethod/payloadSchema.json +43 -1
  148. package/src/modules/checkout/api/updateShippingZoneMethod/updateShippingZoneMethod.js +17 -3
  149. package/src/modules/checkout/bootstrap.js +1 -1
  150. package/src/modules/checkout/graphql/types/ShippingMethod/ShippingMethod.graphql +1 -0
  151. package/src/modules/checkout/graphql/types/ShippingMethod/ShippingMethod.resolvers.js +4 -0
  152. package/src/modules/checkout/graphql/types/ShippingZone/ShippingZone.graphql +21 -1
  153. package/src/modules/checkout/graphql/types/ShippingZone/ShippingZone.resolvers.js +34 -4
  154. package/src/modules/checkout/graphql/types/Weight/Weight.resolvers.js +8 -11
  155. package/src/modules/checkout/migration/Version-1.0.5.js +28 -0
  156. package/src/modules/{oms → checkout}/pages/admin/shippingSetting/ShippingSetting.jsx +66 -43
  157. package/src/modules/checkout/pages/frontStore/all/[auth]addCustomerToCart.js +3 -3
  158. package/src/modules/checkout/pages/frontStore/checkout/PaymentStep.jsx +3 -2
  159. package/src/modules/checkout/pages/frontStore/checkout/ShippingMethods.jsx +23 -10
  160. package/src/modules/checkout/pages/frontStore/checkout/SummaryMobile.jsx +132 -0
  161. package/src/modules/checkout/pages/frontStore/checkout/SummaryMobile.scss +7 -0
  162. package/src/modules/checkout/services/cart/Cart.js +23 -7
  163. package/src/modules/checkout/services/cart/DataObject.js +3 -3
  164. package/src/modules/checkout/services/cart/registerCartBaseFields.js +32 -0
  165. package/src/modules/checkout/services/cart/registerCartItemBaseFields.js +3 -2
  166. package/src/modules/cms/bootstrap.js +17 -0
  167. package/src/modules/cms/graphql/types/CmsPage/CmsPage.resolvers.js +2 -11
  168. package/src/modules/cms/pages/admin/all/Layout.scss +3 -2
  169. package/src/modules/cms/pages/admin/all/SearchBox.jsx +1 -1
  170. package/src/modules/cms/pages/admin/cmsPageGrid/Grid.jsx +62 -9
  171. package/src/modules/cms/pages/admin/cmsPageGrid/index.js +1 -2
  172. package/src/modules/cms/services/CMSPageCollection.js +23 -70
  173. package/src/modules/cms/services/registerDefaultPageCollectionFilters.js +62 -0
  174. package/src/modules/cms/services/tailwind.admin.config.js +6 -1
  175. package/src/modules/customer/api/createCustomer/[bodyParser]createCustomer.js +2 -2
  176. package/src/modules/customer/api/resetPassword/[bodyParser]resetPassword.js +2 -2
  177. package/src/modules/customer/api/updatePassword/[bodyParser]updatePassword.js +2 -2
  178. package/src/modules/customer/bootstrap.js +29 -0
  179. package/src/modules/customer/graphql/types/Customer/Customer.admin.resolvers.js +2 -4
  180. package/src/modules/customer/pages/admin/customerGrid/Grid.jsx +108 -14
  181. package/src/modules/customer/pages/admin/customerGrid/index.js +1 -2
  182. package/src/modules/customer/pages/frontStore/login/LoginForm.jsx +0 -1
  183. package/src/modules/customer/services/CustomerCollection.js +23 -104
  184. package/src/modules/customer/services/CustomerGroupCollection.js +21 -70
  185. package/src/modules/customer/services/registerDefaultCustomerCollectionFilters.js +90 -0
  186. package/src/modules/customer/services/registerDefaultCustomerGroupCollectionFilters.js +50 -0
  187. package/src/modules/graphql/pages/global/[bodyParser]buildQuery[graphql].js +1 -1
  188. package/src/modules/graphql/pages/global/[buildQuery]graphql[notification].js +1 -1
  189. package/src/modules/graphql/services/graphqlMiddleware.js +1 -1
  190. package/src/modules/oms/bootstrap.js +17 -0
  191. package/src/modules/oms/graphql/types/Order/Order.admin.resolvers.js +1 -1
  192. package/src/modules/oms/graphql/types/Order/Order.resolvers.js +2 -1
  193. package/src/modules/oms/pages/admin/orderGrid/Grid.jsx +152 -51
  194. package/src/modules/oms/pages/admin/orderGrid/index.js +1 -2
  195. package/src/modules/oms/services/OrderCollection.js +19 -139
  196. package/src/modules/oms/services/registerDefaultOrderCollectionFilters.js +121 -0
  197. package/src/modules/promotion/bootstrap.js +16 -0
  198. package/src/modules/promotion/graphql/types/Coupon/Coupon.admin.resolvers.js +2 -7
  199. package/src/modules/promotion/pages/admin/couponGrid/Grid.jsx +157 -33
  200. package/src/modules/promotion/pages/admin/couponGrid/index.js +1 -2
  201. package/src/modules/promotion/services/CouponCollection.js +21 -130
  202. package/src/modules/promotion/services/registerDefaultCouponCollectionFilters.js +72 -0
  203. package/src/modules/stripe/api/stripeWebHook/[bodyJson]webhook.js +4 -2
  204. package/src/modules/tax/bootstrap.js +17 -0
  205. package/src/modules/tax/services/TaxClassCollection.js +22 -56
  206. package/src/modules/tax/services/registerDefaultTaxClassCollectionFilters.js +49 -0
  207. package/src/components/admin/oms/shippingSetting/Method.jsx +0 -73
  208. package/src/components/common/grid/headers/Basic.jsx +0 -55
  209. package/src/lib/log/debuger.js +0 -89
  210. package/src/modules/customer/pages/frontStore/login/LoginButton.jsx +0 -27
  211. /package/src/components/admin/{oms → checkout}/shippingSetting/ZoneForm.jsx +0 -0
  212. /package/src/modules/{oms → checkout}/pages/admin/all/ShippingSettingMenu.jsx +0 -0
  213. /package/src/modules/{oms → checkout}/pages/admin/shippingSetting/index.js +0 -0
  214. /package/src/modules/{oms → checkout}/pages/admin/shippingSetting/route.json +0 -0
@@ -11,6 +11,7 @@ import { useCheckout } from '@components/common/context/checkout';
11
11
  import { Field } from '@components/common/form/Field';
12
12
  import Button from '@components/common/form/Button';
13
13
  import { _ } from '@evershop/evershop/src/lib/locale/translate';
14
+ import Spinner from '@components/common/Spinner';
14
15
 
15
16
  const QUERY = `
16
17
  query Query($cartId: String) {
@@ -78,15 +79,16 @@ export function StepContent({
78
79
  });
79
80
  const { data, fetching, error } = result;
80
81
 
81
- if (fetching) return <p>Loading .....</p>;
82
- if (error) {
82
+ if (fetching) {
83
83
  return (
84
- <p>
85
- Oh no...
86
- {error.message}
87
- </p>
84
+ <div className="flex justify-center items-center p-3">
85
+ <Spinner width={25} height={25} />
86
+ </div>
88
87
  );
89
88
  }
89
+ if (error) {
90
+ return <div className="p-2 text-critical">{error.message}</div>;
91
+ }
90
92
  return (
91
93
  <div>
92
94
  <Form
@@ -160,6 +162,7 @@ export function StepContent({
160
162
  {_('No payment method available')}
161
163
  </div>
162
164
  )}
165
+ <Area id="beforePlaceOrderButton" noOuter />
163
166
  <div className="form-submit-button">
164
167
  <Button
165
168
  onAction={() => {
@@ -5,6 +5,7 @@ import { useQuery } from 'urql';
5
5
  import { useCheckout } from '@components/common/context/checkout';
6
6
  import './CheckoutForm.scss';
7
7
  import { Field } from '@components/common/form/Field';
8
+ import { _ } from '@evershop/evershop/src/lib/locale/translate';
8
9
  import TestCards from './TestCards';
9
10
 
10
11
  const cartQuery = `
@@ -101,7 +102,11 @@ export default function CheckoutForm({ stripePublishableKey }) {
101
102
  })
102
103
  .then((res) => res.json())
103
104
  .then((data) => {
104
- setClientSecret(data.data.clientSecret);
105
+ if (data.error) {
106
+ setError(_('Some error occurred. Please try again later.'));
107
+ } else {
108
+ setClientSecret(data.data.clientSecret);
109
+ }
105
110
  });
106
111
  }
107
112
  }, [orderId]);
@@ -162,10 +167,9 @@ export default function CheckoutForm({ stripePublishableKey }) {
162
167
 
163
168
  if (result.error) {
164
169
  return (
165
- <p>
166
- Oh no...
170
+ <div className="flex p-2 justify-center items-center text-critical">
167
171
  {error.message}
168
- </p>
172
+ </div>
169
173
  );
170
174
  }
171
175
  // Check if the selected payment method is Stripe
@@ -1,19 +1,22 @@
1
- const logger = require('../log/logger');
1
+ const { error } = require('../log/logger');
2
2
 
3
3
  module.exports.callSubscribers = async function callSubscribers(
4
4
  subscribers,
5
5
  eventData
6
6
  ) {
7
- const promises = subscribers.map((subscriber) => new Promise((resolve) => {
8
- setTimeout(async () => {
9
- try {
10
- await subscriber(eventData);
11
- } catch (error) {
12
- logger.log('error', `Error executing subscriber function: ${error}`);
13
- }
14
- resolve();
15
- }, 0);
16
- }));
7
+ const promises = subscribers.map(
8
+ (subscriber) =>
9
+ new Promise((resolve) => {
10
+ setTimeout(async () => {
11
+ try {
12
+ await subscriber(eventData);
13
+ } catch (e) {
14
+ error(e);
15
+ }
16
+ resolve();
17
+ }, 0);
18
+ })
19
+ );
17
20
 
18
21
  await Promise.all(promises);
19
22
  };
@@ -7,7 +7,7 @@ const { getCoreModules } = require('@evershop/evershop/bin/lib/loadModules');
7
7
  const { getEnabledExtensions } = require('@evershop/evershop/bin/extension');
8
8
  const { callSubscribers } = require('./callSubscibers');
9
9
  const { loadSubscribers } = require('./loadSubscribers');
10
- const { error } = require('../log/debuger');
10
+ const { error } = require('../log/logger');
11
11
  const { lockHooks } = require('../util/hookable');
12
12
  const { lockRegistry } = require('../util/registry');
13
13
 
@@ -1,6 +1,6 @@
1
1
  const path = require('path');
2
2
  const fs = require('fs');
3
- const { debug } = require('@evershop/evershop/src/lib/log/debuger');
3
+ const { error } = require('@evershop/evershop/src/lib/log/logger');
4
4
 
5
5
  function loadModuleSubscribers(modulePath) {
6
6
  const subscribers = [];
@@ -46,7 +46,7 @@ module.exports.loadSubscribers = function loadSubscribers(modules) {
46
46
  // Load routes
47
47
  subscribers.push(...loadModuleSubscribers(module.path));
48
48
  } catch (e) {
49
- debug('critical', e);
49
+ error(e);
50
50
  process.exit(0);
51
51
  }
52
52
  });
@@ -1,4 +1,5 @@
1
1
  const path = require('path');
2
+ const { getConfig } = require('./util/getConfig');
2
3
 
3
4
  const rootPath = process.cwd();
4
5
 
@@ -11,5 +12,6 @@ exports.CONSTANTS = Object.freeze({
11
12
  NODEMODULEPATH: path.resolve(rootPath, 'node_modules'),
12
13
  THEMEPATH: path.resolve(rootPath, 'themes'),
13
14
  CACHEPATH: path.resolve(rootPath, '.evershop'),
14
- BUILDPATH: path.resolve(rootPath, '.evershop', 'build')
15
+ BUILDPATH: path.resolve(rootPath, '.evershop', 'build'),
16
+ ADMIN_COLLECTION_SIZE: getConfig('admin_collection_size', 20)
15
17
  });
@@ -0,0 +1,22 @@
1
+ // Extend the default winston colorize format and add color to the stack trace
2
+ const { format } = require('winston');
3
+ const { LEVEL } = require('triple-beam');
4
+
5
+ const { colorize } = format;
6
+
7
+ class CustomColorize extends colorize.Colorizer {
8
+ constructor(opts = {}) {
9
+ super(opts);
10
+ }
11
+
12
+ transform(info, opts) {
13
+ super.transform(info, opts);
14
+ if (info.stack) {
15
+ // eslint-disable-next-line no-param-reassign
16
+ info.stack = this.colorize(info[LEVEL], info.level, info.stack);
17
+ }
18
+ return info;
19
+ }
20
+ }
21
+
22
+ module.exports = (opts) => new CustomColorize(opts);
@@ -1,24 +1,158 @@
1
+ /* eslint-disable no-param-reassign */
1
2
  const winston = require('winston');
2
- const path = require('path');
3
- const { CONSTANTS } = require('../helpers');
4
-
5
- const logger = winston.createLogger({
6
- level: 'info',
7
- format: winston.format.json(),
8
- defaultMeta: { service: 'user-service' },
9
- transports: [
10
- new winston.transports.File({
11
- filename: path.resolve(CONSTANTS.ROOTPATH, '.log/error.log'),
12
- level: 'error'
13
- })
14
- ]
15
- });
16
- // Call exceptions.handle with a transport to handle exceptions
17
- logger.exceptions.handle(
18
- new winston.transports.File({
19
- filename: path.resolve(CONSTANTS.ROOTPATH, '.log/exceptions.log')
3
+
4
+ const { errors } = winston.format;
5
+ const customColorize = require('./CustomColorize');
6
+ const isDevelopmentMode = require('../util/isDevelopmentMode');
7
+ const { getEnv } = require('../util/getEnv');
8
+ const { getValueSync, addProcessor } = require('../util/registry');
9
+
10
+ const isDebugging = isDevelopmentMode() || process.argv.includes('--debug');
11
+ const format = winston.format.combine(
12
+ errors({ stack: true }),
13
+ customColorize({
14
+ colors: {
15
+ error: 'red',
16
+ warn: 'yellow',
17
+ info: 'green',
18
+ http: 'blue',
19
+ verbose: 'cyan',
20
+ debug: 'magenta',
21
+ silly: 'gray'
22
+ },
23
+ level: false,
24
+ message: true
25
+ }),
26
+ winston.format.printf(({ level, message, stack }) => {
27
+ let icon;
28
+ switch (level) {
29
+ case 'error':
30
+ icon = '❌'; // Error icon
31
+ break;
32
+ case 'warn':
33
+ icon = '⚠️ '; // Warning icon
34
+ break;
35
+ case 'info':
36
+ icon = 'ℹ️'; // Info icon
37
+ break;
38
+ case 'http':
39
+ icon = '🌐'; // HTTP icon
40
+ break;
41
+ case 'verbose':
42
+ icon = '🔍'; // Verbose icon
43
+ break;
44
+ case 'debug':
45
+ icon = '🐛'; // Debug icon
46
+ break;
47
+ case 'silly':
48
+ icon = '🤪'; // Silly icon
49
+ break;
50
+ default:
51
+ icon = '';
52
+ break;
53
+ }
54
+ // Now apply color to the icon and level
55
+ switch (level) {
56
+ case 'error':
57
+ level = `\x1b[31m${level}\x1b[0m`; // Red color
58
+ icon = `\x1b[31m${icon}\x1b[0m`; // Red color
59
+ break;
60
+ case 'warn':
61
+ level = `\x1b[33m${level}\x1b[0m`; // Yellow color
62
+ icon = `\x1b[33m${icon}\x1b[0m`; // Yellow color
63
+ break;
64
+ case 'info':
65
+ level = `\x1b[32m${level}\x1b[0m`; // Green color
66
+ icon = `\x1b[32m${icon}\x1b[0m`; // Green color
67
+ break;
68
+ case 'http':
69
+ level = `\x1b[34m${level}\x1b[0m`; // Blue color
70
+ icon = `\x1b[34m${icon}\x1b[0m`; // Blue color
71
+ break;
72
+ case 'verbose':
73
+ level = `\x1b[36m${level}\x1b[0m`; // Cyan color
74
+ icon = `\x1b[36m${icon}\x1b[0m`; // Cyan color
75
+ break;
76
+ case 'debug':
77
+ level = `\x1b[35m${level}\x1b[0m`; // Magenta color
78
+ icon = `\x1b[35m${icon}\x1b[0m`; // Magenta color
79
+ break;
80
+ case 'silly':
81
+ level = `\x1b[37m${level}\x1b[0m`; // Gray color
82
+ icon = `\x1b[37m${icon}\x1b[0m`; // Gray color
83
+ break;
84
+ default:
85
+ break;
86
+ }
87
+ if (stack) {
88
+ message = `${message}\n${stack}`;
89
+ }
90
+ return `${icon} ${level}: \n${message}`;
20
91
  })
21
92
  );
93
+ const consoleTransport = new winston.transports.Console();
94
+ const logFile = getEnv('LOG_FILE', undefined);
95
+ // Default transports
96
+ const DEFAULT_CONFIG = {
97
+ level: isDebugging ? 'silly' : getEnv('LOGGER_LEVEL', 'warn'),
98
+ format,
99
+ // By default, log to console
100
+ transports:
101
+ isDebugging || !logFile
102
+ ? [consoleTransport]
103
+ : [new winston.transports.File({ filename: logFile })],
104
+ exceptionHandlers:
105
+ isDebugging || !logFile
106
+ ? [consoleTransport]
107
+ : [new winston.transports.File({ filename: logFile })]
108
+ };
109
+
110
+ function createLogger() {
111
+ return getValueSync('logger', null, { isDebugging });
112
+ }
113
+
114
+ // Define logger function
115
+ function debug(message) {
116
+ const logger = createLogger();
117
+ logger.debug(message);
118
+ }
119
+
120
+ function error(e) {
121
+ const logger = createLogger();
122
+ logger.error(e);
123
+ }
124
+
125
+ function warning(message) {
126
+ const logger = createLogger();
127
+ logger.warn(message);
128
+ }
129
+
130
+ function info(message) {
131
+ const logger = createLogger();
132
+ logger.info(message);
133
+ }
134
+
135
+ function success(message) {
136
+ const logger = createLogger();
137
+ logger.info(message);
138
+ }
139
+
140
+ addProcessor(
141
+ 'logger',
142
+ () => {
143
+ const config = getValueSync('logger_configuration', DEFAULT_CONFIG, {
144
+ isDebugging
145
+ });
146
+ return winston.createLogger(config);
147
+ },
148
+ 0
149
+ );
22
150
 
23
151
  // eslint-disable-next-line no-multi-assign
24
- module.exports = exports = logger;
152
+ module.exports = exports = {
153
+ success,
154
+ info,
155
+ warning,
156
+ error,
157
+ debug
158
+ };
@@ -5,7 +5,7 @@ const { sortMiddlewares } = require('./sort');
5
5
  const { parseFromFile } = require('./parseFromFile');
6
6
  const { noDublicateId } = require('./noDuplicateId');
7
7
  const { getRoutes } = require('../router/Router');
8
- const { error } = require('../log/debuger');
8
+ const { error } = require('../log/logger');
9
9
 
10
10
  class Handler {
11
11
  static middlewares = [];
@@ -99,8 +99,7 @@ class Handler {
99
99
  static middleware() {
100
100
  return (request, response, next) => {
101
101
  request.params = {
102
-
103
- ...request.locals?.customParams || {},
102
+ ...(request.locals?.customParams || {}),
104
103
  ...request.params
105
104
  };
106
105
  const { currentRoute } = request;
@@ -1,5 +1,4 @@
1
- const logger = require('@evershop/evershop/src/lib/log/logger');
2
- const { debug } = require('@evershop/evershop/src/lib/log/debuger');
1
+ const { error } = require('@evershop/evershop/src/lib/log/logger');
3
2
  const { setDelegate } = require('./delegate');
4
3
 
5
4
  // eslint-disable-next-line no-multi-assign
@@ -22,10 +21,10 @@ exports.asyncMiddlewareWrapper = async function asyncMiddlewareWrapper(
22
21
  // If the middleware function has the next function as a parameter
23
22
  let delegate;
24
23
  if (middlewareFunc.length === 4) {
25
- delegate = middlewareFunc(request, response, delegates, (error) => {
24
+ delegate = middlewareFunc(request, response, delegates, (err) => {
26
25
  const endTime = process.hrtime(startTime);
27
26
  debuging.time = endTime[1] / 1000000;
28
- next(error);
27
+ next(err);
29
28
  });
30
29
  } else {
31
30
  delegate = middlewareFunc(request, response, delegates);
@@ -36,11 +35,8 @@ exports.asyncMiddlewareWrapper = async function asyncMiddlewareWrapper(
36
35
  await delegate;
37
36
  } catch (e) {
38
37
  // Log the error
39
- logger.log('error', `Exception in middleware ${id}`, {
40
- message: e.message,
41
- stack: e.stack
42
- });
43
- debug('critical', `Exception in middleware ${id}`);
38
+ e.message = `Exception in middleware ${id}: ${e.message}`;
39
+ error(e);
44
40
  // Call error handler middleware if it is not called yet
45
41
  next(e);
46
42
  }
@@ -1,5 +1,4 @@
1
- const logger = require('@evershop/evershop/src/lib/log/logger');
2
- const { debug } = require('@evershop/evershop/src/lib/log/debuger');
1
+ const { error } = require('@evershop/evershop/src/lib/log/logger');
3
2
  const { setDelegate } = require('./delegate');
4
3
 
5
4
  // eslint-disable-next-line no-multi-assign
@@ -22,10 +21,10 @@ exports.syncMiddlewareWrapper = function syncMiddlewareWrapper(
22
21
  response.debugMiddlewares.push(debuging);
23
22
  // If the middleware function has the next function as a parameter
24
23
  if (middlewareFunc.length === 4) {
25
- delegate = middlewareFunc(request, response, delegates, (error) => {
24
+ delegate = middlewareFunc(request, response, delegates, (err) => {
26
25
  const endTime = process.hrtime(startTime);
27
26
  debuging.time = endTime[1] / 1000000;
28
- next(error);
27
+ next(err);
29
28
  });
30
29
  } else {
31
30
  delegate = middlewareFunc(request, response, delegates);
@@ -35,12 +34,8 @@ exports.syncMiddlewareWrapper = function syncMiddlewareWrapper(
35
34
  setDelegate(id, delegate, request);
36
35
  } catch (e) {
37
36
  // Log the error
38
- logger.log('error', `Exception in middleware ${id}`, {
39
- message: e.message,
40
- stack: e.stack
41
- });
42
- debug('critical', `Exception in middleware ${id}`);
43
-
37
+ e.message = `Exception in middleware ${id}: ${e.message}`;
38
+ error(e);
44
39
  // Call error handler middleware if it is not called yet
45
40
  next(e);
46
41
  }
@@ -13,7 +13,7 @@ const { once } = require('events');
13
13
  const { getModuleMiddlewares } = require('../..');
14
14
  const { getRoutes } = require('../../../router/Router');
15
15
  const { Handler } = require('../../Handler');
16
- const { error } = require('../../../log/debuger');
16
+ const { error } = require('../../../log/logger');
17
17
 
18
18
  /** Create express app */
19
19
  const app = express();
@@ -1,6 +1,6 @@
1
1
  const normalizePort = require('@evershop/evershop/bin/lib/normalizePort');
2
2
  const { buildUrl } = require('./buildUrl');
3
- const { getConfig } = require('../util/getConfig');
3
+ const { getConfig } = require('../util/getConfig');
4
4
 
5
5
  const port = normalizePort();
6
6
 
@@ -1,79 +1,46 @@
1
- module.exports.buildFilterFromUrl = (query) => {
1
+ module.exports.buildFilterFromUrl = (request) => {
2
+ const { query } = request;
2
3
  if (!query) {
3
4
  return [];
4
5
  } else {
5
6
  const filtersFromUrl = [];
6
7
 
7
- // Attribute filters
8
8
  Object.keys(query).forEach((key) => {
9
- const filter = query[key];
10
- if (Array.isArray(filter)) {
11
- const values = filter
12
- .map((v) => parseInt(v, 10))
13
- .filter((v) => Number.isNaN(v) === false);
14
- if (values.length > 0) {
15
- filtersFromUrl.push({
16
- key,
17
- operation: 'IN',
18
- value: values.join(',')
19
- });
20
- }
21
- } else {
22
- // Use regex to check if filter is either started or ended with a '%'
23
- // If so, use LIKE operation
24
- const regex = /^%|%$/;
25
- if (!regex.test(filter)) {
26
- filtersFromUrl.push({
27
- key,
28
- operation: '=',
29
- value: filter
30
- });
31
- } else {
9
+ // Check if the value is a string
10
+ if (typeof query[key] === 'string') {
11
+ filtersFromUrl.push({
12
+ key,
13
+ operation: 'eq',
14
+ value: query[key]
15
+ });
16
+ }
17
+ // Check if the query is an object with value and operation
18
+ if (query[key].value && query[key].operation) {
19
+ // Convert key, value and operation to string
20
+ const { value, operation } = query[key];
21
+ // Make sure operation is either eq, neq, gt, gteq, lt, lteq, like, nlike, in, nin
22
+ if (
23
+ [
24
+ 'eq',
25
+ 'neq',
26
+ 'gt',
27
+ 'gteq',
28
+ 'lt',
29
+ 'lteq',
30
+ 'like',
31
+ 'nlike',
32
+ 'in',
33
+ 'nin'
34
+ ].includes(operation)
35
+ ) {
32
36
  filtersFromUrl.push({
33
37
  key,
34
- operation: 'LIKE',
35
- value: filter
38
+ operation: operation.toString(),
39
+ value: value.toString()
36
40
  });
37
41
  }
38
42
  }
39
43
  });
40
-
41
- const { sortBy } = query;
42
- const sortOrder =
43
- query.sortOrder && ['ASC', 'DESC'].includes(query.sortOrder.toUpperCase())
44
- ? query.sortOrder.toUpperCase()
45
- : 'ASC';
46
-
47
- if (sortBy) {
48
- filtersFromUrl.push({
49
- key: 'sortBy',
50
- operation: '=',
51
- value: sortBy.toString()
52
- });
53
- }
54
-
55
- if (sortOrder !== 'ASC') {
56
- filtersFromUrl.push({
57
- key: 'sortOrder',
58
- operation: '=',
59
- value: sortOrder
60
- });
61
- }
62
- // Paging
63
- const page = Number.isNaN(parseInt(query.page, 10))
64
- ? '1'
65
- : query.page.toString();
66
- if (page !== '1') {
67
- filtersFromUrl.push({ key: 'page', operation: '=', value: page });
68
- }
69
- // TODO: Get from config
70
- const limit = Number.isNaN(parseInt(query.limit, 10))
71
- ? '20'
72
- : query.limit.toString();
73
- if (limit !== '20') {
74
- filtersFromUrl.push({ key: 'limit', operation: '=', value: limit });
75
- }
76
-
77
44
  return filtersFromUrl;
78
45
  }
79
46
  };
@@ -0,0 +1,102 @@
1
+ const { CONSTANTS } = require('../helpers');
2
+
3
+ const defaultPaginationFilters = [
4
+ {
5
+ key: 'od',
6
+ operation: ['eq'],
7
+ callback: (query, operation, value, currentFilters) => {
8
+ if (['ASC', 'DESC', 'asc', 'desc'].includes(value)) {
9
+ query.orderDirection(value.toUpperCase());
10
+ currentFilters.push({
11
+ key: 'od',
12
+ operation,
13
+ value
14
+ });
15
+ }
16
+ }
17
+ },
18
+ {
19
+ key: 'page',
20
+ operation: ['eq'],
21
+ callback: (query, operation, value, currentFilters) => {
22
+ if (parseInt(value, 10) > 0) {
23
+ query.limit(
24
+ (parseInt(value, 10) - 1) * CONSTANTS.ADMIN_COLLECTION_SIZE,
25
+ CONSTANTS.ADMIN_COLLECTION_SIZE
26
+ );
27
+ currentFilters.push({
28
+ key: 'page',
29
+ operation,
30
+ value
31
+ });
32
+ } else {
33
+ query.limit(0, CONSTANTS.ADMIN_COLLECTION_SIZE);
34
+ currentFilters.push({
35
+ key: 'page',
36
+ operation,
37
+ value: 1
38
+ });
39
+ }
40
+ }
41
+ },
42
+ {
43
+ key: 'limit',
44
+ operation: ['eq'],
45
+ callback: (query, operation, value, currentFilters) => {
46
+ if (parseInt(value, 10) > 0) {
47
+ // Get the current page from the current filters
48
+ const page = currentFilters.find((f) => f.key === 'page');
49
+ if (page) {
50
+ query.limit(
51
+ (parseInt(page.value, 10) - 1) * parseInt(value, 10),
52
+ parseInt(value, 10)
53
+ );
54
+ } else {
55
+ query.limit(0, parseInt(value, 10));
56
+ currentFilters.push({
57
+ key: 'page',
58
+ operation: 'eq',
59
+ value
60
+ });
61
+ }
62
+ currentFilters.push({
63
+ key: 'limit',
64
+ operation,
65
+ value
66
+ });
67
+ } else {
68
+ currentFilters.push({
69
+ key: 'limit',
70
+ operation,
71
+ value: CONSTANTS.ADMIN_COLLECTION_SIZE
72
+ });
73
+ }
74
+ }
75
+ },
76
+ {
77
+ key: '*',
78
+ operation: ['eq'],
79
+ callback: (query, operation, value, currentFilters) => {
80
+ const page = currentFilters.find((f) => f.key === 'page');
81
+ const limit = currentFilters.find((f) => f.key === 'limit');
82
+ if (!limit) {
83
+ currentFilters.push({
84
+ key: 'limit',
85
+ operation: 'eq',
86
+ value: CONSTANTS.ADMIN_COLLECTION_SIZE
87
+ });
88
+ }
89
+ if (!page) {
90
+ currentFilters.push({
91
+ key: 'page',
92
+ operation: 'eq',
93
+ value: 1
94
+ });
95
+ }
96
+ }
97
+ }
98
+ ];
99
+
100
+ module.exports = {
101
+ defaultPaginationFilters
102
+ };