@faststore/api 1.5.9 → 1.5.10
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/CHANGELOG.md +11 -0
- package/dist/__generated__/schema.d.ts +7 -0
- package/dist/api.cjs.development.js +26 -7
- package/dist/api.cjs.development.js.map +1 -1
- package/dist/api.cjs.production.min.js +1 -1
- package/dist/api.cjs.production.min.js.map +1 -1
- package/dist/api.esm.js +26 -7
- package/dist/api.esm.js.map +1 -1
- package/dist/platforms/vtex/clients/search/types/ProductSearchResult.d.ts +1 -1
- package/package.json +2 -2
- package/src/__generated__/schema.ts +8 -0
- package/src/platforms/vtex/clients/search/types/ProductSearchResult.ts +1 -1
- package/src/platforms/vtex/resolvers/product.ts +5 -0
- package/src/platforms/vtex/resolvers/productGroup.ts +10 -0
- package/src/typeDefs/index.ts +2 -0
- package/src/typeDefs/product.graphql +1 -0
- package/src/typeDefs/productGroup.graphql +1 -0
- package/src/typeDefs/propertyValue.graphql +4 -0
package/dist/api.esm.js
CHANGED
|
@@ -714,7 +714,13 @@ const StoreProduct = {
|
|
|
714
714
|
},
|
|
715
715
|
isVariantOf: ({
|
|
716
716
|
isVariantOf
|
|
717
|
-
}) => isVariantOf
|
|
717
|
+
}) => isVariantOf,
|
|
718
|
+
additionalProperty: ({
|
|
719
|
+
attributes = []
|
|
720
|
+
}) => attributes.map(attribute => ({
|
|
721
|
+
name: attribute.key,
|
|
722
|
+
value: attribute.value
|
|
723
|
+
}))
|
|
718
724
|
};
|
|
719
725
|
|
|
720
726
|
const StoreProductGroup = {
|
|
@@ -724,7 +730,17 @@ const StoreProductGroup = {
|
|
|
724
730
|
}) => product,
|
|
725
731
|
name: ({
|
|
726
732
|
name
|
|
727
|
-
}) => name
|
|
733
|
+
}) => name,
|
|
734
|
+
additionalProperty: ({
|
|
735
|
+
textAttributes = [],
|
|
736
|
+
productSpecifications = []
|
|
737
|
+
}) => {
|
|
738
|
+
const specs = new Set(productSpecifications);
|
|
739
|
+
return textAttributes.filter(attribute => specs.has(attribute.labelKey)).map(attribute => ({
|
|
740
|
+
name: attribute.labelKey,
|
|
741
|
+
value: attribute.labelValue
|
|
742
|
+
}));
|
|
743
|
+
}
|
|
728
744
|
};
|
|
729
745
|
|
|
730
746
|
const getIdFromSlug = slug => {
|
|
@@ -1034,11 +1050,11 @@ var doc$b = {"kind":"Document","definitions":[{"kind":"ObjectTypeDefinition","na
|
|
|
1034
1050
|
var doc$c = {"kind":"Document","definitions":[{"kind":"ObjectTypeDefinition","name":{"kind":"Name","value":"StorePageInfo"},"interfaces":[],"directives":[],"fields":[{"kind":"FieldDefinition","name":{"kind":"Name","value":"hasNextPage"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"hasPreviousPage"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"startCursor"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"endCursor"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"totalCount"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},"directives":[]}]}],"loc":{"start":0,"end":197}};
|
|
1035
1051
|
doc$c.loc.source = {"body":"type StorePageInfo {\n hasNextPage: Boolean!\n hasPreviousPage: Boolean!\n startCursor: String!\n endCursor: String!\n # Total number of items(products/collections), not pages\n totalCount: Int!\n}\n","name":"GraphQL request","locationOffset":{"line":1,"column":1}};
|
|
1036
1052
|
|
|
1037
|
-
var doc$d = {"kind":"Document","definitions":[{"kind":"ObjectTypeDefinition","name":{"kind":"Name","value":"StoreProduct"},"interfaces":[],"directives":[],"fields":[{"kind":"FieldDefinition","name":{"kind":"Name","value":"seo"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreSeo"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"breadcrumbList"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreBreadcrumbList"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"slug"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"name"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"productID"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"brand"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreBrand"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"description"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"image"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreImage"}}}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"offers"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreAggregateOffer"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"sku"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"gtin"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"review"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreReview"}}}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"aggregateRating"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreAggregateRating"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"isVariantOf"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreProductGroup"}}},"directives":[]}]},{"kind":"InputObjectTypeDefinition","name":{"kind":"Name","value":"IStoreProduct"},"directives":[],"fields":[{"kind":"InputValueDefinition","name":{"kind":"Name","value":"sku"},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"InputValueDefinition","name":{"kind":"Name","value":"name"},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"InputValueDefinition","name":{"kind":"Name","value":"image"},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"IStoreImage"}}}}},"directives":[]}]}],"loc":{"start":0,"end":
|
|
1038
|
-
doc$d.loc.source = {"body":"type StoreProduct {\n # Meta tag data\n seo: StoreSeo!\n # Location for structured data\n breadcrumbList: StoreBreadcrumbList!\n # Where to retrieve this entity\n slug: String!\n name: String!\n productID: String!\n brand: StoreBrand!\n description: String!\n image: [StoreImage!]!\n offers: StoreAggregateOffer!\n sku: String!\n gtin: String!\n review: [StoreReview!]!\n aggregateRating: StoreAggregateRating!\n isVariantOf: StoreProductGroup!\n}\n\ninput IStoreProduct {\n sku: String!\n name: String!\n image: [IStoreImage!]!\n}\n","name":"GraphQL request","locationOffset":{"line":1,"column":1}};
|
|
1053
|
+
var doc$d = {"kind":"Document","definitions":[{"kind":"ObjectTypeDefinition","name":{"kind":"Name","value":"StoreProduct"},"interfaces":[],"directives":[],"fields":[{"kind":"FieldDefinition","name":{"kind":"Name","value":"seo"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreSeo"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"breadcrumbList"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreBreadcrumbList"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"slug"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"name"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"productID"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"brand"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreBrand"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"description"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"image"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreImage"}}}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"offers"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreAggregateOffer"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"sku"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"gtin"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"review"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreReview"}}}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"aggregateRating"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreAggregateRating"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"isVariantOf"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreProductGroup"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"additionalProperty"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StorePropertyValue"}}}}},"directives":[]}]},{"kind":"InputObjectTypeDefinition","name":{"kind":"Name","value":"IStoreProduct"},"directives":[],"fields":[{"kind":"InputValueDefinition","name":{"kind":"Name","value":"sku"},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"InputValueDefinition","name":{"kind":"Name","value":"name"},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"InputValueDefinition","name":{"kind":"Name","value":"image"},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"IStoreImage"}}}}},"directives":[]}]}],"loc":{"start":0,"end":573}};
|
|
1054
|
+
doc$d.loc.source = {"body":"type StoreProduct {\n # Meta tag data\n seo: StoreSeo!\n # Location for structured data\n breadcrumbList: StoreBreadcrumbList!\n # Where to retrieve this entity\n slug: String!\n name: String!\n productID: String!\n brand: StoreBrand!\n description: String!\n image: [StoreImage!]!\n offers: StoreAggregateOffer!\n sku: String!\n gtin: String!\n review: [StoreReview!]!\n aggregateRating: StoreAggregateRating!\n isVariantOf: StoreProductGroup!\n additionalProperty: [StorePropertyValue!]!\n}\n\ninput IStoreProduct {\n sku: String!\n name: String!\n image: [IStoreImage!]!\n}\n","name":"GraphQL request","locationOffset":{"line":1,"column":1}};
|
|
1039
1055
|
|
|
1040
|
-
var doc$e = {"kind":"Document","definitions":[{"kind":"ObjectTypeDefinition","name":{"kind":"Name","value":"StoreProductGroup"},"interfaces":[],"directives":[],"fields":[{"kind":"FieldDefinition","name":{"kind":"Name","value":"hasVariant"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreProduct"}}}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"productGroupID"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"name"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]}]}],"loc":{"start":0,"end":
|
|
1041
|
-
doc$e.loc.source = {"body":"type StoreProductGroup {\n hasVariant: [StoreProduct!]!\n productGroupID: String!\n name: String!\n}\n","name":"GraphQL request","locationOffset":{"line":1,"column":1}};
|
|
1056
|
+
var doc$e = {"kind":"Document","definitions":[{"kind":"ObjectTypeDefinition","name":{"kind":"Name","value":"StoreProductGroup"},"interfaces":[],"directives":[],"fields":[{"kind":"FieldDefinition","name":{"kind":"Name","value":"hasVariant"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreProduct"}}}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"productGroupID"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"name"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"additionalProperty"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StorePropertyValue"}}}}},"directives":[]}]}],"loc":{"start":0,"end":145}};
|
|
1057
|
+
doc$e.loc.source = {"body":"type StoreProductGroup {\n hasVariant: [StoreProduct!]!\n productGroupID: String!\n name: String!\n additionalProperty: [StorePropertyValue!]!\n}\n","name":"GraphQL request","locationOffset":{"line":1,"column":1}};
|
|
1042
1058
|
|
|
1043
1059
|
var doc$f = {"kind":"Document","definitions":[{"kind":"ObjectTypeDefinition","name":{"kind":"Name","value":"StoreProductEdge"},"interfaces":[],"directives":[],"fields":[{"kind":"FieldDefinition","name":{"kind":"Name","value":"node"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreProduct"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"cursor"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]}]},{"kind":"ObjectTypeDefinition","name":{"kind":"Name","value":"StoreProductConnection"},"interfaces":[],"directives":[],"fields":[{"kind":"FieldDefinition","name":{"kind":"Name","value":"pageInfo"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StorePageInfo"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"edges"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreProductEdge"}}}}},"directives":[]}]},{"kind":"ObjectTypeDefinition","name":{"kind":"Name","value":"StoreCollectionEdge"},"interfaces":[],"directives":[],"fields":[{"kind":"FieldDefinition","name":{"kind":"Name","value":"node"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreCollection"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"cursor"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]}]},{"kind":"ObjectTypeDefinition","name":{"kind":"Name","value":"StoreCollectionConnection"},"interfaces":[],"directives":[],"fields":[{"kind":"FieldDefinition","name":{"kind":"Name","value":"pageInfo"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StorePageInfo"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"edges"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreCollectionEdge"}}}}},"directives":[]}]},{"kind":"EnumTypeDefinition","name":{"kind":"Name","value":"StoreSort"},"directives":[],"values":[{"kind":"EnumValueDefinition","name":{"kind":"Name","value":"price_desc"},"directives":[]},{"kind":"EnumValueDefinition","name":{"kind":"Name","value":"price_asc"},"directives":[]},{"kind":"EnumValueDefinition","name":{"kind":"Name","value":"orders_desc"},"directives":[]},{"kind":"EnumValueDefinition","name":{"kind":"Name","value":"name_desc"},"directives":[]},{"kind":"EnumValueDefinition","name":{"kind":"Name","value":"name_asc"},"directives":[]},{"kind":"EnumValueDefinition","name":{"kind":"Name","value":"release_desc"},"directives":[]},{"kind":"EnumValueDefinition","name":{"kind":"Name","value":"discount_desc"},"directives":[]},{"kind":"EnumValueDefinition","name":{"kind":"Name","value":"score_desc"},"directives":[]}]},{"kind":"InputObjectTypeDefinition","name":{"kind":"Name","value":"IStoreSelectedFacet"},"directives":[],"fields":[{"kind":"InputValueDefinition","name":{"kind":"Name","value":"key"},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"InputValueDefinition","name":{"kind":"Name","value":"value"},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]}]},{"kind":"EnumTypeDefinition","name":{"kind":"Name","value":"StoreFacetType"},"directives":[],"values":[{"kind":"EnumValueDefinition","name":{"kind":"Name","value":"BOOLEAN"},"directives":[]},{"kind":"EnumValueDefinition","name":{"kind":"Name","value":"RANGE"},"directives":[]}]},{"kind":"ObjectTypeDefinition","name":{"kind":"Name","value":"StoreSearchResult"},"interfaces":[],"directives":[],"fields":[{"kind":"FieldDefinition","name":{"kind":"Name","value":"products"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreProductConnection"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"facets"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreFacet"}}}}},"directives":[]}]},{"kind":"ObjectTypeDefinition","name":{"kind":"Name","value":"Query"},"interfaces":[],"directives":[],"fields":[{"kind":"FieldDefinition","name":{"kind":"Name","value":"product"},"arguments":[{"kind":"InputValueDefinition","name":{"kind":"Name","value":"locator"},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"IStoreSelectedFacet"}}}}},"directives":[]}],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreProduct"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"collection"},"arguments":[{"kind":"InputValueDefinition","name":{"kind":"Name","value":"slug"},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]}],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreCollection"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"search"},"arguments":[{"kind":"InputValueDefinition","name":{"kind":"Name","value":"first"},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},"directives":[]},{"kind":"InputValueDefinition","name":{"kind":"Name","value":"after"},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}},"directives":[]},{"kind":"InputValueDefinition","name":{"kind":"Name","value":"sort"},"type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreSort"}},"defaultValue":{"kind":"EnumValue","value":"score_desc"},"directives":[]},{"kind":"InputValueDefinition","name":{"kind":"Name","value":"term"},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}},"defaultValue":{"kind":"StringValue","value":"","block":false},"directives":[]},{"kind":"InputValueDefinition","name":{"kind":"Name","value":"selectedFacets"},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"IStoreSelectedFacet"}}}},"directives":[]}],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreSearchResult"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"allProducts"},"arguments":[{"kind":"InputValueDefinition","name":{"kind":"Name","value":"first"},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},"directives":[]},{"kind":"InputValueDefinition","name":{"kind":"Name","value":"after"},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}},"directives":[]}],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreProductConnection"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"allCollections"},"arguments":[{"kind":"InputValueDefinition","name":{"kind":"Name","value":"first"},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},"directives":[]},{"kind":"InputValueDefinition","name":{"kind":"Name","value":"after"},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}},"directives":[]}],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StoreCollectionConnection"}}},"directives":[]}]}],"loc":{"start":0,"end":1077}};
|
|
1044
1060
|
doc$f.loc.source = {"body":"type StoreProductEdge {\n node: StoreProduct!\n cursor: String!\n}\n\ntype StoreProductConnection {\n pageInfo: StorePageInfo!\n edges: [StoreProductEdge!]!\n}\n\ntype StoreCollectionEdge {\n node: StoreCollection!\n cursor: String!\n}\n\ntype StoreCollectionConnection {\n pageInfo: StorePageInfo!\n edges: [StoreCollectionEdge!]!\n}\n\nenum StoreSort {\n price_desc\n price_asc\n orders_desc\n name_desc\n name_asc\n release_desc\n discount_desc\n score_desc\n}\n\ninput IStoreSelectedFacet {\n key: String!\n value: String!\n}\n\nenum StoreFacetType {\n BOOLEAN\n RANGE\n}\n\ntype StoreSearchResult {\n products: StoreProductConnection!\n facets: [StoreFacet!]!\n}\n\ntype Query {\n product(locator: [IStoreSelectedFacet!]!): StoreProduct!\n\n collection(slug: String!): StoreCollection!\n\n search(\n first: Int!\n after: String\n sort: StoreSort = score_desc\n term: String = \"\"\n selectedFacets: [IStoreSelectedFacet!]\n ): StoreSearchResult!\n\n allProducts(first: Int!, after: String): StoreProductConnection!\n\n allCollections(first: Int!, after: String): StoreCollectionConnection!\n}\n","name":"GraphQL request","locationOffset":{"line":1,"column":1}};
|
|
@@ -1055,7 +1071,10 @@ var doc$i = {"kind":"Document","definitions":[{"kind":"ObjectTypeDefinition","na
|
|
|
1055
1071
|
var doc$j = {"kind":"Document","definitions":[{"kind":"EnumTypeDefinition","name":{"kind":"Name","value":"StoreStatus"},"directives":[],"values":[{"kind":"EnumValueDefinition","name":{"kind":"Name","value":"INFO"},"directives":[]},{"kind":"EnumValueDefinition","name":{"kind":"Name","value":"WARNING"},"directives":[]},{"kind":"EnumValueDefinition","name":{"kind":"Name","value":"ERROR"},"directives":[]}]}],"loc":{"start":0,"end":46}};
|
|
1056
1072
|
doc$j.loc.source = {"body":"enum StoreStatus {\n INFO\n WARNING\n ERROR\n}\n","name":"GraphQL request","locationOffset":{"line":1,"column":1}};
|
|
1057
1073
|
|
|
1058
|
-
|
|
1074
|
+
var doc$k = {"kind":"Document","definitions":[{"kind":"ObjectTypeDefinition","name":{"kind":"Name","value":"StorePropertyValue"},"interfaces":[],"directives":[],"fields":[{"kind":"FieldDefinition","name":{"kind":"Name","value":"value"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]},{"kind":"FieldDefinition","name":{"kind":"Name","value":"name"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},"directives":[]}]}],"loc":{"start":0,"end":61}};
|
|
1075
|
+
doc$k.loc.source = {"body":"type StorePropertyValue {\n value: String!\n name: String!\n}\n","name":"GraphQL request","locationOffset":{"line":1,"column":1}};
|
|
1076
|
+
|
|
1077
|
+
const typeDefs = /*#__PURE__*/[doc$f, doc$8, doc$3, doc$4, doc$5, doc$6, doc$7, doc$c, doc$d, doc$h, doc$9, doc$1, doc$g, doc$2, doc$e, doc$b, doc, doc$a, doc$i, doc$j, doc$k].map(print).join('\n');
|
|
1059
1078
|
|
|
1060
1079
|
const platforms = {
|
|
1061
1080
|
vtex: {
|
package/dist/api.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.esm.js","sources":["../src/platforms/vtex/clients/fetch.ts","../src/platforms/vtex/clients/commerce/index.ts","../src/platforms/vtex/clients/search/index.ts","../src/platforms/vtex/clients/index.ts","../src/platforms/vtex/loaders/simulation.ts","../src/platforms/vtex/utils/errors.ts","../src/platforms/vtex/utils/enhanceSku.ts","../src/platforms/vtex/loaders/sku.ts","../src/platforms/vtex/loaders/index.ts","../src/platforms/vtex/resolvers/aggregateOffer.ts","../src/platforms/vtex/resolvers/aggregateRating.ts","../src/platforms/vtex/utils/slugify.ts","../src/platforms/vtex/resolvers/collection.ts","../src/platforms/vtex/resolvers/facet.ts","../src/platforms/vtex/resolvers/facetValue.ts","../src/platforms/vtex/resolvers/validateCart.ts","../src/platforms/vtex/resolvers/mutation.ts","../src/platforms/vtex/resolvers/offer.ts","../src/platforms/vtex/resolvers/product.ts","../src/platforms/vtex/resolvers/productGroup.ts","../src/platforms/vtex/utils/facets.ts","../src/platforms/vtex/utils/sort.ts","../src/platforms/vtex/resolvers/query.ts","../src/platforms/vtex/resolvers/review.ts","../src/platforms/vtex/resolvers/searchResult.ts","../src/platforms/vtex/resolvers/seo.ts","../src/platforms/vtex/index.ts","../src/typeDefs/index.ts","../src/index.ts"],"sourcesContent":["import fetch from 'isomorphic-unfetch'\n\nexport const fetchAPI = async (info: RequestInfo, init?: RequestInit) => {\n const response = await fetch(info, init)\n\n if (response.ok) {\n return response.json()\n }\n\n const text = await response.text()\n\n throw new Error(text)\n}\n","import type { Context, Options } from '../../index'\nimport { fetchAPI } from '../fetch'\nimport type { Brand } from './types/Brand'\nimport type { CategoryTree } from './types/CategoryTree'\nimport type { OrderForm, OrderFormInputItem } from './types/OrderForm'\nimport type { PortalPagetype } from './types/Portal'\nimport type {\n Simulation,\n SimulationArgs,\n SimulationOptions,\n} from './types/Simulation'\n\nconst BASE_INIT = {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n}\n\nexport const VtexCommerce = (\n { account, environment }: Options,\n ctx: Context\n) => {\n const base = `http://${account}.${environment}.com.br`\n\n return {\n catalog: {\n brand: {\n list: (): Promise<Brand[]> =>\n fetchAPI(`${base}/api/catalog_system/pub/brand/list`),\n },\n category: {\n tree: (depth = 3): Promise<CategoryTree[]> =>\n fetchAPI(`${base}/api/catalog_system/pub/category/tree/${depth}`),\n },\n portal: {\n pagetype: (slug: string): Promise<PortalPagetype> =>\n fetchAPI(`${base}/api/catalog_system/pub/portal/pagetype/${slug}`),\n },\n },\n checkout: {\n simulation: (\n args: SimulationArgs,\n { salesChannel }: SimulationOptions = {\n salesChannel: ctx.storage.channel,\n }\n ): Promise<Simulation> => {\n const params = new URLSearchParams({\n sc: salesChannel,\n })\n\n return fetchAPI(\n `${base}/api/checkout/pub/orderForms/simulation?${params.toString()}`,\n {\n ...BASE_INIT,\n body: JSON.stringify(args),\n }\n )\n },\n orderForm: ({\n id,\n refreshOutdatedData = true,\n salesChannel = ctx.storage.channel,\n }: {\n id: string\n refreshOutdatedData?: boolean\n salesChannel?: string\n }): Promise<OrderForm> => {\n const params = new URLSearchParams({\n refreshOutdatedData: refreshOutdatedData.toString(),\n sc: salesChannel,\n })\n\n return fetchAPI(\n `${base}/api/checkout/pub/orderForm/${id}?${params.toString()}`,\n BASE_INIT\n )\n },\n updateOrderFormItems: ({\n id,\n orderItems,\n allowOutdatedData = 'paymentData',\n salesChannel = ctx.storage.channel,\n }: {\n id: string\n orderItems: OrderFormInputItem[]\n allowOutdatedData?: 'paymentData'\n salesChannel?: string\n }): Promise<OrderForm> => {\n const params = new URLSearchParams({\n allowOutdatedData,\n sc: salesChannel,\n })\n\n return fetchAPI(\n `${base}/api/checkout/pub/orderForm/${id}/items?${params}`,\n {\n ...BASE_INIT,\n body: JSON.stringify({ orderItems }),\n method: 'PATCH',\n }\n )\n },\n },\n }\n}\n","import type { Context, Options } from '../../index'\nimport { fetchAPI } from '../fetch'\nimport type { SelectedFacet } from '../../utils/facets'\nimport type { ProductSearchResult } from './types/ProductSearchResult'\nimport type { AttributeSearchResult } from './types/AttributeSearchResult'\n\nexport type Sort =\n | 'price:desc'\n | 'price:asc'\n | 'orders:desc'\n | 'name:desc'\n | 'name:asc'\n | 'release:desc'\n | 'discount:desc'\n | ''\n\nexport interface SearchArgs {\n query?: string\n page: number\n count: number\n type: 'product_search' | 'attribute_search'\n sort?: Sort\n selectedFacets?: SelectedFacet[]\n fuzzy?: '0' | '1'\n}\n\nexport interface ProductLocator {\n field: 'id' | 'slug'\n value: string\n}\n\nexport const IntelligentSearch = (\n { account, environment }: Options,\n ctx: Context\n) => {\n const base = `http://portal.${environment}.com.br/search-api/v1/${account}`\n const policyFacet = { key: 'trade-policy', value: ctx.storage.channel }\n\n const addDefaultFacets = (facets: SelectedFacet[]) => {\n const facet = facets.find(({ key }) => key === policyFacet.key)\n\n if (facet === undefined) {\n return [...facets, policyFacet]\n }\n\n return facets\n }\n\n const search = <T>({\n query = '',\n page,\n count,\n sort = '',\n selectedFacets = [],\n type,\n fuzzy = '0',\n }: SearchArgs): Promise<T> => {\n const params = new URLSearchParams({\n page: (page + 1).toString(),\n count: count.toString(),\n query,\n sort,\n fuzzy,\n })\n\n const pathname = addDefaultFacets(selectedFacets)\n .map(({ key, value }) => `${key}/${value}`)\n .join('/')\n\n return fetchAPI(\n `${base}/api/split/${type}/${pathname}?${params.toString()}`\n )\n }\n\n const products = (args: Omit<SearchArgs, 'type'>) =>\n search<ProductSearchResult>({ ...args, type: 'product_search' })\n\n const facets = (args: Omit<SearchArgs, 'type'>) =>\n search<AttributeSearchResult>({ ...args, type: 'attribute_search' })\n\n return {\n facets,\n products,\n }\n}\n","import { VtexCommerce } from './commerce'\nimport { IntelligentSearch } from './search'\nimport type { Context, Options } from '..'\n\nexport type Clients = ReturnType<typeof getClients>\n\nexport const getClients = (options: Options, ctx: Context) => {\n const search = IntelligentSearch(options, ctx)\n const commerce = VtexCommerce(options, ctx)\n\n return {\n search,\n commerce,\n }\n}\n","import DataLoader from 'dataloader'\n\nimport type {\n PayloadItem,\n Simulation,\n} from '../clients/commerce/types/Simulation'\nimport type { Options } from '..'\nimport type { Clients } from '../clients'\n\nexport const getSimulationLoader = (_: Options, clients: Clients) => {\n const loader = async (allItems: readonly PayloadItem[][]) => {\n const items = [...allItems.flat()]\n const simulation = await clients.commerce.checkout.simulation({\n items,\n })\n\n // Sort and filter simulation since Checkout API may return\n // items that we didn't ask for\n const simulated = simulation.items.reduce((acc, item) => {\n const index = item.requestIndex\n\n if (typeof index === 'number' && index < acc.length) {\n acc[index] = item\n }\n\n return acc\n }, Array(items.length).fill(null) as Simulation['items'])\n\n const itemsIndices = allItems.reduce(\n (acc, curr) => [...acc, curr.length + acc[acc.length - 1]],\n [0]\n )\n\n return allItems.map((__, index) => ({\n ...simulation,\n items: simulated\n .slice(itemsIndices[index], itemsIndices[index + 1])\n .filter((item) => Boolean(item)),\n }))\n }\n\n return new DataLoader<PayloadItem[], Simulation>(loader, {\n maxBatchSize: 20,\n })\n}\n","export class BadRequestError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'BadRequestError'\n }\n}\n\nexport class NotFoundError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'NotFoundError'\n }\n}\n","import type { Product, Sku } from '../clients/search/types/ProductSearchResult'\n\nexport type EnhancedSku = Sku & { isVariantOf: Product }\n\nexport const enhanceSku = (sku: Sku, product: Product): EnhancedSku => ({\n ...sku,\n isVariantOf: product,\n})\n","import DataLoader from 'dataloader'\n\nimport { BadRequestError } from '../utils/errors'\nimport { enhanceSku } from '../utils/enhanceSku'\nimport type { EnhancedSku } from '../utils/enhanceSku'\nimport type { Options } from '..'\nimport type { Clients } from '../clients'\nimport type { SelectedFacet } from '../utils/facets'\n\nexport const getSkuLoader = (_: Options, clients: Clients) => {\n const loader = async (facetsList: readonly SelectedFacet[][]) => {\n const skuIds = facetsList.map((facets) => {\n const maybeFacet = facets.find(({ key }) => key === 'id')\n\n if (!maybeFacet) {\n throw new BadRequestError(\n 'Error while loading SKU. Needs to pass an id to selected facets'\n )\n }\n\n return maybeFacet.value\n })\n\n const { products } = await clients.search.products({\n query: `sku:${skuIds.join(';')}`,\n page: 0,\n count: skuIds.length,\n })\n\n const skuBySkuId = products.reduce((acc, product) => {\n for (const sku of product.skus) {\n acc[sku.id] = enhanceSku(sku, product)\n }\n\n return acc\n }, {} as Record<string, EnhancedSku>)\n\n const skus = skuIds.map((skuId) => skuBySkuId[skuId])\n const missingSkus = skus.filter((sku) => !sku)\n\n if (missingSkus.length > 0) {\n throw new Error(\n `Search API did not return the following skus: ${missingSkus.join(',')}`\n )\n }\n\n return skus\n }\n\n return new DataLoader<SelectedFacet[], EnhancedSku>(loader, {\n maxBatchSize: 99, // Max allowed batch size of Search API\n })\n}\n","import { getSimulationLoader } from './simulation'\nimport { getSkuLoader } from './sku'\nimport type { Context, Options } from '..'\n\nexport type Loaders = ReturnType<typeof getLoaders>\n\nexport const getLoaders = (options: Options, { clients }: Context) => {\n const skuLoader = getSkuLoader(options, clients)\n const simulationLoader = getSimulationLoader(options, clients)\n\n return {\n skuLoader,\n simulationLoader,\n }\n}\n","import type { EnhancedSku } from '../utils/enhanceSku'\nimport type { Simulation } from '../clients/commerce/types/Simulation'\n\ntype Resolvers = (root: Simulation & { product: EnhancedSku }) => unknown\n\nexport const StoreAggregateOffer: Record<string, Resolvers> = {\n highPrice: ({ items }) =>\n items.reduce(\n (acc, curr) => (acc > curr.sellingPrice ? acc : curr.sellingPrice),\n items[0]?.sellingPrice ?? 0\n ) / 1e2,\n lowPrice: ({ items }) =>\n items.reduce(\n (acc, curr) => (acc < curr.sellingPrice ? acc : curr.sellingPrice),\n items[0]?.sellingPrice ?? 0\n ) / 1e2,\n offerCount: ({ items }) => items.length,\n priceCurrency: () => '',\n offers: ({ items, product }) => items.map((item) => ({ ...item, product })),\n}\n","import type { Resolver } from '..'\n\n// TODO: Add a review system integration\nexport const StoreAggregateRating: Record<string, Resolver> = {\n ratingValue: () => 5,\n reviewCount: () => 0,\n}\n","import rawSlugify from '@sindresorhus/slugify'\n\nexport const slugify = (path: string) =>\n rawSlugify(path, { separator: '-', lowercase: true })\n","import { slugify as baseSlugify } from '../utils/slugify'\nimport type { Resolver } from '..'\nimport type { Brand } from '../clients/commerce/types/Brand'\nimport type { CategoryTree } from '../clients/commerce/types/CategoryTree'\nimport type { PortalPagetype } from '../clients/commerce/types/Portal'\n\ntype Root = Brand | (CategoryTree & { level: number }) | PortalPagetype\n\nconst isBrand = (x: any): x is Brand => x.type === 'brand'\n\nconst isPortalPageType = (x: any): x is PortalPagetype =>\n typeof x.pageType === 'string'\n\nconst slugify = (root: Root) => {\n if (isBrand(root)) {\n return baseSlugify(root.name)\n }\n\n if (isPortalPageType(root)) {\n return new URL(`https://${root.url}`).pathname.slice(1)\n }\n\n return new URL(root.url).pathname.slice(1)\n}\n\nexport const StoreCollection: Record<string, Resolver<Root>> = {\n id: ({ id }) => id.toString(),\n slug: (root) => slugify(root),\n seo: (root) =>\n isBrand(root) || isPortalPageType(root)\n ? {\n title: root.title,\n description: root.metaTagDescription,\n }\n : {\n title: root.Title,\n description: root.MetaTagDescription,\n },\n type: (root) =>\n isBrand(root)\n ? 'Brand'\n : isPortalPageType(root)\n ? root.pageType\n : root.level === 0\n ? 'Department'\n : 'Category',\n meta: (root) =>\n isBrand(root)\n ? {\n selectedFacets: [{ key: 'brand', value: baseSlugify(root.name) }],\n }\n : {\n selectedFacets: new URL(\n isPortalPageType(root) ? `https://${root.url}` : root.url\n ).pathname\n .slice(1)\n .split('/')\n .map((segment, index) => ({\n key: `category-${index + 1}`,\n value: baseSlugify(segment),\n })),\n },\n breadcrumbList: async (root, _, ctx) => {\n const {\n clients: { commerce },\n } = ctx\n\n const slug = slugify(root)\n\n /**\n * Split slug into segments so we fetch all data for\n * the breadcrumb. For instance, if we get `/foo/bar`\n * we need all metadata for both `/foo` and `/bar` and\n * thus we need to fetch pageType for `/foo` and `/bar`\n */\n const segments = slug.split('/').filter((segment) => Boolean(segment))\n const slugs = segments.map((__, index) =>\n segments.slice(0, index + 1).join('/')\n )\n\n const pageTypes = await Promise.all(\n slugs.map((s) => commerce.catalog.portal.pagetype(s))\n )\n\n return {\n itemListElement: pageTypes.map((pageType, index) => ({\n item: new URL(`https://${pageType.url}`).pathname.toLowerCase(),\n name: pageType.name,\n position: index + 1,\n })),\n numberOfItems: pageTypes.length,\n }\n },\n}\n","import type { Resolver } from '..'\nimport type { Attribute } from '../clients/search/types/AttributeSearchResult'\n\ntype Root = Attribute\n\nexport const StoreFacet: Record<string, Resolver<Root>> = {\n key: ({ key }) => key,\n label: ({ label }) => label,\n values: ({ values }) => values,\n type: ({ type }) => (type === 'text' ? 'BOOLEAN' : 'RANGE'),\n}\n","import type { Resolver } from '..'\nimport type { Value } from '../clients/search/types/AttributeSearchResult'\n\ntype Root = Value\n\nexport const StoreFacetValue: Record<string, Resolver<Root>> = {\n value: ({ key, from, to }) => key ?? `${from}-to-${to}`,\n label: ({ label }) => label ?? 'unknown',\n selected: ({ active }) => active,\n quantity: ({ count }) => count,\n}\n","import deepEquals from 'fast-deep-equal'\n\nimport type { IStoreCart, IStoreOffer } from '../../../__generated__/schema'\nimport type {\n OrderForm,\n OrderFormItem,\n OrderFormInputItem,\n} from '../clients/commerce/types/OrderForm'\nimport type { Context } from '..'\n\ntype Indexed<T> = T & { index?: number }\n\nconst getId = (item: IStoreOffer) =>\n [item.itemOffered.sku, item.seller.identifier, item.price].join('::')\n\nconst orderFormItemToOffer = (\n item: OrderFormItem,\n index?: number\n): Indexed<IStoreOffer> => ({\n listPrice: item.listPrice / 100,\n price: item.sellingPrice / 100,\n quantity: item.quantity,\n seller: { identifier: item.seller },\n itemOffered: {\n sku: item.id,\n image: [],\n name: item.name,\n },\n index,\n})\n\nconst offerToOrderItemInput = (\n offer: Indexed<IStoreOffer>\n): OrderFormInputItem => ({\n quantity: offer.quantity,\n seller: offer.seller.identifier,\n id: offer.itemOffered.sku,\n index: offer.index,\n})\n\nconst groupById = (offers: IStoreOffer[]): Map<string, IStoreOffer> =>\n offers.reduce((acc, item) => {\n const id = getId(item)\n\n acc.set(id, acc.get(id) ?? item)\n\n return acc\n }, new Map<string, IStoreOffer>())\n\nconst equals = (of1: OrderForm, of2: OrderForm) => {\n const pick = ({ orderFormId, messages, items, salesChannel }: OrderForm) => ({\n orderFormId,\n messages,\n salesChannel,\n items: items.map(\n ({ uniqueId, quantity, seller, sellingPrice, availability }) => ({\n uniqueId,\n quantity,\n seller,\n sellingPrice,\n availability,\n })\n ),\n })\n\n return deepEquals(pick(of1), pick(of2))\n}\n\n/**\n * This resolver implements the optimistic cart behavior. The main idea in here\n * is that we receive a cart from the UI (as query params) and we validate it with\n * the commerce platform. If the cart is valid, we return null, if the cart is\n * invalid according to the commerce platform, we return the new cart the UI should use\n * instead\n *\n * The algoritm is something like:\n * 1. Fetch orderForm from VTEX\n * 2. Compute delta changes between the orderForm and the UI's cart\n * 3. Update the orderForm in VTEX platform accordingly\n * 4. If any chages were made, send to the UI the new cart. Null otherwise\n */\nexport const validateCart = async (\n _: unknown,\n {\n cart: {\n order: { orderNumber, acceptedOffer },\n },\n }: { cart: IStoreCart },\n ctx: Context\n) => {\n const {\n clients: { commerce },\n loaders: { skuLoader },\n } = ctx\n\n // Step1: Get OrderForm from VTEX Commerce\n const orderForm = await commerce.checkout.orderForm({\n id: orderNumber,\n })\n\n // Step2: Process items from both browser and checkout so they have the same shape\n const browserItemsById = groupById(acceptedOffer)\n const originItemsById = groupById(orderForm.items.map(orderFormItemToOffer))\n const browserItems = Array.from(browserItemsById.values()) // items on the user's browser\n const originItems = Array.from(originItemsById.values()) // items on the VTEX platform backend\n\n // Step3: Compute delta changes\n const { itemsToAdd, itemsToUpdate } = browserItems.reduce(\n (acc, item) => {\n const maybeOriginItem = originItemsById.get(getId(item))\n\n if (!maybeOriginItem) {\n acc.itemsToAdd.push(item)\n } else {\n acc.itemsToUpdate.push({\n ...maybeOriginItem,\n quantity: item.quantity,\n })\n }\n\n return acc\n },\n {\n itemsToAdd: [] as IStoreOffer[],\n itemsToUpdate: [] as IStoreOffer[],\n }\n )\n\n const itemsToDelete = originItems\n .filter((item) => !browserItemsById.has(getId(item)))\n .map((item) => ({ ...item, quantity: 0 }))\n\n const changes = [...itemsToAdd, ...itemsToUpdate, ...itemsToDelete].map(\n offerToOrderItemInput\n )\n\n if (changes.length === 0) {\n return null\n }\n\n // Step4: Apply delta changes to order form\n const updatedOrderForm = await commerce.checkout.updateOrderFormItems({\n id: orderForm.orderFormId,\n orderItems: changes,\n })\n\n // Step5: If no changes detected before/after updating orderForm, the order is validated\n if (equals(orderForm, updatedOrderForm)) {\n return null\n }\n\n // Step6: There were changes, convert orderForm to StoreOrder\n return {\n order: {\n orderNumber: updatedOrderForm.orderFormId,\n acceptedOffer: updatedOrderForm.items.map((item) => ({\n ...item,\n product: skuLoader.load([{ key: 'id', value: item.id }]), // TODO: add channel\n })),\n },\n messages: updatedOrderForm.messages.map(({ text, status }) => ({\n text,\n status: status.toUpperCase(),\n })),\n }\n}\n","import { validateCart } from './validateCart'\n\nexport const Mutation = {\n validateCart,\n}\n","import type { EnhancedSku } from '../utils/enhanceSku'\nimport type { Resolver } from '..'\nimport type { Item } from '../clients/commerce/types/Simulation'\nimport type { OrderFormItem } from '../clients/commerce/types/OrderForm'\n\ntype Root =\n | (Item & { product: EnhancedSku }) // when querying search/product\n | (OrderFormItem & { product: Promise<EnhancedSku> }) // when querying order\n\nexport const StoreOffer: Record<string, Resolver<Root>> = {\n priceCurrency: () => '',\n priceValidUntil: ({ priceValidUntil }) => priceValidUntil ?? '',\n itemCondition: () => 'https://schema.org/NewCondition',\n availability: ({ availability }) =>\n availability === 'available'\n ? 'https://schema.org/InStock'\n : 'https://schema.org/OutOfStock',\n seller: ({ seller }) => ({\n identifier: seller,\n }),\n price: ({ sellingPrice }) => sellingPrice / 1e2, // TODO add spot price calculation\n sellingPrice: ({ sellingPrice }) => sellingPrice / 1e2,\n listPrice: ({ listPrice }) => listPrice / 1e2,\n itemOffered: ({ product }) => product,\n quantity: ({ quantity }) => quantity,\n}\n","import type { Resolver } from '..'\nimport type { EnhancedSku } from '../utils/enhanceSku'\nimport { slugify } from '../utils/slugify'\n\ntype Root = EnhancedSku\n\nconst DEFAULT_IMAGE = {\n name: 'image',\n value:\n 'https://storecomponents.vtexassets.com/assets/faststore/images/image___117a6d3e229a96ad0e0d0876352566e2.svg',\n}\n\nconst getSlug = (link: string, id: string) => `${link}-${id}`\nconst getPath = (link: string, id: string) => `/${getSlug(link, id)}/p`\nconst nonEmptyArray = <T>(array: T[] | null | undefined) =>\n Array.isArray(array) && array.length > 0 ? array : null\n\nexport const StoreProduct: Record<string, Resolver<Root>> = {\n productID: ({ id }) => id,\n name: ({ isVariantOf, name }) => name ?? isVariantOf.name,\n slug: ({ isVariantOf: { link }, id }) => getSlug(link, id),\n description: ({ isVariantOf: { description } }) => description,\n seo: ({ isVariantOf: { name, description } }) => ({\n title: name,\n description,\n }),\n brand: ({ isVariantOf: { brand } }) => ({ name: brand }),\n breadcrumbList: ({ isVariantOf: { categoryTrees, name, link }, id }) => ({\n itemListElement: [\n ...categoryTrees.reverse().map(({ categoryNames }, index) => ({\n name: categoryNames[categoryNames.length - 1],\n item: `/${categoryNames\n .map((categoryName) => slugify(categoryName))\n .join('/')}`,\n position: index + 1,\n })),\n {\n name,\n item: getPath(link, id),\n position: categoryTrees.length + 1,\n },\n ],\n numberOfItems: categoryTrees.length,\n }),\n image: ({ isVariantOf, images }) =>\n (\n nonEmptyArray(images) ??\n nonEmptyArray(isVariantOf.images) ?? [DEFAULT_IMAGE]\n ).map(({ name, value }) => ({\n alternateName: name ?? '',\n url: value.replace('vteximg.com.br', 'vtexassets.com'),\n })),\n sku: ({\n isVariantOf: {\n skus: [sku],\n },\n }) => sku.id,\n gtin: ({ reference }) => reference ?? '',\n review: () => [],\n aggregateRating: () => ({}),\n offers: async (product, _, ctx) => {\n const {\n loaders: { simulationLoader },\n storage: { channel },\n } = ctx\n\n const { id, policies } = product\n const sellers = policies.find((policy) => policy.id === channel)?.sellers\n\n if (sellers == null) {\n // This error will likely happen when you forget to forward the channel somewhere in your code.\n // Make sure all queries that lead to a product are forwarding the channel in context corectly\n throw new Error(\n `Product with id ${id} has no sellers for channel ${channel}.`\n )\n }\n\n // Unique seller ids\n const sellerIds = sellers.map((seller) => seller.id)\n const items = Array.from(new Set(sellerIds)).map((seller) => ({\n quantity: 1,\n seller,\n id,\n }))\n\n const simulation = await simulationLoader.load(items)\n\n return { ...simulation, product }\n },\n isVariantOf: ({ isVariantOf }) => isVariantOf,\n}\n","import { enhanceSku } from '../utils/enhanceSku'\nimport type { Product } from '../clients/search/types/ProductSearchResult'\nimport type { Resolver } from '..'\n\nexport const StoreProductGroup: Record<string, Resolver<Product>> = {\n hasVariant: (root) => root.skus.map((sku) => enhanceSku(sku, root)),\n productGroupID: ({ product }) => product,\n name: ({ name }) => name,\n}\n","import { BadRequestError } from './errors'\n\nexport interface SelectedFacet {\n key: string\n value: string\n}\n\nconst getIdFromSlug = (slug: string) => {\n const id = slug.split('-').pop()\n\n if (id == null) {\n throw new BadRequestError('Error while extracting sku id from product slug')\n }\n\n return id\n}\n\n/**\n * Transform facets from the store to VTEX platform facets.\n * For instance, the channel in Store becames trade-policy in VTEX's realm\n * */\nexport const transformSelectedFacet = ({ key, value }: SelectedFacet) => {\n switch (key) {\n case 'channel':\n return { key: 'trade-policy', value }\n\n case 'slug':\n return { key: 'id', value: getIdFromSlug(value) }\n\n default:\n return { key, value }\n }\n}\n","export const SORT_MAP = {\n price_desc: 'price:desc',\n price_asc: 'price:asc',\n orders_desc: 'orders:desc',\n name_desc: 'name:desc',\n name_asc: 'name:asc',\n release_desc: 'release:desc',\n discount_desc: 'discount:desc',\n score_desc: '',\n} as const\n","import { enhanceSku } from '../utils/enhanceSku'\nimport { NotFoundError } from '../utils/errors'\nimport { transformSelectedFacet } from '../utils/facets'\nimport { SORT_MAP } from '../utils/sort'\nimport { StoreCollection } from './collection'\nimport type {\n QueryProductArgs,\n QueryAllCollectionsArgs,\n QueryAllProductsArgs,\n QuerySearchArgs,\n QueryCollectionArgs,\n} from '../../../__generated__/schema'\nimport type { CategoryTree } from '../clients/commerce/types/CategoryTree'\nimport type { Context } from '../index'\n\nexport const Query = {\n product: async (_: unknown, { locator }: QueryProductArgs, ctx: Context) => {\n // Insert channel in context for later usage\n ctx.storage = {\n ...ctx.storage,\n channel:\n locator.find((facet) => facet.key === 'channel')?.value ??\n ctx.storage.channel,\n }\n\n const {\n loaders: { skuLoader },\n } = ctx\n\n return skuLoader.load(locator.map(transformSelectedFacet))\n },\n collection: async (\n _: unknown,\n { slug }: QueryCollectionArgs,\n ctx: Context\n ) => {\n const {\n clients: { commerce },\n } = ctx\n\n const result = await commerce.catalog.portal.pagetype(slug)\n\n const whitelist = ['Brand', 'Category', 'Department', 'Subcategory']\n\n if (whitelist.includes(result.pageType)) {\n return result\n }\n\n throw new NotFoundError(`Not Found: ${slug}`)\n },\n search: async (\n _: unknown,\n { first, after: maybeAfter, sort, term, selectedFacets }: QuerySearchArgs,\n ctx: Context\n ) => {\n // Insert channel in context for later usage\n ctx.storage = {\n ...ctx.storage,\n channel:\n selectedFacets?.find((facet) => facet.key === 'channel')?.value ??\n ctx.storage.channel,\n }\n\n const after = maybeAfter ? Number(maybeAfter) : 0\n const searchArgs = {\n page: Math.ceil(after / first),\n count: first,\n query: term,\n sort: SORT_MAP[sort ?? 'score_desc'],\n selectedFacets: selectedFacets?.map(transformSelectedFacet) ?? [],\n }\n\n return searchArgs\n },\n allProducts: async (\n _: unknown,\n { first, after: maybeAfter }: QueryAllProductsArgs,\n ctx: Context\n ) => {\n const {\n clients: { search },\n } = ctx\n\n const after = maybeAfter ? Number(maybeAfter) : 0\n const products = await search.products({\n page: Math.ceil(after / first),\n count: first,\n })\n\n const skus = products.products\n .map((product) => product.skus.map((sku) => enhanceSku(sku, product)))\n .flat()\n .filter((sku) => sku.sellers.length > 0)\n\n return {\n pageInfo: {\n hasNextPage: products.pagination.after.length > 0,\n hasPreviousPage: products.pagination.before.length > 0,\n startCursor: '0',\n endCursor: products.total.toString(),\n totalCount: products.total,\n },\n edges: skus.map((sku, index) => ({\n node: sku,\n cursor: (after + index).toString(),\n })),\n }\n },\n allCollections: async (\n _: unknown,\n { first, after: maybeAfter }: QueryAllCollectionsArgs,\n ctx: Context\n ) => {\n const {\n clients: { commerce },\n } = ctx\n\n const after = maybeAfter ? Number(maybeAfter) : 0\n\n const [brands, tree] = await Promise.all([\n commerce.catalog.brand.list(),\n commerce.catalog.category.tree(),\n ])\n\n const categories: Array<CategoryTree & { level: number }> = []\n const dfs = (node: CategoryTree, level: number) => {\n categories.push({ ...node, level })\n\n for (const child of node.children) {\n dfs(child, level + 1)\n }\n }\n\n for (const node of tree) {\n dfs(node, 0)\n }\n\n const collections = [\n ...brands.map((x) => ({ ...x, type: 'brand' })),\n ...categories,\n ]\n\n return {\n pageInfo: {\n hasNextPage: false,\n hasPreviousPage: false,\n startCursor: '0',\n endCursor: '0',\n },\n edges: collections\n // Nullable slugs may cause one route to override the other\n .filter((node) => Boolean(StoreCollection.slug(node, null, ctx, null)))\n .slice(after, first)\n .map((node, index) => ({\n node,\n cursor: index.toString(),\n })),\n }\n },\n}\n","import type { Resolver } from '..'\n\nexport const StoreReview: Record<string, Resolver> = {\n reviewRating: () => ({\n ratingValue: 5,\n bestRating: 5,\n }),\n author: () => ({\n name: '',\n }),\n}\n","import { enhanceSku } from '../utils/enhanceSku'\nimport type { Resolver } from '..'\nimport type { SearchArgs } from '../clients/search'\n\ntype Root = Omit<SearchArgs, 'type'>\n\nexport const StoreSearchResult: Record<string, Resolver<Root>> = {\n products: async (searchArgs, _, ctx) => {\n const {\n clients: { search },\n } = ctx\n\n const products = await search.products(searchArgs)\n\n const skus = products.products\n .map((product) => {\n const maybeSku = product.skus.find((x) => x.sellers.length > 0)\n\n return maybeSku && enhanceSku(maybeSku, product)\n })\n .filter((sku) => !!sku)\n\n return {\n pageInfo: {\n hasNextPage: products.pagination.after.length > 0,\n hasPreviousPage: products.pagination.before.length > 0,\n startCursor: '0',\n endCursor: products.total.toString(),\n totalCount: products.total,\n },\n edges: skus.map((sku, index) => ({\n node: sku,\n cursor: index.toString(),\n })),\n }\n },\n facets: async (searchArgs, _, ctx) => {\n const {\n clients: { search: is },\n } = ctx\n\n const facets = await is.facets(searchArgs)\n\n return facets.attributes ?? []\n },\n}\n","import type { Resolver } from '..'\n\ntype Root = { title?: string; description?: string }\n\nexport const StoreSeo: Record<string, Resolver<Root>> = {\n title: ({ title }) => title ?? '',\n description: ({ description }) => description ?? '',\n titleTemplate: () => '',\n canonical: () => '',\n}\n","import { getClients } from './clients'\nimport { getLoaders } from './loaders'\nimport { StoreAggregateOffer } from './resolvers/aggregateOffer'\nimport { StoreAggregateRating } from './resolvers/aggregateRating'\nimport { StoreCollection } from './resolvers/collection'\nimport { StoreFacet } from './resolvers/facet'\nimport { StoreFacetValue } from './resolvers/facetValue'\nimport { Mutation } from './resolvers/mutation'\nimport { StoreOffer } from './resolvers/offer'\nimport { StoreProduct } from './resolvers/product'\nimport { StoreProductGroup } from './resolvers/productGroup'\nimport { Query } from './resolvers/query'\nimport { StoreReview } from './resolvers/review'\nimport { StoreSearchResult } from './resolvers/searchResult'\nimport { StoreSeo } from './resolvers/seo'\nimport type { Loaders } from './loaders'\nimport type { Clients } from './clients'\n\nexport interface Options {\n platform: 'vtex'\n account: string\n environment: 'vtexcommercestable' | 'vtexcommercebeta'\n // Default sales channel to use for fetching products\n channel: string\n}\n\nexport interface Context {\n clients: Clients\n loaders: Loaders\n /**\n * @description Storage updated at each request.\n *\n * Use this datastructure to store and share small values in the context.\n * Use it with caution since dependecy injection leads to a more complex code\n * */\n storage: {\n channel: string\n }\n}\n\nexport type Resolver<R = unknown, A = unknown> = (\n root: R,\n args: A,\n ctx: Context,\n info: any\n) => any\n\nconst Resolvers = {\n StoreCollection,\n StoreAggregateOffer,\n StoreProduct,\n StoreSeo,\n StoreFacet,\n StoreFacetValue,\n StoreOffer,\n StoreAggregateRating,\n StoreReview,\n StoreProductGroup,\n StoreSearchResult,\n Query,\n Mutation,\n}\n\nexport const getContextFactory = (options: Options) => (ctx: any) => {\n ctx.storage = {\n channel: options.channel,\n }\n ctx.clients = getClients(options, ctx)\n ctx.loaders = getLoaders(options, ctx)\n\n return ctx\n}\n\nexport const getResolvers = (_: Options) => Resolvers\n","import { print } from 'graphql'\n\nimport AggregateOffer from './aggregateOffer.graphql'\nimport AggregateRating from './aggregateRating.graphql'\nimport Author from './author.graphql'\nimport Brand from './brand.graphql'\nimport Breadcrumb from './breadcrumb.graphql'\nimport Collection from './collection.graphql'\nimport Facet from './facet.graphql'\nimport Image from './image.graphql'\nimport Mutation from './mutation.graphql'\nimport Offer from './offer.graphql'\nimport Order from './order.graphql'\nimport Organization from './organization.graphql'\nimport PageInfo from './pageInfo.graphql'\nimport Product from './product.graphql'\nimport ProductGroup from './productGroup.graphql'\nimport Query from './query.graphql'\nimport Review from './review.graphql'\nimport Seo from './seo.graphql'\nimport Cart from './cart.graphql'\nimport Status from './status.graphql'\n\nexport const typeDefs = [\n Query,\n Mutation,\n Brand,\n Breadcrumb,\n Collection,\n Facet,\n Image,\n PageInfo,\n Product,\n Seo,\n Offer,\n AggregateRating,\n Review,\n Author,\n ProductGroup,\n Organization,\n AggregateOffer,\n Order,\n Cart,\n Status,\n]\n .map(print)\n .join('\\n')\n","import { makeExecutableSchema } from '@graphql-tools/schema'\n\nimport {\n getContextFactory as getContextFactoryVTEX,\n getResolvers as getResolversVTEX,\n} from './platforms/vtex'\nimport { typeDefs } from './typeDefs'\nimport type { Options as OptionsVTEX } from './platforms/vtex'\n\nexport * from './__generated__/schema'\n\nexport type Options = OptionsVTEX\n\nconst platforms = {\n vtex: {\n getResolvers: getResolversVTEX,\n getContextFactory: getContextFactoryVTEX,\n },\n}\n\nexport const getTypeDefs = () => typeDefs\n\nexport const getResolvers = (options: Options) =>\n platforms[options.platform].getResolvers(options)\n\nexport const getContextFactory = (options: Options) =>\n platforms[options.platform].getContextFactory(options)\n\nexport const getSchema = async (options: Options) =>\n makeExecutableSchema({\n resolvers: getResolvers(options),\n typeDefs: getTypeDefs(),\n })\n"],"names":["fetchAPI","info","init","response","fetch","ok","json","text","Error","BASE_INIT","method","headers","VtexCommerce","account","environment","ctx","base","catalog","brand","list","category","tree","depth","portal","pagetype","slug","checkout","simulation","args","salesChannel","storage","channel","params","URLSearchParams","sc","toString","body","JSON","stringify","orderForm","id","refreshOutdatedData","updateOrderFormItems","orderItems","allowOutdatedData","IntelligentSearch","policyFacet","key","value","addDefaultFacets","facets","facet","find","undefined","search","query","page","count","sort","selectedFacets","type","fuzzy","pathname","map","join","products","getClients","options","commerce","getSimulationLoader","_","clients","loader","allItems","items","flat","simulated","reduce","acc","item","index","requestIndex","length","Array","fill","itemsIndices","curr","__","slice","filter","Boolean","DataLoader","maxBatchSize","BadRequestError","constructor","message","name","NotFoundError","enhanceSku","sku","product","isVariantOf","getSkuLoader","facetsList","skuIds","maybeFacet","skuBySkuId","skus","skuId","missingSkus","getLoaders","skuLoader","simulationLoader","StoreAggregateOffer","highPrice","sellingPrice","lowPrice","offerCount","priceCurrency","offers","StoreAggregateRating","ratingValue","reviewCount","slugify","path","rawSlugify","separator","lowercase","isBrand","x","isPortalPageType","pageType","root","baseSlugify","URL","url","StoreCollection","seo","title","description","metaTagDescription","Title","MetaTagDescription","level","meta","split","segment","breadcrumbList","segments","slugs","pageTypes","Promise","all","s","itemListElement","toLowerCase","position","numberOfItems","StoreFacet","label","values","StoreFacetValue","from","to","selected","active","quantity","getId","itemOffered","seller","identifier","price","orderFormItemToOffer","listPrice","image","offerToOrderItemInput","offer","groupById","set","get","Map","equals","of1","of2","pick","orderFormId","messages","uniqueId","availability","deepEquals","validateCart","cart","order","orderNumber","acceptedOffer","loaders","browserItemsById","originItemsById","browserItems","originItems","itemsToAdd","itemsToUpdate","maybeOriginItem","push","itemsToDelete","has","changes","updatedOrderForm","load","status","toUpperCase","Mutation","StoreOffer","priceValidUntil","itemCondition","DEFAULT_IMAGE","getSlug","link","getPath","nonEmptyArray","array","isArray","StoreProduct","productID","categoryTrees","reverse","categoryNames","categoryName","images","alternateName","replace","gtin","reference","review","aggregateRating","policies","sellers","policy","sellerIds","Set","StoreProductGroup","hasVariant","productGroupID","getIdFromSlug","pop","transformSelectedFacet","SORT_MAP","price_desc","price_asc","orders_desc","name_desc","name_asc","release_desc","discount_desc","score_desc","Query","locator","collection","result","whitelist","includes","first","after","maybeAfter","term","Number","searchArgs","Math","ceil","allProducts","pageInfo","hasNextPage","pagination","hasPreviousPage","before","startCursor","endCursor","total","totalCount","edges","node","cursor","allCollections","brands","categories","dfs","child","children","collections","StoreReview","reviewRating","bestRating","author","StoreSearchResult","maybeSku","is","attributes","StoreSeo","titleTemplate","canonical","Resolvers","getContextFactory","getResolvers","typeDefs","Brand","Breadcrumb","Collection","Facet","Image","PageInfo","Product","Seo","Offer","AggregateRating","Review","Author","ProductGroup","Organization","AggregateOffer","Order","Cart","Status","print","platforms","vtex","getResolversVTEX","getContextFactoryVTEX","getTypeDefs","platform","getSchema","makeExecutableSchema","resolvers"],"mappings":";;;;;;;AAEO,MAAMA,QAAQ,GAAG,OAAOC,IAAP,EAA0BC,IAA1B;AACtB,QAAMC,QAAQ,GAAG,MAAMC,KAAK,CAACH,IAAD,EAAOC,IAAP,CAA5B;;AAEA,MAAIC,QAAQ,CAACE,EAAb,EAAiB;AACf,WAAOF,QAAQ,CAACG,IAAT,EAAP;AACD;;AAED,QAAMC,IAAI,GAAG,MAAMJ,QAAQ,CAACI,IAAT,EAAnB;AAEA,QAAM,IAAIC,KAAJ,CAAUD,IAAV,CAAN;AACD,CAVM;;ACUP,MAAME,SAAS,GAAG;AAChBC,EAAAA,MAAM,EAAE,MADQ;AAEhBC,EAAAA,OAAO,EAAE;AACP,oBAAgB;AADT;AAFO,CAAlB;AAOA,AAAO,MAAMC,YAAY,GAAG,CAC1B;AAAEC,EAAAA,OAAF;AAAWC,EAAAA;AAAX,CAD0B,EAE1BC,GAF0B;AAI1B,QAAMC,IAAI,aAAaH,WAAWC,oBAAlC;AAEA,SAAO;AACLG,IAAAA,OAAO,EAAE;AACPC,MAAAA,KAAK,EAAE;AACLC,QAAAA,IAAI,EAAE,MACJnB,QAAQ,IAAIgB,wCAAJ;AAFL,OADA;AAKPI,MAAAA,QAAQ,EAAE;AACRC,QAAAA,IAAI,EAAE,CAACC,KAAK,GAAG,CAAT,KACJtB,QAAQ,IAAIgB,6CAA6CM,OAAjD;AAFF,OALH;AASPC,MAAAA,MAAM,EAAE;AACNC,QAAAA,QAAQ,EAAGC,IAAD,IACRzB,QAAQ,IAAIgB,+CAA+CS,MAAnD;AAFJ;AATD,KADJ;AAeLC,IAAAA,QAAQ,EAAE;AACRC,MAAAA,UAAU,EAAE,CACVC,IADU,EAEV;AAAEC,QAAAA;AAAF,UAAsC;AACpCA,QAAAA,YAAY,EAAEd,GAAG,CAACe,OAAJ,CAAYC;AADU,OAF5B;AAMV,cAAMC,MAAM,GAAG,IAAIC,eAAJ,CAAoB;AACjCC,UAAAA,EAAE,EAAEL;AAD6B,SAApB,CAAf;AAIA,eAAO7B,QAAQ,IACVgB,+CAA+CgB,MAAM,CAACG,QAAP,IADrC,EAEb,EACE,GAAG1B,SADL;AAEE2B,UAAAA,IAAI,EAAEC,IAAI,CAACC,SAAL,CAAeV,IAAf;AAFR,SAFa,CAAf;AAOD,OAlBO;AAmBRW,MAAAA,SAAS,EAAE,CAAC;AACVC,QAAAA,EADU;AAEVC,QAAAA,mBAAmB,GAAG,IAFZ;AAGVZ,QAAAA,YAAY,GAAGd,GAAG,CAACe,OAAJ,CAAYC;AAHjB,OAAD;AAST,cAAMC,MAAM,GAAG,IAAIC,eAAJ,CAAoB;AACjCQ,UAAAA,mBAAmB,EAAEA,mBAAmB,CAACN,QAApB,EADY;AAEjCD,UAAAA,EAAE,EAAEL;AAF6B,SAApB,CAAf;AAKA,eAAO7B,QAAQ,IACVgB,mCAAmCwB,MAAMR,MAAM,CAACG,QAAP,IAD/B,EAEb1B,SAFa,CAAf;AAID,OArCO;AAsCRiC,MAAAA,oBAAoB,EAAE,CAAC;AACrBF,QAAAA,EADqB;AAErBG,QAAAA,UAFqB;AAGrBC,QAAAA,iBAAiB,GAAG,aAHC;AAIrBf,QAAAA,YAAY,GAAGd,GAAG,CAACe,OAAJ,CAAYC;AAJN,OAAD;AAWpB,cAAMC,MAAM,GAAG,IAAIC,eAAJ,CAAoB;AACjCW,UAAAA,iBADiC;AAEjCV,UAAAA,EAAE,EAAEL;AAF6B,SAApB,CAAf;AAKA,eAAO7B,QAAQ,IACVgB,mCAAmCwB,YAAYR,QADrC,EAEb,EACE,GAAGvB,SADL;AAEE2B,UAAAA,IAAI,EAAEC,IAAI,CAACC,SAAL,CAAe;AAAEK,YAAAA;AAAF,WAAf,CAFR;AAGEjC,UAAAA,MAAM,EAAE;AAHV,SAFa,CAAf;AAQD;AA9DO;AAfL,GAAP;AAgFD,CAtFM;;ACYA,MAAMmC,iBAAiB,GAAG,CAC/B;AAAEhC,EAAAA,OAAF;AAAWC,EAAAA;AAAX,CAD+B,EAE/BC,GAF+B;AAI/B,QAAMC,IAAI,oBAAoBF,oCAAoCD,SAAlE;AACA,QAAMiC,WAAW,GAAG;AAAEC,IAAAA,GAAG,EAAE,cAAP;AAAuBC,IAAAA,KAAK,EAAEjC,GAAG,CAACe,OAAJ,CAAYC;AAA1C,GAApB;;AAEA,QAAMkB,gBAAgB,GAAIC,MAAD;AACvB,UAAMC,KAAK,GAAGD,MAAM,CAACE,IAAP,CAAY,CAAC;AAAEL,MAAAA;AAAF,KAAD,KAAaA,GAAG,KAAKD,WAAW,CAACC,GAA7C,CAAd;;AAEA,QAAII,KAAK,KAAKE,SAAd,EAAyB;AACvB,aAAO,CAAC,GAAGH,MAAJ,EAAYJ,WAAZ,CAAP;AACD;;AAED,WAAOI,MAAP;AACD,GARD;;AAUA,QAAMI,MAAM,GAAG,CAAI;AACjBC,IAAAA,KAAK,GAAG,EADS;AAEjBC,IAAAA,IAFiB;AAGjBC,IAAAA,KAHiB;AAIjBC,IAAAA,IAAI,GAAG,EAJU;AAKjBC,IAAAA,cAAc,GAAG,EALA;AAMjBC,IAAAA,IANiB;AAOjBC,IAAAA,KAAK,GAAG;AAPS,GAAJ;AASb,UAAM7B,MAAM,GAAG,IAAIC,eAAJ,CAAoB;AACjCuB,MAAAA,IAAI,EAAE,CAACA,IAAI,GAAG,CAAR,EAAWrB,QAAX,EAD2B;AAEjCsB,MAAAA,KAAK,EAAEA,KAAK,CAACtB,QAAN,EAF0B;AAGjCoB,MAAAA,KAHiC;AAIjCG,MAAAA,IAJiC;AAKjCG,MAAAA;AALiC,KAApB,CAAf;AAQA,UAAMC,QAAQ,GAAGb,gBAAgB,CAACU,cAAD,CAAhB,CACdI,GADc,CACV,CAAC;AAAEhB,MAAAA,GAAF;AAAOC,MAAAA;AAAP,KAAD,QAAuBD,OAAOC,OADpB,EAEdgB,IAFc,CAET,GAFS,CAAjB;AAIA,WAAOhE,QAAQ,IACVgB,kBAAkB4C,QAAQE,YAAY9B,MAAM,CAACG,QAAP,IAD5B,CAAf;AAGD,GAxBD;;AA0BA,QAAM8B,QAAQ,GAAIrC,IAAD,IACf0B,MAAM,CAAsB,EAAE,GAAG1B,IAAL;AAAWgC,IAAAA,IAAI,EAAE;AAAjB,GAAtB,CADR;;AAGA,QAAMV,MAAM,GAAItB,IAAD,IACb0B,MAAM,CAAwB,EAAE,GAAG1B,IAAL;AAAWgC,IAAAA,IAAI,EAAE;AAAjB,GAAxB,CADR;;AAGA,SAAO;AACLV,IAAAA,MADK;AAELe,IAAAA;AAFK,GAAP;AAID,CArDM;;ACzBA,MAAMC,UAAU,GAAG,CAACC,OAAD,EAAmBpD,GAAnB;AACxB,QAAMuC,MAAM,GAAGT,iBAAiB,CAACsB,OAAD,EAAUpD,GAAV,CAAhC;AACA,QAAMqD,QAAQ,GAAGxD,YAAY,CAACuD,OAAD,EAAUpD,GAAV,CAA7B;AAEA,SAAO;AACLuC,IAAAA,MADK;AAELc,IAAAA;AAFK,GAAP;AAID,CARM;;ACGA,MAAMC,mBAAmB,GAAG,CAACC,CAAD,EAAaC,OAAb;AACjC,QAAMC,MAAM,GAAG,MAAOC,QAAP;AACb,UAAMC,KAAK,GAAG,CAAC,GAAGD,QAAQ,CAACE,IAAT,EAAJ,CAAd;AACA,UAAMhD,UAAU,GAAG,MAAM4C,OAAO,CAACH,QAAR,CAAiB1C,QAAjB,CAA0BC,UAA1B,CAAqC;AAC5D+C,MAAAA;AAD4D,KAArC,CAAzB;AAKA;;AACA,UAAME,SAAS,GAAGjD,UAAU,CAAC+C,KAAX,CAAiBG,MAAjB,CAAwB,CAACC,GAAD,EAAMC,IAAN;AACxC,YAAMC,KAAK,GAAGD,IAAI,CAACE,YAAnB;;AAEA,UAAI,OAAOD,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,GAAGF,GAAG,CAACI,MAA7C,EAAqD;AACnDJ,QAAAA,GAAG,CAACE,KAAD,CAAH,GAAaD,IAAb;AACD;;AAED,aAAOD,GAAP;AACD,KARiB,EAQfK,KAAK,CAACT,KAAK,CAACQ,MAAP,CAAL,CAAoBE,IAApB,CAAyB,IAAzB,CARe,CAAlB;AAUA,UAAMC,YAAY,GAAGZ,QAAQ,CAACI,MAAT,CACnB,CAACC,GAAD,EAAMQ,IAAN,KAAe,CAAC,GAAGR,GAAJ,EAASQ,IAAI,CAACJ,MAAL,GAAcJ,GAAG,CAACA,GAAG,CAACI,MAAJ,GAAa,CAAd,CAA1B,CADI,EAEnB,CAAC,CAAD,CAFmB,CAArB;AAKA,WAAOT,QAAQ,CAACV,GAAT,CAAa,CAACwB,EAAD,EAAKP,KAAL,MAAgB,EAClC,GAAGrD,UAD+B;AAElC+C,MAAAA,KAAK,EAAEE,SAAS,CACbY,KADI,CACEH,YAAY,CAACL,KAAD,CADd,EACuBK,YAAY,CAACL,KAAK,GAAG,CAAT,CADnC,EAEJS,MAFI,CAEIV,IAAD,IAAUW,OAAO,CAACX,IAAD,CAFpB;AAF2B,KAAhB,CAAb,CAAP;AAMD,GA7BD;;AA+BA,SAAO,IAAIY,UAAJ,CAA0CnB,MAA1C,EAAkD;AACvDoB,IAAAA,YAAY,EAAE;AADyC,GAAlD,CAAP;AAGD,CAnCM;;MCTMC,wBAAwBrF;AACnCsF,EAAAA,YAAYC;AACV,UAAMA,OAAN;AACA,SAAKC,IAAL,GAAY,iBAAZ;AACD;;;AAGH,MAAaC,sBAAsBzF;AACjCsF,EAAAA,YAAYC;AACV,UAAMA,OAAN;AACA,SAAKC,IAAL,GAAY,eAAZ;AACD;;;;ACPI,MAAME,UAAU,GAAG,CAACC,GAAD,EAAWC,OAAX,MAA8C,EACtE,GAAGD,GADmE;AAEtEE,EAAAA,WAAW,EAAED;AAFyD,CAA9C,CAAnB;;ACKA,MAAME,YAAY,GAAG,CAAChC,CAAD,EAAaC,OAAb;AAC1B,QAAMC,MAAM,GAAG,MAAO+B,UAAP;AACb,UAAMC,MAAM,GAAGD,UAAU,CAACxC,GAAX,CAAgBb,MAAD;AAC5B,YAAMuD,UAAU,GAAGvD,MAAM,CAACE,IAAP,CAAY,CAAC;AAAEL,QAAAA;AAAF,OAAD,KAAaA,GAAG,KAAK,IAAjC,CAAnB;;AAEA,UAAI,CAAC0D,UAAL,EAAiB;AACf,cAAM,IAAIZ,eAAJ,CACJ,iEADI,CAAN;AAGD;;AAED,aAAOY,UAAU,CAACzD,KAAlB;AACD,KAVc,CAAf;AAYA,UAAM;AAAEiB,MAAAA;AAAF,QAAe,MAAMM,OAAO,CAACjB,MAAR,CAAeW,QAAf,CAAwB;AACjDV,MAAAA,KAAK,SAASiD,MAAM,CAACxC,IAAP,CAAY,GAAZ,GADmC;AAEjDR,MAAAA,IAAI,EAAE,CAF2C;AAGjDC,MAAAA,KAAK,EAAE+C,MAAM,CAACtB;AAHmC,KAAxB,CAA3B;AAMA,UAAMwB,UAAU,GAAGzC,QAAQ,CAACY,MAAT,CAAgB,CAACC,GAAD,EAAMsB,OAAN;AACjC,WAAK,MAAMD,GAAX,IAAkBC,OAAO,CAACO,IAA1B,EAAgC;AAC9B7B,QAAAA,GAAG,CAACqB,GAAG,CAAC3D,EAAL,CAAH,GAAc0D,UAAU,CAACC,GAAD,EAAMC,OAAN,CAAxB;AACD;;AAED,aAAOtB,GAAP;AACD,KANkB,EAMhB,EANgB,CAAnB;AAQA,UAAM6B,IAAI,GAAGH,MAAM,CAACzC,GAAP,CAAY6C,KAAD,IAAWF,UAAU,CAACE,KAAD,CAAhC,CAAb;AACA,UAAMC,WAAW,GAAGF,IAAI,CAAClB,MAAL,CAAaU,GAAD,IAAS,CAACA,GAAtB,CAApB;;AAEA,QAAIU,WAAW,CAAC3B,MAAZ,GAAqB,CAAzB,EAA4B;AAC1B,YAAM,IAAI1E,KAAJ,kDAC6CqG,WAAW,CAAC7C,IAAZ,CAAiB,GAAjB,GAD7C,CAAN;AAGD;;AAED,WAAO2C,IAAP;AACD,GArCD;;AAuCA,SAAO,IAAIhB,UAAJ,CAA6CnB,MAA7C,EAAqD;AAC1DoB,IAAAA,YAAY,EAAE;AAD4C,GAArD,CAAP;AAGD,CA3CM;;ACHA,MAAMkB,UAAU,GAAG,CAAC3C,OAAD,EAAmB;AAAEI,EAAAA;AAAF,CAAnB;AACxB,QAAMwC,SAAS,GAAGT,YAAY,CAACnC,OAAD,EAAUI,OAAV,CAA9B;AACA,QAAMyC,gBAAgB,GAAG3C,mBAAmB,CAACF,OAAD,EAAUI,OAAV,CAA5C;AAEA,SAAO;AACLwC,IAAAA,SADK;AAELC,IAAAA;AAFK,GAAP;AAID,CARM;;ACDA,MAAMC,mBAAmB,GAA8B;AAC5DC,EAAAA,SAAS,EAAE,CAAC;AAAExC,IAAAA;AAAF,GAAD;AAAA;;AAAA,WACTA,KAAK,CAACG,MAAN,CACE,CAACC,GAAD,EAAMQ,IAAN,KAAgBR,GAAG,GAAGQ,IAAI,CAAC6B,YAAX,GAA0BrC,GAA1B,GAAgCQ,IAAI,CAAC6B,YADvD,sCAEEzC,KAAK,CAAC,CAAD,CAFP,qBAEE,QAAUyC,YAFZ,oCAE4B,CAF5B,IAGI,GAJK;AAAA,GADiD;AAM5DC,EAAAA,QAAQ,EAAE,CAAC;AAAE1C,IAAAA;AAAF,GAAD;AAAA;;AAAA,WACRA,KAAK,CAACG,MAAN,CACE,CAACC,GAAD,EAAMQ,IAAN,KAAgBR,GAAG,GAAGQ,IAAI,CAAC6B,YAAX,GAA0BrC,GAA1B,GAAgCQ,IAAI,CAAC6B,YADvD,wCAEEzC,KAAK,CAAC,CAAD,CAFP,qBAEE,SAAUyC,YAFZ,qCAE4B,CAF5B,IAGI,GAJI;AAAA,GANkD;AAW5DE,EAAAA,UAAU,EAAE,CAAC;AAAE3C,IAAAA;AAAF,GAAD,KAAeA,KAAK,CAACQ,MAX2B;AAY5DoC,EAAAA,aAAa,EAAE,MAAM,EAZuC;AAa5DC,EAAAA,MAAM,EAAE,CAAC;AAAE7C,IAAAA,KAAF;AAAS0B,IAAAA;AAAT,GAAD,KAAwB1B,KAAK,CAACX,GAAN,CAAWgB,IAAD,KAAW,EAAE,GAAGA,IAAL;AAAWqB,IAAAA;AAAX,GAAX,CAAV;AAb4B,CAAvD;;ACHP;AACA,AAAO,MAAMoB,oBAAoB,GAA6B;AAC5DC,EAAAA,WAAW,EAAE,MAAM,CADyC;AAE5DC,EAAAA,WAAW,EAAE,MAAM;AAFyC,CAAvD;;ACDA,MAAMC,OAAO,GAAIC,IAAD,IACrBC,UAAU,CAACD,IAAD,EAAO;AAAEE,EAAAA,SAAS,EAAE,GAAb;AAAkBC,EAAAA,SAAS,EAAE;AAA7B,CAAP,CADL;;ACMP,MAAMC,OAAO,GAAIC,CAAD,IAAwBA,CAAC,CAACrE,IAAF,KAAW,OAAnD;;AAEA,MAAMsE,gBAAgB,GAAID,CAAD,IACvB,OAAOA,CAAC,CAACE,QAAT,KAAsB,QADxB;;AAGA,MAAMR,SAAO,GAAIS,IAAD;AACd,MAAIJ,OAAO,CAACI,IAAD,CAAX,EAAmB;AACjB,WAAOC,OAAW,CAACD,IAAI,CAACpC,IAAN,CAAlB;AACD;;AAED,MAAIkC,gBAAgB,CAACE,IAAD,CAApB,EAA4B;AAC1B,WAAO,IAAIE,GAAJ,YAAmBF,IAAI,CAACG,KAAxB,EAA+BzE,QAA/B,CAAwC0B,KAAxC,CAA8C,CAA9C,CAAP;AACD;;AAED,SAAO,IAAI8C,GAAJ,CAAQF,IAAI,CAACG,GAAb,EAAkBzE,QAAlB,CAA2B0B,KAA3B,CAAiC,CAAjC,CAAP;AACD,CAVD;;AAYA,AAAO,MAAMgD,eAAe,GAAmC;AAC7DhG,EAAAA,EAAE,EAAE,CAAC;AAAEA,IAAAA;AAAF,GAAD,KAAYA,EAAE,CAACL,QAAH,EAD6C;AAE7DV,EAAAA,IAAI,EAAG2G,IAAD,IAAUT,SAAO,CAACS,IAAD,CAFsC;AAG7DK,EAAAA,GAAG,EAAGL,IAAD,IACHJ,OAAO,CAACI,IAAD,CAAP,IAAiBF,gBAAgB,CAACE,IAAD,CAAjC,GACI;AACEM,IAAAA,KAAK,EAAEN,IAAI,CAACM,KADd;AAEEC,IAAAA,WAAW,EAAEP,IAAI,CAACQ;AAFpB,GADJ,GAKI;AACEF,IAAAA,KAAK,EAAEN,IAAI,CAACS,KADd;AAEEF,IAAAA,WAAW,EAAEP,IAAI,CAACU;AAFpB,GATuD;AAa7DlF,EAAAA,IAAI,EAAGwE,IAAD,IACJJ,OAAO,CAACI,IAAD,CAAP,GACI,OADJ,GAEIF,gBAAgB,CAACE,IAAD,CAAhB,GACAA,IAAI,CAACD,QADL,GAEAC,IAAI,CAACW,KAAL,KAAe,CAAf,GACA,YADA,GAEA,UApBuD;AAqB7DC,EAAAA,IAAI,EAAGZ,IAAD,IACJJ,OAAO,CAACI,IAAD,CAAP,GACI;AACEzE,IAAAA,cAAc,EAAE,CAAC;AAAEZ,MAAAA,GAAG,EAAE,OAAP;AAAgBC,MAAAA,KAAK,EAAEqF,OAAW,CAACD,IAAI,CAACpC,IAAN;AAAlC,KAAD;AADlB,GADJ,GAII;AACErC,IAAAA,cAAc,EAAE,IAAI2E,GAAJ,CACdJ,gBAAgB,CAACE,IAAD,CAAhB,cAAoCA,IAAI,CAACG,KAAzC,GAAiDH,IAAI,CAACG,GADxC,EAEdzE,QAFc,CAGb0B,KAHa,CAGP,CAHO,EAIbyD,KAJa,CAIP,GAJO,EAKblF,GALa,CAKT,CAACmF,OAAD,EAAUlE,KAAV,MAAqB;AACxBjC,MAAAA,GAAG,cAAciC,KAAK,GAAG,GADD;AAExBhC,MAAAA,KAAK,EAAEqF,OAAW,CAACa,OAAD;AAFM,KAArB,CALS;AADlB,GA1BuD;AAqC7DC,EAAAA,cAAc,EAAE,OAAOf,IAAP,EAAa9D,CAAb,EAAgBvD,GAAhB;AACd,UAAM;AACJwD,MAAAA,OAAO,EAAE;AAAEH,QAAAA;AAAF;AADL,QAEFrD,GAFJ;AAIA,UAAMU,IAAI,GAAGkG,SAAO,CAACS,IAAD,CAApB;AAEA;;;;;;;AAMA,UAAMgB,QAAQ,GAAG3H,IAAI,CAACwH,KAAL,CAAW,GAAX,EAAgBxD,MAAhB,CAAwByD,OAAD,IAAaxD,OAAO,CAACwD,OAAD,CAA3C,CAAjB;AACA,UAAMG,KAAK,GAAGD,QAAQ,CAACrF,GAAT,CAAa,CAACwB,EAAD,EAAKP,KAAL,KACzBoE,QAAQ,CAAC5D,KAAT,CAAe,CAAf,EAAkBR,KAAK,GAAG,CAA1B,EAA6BhB,IAA7B,CAAkC,GAAlC,CADY,CAAd;AAIA,UAAMsF,SAAS,GAAG,MAAMC,OAAO,CAACC,GAAR,CACtBH,KAAK,CAACtF,GAAN,CAAW0F,CAAD,IAAOrF,QAAQ,CAACnD,OAAT,CAAiBM,MAAjB,CAAwBC,QAAxB,CAAiCiI,CAAjC,CAAjB,CADsB,CAAxB;AAIA,WAAO;AACLC,MAAAA,eAAe,EAAEJ,SAAS,CAACvF,GAAV,CAAc,CAACoE,QAAD,EAAWnD,KAAX,MAAsB;AACnDD,QAAAA,IAAI,EAAE,IAAIuD,GAAJ,YAAmBH,QAAQ,CAACI,KAA5B,EAAmCzE,QAAnC,CAA4C6F,WAA5C,EAD6C;AAEnD3D,QAAAA,IAAI,EAAEmC,QAAQ,CAACnC,IAFoC;AAGnD4D,QAAAA,QAAQ,EAAE5E,KAAK,GAAG;AAHiC,OAAtB,CAAd,CADZ;AAML6E,MAAAA,aAAa,EAAEP,SAAS,CAACpE;AANpB,KAAP;AAQD;AAnE4D,CAAxD;;ACpBA,MAAM4E,UAAU,GAAmC;AACxD/G,EAAAA,GAAG,EAAE,CAAC;AAAEA,IAAAA;AAAF,GAAD,KAAaA,GADsC;AAExDgH,EAAAA,KAAK,EAAE,CAAC;AAAEA,IAAAA;AAAF,GAAD,KAAeA,KAFkC;AAGxDC,EAAAA,MAAM,EAAE,CAAC;AAAEA,IAAAA;AAAF,GAAD,KAAgBA,MAHgC;AAIxDpG,EAAAA,IAAI,EAAE,CAAC;AAAEA,IAAAA;AAAF,GAAD,KAAeA,IAAI,KAAK,MAAT,GAAkB,SAAlB,GAA8B;AAJK,CAAnD;;ACAA,MAAMqG,eAAe,GAAmC;AAC7DjH,EAAAA,KAAK,EAAE,CAAC;AAAED,IAAAA,GAAF;AAAOmH,IAAAA,IAAP;AAAaC,IAAAA;AAAb,GAAD,KAAuBpH,GAAvB,WAAuBA,GAAvB,MAAiCmH,WAAWC,IADU;AAE7DJ,EAAAA,KAAK,EAAE,CAAC;AAAEA,IAAAA;AAAF,GAAD,KAAeA,KAAf,WAAeA,KAAf,GAAwB,SAF8B;AAG7DK,EAAAA,QAAQ,EAAE,CAAC;AAAEC,IAAAA;AAAF,GAAD,KAAgBA,MAHmC;AAI7DC,EAAAA,QAAQ,EAAE,CAAC;AAAE7G,IAAAA;AAAF,GAAD,KAAeA;AAJoC,CAAxD;;ACOP,MAAM8G,KAAK,GAAIxF,IAAD,IACZ,CAACA,IAAI,CAACyF,WAAL,CAAiBrE,GAAlB,EAAuBpB,IAAI,CAAC0F,MAAL,CAAYC,UAAnC,EAA+C3F,IAAI,CAAC4F,KAApD,EAA2D3G,IAA3D,CAAgE,IAAhE,CADF;;AAGA,MAAM4G,oBAAoB,GAAG,CAC3B7F,IAD2B,EAE3BC,KAF2B,MAGD;AAC1B6F,EAAAA,SAAS,EAAE9F,IAAI,CAAC8F,SAAL,GAAiB,GADF;AAE1BF,EAAAA,KAAK,EAAE5F,IAAI,CAACoC,YAAL,GAAoB,GAFD;AAG1BmD,EAAAA,QAAQ,EAAEvF,IAAI,CAACuF,QAHW;AAI1BG,EAAAA,MAAM,EAAE;AAAEC,IAAAA,UAAU,EAAE3F,IAAI,CAAC0F;AAAnB,GAJkB;AAK1BD,EAAAA,WAAW,EAAE;AACXrE,IAAAA,GAAG,EAAEpB,IAAI,CAACvC,EADC;AAEXsI,IAAAA,KAAK,EAAE,EAFI;AAGX9E,IAAAA,IAAI,EAAEjB,IAAI,CAACiB;AAHA,GALa;AAU1BhB,EAAAA;AAV0B,CAHC,CAA7B;;AAgBA,MAAM+F,qBAAqB,GACzBC,KAD4B,KAEJ;AACxBV,EAAAA,QAAQ,EAAEU,KAAK,CAACV,QADQ;AAExBG,EAAAA,MAAM,EAAEO,KAAK,CAACP,MAAN,CAAaC,UAFG;AAGxBlI,EAAAA,EAAE,EAAEwI,KAAK,CAACR,WAAN,CAAkBrE,GAHE;AAIxBnB,EAAAA,KAAK,EAAEgG,KAAK,CAAChG;AAJW,CAFI,CAA9B;;AASA,MAAMiG,SAAS,GAAI1D,MAAD,IAChBA,MAAM,CAAC1C,MAAP,CAAc,CAACC,GAAD,EAAMC,IAAN;;;AACZ,QAAMvC,EAAE,GAAG+H,KAAK,CAACxF,IAAD,CAAhB;AAEAD,EAAAA,GAAG,CAACoG,GAAJ,CAAQ1I,EAAR,cAAYsC,GAAG,CAACqG,GAAJ,CAAQ3I,EAAR,CAAZ,uBAA2BuC,IAA3B;AAEA,SAAOD,GAAP;AACD,CAND,EAMG,IAAIsG,GAAJ,EANH,CADF;;AASA,MAAMC,MAAM,GAAG,CAACC,GAAD,EAAiBC,GAAjB;AACb,QAAMC,IAAI,GAAG,CAAC;AAAEC,IAAAA,WAAF;AAAeC,IAAAA,QAAf;AAAyBhH,IAAAA,KAAzB;AAAgC7C,IAAAA;AAAhC,GAAD,MAAgE;AAC3E4J,IAAAA,WAD2E;AAE3EC,IAAAA,QAF2E;AAG3E7J,IAAAA,YAH2E;AAI3E6C,IAAAA,KAAK,EAAEA,KAAK,CAACX,GAAN,CACL,CAAC;AAAE4H,MAAAA,QAAF;AAAYrB,MAAAA,QAAZ;AAAsBG,MAAAA,MAAtB;AAA8BtD,MAAAA,YAA9B;AAA4CyE,MAAAA;AAA5C,KAAD,MAAiE;AAC/DD,MAAAA,QAD+D;AAE/DrB,MAAAA,QAF+D;AAG/DG,MAAAA,MAH+D;AAI/DtD,MAAAA,YAJ+D;AAK/DyE,MAAAA;AAL+D,KAAjE,CADK;AAJoE,GAAhE,CAAb;;AAeA,SAAOC,UAAU,CAACL,IAAI,CAACF,GAAD,CAAL,EAAYE,IAAI,CAACD,GAAD,CAAhB,CAAjB;AACD,CAjBD;AAmBA;;;;;;;;;;;;;;;AAaA,AAAO,MAAMO,YAAY,GAAG,OAC1BxH,CAD0B,EAE1B;AACEyH,EAAAA,IAAI,EAAE;AACJC,IAAAA,KAAK,EAAE;AAAEC,MAAAA,WAAF;AAAeC,MAAAA;AAAf;AADH;AADR,CAF0B,EAO1BnL,GAP0B;AAS1B,QAAM;AACJwD,IAAAA,OAAO,EAAE;AAAEH,MAAAA;AAAF,KADL;AAEJ+H,IAAAA,OAAO,EAAE;AAAEpF,MAAAA;AAAF;AAFL,MAGFhG,GAHJ;;AAMA,QAAMwB,SAAS,GAAG,MAAM6B,QAAQ,CAAC1C,QAAT,CAAkBa,SAAlB,CAA4B;AAClDC,IAAAA,EAAE,EAAEyJ;AAD8C,GAA5B,CAAxB;;AAKA,QAAMG,gBAAgB,GAAGnB,SAAS,CAACiB,aAAD,CAAlC;AACA,QAAMG,eAAe,GAAGpB,SAAS,CAAC1I,SAAS,CAACmC,KAAV,CAAgBX,GAAhB,CAAoB6G,oBAApB,CAAD,CAAjC;AACA,QAAM0B,YAAY,GAAGnH,KAAK,CAAC+E,IAAN,CAAWkC,gBAAgB,CAACpC,MAAjB,EAAX,CAArB;;AACA,QAAMuC,WAAW,GAAGpH,KAAK,CAAC+E,IAAN,CAAWmC,eAAe,CAACrC,MAAhB,EAAX,CAApB;AAEA;;AACA,QAAM;AAAEwC,IAAAA,UAAF;AAAcC,IAAAA;AAAd,MAAgCH,YAAY,CAACzH,MAAb,CACpC,CAACC,GAAD,EAAMC,IAAN;AACE,UAAM2H,eAAe,GAAGL,eAAe,CAAClB,GAAhB,CAAoBZ,KAAK,CAACxF,IAAD,CAAzB,CAAxB;;AAEA,QAAI,CAAC2H,eAAL,EAAsB;AACpB5H,MAAAA,GAAG,CAAC0H,UAAJ,CAAeG,IAAf,CAAoB5H,IAApB;AACD,KAFD,MAEO;AACLD,MAAAA,GAAG,CAAC2H,aAAJ,CAAkBE,IAAlB,CAAuB,EACrB,GAAGD,eADkB;AAErBpC,QAAAA,QAAQ,EAAEvF,IAAI,CAACuF;AAFM,OAAvB;AAID;;AAED,WAAOxF,GAAP;AACD,GAdmC,EAepC;AACE0H,IAAAA,UAAU,EAAE,EADd;AAEEC,IAAAA,aAAa,EAAE;AAFjB,GAfoC,CAAtC;AAqBA,QAAMG,aAAa,GAAGL,WAAW,CAC9B9G,MADmB,CACXV,IAAD,IAAU,CAACqH,gBAAgB,CAACS,GAAjB,CAAqBtC,KAAK,CAACxF,IAAD,CAA1B,CADC,EAEnBhB,GAFmB,CAEdgB,IAAD,KAAW,EAAE,GAAGA,IAAL;AAAWuF,IAAAA,QAAQ,EAAE;AAArB,GAAX,CAFe,CAAtB;AAIA,QAAMwC,OAAO,GAAG,CAAC,GAAGN,UAAJ,EAAgB,GAAGC,aAAnB,EAAkC,GAAGG,aAArC,EAAoD7I,GAApD,CACdgH,qBADc,CAAhB;;AAIA,MAAI+B,OAAO,CAAC5H,MAAR,KAAmB,CAAvB,EAA0B;AACxB,WAAO,IAAP;AACD;;;AAGD,QAAM6H,gBAAgB,GAAG,MAAM3I,QAAQ,CAAC1C,QAAT,CAAkBgB,oBAAlB,CAAuC;AACpEF,IAAAA,EAAE,EAAED,SAAS,CAACkJ,WADsD;AAEpE9I,IAAAA,UAAU,EAAEmK;AAFwD,GAAvC,CAA/B;;AAMA,MAAIzB,MAAM,CAAC9I,SAAD,EAAYwK,gBAAZ,CAAV,EAAyC;AACvC,WAAO,IAAP;AACD;;;AAGD,SAAO;AACLf,IAAAA,KAAK,EAAE;AACLC,MAAAA,WAAW,EAAEc,gBAAgB,CAACtB,WADzB;AAELS,MAAAA,aAAa,EAAEa,gBAAgB,CAACrI,KAAjB,CAAuBX,GAAvB,CAA4BgB,IAAD,KAAW,EACnD,GAAGA,IADgD;AAEnDqB,QAAAA,OAAO,EAAEW,SAAS,CAACiG,IAAV,CAAe,CAAC;AAAEjK,UAAAA,GAAG,EAAE,IAAP;AAAaC,UAAAA,KAAK,EAAE+B,IAAI,CAACvC;AAAzB,SAAD,CAAf;AAF0C,OAAX,CAA3B;AAFV,KADF;AAQLkJ,IAAAA,QAAQ,EAAEqB,gBAAgB,CAACrB,QAAjB,CAA0B3H,GAA1B,CAA8B,CAAC;AAAExD,MAAAA,IAAF;AAAQ0M,MAAAA;AAAR,KAAD,MAAuB;AAC7D1M,MAAAA,IAD6D;AAE7D0M,MAAAA,MAAM,EAAEA,MAAM,CAACC,WAAP;AAFqD,KAAvB,CAA9B;AARL,GAAP;AAaD,CApFM;;AC/EA,MAAMC,QAAQ,GAAG;AACtBrB,EAAAA;AADsB,CAAjB;;ACOA,MAAMsB,UAAU,GAAmC;AACxD9F,EAAAA,aAAa,EAAE,MAAM,EADmC;AAExD+F,EAAAA,eAAe,EAAE,CAAC;AAAEA,IAAAA;AAAF,GAAD,KAAyBA,eAAzB,WAAyBA,eAAzB,GAA4C,EAFL;AAGxDC,EAAAA,aAAa,EAAE,MAAM,iCAHmC;AAIxD1B,EAAAA,YAAY,EAAE,CAAC;AAAEA,IAAAA;AAAF,GAAD,KACZA,YAAY,KAAK,WAAjB,GACI,4BADJ,GAEI,+BAPkD;AAQxDnB,EAAAA,MAAM,EAAE,CAAC;AAAEA,IAAAA;AAAF,GAAD,MAAiB;AACvBC,IAAAA,UAAU,EAAED;AADW,GAAjB,CARgD;AAWxDE,EAAAA,KAAK,EAAE,CAAC;AAAExD,IAAAA;AAAF,GAAD,KAAsBA,YAAY,GAAG,GAXY;AAYxDA,EAAAA,YAAY,EAAE,CAAC;AAAEA,IAAAA;AAAF,GAAD,KAAsBA,YAAY,GAAG,GAZK;AAaxD0D,EAAAA,SAAS,EAAE,CAAC;AAAEA,IAAAA;AAAF,GAAD,KAAmBA,SAAS,GAAG,GAbc;AAcxDL,EAAAA,WAAW,EAAE,CAAC;AAAEpE,IAAAA;AAAF,GAAD,KAAiBA,OAd0B;AAexDkE,EAAAA,QAAQ,EAAE,CAAC;AAAEA,IAAAA;AAAF,GAAD,KAAkBA;AAf4B,CAAnD;;ACHP,MAAMiD,aAAa,GAAG;AACpBvH,EAAAA,IAAI,EAAE,OADc;AAEpBhD,EAAAA,KAAK,EACH;AAHkB,CAAtB;;AAMA,MAAMwK,OAAO,GAAG,CAACC,IAAD,EAAejL,EAAf,QAAiCiL,QAAQjL,IAAzD;;AACA,MAAMkL,OAAO,GAAG,CAACD,IAAD,EAAejL,EAAf,SAAkCgL,OAAO,CAACC,IAAD,EAAOjL,EAAP,KAAzD;;AACA,MAAMmL,aAAa,GAAOC,KAAJ,IACpBzI,KAAK,CAAC0I,OAAN,CAAcD,KAAd,KAAwBA,KAAK,CAAC1I,MAAN,GAAe,CAAvC,GAA2C0I,KAA3C,GAAmD,IADrD;;AAGA,AAAO,MAAME,YAAY,GAAmC;AAC1DC,EAAAA,SAAS,EAAE,CAAC;AAAEvL,IAAAA;AAAF,GAAD,KAAYA,EADmC;AAE1DwD,EAAAA,IAAI,EAAE,CAAC;AAAEK,IAAAA,WAAF;AAAeL,IAAAA;AAAf,GAAD,KAA2BA,IAA3B,WAA2BA,IAA3B,GAAmCK,WAAW,CAACL,IAFK;AAG1DvE,EAAAA,IAAI,EAAE,CAAC;AAAE4E,IAAAA,WAAW,EAAE;AAAEoH,MAAAA;AAAF,KAAf;AAAyBjL,IAAAA;AAAzB,GAAD,KAAmCgL,OAAO,CAACC,IAAD,EAAOjL,EAAP,CAHU;AAI1DmG,EAAAA,WAAW,EAAE,CAAC;AAAEtC,IAAAA,WAAW,EAAE;AAAEsC,MAAAA;AAAF;AAAf,GAAD,KAAsCA,WAJO;AAK1DF,EAAAA,GAAG,EAAE,CAAC;AAAEpC,IAAAA,WAAW,EAAE;AAAEL,MAAAA,IAAF;AAAQ2C,MAAAA;AAAR;AAAf,GAAD,MAA6C;AAChDD,IAAAA,KAAK,EAAE1C,IADyC;AAEhD2C,IAAAA;AAFgD,GAA7C,CALqD;AAS1DzH,EAAAA,KAAK,EAAE,CAAC;AAAEmF,IAAAA,WAAW,EAAE;AAAEnF,MAAAA;AAAF;AAAf,GAAD,MAAiC;AAAE8E,IAAAA,IAAI,EAAE9E;AAAR,GAAjC,CATmD;AAU1DiI,EAAAA,cAAc,EAAE,CAAC;AAAE9C,IAAAA,WAAW,EAAE;AAAE2H,MAAAA,aAAF;AAAiBhI,MAAAA,IAAjB;AAAuByH,MAAAA;AAAvB,KAAf;AAA8CjL,IAAAA;AAA9C,GAAD,MAAyD;AACvEkH,IAAAA,eAAe,EAAE,CACf,GAAGsE,aAAa,CAACC,OAAd,GAAwBlK,GAAxB,CAA4B,CAAC;AAAEmK,MAAAA;AAAF,KAAD,EAAoBlJ,KAApB,MAA+B;AAC5DgB,MAAAA,IAAI,EAAEkI,aAAa,CAACA,aAAa,CAAChJ,MAAd,GAAuB,CAAxB,CADyC;AAE5DH,MAAAA,IAAI,MAAMmJ,aAAa,CACpBnK,GADO,CACFoK,YAAD,IAAkBxG,OAAO,CAACwG,YAAD,CADtB,EAEPnK,IAFO,CAEF,GAFE,GAFkD;AAK5D4F,MAAAA,QAAQ,EAAE5E,KAAK,GAAG;AAL0C,KAA/B,CAA5B,CADY,EAQf;AACEgB,MAAAA,IADF;AAEEjB,MAAAA,IAAI,EAAE2I,OAAO,CAACD,IAAD,EAAOjL,EAAP,CAFf;AAGEoH,MAAAA,QAAQ,EAAEoE,aAAa,CAAC9I,MAAd,GAAuB;AAHnC,KARe,CADsD;AAevE2E,IAAAA,aAAa,EAAEmE,aAAa,CAAC9I;AAf0C,GAAzD,CAV0C;AA2B1D4F,EAAAA,KAAK,EAAE,CAAC;AAAEzE,IAAAA,WAAF;AAAe+H,IAAAA;AAAf,GAAD;AAAA;;AAAA,WACL,2BACET,aAAa,CAACS,MAAD,CADf,6BAEET,aAAa,CAACtH,WAAW,CAAC+H,MAAb,CAFf,mBAEuC,CAACb,aAAD,CAFvC,EAGExJ,GAHF,CAGM,CAAC;AAAEiC,MAAAA,IAAF;AAAQhD,MAAAA;AAAR,KAAD,MAAsB;AAC1BqL,MAAAA,aAAa,EAAErI,IAAF,WAAEA,IAAF,GAAU,EADG;AAE1BuC,MAAAA,GAAG,EAAEvF,KAAK,CAACsL,OAAN,CAAc,gBAAd,EAAgC,gBAAhC;AAFqB,KAAtB,CAHN,CADK;AAAA,GA3BmD;AAmC1DnI,EAAAA,GAAG,EAAE,CAAC;AACJE,IAAAA,WAAW,EAAE;AACXM,MAAAA,IAAI,EAAE,CAACR,GAAD;AADK;AADT,GAAD,KAICA,GAAG,CAAC3D,EAvCgD;AAwC1D+L,EAAAA,IAAI,EAAE,CAAC;AAAEC,IAAAA;AAAF,GAAD,KAAmBA,SAAnB,WAAmBA,SAAnB,GAAgC,EAxCoB;AAyC1DC,EAAAA,MAAM,EAAE,MAAM,EAzC4C;AA0C1DC,EAAAA,eAAe,EAAE,OAAO,EAAP,CA1CyC;AA2C1DnH,EAAAA,MAAM,EAAE,OAAOnB,OAAP,EAAgB9B,CAAhB,EAAmBvD,GAAnB;;;AACN,UAAM;AACJoL,MAAAA,OAAO,EAAE;AAAEnF,QAAAA;AAAF,OADL;AAEJlF,MAAAA,OAAO,EAAE;AAAEC,QAAAA;AAAF;AAFL,QAGFhB,GAHJ;AAKA,UAAM;AAAEyB,MAAAA,EAAF;AAAMmM,MAAAA;AAAN,QAAmBvI,OAAzB;AACA,UAAMwI,OAAO,qBAAGD,QAAQ,CAACvL,IAAT,CAAeyL,MAAD,IAAYA,MAAM,CAACrM,EAAP,KAAcT,OAAxC,CAAH,qBAAG,eAAkD6M,OAAlE;;AAEA,QAAIA,OAAO,IAAI,IAAf,EAAqB;AACnB;AACA;AACA,YAAM,IAAIpO,KAAJ,oBACegC,iCAAiCT,UADhD,CAAN;AAGD;;;AAGD,UAAM+M,SAAS,GAAGF,OAAO,CAAC7K,GAAR,CAAa0G,MAAD,IAAYA,MAAM,CAACjI,EAA/B,CAAlB;AACA,UAAMkC,KAAK,GAAGS,KAAK,CAAC+E,IAAN,CAAW,IAAI6E,GAAJ,CAAQD,SAAR,CAAX,EAA+B/K,GAA/B,CAAoC0G,MAAD,KAAa;AAC5DH,MAAAA,QAAQ,EAAE,CADkD;AAE5DG,MAAAA,MAF4D;AAG5DjI,MAAAA;AAH4D,KAAb,CAAnC,CAAd;AAMA,UAAMb,UAAU,GAAG,MAAMqF,gBAAgB,CAACgG,IAAjB,CAAsBtI,KAAtB,CAAzB;AAEA,WAAO,EAAE,GAAG/C,UAAL;AAAiByE,MAAAA;AAAjB,KAAP;AACD,GAvEyD;AAwE1DC,EAAAA,WAAW,EAAE,CAAC;AAAEA,IAAAA;AAAF,GAAD,KAAqBA;AAxEwB,CAArD;;ACbA,MAAM2I,iBAAiB,GAAsC;AAClEC,EAAAA,UAAU,EAAG7G,IAAD,IAAUA,IAAI,CAACzB,IAAL,CAAU5C,GAAV,CAAeoC,GAAD,IAASD,UAAU,CAACC,GAAD,EAAMiC,IAAN,CAAjC,CAD4C;AAElE8G,EAAAA,cAAc,EAAE,CAAC;AAAE9I,IAAAA;AAAF,GAAD,KAAiBA,OAFiC;AAGlEJ,EAAAA,IAAI,EAAE,CAAC;AAAEA,IAAAA;AAAF,GAAD,KAAcA;AAH8C,CAA7D;;ACGP,MAAMmJ,aAAa,GAAI1N,IAAD;AACpB,QAAMe,EAAE,GAAGf,IAAI,CAACwH,KAAL,CAAW,GAAX,EAAgBmG,GAAhB,EAAX;;AAEA,MAAI5M,EAAE,IAAI,IAAV,EAAgB;AACd,UAAM,IAAIqD,eAAJ,CAAoB,iDAApB,CAAN;AACD;;AAED,SAAOrD,EAAP;AACD,CARD;AAUA;;;;;;AAIA,AAAO,MAAM6M,sBAAsB,GAAG,CAAC;AAAEtM,EAAAA,GAAF;AAAOC,EAAAA;AAAP,CAAD;AACpC,UAAQD,GAAR;AACE,SAAK,SAAL;AACE,aAAO;AAAEA,QAAAA,GAAG,EAAE,cAAP;AAAuBC,QAAAA;AAAvB,OAAP;;AAEF,SAAK,MAAL;AACE,aAAO;AAAED,QAAAA,GAAG,EAAE,IAAP;AAAaC,QAAAA,KAAK,EAAEmM,aAAa,CAACnM,KAAD;AAAjC,OAAP;;AAEF;AACE,aAAO;AAAED,QAAAA,GAAF;AAAOC,QAAAA;AAAP,OAAP;AARJ;AAUD,CAXM;;ACrBA,MAAMsM,QAAQ,GAAG;AACtBC,EAAAA,UAAU,EAAE,YADU;AAEtBC,EAAAA,SAAS,EAAE,WAFW;AAGtBC,EAAAA,WAAW,EAAE,aAHS;AAItBC,EAAAA,SAAS,EAAE,WAJW;AAKtBC,EAAAA,QAAQ,EAAE,UALY;AAMtBC,EAAAA,YAAY,EAAE,cANQ;AAOtBC,EAAAA,aAAa,EAAE,eAPO;AAQtBC,EAAAA,UAAU,EAAE;AARU,CAAjB;;ACeA,MAAMC,KAAK,GAAG;AACnB3J,EAAAA,OAAO,EAAE,OAAO9B,CAAP,EAAmB;AAAE0L,IAAAA;AAAF,GAAnB,EAAkDjP,GAAlD;;;AACP;AACAA,IAAAA,GAAG,CAACe,OAAJ,GAAc,EACZ,GAAGf,GAAG,CAACe,OADK;AAEZC,MAAAA,OAAO,0CACLiO,OAAO,CAAC5M,IAAR,CAAcD,KAAD,IAAWA,KAAK,CAACJ,GAAN,KAAc,SAAtC,CADK,qBACL,cAAkDC,KAD7C,kCAELjC,GAAG,CAACe,OAAJ,CAAYC;AAJF,KAAd;AAOA,UAAM;AACJoK,MAAAA,OAAO,EAAE;AAAEpF,QAAAA;AAAF;AADL,QAEFhG,GAFJ;AAIA,WAAOgG,SAAS,CAACiG,IAAV,CAAegD,OAAO,CAACjM,GAAR,CAAYsL,sBAAZ,CAAf,CAAP;AACD,GAfkB;AAgBnBY,EAAAA,UAAU,EAAE,OACV3L,CADU,EAEV;AAAE7C,IAAAA;AAAF,GAFU,EAGVV,GAHU;AAKV,UAAM;AACJwD,MAAAA,OAAO,EAAE;AAAEH,QAAAA;AAAF;AADL,QAEFrD,GAFJ;AAIA,UAAMmP,MAAM,GAAG,MAAM9L,QAAQ,CAACnD,OAAT,CAAiBM,MAAjB,CAAwBC,QAAxB,CAAiCC,IAAjC,CAArB;AAEA,UAAM0O,SAAS,GAAG,CAAC,OAAD,EAAU,UAAV,EAAsB,YAAtB,EAAoC,aAApC,CAAlB;;AAEA,QAAIA,SAAS,CAACC,QAAV,CAAmBF,MAAM,CAAC/H,QAA1B,CAAJ,EAAyC;AACvC,aAAO+H,MAAP;AACD;;AAED,UAAM,IAAIjK,aAAJ,eAAgCxE,MAAhC,CAAN;AACD,GAlCkB;AAmCnB6B,EAAAA,MAAM,EAAE,OACNgB,CADM,EAEN;AAAE+L,IAAAA,KAAF;AAASC,IAAAA,KAAK,EAAEC,UAAhB;AAA4B7M,IAAAA,IAA5B;AAAkC8M,IAAAA,IAAlC;AAAwC7M,IAAAA;AAAxC,GAFM,EAGN5C,GAHM;;;AAKN;AACAA,IAAAA,GAAG,CAACe,OAAJ,GAAc,EACZ,GAAGf,GAAG,CAACe,OADK;AAEZC,MAAAA,OAAO,2BACL4B,cADK,4CACLA,cAAc,CAAEP,IAAhB,CAAsBD,KAAD,IAAWA,KAAK,CAACJ,GAAN,KAAc,SAA9C,CADK,qBACL,qBAA0DC,KADrD,oCAELjC,GAAG,CAACe,OAAJ,CAAYC;AAJF,KAAd;AAOA,UAAMuO,KAAK,GAAGC,UAAU,GAAGE,MAAM,CAACF,UAAD,CAAT,GAAwB,CAAhD;AACA,UAAMG,UAAU,GAAG;AACjBlN,MAAAA,IAAI,EAAEmN,IAAI,CAACC,IAAL,CAAUN,KAAK,GAAGD,KAAlB,CADW;AAEjB5M,MAAAA,KAAK,EAAE4M,KAFU;AAGjB9M,MAAAA,KAAK,EAAEiN,IAHU;AAIjB9M,MAAAA,IAAI,EAAE4L,QAAQ,CAAC5L,IAAD,WAACA,IAAD,GAAS,YAAT,CAJG;AAKjBC,MAAAA,cAAc,yBAAEA,cAAF,oBAAEA,cAAc,CAAEI,GAAhB,CAAoBsL,sBAApB,CAAF,kCAAiD;AAL9C,KAAnB;AAQA,WAAOqB,UAAP;AACD,GA1DkB;AA2DnBG,EAAAA,WAAW,EAAE,OACXvM,CADW,EAEX;AAAE+L,IAAAA,KAAF;AAASC,IAAAA,KAAK,EAAEC;AAAhB,GAFW,EAGXxP,GAHW;AAKX,UAAM;AACJwD,MAAAA,OAAO,EAAE;AAAEjB,QAAAA;AAAF;AADL,QAEFvC,GAFJ;AAIA,UAAMuP,KAAK,GAAGC,UAAU,GAAGE,MAAM,CAACF,UAAD,CAAT,GAAwB,CAAhD;AACA,UAAMtM,QAAQ,GAAG,MAAMX,MAAM,CAACW,QAAP,CAAgB;AACrCT,MAAAA,IAAI,EAAEmN,IAAI,CAACC,IAAL,CAAUN,KAAK,GAAGD,KAAlB,CAD+B;AAErC5M,MAAAA,KAAK,EAAE4M;AAF8B,KAAhB,CAAvB;AAKA,UAAM1J,IAAI,GAAG1C,QAAQ,CAACA,QAAT,CACVF,GADU,CACLqC,OAAD,IAAaA,OAAO,CAACO,IAAR,CAAa5C,GAAb,CAAkBoC,GAAD,IAASD,UAAU,CAACC,GAAD,EAAMC,OAAN,CAApC,CADP,EAEVzB,IAFU,GAGVc,MAHU,CAGFU,GAAD,IAASA,GAAG,CAACyI,OAAJ,CAAY1J,MAAZ,GAAqB,CAH3B,CAAb;AAKA,WAAO;AACL4L,MAAAA,QAAQ,EAAE;AACRC,QAAAA,WAAW,EAAE9M,QAAQ,CAAC+M,UAAT,CAAoBV,KAApB,CAA0BpL,MAA1B,GAAmC,CADxC;AAER+L,QAAAA,eAAe,EAAEhN,QAAQ,CAAC+M,UAAT,CAAoBE,MAApB,CAA2BhM,MAA3B,GAAoC,CAF7C;AAGRiM,QAAAA,WAAW,EAAE,GAHL;AAIRC,QAAAA,SAAS,EAAEnN,QAAQ,CAACoN,KAAT,CAAelP,QAAf,EAJH;AAKRmP,QAAAA,UAAU,EAAErN,QAAQ,CAACoN;AALb,OADL;AAQLE,MAAAA,KAAK,EAAE5K,IAAI,CAAC5C,GAAL,CAAS,CAACoC,GAAD,EAAMnB,KAAN,MAAiB;AAC/BwM,QAAAA,IAAI,EAAErL,GADyB;AAE/BsL,QAAAA,MAAM,EAAE,CAACnB,KAAK,GAAGtL,KAAT,EAAgB7C,QAAhB;AAFuB,OAAjB,CAAT;AARF,KAAP;AAaD,GA5FkB;AA6FnBuP,EAAAA,cAAc,EAAE,OACdpN,CADc,EAEd;AAAE+L,IAAAA,KAAF;AAASC,IAAAA,KAAK,EAAEC;AAAhB,GAFc,EAGdxP,GAHc;AAKd,UAAM;AACJwD,MAAAA,OAAO,EAAE;AAAEH,QAAAA;AAAF;AADL,QAEFrD,GAFJ;AAIA,UAAMuP,KAAK,GAAGC,UAAU,GAAGE,MAAM,CAACF,UAAD,CAAT,GAAwB,CAAhD;AAEA,UAAM,CAACoB,MAAD,EAAStQ,IAAT,IAAiB,MAAMkI,OAAO,CAACC,GAAR,CAAY,CACvCpF,QAAQ,CAACnD,OAAT,CAAiBC,KAAjB,CAAuBC,IAAvB,EADuC,EAEvCiD,QAAQ,CAACnD,OAAT,CAAiBG,QAAjB,CAA0BC,IAA1B,EAFuC,CAAZ,CAA7B;AAKA,UAAMuQ,UAAU,GAA4C,EAA5D;;AACA,UAAMC,GAAG,GAAG,CAACL,IAAD,EAAqBzI,KAArB;AACV6I,MAAAA,UAAU,CAACjF,IAAX,CAAgB,EAAE,GAAG6E,IAAL;AAAWzI,QAAAA;AAAX,OAAhB;;AAEA,WAAK,MAAM+I,KAAX,IAAoBN,IAAI,CAACO,QAAzB,EAAmC;AACjCF,QAAAA,GAAG,CAACC,KAAD,EAAQ/I,KAAK,GAAG,CAAhB,CAAH;AACD;AACF,KAND;;AAQA,SAAK,MAAMyI,IAAX,IAAmBnQ,IAAnB,EAAyB;AACvBwQ,MAAAA,GAAG,CAACL,IAAD,EAAO,CAAP,CAAH;AACD;;AAED,UAAMQ,WAAW,GAAG,CAClB,GAAGL,MAAM,CAAC5N,GAAP,CAAYkE,CAAD,KAAQ,EAAE,GAAGA,CAAL;AAAQrE,MAAAA,IAAI,EAAE;AAAd,KAAR,CAAX,CADe,EAElB,GAAGgO,UAFe,CAApB;AAKA,WAAO;AACLd,MAAAA,QAAQ,EAAE;AACRC,QAAAA,WAAW,EAAE,KADL;AAERE,QAAAA,eAAe,EAAE,KAFT;AAGRE,QAAAA,WAAW,EAAE,GAHL;AAIRC,QAAAA,SAAS,EAAE;AAJH,OADL;AAOLG,MAAAA,KAAK,EAAES,WAAW;AAAA,OAEfvM,MAFI,CAEI+L,IAAD,IAAU9L,OAAO,CAAC8C,eAAe,CAAC/G,IAAhB,CAAqB+P,IAArB,EAA2B,IAA3B,EAAiCzQ,GAAjC,EAAsC,IAAtC,CAAD,CAFpB,EAGJyE,KAHI,CAGE8K,KAHF,EAGSD,KAHT,EAIJtM,GAJI,CAIA,CAACyN,IAAD,EAAOxM,KAAP,MAAkB;AACrBwM,QAAAA,IADqB;AAErBC,QAAAA,MAAM,EAAEzM,KAAK,CAAC7C,QAAN;AAFa,OAAlB,CAJA;AAPF,KAAP;AAgBD;AA/IkB,CAAd;;ACbA,MAAM8P,WAAW,GAA6B;AACnDC,EAAAA,YAAY,EAAE,OAAO;AACnBzK,IAAAA,WAAW,EAAE,CADM;AAEnB0K,IAAAA,UAAU,EAAE;AAFO,GAAP,CADqC;AAKnDC,EAAAA,MAAM,EAAE,OAAO;AACbpM,IAAAA,IAAI,EAAE;AADO,GAAP;AAL2C,CAA9C;;ACIA,MAAMqM,iBAAiB,GAAmC;AAC/DpO,EAAAA,QAAQ,EAAE,OAAOyM,UAAP,EAAmBpM,CAAnB,EAAsBvD,GAAtB;AACR,UAAM;AACJwD,MAAAA,OAAO,EAAE;AAAEjB,QAAAA;AAAF;AADL,QAEFvC,GAFJ;AAIA,UAAMkD,QAAQ,GAAG,MAAMX,MAAM,CAACW,QAAP,CAAgByM,UAAhB,CAAvB;AAEA,UAAM/J,IAAI,GAAG1C,QAAQ,CAACA,QAAT,CACVF,GADU,CACLqC,OAAD;AACH,YAAMkM,QAAQ,GAAGlM,OAAO,CAACO,IAAR,CAAavD,IAAb,CAAmB6E,CAAD,IAAOA,CAAC,CAAC2G,OAAF,CAAU1J,MAAV,GAAmB,CAA5C,CAAjB;AAEA,aAAOoN,QAAQ,IAAIpM,UAAU,CAACoM,QAAD,EAAWlM,OAAX,CAA7B;AACD,KALU,EAMVX,MANU,CAMFU,GAAD,IAAS,CAAC,CAACA,GANR,CAAb;AAQA,WAAO;AACL2K,MAAAA,QAAQ,EAAE;AACRC,QAAAA,WAAW,EAAE9M,QAAQ,CAAC+M,UAAT,CAAoBV,KAApB,CAA0BpL,MAA1B,GAAmC,CADxC;AAER+L,QAAAA,eAAe,EAAEhN,QAAQ,CAAC+M,UAAT,CAAoBE,MAApB,CAA2BhM,MAA3B,GAAoC,CAF7C;AAGRiM,QAAAA,WAAW,EAAE,GAHL;AAIRC,QAAAA,SAAS,EAAEnN,QAAQ,CAACoN,KAAT,CAAelP,QAAf,EAJH;AAKRmP,QAAAA,UAAU,EAAErN,QAAQ,CAACoN;AALb,OADL;AAQLE,MAAAA,KAAK,EAAE5K,IAAI,CAAC5C,GAAL,CAAS,CAACoC,GAAD,EAAMnB,KAAN,MAAiB;AAC/BwM,QAAAA,IAAI,EAAErL,GADyB;AAE/BsL,QAAAA,MAAM,EAAEzM,KAAK,CAAC7C,QAAN;AAFuB,OAAjB,CAAT;AARF,KAAP;AAaD,GA7B8D;AA8B/De,EAAAA,MAAM,EAAE,OAAOwN,UAAP,EAAmBpM,CAAnB,EAAsBvD,GAAtB;;;AACN,UAAM;AACJwD,MAAAA,OAAO,EAAE;AAAEjB,QAAAA,MAAM,EAAEiP;AAAV;AADL,QAEFxR,GAFJ;AAIA,UAAMmC,MAAM,GAAG,MAAMqP,EAAE,CAACrP,MAAH,CAAUwN,UAAV,CAArB;AAEA,iCAAOxN,MAAM,CAACsP,UAAd,iCAA4B,EAA5B;AACD;AAtC8D,CAA1D;;ACFA,MAAMC,QAAQ,GAAmC;AACtD/J,EAAAA,KAAK,EAAE,CAAC;AAAEA,IAAAA;AAAF,GAAD,KAAeA,KAAf,WAAeA,KAAf,GAAwB,EADuB;AAEtDC,EAAAA,WAAW,EAAE,CAAC;AAAEA,IAAAA;AAAF,GAAD,KAAqBA,WAArB,WAAqBA,WAArB,GAAoC,EAFK;AAGtD+J,EAAAA,aAAa,EAAE,MAAM,EAHiC;AAItDC,EAAAA,SAAS,EAAE,MAAM;AAJqC,CAAjD;;AC2CP,MAAMC,SAAS,GAAG;AAChBpK,EAAAA,eADgB;AAEhBvB,EAAAA,mBAFgB;AAGhB6G,EAAAA,YAHgB;AAIhB2E,EAAAA,QAJgB;AAKhB3I,EAAAA,UALgB;AAMhBG,EAAAA,eANgB;AAOhBmD,EAAAA,UAPgB;AAQhB5F,EAAAA,oBARgB;AAShByK,EAAAA,WATgB;AAUhBjD,EAAAA,iBAVgB;AAWhBqD,EAAAA,iBAXgB;AAYhBtC,EAAAA,KAZgB;AAahB5C,EAAAA;AAbgB,CAAlB;AAgBA,AAAO,MAAM0F,iBAAiB,GAAI1O,OAAD,IAAuBpD,GAAD;AACrDA,EAAAA,GAAG,CAACe,OAAJ,GAAc;AACZC,IAAAA,OAAO,EAAEoC,OAAO,CAACpC;AADL,GAAd;AAGAhB,EAAAA,GAAG,CAACwD,OAAJ,GAAcL,UAAU,CAACC,OAAD,EAAUpD,GAAV,CAAxB;AACAA,EAAAA,GAAG,CAACoL,OAAJ,GAAcrF,UAAU,CAAC3C,OAAD,EAAUpD,GAAV,CAAxB;AAEA,SAAOA,GAAP;AACD,CARM;AAUP,AAAO,MAAM+R,YAAY,GAAIxO,CAAD,IAAgBsO,SAArC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClDA,MAAMG,QAAQ,gBAAG,CACtBhD,KADsB,EAEtB5C,KAFsB,EAGtB6F,KAHsB,EAItBC,KAJsB,EAKtBC,KALsB,EAMtBC,KANsB,EAOtBC,KAPsB,EAQtBC,KARsB,EAStBC,KATsB,EAUtBC,KAVsB,EAWtBC,KAXsB,EAYtBC,KAZsB,EAatBC,KAbsB,EActBC,KAdsB,EAetBC,KAfsB,EAgBtBC,KAhBsB,EAiBtBC,GAjBsB,EAkBtBC,KAlBsB,EAmBtBC,KAnBsB,EAoBtBC,KApBsB,EAsBrBlQ,GAtBqB,CAsBjBmQ,KAtBiB,EAuBrBlQ,IAvBqB,CAuBhB,IAvBgB,CAAjB;;ACVP,MAAMmQ,SAAS,GAAG;AAChBC,EAAAA,IAAI,EAAE;AACJtB,IAAAA,YAAY,EAAEuB,YADV;AAEJxB,IAAAA,iBAAiB,EAAEyB;AAFf;AADU,CAAlB;AAOA,MAAaC,WAAW,GAAG,MAAMxB,QAA1B;AAEP,MAAaD,cAAY,GAAI3O,OAAD,IAC1BgQ,SAAS,CAAChQ,OAAO,CAACqQ,QAAT,CAAT,CAA4B1B,YAA5B,CAAyC3O,OAAzC,CADK;AAGP,MAAa0O,mBAAiB,GAAI1O,OAAD,IAC/BgQ,SAAS,CAAChQ,OAAO,CAACqQ,QAAT,CAAT,CAA4B3B,iBAA5B,CAA8C1O,OAA9C,CADK;AAGP,MAAasQ,SAAS,GAAG,MAAOtQ,OAAP,IACvBuQ,oBAAoB,CAAC;AACnBC,EAAAA,SAAS,EAAE7B,cAAY,CAAC3O,OAAD,CADJ;AAEnB4O,EAAAA,QAAQ,EAAEwB,WAAW;AAFF,CAAD,CADf;;;;"}
|
|
1
|
+
{"version":3,"file":"api.esm.js","sources":["../src/platforms/vtex/clients/fetch.ts","../src/platforms/vtex/clients/commerce/index.ts","../src/platforms/vtex/clients/search/index.ts","../src/platforms/vtex/clients/index.ts","../src/platforms/vtex/loaders/simulation.ts","../src/platforms/vtex/utils/errors.ts","../src/platforms/vtex/utils/enhanceSku.ts","../src/platforms/vtex/loaders/sku.ts","../src/platforms/vtex/loaders/index.ts","../src/platforms/vtex/resolvers/aggregateOffer.ts","../src/platforms/vtex/resolvers/aggregateRating.ts","../src/platforms/vtex/utils/slugify.ts","../src/platforms/vtex/resolvers/collection.ts","../src/platforms/vtex/resolvers/facet.ts","../src/platforms/vtex/resolvers/facetValue.ts","../src/platforms/vtex/resolvers/validateCart.ts","../src/platforms/vtex/resolvers/mutation.ts","../src/platforms/vtex/resolvers/offer.ts","../src/platforms/vtex/resolvers/product.ts","../src/platforms/vtex/resolvers/productGroup.ts","../src/platforms/vtex/utils/facets.ts","../src/platforms/vtex/utils/sort.ts","../src/platforms/vtex/resolvers/query.ts","../src/platforms/vtex/resolvers/review.ts","../src/platforms/vtex/resolvers/searchResult.ts","../src/platforms/vtex/resolvers/seo.ts","../src/platforms/vtex/index.ts","../src/typeDefs/index.ts","../src/index.ts"],"sourcesContent":["import fetch from 'isomorphic-unfetch'\n\nexport const fetchAPI = async (info: RequestInfo, init?: RequestInit) => {\n const response = await fetch(info, init)\n\n if (response.ok) {\n return response.json()\n }\n\n const text = await response.text()\n\n throw new Error(text)\n}\n","import type { Context, Options } from '../../index'\nimport { fetchAPI } from '../fetch'\nimport type { Brand } from './types/Brand'\nimport type { CategoryTree } from './types/CategoryTree'\nimport type { OrderForm, OrderFormInputItem } from './types/OrderForm'\nimport type { PortalPagetype } from './types/Portal'\nimport type {\n Simulation,\n SimulationArgs,\n SimulationOptions,\n} from './types/Simulation'\n\nconst BASE_INIT = {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n}\n\nexport const VtexCommerce = (\n { account, environment }: Options,\n ctx: Context\n) => {\n const base = `http://${account}.${environment}.com.br`\n\n return {\n catalog: {\n brand: {\n list: (): Promise<Brand[]> =>\n fetchAPI(`${base}/api/catalog_system/pub/brand/list`),\n },\n category: {\n tree: (depth = 3): Promise<CategoryTree[]> =>\n fetchAPI(`${base}/api/catalog_system/pub/category/tree/${depth}`),\n },\n portal: {\n pagetype: (slug: string): Promise<PortalPagetype> =>\n fetchAPI(`${base}/api/catalog_system/pub/portal/pagetype/${slug}`),\n },\n },\n checkout: {\n simulation: (\n args: SimulationArgs,\n { salesChannel }: SimulationOptions = {\n salesChannel: ctx.storage.channel,\n }\n ): Promise<Simulation> => {\n const params = new URLSearchParams({\n sc: salesChannel,\n })\n\n return fetchAPI(\n `${base}/api/checkout/pub/orderForms/simulation?${params.toString()}`,\n {\n ...BASE_INIT,\n body: JSON.stringify(args),\n }\n )\n },\n orderForm: ({\n id,\n refreshOutdatedData = true,\n salesChannel = ctx.storage.channel,\n }: {\n id: string\n refreshOutdatedData?: boolean\n salesChannel?: string\n }): Promise<OrderForm> => {\n const params = new URLSearchParams({\n refreshOutdatedData: refreshOutdatedData.toString(),\n sc: salesChannel,\n })\n\n return fetchAPI(\n `${base}/api/checkout/pub/orderForm/${id}?${params.toString()}`,\n BASE_INIT\n )\n },\n updateOrderFormItems: ({\n id,\n orderItems,\n allowOutdatedData = 'paymentData',\n salesChannel = ctx.storage.channel,\n }: {\n id: string\n orderItems: OrderFormInputItem[]\n allowOutdatedData?: 'paymentData'\n salesChannel?: string\n }): Promise<OrderForm> => {\n const params = new URLSearchParams({\n allowOutdatedData,\n sc: salesChannel,\n })\n\n return fetchAPI(\n `${base}/api/checkout/pub/orderForm/${id}/items?${params}`,\n {\n ...BASE_INIT,\n body: JSON.stringify({ orderItems }),\n method: 'PATCH',\n }\n )\n },\n },\n }\n}\n","import type { Context, Options } from '../../index'\nimport { fetchAPI } from '../fetch'\nimport type { SelectedFacet } from '../../utils/facets'\nimport type { ProductSearchResult } from './types/ProductSearchResult'\nimport type { AttributeSearchResult } from './types/AttributeSearchResult'\n\nexport type Sort =\n | 'price:desc'\n | 'price:asc'\n | 'orders:desc'\n | 'name:desc'\n | 'name:asc'\n | 'release:desc'\n | 'discount:desc'\n | ''\n\nexport interface SearchArgs {\n query?: string\n page: number\n count: number\n type: 'product_search' | 'attribute_search'\n sort?: Sort\n selectedFacets?: SelectedFacet[]\n fuzzy?: '0' | '1'\n}\n\nexport interface ProductLocator {\n field: 'id' | 'slug'\n value: string\n}\n\nexport const IntelligentSearch = (\n { account, environment }: Options,\n ctx: Context\n) => {\n const base = `http://portal.${environment}.com.br/search-api/v1/${account}`\n const policyFacet = { key: 'trade-policy', value: ctx.storage.channel }\n\n const addDefaultFacets = (facets: SelectedFacet[]) => {\n const facet = facets.find(({ key }) => key === policyFacet.key)\n\n if (facet === undefined) {\n return [...facets, policyFacet]\n }\n\n return facets\n }\n\n const search = <T>({\n query = '',\n page,\n count,\n sort = '',\n selectedFacets = [],\n type,\n fuzzy = '0',\n }: SearchArgs): Promise<T> => {\n const params = new URLSearchParams({\n page: (page + 1).toString(),\n count: count.toString(),\n query,\n sort,\n fuzzy,\n })\n\n const pathname = addDefaultFacets(selectedFacets)\n .map(({ key, value }) => `${key}/${value}`)\n .join('/')\n\n return fetchAPI(\n `${base}/api/split/${type}/${pathname}?${params.toString()}`\n )\n }\n\n const products = (args: Omit<SearchArgs, 'type'>) =>\n search<ProductSearchResult>({ ...args, type: 'product_search' })\n\n const facets = (args: Omit<SearchArgs, 'type'>) =>\n search<AttributeSearchResult>({ ...args, type: 'attribute_search' })\n\n return {\n facets,\n products,\n }\n}\n","import { VtexCommerce } from './commerce'\nimport { IntelligentSearch } from './search'\nimport type { Context, Options } from '..'\n\nexport type Clients = ReturnType<typeof getClients>\n\nexport const getClients = (options: Options, ctx: Context) => {\n const search = IntelligentSearch(options, ctx)\n const commerce = VtexCommerce(options, ctx)\n\n return {\n search,\n commerce,\n }\n}\n","import DataLoader from 'dataloader'\n\nimport type {\n PayloadItem,\n Simulation,\n} from '../clients/commerce/types/Simulation'\nimport type { Options } from '..'\nimport type { Clients } from '../clients'\n\nexport const getSimulationLoader = (_: Options, clients: Clients) => {\n const loader = async (allItems: readonly PayloadItem[][]) => {\n const items = [...allItems.flat()]\n const simulation = await clients.commerce.checkout.simulation({\n items,\n })\n\n // Sort and filter simulation since Checkout API may return\n // items that we didn't ask for\n const simulated = simulation.items.reduce((acc, item) => {\n const index = item.requestIndex\n\n if (typeof index === 'number' && index < acc.length) {\n acc[index] = item\n }\n\n return acc\n }, Array(items.length).fill(null) as Simulation['items'])\n\n const itemsIndices = allItems.reduce(\n (acc, curr) => [...acc, curr.length + acc[acc.length - 1]],\n [0]\n )\n\n return allItems.map((__, index) => ({\n ...simulation,\n items: simulated\n .slice(itemsIndices[index], itemsIndices[index + 1])\n .filter((item) => Boolean(item)),\n }))\n }\n\n return new DataLoader<PayloadItem[], Simulation>(loader, {\n maxBatchSize: 20,\n })\n}\n","export class BadRequestError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'BadRequestError'\n }\n}\n\nexport class NotFoundError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'NotFoundError'\n }\n}\n","import type { Product, Sku } from '../clients/search/types/ProductSearchResult'\n\nexport type EnhancedSku = Sku & { isVariantOf: Product }\n\nexport const enhanceSku = (sku: Sku, product: Product): EnhancedSku => ({\n ...sku,\n isVariantOf: product,\n})\n","import DataLoader from 'dataloader'\n\nimport { BadRequestError } from '../utils/errors'\nimport { enhanceSku } from '../utils/enhanceSku'\nimport type { EnhancedSku } from '../utils/enhanceSku'\nimport type { Options } from '..'\nimport type { Clients } from '../clients'\nimport type { SelectedFacet } from '../utils/facets'\n\nexport const getSkuLoader = (_: Options, clients: Clients) => {\n const loader = async (facetsList: readonly SelectedFacet[][]) => {\n const skuIds = facetsList.map((facets) => {\n const maybeFacet = facets.find(({ key }) => key === 'id')\n\n if (!maybeFacet) {\n throw new BadRequestError(\n 'Error while loading SKU. Needs to pass an id to selected facets'\n )\n }\n\n return maybeFacet.value\n })\n\n const { products } = await clients.search.products({\n query: `sku:${skuIds.join(';')}`,\n page: 0,\n count: skuIds.length,\n })\n\n const skuBySkuId = products.reduce((acc, product) => {\n for (const sku of product.skus) {\n acc[sku.id] = enhanceSku(sku, product)\n }\n\n return acc\n }, {} as Record<string, EnhancedSku>)\n\n const skus = skuIds.map((skuId) => skuBySkuId[skuId])\n const missingSkus = skus.filter((sku) => !sku)\n\n if (missingSkus.length > 0) {\n throw new Error(\n `Search API did not return the following skus: ${missingSkus.join(',')}`\n )\n }\n\n return skus\n }\n\n return new DataLoader<SelectedFacet[], EnhancedSku>(loader, {\n maxBatchSize: 99, // Max allowed batch size of Search API\n })\n}\n","import { getSimulationLoader } from './simulation'\nimport { getSkuLoader } from './sku'\nimport type { Context, Options } from '..'\n\nexport type Loaders = ReturnType<typeof getLoaders>\n\nexport const getLoaders = (options: Options, { clients }: Context) => {\n const skuLoader = getSkuLoader(options, clients)\n const simulationLoader = getSimulationLoader(options, clients)\n\n return {\n skuLoader,\n simulationLoader,\n }\n}\n","import type { EnhancedSku } from '../utils/enhanceSku'\nimport type { Simulation } from '../clients/commerce/types/Simulation'\n\ntype Resolvers = (root: Simulation & { product: EnhancedSku }) => unknown\n\nexport const StoreAggregateOffer: Record<string, Resolvers> = {\n highPrice: ({ items }) =>\n items.reduce(\n (acc, curr) => (acc > curr.sellingPrice ? acc : curr.sellingPrice),\n items[0]?.sellingPrice ?? 0\n ) / 1e2,\n lowPrice: ({ items }) =>\n items.reduce(\n (acc, curr) => (acc < curr.sellingPrice ? acc : curr.sellingPrice),\n items[0]?.sellingPrice ?? 0\n ) / 1e2,\n offerCount: ({ items }) => items.length,\n priceCurrency: () => '',\n offers: ({ items, product }) => items.map((item) => ({ ...item, product })),\n}\n","import type { Resolver } from '..'\n\n// TODO: Add a review system integration\nexport const StoreAggregateRating: Record<string, Resolver> = {\n ratingValue: () => 5,\n reviewCount: () => 0,\n}\n","import rawSlugify from '@sindresorhus/slugify'\n\nexport const slugify = (path: string) =>\n rawSlugify(path, { separator: '-', lowercase: true })\n","import { slugify as baseSlugify } from '../utils/slugify'\nimport type { Resolver } from '..'\nimport type { Brand } from '../clients/commerce/types/Brand'\nimport type { CategoryTree } from '../clients/commerce/types/CategoryTree'\nimport type { PortalPagetype } from '../clients/commerce/types/Portal'\n\ntype Root = Brand | (CategoryTree & { level: number }) | PortalPagetype\n\nconst isBrand = (x: any): x is Brand => x.type === 'brand'\n\nconst isPortalPageType = (x: any): x is PortalPagetype =>\n typeof x.pageType === 'string'\n\nconst slugify = (root: Root) => {\n if (isBrand(root)) {\n return baseSlugify(root.name)\n }\n\n if (isPortalPageType(root)) {\n return new URL(`https://${root.url}`).pathname.slice(1)\n }\n\n return new URL(root.url).pathname.slice(1)\n}\n\nexport const StoreCollection: Record<string, Resolver<Root>> = {\n id: ({ id }) => id.toString(),\n slug: (root) => slugify(root),\n seo: (root) =>\n isBrand(root) || isPortalPageType(root)\n ? {\n title: root.title,\n description: root.metaTagDescription,\n }\n : {\n title: root.Title,\n description: root.MetaTagDescription,\n },\n type: (root) =>\n isBrand(root)\n ? 'Brand'\n : isPortalPageType(root)\n ? root.pageType\n : root.level === 0\n ? 'Department'\n : 'Category',\n meta: (root) =>\n isBrand(root)\n ? {\n selectedFacets: [{ key: 'brand', value: baseSlugify(root.name) }],\n }\n : {\n selectedFacets: new URL(\n isPortalPageType(root) ? `https://${root.url}` : root.url\n ).pathname\n .slice(1)\n .split('/')\n .map((segment, index) => ({\n key: `category-${index + 1}`,\n value: baseSlugify(segment),\n })),\n },\n breadcrumbList: async (root, _, ctx) => {\n const {\n clients: { commerce },\n } = ctx\n\n const slug = slugify(root)\n\n /**\n * Split slug into segments so we fetch all data for\n * the breadcrumb. For instance, if we get `/foo/bar`\n * we need all metadata for both `/foo` and `/bar` and\n * thus we need to fetch pageType for `/foo` and `/bar`\n */\n const segments = slug.split('/').filter((segment) => Boolean(segment))\n const slugs = segments.map((__, index) =>\n segments.slice(0, index + 1).join('/')\n )\n\n const pageTypes = await Promise.all(\n slugs.map((s) => commerce.catalog.portal.pagetype(s))\n )\n\n return {\n itemListElement: pageTypes.map((pageType, index) => ({\n item: new URL(`https://${pageType.url}`).pathname.toLowerCase(),\n name: pageType.name,\n position: index + 1,\n })),\n numberOfItems: pageTypes.length,\n }\n },\n}\n","import type { Resolver } from '..'\nimport type { Attribute } from '../clients/search/types/AttributeSearchResult'\n\ntype Root = Attribute\n\nexport const StoreFacet: Record<string, Resolver<Root>> = {\n key: ({ key }) => key,\n label: ({ label }) => label,\n values: ({ values }) => values,\n type: ({ type }) => (type === 'text' ? 'BOOLEAN' : 'RANGE'),\n}\n","import type { Resolver } from '..'\nimport type { Value } from '../clients/search/types/AttributeSearchResult'\n\ntype Root = Value\n\nexport const StoreFacetValue: Record<string, Resolver<Root>> = {\n value: ({ key, from, to }) => key ?? `${from}-to-${to}`,\n label: ({ label }) => label ?? 'unknown',\n selected: ({ active }) => active,\n quantity: ({ count }) => count,\n}\n","import deepEquals from 'fast-deep-equal'\n\nimport type { IStoreCart, IStoreOffer } from '../../../__generated__/schema'\nimport type {\n OrderForm,\n OrderFormItem,\n OrderFormInputItem,\n} from '../clients/commerce/types/OrderForm'\nimport type { Context } from '..'\n\ntype Indexed<T> = T & { index?: number }\n\nconst getId = (item: IStoreOffer) =>\n [item.itemOffered.sku, item.seller.identifier, item.price].join('::')\n\nconst orderFormItemToOffer = (\n item: OrderFormItem,\n index?: number\n): Indexed<IStoreOffer> => ({\n listPrice: item.listPrice / 100,\n price: item.sellingPrice / 100,\n quantity: item.quantity,\n seller: { identifier: item.seller },\n itemOffered: {\n sku: item.id,\n image: [],\n name: item.name,\n },\n index,\n})\n\nconst offerToOrderItemInput = (\n offer: Indexed<IStoreOffer>\n): OrderFormInputItem => ({\n quantity: offer.quantity,\n seller: offer.seller.identifier,\n id: offer.itemOffered.sku,\n index: offer.index,\n})\n\nconst groupById = (offers: IStoreOffer[]): Map<string, IStoreOffer> =>\n offers.reduce((acc, item) => {\n const id = getId(item)\n\n acc.set(id, acc.get(id) ?? item)\n\n return acc\n }, new Map<string, IStoreOffer>())\n\nconst equals = (of1: OrderForm, of2: OrderForm) => {\n const pick = ({ orderFormId, messages, items, salesChannel }: OrderForm) => ({\n orderFormId,\n messages,\n salesChannel,\n items: items.map(\n ({ uniqueId, quantity, seller, sellingPrice, availability }) => ({\n uniqueId,\n quantity,\n seller,\n sellingPrice,\n availability,\n })\n ),\n })\n\n return deepEquals(pick(of1), pick(of2))\n}\n\n/**\n * This resolver implements the optimistic cart behavior. The main idea in here\n * is that we receive a cart from the UI (as query params) and we validate it with\n * the commerce platform. If the cart is valid, we return null, if the cart is\n * invalid according to the commerce platform, we return the new cart the UI should use\n * instead\n *\n * The algoritm is something like:\n * 1. Fetch orderForm from VTEX\n * 2. Compute delta changes between the orderForm and the UI's cart\n * 3. Update the orderForm in VTEX platform accordingly\n * 4. If any chages were made, send to the UI the new cart. Null otherwise\n */\nexport const validateCart = async (\n _: unknown,\n {\n cart: {\n order: { orderNumber, acceptedOffer },\n },\n }: { cart: IStoreCart },\n ctx: Context\n) => {\n const {\n clients: { commerce },\n loaders: { skuLoader },\n } = ctx\n\n // Step1: Get OrderForm from VTEX Commerce\n const orderForm = await commerce.checkout.orderForm({\n id: orderNumber,\n })\n\n // Step2: Process items from both browser and checkout so they have the same shape\n const browserItemsById = groupById(acceptedOffer)\n const originItemsById = groupById(orderForm.items.map(orderFormItemToOffer))\n const browserItems = Array.from(browserItemsById.values()) // items on the user's browser\n const originItems = Array.from(originItemsById.values()) // items on the VTEX platform backend\n\n // Step3: Compute delta changes\n const { itemsToAdd, itemsToUpdate } = browserItems.reduce(\n (acc, item) => {\n const maybeOriginItem = originItemsById.get(getId(item))\n\n if (!maybeOriginItem) {\n acc.itemsToAdd.push(item)\n } else {\n acc.itemsToUpdate.push({\n ...maybeOriginItem,\n quantity: item.quantity,\n })\n }\n\n return acc\n },\n {\n itemsToAdd: [] as IStoreOffer[],\n itemsToUpdate: [] as IStoreOffer[],\n }\n )\n\n const itemsToDelete = originItems\n .filter((item) => !browserItemsById.has(getId(item)))\n .map((item) => ({ ...item, quantity: 0 }))\n\n const changes = [...itemsToAdd, ...itemsToUpdate, ...itemsToDelete].map(\n offerToOrderItemInput\n )\n\n if (changes.length === 0) {\n return null\n }\n\n // Step4: Apply delta changes to order form\n const updatedOrderForm = await commerce.checkout.updateOrderFormItems({\n id: orderForm.orderFormId,\n orderItems: changes,\n })\n\n // Step5: If no changes detected before/after updating orderForm, the order is validated\n if (equals(orderForm, updatedOrderForm)) {\n return null\n }\n\n // Step6: There were changes, convert orderForm to StoreOrder\n return {\n order: {\n orderNumber: updatedOrderForm.orderFormId,\n acceptedOffer: updatedOrderForm.items.map((item) => ({\n ...item,\n product: skuLoader.load([{ key: 'id', value: item.id }]), // TODO: add channel\n })),\n },\n messages: updatedOrderForm.messages.map(({ text, status }) => ({\n text,\n status: status.toUpperCase(),\n })),\n }\n}\n","import { validateCart } from './validateCart'\n\nexport const Mutation = {\n validateCart,\n}\n","import type { EnhancedSku } from '../utils/enhanceSku'\nimport type { Resolver } from '..'\nimport type { Item } from '../clients/commerce/types/Simulation'\nimport type { OrderFormItem } from '../clients/commerce/types/OrderForm'\n\ntype Root =\n | (Item & { product: EnhancedSku }) // when querying search/product\n | (OrderFormItem & { product: Promise<EnhancedSku> }) // when querying order\n\nexport const StoreOffer: Record<string, Resolver<Root>> = {\n priceCurrency: () => '',\n priceValidUntil: ({ priceValidUntil }) => priceValidUntil ?? '',\n itemCondition: () => 'https://schema.org/NewCondition',\n availability: ({ availability }) =>\n availability === 'available'\n ? 'https://schema.org/InStock'\n : 'https://schema.org/OutOfStock',\n seller: ({ seller }) => ({\n identifier: seller,\n }),\n price: ({ sellingPrice }) => sellingPrice / 1e2, // TODO add spot price calculation\n sellingPrice: ({ sellingPrice }) => sellingPrice / 1e2,\n listPrice: ({ listPrice }) => listPrice / 1e2,\n itemOffered: ({ product }) => product,\n quantity: ({ quantity }) => quantity,\n}\n","import type { Resolver } from '..'\nimport type { EnhancedSku } from '../utils/enhanceSku'\nimport { slugify } from '../utils/slugify'\n\ntype Root = EnhancedSku\n\nconst DEFAULT_IMAGE = {\n name: 'image',\n value:\n 'https://storecomponents.vtexassets.com/assets/faststore/images/image___117a6d3e229a96ad0e0d0876352566e2.svg',\n}\n\nconst getSlug = (link: string, id: string) => `${link}-${id}`\nconst getPath = (link: string, id: string) => `/${getSlug(link, id)}/p`\nconst nonEmptyArray = <T>(array: T[] | null | undefined) =>\n Array.isArray(array) && array.length > 0 ? array : null\n\nexport const StoreProduct: Record<string, Resolver<Root>> = {\n productID: ({ id }) => id,\n name: ({ isVariantOf, name }) => name ?? isVariantOf.name,\n slug: ({ isVariantOf: { link }, id }) => getSlug(link, id),\n description: ({ isVariantOf: { description } }) => description,\n seo: ({ isVariantOf: { name, description } }) => ({\n title: name,\n description,\n }),\n brand: ({ isVariantOf: { brand } }) => ({ name: brand }),\n breadcrumbList: ({ isVariantOf: { categoryTrees, name, link }, id }) => ({\n itemListElement: [\n ...categoryTrees.reverse().map(({ categoryNames }, index) => ({\n name: categoryNames[categoryNames.length - 1],\n item: `/${categoryNames\n .map((categoryName) => slugify(categoryName))\n .join('/')}`,\n position: index + 1,\n })),\n {\n name,\n item: getPath(link, id),\n position: categoryTrees.length + 1,\n },\n ],\n numberOfItems: categoryTrees.length,\n }),\n image: ({ isVariantOf, images }) =>\n (\n nonEmptyArray(images) ??\n nonEmptyArray(isVariantOf.images) ?? [DEFAULT_IMAGE]\n ).map(({ name, value }) => ({\n alternateName: name ?? '',\n url: value.replace('vteximg.com.br', 'vtexassets.com'),\n })),\n sku: ({\n isVariantOf: {\n skus: [sku],\n },\n }) => sku.id,\n gtin: ({ reference }) => reference ?? '',\n review: () => [],\n aggregateRating: () => ({}),\n offers: async (product, _, ctx) => {\n const {\n loaders: { simulationLoader },\n storage: { channel },\n } = ctx\n\n const { id, policies } = product\n const sellers = policies.find((policy) => policy.id === channel)?.sellers\n\n if (sellers == null) {\n // This error will likely happen when you forget to forward the channel somewhere in your code.\n // Make sure all queries that lead to a product are forwarding the channel in context corectly\n throw new Error(\n `Product with id ${id} has no sellers for channel ${channel}.`\n )\n }\n\n // Unique seller ids\n const sellerIds = sellers.map((seller) => seller.id)\n const items = Array.from(new Set(sellerIds)).map((seller) => ({\n quantity: 1,\n seller,\n id,\n }))\n\n const simulation = await simulationLoader.load(items)\n\n return { ...simulation, product }\n },\n isVariantOf: ({ isVariantOf }) => isVariantOf,\n additionalProperty: ({ attributes = [] }) =>\n attributes.map((attribute) => ({\n name: attribute.key,\n value: attribute.value,\n })),\n}\n","import { enhanceSku } from '../utils/enhanceSku'\nimport type { Product } from '../clients/search/types/ProductSearchResult'\nimport type { Resolver } from '..'\n\nexport const StoreProductGroup: Record<string, Resolver<Product>> = {\n hasVariant: (root) => root.skus.map((sku) => enhanceSku(sku, root)),\n productGroupID: ({ product }) => product,\n name: ({ name }) => name,\n additionalProperty: ({ textAttributes = [], productSpecifications = [] }) => {\n const specs = new Set(productSpecifications)\n\n return textAttributes\n .filter((attribute) => specs.has(attribute.labelKey))\n .map((attribute) => ({\n name: attribute.labelKey,\n value: attribute.labelValue,\n }))\n },\n}\n","import { BadRequestError } from './errors'\n\nexport interface SelectedFacet {\n key: string\n value: string\n}\n\nconst getIdFromSlug = (slug: string) => {\n const id = slug.split('-').pop()\n\n if (id == null) {\n throw new BadRequestError('Error while extracting sku id from product slug')\n }\n\n return id\n}\n\n/**\n * Transform facets from the store to VTEX platform facets.\n * For instance, the channel in Store becames trade-policy in VTEX's realm\n * */\nexport const transformSelectedFacet = ({ key, value }: SelectedFacet) => {\n switch (key) {\n case 'channel':\n return { key: 'trade-policy', value }\n\n case 'slug':\n return { key: 'id', value: getIdFromSlug(value) }\n\n default:\n return { key, value }\n }\n}\n","export const SORT_MAP = {\n price_desc: 'price:desc',\n price_asc: 'price:asc',\n orders_desc: 'orders:desc',\n name_desc: 'name:desc',\n name_asc: 'name:asc',\n release_desc: 'release:desc',\n discount_desc: 'discount:desc',\n score_desc: '',\n} as const\n","import { enhanceSku } from '../utils/enhanceSku'\nimport { NotFoundError } from '../utils/errors'\nimport { transformSelectedFacet } from '../utils/facets'\nimport { SORT_MAP } from '../utils/sort'\nimport { StoreCollection } from './collection'\nimport type {\n QueryProductArgs,\n QueryAllCollectionsArgs,\n QueryAllProductsArgs,\n QuerySearchArgs,\n QueryCollectionArgs,\n} from '../../../__generated__/schema'\nimport type { CategoryTree } from '../clients/commerce/types/CategoryTree'\nimport type { Context } from '../index'\n\nexport const Query = {\n product: async (_: unknown, { locator }: QueryProductArgs, ctx: Context) => {\n // Insert channel in context for later usage\n ctx.storage = {\n ...ctx.storage,\n channel:\n locator.find((facet) => facet.key === 'channel')?.value ??\n ctx.storage.channel,\n }\n\n const {\n loaders: { skuLoader },\n } = ctx\n\n return skuLoader.load(locator.map(transformSelectedFacet))\n },\n collection: async (\n _: unknown,\n { slug }: QueryCollectionArgs,\n ctx: Context\n ) => {\n const {\n clients: { commerce },\n } = ctx\n\n const result = await commerce.catalog.portal.pagetype(slug)\n\n const whitelist = ['Brand', 'Category', 'Department', 'Subcategory']\n\n if (whitelist.includes(result.pageType)) {\n return result\n }\n\n throw new NotFoundError(`Not Found: ${slug}`)\n },\n search: async (\n _: unknown,\n { first, after: maybeAfter, sort, term, selectedFacets }: QuerySearchArgs,\n ctx: Context\n ) => {\n // Insert channel in context for later usage\n ctx.storage = {\n ...ctx.storage,\n channel:\n selectedFacets?.find((facet) => facet.key === 'channel')?.value ??\n ctx.storage.channel,\n }\n\n const after = maybeAfter ? Number(maybeAfter) : 0\n const searchArgs = {\n page: Math.ceil(after / first),\n count: first,\n query: term,\n sort: SORT_MAP[sort ?? 'score_desc'],\n selectedFacets: selectedFacets?.map(transformSelectedFacet) ?? [],\n }\n\n return searchArgs\n },\n allProducts: async (\n _: unknown,\n { first, after: maybeAfter }: QueryAllProductsArgs,\n ctx: Context\n ) => {\n const {\n clients: { search },\n } = ctx\n\n const after = maybeAfter ? Number(maybeAfter) : 0\n const products = await search.products({\n page: Math.ceil(after / first),\n count: first,\n })\n\n const skus = products.products\n .map((product) => product.skus.map((sku) => enhanceSku(sku, product)))\n .flat()\n .filter((sku) => sku.sellers.length > 0)\n\n return {\n pageInfo: {\n hasNextPage: products.pagination.after.length > 0,\n hasPreviousPage: products.pagination.before.length > 0,\n startCursor: '0',\n endCursor: products.total.toString(),\n totalCount: products.total,\n },\n edges: skus.map((sku, index) => ({\n node: sku,\n cursor: (after + index).toString(),\n })),\n }\n },\n allCollections: async (\n _: unknown,\n { first, after: maybeAfter }: QueryAllCollectionsArgs,\n ctx: Context\n ) => {\n const {\n clients: { commerce },\n } = ctx\n\n const after = maybeAfter ? Number(maybeAfter) : 0\n\n const [brands, tree] = await Promise.all([\n commerce.catalog.brand.list(),\n commerce.catalog.category.tree(),\n ])\n\n const categories: Array<CategoryTree & { level: number }> = []\n const dfs = (node: CategoryTree, level: number) => {\n categories.push({ ...node, level })\n\n for (const child of node.children) {\n dfs(child, level + 1)\n }\n }\n\n for (const node of tree) {\n dfs(node, 0)\n }\n\n const collections = [\n ...brands.map((x) => ({ ...x, type: 'brand' })),\n ...categories,\n ]\n\n return {\n pageInfo: {\n hasNextPage: false,\n hasPreviousPage: false,\n startCursor: '0',\n endCursor: '0',\n },\n edges: collections\n // Nullable slugs may cause one route to override the other\n .filter((node) => Boolean(StoreCollection.slug(node, null, ctx, null)))\n .slice(after, first)\n .map((node, index) => ({\n node,\n cursor: index.toString(),\n })),\n }\n },\n}\n","import type { Resolver } from '..'\n\nexport const StoreReview: Record<string, Resolver> = {\n reviewRating: () => ({\n ratingValue: 5,\n bestRating: 5,\n }),\n author: () => ({\n name: '',\n }),\n}\n","import { enhanceSku } from '../utils/enhanceSku'\nimport type { Resolver } from '..'\nimport type { SearchArgs } from '../clients/search'\n\ntype Root = Omit<SearchArgs, 'type'>\n\nexport const StoreSearchResult: Record<string, Resolver<Root>> = {\n products: async (searchArgs, _, ctx) => {\n const {\n clients: { search },\n } = ctx\n\n const products = await search.products(searchArgs)\n\n const skus = products.products\n .map((product) => {\n const maybeSku = product.skus.find((x) => x.sellers.length > 0)\n\n return maybeSku && enhanceSku(maybeSku, product)\n })\n .filter((sku) => !!sku)\n\n return {\n pageInfo: {\n hasNextPage: products.pagination.after.length > 0,\n hasPreviousPage: products.pagination.before.length > 0,\n startCursor: '0',\n endCursor: products.total.toString(),\n totalCount: products.total,\n },\n edges: skus.map((sku, index) => ({\n node: sku,\n cursor: index.toString(),\n })),\n }\n },\n facets: async (searchArgs, _, ctx) => {\n const {\n clients: { search: is },\n } = ctx\n\n const facets = await is.facets(searchArgs)\n\n return facets.attributes ?? []\n },\n}\n","import type { Resolver } from '..'\n\ntype Root = { title?: string; description?: string }\n\nexport const StoreSeo: Record<string, Resolver<Root>> = {\n title: ({ title }) => title ?? '',\n description: ({ description }) => description ?? '',\n titleTemplate: () => '',\n canonical: () => '',\n}\n","import { getClients } from './clients'\nimport { getLoaders } from './loaders'\nimport { StoreAggregateOffer } from './resolvers/aggregateOffer'\nimport { StoreAggregateRating } from './resolvers/aggregateRating'\nimport { StoreCollection } from './resolvers/collection'\nimport { StoreFacet } from './resolvers/facet'\nimport { StoreFacetValue } from './resolvers/facetValue'\nimport { Mutation } from './resolvers/mutation'\nimport { StoreOffer } from './resolvers/offer'\nimport { StoreProduct } from './resolvers/product'\nimport { StoreProductGroup } from './resolvers/productGroup'\nimport { Query } from './resolvers/query'\nimport { StoreReview } from './resolvers/review'\nimport { StoreSearchResult } from './resolvers/searchResult'\nimport { StoreSeo } from './resolvers/seo'\nimport type { Loaders } from './loaders'\nimport type { Clients } from './clients'\n\nexport interface Options {\n platform: 'vtex'\n account: string\n environment: 'vtexcommercestable' | 'vtexcommercebeta'\n // Default sales channel to use for fetching products\n channel: string\n}\n\nexport interface Context {\n clients: Clients\n loaders: Loaders\n /**\n * @description Storage updated at each request.\n *\n * Use this datastructure to store and share small values in the context.\n * Use it with caution since dependecy injection leads to a more complex code\n * */\n storage: {\n channel: string\n }\n}\n\nexport type Resolver<R = unknown, A = unknown> = (\n root: R,\n args: A,\n ctx: Context,\n info: any\n) => any\n\nconst Resolvers = {\n StoreCollection,\n StoreAggregateOffer,\n StoreProduct,\n StoreSeo,\n StoreFacet,\n StoreFacetValue,\n StoreOffer,\n StoreAggregateRating,\n StoreReview,\n StoreProductGroup,\n StoreSearchResult,\n Query,\n Mutation,\n}\n\nexport const getContextFactory = (options: Options) => (ctx: any) => {\n ctx.storage = {\n channel: options.channel,\n }\n ctx.clients = getClients(options, ctx)\n ctx.loaders = getLoaders(options, ctx)\n\n return ctx\n}\n\nexport const getResolvers = (_: Options) => Resolvers\n","import { print } from 'graphql'\n\nimport AggregateOffer from './aggregateOffer.graphql'\nimport AggregateRating from './aggregateRating.graphql'\nimport Author from './author.graphql'\nimport Brand from './brand.graphql'\nimport Breadcrumb from './breadcrumb.graphql'\nimport Collection from './collection.graphql'\nimport Facet from './facet.graphql'\nimport Image from './image.graphql'\nimport Mutation from './mutation.graphql'\nimport Offer from './offer.graphql'\nimport Order from './order.graphql'\nimport Organization from './organization.graphql'\nimport PageInfo from './pageInfo.graphql'\nimport Product from './product.graphql'\nimport ProductGroup from './productGroup.graphql'\nimport Query from './query.graphql'\nimport Review from './review.graphql'\nimport Seo from './seo.graphql'\nimport Cart from './cart.graphql'\nimport Status from './status.graphql'\nimport PropertyValue from './propertyValue.graphql'\n\nexport const typeDefs = [\n Query,\n Mutation,\n Brand,\n Breadcrumb,\n Collection,\n Facet,\n Image,\n PageInfo,\n Product,\n Seo,\n Offer,\n AggregateRating,\n Review,\n Author,\n ProductGroup,\n Organization,\n AggregateOffer,\n Order,\n Cart,\n Status,\n PropertyValue,\n]\n .map(print)\n .join('\\n')\n","import { makeExecutableSchema } from '@graphql-tools/schema'\n\nimport {\n getContextFactory as getContextFactoryVTEX,\n getResolvers as getResolversVTEX,\n} from './platforms/vtex'\nimport { typeDefs } from './typeDefs'\nimport type { Options as OptionsVTEX } from './platforms/vtex'\n\nexport * from './__generated__/schema'\n\nexport type Options = OptionsVTEX\n\nconst platforms = {\n vtex: {\n getResolvers: getResolversVTEX,\n getContextFactory: getContextFactoryVTEX,\n },\n}\n\nexport const getTypeDefs = () => typeDefs\n\nexport const getResolvers = (options: Options) =>\n platforms[options.platform].getResolvers(options)\n\nexport const getContextFactory = (options: Options) =>\n platforms[options.platform].getContextFactory(options)\n\nexport const getSchema = async (options: Options) =>\n makeExecutableSchema({\n resolvers: getResolvers(options),\n typeDefs: getTypeDefs(),\n })\n"],"names":["fetchAPI","info","init","response","fetch","ok","json","text","Error","BASE_INIT","method","headers","VtexCommerce","account","environment","ctx","base","catalog","brand","list","category","tree","depth","portal","pagetype","slug","checkout","simulation","args","salesChannel","storage","channel","params","URLSearchParams","sc","toString","body","JSON","stringify","orderForm","id","refreshOutdatedData","updateOrderFormItems","orderItems","allowOutdatedData","IntelligentSearch","policyFacet","key","value","addDefaultFacets","facets","facet","find","undefined","search","query","page","count","sort","selectedFacets","type","fuzzy","pathname","map","join","products","getClients","options","commerce","getSimulationLoader","_","clients","loader","allItems","items","flat","simulated","reduce","acc","item","index","requestIndex","length","Array","fill","itemsIndices","curr","__","slice","filter","Boolean","DataLoader","maxBatchSize","BadRequestError","constructor","message","name","NotFoundError","enhanceSku","sku","product","isVariantOf","getSkuLoader","facetsList","skuIds","maybeFacet","skuBySkuId","skus","skuId","missingSkus","getLoaders","skuLoader","simulationLoader","StoreAggregateOffer","highPrice","sellingPrice","lowPrice","offerCount","priceCurrency","offers","StoreAggregateRating","ratingValue","reviewCount","slugify","path","rawSlugify","separator","lowercase","isBrand","x","isPortalPageType","pageType","root","baseSlugify","URL","url","StoreCollection","seo","title","description","metaTagDescription","Title","MetaTagDescription","level","meta","split","segment","breadcrumbList","segments","slugs","pageTypes","Promise","all","s","itemListElement","toLowerCase","position","numberOfItems","StoreFacet","label","values","StoreFacetValue","from","to","selected","active","quantity","getId","itemOffered","seller","identifier","price","orderFormItemToOffer","listPrice","image","offerToOrderItemInput","offer","groupById","set","get","Map","equals","of1","of2","pick","orderFormId","messages","uniqueId","availability","deepEquals","validateCart","cart","order","orderNumber","acceptedOffer","loaders","browserItemsById","originItemsById","browserItems","originItems","itemsToAdd","itemsToUpdate","maybeOriginItem","push","itemsToDelete","has","changes","updatedOrderForm","load","status","toUpperCase","Mutation","StoreOffer","priceValidUntil","itemCondition","DEFAULT_IMAGE","getSlug","link","getPath","nonEmptyArray","array","isArray","StoreProduct","productID","categoryTrees","reverse","categoryNames","categoryName","images","alternateName","replace","gtin","reference","review","aggregateRating","policies","sellers","policy","sellerIds","Set","additionalProperty","attributes","attribute","StoreProductGroup","hasVariant","productGroupID","textAttributes","productSpecifications","specs","labelKey","labelValue","getIdFromSlug","pop","transformSelectedFacet","SORT_MAP","price_desc","price_asc","orders_desc","name_desc","name_asc","release_desc","discount_desc","score_desc","Query","locator","collection","result","whitelist","includes","first","after","maybeAfter","term","Number","searchArgs","Math","ceil","allProducts","pageInfo","hasNextPage","pagination","hasPreviousPage","before","startCursor","endCursor","total","totalCount","edges","node","cursor","allCollections","brands","categories","dfs","child","children","collections","StoreReview","reviewRating","bestRating","author","StoreSearchResult","maybeSku","is","StoreSeo","titleTemplate","canonical","Resolvers","getContextFactory","getResolvers","typeDefs","Brand","Breadcrumb","Collection","Facet","Image","PageInfo","Product","Seo","Offer","AggregateRating","Review","Author","ProductGroup","Organization","AggregateOffer","Order","Cart","Status","PropertyValue","print","platforms","vtex","getResolversVTEX","getContextFactoryVTEX","getTypeDefs","platform","getSchema","makeExecutableSchema","resolvers"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@faststore/api",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.10",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"typings": "dist/index.d.ts",
|
|
@@ -42,5 +42,5 @@
|
|
|
42
42
|
"peerDependencies": {
|
|
43
43
|
"graphql": "^15.6.0"
|
|
44
44
|
},
|
|
45
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "b426dc7dfdf9a0479afe8295671da730259a3c9c"
|
|
46
46
|
}
|
|
@@ -251,6 +251,7 @@ export type StorePageInfo = {
|
|
|
251
251
|
|
|
252
252
|
export type StoreProduct = {
|
|
253
253
|
__typename?: 'StoreProduct';
|
|
254
|
+
additionalProperty: Array<StorePropertyValue>;
|
|
254
255
|
aggregateRating: StoreAggregateRating;
|
|
255
256
|
brand: StoreBrand;
|
|
256
257
|
breadcrumbList: StoreBreadcrumbList;
|
|
@@ -281,11 +282,18 @@ export type StoreProductEdge = {
|
|
|
281
282
|
|
|
282
283
|
export type StoreProductGroup = {
|
|
283
284
|
__typename?: 'StoreProductGroup';
|
|
285
|
+
additionalProperty: Array<StorePropertyValue>;
|
|
284
286
|
hasVariant: Array<StoreProduct>;
|
|
285
287
|
name: Scalars['String'];
|
|
286
288
|
productGroupID: Scalars['String'];
|
|
287
289
|
};
|
|
288
290
|
|
|
291
|
+
export type StorePropertyValue = {
|
|
292
|
+
__typename?: 'StorePropertyValue';
|
|
293
|
+
name: Scalars['String'];
|
|
294
|
+
value: Scalars['String'];
|
|
295
|
+
};
|
|
296
|
+
|
|
289
297
|
export type StoreReview = {
|
|
290
298
|
__typename?: 'StoreReview';
|
|
291
299
|
author: StoreAuthor;
|
|
@@ -88,4 +88,9 @@ export const StoreProduct: Record<string, Resolver<Root>> = {
|
|
|
88
88
|
return { ...simulation, product }
|
|
89
89
|
},
|
|
90
90
|
isVariantOf: ({ isVariantOf }) => isVariantOf,
|
|
91
|
+
additionalProperty: ({ attributes = [] }) =>
|
|
92
|
+
attributes.map((attribute) => ({
|
|
93
|
+
name: attribute.key,
|
|
94
|
+
value: attribute.value,
|
|
95
|
+
})),
|
|
91
96
|
}
|
|
@@ -6,4 +6,14 @@ export const StoreProductGroup: Record<string, Resolver<Product>> = {
|
|
|
6
6
|
hasVariant: (root) => root.skus.map((sku) => enhanceSku(sku, root)),
|
|
7
7
|
productGroupID: ({ product }) => product,
|
|
8
8
|
name: ({ name }) => name,
|
|
9
|
+
additionalProperty: ({ textAttributes = [], productSpecifications = [] }) => {
|
|
10
|
+
const specs = new Set(productSpecifications)
|
|
11
|
+
|
|
12
|
+
return textAttributes
|
|
13
|
+
.filter((attribute) => specs.has(attribute.labelKey))
|
|
14
|
+
.map((attribute) => ({
|
|
15
|
+
name: attribute.labelKey,
|
|
16
|
+
value: attribute.labelValue,
|
|
17
|
+
}))
|
|
18
|
+
},
|
|
9
19
|
}
|