@faststore/api 1.5.10 → 1.5.14

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 CHANGED
@@ -3,6 +3,50 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 1.5.14 (2022-02-22)
7
+
8
+
9
+ ### Features
10
+
11
+ * Ajust SearchInput reference export ([#1155](https://github.com/vtex/faststore/issues/1155)) ([22d632d](https://github.com/vtex/faststore/commit/22d632d02657be5bef7595ad4179e5086eef7580))
12
+
13
+
14
+
15
+
16
+
17
+ ## 1.5.13 (2022-02-22)
18
+
19
+
20
+ ### Features
21
+
22
+ * Ajust SearchInput reference ([#1153](https://github.com/vtex/faststore/issues/1153)) ([c2ee199](https://github.com/vtex/faststore/commit/c2ee199402bc4e9d5846dc50778778e940ac7124))
23
+
24
+
25
+
26
+
27
+
28
+ ## 1.5.12 (2022-02-21)
29
+
30
+
31
+ ### Bug Fixes
32
+
33
+ * allCollections query pagination and pagetype timeout errors ([#1140](https://github.com/vtex/faststore/issues/1140)) ([0150222](https://github.com/vtex/faststore/commit/01502220fb903c62f0b33b9a703fb45daafae141))
34
+
35
+
36
+
37
+
38
+
39
+ ## 1.5.11 (2022-02-18)
40
+
41
+
42
+ ### Bug Fixes
43
+
44
+ * **gatsby-plugin-nginx:** remove trailing slash from incoming requests ([#1145](https://github.com/vtex/faststore/issues/1145)) ([db6f1e1](https://github.com/vtex/faststore/commit/db6f1e173ec43747bf9cfa244b81d86db8a25ce3))
45
+
46
+
47
+
48
+
49
+
6
50
  ## 1.5.10 (2022-02-17)
7
51
 
8
52
 
@@ -7,6 +7,7 @@ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'defau
7
7
  var schema = require('@graphql-tools/schema');
8
8
  var fetch = _interopDefault(require('isomorphic-unfetch'));
9
9
  var DataLoader = _interopDefault(require('dataloader'));
10
+ var pLimit = _interopDefault(require('p-limit'));
10
11
  var rawSlugify = _interopDefault(require('@sindresorhus/slugify'));
11
12
  var deepEquals = _interopDefault(require('fast-deep-equal'));
12
13
  var graphql = require('graphql');
@@ -247,14 +248,40 @@ const getSkuLoader = (_, clients) => {
247
248
  });
248
249
  };
249
250
 
251
+ const CONCURRENT_REQUESTS_MAX = 20;
252
+ const collectionPageTypes = /*#__PURE__*/new Set(['brand', 'category', 'department', 'subcategory']);
253
+ const isCollectionPageType = x => typeof x.pageType === 'string' && collectionPageTypes.has(x.pageType.toLowerCase());
254
+ const getCollectionLoader = (_, clients) => {
255
+ const limit = pLimit(CONCURRENT_REQUESTS_MAX);
256
+
257
+ const loader = async slugs => {
258
+ return Promise.all(slugs.map(slug => limit(async () => {
259
+ const page = await clients.commerce.catalog.portal.pagetype(slug);
260
+
261
+ if (isCollectionPageType(page)) {
262
+ return page;
263
+ }
264
+
265
+ throw new NotFoundError(`Catalog returned ${page.pageType} for slug: ${slug}. This usually happens when there is more than one category with the same name in the same category tree level.`);
266
+ })));
267
+ };
268
+
269
+ return new DataLoader(loader, {
270
+ // DataLoader is being used to cache requests, not to batch them
271
+ batch: false
272
+ });
273
+ };
274
+
250
275
  const getLoaders = (options, {
251
276
  clients
252
277
  }) => {
253
278
  const skuLoader = getSkuLoader(options, clients);
254
279
  const simulationLoader = getSimulationLoader(options, clients);
280
+ const collectionLoader = getCollectionLoader(options, clients);
255
281
  return {
256
282
  skuLoader,
257
- simulationLoader
283
+ simulationLoader,
284
+ collectionLoader
258
285
  };
259
286
  };
260
287
 
@@ -298,14 +325,12 @@ const slugify = path => rawSlugify(path, {
298
325
 
299
326
  const isBrand = x => x.type === 'brand';
300
327
 
301
- const isPortalPageType = x => typeof x.pageType === 'string';
302
-
303
328
  const slugify$1 = root => {
304
329
  if (isBrand(root)) {
305
- return slugify(root.name);
330
+ return slugify(root.name.toLowerCase());
306
331
  }
307
332
 
308
- if (isPortalPageType(root)) {
333
+ if (isCollectionPageType(root)) {
309
334
  return new URL(`https://${root.url}`).pathname.slice(1);
310
335
  }
311
336
 
@@ -317,29 +342,29 @@ const StoreCollection = {
317
342
  id
318
343
  }) => id.toString(),
319
344
  slug: root => slugify$1(root),
320
- seo: root => isBrand(root) || isPortalPageType(root) ? {
345
+ seo: root => isBrand(root) || isCollectionPageType(root) ? {
321
346
  title: root.title,
322
347
  description: root.metaTagDescription
323
348
  } : {
324
349
  title: root.Title,
325
350
  description: root.MetaTagDescription
326
351
  },
327
- type: root => isBrand(root) ? 'Brand' : isPortalPageType(root) ? root.pageType : root.level === 0 ? 'Department' : 'Category',
352
+ type: root => isBrand(root) ? 'Brand' : isCollectionPageType(root) ? root.pageType : root.level === 0 ? 'Department' : 'Category',
328
353
  meta: root => isBrand(root) ? {
329
354
  selectedFacets: [{
330
355
  key: 'brand',
331
356
  value: slugify(root.name)
332
357
  }]
333
358
  } : {
334
- selectedFacets: new URL(isPortalPageType(root) ? `https://${root.url}` : root.url).pathname.slice(1).split('/').map((segment, index) => ({
359
+ selectedFacets: new URL(isCollectionPageType(root) ? `https://${root.url}` : root.url).pathname.slice(1).split('/').map((segment, index) => ({
335
360
  key: `category-${index + 1}`,
336
361
  value: slugify(segment)
337
362
  }))
338
363
  },
339
364
  breadcrumbList: async (root, _, ctx) => {
340
365
  const {
341
- clients: {
342
- commerce
366
+ loaders: {
367
+ collectionLoader
343
368
  }
344
369
  } = ctx;
345
370
  const slug = slugify$1(root);
@@ -352,14 +377,14 @@ const StoreCollection = {
352
377
 
353
378
  const segments = slug.split('/').filter(segment => Boolean(segment));
354
379
  const slugs = segments.map((__, index) => segments.slice(0, index + 1).join('/'));
355
- const pageTypes = await Promise.all(slugs.map(s => commerce.catalog.portal.pagetype(s)));
380
+ const collections = await Promise.all(slugs.map(s => collectionLoader.load(s)));
356
381
  return {
357
- itemListElement: pageTypes.map((pageType, index) => ({
358
- item: new URL(`https://${pageType.url}`).pathname.toLowerCase(),
359
- name: pageType.name,
382
+ itemListElement: collections.map((collection, index) => ({
383
+ item: new URL(`https://${collection.url}`).pathname.toLowerCase(),
384
+ name: collection.name,
360
385
  position: index + 1
361
386
  })),
362
- numberOfItems: pageTypes.length
387
+ numberOfItems: collections.length
363
388
  };
364
389
  }
365
390
  };
@@ -817,22 +842,15 @@ const Query = {
817
842
  } = ctx;
818
843
  return skuLoader.load(locator.map(transformSelectedFacet));
819
844
  },
820
- collection: async (_, {
845
+ collection: (_, {
821
846
  slug
822
847
  }, ctx) => {
823
848
  const {
824
- clients: {
825
- commerce
849
+ loaders: {
850
+ collectionLoader
826
851
  }
827
852
  } = ctx;
828
- const result = await commerce.catalog.portal.pagetype(slug);
829
- const whitelist = ['Brand', 'Category', 'Department', 'Subcategory'];
830
-
831
- if (whitelist.includes(result.pageType)) {
832
- return result;
833
- }
834
-
835
- throw new NotFoundError(`Not Found: ${slug}`);
853
+ return collectionLoader.load(slug);
836
854
  },
837
855
  search: async (_, {
838
856
  first,
@@ -880,6 +898,7 @@ const Query = {
880
898
  endCursor: products.total.toString(),
881
899
  totalCount: products.total
882
900
  },
901
+ // after + index is bigger than after+first itself because of the array flat() above
883
902
  edges: skus.map((sku, index) => ({
884
903
  node: sku,
885
904
  cursor: (after + index).toString()
@@ -916,17 +935,18 @@ const Query = {
916
935
  const collections = [...brands.map(x => ({ ...x,
917
936
  type: 'brand'
918
937
  })), ...categories];
938
+ const validCollections = collections // Nullable slugs may cause one route to override the other
939
+ .filter(node => Boolean(StoreCollection.slug(node, null, ctx, null)));
919
940
  return {
920
941
  pageInfo: {
921
- hasNextPage: false,
922
- hasPreviousPage: false,
942
+ hasNextPage: validCollections.length - after > first,
943
+ hasPreviousPage: after > 0,
923
944
  startCursor: '0',
924
- endCursor: '0'
945
+ endCursor: (Math.min(first, validCollections.length - after) - 1).toString()
925
946
  },
926
- edges: collections // Nullable slugs may cause one route to override the other
927
- .filter(node => Boolean(StoreCollection.slug(node, null, ctx, null))).slice(after, first).map((node, index) => ({
947
+ edges: validCollections.slice(after, after + first).map((node, index) => ({
928
948
  node,
929
- cursor: index.toString()
949
+ cursor: (after + index).toString()
930
950
  }))
931
951
  };
932
952
  }
@@ -1 +1 @@
1
- {"version":3,"file":"api.cjs.development.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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"}
1
+ {"version":3,"file":"api.cjs.development.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/collection.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 DataLoader from 'dataloader'\nimport pLimit from 'p-limit'\n\nimport { NotFoundError } from '../utils/errors'\nimport type { CollectionPageType } from '../clients/commerce/types/Portal'\nimport type { Options } from '..'\nimport type { Clients } from '../clients'\n\n// Limits concurrent requests to 20 so that they don't timeout\nconst CONCURRENT_REQUESTS_MAX = 20\n\nconst collectionPageTypes = new Set([\n 'brand',\n 'category',\n 'department',\n 'subcategory',\n] as const)\n\nexport const isCollectionPageType = (x: any): x is CollectionPageType =>\n typeof x.pageType === 'string' &&\n collectionPageTypes.has(x.pageType.toLowerCase())\n\nexport const getCollectionLoader = (_: Options, clients: Clients) => {\n const limit = pLimit(CONCURRENT_REQUESTS_MAX)\n\n const loader = async (\n slugs: readonly string[]\n ): Promise<CollectionPageType[]> => {\n return Promise.all(\n slugs.map((slug: string) =>\n limit(async () => {\n const page = await clients.commerce.catalog.portal.pagetype(slug)\n\n if (isCollectionPageType(page)) {\n return page\n }\n\n throw new NotFoundError(\n `Catalog returned ${page.pageType} for slug: ${slug}. This usually happens when there is more than one category with the same name in the same category tree level.`\n )\n })\n )\n )\n }\n\n return new DataLoader<string, CollectionPageType>(loader, {\n // DataLoader is being used to cache requests, not to batch them\n batch: false,\n })\n}\n","import { getSimulationLoader } from './simulation'\nimport { getSkuLoader } from './sku'\nimport { getCollectionLoader } from './collection'\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 const collectionLoader = getCollectionLoader(options, clients)\n\n return {\n skuLoader,\n simulationLoader,\n collectionLoader,\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 { isCollectionPageType } from '../loaders/collection'\nimport { 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 { CollectionPageType } from '../clients/commerce/types/Portal'\n\ntype Root = Brand | (CategoryTree & { level: number }) | CollectionPageType\n\nconst isBrand = (x: any): x is Brand => x.type === 'brand'\n\nconst slugify = (root: Root) => {\n if (isBrand(root)) {\n return baseSlugify(root.name.toLowerCase())\n }\n\n if (isCollectionPageType(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) || isCollectionPageType(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 : isCollectionPageType(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 isCollectionPageType(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 loaders: { collectionLoader },\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 collections = await Promise.all(\n slugs.map((s) => collectionLoader.load(s))\n )\n\n return {\n itemListElement: collections.map((collection, index) => ({\n item: new URL(`https://${collection.url}`).pathname.toLowerCase(),\n name: collection.name,\n position: index + 1,\n })),\n numberOfItems: collections.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 { 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: (_: unknown, { slug }: QueryCollectionArgs, ctx: Context) => {\n const {\n loaders: { collectionLoader },\n } = ctx\n\n return collectionLoader.load(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 // after + index is bigger than after+first itself because of the array flat() above\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 const validCollections = collections\n // Nullable slugs may cause one route to override the other\n .filter((node) => Boolean(StoreCollection.slug(node, null, ctx, null)))\n\n return {\n pageInfo: {\n hasNextPage: validCollections.length - after > first,\n hasPreviousPage: after > 0,\n startCursor: '0',\n endCursor: (\n Math.min(first, validCollections.length - after) - 1\n ).toString(),\n },\n edges: validCollections\n .slice(after, after + first)\n .map((node, index) => ({\n node,\n cursor: (after + 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","CONCURRENT_REQUESTS_MAX","collectionPageTypes","Set","isCollectionPageType","x","pageType","has","toLowerCase","getCollectionLoader","limit","pLimit","slugs","Promise","all","batch","getLoaders","skuLoader","simulationLoader","collectionLoader","StoreAggregateOffer","highPrice","sellingPrice","lowPrice","offerCount","priceCurrency","offers","StoreAggregateRating","ratingValue","reviewCount","slugify","path","rawSlugify","separator","lowercase","isBrand","root","baseSlugify","URL","url","StoreCollection","seo","title","description","metaTagDescription","Title","MetaTagDescription","level","meta","split","segment","breadcrumbList","loaders","segments","collections","s","load","itemListElement","collection","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","browserItemsById","originItemsById","browserItems","originItems","itemsToAdd","itemsToUpdate","maybeOriginItem","push","itemsToDelete","changes","updatedOrderForm","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","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","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","validCollections","min","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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"}