@infrab4a/connect 4.2.0-beta.1 → 4.2.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/domain/catalog/models/category-collection-children.d.ts +1 -1
- package/domain/catalog/models/category-filter.d.ts +1 -1
- package/domain/catalog/models/kit-product.d.ts +1 -1
- package/domain/catalog/models/types/category-condition.type.d.ts +1 -1
- package/domain/catalog/models/types/category-metadata.type.d.ts +1 -1
- package/domain/catalog/models/types/category-product.d.ts +1 -1
- package/domain/catalog/models/types/product-evaluation.type.d.ts +1 -1
- package/domain/catalog/models/types/product-gender.type.d.ts +1 -1
- package/domain/catalog/models/types/product-metadata.type.d.ts +1 -1
- package/domain/catalog/models/types/product-review.type.d.ts +1 -1
- package/domain/catalog/models/types/shop-description.type.d.ts +1 -1
- package/domain/catalog/models/types/shop-price.type.d.ts +1 -1
- package/domain/catalog/models/types/stock.type.d.ts +1 -1
- package/domain/catalog/models/types/variant-grade.type.d.ts +1 -1
- package/domain/catalog/models/variant.d.ts +1 -1
- package/domain/catalog/repositories/product.repository.d.ts +2 -2
- package/domain/generic/model/base.model.d.ts +1 -1
- package/domain/generic/model/types/identifier-model.type.d.ts +3 -3
- package/domain/generic/model/types/model-base-structure.type.d.ts +2 -2
- package/domain/generic/model/types/non-function-properties.type.d.ts +6 -6
- package/domain/generic/model/types/non-function-property-name.type.d.ts +5 -5
- package/domain/generic/repository/create.repository.d.ts +1 -1
- package/domain/generic/repository/crud.repository.d.ts +2 -2
- package/domain/generic/repository/delete.repository.d.ts +1 -1
- package/domain/generic/repository/find.repository.d.ts +1 -1
- package/domain/generic/repository/get.repository.d.ts +1 -1
- package/domain/generic/repository/read.repository.d.ts +2 -2
- package/domain/generic/repository/types/repository-find-filters.type.d.ts +4 -4
- package/domain/generic/repository/types/repository-find-result.type.d.ts +2 -2
- package/domain/generic/repository/types/repository-limit-options.type.d.ts +1 -1
- package/domain/generic/repository/types/repository-order-by-list.type.d.ts +2 -2
- package/domain/generic/repository/types/repository-update-params.type.d.ts +3 -3
- package/domain/generic/repository/types/where-options.type.d.ts +1 -1
- package/domain/generic/repository/update.repository.d.ts +1 -1
- package/domain/location/models/types/location-bound.type.d.ts +1 -1
- package/domain/location/models/types/location-geometry.type.d.ts +1 -1
- package/domain/location/models/types/location-lat-lng.type.d.ts +1 -1
- package/domain/shop-settings/helpers/beauty-questions.helper.d.ts +1 -1
- package/domain/shop-settings/models/types/banner.type.d.ts +1 -1
- package/domain/shop-settings/models/types/benefit.type.d.ts +1 -1
- package/domain/shop-settings/models/types/campaign-page.d.ts +4 -4
- package/domain/shop-settings/models/types/home-data.type.d.ts +3 -3
- package/domain/shop-settings/models/types/menu-nav.type.d.ts +1 -1
- package/domain/shop-settings/models/types/sections.type.d.ts +11 -11
- package/domain/shop-settings/models/types/shop-home.d.ts +2 -2
- package/domain/shop-settings/models/types/shop-section.type.d.ts +1 -1
- package/domain/shop-settings/models/types/sub-menu.type.d.ts +2 -2
- package/domain/shopping/models/types/payment-address.type.d.ts +1 -1
- package/domain/shopping/models/types/payment-billing.type.d.ts +1 -1
- package/domain/shopping/models/types/payment-card.type.d.ts +1 -1
- package/domain/shopping/models/types/payment-customer.type.d.ts +1 -1
- package/domain/shopping/models/types/payment-document.type.d.ts +1 -1
- package/domain/shopping/models/types/payment-item.type.d.ts +1 -1
- package/domain/shopping/models/types/payment-shipping.type.d.ts +1 -1
- package/domain/users/models/beauty-profile.d.ts +1 -1
- package/domain/users/models/subscription/edition.d.ts +1 -1
- package/domain/users/models/subscription/payment.d.ts +1 -1
- package/domain/users/models/user-address.d.ts +1 -1
- package/domain/users/models/user-payment-method.d.ts +1 -1
- package/domain/users/services/authentication.service.d.ts +1 -1
- package/domain/users/services/register.service.d.ts +1 -1
- package/domain/users/services/types/basic-user-data.type.d.ts +1 -1
- package/domain/users/use-cases/authentication.d.ts +2 -2
- package/domain/users/use-cases/register.d.ts +1 -1
- package/{esm2020 → esm2022}/infra/hasura-graphql/mixins/helpers/attribute-option.helper.mjs +32 -32
- package/esm2022/infra/hasura-graphql/mixins/helpers/bind-filter-query.helper.mjs +71 -0
- package/esm2022/infra/hasura-graphql/mixins/helpers/filter-option.helper.mjs +22 -0
- package/esm2022/infra/hasura-graphql/mixins/helpers/graphql-field.helper.mjs +125 -0
- package/esm2022/infra/hasura-graphql/mixins/with-hasura-graphql.mixin.mjs +108 -0
- package/esm2022/infra/hasura-graphql/repositories/catalog/product-hasura-graphql.repository.mjs +516 -0
- package/{esm2020 → esm2022}/utils/helpers/debug-decorator.helper.mjs +2 -2
- package/esm2022/utils/helpers/debug.helper.mjs +150 -0
- package/{esm2020 → esm2022}/utils/helpers/reflect.helper.mjs +2 -2
- package/{fesm2020 → fesm2022}/infrab4a-connect.mjs +256 -256
- package/{fesm2020 → fesm2022}/infrab4a-connect.mjs.map +1 -1
- package/infra/elasticsearch/adapters/axios.adapter.d.ts +1 -1
- package/infra/elasticsearch/types/elastic-search-result.d.ts +1 -1
- package/infra/firebase/auth/types/firebase-user-with-id.type.d.ts +1 -1
- package/infra/firebase/firestore/mixins/with-firestore.mixin.d.ts +1 -1
- package/infra/firebase/firestore/mixins/with-sub-collection.mixin.d.ts +1 -1
- package/infra/firebase/firestore/mixins/with-update-firestore.mixin.d.ts +1 -1
- package/infra/firebase/firestore/types/firestore-interceptors.type.d.ts +1 -1
- package/infra/firebase/firestore/types/firestore-sub.repository.type.d.ts +1 -1
- package/infra/firebase/firestore/types/firestore.repository.type.d.ts +1 -1
- package/infra/hasura-graphql/mixins/helpers/attribute-option.helper.d.ts +1 -1
- package/infra/hasura-graphql/mixins/with-create-hasura-graphql.mixin.d.ts +1 -1
- package/infra/hasura-graphql/mixins/with-delete-hasura-graphql.mixin.d.ts +1 -1
- package/infra/hasura-graphql/mixins/with-get-hasura-graphql.mixin.d.ts +1 -1
- package/infra/hasura-graphql/mixins/with-hasura-graphql.mixin.d.ts +3 -3
- package/infra/hasura-graphql/mixins/with-update-hasura-graphql.mixin.d.ts +2 -2
- package/infra/hasura-graphql/types/fields.type.d.ts +1 -1
- package/infra/hasura-graphql/types/graphql.repository.type.d.ts +2 -2
- package/infra/hasura-graphql/types/hasura-graphql-auth-options.type.d.ts +1 -1
- package/infra/hasura-graphql/types/hasura-graphql-fields.type.d.ts +6 -6
- package/infra/hasura-graphql/types/hasura-graphql-headers.type.d.ts +1 -1
- package/infra/hasura-graphql/types/nested-field.type.d.ts +1 -1
- package/infra/hasura-graphql/types/variable-options.type.d.ts +1 -1
- package/package.json +5 -11
- package/utils/decorators/trace.method.decorator.d.ts +3 -3
- package/utils/helpers/debug-decorator.helper.d.ts +1 -1
- package/utils/helpers/debug.helper.d.ts +3 -3
- package/utils/helpers/reflect.helper.d.ts +7 -7
- package/utils/index.d.ts +1 -1
- package/utils/mixins/merge-constructor-params.type.d.ts +2 -2
- package/utils/mixins/mixin-ctor.type.d.ts +1 -1
- package/utils/types/array-element.type.d.ts +1 -1
- package/utils/types/prop.type.d.ts +1 -1
- package/esm2020/infra/hasura-graphql/mixins/helpers/bind-filter-query.helper.mjs +0 -71
- package/esm2020/infra/hasura-graphql/mixins/helpers/filter-option.helper.mjs +0 -22
- package/esm2020/infra/hasura-graphql/mixins/helpers/graphql-field.helper.mjs +0 -125
- package/esm2020/infra/hasura-graphql/mixins/with-hasura-graphql.mixin.mjs +0 -108
- package/esm2020/infra/hasura-graphql/repositories/catalog/product-hasura-graphql.repository.mjs +0 -516
- package/esm2020/utils/helpers/debug.helper.mjs +0 -150
- package/fesm2015/infrab4a-connect.mjs +0 -4976
- package/fesm2015/infrab4a-connect.mjs.map +0 -1
- /package/{esm2020 → esm2022}/domain/catalog/helpers/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/helpers/round-product-price.helper.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/category-base.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/category-collection-children.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/category-filter.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/category-for-product.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/category.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/enums/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/enums/product-genders.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/enums/shops.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/filter-option.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/filter.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/kit-product.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/product-base.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/product-for-category.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/product-for-kit.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/product.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/types/category-condition.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/types/category-metadata.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/types/category-product.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/types/product-evaluation.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/types/product-gender.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/types/product-metadata.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/types/product-review.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/types/shop-description.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/types/shop-price.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/types/stock.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/types/variant-grade.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/variant.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/models/wishlist.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/repositories/category-collection-children.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/repositories/category-filter.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/repositories/category.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/repositories/filter-option.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/repositories/filter.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/repositories/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/repositories/product.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/repositories/subscription-product.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/repositories/variant.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/catalog/repositories/wishlist.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/model/base.model.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/model/identifier-fields.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/model/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/model/types/base-model-builder.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/model/types/identifier-model.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/model/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/model/types/model-base-structure.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/model/types/non-function-properties.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/model/types/non-function-property-name.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/repository/create.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/repository/crud.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/repository/delete.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/repository/enums/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/repository/enums/update-option-actions.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/repository/enums/where.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/repository/find.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/repository/get.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/repository/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/repository/read.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/repository/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/repository/types/repository-find-filters.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/repository/types/repository-find-result.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/repository/types/repository-limit-options.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/repository/types/repository-order-by-list.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/repository/types/repository-update-params.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/repository/types/where-options.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/generic/repository/update.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/location/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/location/models/address.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/location/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/location/models/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/location/models/types/location-bound.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/location/models/types/location-geometry.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/location/models/types/location-lat-lng.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/enums/filter-type.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/enums/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/enums/questions-filters.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/enums/shop-page-name.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/helpers/beauty-questions.helper.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/helpers/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/campaign-banner.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/campaign.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/home.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/shop-menu.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/shop-settings.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/types/banner.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/types/benefit.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/types/campaign-page.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/types/home-data.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/types/menu-nav.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/types/sections.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/types/shop-banner.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/types/shop-brands.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/types/shop-carousel.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/types/shop-collection.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/types/shop-gift.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/types/shop-home.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/types/shop-post.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/types/shop-section.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/models/types/sub-menu.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/repositories/campaign-banner.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/repositories/campaign.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/repositories/home.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/repositories/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/repositories/shop-menu.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shop-settings/repositories/shop-settings.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/buy-2-win.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/campaign-dashboard.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/campaign-hashtag.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/checkout.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/coupons/coupon.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/coupons/enums/coupon-club-mens.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/coupons/enums/coupon-subtypes.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/coupons/enums/coupon-types.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/coupons/enums/exclusivities.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/coupons/enums/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/coupons/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/enums/checkout-types.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/enums/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/enums/order-status.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/line-item.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/order.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/payment.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/shipping-method.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/subscription/checkout.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/subscription/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/subscription/plan.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/types/payment-address.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/types/payment-billing.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/types/payment-card.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/types/payment-customer.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/types/payment-document.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/types/payment-item.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/models/types/payment-shipping.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/repositories/buy-2-win.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/repositories/campaign-dashboard.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/repositories/campaign-hashtag.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/repositories/checkout.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/repositories/coupon.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/repositories/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/repositories/legacy-order.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/repositories/order.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/repositories/payment.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/repositories/subscription/checkout.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/repositories/subscription/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/shopping/repositories/subscription/plan.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/errors/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/errors/unauthorized.error.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/errors/user-already-registered.error.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/errors/weak-password.error.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/beauty-profile.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/accessory-importances.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/area.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/beard-problems.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/beard-sizes.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/beauty-product-importances.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/body-problems.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/body-shapes.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/body-tattoos.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/face-skin-oilinesses.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/face-skin-problems.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/face-skin-tones.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/family-incomes.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/fragrance-importances.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/hair-colors.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/hair-problems.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/hair-strands.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/hair-types.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/office-position.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/product-spents.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/enums/user-type.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/lead.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/subscription/edition.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/subscription/enums/billing-status.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/subscription/enums/edition-status.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/subscription/enums/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/subscription/enums/payment-type.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/subscription/enums/status.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/subscription/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/subscription/payment.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/subscription/subscription.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/user-address.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/user-payment-method.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/models/user.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/repositories/beauty-profile.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/repositories/edition.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/repositories/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/repositories/lead.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/repositories/subscription-payment.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/repositories/subscription.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/repositories/user-address.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/repositories/user-payment-method.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/repositories/user.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/services/authentication.service.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/services/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/services/register.service.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/services/types/basic-user-data.type.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/services/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/use-cases/authentication.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/use-cases/index.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/use-cases/recovery-password.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/use-cases/register.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/users/use-cases/signout.mjs +0 -0
- /package/{esm2020 → esm2022}/errors/duplicated-results.error.mjs +0 -0
- /package/{esm2020 → esm2022}/errors/index.mjs +0 -0
- /package/{esm2020 → esm2022}/errors/invalid-argument.error.mjs +0 -0
- /package/{esm2020 → esm2022}/errors/not-found.error.mjs +0 -0
- /package/{esm2020 → esm2022}/errors/required-argument.error.mjs +0 -0
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/elasticsearch/adapters/axios.adapter.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/elasticsearch/adapters/elastic-search.adapter.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/elasticsearch/adapters/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/elasticsearch/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/elasticsearch/indexes/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/elasticsearch/indexes/products-index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/elasticsearch/types/elastic-search-result.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/elasticsearch/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/auth/authentication-firebase-auth.service.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/auth/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/auth/register-firebase-auth.service.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/auth/types/firebase-user-with-id.type.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/enums/firestore-field-type.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/enums/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/mixins/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/mixins/with-create-firestore.mixin.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/mixins/with-crud-firestore.mixin.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/mixins/with-delete-firestore.mixin.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/mixins/with-find-firestore.mixin.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/mixins/with-firestore.mixin.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/mixins/with-get-firestore.mixin.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/mixins/with-helpers.mixin.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/mixins/with-sub-collection.mixin.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/mixins/with-update-firestore.mixin.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/catalog/category-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/catalog/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/catalog/product-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/catalog/product-variant-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/catalog/subscription-product-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/shop-settings/home-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/shop-settings/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/shop-settings/shop-menu-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/shop-settings/shop-settings-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/shopping/buy-2-win-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/shopping/campaign-dashboard-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/shopping/campaign-hashtag-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/shopping/checkout-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/shopping/checkout-subscription-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/shopping/coupon-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/shopping/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/shopping/legacy-order-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/shopping/order-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/shopping/payment-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/shopping/subscription-plan-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/users/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/users/lead-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/users/subscription-edition-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/users/subscription-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/users/subscription-payment-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/users/user-address-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/users/user-beauty-profile-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/users/user-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/repositories/users/user-payment-method-firestore.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/types/firestore-interceptors.type.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/types/firestore-sub.repository.type.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/types/firestore.helpers.type.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/types/firestore.repository.type.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/firestore/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/firebase/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/enums/hasura-graphql-column-type.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/enums/hasura-graphql-where.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/enums/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/mixins/helpers/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/mixins/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/mixins/with-create-hasura-graphql.mixin.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/mixins/with-crud-hasura-graphql.mixin.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/mixins/with-delete-hasura-graphql.mixin.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/mixins/with-find-hasura-graphql.mixin.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/mixins/with-get-hasura-graphql.mixin.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/mixins/with-update-hasura-graphql.mixin.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/models/category-hasura-graphql.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/models/kit-product-hasura-graphql.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/models/product-hasura-graphql.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/models/variant-hasura-graphql.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/repositories/catalog/category-collection-children-hasura-graphql.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/repositories/catalog/category-filter-hasura-graphql.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/repositories/catalog/category-hasura-graphql.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/repositories/catalog/filter-hasura-graphql.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/repositories/catalog/filter-option-hasura-graphql.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/repositories/catalog/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/repositories/catalog/variant-hasura-graphql.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/repositories/catalog/wishlist-hasura-graphql.repository.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/repositories/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/types/fields.type.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/types/graphql.repository.type.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/types/hasura-graphql-auth-options.type.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/types/hasura-graphql-fields.type.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/types/hasura-graphql-headers.type.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/types/nested-field.type.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/types/query-builder-options.type.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/hasura-graphql/types/variable-options.type.mjs +0 -0
- /package/{esm2020 → esm2022}/infra/index.mjs +0 -0
- /package/{esm2020 → esm2022}/infrab4a-connect.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/decorators/debug.class.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/decorators/index.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/decorators/trace.method.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/get.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/helpers/class-name.helper.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/helpers/index.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/index.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/is-uuid.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/is.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/log.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/mixins/base.mixin.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/mixins/index.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/mixins/merge-constructor-params.type.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/mixins/mixin-ctor.type.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/parse-datetime.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/types/array-element.type.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/types/prop.type.mjs +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BasicUserData } from './types/basic-user-data.type';
|
|
2
|
-
export
|
|
2
|
+
export type RegisterParams = Omit<BasicUserData, 'isAnonymous'> & {
|
|
3
3
|
password: string;
|
|
4
4
|
};
|
|
5
5
|
export interface RegisterService {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { User } from '../../models/user';
|
|
2
|
-
export
|
|
2
|
+
export type BasicUserData = Partial<Pick<User, 'id' | 'cpf' | 'email' | 'firstName' | 'lastName' | 'displayName' | 'phone' | 'birthday'>> & {
|
|
3
3
|
isAnonymous: boolean;
|
|
4
4
|
};
|
|
@@ -5,8 +5,8 @@ export declare enum SignInMethods {
|
|
|
5
5
|
EMAIL_PASSWORD = "email_password",
|
|
6
6
|
GOOGLE = "google"
|
|
7
7
|
}
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
type SignInMethod = Lowercase<keyof typeof SignInMethods>;
|
|
9
|
+
type SignInParams = {
|
|
10
10
|
email?: string;
|
|
11
11
|
password?: string;
|
|
12
12
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { User } from '../models';
|
|
2
2
|
import { RegisterService } from '../services/register.service';
|
|
3
3
|
import { UserRepository } from '../repositories/user.repository';
|
|
4
|
-
|
|
4
|
+
type RegisterParams = Partial<User> & {
|
|
5
5
|
password: string;
|
|
6
6
|
};
|
|
7
7
|
export declare class Register {
|
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
import { is, isNil, isObject } from '../../../../utils';
|
|
2
2
|
export class AttributeOptionHelper {
|
|
3
|
+
static { this.FindByAttribute = (attributeName, fields) => {
|
|
4
|
+
if (fields.includes(attributeName))
|
|
5
|
+
return { columnName: attributeName.toString(), attributeName, to: (value) => value, from: (value) => value };
|
|
6
|
+
const field = fields.find((columnOption) => isObject(columnOption) && Object.keys(columnOption).includes(attributeName.toString()));
|
|
7
|
+
const fieldOption = is(field)?.[attributeName];
|
|
8
|
+
if (isNil(fieldOption))
|
|
9
|
+
return { columnName: attributeName.toString(), attributeName };
|
|
10
|
+
if (Array.isArray(fieldOption))
|
|
11
|
+
return { columnName: attributeName.toString(), attributeName, fields: fieldOption };
|
|
12
|
+
return { attributeName, columnName: attributeName.toString(), ...fieldOption };
|
|
13
|
+
}; }
|
|
14
|
+
static { this.CheckIsColumnOption = (fieldValue) => !!fieldValue?.columnName; }
|
|
15
|
+
static { this.FindColumnOptionFromList = (columnName, fields) => {
|
|
16
|
+
if (fields.includes(columnName))
|
|
17
|
+
return { columnName, attributeName: columnName };
|
|
18
|
+
const field = is(fields.find((field) => {
|
|
19
|
+
if (!isObject(field))
|
|
20
|
+
return false;
|
|
21
|
+
const columnOption = Object.values(field).find((option) => AttributeOptionHelper.CheckIsColumnOption(option) && option.columnName === columnName ? option : {});
|
|
22
|
+
return AttributeOptionHelper.CheckIsColumnOption(columnOption) && columnOption?.columnName === columnName;
|
|
23
|
+
}) || {});
|
|
24
|
+
const attributeName = Object.keys(field).find((fieldOptionFromList) => AttributeOptionHelper.CheckIsColumnOption(field[fieldOptionFromList]) || Array.isArray(field[fieldOptionFromList]));
|
|
25
|
+
const fieldOption = field?.[attributeName];
|
|
26
|
+
if (Array.isArray(fieldOption))
|
|
27
|
+
return { attributeName: attributeName, fields: fieldOption };
|
|
28
|
+
return {
|
|
29
|
+
attributeName: attributeName || columnName,
|
|
30
|
+
columnName,
|
|
31
|
+
...fieldOption,
|
|
32
|
+
};
|
|
33
|
+
}; }
|
|
3
34
|
}
|
|
4
|
-
|
|
5
|
-
if (fields.includes(attributeName))
|
|
6
|
-
return { columnName: attributeName.toString(), attributeName, to: (value) => value, from: (value) => value };
|
|
7
|
-
const field = fields.find((columnOption) => isObject(columnOption) && Object.keys(columnOption).includes(attributeName.toString()));
|
|
8
|
-
const fieldOption = is(field)?.[attributeName];
|
|
9
|
-
if (isNil(fieldOption))
|
|
10
|
-
return { columnName: attributeName.toString(), attributeName };
|
|
11
|
-
if (Array.isArray(fieldOption))
|
|
12
|
-
return { columnName: attributeName.toString(), attributeName, fields: fieldOption };
|
|
13
|
-
return { attributeName, columnName: attributeName.toString(), ...fieldOption };
|
|
14
|
-
};
|
|
15
|
-
AttributeOptionHelper.CheckIsColumnOption = (fieldValue) => !!fieldValue?.columnName;
|
|
16
|
-
AttributeOptionHelper.FindColumnOptionFromList = (columnName, fields) => {
|
|
17
|
-
if (fields.includes(columnName))
|
|
18
|
-
return { columnName, attributeName: columnName };
|
|
19
|
-
const field = is(fields.find((field) => {
|
|
20
|
-
if (!isObject(field))
|
|
21
|
-
return false;
|
|
22
|
-
const columnOption = Object.values(field).find((option) => AttributeOptionHelper.CheckIsColumnOption(option) && option.columnName === columnName ? option : {});
|
|
23
|
-
return AttributeOptionHelper.CheckIsColumnOption(columnOption) && columnOption?.columnName === columnName;
|
|
24
|
-
}) || {});
|
|
25
|
-
const attributeName = Object.keys(field).find((fieldOptionFromList) => AttributeOptionHelper.CheckIsColumnOption(field[fieldOptionFromList]) || Array.isArray(field[fieldOptionFromList]));
|
|
26
|
-
const fieldOption = field?.[attributeName];
|
|
27
|
-
if (Array.isArray(fieldOption))
|
|
28
|
-
return { attributeName: attributeName, fields: fieldOption };
|
|
29
|
-
return {
|
|
30
|
-
attributeName: attributeName || columnName,
|
|
31
|
-
columnName,
|
|
32
|
-
...fieldOption,
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLW9wdGlvbi5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0L3NyYy9pbmZyYS9oYXN1cmEtZ3JhcGhxbC9taXhpbnMvaGVscGVycy9hdHRyaWJ1dGUtb3B0aW9uLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQVF2RCxNQUFNLE9BQU8scUJBQXFCOztBQUN6QixxQ0FBZSxHQUFHLENBSXZCLGFBQXdCLEVBQ3hCLE1BQWtDLEVBQ08sRUFBRTtJQUMzQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBb0IsQ0FBQztRQUN2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUU5RyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUN2QixDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUN6RyxDQUFBO0lBQ0QsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUE0RCxLQUFLLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBRXpHLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFBO0lBQ3RGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFBO0lBRW5ILE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFBO0FBQ2hGLENBQUMsQ0FBQTtBQUVNLHlDQUFtQixHQUFHLENBQzNCLFVBQW1ELEVBQ0YsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFBO0FBRXZFLDhDQUF3QixHQUFHLENBQ2hDLFVBQWtCLEVBQ2xCLE1BQXdDLEVBQ21FLEVBQUU7SUFDN0csSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQXNELENBQUM7UUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsVUFBZ0UsRUFBRSxDQUFBO0lBRXhHLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FDZCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUVsQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ3hELHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDcEcsQ0FBQTtRQUVELE9BQU8scUJBQXFCLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLElBQUksWUFBWSxFQUFFLFVBQVUsS0FBSyxVQUFVLENBQUE7SUFDM0csQ0FBQyxDQUFDLElBQUksRUFBRSxDQUNULENBQUE7SUFDRCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDM0MsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQ3RCLHFCQUFxQixDQUFDLG1CQUFtQixDQUN2QyxLQUFLLENBQUMsbUJBQXlFLENBQUMsQ0FDakYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBeUUsQ0FBQyxDQUFDLENBQ2pELENBQUE7SUFDdkQsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUE7SUFFMUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQW1FLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFBO0lBRXBILE9BQU87UUFDTCxhQUFhLEVBQUUsYUFBYSxJQUFLLFVBQWlFO1FBQ2xHLFVBQVU7UUFDVixHQUFHLFdBQVc7S0FDZixDQUFBO0FBQ0gsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWxCYXNlU3RydWN0dXJlLCBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZG9tYWluJ1xuaW1wb3J0IHsgaXMsIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgQ29sdW1uT3B0aW9ucywgSGFzdXJhR3JhcGhRTEZpZWxkcyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG50eXBlIEZpbmRCeUF0dHJpYnV0ZVJlc3VsdDxcbiAgTUJhc2UgZXh0ZW5kcyBNb2RlbEJhc2VTdHJ1Y3R1cmU8TUJhc2U+LFxuICBBdHRyaWJ1dGUgZXh0ZW5kcyBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPE1CYXNlPixcbj4gPSBDb2x1bW5PcHRpb25zPE1CYXNlW0F0dHJpYnV0ZV0sIE1CYXNlPiAmIHsgYXR0cmlidXRlTmFtZTogQXR0cmlidXRlIH1cblxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZU9wdGlvbkhlbHBlciB7XG4gIHN0YXRpYyBGaW5kQnlBdHRyaWJ1dGUgPSA8XG4gICAgTUJhc2UgZXh0ZW5kcyBNb2RlbEJhc2VTdHJ1Y3R1cmU8TUJhc2UsIE1CYXNlWydpZGVudGlmaWVyc0ZpZWxkcyddW251bWJlcl0+LFxuICAgIEF0dHJpYnV0ZSBleHRlbmRzIE5vbkZ1bmN0aW9uQW5kSWRlbnRpZmllclByb3BlcnR5TmFtZXM8TUJhc2U+ID0gTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxNQmFzZT4sXG4gID4oXG4gICAgYXR0cmlidXRlTmFtZTogQXR0cmlidXRlLFxuICAgIGZpZWxkczogSGFzdXJhR3JhcGhRTEZpZWxkczxNQmFzZT4sXG4gICk6IEZpbmRCeUF0dHJpYnV0ZVJlc3VsdDxNQmFzZSwgQXR0cmlidXRlPiA9PiB7XG4gICAgaWYgKGZpZWxkcy5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lIGFzIGFueSkpXG4gICAgICByZXR1cm4geyBjb2x1bW5OYW1lOiBhdHRyaWJ1dGVOYW1lLnRvU3RyaW5nKCksIGF0dHJpYnV0ZU5hbWUsIHRvOiAodmFsdWUpID0+IHZhbHVlLCBmcm9tOiAodmFsdWUpID0+IHZhbHVlIH1cblxuICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoXG4gICAgICAoY29sdW1uT3B0aW9uKSA9PiBpc09iamVjdChjb2x1bW5PcHRpb24pICYmIE9iamVjdC5rZXlzKGNvbHVtbk9wdGlvbikuaW5jbHVkZXMoYXR0cmlidXRlTmFtZS50b1N0cmluZygpKSxcbiAgICApXG4gICAgY29uc3QgZmllbGRPcHRpb24gPSBpczxSZWNvcmQ8QXR0cmlidXRlLCBDb2x1bW5PcHRpb25zPE1CYXNlW0F0dHJpYnV0ZV0sIE1CYXNlPj4+KGZpZWxkKT8uW2F0dHJpYnV0ZU5hbWVdXG5cbiAgICBpZiAoaXNOaWwoZmllbGRPcHRpb24pKSByZXR1cm4geyBjb2x1bW5OYW1lOiBhdHRyaWJ1dGVOYW1lLnRvU3RyaW5nKCksIGF0dHJpYnV0ZU5hbWUgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkT3B0aW9uKSkgcmV0dXJuIHsgY29sdW1uTmFtZTogYXR0cmlidXRlTmFtZS50b1N0cmluZygpLCBhdHRyaWJ1dGVOYW1lLCBmaWVsZHM6IGZpZWxkT3B0aW9uIH1cblxuICAgIHJldHVybiB7IGF0dHJpYnV0ZU5hbWUsIGNvbHVtbk5hbWU6IGF0dHJpYnV0ZU5hbWUudG9TdHJpbmcoKSwgLi4uZmllbGRPcHRpb24gfVxuICB9XG5cbiAgc3RhdGljIENoZWNrSXNDb2x1bW5PcHRpb24gPSA8TW9kZWwgZXh0ZW5kcyBNb2RlbEJhc2VTdHJ1Y3R1cmU8TW9kZWw+LCBQYXJlbnRNb2RlbCBleHRlbmRzIE1vZGVsQmFzZVN0cnVjdHVyZT4oXG4gICAgZmllbGRWYWx1ZTogQ29sdW1uT3B0aW9uczxNb2RlbCwgUGFyZW50TW9kZWw+IHwgYW55LFxuICApOiBmaWVsZFZhbHVlIGlzIENvbHVtbk9wdGlvbnM8TW9kZWwsIFBhcmVudE1vZGVsPiA9PiAhIWZpZWxkVmFsdWU/LmNvbHVtbk5hbWVcblxuICBzdGF0aWMgRmluZENvbHVtbk9wdGlvbkZyb21MaXN0ID0gPE1vZGVsIGV4dGVuZHMgTW9kZWxCYXNlU3RydWN0dXJlLCBQYXJlbnRNb2RlbCBleHRlbmRzIE1vZGVsQmFzZVN0cnVjdHVyZT4oXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIGZpZWxkczogSGFzdXJhR3JhcGhRTEZpZWxkczxQYXJlbnRNb2RlbD4sXG4gICk6IENvbHVtbk9wdGlvbnM8TW9kZWwsIFBhcmVudE1vZGVsPiAmIHsgYXR0cmlidXRlTmFtZTogTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxQYXJlbnRNb2RlbD4gfSA9PiB7XG4gICAgaWYgKGZpZWxkcy5pbmNsdWRlcyhjb2x1bW5OYW1lIGFzIEhhc3VyYUdyYXBoUUxGaWVsZHM8UGFyZW50TW9kZWw+W251bWJlcl0pKVxuICAgICAgcmV0dXJuIHsgY29sdW1uTmFtZSwgYXR0cmlidXRlTmFtZTogY29sdW1uTmFtZSBhcyBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPFBhcmVudE1vZGVsPiB9XG5cbiAgICBjb25zdCBmaWVsZCA9IGlzPFJlY29yZDxOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPFBhcmVudE1vZGVsPiwgQ29sdW1uT3B0aW9uczxNb2RlbCwgUGFyZW50TW9kZWw+Pj4oXG4gICAgICBmaWVsZHMuZmluZCgoZmllbGQpID0+IHtcbiAgICAgICAgaWYgKCFpc09iamVjdChmaWVsZCkpIHJldHVybiBmYWxzZVxuXG4gICAgICAgIGNvbnN0IGNvbHVtbk9wdGlvbiA9IE9iamVjdC52YWx1ZXMoZmllbGQpLmZpbmQoKG9wdGlvbikgPT5cbiAgICAgICAgICBBdHRyaWJ1dGVPcHRpb25IZWxwZXIuQ2hlY2tJc0NvbHVtbk9wdGlvbihvcHRpb24pICYmIG9wdGlvbi5jb2x1bW5OYW1lID09PSBjb2x1bW5OYW1lID8gb3B0aW9uIDoge30sXG4gICAgICAgIClcblxuICAgICAgICByZXR1cm4gQXR0cmlidXRlT3B0aW9uSGVscGVyLkNoZWNrSXNDb2x1bW5PcHRpb24oY29sdW1uT3B0aW9uKSAmJiBjb2x1bW5PcHRpb24/LmNvbHVtbk5hbWUgPT09IGNvbHVtbk5hbWVcbiAgICAgIH0pIHx8IHt9LFxuICAgIClcbiAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gT2JqZWN0LmtleXMoZmllbGQpLmZpbmQoXG4gICAgICAoZmllbGRPcHRpb25Gcm9tTGlzdCkgPT5cbiAgICAgICAgQXR0cmlidXRlT3B0aW9uSGVscGVyLkNoZWNrSXNDb2x1bW5PcHRpb24oXG4gICAgICAgICAgZmllbGRbZmllbGRPcHRpb25Gcm9tTGlzdCBhcyBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPFBhcmVudE1vZGVsPl0sXG4gICAgICAgICkgfHwgQXJyYXkuaXNBcnJheShmaWVsZFtmaWVsZE9wdGlvbkZyb21MaXN0IGFzIE5vbkZ1bmN0aW9uQW5kSWRlbnRpZmllclByb3BlcnR5TmFtZXM8UGFyZW50TW9kZWw+XSksXG4gICAgKSBhcyBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPFBhcmVudE1vZGVsPlxuICAgIGNvbnN0IGZpZWxkT3B0aW9uID0gZmllbGQ/LlthdHRyaWJ1dGVOYW1lXVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGRPcHRpb24pKVxuICAgICAgcmV0dXJuIHsgYXR0cmlidXRlTmFtZTogYXR0cmlidXRlTmFtZSBhcyBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPFBhcmVudE1vZGVsPiwgZmllbGRzOiBmaWVsZE9wdGlvbiB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRlTmFtZTogYXR0cmlidXRlTmFtZSB8fCAoY29sdW1uTmFtZSBhcyBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPFBhcmVudE1vZGVsPiksXG4gICAgICBjb2x1bW5OYW1lLFxuICAgICAgLi4uZmllbGRPcHRpb24sXG4gICAgfVxuICB9XG59XG4iXX0=
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLW9wdGlvbi5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0L3NyYy9pbmZyYS9oYXN1cmEtZ3JhcGhxbC9taXhpbnMvaGVscGVycy9hdHRyaWJ1dGUtb3B0aW9uLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQVF2RCxNQUFNLE9BQU8scUJBQXFCO2FBQ3pCLG9CQUFlLEdBQUcsQ0FJdkIsYUFBd0IsRUFDeEIsTUFBa0MsRUFDTyxFQUFFO1FBQzNDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFvQixDQUFDO1lBQ3ZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBRTlHLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ3ZCLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQ3pHLENBQUE7UUFDRCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQTRELEtBQUssQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUE7UUFFekcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDO1lBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLENBQUMsUUFBUSxFQUFFLEVBQUUsYUFBYSxFQUFFLENBQUE7UUFDdEYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUE7UUFFbkgsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUE7SUFDaEYsQ0FBQyxDQUFBO2FBRU0sd0JBQW1CLEdBQUcsQ0FDM0IsVUFBbUQsRUFDRixFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUE7YUFFdkUsNkJBQXdCLEdBQUcsQ0FDaEMsVUFBa0IsRUFDbEIsTUFBd0MsRUFDbUUsRUFBRTtRQUM3RyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBc0QsQ0FBQztZQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxVQUFnRSxFQUFFLENBQUE7UUFFeEcsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFBRSxPQUFPLEtBQUssQ0FBQTtZQUVsQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ3hELHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDcEcsQ0FBQTtZQUVELE9BQU8scUJBQXFCLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLElBQUksWUFBWSxFQUFFLFVBQVUsS0FBSyxVQUFVLENBQUE7UUFDM0csQ0FBQyxDQUFDLElBQUksRUFBRSxDQUNULENBQUE7UUFDRCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDM0MsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQ3RCLHFCQUFxQixDQUFDLG1CQUFtQixDQUN2QyxLQUFLLENBQUMsbUJBQXlFLENBQUMsQ0FDakYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBeUUsQ0FBQyxDQUFDLENBQ2pELENBQUE7UUFDdkQsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUE7UUFFMUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQW1FLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFBO1FBRXBILE9BQU87WUFDTCxhQUFhLEVBQUUsYUFBYSxJQUFLLFVBQWlFO1lBQ2xHLFVBQVU7WUFDVixHQUFHLFdBQVc7U0FDZixDQUFBO0lBQ0gsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWxCYXNlU3RydWN0dXJlLCBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZG9tYWluJ1xuaW1wb3J0IHsgaXMsIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgQ29sdW1uT3B0aW9ucywgSGFzdXJhR3JhcGhRTEZpZWxkcyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG50eXBlIEZpbmRCeUF0dHJpYnV0ZVJlc3VsdDxcbiAgTUJhc2UgZXh0ZW5kcyBNb2RlbEJhc2VTdHJ1Y3R1cmU8TUJhc2U+LFxuICBBdHRyaWJ1dGUgZXh0ZW5kcyBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPE1CYXNlPixcbj4gPSBDb2x1bW5PcHRpb25zPE1CYXNlW0F0dHJpYnV0ZV0sIE1CYXNlPiAmIHsgYXR0cmlidXRlTmFtZTogQXR0cmlidXRlIH1cblxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZU9wdGlvbkhlbHBlciB7XG4gIHN0YXRpYyBGaW5kQnlBdHRyaWJ1dGUgPSA8XG4gICAgTUJhc2UgZXh0ZW5kcyBNb2RlbEJhc2VTdHJ1Y3R1cmU8TUJhc2UsIE1CYXNlWydpZGVudGlmaWVyc0ZpZWxkcyddW251bWJlcl0+LFxuICAgIEF0dHJpYnV0ZSBleHRlbmRzIE5vbkZ1bmN0aW9uQW5kSWRlbnRpZmllclByb3BlcnR5TmFtZXM8TUJhc2U+ID0gTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxNQmFzZT4sXG4gID4oXG4gICAgYXR0cmlidXRlTmFtZTogQXR0cmlidXRlLFxuICAgIGZpZWxkczogSGFzdXJhR3JhcGhRTEZpZWxkczxNQmFzZT4sXG4gICk6IEZpbmRCeUF0dHJpYnV0ZVJlc3VsdDxNQmFzZSwgQXR0cmlidXRlPiA9PiB7XG4gICAgaWYgKGZpZWxkcy5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lIGFzIGFueSkpXG4gICAgICByZXR1cm4geyBjb2x1bW5OYW1lOiBhdHRyaWJ1dGVOYW1lLnRvU3RyaW5nKCksIGF0dHJpYnV0ZU5hbWUsIHRvOiAodmFsdWUpID0+IHZhbHVlLCBmcm9tOiAodmFsdWUpID0+IHZhbHVlIH1cblxuICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoXG4gICAgICAoY29sdW1uT3B0aW9uKSA9PiBpc09iamVjdChjb2x1bW5PcHRpb24pICYmIE9iamVjdC5rZXlzKGNvbHVtbk9wdGlvbikuaW5jbHVkZXMoYXR0cmlidXRlTmFtZS50b1N0cmluZygpKSxcbiAgICApXG4gICAgY29uc3QgZmllbGRPcHRpb24gPSBpczxSZWNvcmQ8QXR0cmlidXRlLCBDb2x1bW5PcHRpb25zPE1CYXNlW0F0dHJpYnV0ZV0sIE1CYXNlPj4+KGZpZWxkKT8uW2F0dHJpYnV0ZU5hbWVdXG5cbiAgICBpZiAoaXNOaWwoZmllbGRPcHRpb24pKSByZXR1cm4geyBjb2x1bW5OYW1lOiBhdHRyaWJ1dGVOYW1lLnRvU3RyaW5nKCksIGF0dHJpYnV0ZU5hbWUgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkT3B0aW9uKSkgcmV0dXJuIHsgY29sdW1uTmFtZTogYXR0cmlidXRlTmFtZS50b1N0cmluZygpLCBhdHRyaWJ1dGVOYW1lLCBmaWVsZHM6IGZpZWxkT3B0aW9uIH1cblxuICAgIHJldHVybiB7IGF0dHJpYnV0ZU5hbWUsIGNvbHVtbk5hbWU6IGF0dHJpYnV0ZU5hbWUudG9TdHJpbmcoKSwgLi4uZmllbGRPcHRpb24gfVxuICB9XG5cbiAgc3RhdGljIENoZWNrSXNDb2x1bW5PcHRpb24gPSA8TW9kZWwgZXh0ZW5kcyBNb2RlbEJhc2VTdHJ1Y3R1cmU8TW9kZWw+LCBQYXJlbnRNb2RlbCBleHRlbmRzIE1vZGVsQmFzZVN0cnVjdHVyZT4oXG4gICAgZmllbGRWYWx1ZTogQ29sdW1uT3B0aW9uczxNb2RlbCwgUGFyZW50TW9kZWw+IHwgYW55LFxuICApOiBmaWVsZFZhbHVlIGlzIENvbHVtbk9wdGlvbnM8TW9kZWwsIFBhcmVudE1vZGVsPiA9PiAhIWZpZWxkVmFsdWU/LmNvbHVtbk5hbWVcblxuICBzdGF0aWMgRmluZENvbHVtbk9wdGlvbkZyb21MaXN0ID0gPE1vZGVsIGV4dGVuZHMgTW9kZWxCYXNlU3RydWN0dXJlLCBQYXJlbnRNb2RlbCBleHRlbmRzIE1vZGVsQmFzZVN0cnVjdHVyZT4oXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIGZpZWxkczogSGFzdXJhR3JhcGhRTEZpZWxkczxQYXJlbnRNb2RlbD4sXG4gICk6IENvbHVtbk9wdGlvbnM8TW9kZWwsIFBhcmVudE1vZGVsPiAmIHsgYXR0cmlidXRlTmFtZTogTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxQYXJlbnRNb2RlbD4gfSA9PiB7XG4gICAgaWYgKGZpZWxkcy5pbmNsdWRlcyhjb2x1bW5OYW1lIGFzIEhhc3VyYUdyYXBoUUxGaWVsZHM8UGFyZW50TW9kZWw+W251bWJlcl0pKVxuICAgICAgcmV0dXJuIHsgY29sdW1uTmFtZSwgYXR0cmlidXRlTmFtZTogY29sdW1uTmFtZSBhcyBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPFBhcmVudE1vZGVsPiB9XG5cbiAgICBjb25zdCBmaWVsZCA9IGlzPFJlY29yZDxOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPFBhcmVudE1vZGVsPiwgQ29sdW1uT3B0aW9uczxNb2RlbCwgUGFyZW50TW9kZWw+Pj4oXG4gICAgICBmaWVsZHMuZmluZCgoZmllbGQpID0+IHtcbiAgICAgICAgaWYgKCFpc09iamVjdChmaWVsZCkpIHJldHVybiBmYWxzZVxuXG4gICAgICAgIGNvbnN0IGNvbHVtbk9wdGlvbiA9IE9iamVjdC52YWx1ZXMoZmllbGQpLmZpbmQoKG9wdGlvbikgPT5cbiAgICAgICAgICBBdHRyaWJ1dGVPcHRpb25IZWxwZXIuQ2hlY2tJc0NvbHVtbk9wdGlvbihvcHRpb24pICYmIG9wdGlvbi5jb2x1bW5OYW1lID09PSBjb2x1bW5OYW1lID8gb3B0aW9uIDoge30sXG4gICAgICAgIClcblxuICAgICAgICByZXR1cm4gQXR0cmlidXRlT3B0aW9uSGVscGVyLkNoZWNrSXNDb2x1bW5PcHRpb24oY29sdW1uT3B0aW9uKSAmJiBjb2x1bW5PcHRpb24/LmNvbHVtbk5hbWUgPT09IGNvbHVtbk5hbWVcbiAgICAgIH0pIHx8IHt9LFxuICAgIClcbiAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gT2JqZWN0LmtleXMoZmllbGQpLmZpbmQoXG4gICAgICAoZmllbGRPcHRpb25Gcm9tTGlzdCkgPT5cbiAgICAgICAgQXR0cmlidXRlT3B0aW9uSGVscGVyLkNoZWNrSXNDb2x1bW5PcHRpb24oXG4gICAgICAgICAgZmllbGRbZmllbGRPcHRpb25Gcm9tTGlzdCBhcyBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPFBhcmVudE1vZGVsPl0sXG4gICAgICAgICkgfHwgQXJyYXkuaXNBcnJheShmaWVsZFtmaWVsZE9wdGlvbkZyb21MaXN0IGFzIE5vbkZ1bmN0aW9uQW5kSWRlbnRpZmllclByb3BlcnR5TmFtZXM8UGFyZW50TW9kZWw+XSksXG4gICAgKSBhcyBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPFBhcmVudE1vZGVsPlxuICAgIGNvbnN0IGZpZWxkT3B0aW9uID0gZmllbGQ/LlthdHRyaWJ1dGVOYW1lXVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGRPcHRpb24pKVxuICAgICAgcmV0dXJuIHsgYXR0cmlidXRlTmFtZTogYXR0cmlidXRlTmFtZSBhcyBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPFBhcmVudE1vZGVsPiwgZmllbGRzOiBmaWVsZE9wdGlvbiB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRlTmFtZTogYXR0cmlidXRlTmFtZSB8fCAoY29sdW1uTmFtZSBhcyBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPFBhcmVudE1vZGVsPiksXG4gICAgICBjb2x1bW5OYW1lLFxuICAgICAgLi4uZmllbGRPcHRpb24sXG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Where, } from '../../../../domain';
|
|
2
|
+
import { is, isNil, isObject } from '../../../../utils';
|
|
3
|
+
import { HasuraGraphQLColumnType, HasuraGraphQLWhere } from '../../enums';
|
|
4
|
+
import { AttributeOptionHelper } from './attribute-option.helper';
|
|
5
|
+
import { FilterOptionHelper } from './filter-option.helper';
|
|
6
|
+
export class BindFilterQueryHelper {
|
|
7
|
+
static { this.MakeGraphQLWhere = (filter, fields) => Object.keys(filter).reduce((variables, fieldName) => {
|
|
8
|
+
const columnOption = AttributeOptionHelper.FindByAttribute(fieldName, fields);
|
|
9
|
+
if (!columnOption.bindFindFilter)
|
|
10
|
+
return {
|
|
11
|
+
...variables,
|
|
12
|
+
...{
|
|
13
|
+
[columnOption.columnName]: BindFilterQueryHelper.BuildWhereSentence(fieldName, filter[fieldName], fields),
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
const builtFilter = columnOption.bindFindFilter(filter[fieldName]);
|
|
17
|
+
return {
|
|
18
|
+
...variables,
|
|
19
|
+
...Object.keys(builtFilter).reduce((variablesList, columnName) => ({
|
|
20
|
+
...variablesList,
|
|
21
|
+
[columnName]: BindFilterQueryHelper.BuildWhereSentence(fieldName, builtFilter[columnName], fields),
|
|
22
|
+
}), {}),
|
|
23
|
+
};
|
|
24
|
+
}, {}); }
|
|
25
|
+
static { this.BuildWhereSentence = (field, options, fields) => {
|
|
26
|
+
const fieldSentenceOptions = AttributeOptionHelper.FindByAttribute(field, fields);
|
|
27
|
+
const isNestedField = !Array.isArray(options) &&
|
|
28
|
+
isObject(options) &&
|
|
29
|
+
isNil(options?.operator) &&
|
|
30
|
+
isNil(options?.value) &&
|
|
31
|
+
isNil(fieldSentenceOptions?.to);
|
|
32
|
+
if (isNestedField)
|
|
33
|
+
return Object.keys(options).reduce((variables, key) => {
|
|
34
|
+
const fieldOptions = AttributeOptionHelper.FindByAttribute(key, fieldSentenceOptions?.fields || fields);
|
|
35
|
+
const columnName = fieldOptions.columnName;
|
|
36
|
+
const columnFields = fieldOptions.fields;
|
|
37
|
+
return {
|
|
38
|
+
...variables,
|
|
39
|
+
[columnName]: BindFilterQueryHelper.BuildWhereSentence(key, is(is(options)[key]), fieldSentenceOptions?.fields || columnFields || fields),
|
|
40
|
+
};
|
|
41
|
+
}, {});
|
|
42
|
+
if (!Array.isArray(options) && !isNil(fieldSentenceOptions.fields))
|
|
43
|
+
return {
|
|
44
|
+
[fieldSentenceOptions.fields[0]]: BindFilterQueryHelper.BuildOperatorSentence(options, fieldSentenceOptions),
|
|
45
|
+
};
|
|
46
|
+
if (!Array.isArray(options) && isObject(options) && !FilterOptionHelper.CheckIfIsFilterOption(options))
|
|
47
|
+
options = Object.values(options)[0];
|
|
48
|
+
return Array.isArray(options)
|
|
49
|
+
? options.reduce((whereSentence, option) => ({
|
|
50
|
+
...whereSentence,
|
|
51
|
+
...BindFilterQueryHelper.BuildOperatorSentence(option, fieldSentenceOptions),
|
|
52
|
+
}), {})
|
|
53
|
+
: BindFilterQueryHelper.BuildOperatorSentence(options, fieldSentenceOptions);
|
|
54
|
+
}; }
|
|
55
|
+
static { this.BuildOperatorSentence = (options, fieldOption) => ({
|
|
56
|
+
[BindFilterQueryHelper.GetHasuraOperator(options, fieldOption)]: FilterOptionHelper.GetValueFromFilter(options, fieldOption),
|
|
57
|
+
}); }
|
|
58
|
+
static { this.GetHasuraOperator = (options, fieldOption) => FilterOptionHelper.CheckIfIsFilterOption(options)
|
|
59
|
+
? fieldOption.type === HasuraGraphQLColumnType.Jsonb
|
|
60
|
+
? BindFilterQueryHelper.GetHasuraJsonbOperator(options)
|
|
61
|
+
: HasuraGraphQLWhere[Object.keys(HasuraGraphQLWhere).find((graphQLOperator) => graphQLOperator ===
|
|
62
|
+
Object.keys(Where).find((operator) => Where[operator] === options?.operator))]
|
|
63
|
+
: HasuraGraphQLWhere.EQUALS; }
|
|
64
|
+
static { this.GetHasuraJsonbOperator = (options) => options.operator === Where.IN
|
|
65
|
+
? HasuraGraphQLWhere.JSON_CONTAINS
|
|
66
|
+
: options.operator === Where.LIKE
|
|
67
|
+
? HasuraGraphQLWhere.JSON_HAS_KEYS_ANY
|
|
68
|
+
: HasuraGraphQLWhere[Object.keys(HasuraGraphQLWhere).find((graphQLOperator) => graphQLOperator ===
|
|
69
|
+
Object.keys(Where).find((operator) => Where[operator] === options?.operator))]; }
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluZC1maWx0ZXItcXVlcnkuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC9zcmMvaW5mcmEvaGFzdXJhLWdyYXBocWwvbWl4aW5zL2hlbHBlcnMvYmluZC1maWx0ZXItcXVlcnkuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFNTCxLQUFLLEdBQ04sTUFBTSxvQkFBb0IsQ0FBQTtBQUMzQixPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFFM0QsTUFBTSxPQUFPLHFCQUFxQjthQUN6QixxQkFBZ0IsR0FBRyxDQUN4QixNQUFxQyxFQUNyQyxNQUFrQyxFQUNqQixFQUFFLENBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBMEIsRUFBRSxTQUFpQixFQUFFLEVBQUU7UUFDM0UsTUFBTSxZQUFZLEdBQUcscUJBQXFCLENBQUMsZUFBZSxDQUN4RCxTQUF5RCxFQUN6RCxNQUFNLENBQ1AsQ0FBQTtRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYztZQUM5QixPQUFPO2dCQUNMLEdBQUcsU0FBUztnQkFDWixHQUFHO29CQUNELENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUFFLHFCQUFxQixDQUFDLGtCQUFrQixDQUNqRSxTQUF5RCxFQUN6RCxNQUFNLENBQUMsU0FBeUQsQ0FHL0QsRUFDRCxNQUFNLENBQ1A7aUJBQ0Y7YUFDRixDQUFBO1FBRUgsTUFBTSxXQUFXLEdB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QUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxJQUFJO1lBQ2pDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUI7WUFDdEMsQ0FBQyxDQUFDLGtCQUFrQixDQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUNsQyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQ2xCLGVBQWU7Z0JBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUE4QixDQUFDLEtBQUssT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUNsRSxDQUNyQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTW9kZWxCYXNlU3RydWN0dXJlLFxuICBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzLFxuICBOb25GdW5jdGlvblByb3BlcnR5TmFtZXMsXG4gIFJlcG9zaXRvcnlGaW5kRmllbHRlcnMsXG4gIFJlcG9zaXRvcnlGaW5kRmllbHRlcnNPcHRpb25zLFxuICBXaGVyZSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vZG9tYWluJ1xuaW1wb3J0IHsgaXMsIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgSGFzdXJhR3JhcGhRTENvbHVtblR5cGUsIEhhc3VyYUdyYXBoUUxXaGVyZSB9IGZyb20gJy4uLy4uL2VudW1zJ1xuaW1wb3J0IHsgQ29sdW1uT3B0aW9ucywgSGFzdXJhR3JhcGhRTEZpZWxkcywgVmFyaWFibGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBBdHRyaWJ1dGVPcHRpb25IZWxwZXIgfSBmcm9tICcuL2F0dHJpYnV0ZS1vcHRpb24uaGVscGVyJ1xuaW1wb3J0IHsgRmlsdGVyT3B0aW9uSGVscGVyIH0gZnJvbSAnLi9maWx0ZXItb3B0aW9uLmhlbHBlcidcblxuZXhwb3J0IGNsYXNzIEJpbmRGaWx0ZXJRdWVyeUhlbHBlciB7XG4gIHN0YXRpYyBNYWtlR3JhcGhRTFdoZXJlID0gPE1CYXNlIGV4dGVuZHMgTW9kZWxCYXNlU3RydWN0dXJlPE1CYXNlPj4oXG4gICAgZmlsdGVyOiBSZXBvc2l0b3J5RmluZEZpZWx0ZXJzPE1CYXNlPixcbiAgICBmaWVsZHM6IEhhc3VyYUdyYXBoUUxGaWVsZHM8TUJhc2U+LFxuICApOiBWYXJpYWJsZU9wdGlvbnMgPT5cbiAgICBPYmplY3Qua2V5cyhmaWx0ZXIpLnJlZHVjZSgodmFyaWFibGVzOiBWYXJpYWJsZU9wdGlvbnMsIGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBjb2x1bW5PcHRpb24gPSBBdHRyaWJ1dGVPcHRpb25IZWxwZXIuRmluZEJ5QXR0cmlidXRlKFxuICAgICAgICBmaWVsZE5hbWUgYXMgTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxNQmFzZT4sXG4gICAgICAgIGZpZWxkcyxcbiAgICAgIClcblxuICAgICAgaWYgKCFjb2x1bW5PcHRpb24uYmluZEZpbmRGaWx0ZXIpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udmFyaWFibGVzLFxuICAgICAgICAgIC4uLntcbiAgICAgICAgICAgIFtjb2x1bW5PcHRpb24uY29sdW1uTmFtZV06IEJpbmRGaWx0ZXJRdWVyeUhlbHBlci5CdWlsZFdoZXJlU2VudGVuY2UoXG4gICAgICAgICAgICAgIGZpZWxkTmFtZSBhcyBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPE1CYXNlPixcbiAgICAgICAgICAgICAgZmlsdGVyW2ZpZWxkTmFtZSBhcyBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPE1CYXNlPl0gYXMgUmVwb3NpdG9yeUZpbmRGaWVsdGVyc09wdGlvbnM8XG4gICAgICAgICAgICAgICAgTUJhc2UsXG4gICAgICAgICAgICAgICAgTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxNQmFzZT5cbiAgICAgICAgICAgICAgPixcbiAgICAgICAgICAgICAgZmllbGRzLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG5cbiAgICAgIGNvbnN0IGJ1aWx0RmlsdGVyOiBSZXBvc2l0b3J5RmluZEZpZWx0ZXJzPE1CYXNlPiA9IGNvbHVtbk9wdGlvbi5iaW5kRmluZEZpbHRlcihcbiAgICAgICAgZmlsdGVyW2ZpZWxkTmFtZSBhcyBOb25GdW5jdGlvblByb3BlcnR5TmFtZXM8TUJhc2U+XSBhcyBSZXBvc2l0b3J5RmluZEZpZWx0ZXJzT3B0aW9uczxcbiAgICAgICAgICBNQmFzZSxcbiAgICAgICAgICBOb25GdW5jdGlvblByb3BlcnR5TmFtZXM8TUJhc2U+XG4gICAgICAgID4sXG4gICAgICApXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZhcmlhYmxlcyxcbiAgICAgICAgLi4uT2JqZWN0LmtleXMoYnVpbHRGaWx0ZXIpLnJlZHVjZShcbiAgICAgICAgICAodmFyaWFibGVzTGlzdDogVmFyaWFibGVPcHRpb25zLCBjb2x1bW5OYW1lOiBzdHJpbmcpID0+ICh7XG4gICAgICAgICAgICAuLi52YXJpYWJsZXNMaXN0LFxuICAgICAgICAgICAgW2NvbHVtbk5hbWVdOiBCaW5kRmlsdGVyUXVlcnlIZWxwZXIuQnVpbGRXaGVyZVNlbnRlbmNlKFxuICAgICAgICAgICAgICBmaWVsZE5hbWUgYXMgTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxNQmFzZT4sXG4gICAgICAgICAgICAgIGJ1aWx0RmlsdGVyW2NvbHVtbk5hbWUgYXMgTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxNQmFzZT5dIGFzIFJlcG9zaXRvcnlGaW5kRmllbHRlcnNPcHRpb25zPFxuICAgICAgICAgICAgICAgIE1CYXNlLFxuICAgICAgICAgICAgICAgIE5vbkZ1bmN0aW9uQW5kSWRlbnRpZmllclByb3BlcnR5TmFtZXM8TUJhc2U+XG4gICAgICAgICAgICAgID4sXG4gICAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSksXG4gICAgICAgICAge30sXG4gICAgICAgICksXG4gICAgICB9XG4gICAgfSwge30pXG5cbiAgc3RhdGljIEJ1aWxkV2hlcmVTZW50ZW5jZSA9IDxNQmFzZSBleHRlbmRzIE1vZGVsQmFzZVN0cnVjdHVyZTxNQmFzZT4+KFxuICAgIGZpZWxkOiBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPE1CYXNlPixcbiAgICBvcHRpb25zOiBSZXBvc2l0b3J5RmluZEZpZWx0ZXJzT3B0aW9uczxNQmFzZSwgTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxNQmFzZT4+LFxuICAgIGZpZWxkczogSGFzdXJhR3JhcGhRTEZpZWxkczxNQmFzZT4sXG4gICk6IFZhcmlhYmxlT3B0aW9ucyA9PiB7XG4gICAgY29uc3QgZmllbGRTZW50ZW5jZU9wdGlvbnMgPSBBdHRyaWJ1dGVPcHRpb25IZWxwZXIuRmluZEJ5QXR0cmlidXRlPE1CYXNlPihmaWVsZCwgZmllbGRzKVxuICAgIGNvbnN0IGlzTmVzdGVkRmllbGQgPVxuICAgICAgIUFycmF5LmlzQXJyYXkob3B0aW9ucykgJiZcbiAgICAgIGlzT2JqZWN0KG9wdGlvbnMpICYmXG4gICAgICBpc05pbChvcHRpb25zPy5vcGVyYXRvcikgJiZcbiAgICAgIGlzTmlsKG9wdGlvbnM/LnZhbHVlKSAmJlxuICAgICAgaXNOaWwoZmllbGRTZW50ZW5jZU9wdGlvbnM/LnRvKVxuXG4gICAgaWYgKGlzTmVzdGVkRmllbGQpXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMob3B0aW9ucykucmVkdWNlKCh2YXJpYWJsZXMsIGtleSkgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZE9wdGlvbnMgPSBBdHRyaWJ1dGVPcHRpb25IZWxwZXIuRmluZEJ5QXR0cmlidXRlPE1CYXNlPihcbiAgICAgICAgICBrZXkgYXMgTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxNQmFzZT4sXG4gICAgICAgICAgZmllbGRTZW50ZW5jZU9wdGlvbnM/LmZpZWxkcyB8fCAoZmllbGRzIGFzIGFueSksXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgY29sdW1uTmFtZSA9IGZpZWxkT3B0aW9ucy5jb2x1bW5OYW1lXG4gICAgICAgIGNvbnN0IGNvbHVtbkZpZWxkcyA9IGZpZWxkT3B0aW9ucy5maWVsZHNcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnZhcmlhYmxlcyxcbiAgICAgICAgICBbY29sdW1uTmFtZV06IEJpbmRGaWx0ZXJRdWVyeUhlbHBlci5CdWlsZFdoZXJlU2VudGVuY2U8TUJhc2U+KFxuICAgICAgICAgICAga2V5IGFzIE5vbkZ1bmN0aW9uQW5kSWRlbnRpZmllclByb3BlcnR5TmFtZXM8TUJhc2U+LFxuICAgICAgICAgICAgaXM8UmVwb3NpdG9yeUZpbmRGaWVsdGVyc09wdGlvbnM8TUJhc2UsIE5vbkZ1bmN0aW9uQW5kSWRlbnRpZmllclByb3BlcnR5TmFtZXM8TUJhc2U+Pj4oXG4gICAgICAgICAgICAgIGlzPFJlcG9zaXRvcnlGaW5kRmllbHRlcnM8TUJhc2U+PihvcHRpb25zKVtrZXkgYXMgTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxNQmFzZT5dLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGZpZWxkU2VudGVuY2VPcHRpb25zPy5maWVsZHMgfHwgY29sdW1uRmllbGRzIHx8IChmaWVsZHMgYXMgYW55KSxcbiAgICAgICAgICApLFxuICAgICAgICB9XG4gICAgICB9LCB7fSlcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25zKSAmJiAhaXNOaWwoZmllbGRTZW50ZW5jZU9wdGlvbnMuZmllbGRzKSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtmaWVsZFNlbnRlbmNlT3B0aW9ucy5maWVsZHNbMF0gYXMgTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxNQmFzZT5dOlxuICAgICAgICAgIEJpbmRGaWx0ZXJRdWVyeUhlbHBlci5CdWlsZE9wZXJhdG9yU2VudGVuY2UoXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgZmllbGRTZW50ZW5jZU9wdGlvbnMgYXMgQ29sdW1uT3B0aW9uczxNQmFzZVtOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPE1CYXNlPl0sIE1CYXNlPixcbiAgICAgICAgICApLFxuICAgICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIGlzT2JqZWN0KG9wdGlvbnMpICYmICFGaWx0ZXJPcHRpb25IZWxwZXIuQ2hlY2tJZklzRmlsdGVyT3B0aW9uKG9wdGlvbnMpKVxuICAgICAgb3B0aW9ucyA9IE9iamVjdC52YWx1ZXMob3B0aW9ucylbMF0gYXMgUmVwb3NpdG9yeUZpbmRGaWVsdGVyc09wdGlvbnM8TUJhc2UsIGFueT5cblxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KG9wdGlvbnMpXG4gICAgICA/IG9wdGlvbnMucmVkdWNlKFxuICAgICAgICAgICh3aGVyZVNlbnRlbmNlLCBvcHRpb24pID0+ICh7XG4gICAgICAgICAgICAuLi53aGVyZVNlbnRlbmNlLFxuICAgICAgICAgICAgLi4uQmluZEZpbHRlclF1ZXJ5SGVscGVyLkJ1aWxkT3BlcmF0b3JTZW50ZW5jZShcbiAgICAgICAgICAgICAgb3B0aW9uLFxuICAgICAgICAgICAgICBmaWVsZFNlbnRlbmNlT3B0aW9ucyBhcyBDb2x1bW5PcHRpb25zPE1CYXNlW05vbkZ1bmN0aW9uQW5kSWRlbnRpZmllclByb3BlcnR5TmFtZXM8TUJhc2U+XSwgTUJhc2U+LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7fSxcbiAgICAgICAgKVxuICAgICAgOiBCaW5kRmlsdGVyUXVlcnlIZWxwZXIuQnVpbGRPcGVyYXRvclNlbnRlbmNlKFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgZmllbGRTZW50ZW5jZU9wdGlvbnMgYXMgQ29sdW1uT3B0aW9uczxNQmFzZVtOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPE1CYXNlPl0sIE1CYXNlPixcbiAgICAgICAgKVxuICB9XG5cbiAgc3RhdGljIEJ1aWxkT3BlcmF0b3JTZW50ZW5jZSA9IDxNQmFzZSBleHRlbmRzIE1vZGVsQmFzZVN0cnVjdHVyZTxNQmFzZT4+KFxuICAgIG9wdGlvbnM6IFJlcG9zaXRvcnlGaW5kRmllbHRlcnNPcHRpb25zPE1CYXNlLCBhbnk+LFxuICAgIGZpZWxkT3B0aW9uOiBDb2x1bW5PcHRpb25zPGFueSwgYW55PixcbiAgKTogVmFyaWFibGVPcHRpb25zID0+ICh7XG4gICAgW0JpbmRGaWx0ZXJRdWVyeUhlbHBlci5HZXRIYXN1cmFPcGVyYXRvcihvcHRpb25zLCBmaWVsZE9wdGlvbildOiBGaWx0ZXJPcHRpb25IZWxwZXIuR2V0VmFsdWVGcm9tRmlsdGVyKFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGZpZWxkT3B0aW9uLFxuICAgICksXG4gIH0pXG5cbiAgc3RhdGljIEdldEhhc3VyYU9wZXJhdG9yID0gPE1CYXNlIGV4dGVuZHMgTW9kZWxCYXNlU3RydWN0dXJlPE1CYXNlPj4oXG4gICAgb3B0aW9uczogUmVwb3NpdG9yeUZpbmRGaWVsdGVyc09wdGlvbnM8TUJhc2UsIE5vbkZ1bmN0aW9uUHJvcGVydHlOYW1lczxNQmFzZT4+LFxuICAgIGZpZWxkT3B0aW9uOiBDb2x1bW5PcHRpb25zPGFueSwgYW55PixcbiAgKTogSGFzdXJhR3JhcGhRTFdoZXJlID0+XG4gICAgRmlsdGVyT3B0aW9uSGVscGVyLkNoZWNrSWZJc0ZpbHRlck9wdGlvbihvcHRpb25zKVxuICAgICAgPyBmaWVsZE9wdGlvbi50eXBlID09PSBIYXN1cmFHcmFwaFFMQ29sdW1uVHlwZS5Kc29uYlxuICAgICAgICA/IEJpbmRGaWx0ZXJRdWVyeUhlbHBlci5HZXRIYXN1cmFKc29uYk9wZXJhdG9yKG9wdGlvbnMpXG4gICAgICAgIDogSGFzdXJhR3JhcGhRTFdoZXJlW1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoSGFzdXJhR3JhcGhRTFdoZXJlKS5maW5kKFxuICAgICAgICAgICAgICAoZ3JhcGhRTE9wZXJhdG9yKSA9PlxuICAgICAgICAgICAgICAgIGdyYXBoUUxPcGVyYXRvciA9PT1cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhXaGVyZSkuZmluZCgob3BlcmF0b3IpID0+IFdoZXJlW29wZXJhdG9yIGFzIGtleW9mIHR5cGVvZiBXaGVyZV0gPT09IG9wdGlvbnM/Lm9wZXJhdG9yKSxcbiAgICAgICAgICAgICkgYXMga2V5b2YgdHlwZW9mIEhhc3VyYUdyYXBoUUxXaGVyZVxuICAgICAgICAgIF1cbiAgICAgIDogSGFzdXJhR3JhcGhRTFdoZXJlLkVRVUFMU1xuXG4gIHN0YXRpYyBHZXRIYXN1cmFKc29uYk9wZXJhdG9yID0gPE1CYXNlIGV4dGVuZHMgTW9kZWxCYXNlU3RydWN0dXJlPE1CYXNlPj4oXG4gICAgb3B0aW9uczogUmVwb3NpdG9yeUZpbmRGaWVsdGVyc09wdGlvbnM8TUJhc2UsIE5vbkZ1bmN0aW9uUHJvcGVydHlOYW1lczxNQmFzZT4+LFxuICApOiBIYXN1cmFHcmFwaFFMV2hlcmUgPT5cbiAgICBvcHRpb25zLm9wZXJhdG9yID09PSBXaGVyZS5JTlxuICAgICAgPyBIYXN1cmFHcmFwaFFMV2hlcmUuSlNPTl9DT05UQUlOU1xuICAgICAgOiBvcHRpb25zLm9wZXJhdG9yID09PSBXaGVyZS5MSUtFXG4gICAgICA/IEhhc3VyYUdyYXBoUUxXaGVyZS5KU09OX0hBU19LRVlTX0FOWVxuICAgICAgOiBIYXN1cmFHcmFwaFFMV2hlcmVbXG4gICAgICAgICAgT2JqZWN0LmtleXMoSGFzdXJhR3JhcGhRTFdoZXJlKS5maW5kKFxuICAgICAgICAgICAgKGdyYXBoUUxPcGVyYXRvcikgPT5cbiAgICAgICAgICAgICAgZ3JhcGhRTE9wZXJhdG9yID09PVxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhXaGVyZSkuZmluZCgob3BlcmF0b3IpID0+IFdoZXJlW29wZXJhdG9yIGFzIGtleW9mIHR5cGVvZiBXaGVyZV0gPT09IG9wdGlvbnM/Lm9wZXJhdG9yKSxcbiAgICAgICAgICApIGFzIGtleW9mIHR5cGVvZiBIYXN1cmFHcmFwaFFMV2hlcmVcbiAgICAgICAgXVxufVxuIl19
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Where } from '../../../../domain';
|
|
2
|
+
import { isNil } from '../../../../utils';
|
|
3
|
+
export class FilterOptionHelper {
|
|
4
|
+
static { this.CheckIfIsFilterOption = (filter) => !isNil(filter?.operator); }
|
|
5
|
+
static { this.GetValueFromFilter = (filter, fieldOption) => {
|
|
6
|
+
if (!FilterOptionHelper.CheckIfIsFilterOption(filter))
|
|
7
|
+
return filter;
|
|
8
|
+
if (filter.operator === Where.ISNULL)
|
|
9
|
+
return true;
|
|
10
|
+
if (filter.operator === Where.ISNOTNULL)
|
|
11
|
+
return false;
|
|
12
|
+
const converter = fieldOption.to
|
|
13
|
+
? fieldOption.to
|
|
14
|
+
: (value) => filter.operator === Where.LIKE && !Array.isArray(filter.value) && value.indexOf('%') < 0
|
|
15
|
+
? `%${value}%`
|
|
16
|
+
: value;
|
|
17
|
+
return Array.isArray(filter.value) && !fieldOption.fields && [Where.IN, Where.NOTIN].includes(filter.operator)
|
|
18
|
+
? filter.value.map((fieldValue) => converter(fieldValue))
|
|
19
|
+
: converter(filter.value);
|
|
20
|
+
}; }
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLW9wdGlvbi5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0L3NyYy9pbmZyYS9oYXN1cmEtZ3JhcGhxbC9taXhpbnMvaGVscGVycy9maWx0ZXItb3B0aW9uLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFELEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzdGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUd6QyxNQUFNLE9BQU8sa0JBQWtCO2FBQ3RCLDBCQUFxQixHQUFHLENBQzdCLE1BQVcsRUFDMEMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQTthQUUzRSx1QkFBa0IsR0FBRyxDQUMxQixNQUFpRCxFQUNqRCxXQUFvQyxFQUMvQixFQUFFO1FBQ1AsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sTUFBTSxDQUFBO1FBQ3BFLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFBO1FBQ2pELElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsU0FBUztZQUFFLE9BQU8sS0FBSyxDQUFBO1FBRXJELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxFQUFFO1lBQzlCLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNoQixDQUFDLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUNiLE1BQU0sQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztnQkFDdEYsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHO2dCQUNkLENBQUMsQ0FBQyxLQUFLLENBQUE7UUFFZixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQzVHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQVksQ0FBQyxDQUFBO0lBQ3BDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZGVsQmFzZVN0cnVjdHVyZSwgUmVwb3NpdG9yeUZpbmRGaWVsdGVyc09wdGlvbnMsIFdoZXJlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZG9tYWluJ1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscydcbmltcG9ydCB7IENvbHVtbk9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcblxuZXhwb3J0IGNsYXNzIEZpbHRlck9wdGlvbkhlbHBlciB7XG4gIHN0YXRpYyBDaGVja0lmSXNGaWx0ZXJPcHRpb24gPSA8TW9kZWwgZXh0ZW5kcyBNb2RlbEJhc2VTdHJ1Y3R1cmU+KFxuICAgIGZpbHRlcjogYW55LFxuICApOiBmaWx0ZXIgaXMgUmVwb3NpdG9yeUZpbmRGaWVsdGVyc09wdGlvbnM8TW9kZWwsIGFueT4gPT4gIWlzTmlsKGZpbHRlcj8ub3BlcmF0b3IpXG5cbiAgc3RhdGljIEdldFZhbHVlRnJvbUZpbHRlciA9IDxNb2RlbCBleHRlbmRzIE1vZGVsQmFzZVN0cnVjdHVyZTxNb2RlbD4+KFxuICAgIGZpbHRlcjogUmVwb3NpdG9yeUZpbmRGaWVsdGVyc09wdGlvbnM8TW9kZWwsIGFueT4sXG4gICAgZmllbGRPcHRpb246IENvbHVtbk9wdGlvbnM8YW55LCBhbnk+LFxuICApOiBhbnkgPT4ge1xuICAgIGlmICghRmlsdGVyT3B0aW9uSGVscGVyLkNoZWNrSWZJc0ZpbHRlck9wdGlvbihmaWx0ZXIpKSByZXR1cm4gZmlsdGVyXG4gICAgaWYgKGZpbHRlci5vcGVyYXRvciA9PT0gV2hlcmUuSVNOVUxMKSByZXR1cm4gdHJ1ZVxuICAgIGlmIChmaWx0ZXIub3BlcmF0b3IgPT09IFdoZXJlLklTTk9UTlVMTCkgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCBjb252ZXJ0ZXIgPSBmaWVsZE9wdGlvbi50b1xuICAgICAgPyBmaWVsZE9wdGlvbi50b1xuICAgICAgOiAodmFsdWU6IGFueSkgPT5cbiAgICAgICAgICBmaWx0ZXIub3BlcmF0b3IgPT09IFdoZXJlLkxJS0UgJiYgIUFycmF5LmlzQXJyYXkoZmlsdGVyLnZhbHVlKSAmJiB2YWx1ZS5pbmRleE9mKCclJykgPCAwXG4gICAgICAgICAgICA/IGAlJHt2YWx1ZX0lYFxuICAgICAgICAgICAgOiB2YWx1ZVxuXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZmlsdGVyLnZhbHVlKSAmJiAhZmllbGRPcHRpb24uZmllbGRzICYmIFtXaGVyZS5JTiwgV2hlcmUuTk9USU5dLmluY2x1ZGVzKGZpbHRlci5vcGVyYXRvcilcbiAgICAgID8gZmlsdGVyLnZhbHVlLm1hcCgoZmllbGRWYWx1ZSkgPT4gY29udmVydGVyKGZpZWxkVmFsdWUpKVxuICAgICAgOiBjb252ZXJ0ZXIoZmlsdGVyLnZhbHVlIGFzIGFueSlcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { BaseModel, } from '../../../../domain';
|
|
2
|
+
import { is, isDate, isEmpty, isNil, isObject, isString, parseDateTime } from '../../../../utils';
|
|
3
|
+
import { AttributeOptionHelper } from './attribute-option.helper';
|
|
4
|
+
import { BindFilterQueryHelper } from './bind-filter-query.helper';
|
|
5
|
+
export class GraphQLFieldHelper {
|
|
6
|
+
static { this.CheckIsGraphQLParams = (params) => !isString(params) && Array.isArray(params) && params.length >= 0 && !!params[0].operation; }
|
|
7
|
+
static { this.ConvertModelFieldsToGraphQLFields = (fields) => {
|
|
8
|
+
return fields
|
|
9
|
+
?.map((field) => {
|
|
10
|
+
if (isString(field))
|
|
11
|
+
return field.toString();
|
|
12
|
+
if (field === 'affected_rows')
|
|
13
|
+
return field;
|
|
14
|
+
const fieldName = Object.keys(field).shift();
|
|
15
|
+
const fieldValue = is(field[fieldName]);
|
|
16
|
+
if (Array.isArray(fieldValue))
|
|
17
|
+
return { [fieldName]: GraphQLFieldHelper.ConvertModelFieldsToGraphQLFields(fieldValue) };
|
|
18
|
+
if (!AttributeOptionHelper.CheckIsColumnOption(fieldValue))
|
|
19
|
+
return;
|
|
20
|
+
const isNestedField = !!fieldValue.fields;
|
|
21
|
+
if (isNestedField)
|
|
22
|
+
return GraphQLFieldHelper.ConvertNestedFieldsToGraphQLFields(fieldName, fieldValue);
|
|
23
|
+
return fieldValue.columnName;
|
|
24
|
+
})
|
|
25
|
+
.filter((field) => !!field);
|
|
26
|
+
}; }
|
|
27
|
+
static { this.ConvertFieldValueFrom = (data, fields) => Object.keys(data).reduce((result, columnName) => {
|
|
28
|
+
const { attributeName, fields: attributeFields, from, } = AttributeOptionHelper.FindColumnOptionFromList(columnName, fields);
|
|
29
|
+
if (!!attributeFields && Array.isArray(attributeFields)) {
|
|
30
|
+
if (Array.isArray(data[columnName]))
|
|
31
|
+
return {
|
|
32
|
+
...result,
|
|
33
|
+
[attributeName]: from
|
|
34
|
+
? from(data[columnName], data)
|
|
35
|
+
: is(data[columnName]).map((value) => GraphQLFieldHelper.ConvertFieldValueFrom(is(value), attributeFields)),
|
|
36
|
+
};
|
|
37
|
+
if (isObject(data[columnName]))
|
|
38
|
+
return {
|
|
39
|
+
...result,
|
|
40
|
+
[attributeName]: !!from
|
|
41
|
+
? from(data[columnName])
|
|
42
|
+
: GraphQLFieldHelper.ConvertFieldValueFrom(is(data[columnName]), attributeFields),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
if (!!from)
|
|
46
|
+
return { ...result, [attributeName]: from(data[columnName], data) };
|
|
47
|
+
return {
|
|
48
|
+
...result,
|
|
49
|
+
[attributeName]: isString(data[columnName]) ? parseDateTime(data[columnName].toString()) : data[columnName],
|
|
50
|
+
};
|
|
51
|
+
}, {}); }
|
|
52
|
+
static { this.ConvertFieldValueTo = (instance, fields, update = false) => {
|
|
53
|
+
const data = instance.toPlain?.() || instance;
|
|
54
|
+
return Object.keys(data).reduce((result, attributeName) => {
|
|
55
|
+
const { columnName, fields: attributeFields, foreignKeyColumn, to, bindPersistData, } = AttributeOptionHelper.FindByAttribute(attributeName, fields);
|
|
56
|
+
if (bindPersistData)
|
|
57
|
+
return {
|
|
58
|
+
...result,
|
|
59
|
+
...bindPersistData(data[attributeName], instance),
|
|
60
|
+
};
|
|
61
|
+
if (isNil(columnName))
|
|
62
|
+
return result;
|
|
63
|
+
if (!!foreignKeyColumn &&
|
|
64
|
+
!isEmpty(foreignKeyColumn) &&
|
|
65
|
+
!Object.keys(foreignKeyColumn).filter((key) => !is(data[attributeName])?.[key]).length)
|
|
66
|
+
return Object.keys(foreignKeyColumn).reduce((object, current) => {
|
|
67
|
+
const { columnName: foreignColumnName } = AttributeOptionHelper.FindByAttribute(foreignKeyColumn[current], fields);
|
|
68
|
+
return {
|
|
69
|
+
...object,
|
|
70
|
+
[foreignColumnName]: data[attributeName]?.[current],
|
|
71
|
+
};
|
|
72
|
+
}, { ...result });
|
|
73
|
+
if (update &&
|
|
74
|
+
isObject(data[attributeName]) &&
|
|
75
|
+
!isNil(attributeFields) &&
|
|
76
|
+
!isDate(data[attributeName]))
|
|
77
|
+
return result;
|
|
78
|
+
if (!!columnName &&
|
|
79
|
+
Array.isArray(attributeFields) &&
|
|
80
|
+
isObject(data[attributeName])) {
|
|
81
|
+
const converted = !isNil(columnName) && to
|
|
82
|
+
? to(instance[attributeName], instance)
|
|
83
|
+
: data[attributeName];
|
|
84
|
+
return {
|
|
85
|
+
...result,
|
|
86
|
+
...(converted !== undefined
|
|
87
|
+
? {
|
|
88
|
+
[columnName]: {
|
|
89
|
+
data: instance[attributeName] instanceof BaseModel
|
|
90
|
+
? GraphQLFieldHelper.ConvertFieldValueTo(data[attributeName], attributeFields)
|
|
91
|
+
: converted,
|
|
92
|
+
},
|
|
93
|
+
}
|
|
94
|
+
: {}),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
if (!!to)
|
|
98
|
+
return {
|
|
99
|
+
...result,
|
|
100
|
+
[columnName]: to(instance[attributeName], instance),
|
|
101
|
+
};
|
|
102
|
+
return { ...result, [columnName]: data[attributeName] };
|
|
103
|
+
}, {});
|
|
104
|
+
}; }
|
|
105
|
+
static { this.ConvertNestedFieldsToGraphQLFields = (fieldName, fieldValue) => {
|
|
106
|
+
const hasCustomFilters = !!fieldValue.filters;
|
|
107
|
+
if (hasCustomFilters)
|
|
108
|
+
return {
|
|
109
|
+
operation: fieldValue.columnName || fieldName,
|
|
110
|
+
fields: GraphQLFieldHelper.ConvertModelFieldsToGraphQLFields(fieldValue.fields),
|
|
111
|
+
variables: {
|
|
112
|
+
[`${fieldValue.columnName}_where`]: {
|
|
113
|
+
name: 'where',
|
|
114
|
+
type: fieldValue.filters.filterType,
|
|
115
|
+
value: BindFilterQueryHelper.MakeGraphQLWhere(fieldValue.filters.filters, fieldValue.fields),
|
|
116
|
+
required: true,
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
return {
|
|
121
|
+
[fieldValue.columnName || fieldName]: GraphQLFieldHelper.ConvertModelFieldsToGraphQLFields(fieldValue.fields),
|
|
122
|
+
};
|
|
123
|
+
}; }
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC1maWVsZC5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0L3NyYy9pbmZyYS9oYXN1cmEtZ3JhcGhxbC9taXhpbnMvaGVscGVycy9ncmFwaHFsLWZpZWxkLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsU0FBUyxHQUtWLE1BQU0sb0JBQW9CLENBQUE7QUFDM0IsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRWpHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBRWxFLE1BQU0sT0FBTyxrQkFBa0I7YUFDdEIseUJBQW9CLEdBQUcsQ0FDNUIsTUFBb0QsRUFDbEIsRUFBRSxDQUNwQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO2FBRXBGLHNDQUFpQyxHQUFHLENBQ3pDLE1BQWtDLEVBQzFCLEVBQUU7UUFDVixPQUFPLE1BQU07WUFDWCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2QsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBO1lBQzVDLElBQUksS0FBSyxLQUFLLGVBQWU7Z0JBQUUsT0FBTyxLQUFLLENBQUE7WUFFM0MsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFL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QUFDO1NBQzlHLENBQUE7SUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJT3BlcmF0aW9uIH0gZnJvbSAnZ3FsLXF1ZXJ5LWJ1aWxkZXIvYnVpbGQvSVF1ZXJ5QnVpbGRlck9wdGlvbnMnXG5pbXBvcnQge1xuICBCYXNlTW9kZWwsXG4gIE1vZGVsQmFzZVN0cnVjdHVyZSxcbiAgTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydGllc1dpdGhOb1BhcnRpYWwsXG4gIE5vbkZ1bmN0aW9uQW5kSWRlbnRpZmllclByb3BlcnR5TmFtZXMsXG4gIFBhcnRpYWxJZGVudGlmaWVyc01vZGVsLFxufSBmcm9tICcuLi8uLi8uLi8uLi9kb21haW4nXG5pbXBvcnQgeyBpcywgaXNEYXRlLCBpc0VtcHR5LCBpc05pbCwgaXNPYmplY3QsIGlzU3RyaW5nLCBwYXJzZURhdGVUaW1lIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMnXG5pbXBvcnQgeyBDb2x1bW5PcHRpb25zLCBGaWVsZHMsIEdyYXBoUUxQYXJhbXMsIEhhc3VyYUdyYXBoUUxGaWVsZHMgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IEF0dHJpYnV0ZU9wdGlvbkhlbHBlciB9IGZyb20gJy4vYXR0cmlidXRlLW9wdGlvbi5oZWxwZXInXG5pbXBvcnQgeyBCaW5kRmlsdGVyUXVlcnlIZWxwZXIgfSBmcm9tICcuL2JpbmQtZmlsdGVyLXF1ZXJ5LmhlbHBlcidcblxuZXhwb3J0IGNsYXNzIEdyYXBoUUxGaWVsZEhlbHBlciB7XG4gIHN0YXRpYyBDaGVja0lzR3JhcGhRTFBhcmFtcyA9IDxNb2RlbCBleHRlbmRzIE1vZGVsQmFzZVN0cnVjdHVyZTxNb2RlbD4+KFxuICAgIHBhcmFtczogc3RyaW5nIHwgSU9wZXJhdGlvbiB8IEdyYXBoUUxQYXJhbXM8TW9kZWw+W10sXG4gICk6IHBhcmFtcyBpcyBHcmFwaFFMUGFyYW1zPE1vZGVsPltdID0+XG4gICAgIWlzU3RyaW5nKHBhcmFtcykgJiYgQXJyYXkuaXNBcnJheShwYXJhbXMpICYmIHBhcmFtcy5sZW5ndGggPj0gMCAmJiAhIXBhcmFtc1swXS5vcGVyYXRpb25cblxuICBzdGF0aWMgQ29udmVydE1vZGVsRmllbGRzVG9HcmFwaFFMRmllbGRzID0gPE1vZGVsIGV4dGVuZHMgTW9kZWxCYXNlU3RydWN0dXJlPE1vZGVsPj4oXG4gICAgZmllbGRzOiBIYXN1cmFHcmFwaFFMRmllbGRzPE1vZGVsPixcbiAgKTogRmllbGRzID0+IHtcbiAgICByZXR1cm4gZmllbGRzXG4gICAgICA/Lm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKGZpZWxkKSkgcmV0dXJuIGZpZWxkLnRvU3RyaW5nKClcbiAgICAgICAgaWYgKGZpZWxkID09PSAnYWZmZWN0ZWRfcm93cycpIHJldHVybiBmaWVsZFxuXG4gICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IE9iamVjdC5rZXlzKGZpZWxkKS5zaGlmdCgpXG4gICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSBpczxDb2x1bW5PcHRpb25zPGFueSwgTW9kZWw+PihmaWVsZFtmaWVsZE5hbWUgYXMga2V5b2YgdHlwZW9mIGZpZWxkXSlcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZFZhbHVlKSlcbiAgICAgICAgICByZXR1cm4geyBbZmllbGROYW1lXTogR3JhcGhRTEZpZWxkSGVscGVyLkNvbnZlcnRNb2RlbEZpZWxkc1RvR3JhcGhRTEZpZWxkcyhmaWVsZFZhbHVlKSB9XG4gICAgICAgIGlmICghQXR0cmlidXRlT3B0aW9uSGVscGVyLkNoZWNrSXNDb2x1bW5PcHRpb24oZmllbGRWYWx1ZSkpIHJldHVyblxuXG4gICAgICAgIGNvbnN0IGlzTmVzdGVkRmllbGQgPSAhIWZpZWxkVmFsdWUuZmllbGRzXG5cbiAgICAgICAgaWYgKGlzTmVzdGVkRmllbGQpIHJldHVybiBHcmFwaFFMRmllbGRIZWxwZXIuQ29udmVydE5lc3RlZEZpZWxkc1RvR3JhcGhRTEZpZWxkcyhmaWVsZE5hbWUsIGZpZWxkVmFsdWUgYXMgYW55KVxuXG4gICAgICAgIHJldHVybiBmaWVsZFZhbHVlLmNvbHVtbk5hbWVcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChmaWVsZCkgPT4gISFmaWVsZClcbiAgfVxuXG4gIHN0YXRpYyBDb252ZXJ0RmllbGRWYWx1ZUZyb20gPSA8XG4gICAgTW9kZWwgZXh0ZW5kcyBNb2RlbEJhc2VTdHJ1Y3R1cmUsXG4gICAgUmVjb3JkRGF0YVR5cGUgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgfCBEYXRhVHlwZSB8IERhdGUsXG4gICAgRGF0YVR5cGUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBSZWNvcmREYXRhVHlwZSB8IFJlY29yZERhdGFUeXBlW10+LFxuICA+KFxuICAgIGRhdGE6IERhdGFUeXBlLFxuICAgIGZpZWxkczogSGFzdXJhR3JhcGhRTEZpZWxkczxNb2RlbD4sXG4gICk6IE5vbkZ1bmN0aW9uQW5kSWRlbnRpZmllclByb3BlcnRpZXNXaXRoTm9QYXJ0aWFsPE1vZGVsPiB8IFBhcnRpYWxJZGVudGlmaWVyc01vZGVsPE1vZGVsPiA9PlxuICAgIE9iamVjdC5rZXlzKGRhdGEpLnJlZHVjZSgocmVzdWx0LCBjb2x1bW5OYW1lKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGF0dHJpYnV0ZU5hbWUsXG4gICAgICAgIGZpZWxkczogYXR0cmlidXRlRmllbGRzLFxuICAgICAgICBmcm9tLFxuICAgICAgfSA9IEF0dHJpYnV0ZU9wdGlvbkhlbHBlci5GaW5kQ29sdW1uT3B0aW9uRnJvbUxpc3QoY29sdW1uTmFtZSwgZmllbGRzKVxuXG4gICAgICBpZiAoISFhdHRyaWJ1dGVGaWVsZHMgJiYgQXJyYXkuaXNBcnJheShhdHRyaWJ1dGVGaWVsZHMpKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFbY29sdW1uTmFtZV0pKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICBbYXR0cmlidXRlTmFtZV06IGZyb21cbiAgICAgICAgICAgICAgPyBmcm9tKGRhdGFbY29sdW1uTmFtZV0sIGRhdGEpXG4gICAgICAgICAgICAgIDogaXM8UmVjb3JkRGF0YVR5cGVbXT4oZGF0YVtjb2x1bW5OYW1lXSkubWFwKCh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgIEdyYXBoUUxGaWVsZEhlbHBlci5Db252ZXJ0RmllbGRWYWx1ZUZyb20oaXM8RGF0YVR5cGU+KHZhbHVlKSwgYXR0cmlidXRlRmllbGRzKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JqZWN0KGRhdGFbY29sdW1uTmFtZV0pKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICBbYXR0cmlidXRlTmFtZV06ICEhZnJvbVxuICAgICAgICAgICAgICA/IGZyb20oZGF0YVtjb2x1bW5OYW1lXSlcbiAgICAgICAgICAgICAgOiBHcmFwaFFMRmllbGRIZWxwZXIuQ29udmVydEZpZWxkVmFsdWVGcm9tKGlzPERhdGFUeXBlPihkYXRhW2NvbHVtbk5hbWVdKSwgYXR0cmlidXRlRmllbGRzKSxcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghIWZyb20pIHJldHVybiB7IC4uLnJlc3VsdCwgW2F0dHJpYnV0ZU5hbWVdOiBmcm9tKGRhdGFbY29sdW1uTmFtZV0sIGRhdGEpIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICBbYXR0cmlidXRlTmFtZV06IGlzU3RyaW5nKGRhdGFbY29sdW1uTmFtZV0pID8gcGFyc2VEYXRlVGltZShkYXRhW2NvbHVtbk5hbWVdLnRvU3RyaW5nKCkpIDogZGF0YVtjb2x1bW5OYW1lXSxcbiAgICAgIH1cbiAgICB9LCB7fSlcblxuICBzdGF0aWMgQ29udmVydEZpZWxkVmFsdWVUbyA9IDxcbiAgICBNb2RlbCBleHRlbmRzIE1vZGVsQmFzZVN0cnVjdHVyZTxNb2RlbD4sXG4gICAgRGF0YVR5cGUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBEYXRhVHlwZSB8IERhdGU+LFxuICA+KFxuICAgIGluc3RhbmNlOiBNb2RlbCxcbiAgICBmaWVsZHM6IEhhc3VyYUdyYXBoUUxGaWVsZHM8TW9kZWw+LFxuICAgIHVwZGF0ZSA9IGZhbHNlLFxuICApOiBEYXRhVHlwZSA9PiB7XG4gICAgY29uc3QgZGF0YTogUGFydGlhbDxNb2RlbD4gPSBpbnN0YW5jZS50b1BsYWluPy4oKSB8fCBpbnN0YW5jZVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGRhdGEpLnJlZHVjZSgocmVzdWx0LCBhdHRyaWJ1dGVOYW1lKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbHVtbk5hbWUsXG4gICAgICAgIGZpZWxkczogYXR0cmlidXRlRmllbGRzLFxuICAgICAgICBmb3JlaWduS2V5Q29sdW1uLFxuICAgICAgICB0byxcbiAgICAgICAgYmluZFBlcnNpc3REYXRhLFxuICAgICAgfSA9IEF0dHJpYnV0ZU9wdGlvbkhlbHBlci5GaW5kQnlBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSBhcyBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPE1vZGVsPiwgZmllbGRzKVxuXG4gICAgICBpZiAoYmluZFBlcnNpc3REYXRhKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAuLi5iaW5kUGVyc2lzdERhdGEoZGF0YVthdHRyaWJ1dGVOYW1lIGFzIE5vbkZ1bmN0aW9uQW5kSWRlbnRpZmllclByb3BlcnR5TmFtZXM8TW9kZWw+XSwgaW5zdGFuY2UpLFxuICAgICAgICB9XG4gICAgICBpZiAoaXNOaWwoY29sdW1uTmFtZSkpIHJldHVybiByZXN1bHRcbiAgICAgIGlmIChcbiAgICAgICAgISFmb3JlaWduS2V5Q29sdW1uICYmXG4gICAgICAgICFpc0VtcHR5KGZvcmVpZ25LZXlDb2x1bW4pICYmXG4gICAgICAgICFPYmplY3Qua2V5cyhmb3JlaWduS2V5Q29sdW1uKS5maWx0ZXIoXG4gICAgICAgICAgKGtleSkgPT5cbiAgICAgICAgICAgICFpczxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PihkYXRhW2F0dHJpYnV0ZU5hbWUgYXMgTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxNb2RlbD5dKT8uW2tleV0sXG4gICAgICAgICkubGVuZ3RoXG4gICAgICApXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhmb3JlaWduS2V5Q29sdW1uKS5yZWR1Y2UoXG4gICAgICAgICAgKG9iamVjdCwgY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBjb2x1bW5OYW1lOiBmb3JlaWduQ29sdW1uTmFtZSB9ID0gQXR0cmlidXRlT3B0aW9uSGVscGVyLkZpbmRCeUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgZm9yZWlnbktleUNvbHVtbltjdXJyZW50IGFzIGtleW9mIEhhc3VyYUdyYXBoUUxGaWVsZHM8TW9kZWw+W251bWJlcl1dLFxuICAgICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLm9iamVjdCxcbiAgICAgICAgICAgICAgW2ZvcmVpZ25Db2x1bW5OYW1lXTogZGF0YVthdHRyaWJ1dGVOYW1lIGFzIGtleW9mIEhhc3VyYUdyYXBoUUxGaWVsZHM8TW9kZWw+W251bWJlcl1dPy5bY3VycmVudF0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IC4uLnJlc3VsdCB9LFxuICAgICAgICApXG5cbiAgICAgIGlmIChcbiAgICAgICAgdXBkYXRlICYmXG4gICAgICAgIGlzT2JqZWN0KGRhdGFbYXR0cmlidXRlTmFtZSBhcyBrZXlvZiBIYXN1cmFHcmFwaFFMRmllbGRzPE1vZGVsPltudW1iZXJdXSkgJiZcbiAgICAgICAgIWlzTmlsKGF0dHJpYnV0ZUZpZWxkcykgJiZcbiAgICAgICAgIWlzRGF0ZShkYXRhW2F0dHJpYnV0ZU5hbWUgYXMga2V5b2YgSGFzdXJhR3JhcGhRTEZpZWxkczxNb2RlbD5bbnVtYmVyXV0pXG4gICAgICApXG4gICAgICAgIHJldHVybiByZXN1bHRcblxuICAgICAgaWYgKFxuICAgICAgICAhIWNvbHVtbk5hbWUgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheShhdHRyaWJ1dGVGaWVsZHMpICYmXG4gICAgICAgIGlzT2JqZWN0KGRhdGFbYXR0cmlidXRlTmFtZSBhcyBrZXlvZiBIYXN1cmFHcmFwaFFMRmllbGRzPE1vZGVsPltudW1iZXJdXSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWQgPVxuICAgICAgICAgICFpc05pbChjb2x1bW5OYW1lKSAmJiB0b1xuICAgICAgICAgICAgPyB0byhpbnN0YW5jZVthdHRyaWJ1dGVOYW1lIGFzIGtleW9mIEhhc3VyYUdyYXBoUUxGaWVsZHM8TW9kZWw+W251bWJlcl1dLCBpbnN0YW5jZSlcbiAgICAgICAgICAgIDogZGF0YVthdHRyaWJ1dGVOYW1lIGFzIGtleW9mIEhhc3VyYUdyYXBoUUxGaWVsZHM8TW9kZWw+W251bWJlcl1dXG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgLi4uKGNvbnZlcnRlZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBbY29sdW1uTmFtZV06IHtcbiAgICAgICAgICAgICAgICAgIGRhdGE6XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW2F0dHJpYnV0ZU5hbWUgYXMgTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxNb2RlbD5dIGluc3RhbmNlb2YgQmFzZU1vZGVsXG4gICAgICAgICAgICAgICAgICAgICAgPyBHcmFwaFFMRmllbGRIZWxwZXIuQ29udmVydEZpZWxkVmFsdWVUbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVthdHRyaWJ1dGVOYW1lIGFzIGtleW9mIEhhc3VyYUdyYXBoUUxGaWVsZHM8TW9kZWw+W251bWJlcl1dLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVGaWVsZHMgYXMgSGFzdXJhR3JhcGhRTEZpZWxkczxNb2RlbD4sXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBjb252ZXJ0ZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCEhdG8pXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgIFtjb2x1bW5OYW1lXTogdG8oaW5zdGFuY2VbYXR0cmlidXRlTmFtZSBhcyBrZXlvZiBIYXN1cmFHcmFwaFFMRmllbGRzPE1vZGVsPltudW1iZXJdXSwgaW5zdGFuY2UpLFxuICAgICAgICB9XG5cbiAgICAgIHJldHVybiB7IC4uLnJlc3VsdCwgW2NvbHVtbk5hbWVdOiBkYXRhW2F0dHJpYnV0ZU5hbWUgYXMga2V5b2YgSGFzdXJhR3JhcGhRTEZpZWxkczxNb2RlbD5bbnVtYmVyXV0gfVxuICAgIH0sIHt9IGFzIERhdGFUeXBlKVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgQ29udmVydE5lc3RlZEZpZWxkc1RvR3JhcGhRTEZpZWxkcyA9IDxcbiAgICBUIGV4dGVuZHMgTW9kZWxCYXNlU3RydWN0dXJlPFQ+LFxuICAgIFAgZXh0ZW5kcyBNb2RlbEJhc2VTdHJ1Y3R1cmU8UD4sXG4gID4oXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgZmllbGRWYWx1ZTogQ29sdW1uT3B0aW9uczxULCBQPixcbiAgKSA9PiB7XG4gICAgY29uc3QgaGFzQ3VzdG9tRmlsdGVycyA9ICEhZmllbGRWYWx1ZS5maWx0ZXJzXG5cbiAgICBpZiAoaGFzQ3VzdG9tRmlsdGVycylcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wZXJhdGlvbjogZmllbGRWYWx1ZS5jb2x1bW5OYW1lIHx8IGZpZWxkTmFtZSxcbiAgICAgICAgZmllbGRzOiBHcmFwaFFMRmllbGRIZWxwZXIuQ29udmVydE1vZGVsRmllbGRzVG9HcmFwaFFMRmllbGRzKGZpZWxkVmFsdWUuZmllbGRzKSxcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgW2Ake2ZpZWxkVmFsdWUuY29sdW1uTmFtZX1fd2hlcmVgXToge1xuICAgICAgICAgICAgbmFtZTogJ3doZXJlJyxcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkVmFsdWUuZmlsdGVycy5maWx0ZXJUeXBlLFxuICAgICAgICAgICAgdmFsdWU6IEJpbmRGaWx0ZXJRdWVyeUhlbHBlci5NYWtlR3JhcGhRTFdoZXJlKGZpZWxkVmFsdWUuZmlsdGVycy5maWx0ZXJzLCBmaWVsZFZhbHVlLmZpZWxkcyksXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIFtmaWVsZFZhbHVlLmNvbHVtbk5hbWUgfHwgZmllbGROYW1lXTogR3JhcGhRTEZpZWxkSGVscGVyLkNvbnZlcnRNb2RlbEZpZWxkc1RvR3JhcGhRTEZpZWxkcyhmaWVsZFZhbHVlLmZpZWxkcyksXG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import { mutation, query } from 'gql-query-builder';
|
|
3
|
+
import { DebugHelper, isBoolean, isInteger, isNaN, isNil, isNumber, isString, isUUID, parseISO, } from '../../../utils';
|
|
4
|
+
import { GraphQLFieldHelper } from './helpers';
|
|
5
|
+
export const withHasuraGraphQL = (MixinBase) => {
|
|
6
|
+
return class HasuraGraphQLMixin extends MixinBase {
|
|
7
|
+
get headers() {
|
|
8
|
+
return {
|
|
9
|
+
'Content-Type': 'application/json',
|
|
10
|
+
...(isNil(this.authOptions?.authToken) ? {} : { Authorization: this.authOptions?.authToken }),
|
|
11
|
+
...(isNil(this.authOptions?.adminSecret) ? {} : { 'X-Hasura-Admin-Secret': this.authOptions?.adminSecret }),
|
|
12
|
+
...(isNil(this.authOptions?.authRole)
|
|
13
|
+
? {}
|
|
14
|
+
: {
|
|
15
|
+
'X-Hasura-Role': this.authOptions.authRole.role,
|
|
16
|
+
'X-Hasura-User-Id': this.authOptions?.authRole?.userId,
|
|
17
|
+
}),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
constructor(...params) {
|
|
21
|
+
const options = params[0];
|
|
22
|
+
super(...params);
|
|
23
|
+
this.tableName = options.tableName;
|
|
24
|
+
this.endpoint = options.endpoint;
|
|
25
|
+
this.authOptions = options.authOptions;
|
|
26
|
+
this.model = options.model;
|
|
27
|
+
this.fields = options.fields || this.model.identifiersFields;
|
|
28
|
+
this.logger = DebugHelper.from(this);
|
|
29
|
+
}
|
|
30
|
+
async mutation(operation, fields, variables) {
|
|
31
|
+
const resultQuery = mutation({
|
|
32
|
+
operation,
|
|
33
|
+
variables,
|
|
34
|
+
fields: GraphQLFieldHelper.ConvertModelFieldsToGraphQLFields(fields),
|
|
35
|
+
});
|
|
36
|
+
return this.fetch(resultQuery);
|
|
37
|
+
}
|
|
38
|
+
async query(operation, fields, variables) {
|
|
39
|
+
const builded = this.buildHasuraQueryFields({
|
|
40
|
+
operation,
|
|
41
|
+
fields: fields,
|
|
42
|
+
variables,
|
|
43
|
+
});
|
|
44
|
+
const interpected = (await this.interceptors?.request?.(builded)) || builded;
|
|
45
|
+
const resultQuery = query(interpected);
|
|
46
|
+
const result = await this.fetch(resultQuery);
|
|
47
|
+
return (await this.interceptors?.response?.(result, interpected)) || result;
|
|
48
|
+
}
|
|
49
|
+
async fetch(params) {
|
|
50
|
+
this.logger.with('params').log(params);
|
|
51
|
+
const headers = this.headers;
|
|
52
|
+
const { data: result } = await axios({
|
|
53
|
+
url: `${this.endpoint}`,
|
|
54
|
+
method: 'POST',
|
|
55
|
+
data: params,
|
|
56
|
+
headers,
|
|
57
|
+
});
|
|
58
|
+
if (!isNil(result.errors))
|
|
59
|
+
throw new Error(JSON.stringify(result.errors));
|
|
60
|
+
this.logger.with('returns').log(result);
|
|
61
|
+
return result.data;
|
|
62
|
+
}
|
|
63
|
+
getAttributeGraphQLTypeOf(value) {
|
|
64
|
+
if (isUUID(value))
|
|
65
|
+
return 'uuid';
|
|
66
|
+
if (isString(value))
|
|
67
|
+
return 'String';
|
|
68
|
+
if (isBoolean(value))
|
|
69
|
+
return 'Boolean';
|
|
70
|
+
if (value instanceof Date)
|
|
71
|
+
return 'timestamptz';
|
|
72
|
+
if (isInteger(value))
|
|
73
|
+
return 'Int';
|
|
74
|
+
if (isNumber(value))
|
|
75
|
+
return 'numeric';
|
|
76
|
+
throw new Error('Type not implemented yet');
|
|
77
|
+
}
|
|
78
|
+
checkIfIsDateTimeAndParse(value) {
|
|
79
|
+
if (!/^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/.test(value))
|
|
80
|
+
return value;
|
|
81
|
+
const date = parseISO(value);
|
|
82
|
+
if (isNaN(date.getTime()))
|
|
83
|
+
return value;
|
|
84
|
+
return date;
|
|
85
|
+
}
|
|
86
|
+
convertDataFromHasura(data, fields) {
|
|
87
|
+
const plain = GraphQLFieldHelper.ConvertFieldValueFrom(data, fields || this.fields);
|
|
88
|
+
return this.model.toInstance(plain);
|
|
89
|
+
}
|
|
90
|
+
convertDataToHasura(instance, update = false) {
|
|
91
|
+
return GraphQLFieldHelper.ConvertFieldValueTo(instance, this.fields, update);
|
|
92
|
+
}
|
|
93
|
+
buildHasuraQueryFields({ operation, fields, variables, }) {
|
|
94
|
+
return GraphQLFieldHelper.CheckIsGraphQLParams(operation)
|
|
95
|
+
? operation.map((option) => ({
|
|
96
|
+
operation: option.operation,
|
|
97
|
+
variables: option.variables,
|
|
98
|
+
fields: GraphQLFieldHelper.ConvertModelFieldsToGraphQLFields(option.fields),
|
|
99
|
+
}))
|
|
100
|
+
: {
|
|
101
|
+
operation,
|
|
102
|
+
variables,
|
|
103
|
+
fields: GraphQLFieldHelper.ConvertModelFieldsToGraphQLFields(fields),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1oYXN1cmEtZ3JhcGhxbC5taXhpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvbm5lY3Qvc3JjL2luZnJhL2hhc3VyYS1ncmFwaHFsL21peGlucy93aXRoLWhhc3VyYS1ncmFwaHFsLm1peGluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQTtBQUN6QixPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBR25ELE9BQU8sRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFFBQVEsRUFDUixRQUFRLEVBQ1IsTUFBTSxFQUdOLFFBQVEsR0FDVCxNQUFNLGdCQUFnQixDQUFBO0FBVXZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQXNCOUMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FJL0IsU0FBWSxFQUMwRixFQUFFO0lBQ3hHLE9BQU8sTUFBTSxrQkFBbUIsU0FBUSxTQUFTO1FBUy9DLElBQUksT0FBTztZQUNULE9BQU87Z0JBQ0wsY0FBYyxFQUFFLGtCQUFrQjtnQkFDbEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQzdGLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUM7Z0JBQzNHLEdBQUcsQ0FBQyxLQUFLLENBQUMs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UUFDckMsQ0FBQztRQUVELG1CQUFtQixDQUFDLFFBQWUsRUFBRSxNQUFNLEdBQUcsS0FBSztZQUNqRCxPQUFPLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQzlFLENBQUM7UUFFRCxzQkFBc0IsQ0FBQyxFQUNyQixTQUFTLEVBQ1QsTUFBTSxFQUNOLFNBQVMsR0FLVjtZQUNDLE9BQU8sa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDO2dCQUN2RCxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDekIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO29CQUMzQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7b0JBQzNCLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxpQ0FBaUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUM1RSxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO29CQUNFLFNBQVM7b0JBQ1QsU0FBUztvQkFDVCxNQUFNLEVBQUUsa0JBQWtCLENBQUMsaUNBQWlDLENBQUMsTUFBTSxDQUFDO2lCQUNyRSxDQUFBO1FBQ1AsQ0FBQztLQUNGLENBQUE7QUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXG5pbXBvcnQgeyBtdXRhdGlvbiwgcXVlcnkgfSBmcm9tICdncWwtcXVlcnktYnVpbGRlcidcbmltcG9ydCB7IElPcGVyYXRpb24gfSBmcm9tICdncWwtcXVlcnktYnVpbGRlci9idWlsZC9JUXVlcnlCdWlsZGVyT3B0aW9ucydcbmltcG9ydCB7IEJhc2VNb2RlbEJ1aWxkZXIsIE1vZGVsQmFzZVN0cnVjdHVyZSB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbidcbmltcG9ydCB7XG4gIERlYnVnSGVscGVyLFxuICBpc0Jvb2xlYW4sXG4gIGlzSW50ZWdlcixcbiAgaXNOYU4sXG4gIGlzTmlsLFxuICBpc051bWJlcixcbiAgaXNTdHJpbmcsXG4gIGlzVVVJRCxcbiAgTWVyZ2VDb25zdHJ1Y3RvclBhcmFtcyxcbiAgTWl4aW5DdG9yLFxuICBwYXJzZUlTTyxcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnXG5pbXBvcnQge1xuICBGaWVsZHMsXG4gIEdyYXBoUUxQYXJhbXMsXG4gIEdyYXBoUUxSZXBvc2l0b3J5LFxuICBIYXN1cmFHcmFwaFFMQXV0aE9wdGlvbnMsXG4gIEhhc3VyYUdyYXBoUUxGaWVsZHMsXG4gIEhhc3VyYUdyYXBoUUxIZWFkZXJzLFxuICBWYXJpYWJsZU9wdGlvbnMsXG59IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgR3JhcGhRTEZpZWxkSGVscGVyIH0gZnJvbSAnLi9oZWxwZXJzJ1xuXG50eXBlIFF1ZXJ5QnVpbGRlck9wdGlvbnMgPSB7XG4gIG9wZXJhdGlvbjogc3RyaW5nIHwgSU9wZXJhdGlvblxuICBmaWVsZHM6IEZpZWxkc1xuICB2YXJpYWJsZXM/OiBWYXJpYWJsZU9wdGlvbnNcbn1cblxudHlwZSBIYXN1cmFHcmFwaFFMSW50ZXJjZXB0b3JzPFAgPSBRdWVyeUJ1aWxkZXJPcHRpb25zIHwgUXVlcnlCdWlsZGVyT3B0aW9uc1tdPiA9IHtcbiAgcmVxdWVzdD86IDxSPihyZXF1ZXN0OiBQKSA9PiBQcm9taXNlPFAgJiBSPlxuICByZXNwb25zZT86IDxSPihyZXNwb25zZTogUiwgcmVxdWVzdDogUCkgPT4gUHJvbWlzZTxSPlxufVxuXG5leHBvcnQgdHlwZSBIYXN1cmFDb25zdHJ1Y3RvclBhcmFtczxNb2RlbCBleHRlbmRzIE1vZGVsQmFzZVN0cnVjdHVyZTxNb2RlbCwgTW9kZWxbJ2lkZW50aWZpZXJzRmllbGRzJ11bbnVtYmVyXT4+ID0ge1xuICB0YWJsZU5hbWU6IHN0cmluZ1xuICBtb2RlbDogQmFzZU1vZGVsQnVpbGRlcjxNb2RlbD5cbiAgZmllbGRzOiBIYXN1cmFHcmFwaFFMRmllbGRzPE1vZGVsPlxuICBlbmRwb2ludDogc3RyaW5nXG4gIGludGVyY2VwdG9ycz86IEhhc3VyYUdyYXBoUUxJbnRlcmNlcHRvcnNcbiAgYXV0aE9wdGlvbnM6IEhhc3VyYUdyYXBoUUxBdXRoT3B0aW9uc1xufVxuXG5leHBvcnQgY29uc3Qgd2l0aEhhc3VyYUdyYXBoUUwgPSA8XG4gIE1CYXNlIGV4dGVuZHMgTW9kZWxCYXNlU3RydWN0dXJlPE1CYXNlLCBNQmFzZVsnaWRlbnRpZmllcnNGaWVsZHMnXVtudW1iZXJdPixcbiAgVCBleHRlbmRzIE1peGluQ3RvciA9IE1peGluQ3Rvcixcbj4oXG4gIE1peGluQmFzZTogVCxcbik6IE1peGluQ3RvcjxHcmFwaFFMUmVwb3NpdG9yeTxNQmFzZT4sIE1lcmdlQ29uc3RydWN0b3JQYXJhbXM8YW55W10sIEhhc3VyYUNvbnN0cnVjdG9yUGFyYW1zPE1CYXNlPltdPj4gPT4ge1xuICByZXR1cm4gY2xhc3MgSGFzdXJhR3JhcGhRTE1peGluIGV4dGVuZHMgTWl4aW5CYXNlIGltcGxlbWVudHMgR3JhcGhRTFJlcG9zaXRvcnk8TUJhc2U+IHtcbiAgICB0YWJsZU5hbWU6IHN0cmluZ1xuICAgIGVuZHBvaW50OiBzdHJpbmdcbiAgICBhdXRoT3B0aW9uczogSGFzdXJhR3JhcGhRTEF1dGhPcHRpb25zXG4gICAgaW50ZXJjZXB0b3JzOiBIYXN1cmFHcmFwaFFMSW50ZXJjZXB0b3JzXG4gICAgbW9kZWw6IEJhc2VNb2RlbEJ1aWxkZXI8TUJhc2U+XG4gICAgZmllbGRzOiBIYXN1cmFHcmFwaFFMRmllbGRzPE1CYXNlPlxuICAgIGxvZ2dlcjogRGVidWdIZWxwZXJcblxuICAgIGdldCBoZWFkZXJzKCk6IEhhc3VyYUdyYXBoUUxIZWFkZXJzIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIC4uLihpc05pbCh0aGlzLmF1dGhPcHRpb25zPy5hdXRoVG9rZW4pID8ge30gOiB7IEF1dGhvcml6YXRpb246IHRoaXMuYXV0aE9wdGlvbnM/LmF1dGhUb2tlbiB9KSxcbiAgICAgICAgLi4uKGlzTmlsKHRoaXMuYXV0aE9wdGlvbnM/LmFkbWluU2VjcmV0KSA/IHt9IDogeyAnWC1IYXN1cmEtQWRtaW4tU2VjcmV0JzogdGhpcy5hdXRoT3B0aW9ucz8uYWRtaW5TZWNyZXQgfSksXG4gICAgICAgIC4uLihpc05pbCh0aGlzLmF1dGhPcHRpb25zPy5hdXRoUm9sZSlcbiAgICAgICAgICA/IHt9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICdYLUhhc3VyYS1Sb2xlJzogdGhpcy5hdXRoT3B0aW9ucy5hdXRoUm9sZS5yb2xlLFxuICAgICAgICAgICAgICAnWC1IYXN1cmEtVXNlci1JZCc6IHRoaXMuYXV0aE9wdGlvbnM/LmF1dGhSb2xlPy51c2VySWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvciguLi5wYXJhbXM6IGFueVtdKSB7XG4gICAgICBjb25zdCBvcHRpb25zOiBIYXN1cmFDb25zdHJ1Y3RvclBhcmFtczxNQmFzZT4gPSBwYXJhbXNbMF1cblxuICAgICAgc3VwZXIoLi4ucGFyYW1zKVxuXG4gICAgICB0aGlzLnRhYmxlTmFtZSA9IG9wdGlvbnMudGFibGVOYW1lXG4gICAgICB0aGlzLmVuZHBvaW50ID0gb3B0aW9ucy5lbmRwb2ludFxuICAgICAgdGhpcy5hdXRoT3B0aW9ucyA9IG9wdGlvbnMuYXV0aE9wdGlvbnNcbiAgICAgIHRoaXMubW9kZWwgPSBvcHRpb25zLm1vZGVsXG4gICAgICB0aGlzLmZpZWxkcyA9IG9wdGlvbnMuZmllbGRzIHx8ICh0aGlzLm1vZGVsLmlkZW50aWZpZXJzRmllbGRzIGFzIEhhc3VyYUdyYXBoUUxGaWVsZHM8TUJhc2U+KVxuICAgICAgdGhpcy5sb2dnZXIgPSBEZWJ1Z0hlbHBlci5mcm9tKHRoaXMpXG4gICAgfVxuXG4gICAgYXN5bmMgbXV0YXRpb248UmV0dXJuRmllbGRzID0gYW55PihcbiAgICAgIG9wZXJhdGlvbjogc3RyaW5nIHwgSU9wZXJhdGlvbixcbiAgICAgIGZpZWxkcz86IHN0cmluZ1tdIHwgSGFzdXJhR3JhcGhRTEZpZWxkczxNQmFzZT4sXG4gICAgICB2YXJpYWJsZXM/OiBWYXJpYWJsZU9wdGlvbnMsXG4gICAgKTogUHJvbWlzZTxSZXR1cm5GaWVsZHM+IHtcbiAgICAgIGNvbnN0IHJlc3VsdFF1ZXJ5ID0gbXV0YXRpb24oe1xuICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgIHZhcmlhYmxlcyxcbiAgICAgICAgZmllbGRzOiBHcmFwaFFMRmllbGRIZWxwZXIuQ29udmVydE1vZGVsRmllbGRzVG9HcmFwaFFMRmllbGRzKGZpZWxkcyBhcyBIYXN1cmFHcmFwaFFMRmllbGRzPE1CYXNlPiksXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gdGhpcy5mZXRjaChyZXN1bHRRdWVyeSlcbiAgICB9XG5cbiAgICBhc3luYyBxdWVyeTxSZXR1cm5GaWVsZHMgPSBhbnk+KFxuICAgICAgb3BlcmF0aW9uOiBzdHJpbmcgfCBJT3BlcmF0aW9uIHwgR3JhcGhRTFBhcmFtczxNQmFzZT5bXSxcbiAgICAgIGZpZWxkcz86IHN0cmluZ1tdIHwgSGFzdXJhR3JhcGhRTEZpZWxkczxNQmFzZT4sXG4gICAgICB2YXJpYWJsZXM/OiBWYXJpYWJsZU9wdGlvbnMsXG4gICAgKTogUHJvbWlzZTxSZXR1cm5GaWVsZHM+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZWQgPSB0aGlzLmJ1aWxkSGFzdXJhUXVlcnlGaWVsZHMoe1xuICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgIGZpZWxkczogZmllbGRzIGFzIEhhc3VyYUdyYXBoUUxGaWVsZHM8TUJhc2U+LFxuICAgICAgICB2YXJpYWJsZXMsXG4gICAgICB9KVxuICAgICAgY29uc3QgaW50ZXJwZWN0ZWQgPSAoYXdhaXQgdGhpcy5pbnRlcmNlcHRvcnM/LnJlcXVlc3Q/LihidWlsZGVkKSkgfHwgYnVpbGRlZFxuICAgICAgY29uc3QgcmVzdWx0UXVlcnkgPSBxdWVyeShpbnRlcnBlY3RlZClcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZmV0Y2gocmVzdWx0UXVlcnkpXG5cbiAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5pbnRlcmNlcHRvcnM/LnJlc3BvbnNlPy4ocmVzdWx0LCBpbnRlcnBlY3RlZCkpIHx8IHJlc3VsdFxuICAgIH1cblxuICAgIGFzeW5jIGZldGNoPFJldHVybkZpZWxkcyA9IGFueT4ocGFyYW1zOiB7IHZhcmlhYmxlczogYW55OyBxdWVyeTogc3RyaW5nIH0pOiBQcm9taXNlPFJldHVybkZpZWxkcz4ge1xuICAgICAgdGhpcy5sb2dnZXIud2l0aCgncGFyYW1zJykubG9nKHBhcmFtcylcblxuICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1xuICAgICAgY29uc3QgeyBkYXRhOiByZXN1bHQgfSA9IGF3YWl0IGF4aW9zKHtcbiAgICAgICAgdXJsOiBgJHt0aGlzLmVuZHBvaW50fWAsXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBkYXRhOiBwYXJhbXMsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICB9KVxuXG4gICAgICBpZiAoIWlzTmlsKHJlc3VsdC5lcnJvcnMpKSB0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkocmVzdWx0LmVycm9ycykpXG5cbiAgICAgIHRoaXMubG9nZ2VyLndpdGgoJ3JldHVybnMnKS5sb2cocmVzdWx0KVxuXG4gICAgICByZXR1cm4gcmVzdWx0LmRhdGFcbiAgICB9XG5cbiAgICBnZXRBdHRyaWJ1dGVHcmFwaFFMVHlwZU9mPEZpZWxkVHlwZT4odmFsdWU6IEZpZWxkVHlwZSk6IHN0cmluZyB7XG4gICAgICBpZiAoaXNVVUlEKHZhbHVlIGFzIGFueSkpIHJldHVybiAndXVpZCdcbiAgICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHJldHVybiAnU3RyaW5nJ1xuICAgICAgaWYgKGlzQm9vbGVhbih2YWx1ZSkpIHJldHVybiAnQm9vbGVhbidcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiAndGltZXN0YW1wdHonXG4gICAgICBpZiAoaXNJbnRlZ2VyKHZhbHVlKSkgcmV0dXJuICdJbnQnXG4gICAgICBpZiAoaXNOdW1iZXIodmFsdWUpKSByZXR1cm4gJ251bWVyaWMnXG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignVHlwZSBub3QgaW1wbGVtZW50ZWQgeWV0JylcbiAgICB9XG5cbiAgICBjaGVja0lmSXNEYXRlVGltZUFuZFBhcnNlKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHwgc3RyaW5nIHtcbiAgICAgIGlmICghL15cXGR7NH0tKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18WzEyXVswLTldfDNbMDFdKSQvLnRlc3QodmFsdWUpKSByZXR1cm4gdmFsdWVcblxuICAgICAgY29uc3QgZGF0ZSA9IHBhcnNlSVNPKHZhbHVlKVxuXG4gICAgICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gdmFsdWVcblxuICAgICAgcmV0dXJuIGRhdGVcbiAgICB9XG5cbiAgICBjb252ZXJ0RGF0YUZyb21IYXN1cmEoXG4gICAgICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+LFxuICAgICAgZmllbGRzPzogc3RyaW5nW10gfCBIYXN1cmFHcmFwaFFMRmllbGRzPE1CYXNlPixcbiAgICApOiBNQmFzZSB7XG4gICAgICBjb25zdCBwbGFpbiA9IEdyYXBoUUxGaWVsZEhlbHBlci5Db252ZXJ0RmllbGRWYWx1ZUZyb20oXG4gICAgICAgIGRhdGEsXG4gICAgICAgIChmaWVsZHMgYXMgSGFzdXJhR3JhcGhRTEZpZWxkczxNQmFzZT4pIHx8IHRoaXMuZmllbGRzLFxuICAgICAgKVxuXG4gICAgICByZXR1cm4gdGhpcy5tb2RlbC50b0luc3RhbmNlKHBsYWluKVxuICAgIH1cblxuICAgIGNvbnZlcnREYXRhVG9IYXN1cmEoaW5zdGFuY2U6IE1CYXNlLCB1cGRhdGUgPSBmYWxzZSk6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4ge1xuICAgICAgcmV0dXJuIEdyYXBoUUxGaWVsZEhlbHBlci5Db252ZXJ0RmllbGRWYWx1ZVRvKGluc3RhbmNlLCB0aGlzLmZpZWxkcywgdXBkYXRlKVxuICAgIH1cblxuICAgIGJ1aWxkSGFzdXJhUXVlcnlGaWVsZHMoe1xuICAgICAgb3BlcmF0aW9uLFxuICAgICAgZmllbGRzLFxuICAgICAgdmFyaWFibGVzLFxuICAgIH06IHtcbiAgICAgIG9wZXJhdGlvbjogc3RyaW5nIHwgSU9wZXJhdGlvbiB8IEdyYXBoUUxQYXJhbXM8TUJhc2U+W11cbiAgICAgIGZpZWxkcz86IEhhc3VyYUdyYXBoUUxGaWVsZHM8TUJhc2U+XG4gICAgICB2YXJpYWJsZXM/OiBWYXJpYWJsZU9wdGlvbnNcbiAgICB9KTogUXVlcnlCdWlsZGVyT3B0aW9ucyB8IFF1ZXJ5QnVpbGRlck9wdGlvbnNbXSB7XG4gICAgICByZXR1cm4gR3JhcGhRTEZpZWxkSGVscGVyLkNoZWNrSXNHcmFwaFFMUGFyYW1zKG9wZXJhdGlvbilcbiAgICAgICAgPyBvcGVyYXRpb24ubWFwKChvcHRpb24pID0+ICh7XG4gICAgICAgICAgICBvcGVyYXRpb246IG9wdGlvbi5vcGVyYXRpb24sXG4gICAgICAgICAgICB2YXJpYWJsZXM6IG9wdGlvbi52YXJpYWJsZXMsXG4gICAgICAgICAgICBmaWVsZHM6IEdyYXBoUUxGaWVsZEhlbHBlci5Db252ZXJ0TW9kZWxGaWVsZHNUb0dyYXBoUUxGaWVsZHMob3B0aW9uLmZpZWxkcyksXG4gICAgICAgICAgfSkpXG4gICAgICAgIDoge1xuICAgICAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICAgICAgdmFyaWFibGVzLFxuICAgICAgICAgICAgZmllbGRzOiBHcmFwaFFMRmllbGRIZWxwZXIuQ29udmVydE1vZGVsRmllbGRzVG9HcmFwaFFMRmllbGRzKGZpZWxkcyksXG4gICAgICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|