├── .github
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
├── images
│ ├── banner.png
│ ├── discord_banner_github.svg
│ ├── evershop-admin-demo1.png
│ ├── evershop-backend-demo.png
│ ├── evershop-demo-back.png
│ ├── evershop-demo-front.png
│ ├── evershop-logo.svg
│ ├── evershop-product-detail.png
│ ├── evershop-store-front-demo1.png
│ ├── logo-green.png
│ ├── showcase.gif
│ └── sponsors
│ │ └── bountyhub.png
├── pull_request_template.md
└── workflows
│ ├── build.yml
│ └── build_test.yml
├── .gitignore
├── .husky
└── pre-commit
├── .prettierignore
├── .prettierrc
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dockerfile
├── LICENSE
├── README.md
├── changelog.md
├── docker-compose.yml
├── eslint.config.js
├── jest.config.js
├── nodemon.json
├── package-lock.json
├── package.json
├── packages
├── agegate
│ ├── .swcrc
│ ├── package.json
│ ├── src
│ │ ├── api
│ │ │ └── verifyAge
│ │ │ │ ├── [bodyParser]verifyAge.ts
│ │ │ │ ├── [context]bodyParser[auth].ts
│ │ │ │ ├── payloadSchema.json
│ │ │ │ └── route.json
│ │ ├── graphql
│ │ │ └── types
│ │ │ │ └── AgeSetting
│ │ │ │ ├── AgeSetting.graphql
│ │ │ │ └── AgeSetting.resolvers.js
│ │ └── pages
│ │ │ ├── admin
│ │ │ ├── ageSetting
│ │ │ │ ├── AgeSetting.jsx
│ │ │ │ ├── index.js
│ │ │ │ └── route.json
│ │ │ └── all
│ │ │ │ └── AgeSettingMenu.jsx
│ │ │ └── frontStore
│ │ │ ├── ageGate
│ │ │ ├── AgeForm.jsx
│ │ │ ├── index.ts
│ │ │ └── route.json
│ │ │ ├── ageVerifyFailure
│ │ │ ├── Content.jsx
│ │ │ ├── index.ts
│ │ │ └── route.json
│ │ │ └── all
│ │ │ └── checkAge.ts
│ └── tsconfig.json
├── azure_file_storage
│ ├── README.md
│ ├── bootstrap.js
│ ├── package.json
│ ├── services
│ │ ├── azureFileBrowser.js
│ │ ├── azureFileDeleter.js
│ │ ├── azureFileUploader.js
│ │ └── azureFolderCreator.js
│ └── subscribers
│ │ └── product_image_added
│ │ └── azureGenerateProductImageVariant.js
├── create-evershop-app
│ ├── README.md
│ ├── createEverShopApp.js
│ ├── index.js
│ └── package.json
├── evershop
│ ├── .swcrc
│ ├── README.md
│ ├── package.json
│ ├── scripts
│ │ ├── postpack.js
│ │ ├── postpublish.js
│ │ └── prepublish.js
│ ├── src
│ │ ├── bin
│ │ │ ├── build
│ │ │ │ ├── client
│ │ │ │ │ └── index.js
│ │ │ │ ├── complie.js
│ │ │ │ ├── index.js
│ │ │ │ ├── initEnvBuild.ts
│ │ │ │ └── server
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── useDDL.js
│ │ │ │ │ └── useVendorChunk.js
│ │ │ ├── dev
│ │ │ │ ├── index.ts
│ │ │ │ └── initEnvDev.ts
│ │ │ ├── evershop.js
│ │ │ ├── extension
│ │ │ │ └── index.js
│ │ │ ├── install
│ │ │ │ ├── createMigrationTable.js
│ │ │ │ ├── index.js
│ │ │ │ └── templates
│ │ │ │ │ └── config.json
│ │ │ ├── lib
│ │ │ │ ├── addDefaultMiddlewareFuncs.js
│ │ │ │ ├── app.js
│ │ │ │ ├── bootstrap
│ │ │ │ │ ├── bootstrap.ts
│ │ │ │ │ └── migrate.js
│ │ │ │ ├── buildEntry.js
│ │ │ │ ├── createComponents.js
│ │ │ │ ├── cronjob.js
│ │ │ │ ├── loadModules.js
│ │ │ │ ├── normalizePort.js
│ │ │ │ ├── onError.js
│ │ │ │ ├── onListening.js
│ │ │ │ ├── prepare.js
│ │ │ │ ├── startUp.js
│ │ │ │ └── watch
│ │ │ │ │ ├── broadcash.js
│ │ │ │ │ ├── refreshable.js
│ │ │ │ │ ├── watch.js
│ │ │ │ │ ├── watchComponents.js
│ │ │ │ │ ├── watchMF.js
│ │ │ │ │ ├── watchMR.js
│ │ │ │ │ ├── watchPage.js
│ │ │ │ │ └── watchSchema.js
│ │ │ ├── start
│ │ │ │ ├── index.ts
│ │ │ │ └── initEnvStart.ts
│ │ │ └── user
│ │ │ │ ├── changePassword.js
│ │ │ │ └── create.js
│ │ ├── components
│ │ │ ├── admin
│ │ │ │ ├── auth
│ │ │ │ │ └── AuthContext.jsx
│ │ │ │ ├── catalog
│ │ │ │ │ ├── attributeGrid
│ │ │ │ │ │ ├── headers
│ │ │ │ │ │ │ └── GroupHeader.jsx
│ │ │ │ │ │ └── rows
│ │ │ │ │ │ │ ├── AttributeName.jsx
│ │ │ │ │ │ │ └── GroupRow.jsx
│ │ │ │ │ ├── categoryGrid
│ │ │ │ │ │ └── rows
│ │ │ │ │ │ │ └── CategoryName.jsx
│ │ │ │ │ ├── collection
│ │ │ │ │ │ └── collectionEdit
│ │ │ │ │ │ │ └── AddProducts.jsx
│ │ │ │ │ ├── collectionGrid
│ │ │ │ │ │ └── rows
│ │ │ │ │ │ │ └── CollectionNameRow.jsx
│ │ │ │ │ ├── productEdit
│ │ │ │ │ │ ├── category
│ │ │ │ │ │ │ ├── CategoryItem.jsx
│ │ │ │ │ │ │ ├── CategoryTree.jsx
│ │ │ │ │ │ │ └── CategoryTree.scss
│ │ │ │ │ │ ├── media
│ │ │ │ │ │ │ ├── ProductMediaManager.jsx
│ │ │ │ │ │ │ └── ProductMediaManager.scss
│ │ │ │ │ │ └── variants
│ │ │ │ │ │ │ ├── CreateVariant.jsx
│ │ │ │ │ │ │ ├── CreateVariantGroup.jsx
│ │ │ │ │ │ │ ├── EditVariant.jsx
│ │ │ │ │ │ │ ├── New.jsx
│ │ │ │ │ │ │ ├── Search.jsx
│ │ │ │ │ │ │ ├── SearchModal.jsx
│ │ │ │ │ │ │ ├── SubmitButton.jsx
│ │ │ │ │ │ │ ├── Variant.jsx
│ │ │ │ │ │ │ ├── VariantModal.jsx
│ │ │ │ │ │ │ ├── VariantType.jsx
│ │ │ │ │ │ │ ├── Variants.jsx
│ │ │ │ │ │ │ └── Variants.scss
│ │ │ │ │ └── productGrid
│ │ │ │ │ │ └── rows
│ │ │ │ │ │ ├── PriceRow.jsx
│ │ │ │ │ │ ├── ProductName.jsx
│ │ │ │ │ │ ├── QtyRow.jsx
│ │ │ │ │ │ └── ThumbnailRow.jsx
│ │ │ │ ├── checkout
│ │ │ │ │ └── shippingSetting
│ │ │ │ │ │ ├── Method.jsx
│ │ │ │ │ │ ├── MethodForm.jsx
│ │ │ │ │ │ ├── Methods.jsx
│ │ │ │ │ │ ├── PriceBasedPrice.jsx
│ │ │ │ │ │ ├── WeightBasedPrice.jsx
│ │ │ │ │ │ ├── Zone.jsx
│ │ │ │ │ │ ├── ZoneForm.jsx
│ │ │ │ │ │ └── Zones.jsx
│ │ │ │ ├── cms
│ │ │ │ │ ├── Card.jsx
│ │ │ │ │ ├── Card.scss
│ │ │ │ │ ├── NavigationItem.scss
│ │ │ │ │ ├── NavigationItem.tsx
│ │ │ │ │ ├── NavigationItemGroup.scss
│ │ │ │ │ ├── NavigationItemGroup.tsx
│ │ │ │ │ ├── PageHeading.jsx
│ │ │ │ │ ├── PageHeading.scss
│ │ │ │ │ ├── Title.jsx
│ │ │ │ │ ├── cmsPageGrid
│ │ │ │ │ │ └── rows
│ │ │ │ │ │ │ ├── NameRow.jsx
│ │ │ │ │ │ │ └── PageName.jsx
│ │ │ │ │ ├── navigation
│ │ │ │ │ │ ├── DashboardMenuItem.jsx
│ │ │ │ │ │ └── PagesMenuItem.jsx
│ │ │ │ │ └── widget
│ │ │ │ │ │ ├── WidgetTypes.jsx
│ │ │ │ │ │ └── grid
│ │ │ │ │ │ └── WidgetTypeRow.jsx
│ │ │ │ ├── customer
│ │ │ │ │ └── customerGrid
│ │ │ │ │ │ └── rows
│ │ │ │ │ │ ├── CreateAt.jsx
│ │ │ │ │ │ └── CustomerName.jsx
│ │ │ │ ├── index.ts
│ │ │ │ ├── oms
│ │ │ │ │ ├── orderEdit
│ │ │ │ │ │ ├── Shipment.jsx
│ │ │ │ │ │ ├── items
│ │ │ │ │ │ │ ├── ItemOptions.jsx
│ │ │ │ │ │ │ ├── ItemVariantOptions.jsx
│ │ │ │ │ │ │ ├── Name.jsx
│ │ │ │ │ │ │ ├── Price.jsx
│ │ │ │ │ │ │ └── Thumbnail.jsx
│ │ │ │ │ │ └── payment
│ │ │ │ │ │ │ ├── Discount.jsx
│ │ │ │ │ │ │ ├── Shipping.jsx
│ │ │ │ │ │ │ ├── SubTotal.jsx
│ │ │ │ │ │ │ ├── Tax.jsx
│ │ │ │ │ │ │ └── Total.jsx
│ │ │ │ │ └── orderGrid
│ │ │ │ │ │ ├── headers
│ │ │ │ │ │ ├── OrderDateColumnHeader.jsx
│ │ │ │ │ │ ├── PaymentStatusColumnHeader.jsx
│ │ │ │ │ │ └── ShipmentStatusColumnHeader.jsx
│ │ │ │ │ │ └── rows
│ │ │ │ │ │ ├── OrderNumberRow.jsx
│ │ │ │ │ │ ├── PaymentStatus.jsx
│ │ │ │ │ │ ├── ShipmentStatus.jsx
│ │ │ │ │ │ └── TotalRow.jsx
│ │ │ │ ├── promotion
│ │ │ │ │ ├── couponEdit
│ │ │ │ │ │ ├── AttributeGroupConditionSelector.jsx
│ │ │ │ │ │ ├── AttributeGroupSelector.jsx
│ │ │ │ │ │ ├── BuyXGetY.jsx
│ │ │ │ │ │ ├── CategoryConditionSelector.jsx
│ │ │ │ │ │ ├── CategorySelector.jsx
│ │ │ │ │ │ ├── CollectionConditionSelector.jsx
│ │ │ │ │ │ ├── CollectionSelector.jsx
│ │ │ │ │ │ ├── CompareKeyList.jsx
│ │ │ │ │ │ ├── CompareOperatorList.jsx
│ │ │ │ │ │ ├── PriceConditionSelector.jsx
│ │ │ │ │ │ ├── ProductSkuSelector.jsx
│ │ │ │ │ │ ├── RequireProducts.jsx
│ │ │ │ │ │ ├── Setting.jsx
│ │ │ │ │ │ ├── SkuConditionSelector.jsx
│ │ │ │ │ │ └── TargetProducts.jsx
│ │ │ │ │ └── couponGrid
│ │ │ │ │ │ └── rows
│ │ │ │ │ │ └── CouponName.jsx
│ │ │ │ ├── setting
│ │ │ │ │ ├── SettingMenu.jsx
│ │ │ │ │ └── SettingMenu.scss
│ │ │ │ ├── tax
│ │ │ │ │ └── taxSetting
│ │ │ │ │ │ ├── Rate.jsx
│ │ │ │ │ │ ├── RateForm.jsx
│ │ │ │ │ │ ├── Rates.jsx
│ │ │ │ │ │ ├── TaxClass.jsx
│ │ │ │ │ │ ├── TaxClassForm.jsx
│ │ │ │ │ │ └── TaxClasses.jsx
│ │ │ │ └── widgets
│ │ │ │ │ ├── BasicMenuSetting.jsx
│ │ │ │ │ ├── BasicMenuSetting.scss
│ │ │ │ │ ├── CollectionProductsSetting.jsx
│ │ │ │ │ ├── TextBlockSetting.jsx
│ │ │ │ │ └── index.tsx
│ │ │ ├── common
│ │ │ │ ├── Area.tsx
│ │ │ │ ├── Badge.jsx
│ │ │ │ ├── Badge.scss
│ │ │ │ ├── Body.jsx
│ │ │ │ ├── BundleCss.jsx
│ │ │ │ ├── BundleJs.jsx
│ │ │ │ ├── CKEditor.jsx
│ │ │ │ ├── CKEditor.scss
│ │ │ │ ├── Circle.scss
│ │ │ │ ├── Circle.tsx
│ │ │ │ ├── Dot.jsx
│ │ │ │ ├── Dot.scss
│ │ │ │ ├── Editor.jsx
│ │ │ │ ├── Link.jsx
│ │ │ │ ├── LoadingBar.jsx
│ │ │ │ ├── LoadingBar.scss
│ │ │ │ ├── Meta.jsx
│ │ │ │ ├── Notification.jsx
│ │ │ │ ├── Notification.scss
│ │ │ │ ├── Off.jsx
│ │ │ │ ├── Off.scss
│ │ │ │ ├── On.jsx
│ │ │ │ ├── On.scss
│ │ │ │ ├── ProductNoThumbnail.jsx
│ │ │ │ ├── RenderIfTrue.jsx
│ │ │ │ ├── Script.jsx
│ │ │ │ ├── SimplePagination.jsx
│ │ │ │ ├── Spinner.jsx
│ │ │ │ ├── Title.jsx
│ │ │ │ ├── context
│ │ │ │ │ ├── app.jsx
│ │ │ │ │ ├── checkout.jsx
│ │ │ │ │ └── checkoutSteps.jsx
│ │ │ │ ├── customer
│ │ │ │ │ └── address
│ │ │ │ │ │ └── AddressSummary.jsx
│ │ │ │ ├── form
│ │ │ │ │ ├── Button.jsx
│ │ │ │ │ ├── Button.scss
│ │ │ │ │ ├── Field.jsx
│ │ │ │ │ ├── Field.scss
│ │ │ │ │ ├── Form.jsx
│ │ │ │ │ ├── fields
│ │ │ │ │ │ ├── Checkbox.jsx
│ │ │ │ │ │ ├── Checkbox.scss
│ │ │ │ │ │ ├── Ckeditor.jsx
│ │ │ │ │ │ ├── Ckeditor.scss
│ │ │ │ │ │ ├── Date.jsx
│ │ │ │ │ │ ├── Date.scss
│ │ │ │ │ │ ├── DateTime.jsx
│ │ │ │ │ │ ├── DateTime.scss
│ │ │ │ │ │ ├── Editor.jsx
│ │ │ │ │ │ ├── Editor.scss
│ │ │ │ │ │ ├── Error.jsx
│ │ │ │ │ │ ├── Flatpickr.jsx
│ │ │ │ │ │ ├── Flatpickr.scss
│ │ │ │ │ │ ├── Hidden.jsx
│ │ │ │ │ │ ├── Input.jsx
│ │ │ │ │ │ ├── Input.scss
│ │ │ │ │ │ ├── MultiSelect.jsx
│ │ │ │ │ │ ├── MultiSelect.scss
│ │ │ │ │ │ ├── Password.jsx
│ │ │ │ │ │ ├── Radio.jsx
│ │ │ │ │ │ ├── Radio.scss
│ │ │ │ │ │ ├── Select.jsx
│ │ │ │ │ │ ├── Select.scss
│ │ │ │ │ │ ├── Textarea.jsx
│ │ │ │ │ │ ├── Textarea.scss
│ │ │ │ │ │ ├── Toggle.jsx
│ │ │ │ │ │ ├── Toggle.scss
│ │ │ │ │ │ └── editor
│ │ │ │ │ │ │ ├── FileBrowser.jsx
│ │ │ │ │ │ │ ├── FileBrowser.scss
│ │ │ │ │ │ │ ├── GetColumnClasses.jsx
│ │ │ │ │ │ │ ├── GetRowClasses.jsx
│ │ │ │ │ │ │ └── RowTemplates.jsx
│ │ │ │ │ └── validator.js
│ │ │ │ ├── grid
│ │ │ │ │ ├── Pagination.jsx
│ │ │ │ │ ├── Pagination.scss
│ │ │ │ │ ├── headers
│ │ │ │ │ │ ├── Action.jsx
│ │ │ │ │ │ ├── Dropdown.jsx
│ │ │ │ │ │ ├── Dummy.jsx
│ │ │ │ │ │ ├── FromTo.jsx
│ │ │ │ │ │ ├── Sortable.jsx
│ │ │ │ │ │ └── Status.jsx
│ │ │ │ │ └── rows
│ │ │ │ │ │ ├── ActionRow.jsx
│ │ │ │ │ │ ├── BasicRow.jsx
│ │ │ │ │ │ ├── DateRow.jsx
│ │ │ │ │ │ ├── PriceRow.jsx
│ │ │ │ │ │ ├── StatusRow.jsx
│ │ │ │ │ │ ├── TextRow.jsx
│ │ │ │ │ │ ├── ThumbnailRow.jsx
│ │ │ │ │ │ └── YesNoRow.jsx
│ │ │ │ ├── index.tsx
│ │ │ │ ├── list
│ │ │ │ │ ├── Filter.jsx
│ │ │ │ │ └── Filter.scss
│ │ │ │ ├── locale
│ │ │ │ │ ├── CountryOption.jsx
│ │ │ │ │ ├── CurrencyOption.jsx
│ │ │ │ │ ├── LanguageOption.jsx
│ │ │ │ │ ├── ProvinceOption.jsx
│ │ │ │ │ └── TimezoneOption.jsx
│ │ │ │ ├── modal
│ │ │ │ │ ├── Alert.jsx
│ │ │ │ │ ├── Alert.scss
│ │ │ │ │ ├── Modal.jsx
│ │ │ │ │ └── useModal.js
│ │ │ │ └── react
│ │ │ │ │ ├── Head.jsx
│ │ │ │ │ ├── client
│ │ │ │ │ ├── Client.jsx
│ │ │ │ │ ├── HotReload.jsx
│ │ │ │ │ ├── Hydrate.jsx
│ │ │ │ │ ├── HydrateAdmin.jsx
│ │ │ │ │ ├── HydrateFrontStore.jsx
│ │ │ │ │ └── Index.jsx
│ │ │ │ │ ├── getComponents.js
│ │ │ │ │ └── server
│ │ │ │ │ ├── Server.jsx
│ │ │ │ │ └── render.jsx
│ │ │ └── frontStore
│ │ │ │ ├── catalog
│ │ │ │ ├── categoryView
│ │ │ │ │ └── filter
│ │ │ │ │ │ ├── AttributeFilter.jsx
│ │ │ │ │ │ ├── CategoryFilter.jsx
│ │ │ │ │ │ ├── CategoryFilter.scss
│ │ │ │ │ │ ├── PriceFilter.jsx
│ │ │ │ │ │ └── PriceFilter.scss
│ │ │ │ └── product
│ │ │ │ │ ├── list
│ │ │ │ │ ├── List.jsx
│ │ │ │ │ ├── Pagination.jsx
│ │ │ │ │ ├── Pagination.scss
│ │ │ │ │ ├── SortOptions.jsx
│ │ │ │ │ ├── Sorting.jsx
│ │ │ │ │ └── item
│ │ │ │ │ │ ├── Name.jsx
│ │ │ │ │ │ ├── Name.scss
│ │ │ │ │ │ ├── Price.jsx
│ │ │ │ │ │ ├── Thumbnail.jsx
│ │ │ │ │ │ └── Thumbnail.scss
│ │ │ │ │ └── single
│ │ │ │ │ ├── Name.tsx
│ │ │ │ │ ├── NoThumbnail.jsx
│ │ │ │ │ ├── Price.jsx
│ │ │ │ │ └── Sku.jsx
│ │ │ │ ├── checkout
│ │ │ │ ├── cart
│ │ │ │ │ ├── Empty.jsx
│ │ │ │ │ └── items
│ │ │ │ │ │ ├── ItemOptions.jsx
│ │ │ │ │ │ ├── ItemVariantOptions.jsx
│ │ │ │ │ │ ├── Items.jsx
│ │ │ │ │ │ ├── Items.scss
│ │ │ │ │ │ └── Quantity.jsx
│ │ │ │ ├── checkout
│ │ │ │ │ ├── CheckoutButton.jsx
│ │ │ │ │ ├── StepTitle.jsx
│ │ │ │ │ ├── payment
│ │ │ │ │ │ ├── paymentMethods
│ │ │ │ │ │ │ └── Methods.jsx
│ │ │ │ │ │ └── paymentStep
│ │ │ │ │ │ │ ├── BillingAddress.jsx
│ │ │ │ │ │ │ └── StepContent.jsx
│ │ │ │ │ ├── shipment
│ │ │ │ │ │ └── StepContent.jsx
│ │ │ │ │ └── summary
│ │ │ │ │ │ ├── Cart.jsx
│ │ │ │ │ │ ├── Items.jsx
│ │ │ │ │ │ ├── Items.scss
│ │ │ │ │ │ └── cart
│ │ │ │ │ │ ├── Discount.jsx
│ │ │ │ │ │ ├── Shipping.jsx
│ │ │ │ │ │ ├── Subtotal.jsx
│ │ │ │ │ │ ├── Tax.jsx
│ │ │ │ │ │ └── Total.jsx
│ │ │ │ └── success
│ │ │ │ │ └── summary
│ │ │ │ │ ├── items
│ │ │ │ │ ├── ItemOptions.jsx
│ │ │ │ │ ├── Items.jsx
│ │ │ │ │ └── Items.scss
│ │ │ │ │ └── order
│ │ │ │ │ ├── Discount.jsx
│ │ │ │ │ ├── OrderSummary.jsx
│ │ │ │ │ ├── Shipping.jsx
│ │ │ │ │ ├── Subtotal.jsx
│ │ │ │ │ ├── Tax.jsx
│ │ │ │ │ └── Total.jsx
│ │ │ │ ├── cms
│ │ │ │ ├── Button.jsx
│ │ │ │ ├── Button.scss
│ │ │ │ ├── MetaDescription.jsx
│ │ │ │ └── MetaTitle.jsx
│ │ │ │ ├── cod
│ │ │ │ └── CODLogo.jsx
│ │ │ │ ├── customer
│ │ │ │ ├── address
│ │ │ │ │ └── addressForm
│ │ │ │ │ │ ├── AddressForm.jsx
│ │ │ │ │ │ ├── AddressFormLoadingSkeleton.jsx
│ │ │ │ │ │ ├── AddressFormLoadingSkeleton.scss
│ │ │ │ │ │ ├── Country.jsx
│ │ │ │ │ │ ├── Index.jsx
│ │ │ │ │ │ ├── NameAndTelephone.jsx
│ │ │ │ │ │ ├── Province.jsx
│ │ │ │ │ │ └── ProvinceAndPostcode.jsx
│ │ │ │ ├── checkout
│ │ │ │ │ └── Edit.jsx
│ │ │ │ └── detail
│ │ │ │ │ └── Order.jsx
│ │ │ │ ├── index.ts
│ │ │ │ ├── paypal
│ │ │ │ └── PaypalLogo.jsx
│ │ │ │ ├── stripe
│ │ │ │ ├── StripeLogo.jsx
│ │ │ │ └── checkout
│ │ │ │ │ ├── CheckoutForm.jsx
│ │ │ │ │ ├── CheckoutForm.scss
│ │ │ │ │ └── TestCards.jsx
│ │ │ │ └── widgets
│ │ │ │ ├── BasicMenu.jsx
│ │ │ │ ├── CollectionProducts.jsx
│ │ │ │ ├── TextBlock.jsx
│ │ │ │ └── index.tsx
│ │ ├── lib
│ │ │ ├── babel
│ │ │ │ ├── config.js
│ │ │ │ └── index.js
│ │ │ ├── bundlee.js
│ │ │ ├── componee
│ │ │ │ ├── getComponentsByRoute.js
│ │ │ │ ├── scanForComponents.js
│ │ │ │ └── tests
│ │ │ │ │ └── unit
│ │ │ │ │ ├── __mocks__
│ │ │ │ │ ├── extensions
│ │ │ │ │ │ ├── firstExtension
│ │ │ │ │ │ │ └── pages
│ │ │ │ │ │ │ │ └── frontStore
│ │ │ │ │ │ │ │ ├── all
│ │ │ │ │ │ │ │ ├── Banner.js
│ │ │ │ │ │ │ │ └── CommentList.js
│ │ │ │ │ │ │ │ └── productView
│ │ │ │ │ │ │ │ ├── Attribute.js
│ │ │ │ │ │ │ │ ├── Comment.js
│ │ │ │ │ │ │ │ ├── Name.js
│ │ │ │ │ │ │ │ └── Price.js
│ │ │ │ │ │ └── secondExtension
│ │ │ │ │ │ │ └── pages
│ │ │ │ │ │ │ └── frontStore
│ │ │ │ │ │ │ ├── all
│ │ │ │ │ │ │ └── CommentList.jsx
│ │ │ │ │ │ │ └── productView
│ │ │ │ │ │ │ ├── Comment.jsx
│ │ │ │ │ │ │ ├── Name.jsx
│ │ │ │ │ │ │ └── Review.jsx
│ │ │ │ │ ├── modules
│ │ │ │ │ │ ├── firstModule
│ │ │ │ │ │ │ └── pages
│ │ │ │ │ │ │ │ └── frontStore
│ │ │ │ │ │ │ │ ├── all
│ │ │ │ │ │ │ │ └── Menu.js
│ │ │ │ │ │ │ │ └── productView
│ │ │ │ │ │ │ │ ├── Name.js
│ │ │ │ │ │ │ │ └── Price.js
│ │ │ │ │ │ └── secondModule
│ │ │ │ │ │ │ └── pages
│ │ │ │ │ │ │ └── frontStore
│ │ │ │ │ │ │ ├── all
│ │ │ │ │ │ │ └── Banner.js
│ │ │ │ │ │ │ └── productView
│ │ │ │ │ │ │ ├── Description.js
│ │ │ │ │ │ │ ├── Inventory.js
│ │ │ │ │ │ │ └── Name.js
│ │ │ │ │ └── themes
│ │ │ │ │ │ └── justatheme
│ │ │ │ │ │ └── pages
│ │ │ │ │ │ ├── all
│ │ │ │ │ │ ├── CommentList.js
│ │ │ │ │ │ └── Shipping.js
│ │ │ │ │ │ └── productView
│ │ │ │ │ │ ├── Name.js
│ │ │ │ │ │ ├── OutOfStock.js
│ │ │ │ │ │ └── Price.js
│ │ │ │ │ └── scanRouteComponents.test.js
│ │ │ ├── event
│ │ │ │ ├── callSubscibers.js
│ │ │ │ ├── emitter.ts
│ │ │ │ ├── event-manager.js
│ │ │ │ └── loadSubscribers.js
│ │ │ ├── helpers.js
│ │ │ ├── index.ts
│ │ │ ├── locale
│ │ │ │ ├── countries.ts
│ │ │ │ ├── currencies.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── provinces.ts
│ │ │ │ ├── timezones.ts
│ │ │ │ └── translate
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── translate.ts
│ │ │ ├── log
│ │ │ │ ├── CustomColorize.js
│ │ │ │ └── logger.js
│ │ │ ├── middleware
│ │ │ │ ├── Handler.js
│ │ │ │ ├── addMiddleware.js
│ │ │ │ ├── buildMiddlewareFunction.js
│ │ │ │ ├── delegate.js
│ │ │ │ ├── eNext.js
│ │ │ │ ├── findDublicatedMiddleware.js
│ │ │ │ ├── getRouteFromPath.js
│ │ │ │ ├── index.js
│ │ │ │ ├── isErrorHandlerTriggered.js
│ │ │ │ ├── isNextRequired.js
│ │ │ │ ├── noDuplicateId.js
│ │ │ │ ├── parseFromFile.js
│ │ │ │ ├── scanForMiddlewareFunctions.js
│ │ │ │ ├── sort.js
│ │ │ │ └── tests
│ │ │ │ │ ├── app
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── modules
│ │ │ │ │ │ ├── 404page
│ │ │ │ │ │ └── pages
│ │ │ │ │ │ │ └── frontStore
│ │ │ │ │ │ │ └── product
│ │ │ │ │ │ │ ├── [loadProduct]loadCategory.js
│ │ │ │ │ │ │ ├── [loadProduct]loadProductImage.js
│ │ │ │ │ │ │ ├── loadProduct.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ └── api
│ │ │ │ │ │ │ ├── createA
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ │ └── global
│ │ │ │ │ │ │ └── apiGlobal.js
│ │ │ │ │ │ ├── authcopy
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── createA
│ │ │ │ │ │ │ │ └── [index]afterIndex.js
│ │ │ │ │ │ │ └── global
│ │ │ │ │ │ │ │ ├── [context]auth.js
│ │ │ │ │ │ │ │ └── apiAuthGlobal.js
│ │ │ │ │ │ └── pages
│ │ │ │ │ │ │ └── global
│ │ │ │ │ │ │ └── [context]auth.js
│ │ │ │ │ │ ├── basecopy
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ └── global
│ │ │ │ │ │ │ │ ├── [apiResponse]apiErrorHandler.js
│ │ │ │ │ │ │ │ ├── [auth]apiResponse[apiErrorHandler].js
│ │ │ │ │ │ │ │ ├── [auth]payloadValidate.js
│ │ │ │ │ │ │ │ ├── [payloadValidate]escapeHtml.js
│ │ │ │ │ │ │ │ └── context.js
│ │ │ │ │ │ └── pages
│ │ │ │ │ │ │ ├── admin
│ │ │ │ │ │ │ ├── adminStaticAsset
│ │ │ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ │ │ └── staticAssets.js
│ │ │ │ │ │ │ └── all
│ │ │ │ │ │ │ │ └── adminTitle.js
│ │ │ │ │ │ │ ├── frontStore
│ │ │ │ │ │ │ ├── all
│ │ │ │ │ │ │ │ └── title.js
│ │ │ │ │ │ │ ├── notFound
│ │ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ │ └── staticAsset
│ │ │ │ │ │ │ │ ├── [context]staticAssets[auth].js
│ │ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ │ └── global
│ │ │ │ │ │ │ ├── [auth]notFound[response].js
│ │ │ │ │ │ │ ├── [notFound]dummy[response].js
│ │ │ │ │ │ │ ├── [response]errorHandler.js
│ │ │ │ │ │ │ ├── context.js
│ │ │ │ │ │ │ └── response[errorHandler].js
│ │ │ │ │ │ ├── delegate
│ │ │ │ │ │ └── pages
│ │ │ │ │ │ │ └── frontStore
│ │ │ │ │ │ │ └── delegateTest
│ │ │ │ │ │ │ ├── asyncWithNext[collection].js
│ │ │ │ │ │ │ ├── async[collection].js
│ │ │ │ │ │ │ ├── collection.js
│ │ │ │ │ │ │ ├── returnOne[returnTwo].js
│ │ │ │ │ │ │ ├── returnThree[collection].js
│ │ │ │ │ │ │ ├── returnTwo[returnThree].js
│ │ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ │ ├── syncWithNext[collection].js
│ │ │ │ │ │ │ └── sync[collection].js
│ │ │ │ │ │ ├── error
│ │ │ │ │ │ └── pages
│ │ │ │ │ │ │ └── frontStore
│ │ │ │ │ │ │ └── errorHandlerTest
│ │ │ │ │ │ │ ├── errorInAsync.js
│ │ │ │ │ │ │ ├── errorInAsyncWithNext.js
│ │ │ │ │ │ │ ├── errorInSync.js
│ │ │ │ │ │ │ ├── errorInSyncWithNext.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── graphqlcopy
│ │ │ │ │ │ └── pages
│ │ │ │ │ │ │ └── global
│ │ │ │ │ │ │ ├── [bodyParser]buildQuery[graphql].js
│ │ │ │ │ │ │ ├── [buildQuery]graphql[notFound].js
│ │ │ │ │ │ │ └── bodyParser[buildQuery].js
│ │ │ │ │ │ └── handler
│ │ │ │ │ │ └── pages
│ │ │ │ │ │ ├── admin
│ │ │ │ │ │ └── productEdit
│ │ │ │ │ │ │ ├── [loadProduct]loadCategory.js
│ │ │ │ │ │ │ ├── [loadProduct]loadProductImage.js
│ │ │ │ │ │ │ ├── loadProduct.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ └── frontStore
│ │ │ │ │ │ └── middleware
│ │ │ │ │ │ ├── [loadAttribute]loadOptions.js
│ │ │ │ │ │ ├── [loadProductImage]loadAttribute.js
│ │ │ │ │ │ ├── [loadProduct]loadCategory.js
│ │ │ │ │ │ ├── [loadProduct]loadProductImage.js
│ │ │ │ │ │ ├── loadProduct.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ └── unit
│ │ │ │ │ ├── 404page.handling.test.js
│ │ │ │ │ ├── 500error.handling.test.js
│ │ │ │ │ ├── apiHandler.middleware.test.js
│ │ │ │ │ ├── delegate.test.js
│ │ │ │ │ ├── handler.getMiddlewaresByRoute.test.js
│ │ │ │ │ ├── handlers.middleware.test.js
│ │ │ │ │ ├── middleware.buildMiddlewareFunction.test.js
│ │ │ │ │ ├── middleware.getRouteFromPath.test.js
│ │ │ │ │ ├── middleware.noDublicateId.test.js
│ │ │ │ │ └── middleware.scanForMiddlewareFunctions.test.js
│ │ │ ├── middlewares
│ │ │ │ ├── bodyJson.js
│ │ │ │ ├── multerNone.js
│ │ │ │ ├── publicStatic.js
│ │ │ │ ├── static.js
│ │ │ │ └── themePublicStatic.js
│ │ │ ├── pathToRegexp.js
│ │ │ ├── postgres
│ │ │ │ └── connection.ts
│ │ │ ├── response
│ │ │ │ └── render.js
│ │ │ ├── router
│ │ │ │ ├── Router.js
│ │ │ │ ├── buildAbsoluteUrl.js
│ │ │ │ ├── buildUrl.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── loadModuleRoutes.js
│ │ │ │ ├── registerAdminRoute.js
│ │ │ │ ├── registerFrontStoreRoute.js
│ │ │ │ ├── scanForRoutes.js
│ │ │ │ ├── tests
│ │ │ │ │ └── unit
│ │ │ │ │ │ ├── a
│ │ │ │ │ │ ├── invalidMethod
│ │ │ │ │ │ │ └── routeOne
│ │ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ └── invalidPath
│ │ │ │ │ │ │ └── routeTwo
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── b
│ │ │ │ │ │ ├── routeOne
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── routeThree
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ └── routeTwo
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── unit.scanForRoutes.test.js
│ │ │ │ │ │ └── unit.validateRoute.test.js
│ │ │ │ └── validateRoute.js
│ │ │ ├── util
│ │ │ │ ├── assign.js
│ │ │ │ ├── buildFilterFromUrl.js
│ │ │ │ ├── camelCase.ts
│ │ │ │ ├── defaultPaginationFilters.js
│ │ │ │ ├── events.ts
│ │ │ │ ├── filterOperationMapp.ts
│ │ │ │ ├── formToJson.js
│ │ │ │ ├── get.ts
│ │ │ │ ├── getConfig.ts
│ │ │ │ ├── getEnabledWidgets.js
│ │ │ │ ├── getEnv.ts
│ │ │ │ ├── hookable.ts
│ │ │ │ ├── httpStatus.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── isAjax.ts
│ │ │ │ ├── isDevelopmentMode.ts
│ │ │ │ ├── isProductionMode.ts
│ │ │ │ ├── isResolvable.ts
│ │ │ │ ├── merge.js
│ │ │ │ ├── passwordHelper.js
│ │ │ │ ├── readCsvFile.js
│ │ │ │ ├── registry.ts
│ │ │ │ ├── tests
│ │ │ │ │ └── unit
│ │ │ │ │ │ ├── util.assign.test.js
│ │ │ │ │ │ ├── util.get.test.js
│ │ │ │ │ │ ├── util.getConfig.test.js
│ │ │ │ │ │ ├── util.hookable.test.js
│ │ │ │ │ │ ├── util.merge.test.js
│ │ │ │ │ │ └── util.registry.test.js
│ │ │ │ └── validateConfiguration.js
│ │ │ └── webpack
│ │ │ │ ├── createBaseConfig.js
│ │ │ │ ├── dev
│ │ │ │ └── createConfigClient.js
│ │ │ │ ├── getRouteBuildPath.js
│ │ │ │ ├── getRouteBuildSubPath.js
│ │ │ │ ├── isBuildRequired.js
│ │ │ │ ├── loaders
│ │ │ │ ├── AreaLoader.js
│ │ │ │ ├── GraphQLAPILoader.js
│ │ │ │ ├── GraphqlLoader.js
│ │ │ │ ├── LayoutLoader.js
│ │ │ │ ├── StyleLoader.js
│ │ │ │ ├── TailwindLoader.js
│ │ │ │ ├── TranslationLoader.js
│ │ │ │ └── loadTranslationFromCsv.ts
│ │ │ │ ├── plugins
│ │ │ │ ├── FileListPlugin.js
│ │ │ │ ├── GraphqlPlugin.js
│ │ │ │ └── Tailwindcss.js
│ │ │ │ ├── prod
│ │ │ │ ├── createConfigClient.js
│ │ │ │ └── createConfigServer.js
│ │ │ │ ├── resolveAlias.js
│ │ │ │ ├── tests
│ │ │ │ └── unit
│ │ │ │ │ ├── extensions
│ │ │ │ │ ├── extensionA
│ │ │ │ │ │ └── components
│ │ │ │ │ │ │ ├── a
│ │ │ │ │ │ │ ├── A.jsx
│ │ │ │ │ │ │ └── a.scss
│ │ │ │ │ │ │ ├── b
│ │ │ │ │ │ │ ├── B.jsx
│ │ │ │ │ │ │ ├── B.scss
│ │ │ │ │ │ │ └── bb
│ │ │ │ │ │ │ │ └── BB.jsx
│ │ │ │ │ │ │ └── d
│ │ │ │ │ │ │ ├── D.jsx
│ │ │ │ │ │ │ ├── D.scss
│ │ │ │ │ │ │ └── dd
│ │ │ │ │ │ │ └── DD.jsx
│ │ │ │ │ └── extensionB
│ │ │ │ │ │ └── components
│ │ │ │ │ │ ├── a
│ │ │ │ │ │ ├── A.jsx
│ │ │ │ │ │ └── a.scss
│ │ │ │ │ │ ├── d
│ │ │ │ │ │ ├── D.jsx
│ │ │ │ │ │ ├── D.scss
│ │ │ │ │ │ └── dd
│ │ │ │ │ │ │ └── DD.jsx
│ │ │ │ │ │ └── e
│ │ │ │ │ │ ├── E.jsx
│ │ │ │ │ │ ├── E.scss
│ │ │ │ │ │ └── ee
│ │ │ │ │ │ └── EE.jsx
│ │ │ │ │ ├── resolveAlias.test.js
│ │ │ │ │ └── theme
│ │ │ │ │ └── components
│ │ │ │ │ ├── a
│ │ │ │ │ ├── A.jsx
│ │ │ │ │ └── a.scss
│ │ │ │ │ └── b
│ │ │ │ │ ├── B.jsx
│ │ │ │ │ ├── B.scss
│ │ │ │ │ └── bb
│ │ │ │ │ └── BB.jsx
│ │ │ │ └── util
│ │ │ │ ├── getTailwindConfig.js
│ │ │ │ ├── keyGenerator.js
│ │ │ │ ├── parseGraphql.js
│ │ │ │ └── parseGraphqlByFile.js
│ │ ├── modules
│ │ │ ├── auth
│ │ │ │ ├── api
│ │ │ │ │ └── global
│ │ │ │ │ │ ├── [context]getCurrentUser.js
│ │ │ │ │ │ ├── [getCurrentUser]auth.js
│ │ │ │ │ │ └── [getCurrentUser]demoAccountBlocking[auth].js
│ │ │ │ ├── bootstrap.js
│ │ │ │ ├── graphql
│ │ │ │ │ └── types
│ │ │ │ │ │ └── AdminUser
│ │ │ │ │ │ ├── AdminUser.admin.graphql
│ │ │ │ │ │ └── AdminUser.admin.resolvers.js
│ │ │ │ ├── migration
│ │ │ │ │ ├── Version-1.0.0.js
│ │ │ │ │ └── Version-1.0.1.js
│ │ │ │ ├── pages
│ │ │ │ │ └── admin
│ │ │ │ │ │ ├── adminLogin
│ │ │ │ │ │ ├── LoginForm.jsx
│ │ │ │ │ │ ├── LoginForm.scss
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── adminLoginJson
│ │ │ │ │ │ ├── [bodyParser]logIn.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── adminLogoutJson
│ │ │ │ │ │ ├── logout.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ └── all
│ │ │ │ │ │ ├── AdminUser.jsx
│ │ │ │ │ │ ├── AdminUser.scss
│ │ │ │ │ │ └── [context]auth.js
│ │ │ │ └── services
│ │ │ │ │ ├── getAdminSessionCookieName.js
│ │ │ │ │ ├── getCookieSecret.js
│ │ │ │ │ ├── getFrontStoreSessionCookieName.js
│ │ │ │ │ ├── getSessionConfig.js
│ │ │ │ │ ├── loginUserWithEmail.js
│ │ │ │ │ └── logoutUser.js
│ │ │ ├── base
│ │ │ │ ├── api
│ │ │ │ │ └── global
│ │ │ │ │ │ ├── [apiResponse]apiErrorHandler.js
│ │ │ │ │ │ ├── [auth]apiResponse[apiErrorHandler].js
│ │ │ │ │ │ ├── [auth]payloadValidate.js
│ │ │ │ │ │ ├── [payloadValidate]escapeHtml.js
│ │ │ │ │ │ └── context.js
│ │ │ │ ├── bootstrap.js
│ │ │ │ ├── graphql
│ │ │ │ │ └── types
│ │ │ │ │ │ ├── Country
│ │ │ │ │ │ ├── Country.graphql
│ │ │ │ │ │ └── Country.resolvers.js
│ │ │ │ │ │ ├── Currency
│ │ │ │ │ │ ├── Currency.graphql
│ │ │ │ │ │ └── Currency.resolvers.js
│ │ │ │ │ │ ├── DateTime
│ │ │ │ │ │ ├── DateTime.graphql
│ │ │ │ │ │ └── DateTime.resolvers.js
│ │ │ │ │ │ ├── Province
│ │ │ │ │ │ ├── Province.graphql
│ │ │ │ │ │ └── Province.resolvers.js
│ │ │ │ │ │ ├── Route
│ │ │ │ │ │ ├── Route.admin.graphql
│ │ │ │ │ │ └── Route.admin.resolvers.js
│ │ │ │ │ │ ├── Timezone
│ │ │ │ │ │ ├── Timezone.graphql
│ │ │ │ │ │ └── Timezone.resolvers.js
│ │ │ │ │ │ ├── Url
│ │ │ │ │ │ ├── Url.graphql
│ │ │ │ │ │ └── Url.resolvers.js
│ │ │ │ │ │ └── Version
│ │ │ │ │ │ ├── Version.graphql
│ │ │ │ │ │ └── Version.resolvers.js
│ │ │ │ ├── migration
│ │ │ │ │ └── Version-1.0.1.js
│ │ │ │ ├── pages
│ │ │ │ │ ├── admin
│ │ │ │ │ │ └── all
│ │ │ │ │ │ │ └── [context]isAdmin[auth].js
│ │ │ │ │ └── global
│ │ │ │ │ │ ├── [auth]notFound[response].js
│ │ │ │ │ │ ├── [response]errorHandler.js
│ │ │ │ │ │ ├── context.js
│ │ │ │ │ │ └── response[errorHandler].js
│ │ │ │ └── services
│ │ │ │ │ ├── escapePayload.js
│ │ │ │ │ ├── getAjv.js
│ │ │ │ │ ├── markSkipEscape.js
│ │ │ │ │ ├── notifications.js
│ │ │ │ │ └── secret.js
│ │ │ ├── catalog
│ │ │ │ ├── api
│ │ │ │ │ ├── addProductToCategory
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── addProducts.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── addProductToCollection
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── addProducts.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── addVariantItem
│ │ │ │ │ │ ├── [bodyParser]addItem.js
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── createAttribute
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── createAttribute[finish].js
│ │ │ │ │ │ ├── finish[apiResponse].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── createAttributeGroup
│ │ │ │ │ │ ├── [bodyParser]saveGroup.js
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── createCategory
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── createCategory[finish].js
│ │ │ │ │ │ ├── finish[apiResponse].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── createCollection
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── createCollection[finish].js
│ │ │ │ │ │ ├── finish[apiResponse].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── createProduct
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── createProduct[finish].js
│ │ │ │ │ │ ├── finish[apiResponse].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── createVariantGroup
│ │ │ │ │ │ ├── [bodyParser]saveGroup.js
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── deleteAttribute
│ │ │ │ │ │ ├── deleteAttribute.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── deleteAttributeGroup
│ │ │ │ │ │ ├── deleteAttributeGroup.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── deleteCategory
│ │ │ │ │ │ ├── deleteCategory.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── deleteCollection
│ │ │ │ │ │ ├── deleteCollection.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── deleteProduct
│ │ │ │ │ │ ├── deleteProduct.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── removeProductFromCategory
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── removeProducts.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── removeProductFromCollection
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── removeProducts.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── unlinkVariant
│ │ │ │ │ │ ├── [context]multerNone[auth].js
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── unlinkVariants.js
│ │ │ │ │ ├── updateAttribute
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── finish[apiResponse].js
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── updateAttribute[finish].js
│ │ │ │ │ ├── updateAttributeGroup
│ │ │ │ │ │ ├── [bodyParser]saveGroup.js
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── updateCategory
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── finish[apiResponse].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── updateCategory[finish].js
│ │ │ │ │ ├── updateCollection
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── finish[apiResponse].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── updateCollection[finish].js
│ │ │ │ │ ├── updateProduct
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── finish[apiResponse].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── updateProduct[finish].js
│ │ │ │ │ └── variantSearch
│ │ │ │ │ │ ├── loadVariants.js
│ │ │ │ │ │ └── route.json
│ │ │ │ ├── bootstrap.js
│ │ │ │ ├── graphql
│ │ │ │ │ └── types
│ │ │ │ │ │ ├── Attribute
│ │ │ │ │ │ ├── Attribute.admin.graphql
│ │ │ │ │ │ ├── Attribute.admin.resolvers.js
│ │ │ │ │ │ ├── Attribute.graphql
│ │ │ │ │ │ └── Attribute.resolvers.js
│ │ │ │ │ │ ├── Category
│ │ │ │ │ │ ├── Category.admin.graphql
│ │ │ │ │ │ ├── Category.admin.resolvers.js
│ │ │ │ │ │ ├── Category.graphql
│ │ │ │ │ │ └── Category.resolvers.js
│ │ │ │ │ │ ├── Collection
│ │ │ │ │ │ ├── Collection.admin.graphql
│ │ │ │ │ │ ├── Collection.admin.resolvers.js
│ │ │ │ │ │ ├── Collection.graphql
│ │ │ │ │ │ └── Collection.resolvers.js
│ │ │ │ │ │ ├── FeaturedProduct
│ │ │ │ │ │ ├── FeaturedProduct.graphql
│ │ │ │ │ │ └── FeaturedProduct.resolvers.js
│ │ │ │ │ │ ├── Product
│ │ │ │ │ │ ├── Attribute
│ │ │ │ │ │ │ ├── ProductAttribute.graphql
│ │ │ │ │ │ │ └── ProductAttribute.resolvers.js
│ │ │ │ │ │ ├── CustomOption
│ │ │ │ │ │ │ ├── CustomOption.graphql
│ │ │ │ │ │ │ └── CustomOption.resolvers.js
│ │ │ │ │ │ ├── Image
│ │ │ │ │ │ │ ├── ProductImage.graphql
│ │ │ │ │ │ │ └── ProductImage.resolvers.js
│ │ │ │ │ │ ├── Inventory
│ │ │ │ │ │ │ ├── Inventory.admin.graphql
│ │ │ │ │ │ │ ├── Inventory.admin.resolvers.js
│ │ │ │ │ │ │ ├── Inventory.graphql
│ │ │ │ │ │ │ └── Inventory.resolvers.js
│ │ │ │ │ │ ├── Price
│ │ │ │ │ │ │ ├── ProductPrice.graphql
│ │ │ │ │ │ │ └── ProductPrice.resolvers.js
│ │ │ │ │ │ ├── Product.admin.graphql
│ │ │ │ │ │ ├── Product.admin.resolvers.js
│ │ │ │ │ │ ├── Product.graphql
│ │ │ │ │ │ ├── Product.resolvers.js
│ │ │ │ │ │ └── Variant
│ │ │ │ │ │ │ ├── Variant.graphql
│ │ │ │ │ │ │ └── Variant.resolvers.js
│ │ │ │ │ │ └── Widget
│ │ │ │ │ │ └── CollectionProductsWidget
│ │ │ │ │ │ ├── CollectionProductsWidget.graphql
│ │ │ │ │ │ └── CollectionProductsWidget.resolvers.js
│ │ │ │ ├── migration
│ │ │ │ │ ├── Version-1.0.0.js
│ │ │ │ │ ├── Version-1.0.1.js
│ │ │ │ │ ├── Version-1.0.2.js
│ │ │ │ │ ├── Version-1.0.3.js
│ │ │ │ │ ├── Version-1.0.4.js
│ │ │ │ │ ├── Version-1.0.5.js
│ │ │ │ │ ├── Version-1.0.6.js
│ │ │ │ │ └── Version-1.0.7.js
│ │ │ │ ├── pages
│ │ │ │ │ ├── admin
│ │ │ │ │ │ ├── all
│ │ │ │ │ │ │ ├── CatalogMenuGroup.jsx
│ │ │ │ │ │ │ └── NewProductQuickLink.jsx
│ │ │ │ │ │ ├── attributeEdit+attributeNew
│ │ │ │ │ │ │ ├── Avaibility.jsx
│ │ │ │ │ │ │ ├── FormContent.jsx
│ │ │ │ │ │ │ ├── FormContent.scss
│ │ │ │ │ │ │ ├── General.jsx
│ │ │ │ │ │ │ └── PageHeading.jsx
│ │ │ │ │ │ ├── attributeEdit
│ │ │ │ │ │ │ ├── AttributeEditForm.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── attributeGrid
│ │ │ │ │ │ │ ├── Grid.jsx
│ │ │ │ │ │ │ ├── Heading.jsx
│ │ │ │ │ │ │ ├── NewAttributeButton.jsx
│ │ │ │ │ │ │ ├── TypeRow.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── attributeNew
│ │ │ │ │ │ │ ├── AttributeNewForm.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── categoryEdit+categoryNew
│ │ │ │ │ │ │ ├── FormContent.jsx
│ │ │ │ │ │ │ ├── FormContent.scss
│ │ │ │ │ │ │ ├── General.jsx
│ │ │ │ │ │ │ ├── Image.jsx
│ │ │ │ │ │ │ ├── Image.scss
│ │ │ │ │ │ │ ├── PageHeading.jsx
│ │ │ │ │ │ │ ├── Seo.jsx
│ │ │ │ │ │ │ └── Status.jsx
│ │ │ │ │ │ ├── categoryEdit
│ │ │ │ │ │ │ ├── CategoryEditForm.jsx
│ │ │ │ │ │ │ ├── Products.jsx
│ │ │ │ │ │ │ ├── Products.scss
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── categoryGrid
│ │ │ │ │ │ │ ├── Grid.jsx
│ │ │ │ │ │ │ ├── Heading.jsx
│ │ │ │ │ │ │ ├── NameRow.jsx
│ │ │ │ │ │ │ ├── NewCategoryButton.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── categoryNew
│ │ │ │ │ │ │ ├── CategoryNewForm.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── collectionEdit+collectionNew
│ │ │ │ │ │ │ ├── FormContent.jsx
│ │ │ │ │ │ │ ├── FormContent.scss
│ │ │ │ │ │ │ ├── General.jsx
│ │ │ │ │ │ │ └── PageHeading.jsx
│ │ │ │ │ │ ├── collectionEdit
│ │ │ │ │ │ │ ├── CollectionEditForm.jsx
│ │ │ │ │ │ │ ├── Products.jsx
│ │ │ │ │ │ │ ├── Products.scss
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── collectionGrid
│ │ │ │ │ │ │ ├── Grid.jsx
│ │ │ │ │ │ │ ├── Heading.jsx
│ │ │ │ │ │ │ ├── NameRow.jsx
│ │ │ │ │ │ │ ├── NewCollectionButton.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── collectionNew
│ │ │ │ │ │ │ ├── CollectionNewForm.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── productEdit+productNew
│ │ │ │ │ │ │ ├── Attributes.jsx
│ │ │ │ │ │ │ ├── CustomOptions.jsss
│ │ │ │ │ │ │ ├── FormContent.jsx
│ │ │ │ │ │ │ ├── FormContent.scss
│ │ │ │ │ │ │ ├── General.jsx
│ │ │ │ │ │ │ ├── Inventory.jsx
│ │ │ │ │ │ │ ├── Media.jsx
│ │ │ │ │ │ │ ├── PageHeading.jsx
│ │ │ │ │ │ │ ├── Seo.jsx
│ │ │ │ │ │ │ └── Status.jsx
│ │ │ │ │ │ ├── productEdit
│ │ │ │ │ │ │ ├── Collection.jsx
│ │ │ │ │ │ │ ├── ProductEditForm.jsx
│ │ │ │ │ │ │ ├── VariantGroup.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── productGrid
│ │ │ │ │ │ │ ├── Grid.jsx
│ │ │ │ │ │ │ ├── Heading.jsx
│ │ │ │ │ │ │ ├── NewProductButton.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ └── productNew
│ │ │ │ │ │ │ ├── ProductNewForm.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ └── frontStore
│ │ │ │ │ │ ├── all
│ │ │ │ │ │ ├── SearchBox.jsx
│ │ │ │ │ │ └── SearchBox.scss
│ │ │ │ │ │ ├── catalogSearch
│ │ │ │ │ │ ├── General.jsx
│ │ │ │ │ │ ├── General.scss
│ │ │ │ │ │ ├── Pagination.jsx
│ │ │ │ │ │ ├── Products.jsx
│ │ │ │ │ │ ├── SearchPage.jsx
│ │ │ │ │ │ ├── Sorting.jsx
│ │ │ │ │ │ ├── [index]filters.js
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── categoryView
│ │ │ │ │ │ ├── CategoryView.jsx
│ │ │ │ │ │ ├── Filter.jsx
│ │ │ │ │ │ ├── Filter.scss
│ │ │ │ │ │ ├── General.jsx
│ │ │ │ │ │ ├── General.scss
│ │ │ │ │ │ ├── Pagination.jsx
│ │ │ │ │ │ ├── Products.jsx
│ │ │ │ │ │ ├── Sorting.jsx
│ │ │ │ │ │ ├── [index]filters.js
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ └── productView
│ │ │ │ │ │ ├── Attributes.jsx
│ │ │ │ │ │ ├── Description.jsx
│ │ │ │ │ │ ├── Form.jsx
│ │ │ │ │ │ ├── Form.scss
│ │ │ │ │ │ ├── GeneralInfo.jsx
│ │ │ │ │ │ ├── GeneralInfo.scss
│ │ │ │ │ │ ├── Images.jsx
│ │ │ │ │ │ ├── Layout.jsx
│ │ │ │ │ │ ├── Options.jsx
│ │ │ │ │ │ ├── Variants.jsx
│ │ │ │ │ │ ├── Variants.scss
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ ├── services
│ │ │ │ │ ├── AttributeCollection.js
│ │ │ │ │ ├── AttributeGroupCollection.js
│ │ │ │ │ ├── CategoryCollection.js
│ │ │ │ │ ├── CollectionCollection.js
│ │ │ │ │ ├── ProductCollection.js
│ │ │ │ │ ├── attribute
│ │ │ │ │ │ ├── attributeDataSchema.json
│ │ │ │ │ │ ├── createProductAttribute.ts
│ │ │ │ │ │ ├── deleteProductAttribute.ts
│ │ │ │ │ │ └── updateProductAttribute.ts
│ │ │ │ │ ├── category
│ │ │ │ │ │ ├── categoryDataSchema.json
│ │ │ │ │ │ ├── createCategory.ts
│ │ │ │ │ │ ├── deleteCategory.ts
│ │ │ │ │ │ └── updateCategory.ts
│ │ │ │ │ ├── collection
│ │ │ │ │ │ ├── collectionDataSchema.json
│ │ │ │ │ │ ├── createCollection.ts
│ │ │ │ │ │ ├── deleteCollection.ts
│ │ │ │ │ │ └── updateCollection.ts
│ │ │ │ │ ├── getAttributeGroupsBaseQuery.js
│ │ │ │ │ ├── getAttributesBaseQuery.js
│ │ │ │ │ ├── getCategoriesBaseQuery.ts
│ │ │ │ │ ├── getCollectionsBaseQuery.ts
│ │ │ │ │ ├── getFilterableAttributes.js
│ │ │ │ │ ├── getProductsBaseQuery.ts
│ │ │ │ │ ├── getProductsByCategoryBaseQuery.ts
│ │ │ │ │ ├── getProductsByCollectionBaseQuery.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── product
│ │ │ │ │ │ ├── createProduct.ts
│ │ │ │ │ │ ├── deleteProduct.ts
│ │ │ │ │ │ ├── productDataSchema.json
│ │ │ │ │ │ └── updateProduct.ts
│ │ │ │ │ ├── registerCartItemProductUrlField.js
│ │ │ │ │ ├── registerCartItemVariantOptionsField.js
│ │ │ │ │ ├── registerDefaultAttributeCollectionFilters.js
│ │ │ │ │ ├── registerDefaultCategoryCollectionFilters.js
│ │ │ │ │ ├── registerDefaultCollectionCollectionFilters.js
│ │ │ │ │ └── registerDefaultProductCollectionFilters.js
│ │ │ │ ├── subscribers
│ │ │ │ │ ├── category_created
│ │ │ │ │ │ └── buildUrlRewrite.js
│ │ │ │ │ ├── category_deleted
│ │ │ │ │ │ └── deleteUrlRewrite.js
│ │ │ │ │ ├── category_updated
│ │ │ │ │ │ └── builUrlRewrite.js
│ │ │ │ │ ├── product_created
│ │ │ │ │ │ └── builUrlRewrite.js
│ │ │ │ │ ├── product_deleted
│ │ │ │ │ │ └── deleteUrlRewrite.js
│ │ │ │ │ ├── product_image_added
│ │ │ │ │ │ └── localGenerateProductImageVariant.js
│ │ │ │ │ └── product_updated
│ │ │ │ │ │ └── buildUrlRewrite.js
│ │ │ │ └── tests
│ │ │ │ │ └── intergration
│ │ │ │ │ └── productView.test.js
│ │ │ ├── checkout
│ │ │ │ ├── api
│ │ │ │ │ ├── addCartAddress
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── saveAddress.js
│ │ │ │ │ ├── addCartContactInfo
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── saveContactInfo.js
│ │ │ │ │ ├── addCartItem
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── addItemToCart.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── addCartPaymentMethod
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── savePaymentMethod.js
│ │ │ │ │ ├── addCartShippingMethod
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── saveShippingMethod.js
│ │ │ │ │ ├── addMineCartItem
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── [detectCurrentCart]addItemToCart.js
│ │ │ │ │ │ ├── [getCurrentCustomer]detectCurrentCart.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── addShippingNote
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── saveShippingNote.js
│ │ │ │ │ ├── addShippingZoneMethod
│ │ │ │ │ │ ├── [context]borderParser[auth].js
│ │ │ │ │ │ ├── [validateMethod]addShippingZoneMethod.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── validateMethod.js
│ │ │ │ │ ├── createCart
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── createNewCart.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── createOrder
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── placeOrder.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── createShippingMethod
│ │ │ │ │ │ ├── [context]borderParser[auth].js
│ │ │ │ │ │ ├── createShippingMethod.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── createShippingZone
│ │ │ │ │ │ ├── [context]borderParser[auth].js
│ │ │ │ │ │ ├── createShippingZone.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── deleteShippingZone
│ │ │ │ │ │ ├── deleteShippingZone.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── deleteShippingZoneMethod
│ │ │ │ │ │ ├── deleteShippingZoneMethod.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── getPaymentMethods
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── sendMethods.js
│ │ │ │ │ ├── getShippingMethods
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── sendMethods.js
│ │ │ │ │ ├── removeCartItem
│ │ │ │ │ │ ├── removeItem.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── removeMineCartItem
│ │ │ │ │ │ ├── [detectCurrentCart]removeItem.js
│ │ │ │ │ │ ├── [getCurrentCustomer]detectCurrentCart.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── updateCartItemQty
│ │ │ │ │ │ ├── [bodyParser]updateQty.js
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── updateMineCartItemQty
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── [detectCurrentCart]updateQty.js
│ │ │ │ │ │ ├── [getCurrentCustomer]detectCurrentCart.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── updateShippingMethod
│ │ │ │ │ │ ├── [context]borderParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── updateShippingMethod.js
│ │ │ │ │ ├── updateShippingZone
│ │ │ │ │ │ ├── [context]borderParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── updateShippingZone.js
│ │ │ │ │ └── updateShippingZoneMethod
│ │ │ │ │ │ ├── [context]borderParser[auth].js
│ │ │ │ │ │ ├── [validateMethod]updateShippingZoneMethod.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── validateMethod.js
│ │ │ │ ├── bootstrap.js
│ │ │ │ ├── graphql
│ │ │ │ │ └── types
│ │ │ │ │ │ ├── Cart
│ │ │ │ │ │ ├── Cart.graphql
│ │ │ │ │ │ └── Cart.resolvers.js
│ │ │ │ │ │ ├── Checkout
│ │ │ │ │ │ ├── Checkout.graphql
│ │ │ │ │ │ └── Checkout.resolvers.js
│ │ │ │ │ │ ├── CheckoutSetting
│ │ │ │ │ │ ├── CheckoutSetting.graphql
│ │ │ │ │ │ └── CheckoutSetting.resolvers.js
│ │ │ │ │ │ ├── Date
│ │ │ │ │ │ ├── Date.graphql
│ │ │ │ │ │ └── Date.resolvers.js
│ │ │ │ │ │ ├── Price
│ │ │ │ │ │ ├── Price.graphql
│ │ │ │ │ │ └── Price.resolvers.js
│ │ │ │ │ │ ├── ShippingMethod
│ │ │ │ │ │ ├── ShippingMethod.graphql
│ │ │ │ │ │ └── ShippingMethod.resolvers.js
│ │ │ │ │ │ ├── ShippingZone
│ │ │ │ │ │ ├── ShippingZone.graphql
│ │ │ │ │ │ └── ShippingZone.resolvers.js
│ │ │ │ │ │ └── Weight
│ │ │ │ │ │ ├── Weight.graphql
│ │ │ │ │ │ └── Weight.resolvers.js
│ │ │ │ ├── migration
│ │ │ │ │ ├── Version-1.0.0.js
│ │ │ │ │ ├── Version-1.0.1.js
│ │ │ │ │ ├── Version-1.0.2.js
│ │ │ │ │ ├── Version-1.0.3.js
│ │ │ │ │ ├── Version-1.0.4.js
│ │ │ │ │ ├── Version-1.0.5.js
│ │ │ │ │ └── Version-1.0.6.js
│ │ │ │ ├── pages
│ │ │ │ │ ├── admin
│ │ │ │ │ │ ├── all
│ │ │ │ │ │ │ └── ShippingSettingMenu.jsx
│ │ │ │ │ │ └── shippingSetting
│ │ │ │ │ │ │ ├── ShippingSetting.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ └── frontStore
│ │ │ │ │ │ ├── all
│ │ │ │ │ │ ├── MiniCart.jsx
│ │ │ │ │ │ ├── MiniCart.scss
│ │ │ │ │ │ ├── [auth]addCustomerToCart.js
│ │ │ │ │ │ └── [context]detectCurrentCart[auth].js
│ │ │ │ │ │ ├── cart
│ │ │ │ │ │ ├── ShoppingCart.jsx
│ │ │ │ │ │ ├── Summary.jsx
│ │ │ │ │ │ ├── Summary.scss
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── checkout
│ │ │ │ │ │ ├── Checkout.jsx
│ │ │ │ │ │ ├── Checkout.scss
│ │ │ │ │ │ ├── PaymentMethods.jsx
│ │ │ │ │ │ ├── PaymentStep.jsx
│ │ │ │ │ │ ├── ShipmentStep.jsx
│ │ │ │ │ │ ├── ShippingMethods.jsx
│ │ │ │ │ │ ├── ShippingNote.jsx
│ │ │ │ │ │ ├── Summary.jsx
│ │ │ │ │ │ ├── Summary.scss
│ │ │ │ │ │ ├── SummaryMobile.jsx
│ │ │ │ │ │ ├── SummaryMobile.scss
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ └── checkoutSuccess
│ │ │ │ │ │ ├── CheckoutSuccess.jsx
│ │ │ │ │ │ ├── CheckoutSuccess.scss
│ │ │ │ │ │ ├── CustomerInfo.jsx
│ │ │ │ │ │ ├── ShippingNote.jsx
│ │ │ │ │ │ ├── Summary.jsx
│ │ │ │ │ │ ├── Summary.scss
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ ├── services
│ │ │ │ │ ├── addCartItem.js
│ │ │ │ │ ├── cart
│ │ │ │ │ │ ├── Cart.js
│ │ │ │ │ │ ├── DataObject.js
│ │ │ │ │ │ ├── registerCartBaseFields.js
│ │ │ │ │ │ ├── registerCartItemBaseFields.js
│ │ │ │ │ │ └── sortFields.js
│ │ │ │ │ ├── createNewCart.js
│ │ │ │ │ ├── getCartById.js
│ │ │ │ │ ├── getCartByUUID.js
│ │ │ │ │ ├── getCurrentCart.js
│ │ │ │ │ ├── orderCreator.js
│ │ │ │ │ ├── removeCartItem.js
│ │ │ │ │ ├── saveCart.js
│ │ │ │ │ ├── toPrice.js
│ │ │ │ │ └── updateCartItemQty.js
│ │ │ │ └── tests
│ │ │ │ │ ├── basicSetup.js
│ │ │ │ │ ├── coupons.js
│ │ │ │ │ ├── products.js
│ │ │ │ │ ├── taxRates.js
│ │ │ │ │ └── unit
│ │ │ │ │ ├── addItemSideEffect.test.js
│ │ │ │ │ ├── discountAmount.test.js
│ │ │ │ │ ├── grandTotal.test.js
│ │ │ │ │ ├── lineTotal.test.js
│ │ │ │ │ ├── lineTotalWithDiscount.test.js
│ │ │ │ │ ├── productPrice.test.js
│ │ │ │ │ ├── removeItemSideEffect.test.js
│ │ │ │ │ ├── subTotal.test.js
│ │ │ │ │ ├── subTotalWithDiscount.test.js
│ │ │ │ │ ├── taxAmount.test.js
│ │ │ │ │ ├── taxAmountRounding.test.js
│ │ │ │ │ └── updateCartItemQtySideEffect.test.js
│ │ │ ├── cms
│ │ │ │ ├── api
│ │ │ │ │ ├── createCmsPage
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── createPage[finish].js
│ │ │ │ │ │ ├── finish[apiResponse].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── createWidget
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── createWidget[finish].js
│ │ │ │ │ │ ├── finish[apiResponse].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── deleteCmsPage
│ │ │ │ │ │ ├── deleteCmsPage.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── deleteWidget
│ │ │ │ │ │ ├── deleteWidget.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── fileBrowser
│ │ │ │ │ │ ├── [context]validatePath[auth].js
│ │ │ │ │ │ ├── browFiles.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── fileDelete
│ │ │ │ │ │ ├── [context]validatePath[auth].js
│ │ │ │ │ │ ├── deleteFile.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── fileUpload
│ │ │ │ │ │ ├── [context]multerFile[auth].js
│ │ │ │ │ │ ├── [context]validatePath[multerFile].js
│ │ │ │ │ │ ├── [multerFile]upload.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── folderCreate
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── [context]validatePath[auth].js
│ │ │ │ │ │ ├── createFolder.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── imageUpload
│ │ │ │ │ │ ├── [context]multerFile[auth].js
│ │ │ │ │ │ ├── [context]validatePath[multerFile].js
│ │ │ │ │ │ ├── [multerFile]upload.js
│ │ │ │ │ │ ├── [multerFile]verifyImages[upload].js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── updateCmsPage
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── finish[apiResponse].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── updatePage[finish].js
│ │ │ │ │ └── updateWidget
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── finish[apiResponse].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── updateWidget[finish].js
│ │ │ │ ├── bootstrap.js
│ │ │ │ ├── graphql
│ │ │ │ │ └── types
│ │ │ │ │ │ ├── CmsPage
│ │ │ │ │ │ ├── CmsPage.graphql
│ │ │ │ │ │ └── CmsPage.resolvers.js
│ │ │ │ │ │ ├── Menu
│ │ │ │ │ │ ├── Menu.graphql
│ │ │ │ │ │ └── Menu.resolvers.js
│ │ │ │ │ │ ├── PageInfo
│ │ │ │ │ │ ├── PageInfo.graphql
│ │ │ │ │ │ └── PageInfo.resolvers.js
│ │ │ │ │ │ ├── ThemeConfig
│ │ │ │ │ │ ├── ThemeConfig.graphql
│ │ │ │ │ │ └── ThemeConfig.resolvers.js
│ │ │ │ │ │ └── Widget
│ │ │ │ │ │ ├── Widget.graphql
│ │ │ │ │ │ └── Widget.resolvers.js
│ │ │ │ ├── migration
│ │ │ │ │ ├── Version-1.0.0.js
│ │ │ │ │ ├── Version-1.1.0.js
│ │ │ │ │ └── Version-1.1.1.js
│ │ │ │ ├── pages
│ │ │ │ │ ├── admin
│ │ │ │ │ │ ├── adminNotFound
│ │ │ │ │ │ │ ├── Meta.jsx
│ │ │ │ │ │ │ ├── NotFound.jsx
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── adminStaticAsset
│ │ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ │ └── staticAssets.js
│ │ │ │ │ │ ├── all
│ │ │ │ │ │ │ ├── CmsMenuGroup.jsx
│ │ │ │ │ │ │ ├── CopyRight.jsx
│ │ │ │ │ │ │ ├── Layout.jsx
│ │ │ │ │ │ │ ├── Layout.scss
│ │ │ │ │ │ │ ├── Logo.jsx
│ │ │ │ │ │ │ ├── Logo.scss
│ │ │ │ │ │ │ ├── Meta.jsx
│ │ │ │ │ │ │ ├── Navigation.jsx
│ │ │ │ │ │ │ ├── Navigation.scss
│ │ │ │ │ │ │ ├── Notification.jsx
│ │ │ │ │ │ │ ├── Notification.scss
│ │ │ │ │ │ │ ├── QuickLinks.jsx
│ │ │ │ │ │ │ ├── SearchBox.jsx
│ │ │ │ │ │ │ ├── SearchBox.scss
│ │ │ │ │ │ │ ├── Version.jsx
│ │ │ │ │ │ │ ├── search
│ │ │ │ │ │ │ │ ├── NoResult.jsx
│ │ │ │ │ │ │ │ └── Results.jsx
│ │ │ │ │ │ │ └── tailwind.scss
│ │ │ │ │ │ ├── cmsPageEdit+cmsPageNew
│ │ │ │ │ │ │ ├── FormContent.jsx
│ │ │ │ │ │ │ ├── FormContent.scss
│ │ │ │ │ │ │ ├── General.jsx
│ │ │ │ │ │ │ ├── PageHeading.jsx
│ │ │ │ │ │ │ ├── Seo.jsx
│ │ │ │ │ │ │ └── Status.jsx
│ │ │ │ │ │ ├── cmsPageEdit
│ │ │ │ │ │ │ ├── PageEditForm.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── cmsPageGrid
│ │ │ │ │ │ │ ├── Grid.jsx
│ │ │ │ │ │ │ ├── Heading.jsx
│ │ │ │ │ │ │ ├── NewPageButton.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── cmsPageNew
│ │ │ │ │ │ │ ├── PageNewForm.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── dashboard
│ │ │ │ │ │ │ ├── Layout.jsx
│ │ │ │ │ │ │ ├── Layout.scss
│ │ │ │ │ │ │ ├── PageHeading.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── widgetEdit+widgetNew
│ │ │ │ │ │ │ ├── FormContent.jsx
│ │ │ │ │ │ │ ├── FormContent.scss
│ │ │ │ │ │ │ ├── General.jsx
│ │ │ │ │ │ │ ├── PageHeading.jsx
│ │ │ │ │ │ │ └── Setting.jsx
│ │ │ │ │ │ ├── widgetEdit
│ │ │ │ │ │ │ ├── WidgetForm.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── widgetGrid
│ │ │ │ │ │ │ ├── Grid.jsx
│ │ │ │ │ │ │ ├── Heading.jsx
│ │ │ │ │ │ │ ├── NewWidgetButton.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ └── widgetNew
│ │ │ │ │ │ │ ├── WidgetNewForm.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ │ └── typeValidate.js
│ │ │ │ │ └── frontStore
│ │ │ │ │ │ ├── all
│ │ │ │ │ │ ├── Breadcrumb.jsx
│ │ │ │ │ │ ├── Footer.jsx
│ │ │ │ │ │ ├── HeadTags.jsx
│ │ │ │ │ │ ├── Layout.jsx
│ │ │ │ │ │ ├── Layout.scss
│ │ │ │ │ │ ├── Logo.jsx
│ │ │ │ │ │ ├── Logo.scss
│ │ │ │ │ │ ├── Notification.jsx
│ │ │ │ │ │ ├── Notification.scss
│ │ │ │ │ │ └── tailwind.scss
│ │ │ │ │ │ ├── cmsPageView
│ │ │ │ │ │ ├── Layout.jsx
│ │ │ │ │ │ ├── Layout.scss
│ │ │ │ │ │ ├── View.jsx
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── homepage
│ │ │ │ │ │ ├── meta.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── notFound
│ │ │ │ │ │ ├── Meta.jsx
│ │ │ │ │ │ ├── NotFound.jsx
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ └── staticAsset
│ │ │ │ │ │ ├── [context]staticAssets[auth].js
│ │ │ │ │ │ └── route.json
│ │ │ │ └── services
│ │ │ │ │ ├── CMSPageCollection.js
│ │ │ │ │ ├── CustomMemoryStorage.js
│ │ │ │ │ ├── WidgetCollection.js
│ │ │ │ │ ├── browFiles.js
│ │ │ │ │ ├── createFolder.js
│ │ │ │ │ ├── deleteFile.js
│ │ │ │ │ ├── generateFileName.js
│ │ │ │ │ ├── getCmsPagesBaseQuery.js
│ │ │ │ │ ├── getMulter.js
│ │ │ │ │ ├── getWidgetsBaseQuery.js
│ │ │ │ │ ├── page
│ │ │ │ │ ├── createPage.js
│ │ │ │ │ ├── deletePage.js
│ │ │ │ │ ├── pageDataSchema.json
│ │ │ │ │ └── updatePage.js
│ │ │ │ │ ├── registerDefaultPageCollectionFilters.js
│ │ │ │ │ ├── registerDefaultWidgetCollectionFilters.js
│ │ │ │ │ ├── tailwind.admin.config.js
│ │ │ │ │ ├── tailwind.frontStore.config.js
│ │ │ │ │ ├── tests
│ │ │ │ │ └── unit
│ │ │ │ │ │ └── validatePath.test.js
│ │ │ │ │ ├── uploadFile.js
│ │ │ │ │ ├── validatePath.js
│ │ │ │ │ └── widget
│ │ │ │ │ ├── createWidget.js
│ │ │ │ │ ├── deleteWidget.js
│ │ │ │ │ ├── loadWidgetInstances.js
│ │ │ │ │ ├── updateWidget.js
│ │ │ │ │ └── widgetDataSchema.json
│ │ │ ├── cod
│ │ │ │ ├── api
│ │ │ │ │ ├── codCapturePayment
│ │ │ │ │ │ ├── [bodyParser]capture.js
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── createOrder
│ │ │ │ │ │ └── [placeOrder]addOrderPlacedEvent.js
│ │ │ │ │ └── getPaymentMethods
│ │ │ │ │ │ └── registerCod[sendMethods].js
│ │ │ │ ├── bootstrap.js
│ │ │ │ ├── graphql
│ │ │ │ │ └── types
│ │ │ │ │ │ └── CODSetting
│ │ │ │ │ │ ├── CODSetting.graphql
│ │ │ │ │ │ └── CODSetting.resolvers.js
│ │ │ │ └── pages
│ │ │ │ │ ├── admin
│ │ │ │ │ ├── orderEdit
│ │ │ │ │ │ └── CaptureButton.jsx
│ │ │ │ │ └── paymentSetting
│ │ │ │ │ │ └── CODSetting.jsx
│ │ │ │ │ └── frontStore
│ │ │ │ │ └── checkout
│ │ │ │ │ └── CashOnDelivery.jsx
│ │ │ ├── customer
│ │ │ │ ├── api
│ │ │ │ │ ├── createCustomer
│ │ │ │ │ │ ├── [bodyParser]createCustomer.js
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── createCustomerAddress
│ │ │ │ │ │ ├── [bodyParser]createCustomerAddress.js
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── deleteCustomer
│ │ │ │ │ │ ├── deleteCustomer.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── deleteCustomerAddress
│ │ │ │ │ │ ├── deleteCustomerAddress.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── global
│ │ │ │ │ │ └── [context]getCurrentCustomer[auth].js
│ │ │ │ │ ├── resetPassword
│ │ │ │ │ │ ├── [bodyParser]resetPassword.js
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── updateCustomer
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── updateCustomer.js
│ │ │ │ │ ├── updateCustomerAddress
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── updateCustomerAddress.js
│ │ │ │ │ └── updatePassword
│ │ │ │ │ │ ├── [bodyParser]updatePassword.js
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ ├── bootstrap.ts
│ │ │ │ ├── graphql
│ │ │ │ │ └── types
│ │ │ │ │ │ ├── Customer
│ │ │ │ │ │ ├── Customer.admin.graphql
│ │ │ │ │ │ ├── Customer.admin.resolvers.js
│ │ │ │ │ │ ├── Customer.graphql
│ │ │ │ │ │ ├── Customer.resolvers.js
│ │ │ │ │ │ ├── CustomerSetting.graphql
│ │ │ │ │ │ └── CustomerSetting.resolvers.js
│ │ │ │ │ │ └── CustomerGroup
│ │ │ │ │ │ ├── CustomerGroup.admin.graphql
│ │ │ │ │ │ ├── CustomerGroup.admin.resolvers.js
│ │ │ │ │ │ ├── CustomerGroup.graphql
│ │ │ │ │ │ └── CustomerGroup.resolvers.js
│ │ │ │ ├── migration
│ │ │ │ │ ├── Version-1.0.0.js
│ │ │ │ │ ├── Version-1.0.1.js
│ │ │ │ │ ├── Version-1.0.2.js
│ │ │ │ │ └── Version-1.0.3.js
│ │ │ │ ├── pages
│ │ │ │ │ ├── admin
│ │ │ │ │ │ ├── all
│ │ │ │ │ │ │ └── CustomerMenuGroup.jsx
│ │ │ │ │ │ ├── customerEdit+customerNew
│ │ │ │ │ │ │ ├── General.jsx
│ │ │ │ │ │ │ ├── OrderHistory.jsx
│ │ │ │ │ │ │ └── PageHeading.jsx
│ │ │ │ │ │ ├── customerEdit
│ │ │ │ │ │ │ ├── CustomerEditForm.jsx
│ │ │ │ │ │ │ ├── CustomerEditForm.scss
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ └── customerGrid
│ │ │ │ │ │ │ ├── Grid.jsx
│ │ │ │ │ │ │ ├── Heading.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ └── frontStore
│ │ │ │ │ │ ├── account
│ │ │ │ │ │ ├── AccountDetails.jsx
│ │ │ │ │ │ ├── Addresses.jsx
│ │ │ │ │ │ ├── Layout.jsx
│ │ │ │ │ │ ├── OrderHistory.jsx
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── accountEdit
│ │ │ │ │ │ ├── EditForm.jsx
│ │ │ │ │ │ ├── Layout.jsx
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── all
│ │ │ │ │ │ ├── UserIcon.jsx
│ │ │ │ │ │ └── [context]auth.js
│ │ │ │ │ │ ├── checkout
│ │ │ │ │ │ └── CustomerInfoStep.jsx
│ │ │ │ │ │ ├── customerLoginJson
│ │ │ │ │ │ ├── [bodyParser]login.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── customerLogoutJson
│ │ │ │ │ │ ├── logout.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── login
│ │ │ │ │ │ ├── LoginForm.jsx
│ │ │ │ │ │ ├── LoginForm.scss
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── register
│ │ │ │ │ │ ├── RegisterForm.jsx
│ │ │ │ │ │ ├── RegisterForm.scss
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── resetPasswordPage
│ │ │ │ │ │ ├── ResetPasswordForm.jsx
│ │ │ │ │ │ ├── ResetPasswordForm.scss
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ └── updatePasswordPage
│ │ │ │ │ │ ├── UpdatePasswordForm.jsx
│ │ │ │ │ │ ├── UpdatePasswordForm.scss
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ └── services
│ │ │ │ │ ├── CustomerCollection.js
│ │ │ │ │ ├── CustomerGroupCollection.js
│ │ │ │ │ ├── customer
│ │ │ │ │ ├── address
│ │ │ │ │ │ ├── addressValidator.js
│ │ │ │ │ │ ├── createCustomerAddress.js
│ │ │ │ │ │ ├── deleteCustomerAddress.js
│ │ │ │ │ │ └── updateCustomerAddress.js
│ │ │ │ │ ├── createCustomer.js
│ │ │ │ │ ├── customerDataSchema.json
│ │ │ │ │ ├── deleteCustomer.js
│ │ │ │ │ ├── loginCustomerWithEmail.js
│ │ │ │ │ ├── logoutCustomer.js
│ │ │ │ │ ├── updateCustomer.js
│ │ │ │ │ └── updatePassword.js
│ │ │ │ │ ├── getCustomerGroupsBaseQuery.js
│ │ │ │ │ ├── getCustomersBaseQuery.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── registerDefaultCustomerCollectionFilters.js
│ │ │ │ │ └── registerDefaultCustomerGroupCollectionFilters.js
│ │ │ ├── graphql
│ │ │ │ ├── api
│ │ │ │ │ ├── adminGraphql
│ │ │ │ │ │ ├── [bodyParser]graphql.js
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ └── graphql
│ │ │ │ │ │ ├── [auth]removeUser[graphql].js
│ │ │ │ │ │ ├── [bodyParser]graphql.js
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ └── route.json
│ │ │ │ ├── bootstrap.js
│ │ │ │ ├── graphql
│ │ │ │ │ └── types
│ │ │ │ │ │ └── Query
│ │ │ │ │ │ ├── Query.graphql
│ │ │ │ │ │ └── Query.resolvers.js
│ │ │ │ ├── pages
│ │ │ │ │ └── global
│ │ │ │ │ │ ├── [bodyParser]buildQuery[graphql].js
│ │ │ │ │ │ ├── [buildQuery]graphql[notFound].js
│ │ │ │ │ │ └── bodyParser[buildQuery].js
│ │ │ │ └── services
│ │ │ │ │ ├── buildResolvers.js
│ │ │ │ │ ├── buildSchema.js
│ │ │ │ │ ├── buildStoreFrontSchema.js
│ │ │ │ │ ├── buildTypes.js
│ │ │ │ │ ├── contextHelper.ts
│ │ │ │ │ ├── graphqlErrorMessageFormat.js
│ │ │ │ │ ├── graphqlMiddleware.js
│ │ │ │ │ └── index.ts
│ │ │ ├── oms
│ │ │ │ ├── api
│ │ │ │ │ ├── cancelOrder
│ │ │ │ │ │ ├── [context]borderParser[auth].js
│ │ │ │ │ │ ├── cancelOrder.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── createShipment
│ │ │ │ │ │ ├── [context]borderParser[auth].js
│ │ │ │ │ │ ├── createShipment.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── lifetimesales
│ │ │ │ │ │ ├── loadData.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── markDelivered
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── markDelivered.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── salestatistic
│ │ │ │ │ │ ├── loadData.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ └── updateShipment
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── updateShipment.js
│ │ │ │ ├── bootstrap.js
│ │ │ │ ├── graphql
│ │ │ │ │ └── types
│ │ │ │ │ │ ├── BestSeller
│ │ │ │ │ │ ├── BestSeller.admin.graphql
│ │ │ │ │ │ └── BestSeller.admin.resolvers.js
│ │ │ │ │ │ ├── Carrier
│ │ │ │ │ │ ├── Carrier.admin.graphql
│ │ │ │ │ │ └── Carrier.admin.resolvers.js
│ │ │ │ │ │ ├── Order
│ │ │ │ │ │ ├── Order.admin.graphql
│ │ │ │ │ │ ├── Order.admin.resolvers.js
│ │ │ │ │ │ ├── Order.graphql
│ │ │ │ │ │ └── Order.resolvers.js
│ │ │ │ │ │ ├── PaymentTransaction
│ │ │ │ │ │ ├── PaymentTransaction.admin.graphql
│ │ │ │ │ │ └── PaymentTransaction.admin.resolvers.js
│ │ │ │ │ │ └── Status
│ │ │ │ │ │ ├── Status.graphql
│ │ │ │ │ │ └── Status.resolvers.js
│ │ │ │ ├── migration
│ │ │ │ │ ├── Version-1.0.0.js
│ │ │ │ │ └── Version-1.0.1.js
│ │ │ │ ├── pages
│ │ │ │ │ └── admin
│ │ │ │ │ │ ├── all
│ │ │ │ │ │ └── OmsMenuGroup.jsx
│ │ │ │ │ │ ├── dashboard
│ │ │ │ │ │ ├── Bestcustomers.jsx
│ │ │ │ │ │ ├── Bestsellers.jsx
│ │ │ │ │ │ ├── Bestsellers.scss
│ │ │ │ │ │ ├── Lifetimesales.jsx
│ │ │ │ │ │ ├── Lifetimesales.scss
│ │ │ │ │ │ ├── Statistic.jsx
│ │ │ │ │ │ └── Statistic.scss
│ │ │ │ │ │ ├── orderEdit
│ │ │ │ │ │ ├── Activities.jsx
│ │ │ │ │ │ ├── Activities.scss
│ │ │ │ │ │ ├── AddTrackingButton.jsx
│ │ │ │ │ │ ├── CancelButton.jsx
│ │ │ │ │ │ ├── Customer.jsx
│ │ │ │ │ │ ├── CustomerNotes.jsx
│ │ │ │ │ │ ├── Items.jsx
│ │ │ │ │ │ ├── Items.scss
│ │ │ │ │ │ ├── Layout.jsx
│ │ │ │ │ │ ├── Layout.scss
│ │ │ │ │ │ ├── MarkDeliveredButton.jsx
│ │ │ │ │ │ ├── PageHeading.jsx
│ │ │ │ │ │ ├── Payment.jsx
│ │ │ │ │ │ ├── Payment.scss
│ │ │ │ │ │ ├── ShipButton.jsx
│ │ │ │ │ │ ├── Status.jsx
│ │ │ │ │ │ ├── TrackingButton.jsx
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ └── orderGrid
│ │ │ │ │ │ ├── Grid.jsx
│ │ │ │ │ │ ├── Heading.jsx
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ └── services
│ │ │ │ │ ├── OrderCollection.js
│ │ │ │ │ ├── cancelOrder.js
│ │ │ │ │ ├── getOrdersBaseQuery.js
│ │ │ │ │ ├── registerDefaultOrderCollectionFilters.js
│ │ │ │ │ ├── updateOrderStatus.js
│ │ │ │ │ ├── updatePaymentStatus.js
│ │ │ │ │ └── updateShipmentStatus.js
│ │ │ ├── paypal
│ │ │ │ ├── api
│ │ │ │ │ ├── getPaymentMethods
│ │ │ │ │ │ └── registerPaypal[sendMethods].js
│ │ │ │ │ ├── paypalAuthorizePayment
│ │ │ │ │ │ ├── [bodyParser]authorize.js
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── paypalCaptureAuthorizedPayment
│ │ │ │ │ │ ├── [bodyParser]capture.js
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── paypalCapturePayment
│ │ │ │ │ │ ├── [bodyParser]capture.js
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ └── paypalCreateOrder
│ │ │ │ │ │ ├── [bodyParser]createOrder.js
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ ├── bootstrap.js
│ │ │ │ ├── graphql
│ │ │ │ │ └── types
│ │ │ │ │ │ └── PaypalSetting
│ │ │ │ │ │ ├── PaypalSetting.admin.graphql
│ │ │ │ │ │ ├── PaypalSetting.admin.resolvers.js
│ │ │ │ │ │ ├── PaypalSetting.graphql
│ │ │ │ │ │ └── PaypalSetting.resolvers.js
│ │ │ │ ├── pages
│ │ │ │ │ ├── admin
│ │ │ │ │ │ ├── orderEdit
│ │ │ │ │ │ │ ├── PaypalCaptureButton.jsx
│ │ │ │ │ │ │ └── StripeRefundButton.jsx
│ │ │ │ │ │ └── paymentSetting
│ │ │ │ │ │ │ └── PaypalSetting.jsx
│ │ │ │ │ └── frontStore
│ │ │ │ │ │ ├── checkout
│ │ │ │ │ │ └── Paypal.jsx
│ │ │ │ │ │ ├── paypalCancel
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ └── paypalReturn
│ │ │ │ │ │ ├── Error.jsx
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ └── services
│ │ │ │ │ ├── getApiBaseUrl.js
│ │ │ │ │ ├── requester.js
│ │ │ │ │ └── voidPaymentTransaction.js
│ │ │ ├── promotion
│ │ │ │ ├── api
│ │ │ │ │ ├── couponApply
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── [validateCouponCode]applyCoupon.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── validateCouponCode.js
│ │ │ │ │ ├── createCoupon
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── createCoupon[finish].js
│ │ │ │ │ │ ├── finish[apiResponse].js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── deleteCoupon
│ │ │ │ │ │ ├── deleteCoupon.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ └── updateCoupon
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── finish[apiResponse].js
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── updateCoupon[finish].js
│ │ │ │ ├── bootstrap.js
│ │ │ │ ├── graphql
│ │ │ │ │ └── types
│ │ │ │ │ │ └── Coupon
│ │ │ │ │ │ ├── Coupon.admin.graphql
│ │ │ │ │ │ ├── Coupon.admin.resolvers.js
│ │ │ │ │ │ ├── Coupon.graphql
│ │ │ │ │ │ └── Coupon.resolvers.js
│ │ │ │ ├── migration
│ │ │ │ │ ├── Version-1.0.0.js
│ │ │ │ │ └── Version-1.0.1.js
│ │ │ │ ├── pages
│ │ │ │ │ ├── admin
│ │ │ │ │ │ ├── all
│ │ │ │ │ │ │ ├── CouponMenuGroup.jsx
│ │ │ │ │ │ │ └── NewCouponQuickLink.jsx
│ │ │ │ │ │ ├── couponEdit+couponNew
│ │ │ │ │ │ │ ├── CustomerCondition.jsx
│ │ │ │ │ │ │ ├── DiscountType.jsx
│ │ │ │ │ │ │ ├── FormContent.jsx
│ │ │ │ │ │ │ ├── FormContent.scss
│ │ │ │ │ │ │ ├── General.jsx
│ │ │ │ │ │ │ ├── OrderCondition.jsx
│ │ │ │ │ │ │ └── PageHeading.jsx
│ │ │ │ │ │ ├── couponEdit
│ │ │ │ │ │ │ ├── CouponEditForm.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── couponGrid
│ │ │ │ │ │ │ ├── Grid.jsx
│ │ │ │ │ │ │ ├── Heading.jsx
│ │ │ │ │ │ │ ├── NewCouponButton.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ ├── couponNew
│ │ │ │ │ │ │ ├── CouponNewForm.jsx
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── route.json
│ │ │ │ │ │ └── navigation
│ │ │ │ │ │ │ ├── CouponNewMenuItem.jsx
│ │ │ │ │ │ │ └── CouponsMenuItem.jsx
│ │ │ │ │ └── frontStore
│ │ │ │ │ │ └── cart
│ │ │ │ │ │ └── Coupon.jsx
│ │ │ │ └── services
│ │ │ │ │ ├── CouponCollection.js
│ │ │ │ │ ├── coupon
│ │ │ │ │ ├── couponDataSchema.json
│ │ │ │ │ ├── createCoupon.js
│ │ │ │ │ ├── deleteCoupon.js
│ │ │ │ │ └── updateCoupon.js
│ │ │ │ │ ├── couponValidator.js
│ │ │ │ │ ├── discountCalculator.js
│ │ │ │ │ ├── getCartTotalBeforeDiscount.js
│ │ │ │ │ ├── getCouponsBaseQuery.js
│ │ │ │ │ ├── registerCartItemPromotionFields.js
│ │ │ │ │ ├── registerCartPromotionFields.js
│ │ │ │ │ ├── registerDefaultCalculators.js
│ │ │ │ │ ├── registerDefaultCouponCollectionFilters.js
│ │ │ │ │ └── registerDefaultValidators.js
│ │ │ ├── setting
│ │ │ │ ├── api
│ │ │ │ │ └── saveSetting
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── route.json
│ │ │ │ │ │ └── saveSetting.js
│ │ │ │ ├── graphql
│ │ │ │ │ └── types
│ │ │ │ │ │ ├── Setting
│ │ │ │ │ │ ├── Setting.graphql
│ │ │ │ │ │ └── Setting.resolvers.js
│ │ │ │ │ │ ├── ShippingSetting
│ │ │ │ │ │ ├── ShippingSetting.graphql
│ │ │ │ │ │ └── ShippingSetting.resolvers.js
│ │ │ │ │ │ └── StoreSetting
│ │ │ │ │ │ ├── StoreSetting.graphql
│ │ │ │ │ │ └── StoreSetting.resolvers.js
│ │ │ │ ├── migration
│ │ │ │ │ └── Version-1.0.0.js
│ │ │ │ ├── pages
│ │ │ │ │ └── admin
│ │ │ │ │ │ ├── all
│ │ │ │ │ │ ├── PaymentSettingMenu.jsx
│ │ │ │ │ │ ├── SettingMenuGroup.jsx
│ │ │ │ │ │ └── StoreSettingMenu.jsx
│ │ │ │ │ │ ├── paymentSetting
│ │ │ │ │ │ ├── PaymentSetting.jsx
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ │ └── storeSetting
│ │ │ │ │ │ ├── StoreSetting.jsx
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ └── services
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── setting.ts
│ │ │ ├── stripe
│ │ │ │ ├── api
│ │ │ │ │ ├── capturePaymentIntent
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── capturePaymentIntent.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── createPaymentIntent
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── createPaymentIntent.js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ └── route.json
│ │ │ │ │ ├── getPaymentMethods
│ │ │ │ │ │ └── registerStripe[sendMethods].js
│ │ │ │ │ ├── refundPaymentIntent
│ │ │ │ │ │ ├── [context]bodyParser[auth].js
│ │ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ │ ├── refundPaymentIntent.js
│ │ │ │ │ │ └── route.json
│ │ │ │ │ └── stripeWebHook
│ │ │ │ │ │ ├── [bodyJson]webhook.js
│ │ │ │ │ │ ├── bodyJson.js
│ │ │ │ │ │ └── route.json
│ │ │ │ ├── bootstrap.js
│ │ │ │ ├── graphql
│ │ │ │ │ └── types
│ │ │ │ │ │ └── StripeSetting
│ │ │ │ │ │ ├── StripeSetting.admin.graphql
│ │ │ │ │ │ ├── StripeSetting.admin.resolvers.js
│ │ │ │ │ │ ├── StripeSetting.graphql
│ │ │ │ │ │ └── StripeSetting.resolvers.js
│ │ │ │ ├── pages
│ │ │ │ │ ├── admin
│ │ │ │ │ │ ├── orderEdit
│ │ │ │ │ │ │ ├── StripeCaptureButton.jsx
│ │ │ │ │ │ │ └── StripeRefundButton.jsx
│ │ │ │ │ │ └── paymentSetting
│ │ │ │ │ │ │ └── StripePayment.jsx
│ │ │ │ │ └── frontStore
│ │ │ │ │ │ ├── checkout
│ │ │ │ │ │ └── Stripe.jsx
│ │ │ │ │ │ └── stripeReturn
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── route.json
│ │ │ │ └── services
│ │ │ │ │ └── cancelPayment.js
│ │ │ └── tax
│ │ │ │ ├── api
│ │ │ │ ├── createTaxClass
│ │ │ │ │ ├── [context]borderParser[auth].js
│ │ │ │ │ ├── createTaxClass.js
│ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ └── route.json
│ │ │ │ ├── createTaxRate
│ │ │ │ │ ├── [context]borderParser[auth].js
│ │ │ │ │ ├── createTaxRate.js
│ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ └── route.json
│ │ │ │ ├── deleteTaxRate
│ │ │ │ │ ├── [context]borderParser[auth].js
│ │ │ │ │ ├── deleteTaxRate.js
│ │ │ │ │ └── route.json
│ │ │ │ ├── updateTaxClass
│ │ │ │ │ ├── [context]borderParser[auth].js
│ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ ├── route.json
│ │ │ │ │ └── updateTaxClass.js
│ │ │ │ └── updateTaxRate
│ │ │ │ │ ├── [context]borderParser[auth].js
│ │ │ │ │ ├── payloadSchema.json
│ │ │ │ │ ├── route.json
│ │ │ │ │ └── updateTaxRate.js
│ │ │ │ ├── bootstrap.js
│ │ │ │ ├── graphql
│ │ │ │ └── types
│ │ │ │ │ ├── Product
│ │ │ │ │ └── Price
│ │ │ │ │ │ └── ProductPrice.resolvers.js
│ │ │ │ │ ├── TaxClass
│ │ │ │ │ ├── TaxClass.admin.graphql
│ │ │ │ │ └── TaxClass.admin.resolvers.js
│ │ │ │ │ └── TaxSetting
│ │ │ │ │ ├── TaxSetting.admin.graphql
│ │ │ │ │ ├── TaxSetting.admin.resolvers.js
│ │ │ │ │ ├── TaxSetting.graphql
│ │ │ │ │ └── TaxSetting.resolvers.js
│ │ │ │ ├── migration
│ │ │ │ └── Version-1.0.0.js
│ │ │ │ ├── pages
│ │ │ │ └── admin
│ │ │ │ │ ├── all
│ │ │ │ │ └── TaxSettingMenu.jsx
│ │ │ │ │ └── taxSetting
│ │ │ │ │ ├── TaxSetting.jsx
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── route.json
│ │ │ │ └── services
│ │ │ │ ├── TaxClassCollection.js
│ │ │ │ ├── calculateTaxAmount.js
│ │ │ │ ├── getTaxPercent.js
│ │ │ │ ├── getTaxRates.js
│ │ │ │ ├── registerCartItemTaxPercentField.js
│ │ │ │ └── registerDefaultTaxClassCollectionFilters.js
│ │ └── types
│ │ │ ├── index.ts
│ │ │ ├── middleware.ts
│ │ │ ├── request.d.ts
│ │ │ ├── request.ts
│ │ │ ├── response.ts
│ │ │ ├── route.d.ts
│ │ │ ├── route.ts
│ │ │ └── widget.ts
│ └── tsconfig.json
├── google_login
│ ├── README.md
│ ├── bootstrap.js
│ ├── migration
│ │ └── Version-1.0.0.js
│ ├── package.json
│ ├── pages
│ │ └── frontStore
│ │ │ ├── gauth
│ │ │ ├── [auth]gAuth.js
│ │ │ └── route.json
│ │ │ ├── gcallback
│ │ │ ├── gCallback.js
│ │ │ └── route.json
│ │ │ └── login
│ │ │ ├── GoogleLogin.jsx
│ │ │ └── GoogleLogin.scss
│ └── services
│ │ ├── getGoogleAuthToken.js
│ │ ├── getGoogleAuthUrl.js
│ │ └── getGoogleUserInfo.js
├── postgres-query-builder
│ ├── LICENSE
│ ├── README.md
│ ├── fieldResolve.js
│ ├── index.ts
│ ├── isValueASQL.js
│ ├── package.json
│ ├── toString.js
│ └── tsconfig.json
├── product_review
│ ├── README.md
│ ├── api
│ │ ├── addReview
│ │ │ ├── [context]bodyParser[auth].js
│ │ │ ├── addReview.js
│ │ │ ├── payloadSchema.json
│ │ │ └── route.json
│ │ ├── approveReview
│ │ │ ├── approveReview.js
│ │ │ └── route.json
│ │ ├── deleteReview
│ │ │ ├── deleteReview.js
│ │ │ └── route.json
│ │ └── unApproveReview
│ │ │ ├── route.json
│ │ │ └── unApproveReview.js
│ ├── bootstrap.js
│ ├── components
│ │ ├── Rating.jsx
│ │ └── Rating.scss
│ ├── graphql
│ │ └── types
│ │ │ └── Review
│ │ │ ├── Review.graphql
│ │ │ └── Review.resolvers.js
│ ├── migration
│ │ └── Version-1.0.0.js
│ ├── package.json
│ ├── pages
│ │ ├── admin
│ │ │ ├── all
│ │ │ │ └── ReviewMenuGroup.jsx
│ │ │ └── reviewGrid
│ │ │ │ ├── Grid.jsx
│ │ │ │ ├── Heading.jsx
│ │ │ │ ├── index.js
│ │ │ │ ├── route.json
│ │ │ │ └── row
│ │ │ │ ├── CommentRow.jsx
│ │ │ │ ├── IsApprovedRow.jsx
│ │ │ │ ├── ProductRow.jsx
│ │ │ │ ├── Rating.scss
│ │ │ │ └── RatingRow.jsx
│ │ └── frontStore
│ │ │ └── productView
│ │ │ ├── ReviewForm.jsx
│ │ │ ├── Reviews.jsx
│ │ │ └── Reviews.scss
│ └── services
│ │ ├── ReviewCollection.js
│ │ ├── getReviewsBaseQuery.js
│ │ └── registerDefaultReviewCollectionFilters.js
├── resend
│ ├── README.md
│ ├── api
│ │ └── resetPassword
│ │ │ └── [resetPassword]sendMail.js
│ ├── bootstrap.js
│ ├── email_template_examples
│ │ ├── order_confirmation.html
│ │ ├── reset_password.html
│ │ └── welcome.html
│ ├── package.json
│ └── subscribers
│ │ ├── customer_registered
│ │ └── sendWelcomeEmail.js
│ │ └── order_placed
│ │ └── sendOrderConfirmationEmail.js
├── s3_file_storage
│ ├── README.md
│ ├── bootstrap.js
│ ├── package.json
│ ├── services
│ │ ├── awsFileBrowser.js
│ │ ├── awsFileDeleter.js
│ │ ├── awsFileUploader.js
│ │ └── awsFolderCreator.js
│ └── subscribers
│ │ └── product_image_added
│ │ └── awsGenerateProductImageVariant.js
└── sendgrid
│ ├── README.md
│ ├── api
│ └── resetPassword
│ │ └── [resetPassword]sendMail.js
│ ├── bootstrap.js
│ ├── package.json
│ ├── services
│ └── sendMail.js
│ └── subscribers
│ ├── customer_registered
│ └── sendWelcomeEmail.js
│ └── order_placed
│ └── sendOrderConfirmationEmail.js
├── translations
├── de
│ ├── account.csv
│ ├── catalog.csv
│ ├── checkout.csv
│ ├── general.csv
│ └── paypal.csv
├── es
│ ├── account.csv
│ ├── catalog.csv
│ ├── checkout.csv
│ ├── general.csv
│ └── paypal.csv
├── fr
│ ├── account.csv
│ ├── catalog.csv
│ ├── checkout.csv
│ ├── general.csv
│ └── paypal.csv
├── gr
│ ├── account.csv
│ ├── catalog.csv
│ ├── checkout.csv
│ ├── general.csv
│ └── paypal.csv
├── hu
│ ├── account.csv
│ ├── catalog.csv
│ ├── checkout.csv
│ └── general.csv
├── it
│ ├── account.csv
│ ├── catalog.csv
│ ├── checkout.csv
│ ├── general.csv
│ └── paypal.csv
├── nb
│ ├── account.csv
│ ├── catalog.csv
│ ├── checkout.csv
│ ├── general.csv
│ └── paypal.csv
├── ne
│ ├── account.csv
│ ├── catalog.csv
│ ├── checkout.csv
│ ├── general.csv
│ └── paypal.csv
├── nl
│ ├── account.csv
│ ├── catalog.csv
│ ├── checkout.csv
│ ├── general.csv
│ └── paypal.csv
├── pt
│ ├── account.csv
│ ├── catalog.csv
│ ├── checkout.csv
│ ├── general.csv
│ └── paypal.csv
├── rs
│ ├── account.csv
│ ├── catalog.csv
│ ├── checkout.csv
│ ├── general.csv
│ └── paypal.csv
├── ru
│ ├── account.csv
│ ├── catalog.csv
│ ├── checkout.csv
│ ├── general.csv
│ └── paypal.csv
└── zh
│ ├── account.csv
│ ├── catalog.csv
│ ├── checkout.csv
│ ├── general.csv
│ └── paypal.csv
├── tsconfig.json
└── turbo.json
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | open_collective: evershopcommerce
4 |
--------------------------------------------------------------------------------
/.github/images/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/.github/images/banner.png
--------------------------------------------------------------------------------
/.github/images/evershop-admin-demo1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/.github/images/evershop-admin-demo1.png
--------------------------------------------------------------------------------
/.github/images/evershop-backend-demo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/.github/images/evershop-backend-demo.png
--------------------------------------------------------------------------------
/.github/images/evershop-demo-back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/.github/images/evershop-demo-back.png
--------------------------------------------------------------------------------
/.github/images/evershop-demo-front.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/.github/images/evershop-demo-front.png
--------------------------------------------------------------------------------
/.github/images/evershop-product-detail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/.github/images/evershop-product-detail.png
--------------------------------------------------------------------------------
/.github/images/evershop-store-front-demo1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/.github/images/evershop-store-front-demo1.png
--------------------------------------------------------------------------------
/.github/images/logo-green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/.github/images/logo-green.png
--------------------------------------------------------------------------------
/.github/images/showcase.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/.github/images/showcase.gif
--------------------------------------------------------------------------------
/.github/images/sponsors/bountyhub.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/.github/images/sponsors/bountyhub.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .env
3 | dist
4 | /extensions/*
5 | /themes
6 | .idea/*
7 | .evershop
8 | .vscode
9 | npm-debug.log
10 | /package-log.json
11 | /media
12 | /public
13 | .DS_Store
14 | .log
15 | coverage
16 | cypress
17 | .turbo
18 | /config
19 | /packages/evershop/config
20 | .prettierignore
21 | .prettierrc
22 | mysqlToPostgres.js
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | . "$(dirname -- "$0")/_/husky.sh"
3 |
4 | #FORCE_COLOR=1 npm run lint
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | # Ignore everything:
2 | /*
3 |
4 | # Except packages:
5 | !/packages
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true,
3 | "semi": true,
4 | "trailingComma" : "none"
5 | }
--------------------------------------------------------------------------------
/changelog.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/changelog.md
--------------------------------------------------------------------------------
/nodemon.json:
--------------------------------------------------------------------------------
1 | {
2 | "ext": "js, json, graphql"
3 | }
--------------------------------------------------------------------------------
/packages/agegate/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "agegate",
3 | "version": "1.0.0",
4 | "main": "index.js",
5 | "scripts": {
6 | "compile": "swc ./src/ -d dist/ --config-file .swcrc --copy-files --strip-leading-paths"
7 | },
8 | "keywords": [],
9 | "author": "",
10 | "license": "ISC",
11 | "description": ""
12 | }
13 |
--------------------------------------------------------------------------------
/packages/agegate/src/api/verifyAge/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "age": {
5 | "type": ["integer", "string"],
6 | "pattern": "^[0-9]+$"
7 | }
8 | },
9 | "required": ["age"],
10 | "additionalProperties": true
11 | }
12 |
--------------------------------------------------------------------------------
/packages/agegate/src/api/verifyAge/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/age-verify",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/agegate/src/graphql/types/AgeSetting/AgeSetting.graphql:
--------------------------------------------------------------------------------
1 | extend type Setting {
2 | minAge: Int!
3 | }
--------------------------------------------------------------------------------
/packages/agegate/src/graphql/types/AgeSetting/AgeSetting.resolvers.js:
--------------------------------------------------------------------------------
1 | export default {
2 | Setting: {
3 | minAge: (setting) => {
4 | const minAge = setting.find((s) => s.name === 'minAge');
5 | if (minAge) {
6 | return minAge.value;
7 | } else {
8 | return 18;
9 | }
10 | }
11 | }
12 | };
13 |
--------------------------------------------------------------------------------
/packages/agegate/src/pages/admin/ageSetting/index.js:
--------------------------------------------------------------------------------
1 | import { setContextValue } from '@evershop/evershop/graphql/services';
2 |
3 | export default (request) => {
4 | setContextValue(request, 'pageInfo', {
5 | title: 'Age Setting',
6 | description: 'Age Setting'
7 | });
8 | };
9 |
--------------------------------------------------------------------------------
/packages/agegate/src/pages/admin/ageSetting/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/setting/agegate"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/agegate/src/pages/frontStore/ageGate/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/age-gate"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/agegate/src/pages/frontStore/ageVerifyFailure/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/age-verify-failed"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/scripts/prepublish.js:
--------------------------------------------------------------------------------
1 | import fs from 'fs';
2 | import path from 'path';
3 |
4 | fs.copyFile(
5 | path.resolve(__dirname, '../../README.md'),
6 | path.resolve(__dirname, './README.md'),
7 | (err) => {
8 | if (err) throw err;
9 | }
10 | );
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/bin/build/initEnvBuild.ts:
--------------------------------------------------------------------------------
1 | import 'dotenv/config';
2 | process.env.NODE_ENV = 'production';
3 | process.env.ALLOW_CONFIG_MUTATIONS = 'true';
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/bin/dev/initEnvDev.ts:
--------------------------------------------------------------------------------
1 | import 'dotenv/config';
2 | process.env.NODE_ENV = 'development';
3 | process.env.ALLOW_CONFIG_MUTATIONS = 'true';
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/bin/start/initEnvStart.ts:
--------------------------------------------------------------------------------
1 | import 'dotenv/config';
2 | process.env.NODE_ENV = 'production';
3 | process.env.ALLOW_CONFIG_MUTATIONS = 'true';
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/admin/cms/NavigationItem.scss:
--------------------------------------------------------------------------------
1 | .nav-item {
2 | .menu-icon {
3 | padding-right: 10px;
4 | align-self: center;
5 | svg {
6 | width: 15px;
7 | height: 15px;
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/admin/cms/Title.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import React from 'react';
3 |
4 |
5 | export default function Title({ title }) {
6 | return
{title}
;
7 | }
8 |
9 | Title.propTypes = {
10 | title: PropTypes.string.isRequired
11 | };
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/admin/index.ts:
--------------------------------------------------------------------------------
1 | import { Card } from './cms/Card.jsx';
2 | import { NavigationItem } from './cms/NavigationItem.jsx';
3 | import { NavigationItemGroup } from './cms/NavigationItemGroup.jsx';
4 |
5 | export { Card, NavigationItem, NavigationItemGroup };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/admin/oms/orderGrid/rows/TotalRow.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import React from 'react';
3 |
4 |
5 | export default function TotalRow({ total }) {
6 | return {total} | ;
7 | }
8 |
9 | TotalRow.propTypes = {
10 | total: PropTypes.string.isRequired
11 | };
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/admin/setting/SettingMenu.scss:
--------------------------------------------------------------------------------
1 | .setting-page-menu {
2 | .card-section-header {
3 | a:hover {
4 | color: var(--interactive);
5 | text-decoration: underline;
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/admin/widgets/index.tsx:
--------------------------------------------------------------------------------
1 | import BasicMenuSetting from './BasicMenuSetting.jsx';
2 | import CollectionProductsSetting from './CollectionProductsSetting.jsx';
3 | import TextBlockSetting from './TextBlockSetting.jsx';
4 |
5 | export { BasicMenuSetting, CollectionProductsSetting, TextBlockSetting };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/common/Body.jsx:
--------------------------------------------------------------------------------
1 | import Area from '@components/common/Area';
2 | import React from 'react';
3 |
4 | export function Body() {
5 | return (
6 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/common/Off.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import './Off.scss';
3 |
4 | export default function Off() {
5 | return (
6 |
7 |
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/common/On.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import './On.scss';
3 |
4 | export default function On() {
5 | return (
6 |
7 |
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/common/RenderIfTrue.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | RenderIfTrue.propTypes = {
4 | condition: PropTypes.bool.isRequired,
5 | children: PropTypes.node.isRequired
6 | };
7 |
8 | export default function RenderIfTrue({ condition, children }) {
9 | return condition ? children : null;
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/common/Title.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import React from 'react';
3 |
4 |
5 | export default function Title({ title }) {
6 | return {title};
7 | }
8 |
9 | Title.propTypes = {
10 | title: PropTypes.string.isRequired
11 | };
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/common/form/fields/Checkbox.scss:
--------------------------------------------------------------------------------
1 | @import '../Field.scss';
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/common/form/fields/Date.scss:
--------------------------------------------------------------------------------
1 | @import '../Field.scss';
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/common/form/fields/DateTime.scss:
--------------------------------------------------------------------------------
1 | @import '../Field.scss';
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/common/form/fields/Flatpickr.jsx:
--------------------------------------------------------------------------------
1 | import flatpickr from 'flatpickr';
2 | import './Flatpickr.scss';
3 |
4 | export default flatpickr;
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/common/form/fields/Input.scss:
--------------------------------------------------------------------------------
1 | @import '../Field.scss';
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/common/form/fields/MultiSelect.scss:
--------------------------------------------------------------------------------
1 | @import '../Field.scss';
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/common/form/fields/Radio.scss:
--------------------------------------------------------------------------------
1 | @import '../Field.scss';
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/common/form/fields/Select.scss:
--------------------------------------------------------------------------------
1 | @import '../Field.scss';
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/common/form/fields/Textarea.scss:
--------------------------------------------------------------------------------
1 | @import '../Field.scss';
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/common/grid/rows/TextRow.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import React from 'react';
3 |
4 |
5 | export default function TextRow({ text }) {
6 | return {text} | ;
7 | }
8 |
9 | TextRow.propTypes = {
10 | text: PropTypes.string.isRequired
11 | };
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/common/react/Head.jsx:
--------------------------------------------------------------------------------
1 | import Area from '@components/common/Area';
2 | import React from 'react';
3 | import ReactDOM from 'react-dom';
4 |
5 | export default function Head() {
6 | return ReactDOM.createPortal(
7 | ,
8 | document.getElementsByTagName('head')[0]
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/common/react/client/HydrateAdmin.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { createClient } from 'urql';
3 | import Hydrate from './Hydrate';
4 |
5 | const client = createClient({
6 | url: '/api/admin/graphql'
7 | });
8 |
9 | export function HydrateAdmin() {
10 | return ;
11 | }
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/common/react/client/HydrateFrontStore.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { createClient } from 'urql';
3 | import Hydrate from './Hydrate';
4 |
5 | const client = createClient({
6 | url: '/api/graphql'
7 | });
8 |
9 | export function HydrateFrontStore() {
10 | return ;
11 | }
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/frontStore/catalog/categoryView/filter/CategoryFilter.scss:
--------------------------------------------------------------------------------
1 | @media (max-width: 639px) {
2 | .category-filter {
3 | padding-bottom: 2.5rem;
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/frontStore/catalog/product/list/SortOptions.jsx:
--------------------------------------------------------------------------------
1 | import { _ } from '../../../../../lib/locale/translate/index.js';
2 |
3 | const options = [
4 | { code: 'price', name: _('Price') },
5 | { code: 'name', name: _('Name') }
6 | ];
7 |
8 | export default options;
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/frontStore/catalog/product/list/item/Name.scss:
--------------------------------------------------------------------------------
1 | .product-name {
2 | text-transform: capitalize;
3 | }
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/frontStore/catalog/product/list/item/Thumbnail.scss:
--------------------------------------------------------------------------------
1 | .product-thumbnail-listing {
2 | background-color: #f6f6f6;
3 | color: #3131;
4 | min-height: 250px;
5 | display: flex;
6 | justify-content: center;
7 | flex-direction: column;
8 | align-items: center;
9 | }
10 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/frontStore/catalog/product/single/Name.tsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import React from 'react';
3 |
4 |
5 | export function Name({ name }) {
6 | return {name}
;
7 | }
8 |
9 | Name.propTypes = {
10 | name: PropTypes.string.isRequired
11 | };
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/frontStore/cms/Button.jsx:
--------------------------------------------------------------------------------
1 | import Button from '@components/common/form/Button';
2 | import '@components/frontStore/cms/Button.scss';
3 |
4 | export default Button;
5 | export { Button };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/frontStore/index.ts:
--------------------------------------------------------------------------------
1 | import Button from './cms/Button.jsx';
2 |
3 | export { Button };
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/components/frontStore/widgets/index.tsx:
--------------------------------------------------------------------------------
1 | import BasicMenu from './BasicMenu.jsx';
2 | import CollectionProducts from './CollectionProducts.jsx';
3 | import TextBlock from './TextBlock.jsx';
4 |
5 | export { CollectionProducts, BasicMenu, TextBlock };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/babel/index.js:
--------------------------------------------------------------------------------
1 | import config from './config.js';
2 | import '@babel/register';
3 |
4 | config();
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/firstExtension/pages/frontStore/all/Banner.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/firstExtension/pages/frontStore/all/Banner.js
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/firstExtension/pages/frontStore/all/CommentList.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/firstExtension/pages/frontStore/all/CommentList.js
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/firstExtension/pages/frontStore/productView/Attribute.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/firstExtension/pages/frontStore/productView/Attribute.js
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/firstExtension/pages/frontStore/productView/Comment.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/firstExtension/pages/frontStore/productView/Comment.js
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/firstExtension/pages/frontStore/productView/Name.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/firstExtension/pages/frontStore/productView/Name.js
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/firstExtension/pages/frontStore/productView/Price.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/firstExtension/pages/frontStore/productView/Price.js
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/secondExtension/pages/frontStore/all/CommentList.jsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/secondExtension/pages/frontStore/all/CommentList.jsx
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/secondExtension/pages/frontStore/productView/Comment.jsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/secondExtension/pages/frontStore/productView/Comment.jsx
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/secondExtension/pages/frontStore/productView/Name.jsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/secondExtension/pages/frontStore/productView/Name.jsx
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/secondExtension/pages/frontStore/productView/Review.jsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/extensions/secondExtension/pages/frontStore/productView/Review.jsx
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/modules/firstModule/pages/frontStore/all/Menu.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/modules/firstModule/pages/frontStore/all/Menu.js
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/modules/firstModule/pages/frontStore/productView/Name.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/modules/firstModule/pages/frontStore/productView/Name.js
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/modules/firstModule/pages/frontStore/productView/Price.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/modules/firstModule/pages/frontStore/productView/Price.js
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/modules/secondModule/pages/frontStore/all/Banner.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/modules/secondModule/pages/frontStore/all/Banner.js
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/modules/secondModule/pages/frontStore/productView/Description.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/modules/secondModule/pages/frontStore/productView/Description.js
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/modules/secondModule/pages/frontStore/productView/Inventory.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/modules/secondModule/pages/frontStore/productView/Inventory.js
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/modules/secondModule/pages/frontStore/productView/Name.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/modules/secondModule/pages/frontStore/productView/Name.js
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/themes/justatheme/pages/all/CommentList.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/themes/justatheme/pages/all/CommentList.js
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/themes/justatheme/pages/all/Shipping.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/themes/justatheme/pages/all/Shipping.js
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/themes/justatheme/pages/productView/Name.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/themes/justatheme/pages/productView/Name.js
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/themes/justatheme/pages/productView/OutOfStock.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/themes/justatheme/pages/productView/OutOfStock.js
--------------------------------------------------------------------------------
/packages/evershop/src/lib/componee/tests/unit/__mocks__/themes/justatheme/pages/productView/Price.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/componee/tests/unit/__mocks__/themes/justatheme/pages/productView/Price.js
--------------------------------------------------------------------------------
/packages/evershop/src/lib/index.ts:
--------------------------------------------------------------------------------
1 | export * from './util/index.js';
2 | export * from './locale/index.js';
3 | export * from './log/logger.js';
4 | export * from './postgres/connection.js';
5 | export * from './router/index.js';
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/locale/index.ts:
--------------------------------------------------------------------------------
1 | export * from './countries.js';
2 | export * from './currencies.js';
3 | export * from './provinces.js';
4 | export * from './timezones.js';
5 | export { _ } from './translate/index.js';
6 | export { translate } from './translate/translate.js';
7 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/isErrorHandlerTriggered.js:
--------------------------------------------------------------------------------
1 | export default (response) => {
2 | if (!response.locals) {
3 | return false;
4 | } else {
5 | return response.locals.errorHandlerTriggered === true;
6 | }
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/isNextRequired.js:
--------------------------------------------------------------------------------
1 | import { readFileSync } from 'fs';
2 |
3 | export default function isNextRequired(path) {
4 | const code = readFileSync(path, 'utf8');
5 | return code.includes('next');
6 | }
7 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/404page/pages/frontStore/product/[loadProduct]loadCategory.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn((request, response, delegates) => {});
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/404page/pages/frontStore/product/[loadProduct]loadProductImage.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn(async (request, response, delegates, next) => {
4 | next();
5 | });
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/404page/pages/frontStore/product/loadProduct.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn(async (request, response, delegates, next) => {
4 | try {
5 | response.status(404);
6 | next();
7 | } catch (e) {
8 | next(e);
9 | }
10 | });
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/404page/pages/frontStore/product/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/product/:id",
4 | "name": "Product single page"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/api/api/createA/index.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn((request, response, delegate) => {});
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/api/api/createA/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/as"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/api/api/global/apiGlobal.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn((request, response, delegate) => {});
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/authcopy/api/createA/[index]afterIndex.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn((request, response, delegate) => {});
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/authcopy/api/global/[context]auth.js:
--------------------------------------------------------------------------------
1 | export default (request, response) => {
2 | // Do nothing
3 | };
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/authcopy/api/global/apiAuthGlobal.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn((request, response, delegate) => {});
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/authcopy/pages/global/[context]auth.js:
--------------------------------------------------------------------------------
1 | export default (request, response) => {};
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/basecopy/api/global/[apiResponse]apiErrorHandler.js:
--------------------------------------------------------------------------------
1 | import apiErrorHandler from '../../../../../../../../modules/base/api/global/[apiResponse]apiErrorHandler.js';
2 |
3 | export default apiErrorHandler;
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/basecopy/api/global/[auth]apiResponse[apiErrorHandler].js:
--------------------------------------------------------------------------------
1 | import apiResponse from '../../../../../../../../modules/base/api/global/[auth]apiResponse[apiErrorHandler].js';
2 |
3 | export default apiResponse;
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/basecopy/api/global/[auth]payloadValidate.js:
--------------------------------------------------------------------------------
1 | import payloadValidate from '../../../../../../../../modules/base/api/global/[auth]payloadValidate.js';
2 |
3 | export default payloadValidate;
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/basecopy/api/global/[payloadValidate]escapeHtml.js:
--------------------------------------------------------------------------------
1 | import escapeHtml from '../../../../../../../../modules/base/api/global/[payloadValidate]escapeHtml.js';
2 |
3 | export default escapeHtml;
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/basecopy/pages/admin/adminStaticAsset/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/assets/*"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/basecopy/pages/admin/adminStaticAsset/staticAssets.js:
--------------------------------------------------------------------------------
1 | import staticMiddleware from '../../../../../../../../../modules/cms/pages/admin/adminStaticAsset/staticAssets.js';
2 |
3 | export default staticMiddleware;
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/basecopy/pages/admin/all/adminTitle.js:
--------------------------------------------------------------------------------
1 | export default (request, response, next) => {};
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/basecopy/pages/frontStore/all/title.js:
--------------------------------------------------------------------------------
1 | export default (request, response, next) => {};
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/basecopy/pages/frontStore/notFound/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/notFound"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/basecopy/pages/frontStore/staticAsset/[context]staticAssets[auth].js:
--------------------------------------------------------------------------------
1 | import staticMiddleware from '../../../../../../../../../modules/cms/pages/frontStore/staticAsset/[context]staticAssets[auth].js';
2 |
3 | export default staticMiddleware;
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/basecopy/pages/frontStore/staticAsset/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/assets/*"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/basecopy/pages/global/[auth]notFound[response].js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 | import notFound from '../../../../../../../../modules/base/pages/global/[auth]notFound[response].js';
3 |
4 | export default jest.fn(notFound);
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/basecopy/pages/global/[notFound]dummy[response].js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn((request, response, delegates) => {});
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/basecopy/pages/global/[response]errorHandler.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 | import errorHandler from '../../../../../../../../modules/base/pages/global/[response]errorHandler.js';
3 |
4 | export default jest.fn(errorHandler);
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/basecopy/pages/global/response[errorHandler].js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 | import response from '../../../../../../../../modules/base/pages/global/response[errorHandler].js';
3 |
4 | export default jest.fn(response);
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/delegate/pages/frontStore/delegateTest/asyncWithNext[collection].js:
--------------------------------------------------------------------------------
1 | import axios from 'axios';
2 |
3 | export default async (request, response, delegates, next) => {
4 | const content = await axios.get(
5 | 'https://jsonplaceholder.typicode.com/todos/1'
6 | );
7 | next();
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/delegate/pages/frontStore/delegateTest/async[collection].js:
--------------------------------------------------------------------------------
1 | import axios from 'axios';
2 |
3 | export default async (request, response, delegates) => {
4 | const content = await axios.get(
5 | 'https://jsonplaceholder.typicode.com/todos/1'
6 | );
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/delegate/pages/frontStore/delegateTest/collection.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | const test = jest.fn((delegates) => delegates);
4 | function collection(request, response, delegates) {
5 | test(delegates);
6 | }
7 | export default collection;
8 |
9 | export { test };
10 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/delegate/pages/frontStore/delegateTest/returnOne[returnTwo].js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn((request, response, delegates) => 1);
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/delegate/pages/frontStore/delegateTest/returnThree[collection].js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn((request, response, delegates) => 3);
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/delegate/pages/frontStore/delegateTest/returnTwo[returnThree].js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn((request, response, delegates, next) => {
4 | next();
5 | });
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/delegate/pages/frontStore/delegateTest/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/delegateTest"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/delegate/pages/frontStore/delegateTest/syncWithNext[collection].js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn((request, response, delegates, next) => {
4 | next();
5 | });
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/delegate/pages/frontStore/delegateTest/sync[collection].js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn((request, response, delegates) => {
4 | const a = 1;
5 | });
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/error/pages/frontStore/errorHandlerTest/errorInAsync.js:
--------------------------------------------------------------------------------
1 | export default async (request, response, delegates) => {
2 | const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
3 | await delay(3000);
4 | undefined.b = 1;
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/error/pages/frontStore/errorHandlerTest/errorInSync.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn((request, response, delegates) => {
4 | throw new Error('Error in sync');
5 | });
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/error/pages/frontStore/errorHandlerTest/errorInSyncWithNext.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn((request, response, delegates, next) => {
4 | next(new Error('Error in sync with next'));
5 | });
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/error/pages/frontStore/errorHandlerTest/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/errorHandlerTest"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/graphqlcopy/pages/global/[bodyParser]buildQuery[graphql].js:
--------------------------------------------------------------------------------
1 | export default (request, response) => {};
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/graphqlcopy/pages/global/[buildQuery]graphql[notFound].js:
--------------------------------------------------------------------------------
1 | export default (request, response) => {};
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/graphqlcopy/pages/global/bodyParser[buildQuery].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, stack, next) => {
4 | bodyParser.json({ inflate: false })(request, response, () => {
5 | bodyParser.urlencoded({ extended: true })(request, response, next);
6 | });
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/handler/pages/admin/productEdit/[loadProduct]loadCategory.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn((request, response, delegates) => {});
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/handler/pages/admin/productEdit/[loadProduct]loadProductImage.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn(async (request, response, delegates, next) => {
4 | next();
5 | });
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/handler/pages/admin/productEdit/loadProduct.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn(async (request, response, delegates, next) => {
4 | try {
5 | response.status(404);
6 | next();
7 | } catch (e) {
8 | next(e);
9 | }
10 | });
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/handler/pages/admin/productEdit/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/product/edit/:id"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/handler/pages/frontStore/middleware/[loadAttribute]loadOptions.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn((request, response, delegates) => {
4 | console.log('loadOptions');
5 | });
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/handler/pages/frontStore/middleware/[loadProductImage]loadAttribute.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn((request, response, delegates) => {
4 | console.log('loadAttribute');
5 | throw new Error('this is an error');
6 | });
7 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/handler/pages/frontStore/middleware/[loadProduct]loadCategory.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn((request, response, delegates) => {
4 | console.log('loadCategory');
5 | });
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/handler/pages/frontStore/middleware/[loadProduct]loadProductImage.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn(async (request, response, delegates, next) => {
4 | console.log('loadProductImage');
5 | next();
6 | });
7 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/handler/pages/frontStore/middleware/loadProduct.js:
--------------------------------------------------------------------------------
1 | import jest from 'jest-mock';
2 |
3 | export default jest.fn(async (request, response, delegates, next) => {
4 | console.log('loadProduct');
5 | next();
6 | });
7 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middleware/tests/app/modules/handler/pages/frontStore/middleware/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/middleware"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middlewares/bodyJson.js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, stack, next) => {
4 | bodyParser.json()(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/middlewares/multerNone.js:
--------------------------------------------------------------------------------
1 | import multer from 'multer';
2 |
3 | const upload = multer();
4 |
5 | export default (request, response, stack, next) => {
6 | upload.none()(request, response, next);
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/router/index.ts:
--------------------------------------------------------------------------------
1 | export { buildUrl } from './buildUrl.js';
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/router/tests/unit/a/invalidMethod/routeOne/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET", "INVALID"],
3 | "path": "/a/:url_key"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/router/tests/unit/a/invalidPath/routeTwo/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET", "POST"],
3 | "path": "invalidPath"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/router/tests/unit/b/routeOne/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET", "POST"],
3 | "path": "/a/:url_key"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/router/tests/unit/b/routeThree/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET", "PUT"],
3 | "path": "/b/:url_key"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/router/tests/unit/b/routeTwo/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/a/:url_key"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/util/events.ts:
--------------------------------------------------------------------------------
1 | export const FORM_VALIDATED = 'FORM_VALIDATED';
2 | export const FORM_SUBMIT = 'FORM_SUBMIT';
3 | export const FORM_FIELD_UPDATED = 'FORM_FIELD_UPDATED';
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/util/getConfig.ts:
--------------------------------------------------------------------------------
1 | import config from 'config';
2 |
3 | /**
4 | * Get the configuration value base on path. Return the default value if the path is not found.
5 | */
6 | export function getConfig(path: string, defaultValue?: T): T {
7 | return config.has(path) ? config.get(path) : (defaultValue as T);
8 | }
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/util/isAjax.ts:
--------------------------------------------------------------------------------
1 | import type { EvershopRequest } from '../../types/request.js';
2 |
3 | export function isAjax(request: EvershopRequest) {
4 | return request.get('X-Requested-With') === 'XMLHttpRequest';
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/util/isDevelopmentMode.ts:
--------------------------------------------------------------------------------
1 | export default (): boolean => process.env.NODE_ENV === 'development';
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/util/isProductionMode.ts:
--------------------------------------------------------------------------------
1 | export default (): boolean => process.env.NODE_ENV === 'production';
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/util/tests/unit/util.getConfig.test.js:
--------------------------------------------------------------------------------
1 | import { getConfig } from '../../getConfig.js';
2 |
3 | describe('Test until getConfig', () => {
4 | it('It should return the default value if path is invalid', () => {
5 | expect(getConfig('a.b', 1)).toEqual(1);
6 | expect(getConfig('a.b')).toEqual(undefined);
7 | });
8 | });
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/getRouteBuildPath.js:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { CONSTANTS } from '../helpers.js';
3 | import { getRouteBuildSubPath } from './getRouteBuildSubPath.js';
4 |
5 | export function getRouteBuildPath(route) {
6 | const subPath = getRouteBuildSubPath(route);
7 | return path.resolve(CONSTANTS.BUILDPATH, subPath);
8 | }
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/getRouteBuildSubPath.js:
--------------------------------------------------------------------------------
1 | export function getRouteBuildSubPath(route) {
2 | const { id, isAdmin } = route;
3 | return isAdmin === true ? `admin/${id}` : `frontStore/${id}`;
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/isBuildRequired.js:
--------------------------------------------------------------------------------
1 | export const isBuildRequired = (route) => {
2 | if (route.isApi || ['staticAsset', 'adminStaticAsset'].includes(route.id)) {
3 | return false;
4 | } else {
5 | return true;
6 | }
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/loaders/LayoutLoader.js:
--------------------------------------------------------------------------------
1 | export default function LayoutLoader(content) {
2 | // Regex matching 'export const layout = { ... }'
3 | const layoutRegex =
4 | /export\s+var\s+layout\s*=\s*{\s*areaId\s*:\s*['"]([^'"]+)['"],\s*sortOrder\s*:\s*(\d+)\s*,*\s*}/;
5 |
6 | return content.replace(layoutRegex, '');
7 | }
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/loaders/StyleLoader.js:
--------------------------------------------------------------------------------
1 | export default function StyleLoader() {
2 | return '';
3 | }
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionA/components/a/A.jsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionA/components/a/A.jsx
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionA/components/a/a.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionA/components/a/a.scss
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionA/components/b/B.jsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionA/components/b/B.jsx
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionA/components/b/B.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionA/components/b/B.scss
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionA/components/b/bb/BB.jsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionA/components/b/bb/BB.jsx
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionA/components/d/D.jsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionA/components/d/D.jsx
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionA/components/d/D.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionA/components/d/D.scss
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionA/components/d/dd/DD.jsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionA/components/d/dd/DD.jsx
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionB/components/a/A.jsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionB/components/a/A.jsx
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionB/components/a/a.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionB/components/a/a.scss
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionB/components/d/D.jsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionB/components/d/D.jsx
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionB/components/d/D.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionB/components/d/D.scss
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionB/components/d/dd/DD.jsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionB/components/d/dd/DD.jsx
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionB/components/e/E.jsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionB/components/e/E.jsx
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionB/components/e/E.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionB/components/e/E.scss
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionB/components/e/ee/EE.jsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/extensions/extensionB/components/e/ee/EE.jsx
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/theme/components/a/A.jsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/theme/components/a/A.jsx
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/theme/components/a/a.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/theme/components/a/a.scss
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/theme/components/b/B.jsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/theme/components/b/B.jsx
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/theme/components/b/B.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/theme/components/b/B.scss
--------------------------------------------------------------------------------
/packages/evershop/src/lib/webpack/tests/unit/theme/components/b/bb/BB.jsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evershopcommerce/evershop/980318d5c7970ed3eb08883d18c1e54bd76715f4/packages/evershop/src/lib/webpack/tests/unit/theme/components/b/bb/BB.jsx
--------------------------------------------------------------------------------
/packages/evershop/src/modules/auth/pages/admin/adminLogin/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/login"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/auth/pages/admin/adminLoginJson/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Admin User Login",
3 | "description": "Admin User Login",
4 | "methods": ["POST"],
5 | "path": "/user/login"
6 | }
7 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/auth/pages/admin/adminLogoutJson/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET", "POST"],
3 | "path": "/user/logout"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/auth/services/getAdminSessionCookieName.js:
--------------------------------------------------------------------------------
1 | import { getConfig } from '../../../lib/util/getConfig.js';
2 |
3 | export const getAdminSessionCookieName = () =>
4 | getConfig('system.session.adminCookieName', 'asid');
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/auth/services/getCookieSecret.js:
--------------------------------------------------------------------------------
1 | import { getConfig } from '../../../lib/util/getConfig.js';
2 |
3 | export const getCookieSecret = () =>
4 | getConfig('system.session.cookieSecret', 'keyboard cat');
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/auth/services/getFrontStoreSessionCookieName.js:
--------------------------------------------------------------------------------
1 | import { getConfig } from '../../../lib/util/getConfig.js';
2 |
3 | export const getFrontStoreSessionCookieName = () =>
4 | getConfig('system.session.cookieName', 'sid');
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/auth/services/logoutUser.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Logout a current user. This function must be accessed from the request object (request.logoutUser(callback))
3 | */
4 | export default function logoutUser() {
5 | this.session.userID = undefined;
6 | this.locals.user = undefined;
7 | }
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/base/graphql/types/Country/Country.graphql:
--------------------------------------------------------------------------------
1 | """
2 | The `Country` type represents a country.
3 | """
4 | type Country {
5 | name: String!
6 | code: String!
7 | provinces: [Province]
8 | }
9 |
10 | extend type Query {
11 | countries(countries: [String]): [Country]
12 | allowedCountries: [Country]
13 | }
14 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/base/graphql/types/Currency/Currency.graphql:
--------------------------------------------------------------------------------
1 | """
2 | A currency
3 | """
4 | type Currency {
5 | name: String!
6 | code: String!
7 | }
8 |
9 | extend type Query {
10 | currencies: [Currency]!
11 | }
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/base/graphql/types/Currency/Currency.resolvers.js:
--------------------------------------------------------------------------------
1 | import { currencies } from '../../../../../lib/locale/currencies.js';
2 |
3 | export default {
4 | Query: {
5 | currencies: () => currencies
6 | }
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/base/graphql/types/DateTime/DateTime.graphql:
--------------------------------------------------------------------------------
1 | """
2 | A DateTime is a string with a timezone.
3 | """
4 | type DateTime {
5 | value: String
6 | timezone: String
7 | text(format: String): String
8 | }
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/base/graphql/types/Province/Province.graphql:
--------------------------------------------------------------------------------
1 | """
2 | The `Province` type represents a province/state.
3 | """
4 | type Province {
5 | name: String!
6 | code: String!
7 | countryCode: String!
8 | }
9 |
10 | extend type Query {
11 | provinces(countries: [String]): [Province]
12 | }
13 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/base/graphql/types/Route/Route.admin.graphql:
--------------------------------------------------------------------------------
1 | """
2 | Represents a route in the system
3 | """
4 | type Route {
5 | id: String!
6 | isApi: Boolean!
7 | isAdmin: Boolean!
8 | name: String!
9 | path: String!
10 | method: [String!]!
11 | }
12 |
13 | extend type Query {
14 | routes: [Route!]!
15 | }
16 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/base/graphql/types/Route/Route.admin.resolvers.js:
--------------------------------------------------------------------------------
1 | import { getRoutes } from '../../../../../lib/router/Router.js';
2 |
3 | export default {
4 | Query: {
5 | routes: () => {
6 | const routes = getRoutes();
7 | return routes.filter((route) => route.name);
8 | }
9 | }
10 | };
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/base/graphql/types/Timezone/Timezone.graphql:
--------------------------------------------------------------------------------
1 | """
2 | A timezone
3 | """
4 | type Timezone {
5 | name: String!
6 | code: String!
7 | }
8 |
9 | extend type Query {
10 | timezones: [Timezone]!
11 | }
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/base/graphql/types/Timezone/Timezone.resolvers.js:
--------------------------------------------------------------------------------
1 | import { timezones } from '../../../../../lib/locale/timezones.js';
2 |
3 | export default {
4 | Query: {
5 | timezones: () => timezones
6 | }
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/base/graphql/types/Url/Url.graphql:
--------------------------------------------------------------------------------
1 | """
2 | A query parameter for a URL
3 | """
4 | input UrlParam {
5 | key: String!
6 | value: String!
7 | }
8 |
9 | extend type Query {
10 | url(routeId: String!, params: [UrlParam]): String!
11 | }
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/base/graphql/types/Version/Version.graphql:
--------------------------------------------------------------------------------
1 | extend type Query {
2 | version: String!
3 | }
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/base/pages/admin/all/[context]isAdmin[auth].js:
--------------------------------------------------------------------------------
1 | export default (request, response) => {
2 | request.isAdmin = true;
3 | response.context.isAdmin = true;
4 | };
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/base/services/secret.js:
--------------------------------------------------------------------------------
1 | import { v4 as uuidv4 } from 'uuid';
2 |
3 | const secret = uuidv4();
4 | export default secret;
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/addProductToCategory/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/addProductToCategory/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "product_id": {
5 | "type": "string"
6 | }
7 | },
8 | "required": ["product_id"],
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/addProductToCategory/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/categories/:category_id/products",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/addProductToCollection/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/addProductToCollection/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "product_id": {
5 | "type": "string"
6 | }
7 | },
8 | "required": ["product_id"],
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/addProductToCollection/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/collections/:collection_id/products",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/addVariantItem/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/addVariantItem/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "product_id": {
5 | "type": "string"
6 | }
7 | },
8 | "required": ["product_id"],
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/addVariantItem/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/variantGroups/:id/items",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createAttribute/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createAttribute/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/attributes",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createAttributeGroup/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createAttributeGroup/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "group_name": {
5 | "type": "string"
6 | }
7 | },
8 | "required": ["group_name"],
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createAttributeGroup/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/attributeGroups",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createCategory/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createCategory/createCategory[finish].js:
--------------------------------------------------------------------------------
1 | import createCategory from '../../services/category/createCategory.js';
2 |
3 | export default async (request, response, delegate) => {
4 | const result = await createCategory(request.body, {
5 | routeId: request.currentRoute.id
6 | });
7 | return result;
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createCategory/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "description": {
5 | "type": "string",
6 | "skipEscape": true
7 | }
8 | },
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createCategory/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/categories",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createCollection/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createCollection/createCollection[finish].js:
--------------------------------------------------------------------------------
1 | import createCollection from '../../services/collection/createCollection.js';
2 |
3 | export default async (request, response, delegate) => {
4 | const collection = await createCollection(request.body, {
5 | routeId: request.currentRoute.id
6 | });
7 | return collection;
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createCollection/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "description": {
5 | "type": "string",
6 | "skipEscape": true
7 | }
8 | },
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createCollection/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/collections",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createProduct/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createProduct/createProduct[finish].js:
--------------------------------------------------------------------------------
1 | import createProduct from '../../services/product/createProduct.js';
2 |
3 | export default async (request, response, delegate) => {
4 | const result = await createProduct(request.body, {
5 | routeId: request.currentRoute.id
6 | });
7 | return result;
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createProduct/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "description": {
5 | "type": "string",
6 | "skipEscape": true
7 | }
8 | },
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createProduct/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/products",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createVariantGroup/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/createVariantGroup/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/variantGroups",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/deleteAttribute/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/attributes/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/deleteAttributeGroup/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/attributeGroups/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/deleteCategory/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/categories/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/deleteCollection/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/collections/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/deleteProduct/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/products/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/removeProductFromCategory/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/removeProductFromCategory/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/categories/:category_id/products/:product_id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/removeProductFromCollection/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/removeProductFromCollection/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/collections/:collection_id/products/:product_id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/unlinkVariant/[context]multerNone[auth].js:
--------------------------------------------------------------------------------
1 | import multer from 'multer';
2 |
3 | const upload = multer();
4 |
5 | export default (request, response, stack, next) => {
6 | upload.none()(request, response, next);
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/unlinkVariant/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/variants/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/updateAttribute/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/updateAttribute/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/attributes/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/updateAttribute/updateAttribute[finish].js:
--------------------------------------------------------------------------------
1 | import updateProductAttribute from '../../services/attribute/updateProductAttribute.js';
2 |
3 | export default async (request, response, delegate) => {
4 | const result = await updateProductAttribute(request.params.id, request.body);
5 | return result;
6 | };
7 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/updateAttributeGroup/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/updateAttributeGroup/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "group_name": {
5 | "type": "string"
6 | }
7 | },
8 | "required": ["group_name"],
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/updateAttributeGroup/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/attributeGroups/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/updateCategory/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/updateCategory/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "description": {
5 | "type": "string",
6 | "skipEscape": true
7 | }
8 | },
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/updateCategory/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/categories/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/updateCategory/updateCategory[finish].js:
--------------------------------------------------------------------------------
1 | import updateCategory from '../../services/category/updateCategory.js';
2 |
3 | export default async (request, response, delegate) => {
4 | const category = await updateCategory(request.params.id, request.body, {
5 | routeId: request.currentRoute.id
6 | });
7 | return category;
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/updateCollection/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/updateCollection/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "description": {
5 | "type": "string",
6 | "skipEscape": true
7 | }
8 | },
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/updateCollection/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/collections/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/updateProduct/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/updateProduct/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "description": {
5 | "type": "string",
6 | "skipEscape": true
7 | }
8 | },
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/updateProduct/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/products/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/updateProduct/updateProduct[finish].js:
--------------------------------------------------------------------------------
1 | import updateProduct from '../../services/product/updateProduct.js';
2 |
3 | export default async (request, response, delegate) => {
4 | const product = await updateProduct(request.params.id, request.body, {
5 | routeId: request.currentRoute.id
6 | });
7 | return product;
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/api/variantSearch/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/variants",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/graphql/types/Category/Category.admin.graphql:
--------------------------------------------------------------------------------
1 | extend type Category {
2 | editUrl: String
3 | updateApi: String!
4 | deleteApi: String!
5 | addProductUrl: String
6 | }
7 |
8 | extend type Product {
9 | removeFromCategoryUrl: String
10 | }
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/graphql/types/Collection/Collection.admin.graphql:
--------------------------------------------------------------------------------
1 | extend type Collection {
2 | editUrl: String
3 | addProductUrl: String
4 | updateApi: String!
5 | deleteApi: String!
6 | }
7 |
8 | extend type Product {
9 | removeFromCollectionUrl: String
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/graphql/types/FeaturedProduct/FeaturedProduct.graphql:
--------------------------------------------------------------------------------
1 | extend type Query {
2 | featuredProducts(limit: Int): [Product]
3 | }
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/graphql/types/Product/CustomOption/CustomOption.resolvers.js:
--------------------------------------------------------------------------------
1 | export default {
2 | Product: {
3 | options: async () => [] // TODO: To be implemented
4 | }
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/graphql/types/Product/Inventory/Inventory.admin.graphql:
--------------------------------------------------------------------------------
1 | extend type Inventory {
2 | qty: Int!
3 | }
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/graphql/types/Product/Inventory/Inventory.admin.resolvers.js:
--------------------------------------------------------------------------------
1 | export default {
2 | Inventory: {
3 | qty: (inventory) => inventory.qty || 0
4 | }
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/graphql/types/Product/Inventory/Inventory.graphql:
--------------------------------------------------------------------------------
1 | """
2 | The `Inventory` type represents a product's inventory information.
3 | """
4 | type Inventory {
5 | isInStock: Boolean!
6 | stockAvailability: Int!
7 | manageStock: Int!
8 | }
9 |
10 | extend type Product {
11 | inventory: Inventory!
12 | }
13 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/graphql/types/Product/Price/ProductPrice.graphql:
--------------------------------------------------------------------------------
1 | """
2 | Represents a price for a product.
3 | """
4 | type ProductPrice {
5 | regular: Price!
6 | special: Price!
7 | }
8 |
9 | extend type Product {
10 | price: ProductPrice!
11 | }
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/graphql/types/Product/Price/ProductPrice.resolvers.js:
--------------------------------------------------------------------------------
1 | export default {
2 | Product: {
3 | price: (product) => {
4 | const price = parseFloat(product.price);
5 | return {
6 | regular: price,
7 | special: price // TODO: implement special price
8 | };
9 | }
10 | }
11 | };
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/graphql/types/Product/Product.admin.graphql:
--------------------------------------------------------------------------------
1 | extend type Product {
2 | editUrl: String
3 | updateApi: String!
4 | deleteApi: String!
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/graphql/types/Widget/CollectionProductsWidget/CollectionProductsWidget.graphql:
--------------------------------------------------------------------------------
1 | """
2 | Return a collection products Widget
3 | """
4 | type CollectionProductsWidget {
5 | collection: String
6 | count: Int
7 | }
8 |
9 | extend type Query {
10 | collectionProductsWidget(collection: String, count: Int): CollectionProductsWidget
11 | }
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/graphql/types/Widget/CollectionProductsWidget/CollectionProductsWidget.resolvers.js:
--------------------------------------------------------------------------------
1 | export default {
2 | Query: {
3 | collectionProductsWidget: async (root, { collection, count }) => ({
4 | collection,
5 | count: count ? parseInt(count, 10) : 5
6 | })
7 | }
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/attributeEdit+attributeNew/FormContent.scss:
--------------------------------------------------------------------------------
1 | .page-heading {
2 | max-width: 100rem;
3 | }
4 | .main-content-inner {
5 | max-width: 100rem;
6 | margin: 0 auto;
7 | }
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/attributeEdit/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/attributes/edit/:id"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/attributeGrid/Heading.jsx:
--------------------------------------------------------------------------------
1 | import PageHeading from '@components/admin/cms/PageHeading';
2 | import React from 'react';
3 |
4 | export default function Heading() {
5 | return ;
6 | }
7 |
8 | export const layout = {
9 | areaId: 'content',
10 | sortOrder: 10
11 | };
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/attributeGrid/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/attributes"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/attributeNew/index.js:
--------------------------------------------------------------------------------
1 | import { setContextValue } from '../../../../graphql/services/contextHelper.js';
2 |
3 | export default (request, response) => {
4 | setContextValue(request, 'pageInfo', {
5 | title: 'Create a new attribute',
6 | description: 'Create a new attribute'
7 | });
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/attributeNew/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/attributes/new"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/categoryEdit+categoryNew/FormContent.scss:
--------------------------------------------------------------------------------
1 | .page-heading {
2 | max-width: 100rem;
3 | }
4 | .main-content-inner {
5 | max-width: 100rem;
6 | margin: 0 auto;
7 | }
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/categoryEdit/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/categories/edit/:id"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/categoryGrid/Heading.jsx:
--------------------------------------------------------------------------------
1 | import PageHeading from '@components/admin/cms/PageHeading';
2 | import React from 'react';
3 |
4 | export default function Heading() {
5 | return ;
6 | }
7 |
8 | export const layout = {
9 | areaId: 'content',
10 | sortOrder: 10
11 | };
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/categoryGrid/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/categories"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/categoryNew/index.js:
--------------------------------------------------------------------------------
1 | import { setContextValue } from '../../../../graphql/services/contextHelper.js';
2 |
3 | export default (request, response) => {
4 | setContextValue(request, 'pageInfo', {
5 | title: 'Create a new category',
6 | description: 'Create a new category'
7 | });
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/categoryNew/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/categories/new"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/collectionEdit+collectionNew/FormContent.scss:
--------------------------------------------------------------------------------
1 | .page-heading {
2 | max-width: 100rem;
3 | }
4 | .main-content-inner {
5 | max-width: 100rem;
6 | margin: 0 auto;
7 | }
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/collectionEdit/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/collections/edit/:id"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/collectionGrid/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/collections"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/collectionNew/index.js:
--------------------------------------------------------------------------------
1 | import { setContextValue } from '../../../../graphql/services/contextHelper.js';
2 |
3 | export default (request, response) => {
4 | setContextValue(request, 'pageInfo', {
5 | title: 'Create a new collection',
6 | description: 'Create a new collection'
7 | });
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/collectionNew/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/collections/new"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/productEdit+productNew/FormContent.scss:
--------------------------------------------------------------------------------
1 | .page-heading {
2 | max-width: 100rem;
3 | }
4 | .main-content-inner {
5 | max-width: 100rem;
6 | margin: 0 auto;
7 | }
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/productEdit/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/products/edit/:id"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/productGrid/Heading.jsx:
--------------------------------------------------------------------------------
1 | import PageHeading from '@components/admin/cms/PageHeading';
2 | import React from 'react';
3 |
4 | export default function Heading() {
5 | return ;
6 | }
7 |
8 | export const layout = {
9 | areaId: 'content',
10 | sortOrder: 10
11 | };
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/productGrid/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/products"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/productNew/index.js:
--------------------------------------------------------------------------------
1 | import { setContextValue } from '../../../../graphql/services/contextHelper.js';
2 |
3 | export default (request, response) => {
4 | setContextValue(request, 'pageInfo', {
5 | title: 'Create a new product',
6 | description: 'Create a new product'
7 | });
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/admin/productNew/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/products/new"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/frontStore/catalogSearch/General.scss:
--------------------------------------------------------------------------------
1 | .category-name {
2 | font-size: 4rem;
3 | text-transform: uppercase;
4 | font-weight: 700;
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/frontStore/catalogSearch/Sorting.jsx:
--------------------------------------------------------------------------------
1 | import Sorting from '@components/frontStore/catalog/product/list/Sorting';
2 | import React from 'react';
3 |
4 | export default function SortingWrapper() {
5 | return ;
6 | }
7 |
8 | export const layout = {
9 | areaId: 'oneColumn',
10 | sortOrder: 15
11 | };
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/frontStore/catalogSearch/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/search",
4 | "name": "Catalog search page"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/frontStore/categoryView/Sorting.jsx:
--------------------------------------------------------------------------------
1 | import Sorting from '@components/frontStore/catalog/product/list/Sorting';
2 | import React from 'react';
3 |
4 | export default function SortingWrapper() {
5 | return ;
6 | }
7 |
8 | export const layout = {
9 | areaId: 'rightColumn',
10 | sortOrder: 15
11 | };
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/frontStore/categoryView/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/category/:uuid",
4 | "name": "Category page"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/frontStore/productView/GeneralInfo.scss:
--------------------------------------------------------------------------------
1 | .product-single-name {
2 | text-transform: capitalize;
3 | }
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/pages/frontStore/productView/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/product/:uuid",
4 | "name": "Product single page"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/services/getAttributeGroupsBaseQuery.js:
--------------------------------------------------------------------------------
1 | import { select } from '@evershop/postgres-query-builder';
2 |
3 | export const getAttributeGroupsBaseQuery = () =>
4 | select().from('attribute_group');
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/services/getAttributesBaseQuery.js:
--------------------------------------------------------------------------------
1 | import { select } from '@evershop/postgres-query-builder';
2 |
3 | export const getAttributesBaseQuery = () => select().from('attribute');
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/catalog/services/getCollectionsBaseQuery.ts:
--------------------------------------------------------------------------------
1 | import { select } from '@evershop/postgres-query-builder';
2 | import type { SelectQuery } from '@evershop/postgres-query-builder';
3 |
4 | export const getCollectionsBaseQuery = (): SelectQuery => {
5 | const query = select().from('collection');
6 | return query;
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/addCartAddress/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/addCartAddress/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/carts/:cart_id/addresses",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/addCartContactInfo/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/addCartContactInfo/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/carts/:cart_id/contacts",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/addCartItem/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/addCartItem/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/cart/:cart_id/items",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/addCartPaymentMethod/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/addCartPaymentMethod/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/carts/:cart_id/paymentMethods",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/addCartShippingMethod/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/addCartShippingMethod/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/carts/:cart_id/shippingMethods",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/addMineCartItem/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/addMineCartItem/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/cart/mine/items",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/addShippingNote/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/addShippingNote/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "note": {
5 | "type": "string"
6 | }
7 | },
8 | "required": ["note"],
9 | "additionalProperties": false,
10 | "errorMessage": {
11 | "properties": {
12 | "note": "Note is required"
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/addShippingNote/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/carts/:cart_id/shippingNotes",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/addShippingZoneMethod/[context]borderParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/addShippingZoneMethod/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/shippingZones/:id/methods",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/createCart/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/createCart/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/carts",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/createOrder/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/createOrder/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/orders",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/createShippingMethod/[context]borderParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/createShippingMethod/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "name": {
5 | "type": "string"
6 | }
7 | },
8 | "additionalProperties": true,
9 | "required": ["name"]
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/createShippingMethod/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/shippingMethods",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/createShippingZone/[context]borderParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/createShippingZone/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/shippingZones",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/deleteShippingZone/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/shippingZones/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/deleteShippingZoneMethod/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/shippingZones/:zone_id/methods/:method_id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/getPaymentMethods/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/paymentMethods",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/getShippingMethods/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/shippingMethods/:cart_id",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/removeCartItem/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/cart/:cart_id/items/:item_id",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/removeMineCartItem/[getCurrentCustomer]detectCurrentCart.js:
--------------------------------------------------------------------------------
1 | import detectCurrentCartMiddleware from '../addMineCartItem/[getCurrentCustomer]detectCurrentCart.js';
2 |
3 | export default detectCurrentCartMiddleware;
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/removeMineCartItem/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/cart/mine/items/:item_id",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/updateCartItemQty/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/updateCartItemQty/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/cart/:cart_id/items/:item_id",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/updateMineCartItemQty/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/updateMineCartItemQty/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/cart/mine/items/:item_id",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/updateShippingMethod/[context]borderParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/updateShippingMethod/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "name": {
5 | "type": "string"
6 | }
7 | },
8 | "additionalProperties": true,
9 | "required": ["name"]
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/updateShippingMethod/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/shippingMethods/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/updateShippingZone/[context]borderParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/updateShippingZone/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/shippingZones/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/updateShippingZoneMethod/[context]borderParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/updateShippingZoneMethod/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/shippingZones/:zone_id/methods/:method_id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/api/updateShippingZoneMethod/validateMethod.js:
--------------------------------------------------------------------------------
1 | import validate from '../addShippingZoneMethod/validateMethod.js';
2 |
3 | export default async (request, response, delegate, next) =>
4 | validate(request, response, delegate, next);
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/graphql/types/Checkout/Checkout.graphql:
--------------------------------------------------------------------------------
1 | """
2 | Represents a checkout object in the store.
3 | """
4 | type Checkout {
5 | cartId: String!
6 | }
7 |
8 | extend type Query {
9 | checkout: Checkout!
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/graphql/types/Checkout/Checkout.resolvers.js:
--------------------------------------------------------------------------------
1 | export default {
2 | Query: {
3 | checkout: async (r, c, { cartId }) => ({
4 | cartId
5 | })
6 | }
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/graphql/types/CheckoutSetting/CheckoutSetting.graphql:
--------------------------------------------------------------------------------
1 | extend type Setting {
2 | showShippingNote: Boolean
3 | }
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/graphql/types/CheckoutSetting/CheckoutSetting.resolvers.js:
--------------------------------------------------------------------------------
1 | import { getConfig } from '../../../../../lib/util/getConfig.js';
2 |
3 | export default {
4 | Setting: {
5 | showShippingNote: () => getConfig('checkout.showShippingNote', true)
6 | }
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/graphql/types/Date/Date.graphql:
--------------------------------------------------------------------------------
1 | """
2 | A date field.
3 | """
4 | type Date {
5 | value: String
6 | text: String
7 | }
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/graphql/types/Date/Date.resolvers.js:
--------------------------------------------------------------------------------
1 | import dayjs from 'dayjs';
2 |
3 | export default {
4 | Date: {
5 | value: (raw) => raw,
6 | text: (raw) => dayjs(raw).format('MMM D, YYYY')
7 | }
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/graphql/types/Price/Price.graphql:
--------------------------------------------------------------------------------
1 | """
2 | Represents a price value.
3 | """
4 | type Price {
5 | value: Float!
6 | currency(currency: String): String!
7 | text(currency: String): String!
8 | }
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/graphql/types/ShippingMethod/ShippingMethod.graphql:
--------------------------------------------------------------------------------
1 | """
2 | Represents a shipping method.
3 | """
4 | type ShippingMethod {
5 | shippingMethodId: Int!
6 | uuid: String!
7 | name: String!
8 | updateApi: String!
9 | }
10 |
11 | extend type Query {
12 | shippingMethods: [ShippingMethod]
13 | }
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/graphql/types/Weight/Weight.graphql:
--------------------------------------------------------------------------------
1 | """
2 | Represents a weight value.
3 | """
4 | type Weight {
5 | value: Float!
6 | unit: String!
7 | text: String!
8 | }
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/pages/admin/shippingSetting/index.js:
--------------------------------------------------------------------------------
1 | import { setContextValue } from '../../../../graphql/services/contextHelper.js';
2 |
3 | export default (request) => {
4 | setContextValue(request, 'pageInfo', {
5 | title: 'Shipping Setting',
6 | description: 'Shipping Setting'
7 | });
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/pages/admin/shippingSetting/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/setting/shipping"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/pages/frontStore/cart/Summary.scss:
--------------------------------------------------------------------------------
1 | .shopping-cart-checkout-btn {
2 | .button {
3 | font-size: 13px;
4 | letter-spacing: 0.05em;
5 | width: 100%;
6 | text-align: center;
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/pages/frontStore/cart/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/cart",
4 | "name": "Cart page"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/pages/frontStore/checkout/SummaryMobile.scss:
--------------------------------------------------------------------------------
1 | .checkout-summary.checkout__summary__mobile {
2 | min-height: auto;
3 | &::after {
4 | display: none;
5 | background-color: none;
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/pages/frontStore/checkout/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/checkout",
4 | "name": "Checkout page"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/pages/frontStore/checkoutSuccess/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/checkout/success/:orderId?",
4 | "name": "Checkout success page"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/checkout/tests/taxRates.js:
--------------------------------------------------------------------------------
1 | export const taxRates = [0, 10, 15, 7.25, 5.37];
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/createCmsPage/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/createCmsPage/createPage[finish].js:
--------------------------------------------------------------------------------
1 | import createPage from '../../services/page/createPage.js';
2 |
3 | export default async (request, response, delegate) => {
4 | const data = request.body;
5 | const result = await createPage(data, {
6 | routeId: request.currentRoute.id
7 | });
8 |
9 | return result;
10 | };
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/createCmsPage/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "content": {
5 | "type": "string",
6 | "skipEscape": true
7 | }
8 | },
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/createCmsPage/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/pages",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/createWidget/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/createWidget/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/widgets",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/deleteCmsPage/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/pages/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/deleteWidget/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/widgets/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/fileBrowser/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/files/*",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/fileDelete/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/files/*",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/fileUpload/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/files/*",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/folderCreate/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/folderCreate/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "path": {
5 | "type": "string"
6 | }
7 | },
8 | "required": ["path"],
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/folderCreate/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/folders",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/imageUpload/[context]multerFile[auth].js:
--------------------------------------------------------------------------------
1 | import multerFileMiddleware from '../fileUpload/[context]multerFile[auth].js';
2 |
3 | export default multerFileMiddleware;
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/imageUpload/[context]validatePath[multerFile].js:
--------------------------------------------------------------------------------
1 | import validatePathMiddelware from '../fileUpload/[context]validatePath[multerFile].js';
2 |
3 | export default validatePathMiddelware;
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/imageUpload/[multerFile]upload.js:
--------------------------------------------------------------------------------
1 | import uploadMiddleware from '../fileUpload/[multerFile]upload.js';
2 |
3 | export default uploadMiddleware;
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/imageUpload/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/images/*",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/updateCmsPage/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/updateCmsPage/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "content": {
5 | "type": "string",
6 | "skipEscape": true
7 | }
8 | },
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/updateCmsPage/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/pages/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/updateWidget/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/api/updateWidget/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/widgets/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/graphql/types/Menu/Menu.graphql:
--------------------------------------------------------------------------------
1 | """
2 | Represents a menu item
3 | """
4 | type MenuItem {
5 | name: String!
6 | url: String!
7 | children: [MenuItem]
8 | }
9 |
10 | """
11 | Represents a menu
12 | """
13 | type Menu {
14 | items: [MenuItem]
15 | }
16 |
17 | extend type Query {
18 | menu: Menu
19 | }
20 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/graphql/types/ThemeConfig/ThemeConfig.resolvers.js:
--------------------------------------------------------------------------------
1 | import { getConfig } from '../../../../../lib/util/getConfig.js';
2 |
3 | export default {
4 | Query: {
5 | themeConfig: () => getConfig('themeConfig')
6 | }
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/adminNotFound/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/notfound"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/adminStaticAsset/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/assets/*"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/adminStaticAsset/staticAssets.js:
--------------------------------------------------------------------------------
1 | import staticMiddleware from '../../../../../lib/middlewares/static.js';
2 |
3 | export default (request, response, stack, next) => {
4 | staticMiddleware(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/all/Logo.scss:
--------------------------------------------------------------------------------
1 | .logo {
2 | display: flex;
3 | a {
4 | align-self: center;
5 | color: var(--primary);
6 | padding: 3px;
7 | svg {
8 | width: 4rem;
9 | height: 3rem;
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/all/tailwind.scss:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/cmsPageEdit+cmsPageNew/FormContent.scss:
--------------------------------------------------------------------------------
1 | .page-heading {
2 | max-width: 100rem;
3 | }
4 | .main-content-inner {
5 | max-width: 100rem;
6 | margin: 0 auto;
7 | }
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/cmsPageEdit/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/pages/edit/:id"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/cmsPageGrid/Heading.jsx:
--------------------------------------------------------------------------------
1 | import PageHeading from '@components/admin/cms/PageHeading';
2 | import React from 'react';
3 |
4 | export default function Heading() {
5 | return ;
6 | }
7 |
8 | export const layout = {
9 | areaId: 'content',
10 | sortOrder: 10
11 | };
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/cmsPageGrid/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/pages"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/cmsPageNew/index.js:
--------------------------------------------------------------------------------
1 | import { setContextValue } from '../../../../graphql/services/contextHelper.js';
2 |
3 | export default (request, response) => {
4 | setContextValue(request, 'pageInfo', {
5 | title: 'Create a new cms page',
6 | description: 'Create a new cms page'
7 | });
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/cmsPageNew/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/pages/new"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/dashboard/Layout.scss:
--------------------------------------------------------------------------------
1 | .page-heading {
2 | max-width: 100rem;
3 | }
4 | .main-content-inner {
5 | max-width: 100rem;
6 | margin: 3rem auto;
7 | }
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/dashboard/PageHeading.jsx:
--------------------------------------------------------------------------------
1 | import PageHeading from '@components/admin/cms/PageHeading';
2 | import React from 'react';
3 |
4 | export default function PageEditPageHeading() {
5 | return ;
6 | }
7 |
8 | export const layout = {
9 | areaId: 'content',
10 | sortOrder: 5
11 | };
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/dashboard/index.js:
--------------------------------------------------------------------------------
1 | import { setContextValue } from '../../../../graphql/services/contextHelper.js';
2 |
3 | export default (request, response) => {
4 | setContextValue(request, 'pageInfo', {
5 | title: 'Dashboard',
6 | description: 'dashboard'
7 | });
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/dashboard/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/widgetEdit+widgetNew/FormContent.scss:
--------------------------------------------------------------------------------
1 | .page-heading {
2 | max-width: 100rem;
3 | }
4 | .main-content-inner {
5 | max-width: 100rem;
6 | margin: 0 auto;
7 | }
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/widgetEdit/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/widgets/edit/:id"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/widgetGrid/Heading.jsx:
--------------------------------------------------------------------------------
1 | import PageHeading from '@components/admin/cms/PageHeading';
2 | import React from 'react';
3 |
4 | export default function Heading() {
5 | return ;
6 | }
7 |
8 | export const layout = {
9 | areaId: 'content',
10 | sortOrder: 10
11 | };
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/widgetGrid/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/widgets"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/widgetNew/index.js:
--------------------------------------------------------------------------------
1 | import { setContextValue } from '../../../../graphql/services/contextHelper.js';
2 |
3 | export default (request, response) => {
4 | setContextValue(request, 'pageInfo', {
5 | title: 'Create a new widget',
6 | description: 'Create a new widget'
7 | });
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/admin/widgetNew/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/widgets/new/:type"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/frontStore/all/Logo.scss:
--------------------------------------------------------------------------------
1 | .logo {
2 | a.logo-icon {
3 | svg {
4 | width: 4rem;
5 | height: 4rem;
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/frontStore/all/tailwind.scss:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/frontStore/cmsPageView/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/page/:url_key",
4 | "name": "Static Page"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/frontStore/homepage/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/",
4 | "name": "Home Page"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/frontStore/notFound/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/notfound",
4 | "name": "Not Found"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/frontStore/staticAsset/[context]staticAssets[auth].js:
--------------------------------------------------------------------------------
1 | import staticMiddleware from '../../../../../lib/middlewares/static.js';
2 |
3 | export default (request, response, delegate, next) => {
4 | staticMiddleware(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/pages/frontStore/staticAsset/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/assets/*"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cms/services/getWidgetsBaseQuery.js:
--------------------------------------------------------------------------------
1 | import { select } from '@evershop/postgres-query-builder';
2 |
3 | export const getWidgetsBaseQuery = () => {
4 | const query = select().from('widget');
5 |
6 | return query;
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cod/api/codCapturePayment/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cod/api/codCapturePayment/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "order_id": {
5 | "type": "string"
6 | }
7 | },
8 | "required": ["order_id"],
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cod/api/codCapturePayment/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/cod/captures",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/cod/graphql/types/CODSetting/CODSetting.graphql:
--------------------------------------------------------------------------------
1 | extend type Setting {
2 | codPaymentStatus: Int
3 | codDislayName: String
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/api/createCustomer/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/api/createCustomer/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/customers",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/api/createCustomerAddress/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/api/createCustomerAddress/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/customers/:customer_id/addresses",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/api/deleteCustomer/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/customers/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/api/deleteCustomerAddress/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/customers/:customer_id/addresses/:address_id",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/api/resetPassword/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/api/resetPassword/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "email": {
5 | "type": "string",
6 | "format": "email"
7 | }
8 | },
9 | "required": ["email"],
10 | "additionalProperties": true
11 | }
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/api/resetPassword/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/customers/reset-password",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/api/updateCustomer/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/api/updateCustomer/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/customers/:id",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/api/updateCustomerAddress/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/api/updateCustomerAddress/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/customers/:customer_id/addresses/:address_id",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/api/updatePassword/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/api/updatePassword/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "password": {
5 | "type": "string"
6 | },
7 | "token": {
8 | "type": "string"
9 | }
10 | },
11 | "required": ["password", "token"],
12 | "additionalProperties": true
13 | }
14 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/api/updatePassword/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/customers/password",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/graphql/types/Customer/CustomerSetting.graphql:
--------------------------------------------------------------------------------
1 | extend type Setting {
2 | customerAddressSchema: JSON
3 | }
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/graphql/types/Customer/CustomerSetting.resolvers.js:
--------------------------------------------------------------------------------
1 | import { getConfig } from '../../../../../lib/util/getConfig.js';
2 |
3 | export default {
4 | Setting: {
5 | customerAddressSchema: () => getConfig('customer.addressSchema', undefined)
6 | }
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/graphql/types/CustomerGroup/CustomerGroup.graphql:
--------------------------------------------------------------------------------
1 | """
2 | Represents a customer group.
3 | """
4 | type CustomerGroup {
5 | customerGroupId: Int!
6 | groupName: String!
7 | }
8 |
9 | extend type Customer {
10 | group: CustomerGroup
11 | }
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/pages/admin/customerEdit/CustomerEditForm.scss:
--------------------------------------------------------------------------------
1 | .page-heading {
2 | max-width: 100rem;
3 | }
4 | .main-content-inner {
5 | max-width: 100rem;
6 | margin: 0 auto;
7 | }
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/pages/admin/customerEdit/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/customers/edit/:id"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/pages/admin/customerGrid/Heading.jsx:
--------------------------------------------------------------------------------
1 | import PageHeading from '@components/admin/cms/PageHeading';
2 | import React from 'react';
3 |
4 | export default function Heading() {
5 | return ;
6 | }
7 |
8 | export const layout = {
9 | areaId: 'content',
10 | sortOrder: 10
11 | };
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/pages/admin/customerGrid/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/customers"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/pages/frontStore/account/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/account",
4 | "name": "Account page"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/pages/frontStore/accountEdit/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/account/edit",
4 | "name": "Account edit page"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/pages/frontStore/customerLoginJson/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "email": {
5 | "type": "string",
6 | "format": "email"
7 | },
8 | "password": {
9 | "type": "string"
10 | }
11 | },
12 | "required": ["email", "password"]
13 | }
14 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/pages/frontStore/customerLoginJson/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/customer/login"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/pages/frontStore/customerLogoutJson/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET", "POST"],
3 | "path": "/customer/logout"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/pages/frontStore/login/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/account/login",
4 | "name": "Login page"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/pages/frontStore/register/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/account/register",
4 | "name": "Register page"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/pages/frontStore/resetPasswordPage/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/account/reset-password",
4 | "name": "Reset password page"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/pages/frontStore/updatePasswordPage/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/account/update-password",
4 | "name": "Update password page"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/services/customer/logoutCustomer.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Logout the current customer. This function must be accessed from the request object (request.logoutCustomer(callback))
3 | */
4 | function logoutCustomer() {
5 | this.session.customerID = undefined;
6 | this.locals.customer = undefined;
7 | }
8 |
9 | export default logoutCustomer;
10 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/services/getCustomerGroupsBaseQuery.js:
--------------------------------------------------------------------------------
1 | import { select } from '@evershop/postgres-query-builder';
2 |
3 | export const getCustomerGroupsBaseQuery = () => {
4 | const query = select().from('customer_group');
5 |
6 | return query;
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/services/getCustomersBaseQuery.ts:
--------------------------------------------------------------------------------
1 | import { select, SelectQuery } from '@evershop/postgres-query-builder';
2 |
3 | export const getCustomersBaseQuery = (): SelectQuery => {
4 | const query = select().from('customer');
5 |
6 | return query;
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/customer/services/index.ts:
--------------------------------------------------------------------------------
1 | import { getCustomersBaseQuery } from './getCustomersBaseQuery.js';
2 |
3 | export { getCustomersBaseQuery };
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/graphql/api/adminGraphql/[bodyParser]graphql.js:
--------------------------------------------------------------------------------
1 | import schema from '../../services/buildSchema.js';
2 | import { graphqlMiddleware } from '../../services/graphqlMiddleware.js';
3 |
4 | const middleware = graphqlMiddleware(schema);
5 | export default middleware;
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/graphql/api/adminGraphql/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/graphql/api/adminGraphql/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET", "POST"],
3 | "path": "/admin/graphql",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/graphql/api/graphql/[bodyParser]graphql.js:
--------------------------------------------------------------------------------
1 | import schema from '../../services/buildStoreFrontSchema.js';
2 | import { graphqlMiddleware } from '../../services/graphqlMiddleware.js';
3 |
4 | const middleware = graphqlMiddleware(schema);
5 | export default middleware;
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/graphql/api/graphql/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/graphql/api/graphql/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET", "POST"],
3 | "path": "/graphql",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/graphql/bootstrap.js:
--------------------------------------------------------------------------------
1 | import '../../modules/graphql/services/buildSchema.js';
2 |
3 | export default () => {};
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/graphql/graphql/types/Query/Query.graphql:
--------------------------------------------------------------------------------
1 | """
2 | The root query type, represents all of the entry points into our object graph.
3 | """
4 | type Query {
5 | hello: String!
6 | }
7 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/graphql/graphql/types/Query/Query.resolvers.js:
--------------------------------------------------------------------------------
1 | export default {
2 | Query: {
3 | hello: () => 'Hello EverShop!'
4 | }
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/graphql/pages/global/bodyParser[buildQuery].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, () => {
5 | bodyParser.urlencoded({ extended: true })(request, response, next);
6 | });
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/graphql/services/index.ts:
--------------------------------------------------------------------------------
1 | export * from './contextHelper.js';
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/api/cancelOrder/[context]borderParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/api/cancelOrder/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "reason": {
5 | "type": "string"
6 | }
7 | },
8 | "required": ["reason"],
9 | "additionalProperties": true,
10 | "errorMessage": {
11 | "properties": {
12 | "reason": "Reason is mandatory"
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/api/cancelOrder/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/orders/:id/cancel",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/api/createShipment/[context]borderParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/api/createShipment/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "carrier": {
5 | "type": "string"
6 | },
7 | "tracking_number": {
8 | "type": "string"
9 | }
10 | },
11 | "additionalProperties": true
12 | }
13 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/api/createShipment/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/orders/:id/shipments",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/api/lifetimesales/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/lifetimesales",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/api/markDelivered/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/api/markDelivered/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "order_id": {
5 | "type": "string"
6 | }
7 | },
8 | "additionalProperties": true
9 | }
10 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/api/markDelivered/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/deliveries",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/api/salestatistic/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/salestatistic",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/api/updateShipment/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/api/updateShipment/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "carrier": {
5 | "type": "string"
6 | },
7 | "tracking_number": {
8 | "type": "string"
9 | }
10 | },
11 | "additionalProperties": true
12 | }
13 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/api/updateShipment/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/orders/:order_id/shipments/:shipment_id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/graphql/types/BestSeller/BestSeller.admin.graphql:
--------------------------------------------------------------------------------
1 | extend type Product {
2 | soldQty: Int
3 | }
4 |
5 | extend type Query {
6 | bestSellers: [Product]
7 | }
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/graphql/types/Carrier/Carrier.admin.graphql:
--------------------------------------------------------------------------------
1 | """
2 | The `Carrier` type defines the shipping carrier.
3 | """
4 | type Carrier {
5 | name: String!
6 | code: String!
7 | trackingUrl: String
8 | }
9 |
10 | extend type Query {
11 | carriers: [Carrier]
12 | }
13 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/pages/admin/orderEdit/Layout.scss:
--------------------------------------------------------------------------------
1 | .page-heading {
2 | max-width: 100rem;
3 | }
4 | .main-content-inner {
5 | max-width: 100rem;
6 | margin: 0 auto;
7 | }
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/pages/admin/orderEdit/Payment.scss:
--------------------------------------------------------------------------------
1 | .summary-row {
2 | display: grid;
3 | grid-gap: 0.85rem;
4 | grid-template-columns: 14rem auto;
5 | > div {
6 | display: grid;
7 | grid-gap: 0.85rem;
8 | grid-template-columns: 1fr auto;
9 | }
10 | }
11 | .summary-wrapper {
12 | display: grid;
13 | grid-row-gap: 0.85rem;
14 | }
15 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/pages/admin/orderEdit/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/order/edit/:id"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/pages/admin/orderGrid/Heading.jsx:
--------------------------------------------------------------------------------
1 | import PageHeading from '@components/admin/cms/PageHeading';
2 | import React from 'react';
3 |
4 | export default function Heading() {
5 | return ;
6 | }
7 |
8 | export const layout = {
9 | areaId: 'content',
10 | sortOrder: 10
11 | };
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/pages/admin/orderGrid/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/orders"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/oms/services/getOrdersBaseQuery.js:
--------------------------------------------------------------------------------
1 | import { select } from '@evershop/postgres-query-builder';
2 |
3 | export const getOrdersBaseQuery = () => {
4 | const query = select().from('order');
5 |
6 | return query;
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/paypal/api/paypalAuthorizePayment/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/paypal/api/paypalAuthorizePayment/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "order_id": {
5 | "type": "string"
6 | }
7 | },
8 | "required": ["order_id"],
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/paypal/api/paypalAuthorizePayment/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/paypal/authorizedTransactions",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/paypal/api/paypalCaptureAuthorizedPayment/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/paypal/api/paypalCaptureAuthorizedPayment/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "order_id": {
5 | "type": "string"
6 | }
7 | },
8 | "required": ["order_id"],
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/paypal/api/paypalCaptureAuthorizedPayment/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/paypal/authorizations/capture",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/paypal/api/paypalCapturePayment/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/paypal/api/paypalCapturePayment/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "order_id": {
5 | "type": "string"
6 | }
7 | },
8 | "required": ["order_id"],
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/paypal/api/paypalCapturePayment/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/paypal/captureTransactions",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/paypal/api/paypalCreateOrder/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/paypal/api/paypalCreateOrder/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "order_id": {
5 | "type": "string"
6 | }
7 | },
8 | "required": ["order_id"],
9 | "additionalProperties": true
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/paypal/api/paypalCreateOrder/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/paypal/orders",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/paypal/graphql/types/PaypalSetting/PaypalSetting.admin.graphql:
--------------------------------------------------------------------------------
1 | extend type Setting {
2 | paypalPaymentStatus: Int
3 | paypalClientId: String
4 | paypalClientSecret: String
5 | paypalWebhookSecret: String
6 | paypalPaymentIntent: String
7 | }
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/paypal/graphql/types/PaypalSetting/PaypalSetting.graphql:
--------------------------------------------------------------------------------
1 | extend type Setting {
2 | paypalDislayName: String
3 | paypalEnvironment: String
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/paypal/pages/frontStore/paypalCancel/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/paypal/cancelling/:order_id"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/paypal/pages/frontStore/paypalReturn/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/paypal/proccessing/:order_id"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/paypal/services/getApiBaseUrl.js:
--------------------------------------------------------------------------------
1 | import { getSetting } from '../../setting/services/setting.js';
2 |
3 | export async function getApiBaseUrl() {
4 | const url = await getSetting(
5 | 'paypalEnvironment',
6 | 'https://api-m.sandbox.paypal.com'
7 | );
8 | return url;
9 | }
10 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/api/couponApply/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/api/couponApply/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "coupon": {
5 | "type": "string"
6 | }
7 | },
8 | "required": ["coupon"],
9 | "additionalProperties": true,
10 | "errorMessage": {
11 | "properties": {
12 | "coupon": "Coupon is invalid"
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/api/couponApply/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/carts/:cart_id/coupons",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/api/createCoupon/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/api/createCoupon/createCoupon[finish].js:
--------------------------------------------------------------------------------
1 | import createCoupon from '../../services/coupon/createCoupon.js';
2 |
3 | export default async (request, response, delegate) => {
4 | const coupon = await createCoupon(request.body, {
5 | routeId: request.currentRoute.id
6 | });
7 |
8 | return coupon;
9 | };
10 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/api/createCoupon/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/coupons",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/api/deleteCoupon/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/coupons/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/api/updateCoupon/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/api/updateCoupon/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/coupons/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/api/updateCoupon/updateCoupon[finish].js:
--------------------------------------------------------------------------------
1 | import updateCoupon from '../../services/coupon/updateCoupon.js';
2 |
3 | export default async (request, response, delegate) => {
4 | const coupon = await updateCoupon(request.params.id, request.body, {
5 | routeId: request.currentRoute.id
6 | });
7 |
8 | return coupon;
9 | };
10 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/graphql/types/Coupon/Coupon.graphql:
--------------------------------------------------------------------------------
1 | scalar JSON
2 |
3 | extend type Cart {
4 | applyCouponApi: String!
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/graphql/types/Coupon/Coupon.resolvers.js:
--------------------------------------------------------------------------------
1 | import { buildUrl } from '../../../../../lib/router/buildUrl.js';
2 |
3 | export default {
4 | Cart: {
5 | applyCouponApi: (cart) => buildUrl('couponApply', { cart_id: cart.uuid })
6 | }
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/pages/admin/couponEdit+couponNew/FormContent.scss:
--------------------------------------------------------------------------------
1 | .page-heading {
2 | max-width: 100rem;
3 | }
4 | .main-content-inner {
5 | max-width: 100rem;
6 | margin: 0 auto;
7 | }
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/pages/admin/couponEdit/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/coupon/edit/:id"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/pages/admin/couponGrid/Heading.jsx:
--------------------------------------------------------------------------------
1 | import PageHeading from '@components/admin/cms/PageHeading';
2 | import React from 'react';
3 |
4 | export default function Heading() {
5 | return ;
6 | }
7 |
8 | export const layout = {
9 | areaId: 'content',
10 | sortOrder: 10
11 | };
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/pages/admin/couponGrid/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/coupons"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/pages/admin/couponNew/index.js:
--------------------------------------------------------------------------------
1 | import { setContextValue } from '../../../../graphql/services/contextHelper.js';
2 |
3 | export default (request) => {
4 | setContextValue(request, 'pageInfo', {
5 | title: 'Create a new coupon',
6 | description: 'Create a new coupon'
7 | });
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/pages/admin/couponNew/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/coupon/new"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/promotion/services/getCouponsBaseQuery.js:
--------------------------------------------------------------------------------
1 | import { select } from '@evershop/postgres-query-builder';
2 |
3 | export const getCouponsBaseQuery = () => {
4 | const query = select().from('coupon');
5 |
6 | return query;
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/setting/api/saveSetting/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/setting/api/saveSetting/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/settings",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/setting/graphql/types/Setting/Setting.graphql:
--------------------------------------------------------------------------------
1 | """
2 | Single store setting
3 | """
4 | type Setting {
5 | storeName: String
6 | }
7 |
8 | extend type Query {
9 | setting: Setting
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/setting/graphql/types/ShippingSetting/ShippingSetting.graphql:
--------------------------------------------------------------------------------
1 | extend type Setting {
2 | allowedCountries: [String]
3 | weightUnit: String
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/setting/pages/admin/paymentSetting/index.js:
--------------------------------------------------------------------------------
1 | import { setContextValue } from '../../../../graphql/services/contextHelper.js';
2 |
3 | export default (request) => {
4 | setContextValue(request, 'pageInfo', {
5 | title: 'Payment Setting',
6 | description: 'Payment Setting'
7 | });
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/setting/pages/admin/paymentSetting/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/setting/payments"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/setting/pages/admin/storeSetting/index.js:
--------------------------------------------------------------------------------
1 | import { setContextValue } from '../../../../graphql/services/contextHelper.js';
2 |
3 | export default (request) => {
4 | setContextValue(request, 'pageInfo', {
5 | title: 'Store Setting',
6 | description: 'Store Setting'
7 | });
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/setting/pages/admin/storeSetting/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/setting/store"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/setting/services/index.ts:
--------------------------------------------------------------------------------
1 | export * from './setting.js';
2 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/stripe/api/capturePaymentIntent/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/stripe/api/capturePaymentIntent/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/stripe/paymentIntents/capture",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/stripe/api/createPaymentIntent/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/stripe/api/createPaymentIntent/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/stripe/paymentIntents",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/stripe/api/refundPaymentIntent/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/stripe/api/refundPaymentIntent/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/stripe/paymentIntents/refund",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/stripe/api/stripeWebHook/bodyJson.js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.raw({ type: '*/*' })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/stripe/api/stripeWebHook/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/stripe/webhook",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/stripe/graphql/types/StripeSetting/StripeSetting.admin.graphql:
--------------------------------------------------------------------------------
1 | extend type Setting {
2 | stripeSecretKey: String
3 | stripeEndpointSecret: String
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/stripe/graphql/types/StripeSetting/StripeSetting.graphql:
--------------------------------------------------------------------------------
1 | extend type Setting {
2 | stripePaymentStatus: Int
3 | stripeDislayName: String
4 | stripePublishableKey: String
5 | stripePaymentMode: String
6 | }
7 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/stripe/pages/frontStore/stripeReturn/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/stripe/return"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/tax/api/createTaxClass/[context]borderParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/tax/api/createTaxClass/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "name": {
5 | "type": "string"
6 | }
7 | },
8 | "additionalProperties": true,
9 | "required": ["name"]
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/tax/api/createTaxClass/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/tax/classes",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/tax/api/createTaxRate/[context]borderParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/tax/api/createTaxRate/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/tax/classes/:class_id/rates",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/tax/api/deleteTaxRate/[context]borderParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/tax/api/deleteTaxRate/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/tax/rates/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/tax/api/updateTaxClass/[context]borderParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/tax/api/updateTaxClass/payloadSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "name": {
5 | "type": "string"
6 | }
7 | },
8 | "additionalProperties": true,
9 | "required": ["name"]
10 | }
11 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/tax/api/updateTaxClass/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/tax/classes/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/tax/api/updateTaxRate/[context]borderParser[auth].js:
--------------------------------------------------------------------------------
1 | import bodyParser from 'body-parser';
2 |
3 | export default (request, response, delegate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/tax/api/updateTaxRate/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/tax/rates/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/tax/graphql/types/TaxSetting/TaxSetting.admin.graphql:
--------------------------------------------------------------------------------
1 | extend type Setting {
2 | defaultProductTaxClassId: Int
3 | defaultShippingTaxClassId: Int
4 | baseCalculationAddress: String
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/tax/graphql/types/TaxSetting/TaxSetting.graphql:
--------------------------------------------------------------------------------
1 | extend type Setting {
2 | priceIncludingTax: Boolean
3 | }
4 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/tax/graphql/types/TaxSetting/TaxSetting.resolvers.js:
--------------------------------------------------------------------------------
1 | import { getConfig } from '../../../../../lib/util/getConfig.js';
2 |
3 | export default {
4 | Setting: {
5 | priceIncludingTax: () => getConfig('pricing.tax.price_including_tax', false)
6 | }
7 | };
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/tax/pages/admin/taxSetting/index.js:
--------------------------------------------------------------------------------
1 | import { setContextValue } from '../../../../graphql/services/contextHelper.js';
2 |
3 | export default (request) => {
4 | setContextValue(request, 'pageInfo', {
5 | title: 'Tax Setting',
6 | description: 'Tax Setting'
7 | });
8 | };
9 |
--------------------------------------------------------------------------------
/packages/evershop/src/modules/tax/pages/admin/taxSetting/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/setting/tax"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/types/index.ts:
--------------------------------------------------------------------------------
1 | export * from './route.js';
2 | export * from './widget.js';
3 | export * from './request.js';
4 | export * from './response.js';
5 |
--------------------------------------------------------------------------------
/packages/evershop/src/types/request.d.ts:
--------------------------------------------------------------------------------
1 | import { Request as ExpressRequest } from 'express';
2 | import { Route } from './route.js';
3 | export interface EvershopRequest extends ExpressRequest {
4 | isAdmin?: boolean;
5 | session?: any;
6 | currentRoute?: Route;
7 | }
8 |
--------------------------------------------------------------------------------
/packages/evershop/src/types/response.ts:
--------------------------------------------------------------------------------
1 | import { Response as ExpressResponse } from 'express';
2 |
3 | export interface EvershopResponse extends ExpressResponse {
4 | debugMiddlewares: { id: string; time: number }[];
5 | }
6 |
--------------------------------------------------------------------------------
/packages/evershop/src/types/route.d.ts:
--------------------------------------------------------------------------------
1 | export interface Route {
2 | id: string;
3 | name: string;
4 | method: string | string[];
5 | path: string;
6 | isAdmin: boolean;
7 | isApi: boolean;
8 | folder: string;
9 | payloadSchema?: Record;
10 | access?: string;
11 | }
12 |
--------------------------------------------------------------------------------
/packages/evershop/src/types/route.ts:
--------------------------------------------------------------------------------
1 | export interface Route {
2 | id: string;
3 | name: string;
4 | method: string | string[];
5 | path: string;
6 | isAdmin: boolean;
7 | isApi: boolean;
8 | folder: string;
9 | payloadSchema?: Record;
10 | access?: string;
11 | }
12 |
--------------------------------------------------------------------------------
/packages/google_login/pages/frontStore/gauth/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/auth/google"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/google_login/pages/frontStore/gcallback/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/auth/google/callback"
4 | }
5 |
--------------------------------------------------------------------------------
/packages/google_login/pages/frontStore/login/GoogleLogin.scss:
--------------------------------------------------------------------------------
1 | .google__login__button {
2 | display: flex;
3 | justify-content: center;
4 | gap: 1rem;
5 | margin-top: 1.5rem;
6 | border: 1px solid #ccc;
7 | border-radius: 5px;
8 | padding-top: 1rem;
9 | padding-bottom: 1rem;
10 | }
11 |
--------------------------------------------------------------------------------
/packages/google_login/services/getGoogleAuthUrl.js:
--------------------------------------------------------------------------------
1 | module.exports.getGoogleAuthUrl = (client_id, redirect_uri) =>
2 | `https://accounts.google.com/o/oauth2/v2/auth?scope=profile%20email&access_type=offline&response_type=code&redirect_uri=${redirect_uri}&client_id=${client_id}`;
3 |
--------------------------------------------------------------------------------
/packages/postgres-query-builder/toString.js:
--------------------------------------------------------------------------------
1 | export function toString(value) {
2 | // Check if value is an array or object
3 | if (Array.isArray(value) || (typeof value === 'object' && value !== null)) {
4 | // If value is an array, return a string with comma separated values
5 | return JSON.stringify(value);
6 | } else {
7 | return value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/packages/product_review/api/addReview/[context]bodyParser[auth].js:
--------------------------------------------------------------------------------
1 | const bodyParser = require('body-parser');
2 |
3 | module.exports = (request, response, deledate, next) => {
4 | bodyParser.json({ inflate: false })(request, response, next);
5 | };
6 |
--------------------------------------------------------------------------------
/packages/product_review/api/addReview/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["POST"],
3 | "path": "/reviews",
4 | "access": "public"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/product_review/api/approveReview/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/reviews/approved/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/product_review/api/deleteReview/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["DELETE"],
3 | "path": "/product/reviews/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/product_review/api/unApproveReview/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["PATCH"],
3 | "path": "/reviews/pending/:id",
4 | "access": "private"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/product_review/components/Rating.scss:
--------------------------------------------------------------------------------
1 | .rating__stars {
2 | display: flex;
3 | justify-self: start;
4 | }
5 |
--------------------------------------------------------------------------------
/packages/product_review/pages/admin/reviewGrid/Heading.jsx:
--------------------------------------------------------------------------------
1 | import PageHeading from '@components/admin/cms/PageHeading';
2 | import React from 'react';
3 |
4 | export default function Heading() {
5 | return ;
6 | }
7 |
8 | export const layout = {
9 | areaId: 'content',
10 | sortOrder: 10
11 | };
12 |
--------------------------------------------------------------------------------
/packages/product_review/pages/admin/reviewGrid/route.json:
--------------------------------------------------------------------------------
1 | {
2 | "methods": ["GET"],
3 | "path": "/reviews"
4 | }
5 |
--------------------------------------------------------------------------------
/translations/de/catalog.csv:
--------------------------------------------------------------------------------
1 | Featured collection, Ausgewählte Kollektion
2 | SHOP BY, Einkaufen nach
3 | Sort By, Sortieren nach
4 | There is no product to display, Es gibt keine Produkte zum Anzeigen
5 | ${count} products, ${count} Produkte
6 | Search results for "${keyword}", Suchergebnisse für \"${keyword}\"
--------------------------------------------------------------------------------
/translations/de/paypal.csv:
--------------------------------------------------------------------------------
1 | You will be redirected to PayPal, Du wirst zu PayPal weitergeleitet.
2 | We are sorry. There was an error processing your payment. Your card was not charged. Please try again., Es tut uns leid. Bei der Bearbeitung Ihrer Zahlung ist ein Fehler aufgetreten. Ihre Karte wurde nicht belastet. Bitte versuchen Sie es erneut.
--------------------------------------------------------------------------------
/translations/es/catalog.csv:
--------------------------------------------------------------------------------
1 | Featured collection, Colección destacada
2 | SHOP BY, Comprar por
3 | Sort By, Ordenar por
4 | There is no product to display, No hay productos para mostrar
5 | ${count} products, ${count} productos
6 | Search results for "${keyword}", Resultados de búsqueda para "${keyword}"
--------------------------------------------------------------------------------
/translations/es/paypal.csv:
--------------------------------------------------------------------------------
1 | You will be redirected to PayPal, Serás redirigido a PayPal.
2 | We are sorry. There was an error processing your payment. Your card was not charged. Please try again., Lo sentimos. Hubo un error al procesar tu pago. Tu tarjeta no fue cargada. Por favor, inténtalo nuevamente.
--------------------------------------------------------------------------------
/translations/fr/catalog.csv:
--------------------------------------------------------------------------------
1 | Featured collection, Collection en vedette
2 | SHOP BY, Acheter par
3 | Sort By, Trier par
4 | There is no product to display, Aucun produit à afficher
5 | ${count} products, ${count} produits
6 | Search results for "${keyword}", Résultats de recherche pour "${keyword}"
7 |
--------------------------------------------------------------------------------
/translations/fr/paypal.csv:
--------------------------------------------------------------------------------
1 | You will be redirected to PayPal, Vous serez redirigé vers PayPal.
2 | We are sorry. There was an error processing your payment. Your card was not charged. Please try again., Nous sommes désolés. Une erreur est survenue lors du traitement de votre paiement. Votre carte n'a pas été débitée. Veuillez réessayer.
--------------------------------------------------------------------------------
/translations/gr/catalog.csv:
--------------------------------------------------------------------------------
1 | Featured collection,Επιλεγμένη Συλλογή
2 | SHOP BY,Αγοράστε ανά
3 | Sort By,Ταξινόμηση ανά
4 | There is no product to display,Δεν υπάρχουν προϊόντα για προβολή
5 | ${count} products,${count} Προϊόντα
6 | "Search results for "${keyword}"","Αποτελέσματα αναζήτησης για "${keyword}""
7 |
--------------------------------------------------------------------------------
/translations/gr/paypal.csv:
--------------------------------------------------------------------------------
1 | You will be redirected to PayPal,Θα ανακατευθυνθείτε στο PayPal
2 | We are sorry. There was an error processing your payment. Your card was not charged. Please try again.,Λυπούμαστε. Παρουσιάστηκε ένα σφάλμα κατά την επεξεργασία της πληρωμής σας. Η κάρτα σας δεν χρεώθηκε. Παρακαλούμε προσπαθήστε ξανά.
3 |
--------------------------------------------------------------------------------
/translations/hu/catalog.csv:
--------------------------------------------------------------------------------
1 | Featured collection, Kiemelt termékek
2 | SHOP BY, Vásárlás
3 | Sort By, Rendezés
4 | There is no product to display, Nincs megjeleníthető termék
5 | ${count} products, ${count} Termék
6 | Search results for "${keyword}", \"${keyword}\" keresési eredményei
--------------------------------------------------------------------------------
/translations/it/catalog.csv:
--------------------------------------------------------------------------------
1 | Featured collection, In primo piano
2 | SHOP BY, FILTRA
3 | Sort By, Ordina per
4 | There is no product to display, Non ci sono prodotti da mostrare
5 | ${count} products, ${count} prodotti
6 | Search results for "${keyword}", Risultati per “${keyword}”
7 |
--------------------------------------------------------------------------------
/translations/it/paypal.csv:
--------------------------------------------------------------------------------
1 | You will be redirected to PayPal, Verrai reindirizzato su PayPal.
2 | We are sorry. There was an error processing your payment. Your card was not charged. Please try again.,Siamo spiacenti. Si è verificato un errore nell'elaborazione del pagamento. Non è stato addebitato alcun importo. Si prega di riprovare.
--------------------------------------------------------------------------------
/translations/nb/catalog.csv:
--------------------------------------------------------------------------------
1 | Featured collection, Utvalgt samling
2 | SHOP BY, Handle etter
3 | Sort By, Sorter etter
4 | There is no product to display, Det er ingen produkter å vise
5 | ${count} products, ${count} produkter
6 | Search results for "${keyword}", Søkeresultater for "${keyword}"
7 |
--------------------------------------------------------------------------------
/translations/nb/general.csv:
--------------------------------------------------------------------------------
1 | Discount ${discount} For All Orders Over ${price}, Rabatt på ${discount} for alle bestillinger over ${price}
2 | Please select, Vennligst velg...
3 | The page you requested does not exist., Siden du ba om eksisterer ikke.
4 | Continue shopping, Fortsett å handle
5 | 404 Page Not Found, 404 Side ikke funnet
6 | Home, Hjem
7 | Not found, Ikke funnet
8 |
--------------------------------------------------------------------------------
/translations/nb/paypal.csv:
--------------------------------------------------------------------------------
1 | You will be redirected to PayPal, Du vil bli omdirigert til PayPal.
2 | We are sorry. There was an error processing your payment. Your card was not charged. Please try again., Beklager. Det oppstod en feil under behandling av betalingen din. Kortet ditt ble ikke belastet. Vennligst prøv igjen.
3 |
--------------------------------------------------------------------------------
/translations/ne/catalog.csv:
--------------------------------------------------------------------------------
1 | Featured collection, विशेष संग्रह
2 | SHOP BY, बाट किन्नुहोस्
3 | Sort By, द्वारा क्रमबद्ध
4 | There is no product to display, देखाउन कुनै पनि सामान छैन
5 | ${count} products, ${count} सामानहरू
6 | Search results for "${keyword}", "${keyword}"को लागि खोज परिणाम
7 |
--------------------------------------------------------------------------------
/translations/ne/paypal.csv:
--------------------------------------------------------------------------------
1 | You will be redirected to PayPal, तपाईंलाई PayPal मा पुन: निर्देशित गरिनेछ।
2 | We are sorry. There was an error processing your payment. Your card was not charged. Please try again., हामीलाई माफ गर्नुहोस। तपाईंको भुक्तानी प्रक्रिया गर्दा त्रुटि भयो। तपाईंको कार्ड चार्ज गरिएको छैन। कृपया पुन: प्रयास गर्नुहोस्।
--------------------------------------------------------------------------------
/translations/nl/catalog.csv:
--------------------------------------------------------------------------------
1 | Featured collection, Uitgelichte collectie
2 | SHOP BY, Winkel op
3 | Sort By, Sorteren op
4 | There is no product to display, Er zijn geen producten om te tonen
5 | ${count} products, ${count} producten
6 | Search results for "${keyword}", Zoekresultaten voor “${keyword}”
--------------------------------------------------------------------------------
/translations/nl/paypal.csv:
--------------------------------------------------------------------------------
1 | You will be redirected to PayPal, U wordt doorgestuurd naar PayPal.
2 | We are sorry. There was an error processing your payment. Your card was not charged. Please try again.,Het spijt ons. Er is een fout opgetreden bij het verwerken van je betaling. Je kaart is niet gedebiteerd. Probeer het opnieuw.
--------------------------------------------------------------------------------
/translations/pt/catalog.csv:
--------------------------------------------------------------------------------
1 | Featured collection, Coleções em destaque
2 | SHOP BY, COMPRAR POR
3 | Sort By, Ordenar Por
4 | There is no product to display, Nenhum há nenhum produto a ser exibido
5 | ${count} products, ${count} produtos
6 | Search results for "${keyword}", Resultados da busca por \"${keyword}\"
--------------------------------------------------------------------------------
/translations/pt/paypal.csv:
--------------------------------------------------------------------------------
1 | You will be redirected to PayPal, Você será redirecionado para o PayPal.
2 | We are sorry. There was an error processing your payment. Your card was not charged. Please try again., Sentimos muito. Ocorreu um erro ao processar seu pagamento. A cobrança em seu cartão não foi efetuada. Por favor tente novamente.
--------------------------------------------------------------------------------
/translations/rs/catalog.csv:
--------------------------------------------------------------------------------
1 | SHOP BY, FILTRIRAJ
2 | Sort By, Sortiraj po
3 | There is no product to display, Nema proizvoda za prikaz
4 | ${count} products, ${count} proizvoda
5 | Search results for "${keyword}", Rezultati pretrage za „${keyword}”
--------------------------------------------------------------------------------
/translations/rs/paypal.csv:
--------------------------------------------------------------------------------
1 | You will be redirected to PayPal, Bićete preusmereni na PayPal.
2 | We are sorry. There was an error processing your payment. Your card was not charged. Please try again., Žao nam je. Došlo je do greške prilikom obrade plaćanja. Vaša kartica nije naplaćena. Molimo pokušajte ponovo.
3 |
--------------------------------------------------------------------------------
/translations/ru/paypal.csv:
--------------------------------------------------------------------------------
1 | You will be redirected to PayPal, Вы будете перенаправлены на PayPal.
2 | We are sorry. There was an error processing your payment. Your card was not charged. Please try again., Мы сожалеем. При обработке вашего платежа произошла ошибка. Средства с вашей карты не были списаны. Пожалуйста, попробуйте еще раз.
--------------------------------------------------------------------------------
/translations/zh/catalog.csv:
--------------------------------------------------------------------------------
1 | Featured collection, 精选合集
2 | SHOP BY, 按类别购买
3 | Sort By, 按类别排序
4 | There is no product to display, 没有产品可显示
5 | ${count} products, ${count} 个产品
6 | Search results for "${keyword}", 搜索结果为 “${keyword}”
--------------------------------------------------------------------------------
/translations/zh/general.csv:
--------------------------------------------------------------------------------
1 | Discount ${discount} For All Orders Over ${price}, 所有超过 ${price} 的订单可享受 ${discount} 折扣
2 | Please select, 请选择
3 | The page you requested does not exist., 您请求的页面不存在。
4 | Continue shopping, 继续购物
5 | 404 Page Not Found, 404 页面未找到
6 | Home, 首页
7 | Not found, 未找到
--------------------------------------------------------------------------------
/translations/zh/paypal.csv:
--------------------------------------------------------------------------------
1 | You will be redirected to PayPal, 您将被重定向至 PayPal
2 | We are sorry. There was an error processing your payment. Your card was not charged. Please try again.,我们很抱歉。在处理您的付款时发生了错误。您的银行卡尚未扣款。请重试。
--------------------------------------------------------------------------------