@payloadcms/plugin-ecommerce 3.67.0-internal.87c53da → 3.68.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/collections/addresses/createAddressesCollection.d.ts +1 -5
  2. package/dist/collections/addresses/createAddressesCollection.d.ts.map +1 -1
  3. package/dist/collections/addresses/createAddressesCollection.js +7 -6
  4. package/dist/collections/addresses/createAddressesCollection.js.map +1 -1
  5. package/dist/collections/carts/beforeChange.d.ts.map +1 -1
  6. package/dist/collections/carts/beforeChange.js +13 -1
  7. package/dist/collections/carts/beforeChange.js.map +1 -1
  8. package/dist/collections/carts/createCartsCollection.d.ts +6 -4
  9. package/dist/collections/carts/createCartsCollection.d.ts.map +1 -1
  10. package/dist/collections/carts/createCartsCollection.js +36 -5
  11. package/dist/collections/carts/createCartsCollection.js.map +1 -1
  12. package/dist/collections/carts/hasCartSecretAccess.d.ts +10 -0
  13. package/dist/collections/carts/hasCartSecretAccess.d.ts.map +1 -0
  14. package/dist/collections/carts/hasCartSecretAccess.js +24 -0
  15. package/dist/collections/carts/hasCartSecretAccess.js.map +1 -0
  16. package/dist/collections/orders/createOrdersCollection.d.ts +1 -5
  17. package/dist/collections/orders/createOrdersCollection.d.ts.map +1 -1
  18. package/dist/collections/orders/createOrdersCollection.js +9 -8
  19. package/dist/collections/orders/createOrdersCollection.js.map +1 -1
  20. package/dist/collections/products/createProductsCollection.d.ts +1 -4
  21. package/dist/collections/products/createProductsCollection.d.ts.map +1 -1
  22. package/dist/collections/products/createProductsCollection.js +5 -5
  23. package/dist/collections/products/createProductsCollection.js.map +1 -1
  24. package/dist/collections/transactions/createTransactionsCollection.d.ts +1 -3
  25. package/dist/collections/transactions/createTransactionsCollection.d.ts.map +1 -1
  26. package/dist/collections/transactions/createTransactionsCollection.js +5 -5
  27. package/dist/collections/transactions/createTransactionsCollection.js.map +1 -1
  28. package/dist/collections/variants/createVariantOptionsCollection.d.ts +1 -4
  29. package/dist/collections/variants/createVariantOptionsCollection.d.ts.map +1 -1
  30. package/dist/collections/variants/createVariantOptionsCollection.js +5 -5
  31. package/dist/collections/variants/createVariantOptionsCollection.js.map +1 -1
  32. package/dist/collections/variants/createVariantTypesCollection.d.ts +1 -4
  33. package/dist/collections/variants/createVariantTypesCollection.d.ts.map +1 -1
  34. package/dist/collections/variants/createVariantTypesCollection.js +5 -5
  35. package/dist/collections/variants/createVariantTypesCollection.js.map +1 -1
  36. package/dist/collections/variants/createVariantsCollection/index.d.ts +1 -4
  37. package/dist/collections/variants/createVariantsCollection/index.d.ts.map +1 -1
  38. package/dist/collections/variants/createVariantsCollection/index.js +5 -5
  39. package/dist/collections/variants/createVariantsCollection/index.js.map +1 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +10 -33
  42. package/dist/index.js.map +1 -1
  43. package/dist/react/provider/index.d.ts +3 -0
  44. package/dist/react/provider/index.d.ts.map +1 -1
  45. package/dist/react/provider/index.js +259 -156
  46. package/dist/react/provider/index.js.map +1 -1
  47. package/dist/translations/en.d.ts.map +1 -1
  48. package/dist/translations/en.js +1 -0
  49. package/dist/translations/en.js.map +1 -1
  50. package/dist/types/index.d.ts +43 -25
  51. package/dist/types/index.d.ts.map +1 -1
  52. package/dist/types/index.js.map +1 -1
  53. package/dist/utilities/accessComposition.d.ts +55 -0
  54. package/dist/utilities/accessComposition.d.ts.map +1 -0
  55. package/dist/utilities/accessComposition.js +103 -0
  56. package/dist/utilities/accessComposition.js.map +1 -0
  57. package/dist/utilities/accessComposition.spec.js +803 -0
  58. package/dist/utilities/accessComposition.spec.js.map +1 -0
  59. package/dist/utilities/defaultProductsValidation.spec.js +383 -0
  60. package/dist/utilities/defaultProductsValidation.spec.js.map +1 -0
  61. package/dist/utilities/getCollectionSlugMap.spec.js +159 -0
  62. package/dist/utilities/getCollectionSlugMap.spec.js.map +1 -0
  63. package/dist/utilities/sanitizePluginConfig.d.ts.map +1 -1
  64. package/dist/utilities/sanitizePluginConfig.js +10 -2
  65. package/dist/utilities/sanitizePluginConfig.js.map +1 -1
  66. package/dist/utilities/sanitizePluginConfig.spec.js +515 -0
  67. package/dist/utilities/sanitizePluginConfig.spec.js.map +1 -0
  68. package/package.json +7 -6
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/getCollectionSlugMap.spec.ts"],"sourcesContent":["import type { SanitizedEcommercePluginConfig } from '../types/index.js'\n\nimport { USD } from '../currencies/index.js'\nimport { getCollectionSlugMap } from './getCollectionSlugMap'\n\ndescribe('getCollectionSlugMap', () => {\n const mockAccessConfig = {\n adminOnlyFieldAccess: jest.fn(),\n adminOrPublishedStatus: jest.fn(),\n customerOnlyFieldAccess: jest.fn(),\n isAdmin: jest.fn(),\n isAuthenticated: jest.fn(),\n isDocumentOwner: jest.fn(),\n publicAccess: jest.fn(),\n }\n\n const baseConfig: SanitizedEcommercePluginConfig = {\n access: mockAccessConfig,\n addresses: {\n addressFields: [],\n },\n carts: true,\n currencies: {\n defaultCurrency: 'USD',\n supportedCurrencies: [USD],\n },\n customers: {\n slug: 'users',\n },\n orders: true,\n payments: {\n paymentMethods: [],\n },\n products: true,\n transactions: true,\n }\n\n it('should return default slug map when no overrides are provided', () => {\n const result = getCollectionSlugMap({ sanitizedPluginConfig: baseConfig })\n\n expect(result).toEqual({\n addresses: 'addresses',\n carts: 'carts',\n customers: 'users',\n orders: 'orders',\n products: 'products',\n transactions: 'transactions',\n variantOptions: 'variantOptions',\n variants: 'variants',\n variantTypes: 'variantTypes',\n })\n })\n\n it('should use custom customers slug when provided', () => {\n const config: SanitizedEcommercePluginConfig = {\n ...baseConfig,\n customers: {\n slug: 'custom-users',\n },\n }\n\n const result = getCollectionSlugMap({ sanitizedPluginConfig: config })\n\n expect(result.customers).toBe('custom-users')\n })\n\n it('should apply slugMap overrides', () => {\n const config: SanitizedEcommercePluginConfig = {\n ...baseConfig,\n slugMap: {\n products: 'custom-products',\n variants: 'custom-variants',\n orders: 'custom-orders',\n },\n }\n\n const result = getCollectionSlugMap({ sanitizedPluginConfig: config })\n\n expect(result.products).toBe('custom-products')\n expect(result.variants).toBe('custom-variants')\n expect(result.orders).toBe('custom-orders')\n // Other slugs should remain default\n expect(result.addresses).toBe('addresses')\n expect(result.carts).toBe('carts')\n })\n\n it('should prioritize slugMap overrides over customers slug', () => {\n const config: SanitizedEcommercePluginConfig = {\n ...baseConfig,\n customers: {\n slug: 'my-users',\n },\n slugMap: {\n customers: 'overridden-users',\n },\n }\n\n const result = getCollectionSlugMap({ sanitizedPluginConfig: config })\n\n expect(result.customers).toBe('overridden-users')\n })\n\n it('should handle partial slugMap overrides', () => {\n const config: SanitizedEcommercePluginConfig = {\n ...baseConfig,\n slugMap: {\n products: 'items',\n },\n }\n\n const result = getCollectionSlugMap({ sanitizedPluginConfig: config })\n\n expect(result.products).toBe('items')\n expect(result.addresses).toBe('addresses')\n expect(result.carts).toBe('carts')\n expect(result.customers).toBe('users')\n expect(result.orders).toBe('orders')\n expect(result.transactions).toBe('transactions')\n expect(result.variants).toBe('variants')\n expect(result.variantOptions).toBe('variantOptions')\n expect(result.variantTypes).toBe('variantTypes')\n })\n\n it('should handle empty slugMap', () => {\n const config: SanitizedEcommercePluginConfig = {\n ...baseConfig,\n slugMap: {},\n }\n\n const result = getCollectionSlugMap({ sanitizedPluginConfig: config })\n\n expect(result).toEqual({\n addresses: 'addresses',\n carts: 'carts',\n customers: 'users',\n orders: 'orders',\n products: 'products',\n transactions: 'transactions',\n variantOptions: 'variantOptions',\n variants: 'variants',\n variantTypes: 'variantTypes',\n })\n })\n\n it('should handle undefined slugMap', () => {\n const config: SanitizedEcommercePluginConfig = {\n ...baseConfig,\n slugMap: undefined,\n }\n\n const result = getCollectionSlugMap({ sanitizedPluginConfig: config })\n\n expect(result).toEqual({\n addresses: 'addresses',\n carts: 'carts',\n customers: 'users',\n orders: 'orders',\n products: 'products',\n transactions: 'transactions',\n variantOptions: 'variantOptions',\n variants: 'variants',\n variantTypes: 'variantTypes',\n })\n })\n})\n"],"names":["USD","getCollectionSlugMap","describe","mockAccessConfig","adminOnlyFieldAccess","jest","fn","adminOrPublishedStatus","customerOnlyFieldAccess","isAdmin","isAuthenticated","isDocumentOwner","publicAccess","baseConfig","access","addresses","addressFields","carts","currencies","defaultCurrency","supportedCurrencies","customers","slug","orders","payments","paymentMethods","products","transactions","it","result","sanitizedPluginConfig","expect","toEqual","variantOptions","variants","variantTypes","config","toBe","slugMap","undefined"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitizePluginConfig.d.ts","sourceRoot":"","sources":["../../src/utilities/sanitizePluginConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAA;AAK9F,KAAK,KAAK,GAAG;IACX,YAAY,EAAE,qBAAqB,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,oBAAoB,qBAAsB,KAAK,KAAG,8BAkF9D,CAAA"}
1
+ {"version":3,"file":"sanitizePluginConfig.d.ts","sourceRoot":"","sources":["../../src/utilities/sanitizePluginConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAA;AAK9F,KAAK,KAAK,GAAG;IACX,YAAY,EAAE,qBAAqB,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,oBAAoB,qBAAsB,KAAK,KAAG,8BA6F9D,CAAA"}
@@ -36,7 +36,15 @@ export const sanitizePluginConfig = ({ pluginConfig })=>{
36
36
  };
37
37
  }
38
38
  if (typeof config.carts === 'undefined') {
39
- config.carts = true;
39
+ config.carts = {
40
+ allowGuestCarts: true
41
+ };
42
+ } else if (config.carts === true) {
43
+ config.carts = {
44
+ allowGuestCarts: true
45
+ };
46
+ } else if (typeof config.carts === 'object' && typeof config.carts.allowGuestCarts === 'undefined') {
47
+ config.carts.allowGuestCarts = true;
40
48
  }
41
49
  if (typeof config.orders === 'undefined') {
42
50
  config.orders = true;
@@ -57,7 +65,7 @@ export const sanitizePluginConfig = ({ pluginConfig })=>{
57
65
  }
58
66
  }
59
67
  config.access = {
60
- authenticatedOnly: ({ req: { user } })=>Boolean(user),
68
+ isAuthenticated: ({ req })=>Boolean(req?.user),
61
69
  publicAccess: ()=>true,
62
70
  ...pluginConfig.access
63
71
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/sanitizePluginConfig.ts"],"sourcesContent":["import type { EcommercePluginConfig, SanitizedEcommercePluginConfig } from '../types/index.js'\n\nimport { defaultAddressFields } from '../collections/addresses/defaultAddressFields.js'\nimport { USD } from '../currencies/index.js'\n\ntype Props = {\n pluginConfig: EcommercePluginConfig\n}\n\nexport const sanitizePluginConfig = ({ pluginConfig }: Props): SanitizedEcommercePluginConfig => {\n const config = {\n ...pluginConfig,\n } as Partial<SanitizedEcommercePluginConfig>\n\n if (typeof config.customers === 'undefined') {\n config.customers = {\n slug: 'users',\n }\n }\n\n if (\n typeof config.addresses === 'undefined' ||\n (typeof config.addresses === 'boolean' && config.addresses === true)\n ) {\n config.addresses = {\n addressFields: defaultAddressFields(),\n }\n } else {\n const addressFields =\n (typeof pluginConfig.addresses === 'object' &&\n typeof pluginConfig.addresses.addressFields === 'function' &&\n pluginConfig.addresses.addressFields({\n defaultFields: defaultAddressFields(),\n })) ||\n defaultAddressFields()\n\n config.addresses = {\n ...config.addresses,\n addressFields,\n }\n }\n\n if (!config.currencies) {\n config.currencies = {\n defaultCurrency: 'USD',\n supportedCurrencies: [USD],\n }\n }\n\n if (\n typeof config.inventory === 'undefined' ||\n (typeof config.inventory === 'boolean' && config.inventory === true)\n ) {\n config.inventory = {\n fieldName: 'inventory',\n }\n }\n\n if (typeof config.carts === 'undefined') {\n config.carts = true\n }\n\n if (typeof config.orders === 'undefined') {\n config.orders = true\n }\n\n if (typeof config.transactions === 'undefined') {\n config.transactions = true\n }\n\n if (typeof config.payments === 'undefined') {\n config.payments = {\n paymentMethods: [],\n }\n } else if (!config.payments.paymentMethods) {\n config.payments.paymentMethods = []\n }\n\n if (config.products) {\n if (typeof config.products === 'object' && typeof config.products.variants === 'undefined') {\n config.products.variants = true\n }\n }\n\n config.access = {\n authenticatedOnly: ({ req: { user } }) => Boolean(user),\n publicAccess: () => true,\n ...pluginConfig.access,\n }\n\n return config as SanitizedEcommercePluginConfig\n}\n"],"names":["defaultAddressFields","USD","sanitizePluginConfig","pluginConfig","config","customers","slug","addresses","addressFields","defaultFields","currencies","defaultCurrency","supportedCurrencies","inventory","fieldName","carts","orders","transactions","payments","paymentMethods","products","variants","access","authenticatedOnly","req","user","Boolean","publicAccess"],"mappings":"AAEA,SAASA,oBAAoB,QAAQ,mDAAkD;AACvF,SAASC,GAAG,QAAQ,yBAAwB;AAM5C,OAAO,MAAMC,uBAAuB,CAAC,EAAEC,YAAY,EAAS;IAC1D,MAAMC,SAAS;QACb,GAAGD,YAAY;IACjB;IAEA,IAAI,OAAOC,OAAOC,SAAS,KAAK,aAAa;QAC3CD,OAAOC,SAAS,GAAG;YACjBC,MAAM;QACR;IACF;IAEA,IACE,OAAOF,OAAOG,SAAS,KAAK,eAC3B,OAAOH,OAAOG,SAAS,KAAK,aAAaH,OAAOG,SAAS,KAAK,MAC/D;QACAH,OAAOG,SAAS,GAAG;YACjBC,eAAeR;QACjB;IACF,OAAO;QACL,MAAMQ,gBACJ,AAAC,OAAOL,aAAaI,SAAS,KAAK,YACjC,OAAOJ,aAAaI,SAAS,CAACC,aAAa,KAAK,cAChDL,aAAaI,SAAS,CAACC,aAAa,CAAC;YACnCC,eAAeT;QACjB,MACFA;QAEFI,OAAOG,SAAS,GAAG;YACjB,GAAGH,OAAOG,SAAS;YACnBC;QACF;IACF;IAEA,IAAI,CAACJ,OAAOM,UAAU,EAAE;QACtBN,OAAOM,UAAU,GAAG;YAClBC,iBAAiB;YACjBC,qBAAqB;gBAACX;aAAI;QAC5B;IACF;IAEA,IACE,OAAOG,OAAOS,SAAS,KAAK,eAC3B,OAAOT,OAAOS,SAAS,KAAK,aAAaT,OAAOS,SAAS,KAAK,MAC/D;QACAT,OAAOS,SAAS,GAAG;YACjBC,WAAW;QACb;IACF;IAEA,IAAI,OAAOV,OAAOW,KAAK,KAAK,aAAa;QACvCX,OAAOW,KAAK,GAAG;IACjB;IAEA,IAAI,OAAOX,OAAOY,MAAM,KAAK,aAAa;QACxCZ,OAAOY,MAAM,GAAG;IAClB;IAEA,IAAI,OAAOZ,OAAOa,YAAY,KAAK,aAAa;QAC9Cb,OAAOa,YAAY,GAAG;IACxB;IAEA,IAAI,OAAOb,OAAOc,QAAQ,KAAK,aAAa;QAC1Cd,OAAOc,QAAQ,GAAG;YAChBC,gBAAgB,EAAE;QACpB;IACF,OAAO,IAAI,CAACf,OAAOc,QAAQ,CAACC,cAAc,EAAE;QAC1Cf,OAAOc,QAAQ,CAACC,cAAc,GAAG,EAAE;IACrC;IAEA,IAAIf,OAAOgB,QAAQ,EAAE;QACnB,IAAI,OAAOhB,OAAOgB,QAAQ,KAAK,YAAY,OAAOhB,OAAOgB,QAAQ,CAACC,QAAQ,KAAK,aAAa;YAC1FjB,OAAOgB,QAAQ,CAACC,QAAQ,GAAG;QAC7B;IACF;IAEAjB,OAAOkB,MAAM,GAAG;QACdC,mBAAmB,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAE,EAAE,GAAKC,QAAQD;QAClDE,cAAc,IAAM;QACpB,GAAGxB,aAAamB,MAAM;IACxB;IAEA,OAAOlB;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/sanitizePluginConfig.ts"],"sourcesContent":["import type { EcommercePluginConfig, SanitizedEcommercePluginConfig } from '../types/index.js'\n\nimport { defaultAddressFields } from '../collections/addresses/defaultAddressFields.js'\nimport { USD } from '../currencies/index.js'\n\ntype Props = {\n pluginConfig: EcommercePluginConfig\n}\n\nexport const sanitizePluginConfig = ({ pluginConfig }: Props): SanitizedEcommercePluginConfig => {\n const config = {\n ...pluginConfig,\n } as Partial<SanitizedEcommercePluginConfig>\n\n if (typeof config.customers === 'undefined') {\n config.customers = {\n slug: 'users',\n }\n }\n\n if (\n typeof config.addresses === 'undefined' ||\n (typeof config.addresses === 'boolean' && config.addresses === true)\n ) {\n config.addresses = {\n addressFields: defaultAddressFields(),\n }\n } else {\n const addressFields =\n (typeof pluginConfig.addresses === 'object' &&\n typeof pluginConfig.addresses.addressFields === 'function' &&\n pluginConfig.addresses.addressFields({\n defaultFields: defaultAddressFields(),\n })) ||\n defaultAddressFields()\n\n config.addresses = {\n ...config.addresses,\n addressFields,\n }\n }\n\n if (!config.currencies) {\n config.currencies = {\n defaultCurrency: 'USD',\n supportedCurrencies: [USD],\n }\n }\n\n if (\n typeof config.inventory === 'undefined' ||\n (typeof config.inventory === 'boolean' && config.inventory === true)\n ) {\n config.inventory = {\n fieldName: 'inventory',\n }\n }\n\n if (typeof config.carts === 'undefined') {\n config.carts = {\n allowGuestCarts: true,\n }\n } else if (config.carts === true) {\n config.carts = {\n allowGuestCarts: true,\n }\n } else if (\n typeof config.carts === 'object' &&\n typeof config.carts.allowGuestCarts === 'undefined'\n ) {\n config.carts.allowGuestCarts = true\n }\n\n if (typeof config.orders === 'undefined') {\n config.orders = true\n }\n\n if (typeof config.transactions === 'undefined') {\n config.transactions = true\n }\n\n if (typeof config.payments === 'undefined') {\n config.payments = {\n paymentMethods: [],\n }\n } else if (!config.payments.paymentMethods) {\n config.payments.paymentMethods = []\n }\n\n if (config.products) {\n if (typeof config.products === 'object' && typeof config.products.variants === 'undefined') {\n config.products.variants = true\n }\n }\n\n config.access = {\n isAuthenticated: ({ req }) => Boolean(req?.user),\n publicAccess: () => true,\n ...pluginConfig.access,\n }\n\n return config as SanitizedEcommercePluginConfig\n}\n"],"names":["defaultAddressFields","USD","sanitizePluginConfig","pluginConfig","config","customers","slug","addresses","addressFields","defaultFields","currencies","defaultCurrency","supportedCurrencies","inventory","fieldName","carts","allowGuestCarts","orders","transactions","payments","paymentMethods","products","variants","access","isAuthenticated","req","Boolean","user","publicAccess"],"mappings":"AAEA,SAASA,oBAAoB,QAAQ,mDAAkD;AACvF,SAASC,GAAG,QAAQ,yBAAwB;AAM5C,OAAO,MAAMC,uBAAuB,CAAC,EAAEC,YAAY,EAAS;IAC1D,MAAMC,SAAS;QACb,GAAGD,YAAY;IACjB;IAEA,IAAI,OAAOC,OAAOC,SAAS,KAAK,aAAa;QAC3CD,OAAOC,SAAS,GAAG;YACjBC,MAAM;QACR;IACF;IAEA,IACE,OAAOF,OAAOG,SAAS,KAAK,eAC3B,OAAOH,OAAOG,SAAS,KAAK,aAAaH,OAAOG,SAAS,KAAK,MAC/D;QACAH,OAAOG,SAAS,GAAG;YACjBC,eAAeR;QACjB;IACF,OAAO;QACL,MAAMQ,gBACJ,AAAC,OAAOL,aAAaI,SAAS,KAAK,YACjC,OAAOJ,aAAaI,SAAS,CAACC,aAAa,KAAK,cAChDL,aAAaI,SAAS,CAACC,aAAa,CAAC;YACnCC,eAAeT;QACjB,MACFA;QAEFI,OAAOG,SAAS,GAAG;YACjB,GAAGH,OAAOG,SAAS;YACnBC;QACF;IACF;IAEA,IAAI,CAACJ,OAAOM,UAAU,EAAE;QACtBN,OAAOM,UAAU,GAAG;YAClBC,iBAAiB;YACjBC,qBAAqB;gBAACX;aAAI;QAC5B;IACF;IAEA,IACE,OAAOG,OAAOS,SAAS,KAAK,eAC3B,OAAOT,OAAOS,SAAS,KAAK,aAAaT,OAAOS,SAAS,KAAK,MAC/D;QACAT,OAAOS,SAAS,GAAG;YACjBC,WAAW;QACb;IACF;IAEA,IAAI,OAAOV,OAAOW,KAAK,KAAK,aAAa;QACvCX,OAAOW,KAAK,GAAG;YACbC,iBAAiB;QACnB;IACF,OAAO,IAAIZ,OAAOW,KAAK,KAAK,MAAM;QAChCX,OAAOW,KAAK,GAAG;YACbC,iBAAiB;QACnB;IACF,OAAO,IACL,OAAOZ,OAAOW,KAAK,KAAK,YACxB,OAAOX,OAAOW,KAAK,CAACC,eAAe,KAAK,aACxC;QACAZ,OAAOW,KAAK,CAACC,eAAe,GAAG;IACjC;IAEA,IAAI,OAAOZ,OAAOa,MAAM,KAAK,aAAa;QACxCb,OAAOa,MAAM,GAAG;IAClB;IAEA,IAAI,OAAOb,OAAOc,YAAY,KAAK,aAAa;QAC9Cd,OAAOc,YAAY,GAAG;IACxB;IAEA,IAAI,OAAOd,OAAOe,QAAQ,KAAK,aAAa;QAC1Cf,OAAOe,QAAQ,GAAG;YAChBC,gBAAgB,EAAE;QACpB;IACF,OAAO,IAAI,CAAChB,OAAOe,QAAQ,CAACC,cAAc,EAAE;QAC1ChB,OAAOe,QAAQ,CAACC,cAAc,GAAG,EAAE;IACrC;IAEA,IAAIhB,OAAOiB,QAAQ,EAAE;QACnB,IAAI,OAAOjB,OAAOiB,QAAQ,KAAK,YAAY,OAAOjB,OAAOiB,QAAQ,CAACC,QAAQ,KAAK,aAAa;YAC1FlB,OAAOiB,QAAQ,CAACC,QAAQ,GAAG;QAC7B;IACF;IAEAlB,OAAOmB,MAAM,GAAG;QACdC,iBAAiB,CAAC,EAAEC,GAAG,EAAE,GAAKC,QAAQD,KAAKE;QAC3CC,cAAc,IAAM;QACpB,GAAGzB,aAAaoB,MAAM;IACxB;IAEA,OAAOnB;AACT,EAAC"}
@@ -0,0 +1,515 @@
1
+ import { EUR, USD } from '../currencies/index.js';
2
+ import { sanitizePluginConfig } from './sanitizePluginConfig';
3
+ describe('sanitizePluginConfig', ()=>{
4
+ const mockAccessConfig = {
5
+ adminOnlyFieldAccess: jest.fn(),
6
+ adminOrPublishedStatus: jest.fn(),
7
+ customerOnlyFieldAccess: jest.fn(),
8
+ isAdmin: jest.fn(),
9
+ isAuthenticated: jest.fn(),
10
+ isDocumentOwner: jest.fn()
11
+ };
12
+ const minimalConfig = {
13
+ access: mockAccessConfig,
14
+ customers: {
15
+ slug: 'users'
16
+ }
17
+ };
18
+ describe('customers', ()=>{
19
+ it('should default customers slug to "users" when undefined', ()=>{
20
+ const config = {
21
+ access: mockAccessConfig,
22
+ customers: undefined
23
+ };
24
+ const result = sanitizePluginConfig({
25
+ pluginConfig: config
26
+ });
27
+ expect(result.customers).toEqual({
28
+ slug: 'users'
29
+ });
30
+ });
31
+ it('should preserve custom customers slug', ()=>{
32
+ const config = {
33
+ ...minimalConfig,
34
+ customers: {
35
+ slug: 'custom-users'
36
+ }
37
+ };
38
+ const result = sanitizePluginConfig({
39
+ pluginConfig: config
40
+ });
41
+ expect(result.customers.slug).toBe('custom-users');
42
+ });
43
+ });
44
+ describe('addresses', ()=>{
45
+ it('should create default addresses config when undefined', ()=>{
46
+ const result = sanitizePluginConfig({
47
+ pluginConfig: minimalConfig
48
+ });
49
+ expect(result.addresses).toBeDefined();
50
+ expect(result.addresses.addressFields).toBeDefined();
51
+ expect(Array.isArray(result.addresses.addressFields)).toBe(true);
52
+ expect(result.addresses.addressFields.length).toBeGreaterThan(0);
53
+ });
54
+ it('should create default addresses config when set to true', ()=>{
55
+ const config = {
56
+ ...minimalConfig,
57
+ addresses: true
58
+ };
59
+ const result = sanitizePluginConfig({
60
+ pluginConfig: config
61
+ });
62
+ expect(result.addresses).toBeDefined();
63
+ expect(result.addresses.addressFields).toBeDefined();
64
+ expect(Array.isArray(result.addresses.addressFields)).toBe(true);
65
+ });
66
+ it('should use custom addressFields function', ()=>{
67
+ const customField = {
68
+ name: 'customField',
69
+ type: 'text'
70
+ };
71
+ const config = {
72
+ ...minimalConfig,
73
+ addresses: {
74
+ addressFields: ({ defaultFields })=>[
75
+ ...defaultFields,
76
+ customField
77
+ ]
78
+ }
79
+ };
80
+ const result = sanitizePluginConfig({
81
+ pluginConfig: config
82
+ });
83
+ expect(result.addresses.addressFields).toBeDefined();
84
+ const lastField = result.addresses.addressFields[result.addresses.addressFields.length - 1];
85
+ expect(lastField).toEqual(customField);
86
+ });
87
+ it('should preserve other address config properties', ()=>{
88
+ const config = {
89
+ ...minimalConfig,
90
+ addresses: {
91
+ addressFields: ({ defaultFields })=>defaultFields,
92
+ supportedCountries: [
93
+ {
94
+ label: 'United States',
95
+ value: 'US'
96
+ },
97
+ {
98
+ label: 'Canada',
99
+ value: 'CA'
100
+ }
101
+ ]
102
+ }
103
+ };
104
+ const result = sanitizePluginConfig({
105
+ pluginConfig: config
106
+ });
107
+ expect(result.addresses.supportedCountries).toEqual([
108
+ {
109
+ label: 'United States',
110
+ value: 'US'
111
+ },
112
+ {
113
+ label: 'Canada',
114
+ value: 'CA'
115
+ }
116
+ ]);
117
+ });
118
+ });
119
+ describe('currencies', ()=>{
120
+ it('should default to USD when undefined', ()=>{
121
+ const result = sanitizePluginConfig({
122
+ pluginConfig: minimalConfig
123
+ });
124
+ expect(result.currencies).toEqual({
125
+ defaultCurrency: 'USD',
126
+ supportedCurrencies: [
127
+ USD
128
+ ]
129
+ });
130
+ });
131
+ it('should preserve custom currencies config', ()=>{
132
+ const config = {
133
+ ...minimalConfig,
134
+ currencies: {
135
+ defaultCurrency: 'EUR',
136
+ supportedCurrencies: [
137
+ USD,
138
+ EUR
139
+ ]
140
+ }
141
+ };
142
+ const result = sanitizePluginConfig({
143
+ pluginConfig: config
144
+ });
145
+ expect(result.currencies).toEqual({
146
+ defaultCurrency: 'EUR',
147
+ supportedCurrencies: [
148
+ USD,
149
+ EUR
150
+ ]
151
+ });
152
+ });
153
+ });
154
+ describe('inventory', ()=>{
155
+ it('should default inventory config when undefined', ()=>{
156
+ const result = sanitizePluginConfig({
157
+ pluginConfig: minimalConfig
158
+ });
159
+ expect(result.inventory).toEqual({
160
+ fieldName: 'inventory'
161
+ });
162
+ });
163
+ it('should default inventory config when set to true', ()=>{
164
+ const config = {
165
+ ...minimalConfig,
166
+ inventory: true
167
+ };
168
+ const result = sanitizePluginConfig({
169
+ pluginConfig: config
170
+ });
171
+ expect(result.inventory).toEqual({
172
+ fieldName: 'inventory'
173
+ });
174
+ });
175
+ it('should preserve custom inventory config', ()=>{
176
+ const config = {
177
+ ...minimalConfig,
178
+ inventory: {
179
+ fieldName: 'stock'
180
+ }
181
+ };
182
+ const result = sanitizePluginConfig({
183
+ pluginConfig: config
184
+ });
185
+ expect(result.inventory).toEqual({
186
+ fieldName: 'stock'
187
+ });
188
+ });
189
+ it('should allow disabling inventory with false', ()=>{
190
+ const config = {
191
+ ...minimalConfig,
192
+ inventory: false
193
+ };
194
+ const result = sanitizePluginConfig({
195
+ pluginConfig: config
196
+ });
197
+ expect(result.inventory).toBe(false);
198
+ });
199
+ });
200
+ describe('carts', ()=>{
201
+ it('should default carts to object with allowGuestCarts true when undefined', ()=>{
202
+ const result = sanitizePluginConfig({
203
+ pluginConfig: minimalConfig
204
+ });
205
+ expect(result.carts).toEqual({
206
+ allowGuestCarts: true
207
+ });
208
+ });
209
+ it('should convert carts true to object with allowGuestCarts true', ()=>{
210
+ const config = {
211
+ ...minimalConfig,
212
+ carts: true
213
+ };
214
+ const result = sanitizePluginConfig({
215
+ pluginConfig: config
216
+ });
217
+ expect(result.carts).toEqual({
218
+ allowGuestCarts: true
219
+ });
220
+ });
221
+ it('should preserve carts false', ()=>{
222
+ const config = {
223
+ ...minimalConfig,
224
+ carts: false
225
+ };
226
+ const result = sanitizePluginConfig({
227
+ pluginConfig: config
228
+ });
229
+ expect(result.carts).toBe(false);
230
+ });
231
+ it('should default allowGuestCarts to true when carts is object without it', ()=>{
232
+ const config = {
233
+ ...minimalConfig,
234
+ carts: {}
235
+ };
236
+ const result = sanitizePluginConfig({
237
+ pluginConfig: config
238
+ });
239
+ expect(result.carts).toEqual({
240
+ allowGuestCarts: true
241
+ });
242
+ });
243
+ it('should preserve explicit allowGuestCarts false', ()=>{
244
+ const config = {
245
+ ...minimalConfig,
246
+ carts: {
247
+ allowGuestCarts: false
248
+ }
249
+ };
250
+ const result = sanitizePluginConfig({
251
+ pluginConfig: config
252
+ });
253
+ expect(result.carts).toEqual({
254
+ allowGuestCarts: false
255
+ });
256
+ });
257
+ it('should preserve other carts config properties', ()=>{
258
+ const config = {
259
+ ...minimalConfig,
260
+ carts: {
261
+ allowGuestCarts: false,
262
+ cartsCollectionOverride: jest.fn()
263
+ }
264
+ };
265
+ const result = sanitizePluginConfig({
266
+ pluginConfig: config
267
+ });
268
+ expect(result.carts).toHaveProperty('allowGuestCarts', false);
269
+ expect(result.carts).toHaveProperty('cartsCollectionOverride');
270
+ });
271
+ });
272
+ describe('orders', ()=>{
273
+ it('should default orders to true when undefined', ()=>{
274
+ const result = sanitizePluginConfig({
275
+ pluginConfig: minimalConfig
276
+ });
277
+ expect(result.orders).toBe(true);
278
+ });
279
+ it('should preserve orders config', ()=>{
280
+ const config = {
281
+ ...minimalConfig,
282
+ orders: false
283
+ };
284
+ const result = sanitizePluginConfig({
285
+ pluginConfig: config
286
+ });
287
+ expect(result.orders).toBe(false);
288
+ });
289
+ });
290
+ describe('transactions', ()=>{
291
+ it('should default transactions to true when undefined', ()=>{
292
+ const result = sanitizePluginConfig({
293
+ pluginConfig: minimalConfig
294
+ });
295
+ expect(result.transactions).toBe(true);
296
+ });
297
+ it('should preserve transactions config', ()=>{
298
+ const config = {
299
+ ...minimalConfig,
300
+ transactions: false
301
+ };
302
+ const result = sanitizePluginConfig({
303
+ pluginConfig: config
304
+ });
305
+ expect(result.transactions).toBe(false);
306
+ });
307
+ });
308
+ describe('payments', ()=>{
309
+ it('should default payments to empty array when undefined', ()=>{
310
+ const result = sanitizePluginConfig({
311
+ pluginConfig: minimalConfig
312
+ });
313
+ expect(result.payments).toEqual({
314
+ paymentMethods: []
315
+ });
316
+ });
317
+ it('should default paymentMethods to empty array when not provided', ()=>{
318
+ const config = {
319
+ ...minimalConfig,
320
+ payments: {}
321
+ };
322
+ const result = sanitizePluginConfig({
323
+ pluginConfig: config
324
+ });
325
+ expect(result.payments.paymentMethods).toEqual([]);
326
+ });
327
+ it('should preserve payment methods', ()=>{
328
+ const mockAdapter = {
329
+ name: 'stripe',
330
+ label: 'Stripe'
331
+ };
332
+ const config = {
333
+ ...minimalConfig,
334
+ payments: {
335
+ paymentMethods: [
336
+ mockAdapter
337
+ ]
338
+ }
339
+ };
340
+ const result = sanitizePluginConfig({
341
+ pluginConfig: config
342
+ });
343
+ expect(result.payments.paymentMethods).toEqual([
344
+ mockAdapter
345
+ ]);
346
+ });
347
+ });
348
+ describe('products', ()=>{
349
+ it('should default variants to true when products is object and variants is undefined', ()=>{
350
+ const config = {
351
+ ...minimalConfig,
352
+ products: {}
353
+ };
354
+ const result = sanitizePluginConfig({
355
+ pluginConfig: config
356
+ });
357
+ expect(result.products).toEqual({
358
+ variants: true
359
+ });
360
+ });
361
+ it('should preserve variants config when provided', ()=>{
362
+ const config = {
363
+ ...minimalConfig,
364
+ products: {
365
+ variants: false
366
+ }
367
+ };
368
+ const result = sanitizePluginConfig({
369
+ pluginConfig: config
370
+ });
371
+ expect(result.products).toEqual({
372
+ variants: false
373
+ });
374
+ });
375
+ it('should not modify products when set to true', ()=>{
376
+ const config = {
377
+ ...minimalConfig,
378
+ products: true
379
+ };
380
+ const result = sanitizePluginConfig({
381
+ pluginConfig: config
382
+ });
383
+ expect(result.products).toBe(true);
384
+ });
385
+ it('should not modify products when set to false', ()=>{
386
+ const config = {
387
+ ...minimalConfig,
388
+ products: false
389
+ };
390
+ const result = sanitizePluginConfig({
391
+ pluginConfig: config
392
+ });
393
+ expect(result.products).toBe(false);
394
+ });
395
+ });
396
+ describe('access', ()=>{
397
+ it('should provide default isAuthenticated function', ()=>{
398
+ const result = sanitizePluginConfig({
399
+ pluginConfig: minimalConfig
400
+ });
401
+ expect(result.access.isAuthenticated).toBeDefined();
402
+ expect(typeof result.access.isAuthenticated).toBe('function');
403
+ });
404
+ it('should provide default publicAccess function', ()=>{
405
+ const result = sanitizePluginConfig({
406
+ pluginConfig: minimalConfig
407
+ });
408
+ expect(result.access.publicAccess).toBeDefined();
409
+ expect(typeof result.access.publicAccess).toBe('function');
410
+ });
411
+ it('should allow user-provided access functions to override defaults', ()=>{
412
+ const customIsAuthenticated = jest.fn();
413
+ const customPublicAccess = jest.fn();
414
+ const config = {
415
+ ...minimalConfig,
416
+ access: {
417
+ ...mockAccessConfig,
418
+ isAuthenticated: customIsAuthenticated,
419
+ publicAccess: customPublicAccess
420
+ }
421
+ };
422
+ const result = sanitizePluginConfig({
423
+ pluginConfig: config
424
+ });
425
+ expect(result.access.isAuthenticated).toBe(customIsAuthenticated);
426
+ expect(result.access.publicAccess).toBe(customPublicAccess);
427
+ });
428
+ it('should preserve all user-provided access functions', ()=>{
429
+ const result = sanitizePluginConfig({
430
+ pluginConfig: minimalConfig
431
+ });
432
+ expect(result.access.adminOnlyFieldAccess).toBe(mockAccessConfig.adminOnlyFieldAccess);
433
+ expect(result.access.adminOrPublishedStatus).toBe(mockAccessConfig.adminOrPublishedStatus);
434
+ expect(result.access.customerOnlyFieldAccess).toBe(mockAccessConfig.customerOnlyFieldAccess);
435
+ expect(result.access.isAdmin).toBe(mockAccessConfig.isAdmin);
436
+ expect(result.access.isDocumentOwner).toBe(mockAccessConfig.isDocumentOwner);
437
+ });
438
+ it('default publicAccess should always return true', ()=>{
439
+ const result = sanitizePluginConfig({
440
+ pluginConfig: minimalConfig
441
+ });
442
+ // @ts-expect-error - ignoring for test
443
+ expect(result.access.publicAccess()).toBe(true);
444
+ });
445
+ it('default isAuthenticated should be provided', ()=>{
446
+ const result = sanitizePluginConfig({
447
+ pluginConfig: minimalConfig
448
+ });
449
+ expect(result.access.isAuthenticated).toBeDefined();
450
+ expect(typeof result.access.isAuthenticated).toBe('function');
451
+ });
452
+ });
453
+ describe('complete config', ()=>{
454
+ it('should handle a fully configured plugin', ()=>{
455
+ const fullConfig = {
456
+ access: mockAccessConfig,
457
+ addresses: {
458
+ addressFields: ({ defaultFields })=>defaultFields,
459
+ supportedCountries: [
460
+ {
461
+ label: 'US',
462
+ value: 'US'
463
+ }
464
+ ]
465
+ },
466
+ carts: {
467
+ allowGuestCarts: true
468
+ },
469
+ currencies: {
470
+ defaultCurrency: 'EUR',
471
+ supportedCurrencies: [
472
+ USD,
473
+ EUR
474
+ ]
475
+ },
476
+ customers: {
477
+ slug: 'customers'
478
+ },
479
+ inventory: {
480
+ fieldName: 'stock'
481
+ },
482
+ orders: true,
483
+ payments: {
484
+ paymentMethods: []
485
+ },
486
+ products: {
487
+ variants: true
488
+ },
489
+ slugMap: {
490
+ products: 'items'
491
+ },
492
+ transactions: true
493
+ };
494
+ const result = sanitizePluginConfig({
495
+ pluginConfig: fullConfig
496
+ });
497
+ expect(result.customers.slug).toBe('customers');
498
+ expect(result.currencies.defaultCurrency).toBe('EUR');
499
+ expect(result.inventory).toEqual({
500
+ fieldName: 'stock'
501
+ });
502
+ expect(result.carts).toHaveProperty('allowGuestCarts', true);
503
+ expect(result.orders).toBe(true);
504
+ expect(result.transactions).toBe(true);
505
+ expect(result.products).toEqual({
506
+ variants: true
507
+ });
508
+ expect(result.slugMap).toEqual({
509
+ products: 'items'
510
+ });
511
+ });
512
+ });
513
+ });
514
+
515
+ //# sourceMappingURL=sanitizePluginConfig.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/sanitizePluginConfig.spec.ts"],"sourcesContent":["import type { EcommercePluginConfig } from '../types/index.js'\n\nimport { EUR, USD } from '../currencies/index.js'\nimport { sanitizePluginConfig } from './sanitizePluginConfig'\n\ndescribe('sanitizePluginConfig', () => {\n const mockAccessConfig = {\n adminOnlyFieldAccess: jest.fn(),\n adminOrPublishedStatus: jest.fn(),\n customerOnlyFieldAccess: jest.fn(),\n isAdmin: jest.fn(),\n isAuthenticated: jest.fn(),\n isDocumentOwner: jest.fn(),\n }\n\n const minimalConfig: EcommercePluginConfig = {\n access: mockAccessConfig,\n customers: {\n slug: 'users',\n },\n }\n\n describe('customers', () => {\n it('should default customers slug to \"users\" when undefined', () => {\n const config: EcommercePluginConfig = {\n access: mockAccessConfig,\n customers: undefined as any,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.customers).toEqual({\n slug: 'users',\n })\n })\n\n it('should preserve custom customers slug', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n customers: {\n slug: 'custom-users',\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.customers.slug).toBe('custom-users')\n })\n })\n\n describe('addresses', () => {\n it('should create default addresses config when undefined', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.addresses).toBeDefined()\n expect(result.addresses.addressFields).toBeDefined()\n expect(Array.isArray(result.addresses.addressFields)).toBe(true)\n expect(result.addresses.addressFields.length).toBeGreaterThan(0)\n })\n\n it('should create default addresses config when set to true', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n addresses: true,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.addresses).toBeDefined()\n expect(result.addresses.addressFields).toBeDefined()\n expect(Array.isArray(result.addresses.addressFields)).toBe(true)\n })\n\n it('should use custom addressFields function', () => {\n const customField = {\n name: 'customField',\n type: 'text' as const,\n }\n\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n addresses: {\n addressFields: ({ defaultFields }) => [...defaultFields, customField],\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.addresses.addressFields).toBeDefined()\n const lastField = result.addresses.addressFields[result.addresses.addressFields.length - 1]\n expect(lastField).toEqual(customField)\n })\n\n it('should preserve other address config properties', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n addresses: {\n addressFields: ({ defaultFields }) => defaultFields,\n supportedCountries: [\n { label: 'United States', value: 'US' },\n { label: 'Canada', value: 'CA' },\n ],\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.addresses.supportedCountries).toEqual([\n { label: 'United States', value: 'US' },\n { label: 'Canada', value: 'CA' },\n ])\n })\n })\n\n describe('currencies', () => {\n it('should default to USD when undefined', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.currencies).toEqual({\n defaultCurrency: 'USD',\n supportedCurrencies: [USD],\n })\n })\n\n it('should preserve custom currencies config', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n currencies: {\n defaultCurrency: 'EUR',\n supportedCurrencies: [USD, EUR],\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.currencies).toEqual({\n defaultCurrency: 'EUR',\n supportedCurrencies: [USD, EUR],\n })\n })\n })\n\n describe('inventory', () => {\n it('should default inventory config when undefined', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.inventory).toEqual({\n fieldName: 'inventory',\n })\n })\n\n it('should default inventory config when set to true', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n inventory: true,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.inventory).toEqual({\n fieldName: 'inventory',\n })\n })\n\n it('should preserve custom inventory config', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n inventory: {\n fieldName: 'stock',\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.inventory).toEqual({\n fieldName: 'stock',\n })\n })\n\n it('should allow disabling inventory with false', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n inventory: false,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.inventory).toBe(false)\n })\n })\n\n describe('carts', () => {\n it('should default carts to object with allowGuestCarts true when undefined', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.carts).toEqual({\n allowGuestCarts: true,\n })\n })\n\n it('should convert carts true to object with allowGuestCarts true', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n carts: true,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.carts).toEqual({\n allowGuestCarts: true,\n })\n })\n\n it('should preserve carts false', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n carts: false,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.carts).toBe(false)\n })\n\n it('should default allowGuestCarts to true when carts is object without it', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n carts: {} as any,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.carts).toEqual({\n allowGuestCarts: true,\n })\n })\n\n it('should preserve explicit allowGuestCarts false', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n carts: {\n allowGuestCarts: false,\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.carts).toEqual({\n allowGuestCarts: false,\n })\n })\n\n it('should preserve other carts config properties', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n carts: {\n allowGuestCarts: false,\n cartsCollectionOverride: jest.fn() as any,\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.carts).toHaveProperty('allowGuestCarts', false)\n expect(result.carts).toHaveProperty('cartsCollectionOverride')\n })\n })\n\n describe('orders', () => {\n it('should default orders to true when undefined', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.orders).toBe(true)\n })\n\n it('should preserve orders config', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n orders: false,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.orders).toBe(false)\n })\n })\n\n describe('transactions', () => {\n it('should default transactions to true when undefined', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.transactions).toBe(true)\n })\n\n it('should preserve transactions config', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n transactions: false,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.transactions).toBe(false)\n })\n })\n\n describe('payments', () => {\n it('should default payments to empty array when undefined', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.payments).toEqual({\n paymentMethods: [],\n })\n })\n\n it('should default paymentMethods to empty array when not provided', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n payments: {} as any,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.payments.paymentMethods).toEqual([])\n })\n\n it('should preserve payment methods', () => {\n const mockAdapter = {\n name: 'stripe',\n label: 'Stripe',\n } as any\n\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n payments: {\n paymentMethods: [mockAdapter],\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.payments.paymentMethods).toEqual([mockAdapter])\n })\n })\n\n describe('products', () => {\n it('should default variants to true when products is object and variants is undefined', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n products: {},\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.products).toEqual({\n variants: true,\n })\n })\n\n it('should preserve variants config when provided', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n products: {\n variants: false,\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.products).toEqual({\n variants: false,\n })\n })\n\n it('should not modify products when set to true', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n products: true,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.products).toBe(true)\n })\n\n it('should not modify products when set to false', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n products: false,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.products).toBe(false)\n })\n })\n\n describe('access', () => {\n it('should provide default isAuthenticated function', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.access.isAuthenticated).toBeDefined()\n expect(typeof result.access.isAuthenticated).toBe('function')\n })\n\n it('should provide default publicAccess function', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.access.publicAccess).toBeDefined()\n expect(typeof result.access.publicAccess).toBe('function')\n })\n\n it('should allow user-provided access functions to override defaults', () => {\n const customIsAuthenticated = jest.fn()\n const customPublicAccess = jest.fn()\n\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n access: {\n ...mockAccessConfig,\n isAuthenticated: customIsAuthenticated,\n publicAccess: customPublicAccess,\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.access.isAuthenticated).toBe(customIsAuthenticated)\n expect(result.access.publicAccess).toBe(customPublicAccess)\n })\n\n it('should preserve all user-provided access functions', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.access.adminOnlyFieldAccess).toBe(mockAccessConfig.adminOnlyFieldAccess)\n expect(result.access.adminOrPublishedStatus).toBe(mockAccessConfig.adminOrPublishedStatus)\n expect(result.access.customerOnlyFieldAccess).toBe(mockAccessConfig.customerOnlyFieldAccess)\n expect(result.access.isAdmin).toBe(mockAccessConfig.isAdmin)\n expect(result.access.isDocumentOwner).toBe(mockAccessConfig.isDocumentOwner)\n })\n\n it('default publicAccess should always return true', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n // @ts-expect-error - ignoring for test\n expect(result.access.publicAccess()).toBe(true)\n })\n\n it('default isAuthenticated should be provided', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.access.isAuthenticated).toBeDefined()\n expect(typeof result.access.isAuthenticated).toBe('function')\n })\n })\n\n describe('complete config', () => {\n it('should handle a fully configured plugin', () => {\n const fullConfig: EcommercePluginConfig = {\n access: mockAccessConfig,\n addresses: {\n addressFields: ({ defaultFields }) => defaultFields,\n supportedCountries: [{ label: 'US', value: 'US' }],\n },\n carts: {\n allowGuestCarts: true,\n },\n currencies: {\n defaultCurrency: 'EUR',\n supportedCurrencies: [USD, EUR],\n },\n customers: {\n slug: 'customers',\n },\n inventory: {\n fieldName: 'stock',\n },\n orders: true,\n payments: {\n paymentMethods: [],\n },\n products: {\n variants: true,\n },\n slugMap: {\n products: 'items',\n },\n transactions: true,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: fullConfig })\n\n expect(result.customers.slug).toBe('customers')\n expect(result.currencies.defaultCurrency).toBe('EUR')\n expect(result.inventory).toEqual({ fieldName: 'stock' })\n expect(result.carts).toHaveProperty('allowGuestCarts', true)\n expect(result.orders).toBe(true)\n expect(result.transactions).toBe(true)\n expect(result.products).toEqual({ variants: true })\n expect(result.slugMap).toEqual({ products: 'items' })\n })\n })\n})\n"],"names":["EUR","USD","sanitizePluginConfig","describe","mockAccessConfig","adminOnlyFieldAccess","jest","fn","adminOrPublishedStatus","customerOnlyFieldAccess","isAdmin","isAuthenticated","isDocumentOwner","minimalConfig","access","customers","slug","it","config","undefined","result","pluginConfig","expect","toEqual","toBe","addresses","toBeDefined","addressFields","Array","isArray","length","toBeGreaterThan","customField","name","type","defaultFields","lastField","supportedCountries","label","value","currencies","defaultCurrency","supportedCurrencies","inventory","fieldName","carts","allowGuestCarts","cartsCollectionOverride","toHaveProperty","orders","transactions","payments","paymentMethods","mockAdapter","products","variants","publicAccess","customIsAuthenticated","customPublicAccess","fullConfig","slugMap"],"mappings":"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"}