@kosdev-code/kos-freestyle-sdk 3.0.26 → 3.0.28

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 (51) hide show
  1. package/{extension-utils-D5XZ8LIl.cjs → extension-utils-D847XVCc.cjs} +2 -2
  2. package/{extension-utils-D5XZ8LIl.cjs.map → extension-utils-D847XVCc.cjs.map} +1 -1
  3. package/{extension-utils-BGWhQNVU.js → extension-utils-H-ll8ljh.js} +2 -2
  4. package/{extension-utils-BGWhQNVU.js.map → extension-utils-H-ll8ljh.js.map} +1 -1
  5. package/index.cjs +3 -3
  6. package/index.js +3 -3
  7. package/models/models/agitation-required-trouble/agitation-required-trouble-model.d.ts +12 -77
  8. package/models/models/agitation-required-trouble/agitation-required-trouble-model.d.ts.map +1 -1
  9. package/models/models/carb-agitator/carb-agitator-model.d.ts +1 -20
  10. package/models/models/carb-agitator/carb-agitator-model.d.ts.map +1 -1
  11. package/models/models/carb-agitator/services/carb-tank-services.d.ts +1 -14
  12. package/models/models/carb-agitator/services/carb-tank-services.d.ts.map +1 -1
  13. package/models/models/cartridge-agitator/cartridge-agitator-container-registration.d.ts +10 -74
  14. package/models/models/cartridge-agitator/cartridge-agitator-container-registration.d.ts.map +1 -1
  15. package/models/models/cartridge-agitator/cartridge-agitator-registration.d.ts +10 -76
  16. package/models/models/cartridge-agitator/cartridge-agitator-registration.d.ts.map +1 -1
  17. package/models/models/fcm-pump/fcm-pump-registration.d.ts +10 -74
  18. package/models/models/fcm-pump/fcm-pump-registration.d.ts.map +1 -1
  19. package/models/models/freestyle-assembly/freestyle-assembly-registration.d.ts +10 -76
  20. package/models/models/freestyle-assembly/freestyle-assembly-registration.d.ts.map +1 -1
  21. package/models/models/freestyle-holder/freestyle-holder-registration.d.ts +10 -74
  22. package/models/models/freestyle-holder/freestyle-holder-registration.d.ts.map +1 -1
  23. package/models/models/freestyle-nozzle/freestyle-nozzle-registration.d.ts +10 -74
  24. package/models/models/freestyle-nozzle/freestyle-nozzle-registration.d.ts.map +1 -1
  25. package/models/models/freestyle-pump/freestyle-pump-registration.d.ts +10 -74
  26. package/models/models/freestyle-pump/freestyle-pump-registration.d.ts.map +1 -1
  27. package/models/models/remote-tray/remote-tray-container-registration.d.ts +10 -74
  28. package/models/models/remote-tray/remote-tray-container-registration.d.ts.map +1 -1
  29. package/models/models/remote-tray/remote-tray-model.d.ts +8 -89
  30. package/models/models/remote-tray/remote-tray-model.d.ts.map +1 -1
  31. package/models/models/remote-tray/remote-tray-registration.d.ts +10 -77
  32. package/models/models/remote-tray/remote-tray-registration.d.ts.map +1 -1
  33. package/models/models/spm-pump/spm-pump-registration.d.ts +10 -74
  34. package/models/models/spm-pump/spm-pump-registration.d.ts.map +1 -1
  35. package/models/utils/extensions/assembly/types.d.ts +4 -87
  36. package/models/utils/extensions/assembly/types.d.ts.map +1 -1
  37. package/models.cjs +2 -2
  38. package/models.js +2 -2
  39. package/package.json +2 -2
  40. package/{service-BCeBcq6r.js → service-BDbUdYS7.js} +9 -27
  41. package/service-BDbUdYS7.js.map +1 -0
  42. package/{service-DP30iIee.cjs → service-C8lk9GgD.cjs} +9 -27
  43. package/service-C8lk9GgD.cjs.map +1 -0
  44. package/ui.cjs +1 -1
  45. package/ui.js +1 -1
  46. package/{use-nutrition-info-BCn3S1KP.js → use-nutrition-info-CFICkr6p.js} +2 -2
  47. package/{use-nutrition-info-BCn3S1KP.js.map → use-nutrition-info-CFICkr6p.js.map} +1 -1
  48. package/{use-nutrition-info-jT0h49sO.cjs → use-nutrition-info-Cy9rRWLz.cjs} +2 -2
  49. package/{use-nutrition-info-jT0h49sO.cjs.map → use-nutrition-info-Cy9rRWLz.cjs.map} +1 -1
  50. package/service-BCeBcq6r.js.map +0 -1
  51. package/service-DP30iIee.cjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- const service = require("./service-DP30iIee.cjs");
2
+ const service = require("./service-C8lk9GgD.cjs");
3
3
  const kosDispenseSdk = require("@kosdev-code/kos-dispense-sdk");
4
4
  const kosUiSdk = require("@kosdev-code/kos-ui-sdk");
5
5
  const index$3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
@@ -341,4 +341,4 @@ exports.index = index$3;
341
341
  exports.index$1 = index$2;
342
342
  exports.index$2 = index$1;
343
343
  exports.index$3 = index;
344
- //# sourceMappingURL=extension-utils-D5XZ8LIl.cjs.map
344
+ //# sourceMappingURL=extension-utils-D847XVCc.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"extension-utils-D5XZ8LIl.cjs","sources":["../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/assets.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/beverage-screen.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/beverages.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/brand-screen.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/brands.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/copy-input.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/flavors.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/util/locate-brand.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/util/process-related-brand.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/related-brands.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/freestyle-loader.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/ingredient/model-extension.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/pourable/select-pourable-mapper.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/trouble/trouble-utils.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extension-utils.ts"],"sourcesContent":["import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type { Asset, AvailabilityContext, UiSchemaResponse } from \"../types\";\n\nconst assetReducer = (acc: Record<string, Asset>, asset: Asset) => {\n acc[asset.dbId.toString()] = asset;\n return acc;\n};\n\n/**\n * Middleware that will normalize the assets array into a dictionary\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const assetsMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const assets = input.assets.reduce(assetReducer, {} as Record<string, Asset>);\n context.result = { ...context.result, assets };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type {\n AvailabilityContext,\n BeverageScreen,\n BeverageScreenData,\n UiSchemaResponse,\n} from \"../types\";\n\nfunction organizeBeverageData(\n jsonData: Record<string, any>\n): BeverageScreenData {\n const beverageData: BeverageScreenData = {};\n\n for (const key in jsonData) {\n // eslint-disable-next-line no-prototype-builtins\n if (jsonData.hasOwnProperty(key) && key.includes(\"slot\")) {\n const relatedBrand = key.includes(\"slotrb\");\n if (!relatedBrand) {\n const slot = key.split(\".\")[1]; // Extracting the slot number\n const beverageId = jsonData[`slot.${slot}.beverage`];\n\n if (beverageId) {\n // eslint-disable-next-line max-depth\n if (!beverageData[beverageId]) {\n beverageData[beverageId] = {};\n }\n\n beverageData[beverageId].rank = slot;\n // Removing the slot.x part from the key and adding to the object\n const beverageKey = key.replace(`slot.${slot}.`, \"\");\n beverageData[beverageId][beverageKey] = jsonData[key];\n }\n }\n }\n }\n\n return beverageData;\n}\nconst beverageScreenReducer =\n (input: UiSchemaResponse) =>\n (acc: Record<string, BeverageScreen>, curr: string) => {\n acc[curr] = input.beverageScreens[curr];\n acc[curr].beverages = organizeBeverageData(acc[curr]);\n return acc;\n };\n\n/**\n * Middleware that will normalize the beverage screen data. The middleware will perform the following:\n * 1. Organize the beverage screen data into a dictionary keyed by the brand id\n * 2. Adds a beverages property to the beverage screen data that contains the organized beverage data\n * 3. Processes related brands for each beverage screen\n *\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const beverageScreenMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const beverageScreens = Object.keys(input.beverageScreens).reduce(\n beverageScreenReducer(input),\n input.beverageScreens\n );\n context.result = { ...context.result, beverageScreens };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type { AvailabilityContext, Beverage, UiSchemaResponse } from \"../types\";\n\nconst beverageReducer = (acc: Record<string, Beverage>, beverage: Beverage) => {\n acc[beverage.beverageId.toString()] = beverage;\n return acc;\n};\n\n/**\n * Middleware that will normalize the brands array into a dictionary\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const beveragesMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const beverages = input.beverages.reduce(\n beverageReducer,\n {} as Record<string, Beverage>\n );\n const beverageMap = input.beverages.reduce((acc, curr) => {\n acc[curr.dbId.toString()] = curr.beverageId.toString();\n return acc;\n }, {} as Record<string, string>);\n context.result = { ...context.result, beverages, beverageMap };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type {\n AvailabilityContext,\n BrandScreenData,\n UiSchemaResponse,\n} from \"../types\";\n\nfunction organizeBrandData(jsonData: Record<string, any>): Record<string, any> {\n const brandScreenData: BrandScreenData = { rank: 0 };\n\n for (const key in jsonData) {\n // eslint-disable-next-line no-prototype-builtins\n if (jsonData.hasOwnProperty(key) && key.includes(\"slot\")) {\n const slot = key.split(\".\")[1]; // Extracting the slot number\n const position = slot.split(\":\")[1]; // Extracting the position number\n const brandId = jsonData[`slot.${slot}.brand`];\n\n if (brandId) {\n if (!brandScreenData[brandId]) {\n brandScreenData[brandId] = {\n rank: Number(position),\n };\n }\n\n // Removing the slot.x part from the key and adding to the object\n const brandKey = key.replace(`slot.${slot}.`, \"\");\n brandScreenData[brandId][brandKey] = jsonData[key];\n }\n }\n }\n\n return brandScreenData;\n}\nexport const brandScreenMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const brandScreen = organizeBrandData(input.brandScreen);\n context.result = { ...context.result, brandScreen };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type { AvailabilityContext, Brand, UiSchemaResponse } from \"../types\";\n\nconst brandReducer = (acc: Record<string, Brand>, brand: Brand) => {\n acc[brand.dbId.toString()] = brand;\n return acc;\n};\n\n/**\n * Middleware that will normalize the brands array into a dictionary\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const brandsMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const brands = input.brands.reduce(brandReducer, {} as Record<string, Brand>);\n context.result = { ...context.result, brands };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\n\nexport const copyMiddleware: Middleware<any, any> = async (context, next) => {\n context.result = { ...context.data };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type { AvailabilityContext, Flavor, UiSchemaResponse } from \"../types\";\n\nconst flavorReducer = (acc: Record<string, Flavor>, flavor: Flavor) => {\n acc[flavor.dbId.toString()] = flavor;\n return acc;\n};\n\n/**\n * Middleware that will normalize the flavors array into a dictionary\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const flavorsMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const flavors = input.flavors.reduce(\n flavorReducer,\n {} as Record<string, Flavor>\n );\n context.result = { ...context.result, flavors };\n await next();\n};\n","export function locateRelatedBrand(\n jsonData: Record<string, any>,\n slot: string\n) {\n const relatedBrand = jsonData[`slotrb:${slot}.brand`];\n return relatedBrand;\n}\n","import type { BeverageScreenData } from \"../types\";\n\nexport const processRelatedBrand =\n (json: Record<string, any>) =>\n (\n beverageData: BeverageScreenData,\n brandId: string,\n slot: string,\n key: string\n ) => {\n if (!beverageData.relatedBrand) {\n beverageData.relatedBrand = {};\n }\n\n if (!beverageData.relatedBrand[brandId]) {\n beverageData.relatedBrand[brandId] = {\n rank: slot,\n };\n }\n\n const beverageKey = key.replace(`slotrb:${slot}.`, \"\");\n beverageData.relatedBrand[brandId][beverageKey] = json[key];\n };\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type {\n AvailabilityContext,\n BeverageScreen,\n BeverageScreenData,\n UiSchemaResponse,\n} from \"../types\";\nimport { locateRelatedBrand } from \"../util/locate-brand\";\nimport { processRelatedBrand } from \"../util/process-related-brand\";\n\nfunction organizeBeverageData(\n jsonData: Record<string, any>\n): BeverageScreenData {\n const beverageData: BeverageScreenData = {};\n\n for (const key in jsonData) {\n // eslint-disable-next-line no-prototype-builtins\n if (jsonData.hasOwnProperty(key) && key.includes(\"slot\")) {\n const relatedBrand = key.includes(\"slotrb\");\n if (relatedBrand) {\n const slot = key.split(\":\")[1].split(\".\")[0]; // Extracting the slot number\n const relatedBrand = locateRelatedBrand(jsonData, slot);\n processRelatedBrand(jsonData)(beverageData, relatedBrand, slot, key);\n }\n }\n }\n\n return beverageData;\n}\nconst beverageScreenReducer =\n (input: UiSchemaResponse) =>\n (acc: Record<string, BeverageScreen>, curr: string) => {\n acc[curr] = input.beverageScreens[curr];\n acc[curr].beverages = {\n ...acc[curr].beverages,\n ...organizeBeverageData(acc[curr]),\n };\n return acc;\n };\n\n/**\n * Middleware that will normalize the beverage screen data. The middleware will perform the following:\n * 1. Organize the beverage screen data into a dictionary keyed by the brand id\n * 2. Adds a beverages property to the beverage screen data that contains the organized beverage data\n * 3. Processes related brands for each beverage screen\n *\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const relatedBrandMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const beverageScreens = Object.keys(input.beverageScreens).reduce(\n beverageScreenReducer(input),\n input.beverageScreens\n );\n context.result = { ...context.result, beverageScreens };\n await next();\n};\n","import {\n kosFetch,\n processMiddleware,\n type DataLoader,\n type Middleware,\n} from \"@kosdev-code/kos-ui-sdk\";\nimport { assetsMiddleware } from \"./middleware/assets\";\nimport { beverageScreenMiddleware } from \"./middleware/beverage-screen\";\nimport { beveragesMiddleware } from \"./middleware/beverages\";\nimport { brandScreenMiddleware } from \"./middleware/brand-screen\";\nimport { brandsMiddleware } from \"./middleware/brands\";\nimport { copyMiddleware } from \"./middleware/copy-input\";\nimport { flavorsMiddleware } from \"./middleware/flavors\";\nimport { relatedBrandMiddleware } from \"./middleware/related-brands\";\nimport type { AvailabilityContext, UiSchemaResponse } from \"./types\";\n\nexport const transformAvailabilityData = async (\n input: UiSchemaResponse,\n additionalMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n >[] = [],\n replace = false\n): Promise<AvailabilityContext> => {\n const middleware = replace\n ? [...additionalMiddleware]\n : [\n copyMiddleware,\n assetsMiddleware,\n flavorsMiddleware,\n beveragesMiddleware,\n brandsMiddleware,\n beverageScreenMiddleware,\n relatedBrandMiddleware,\n brandScreenMiddleware,\n ...additionalMiddleware,\n ];\n const availabilityContext = await processMiddleware<\n UiSchemaResponse,\n AvailabilityContext\n >(input, middleware);\n\n return availabilityContext;\n};\n\n/**\n * Props for the freestyle availability loader\n */\nexport interface AvailabilityLoaderProps {\n /** the url to send the request for the UiSchemaData. Defaults to http://localhost:8081/system/cui/core.json */\n url?: string;\n\n /** additional middlewares to execute as part of the data processing */\n middleware?: Middleware<UiSchemaResponse, AvailabilityContext>[];\n\n /** if true, replace the default middleware with the provided middleware */\n replace?: boolean;\n}\n/**\n * Utility method to load the freestyle brandset data into the availability context.\n *\n * This loader will retrieve the UI Schema from the provided URL and transform it into\n * a format that can be used to populate the availability brands and beverages with UI schema\n * data.\n *\n * With this data, the availability models can have access to the brandset assets for\n * brands, beverages and flavours.\n *\n *\n * @param props\n * @returns A DataLoader function that will load the availability context\n */\nexport const freestyleAvailabilityLoader =\n ({\n url = \"http://localhost:8081/system/cui/core.json\",\n middleware = [],\n replace = false,\n }: AvailabilityLoaderProps = {}): DataLoader =>\n async (): Promise<AvailabilityContext> => {\n const schema = await kosFetch(url);\n if (schema.ok) {\n const response = await schema.json<UiSchemaResponse>();\n if (!response) {\n throw new Error(\"Failed to parse availability context\");\n }\n return await transformAvailabilityData(response, middleware, replace);\n }\n throw new Error(\"Failed to load availability context\");\n };\n","import {\n DataMapper,\n IndexExtension,\n PropertyMapper,\n} from \"@kosdev-code/kos-ui-sdk\";\nimport type {\n FreestyleIngredientData,\n FreestyleIngredientModelData,\n FreestyleIngredientResponseData,\n} from \"../../../models/types/ingredients\";\n\nexport const ingredientDataMapper: DataMapper = async (\n data: FreestyleIngredientResponseData\n) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { id, name, ...rest } = data;\n const response: FreestyleIngredientData = {\n ...rest,\n ingredientMacro: rest.bib && !rest.sweetener ? \"macro\" : \"micro\",\n };\n return response;\n};\n\nexport const ingredientIndexExtension: IndexExtension<FreestyleIngredientModelData> =\n {\n macro: \"ingredientMacro\",\n };\nexport const ingredientCategoryMapper: PropertyMapper = (\n ingredientData: FreestyleIngredientResponseData\n) => ingredientData.type;\n","import type { SelectedPourable } from \"@kosdev-code/kos-dispense-sdk\";\n\nexport const pourableRequestMapper = async (data: SelectedPourable) => {\n return {\n bevId: data.beverage?.rawId,\n };\n};\n","import type { TroubleServices } from \"@kosdev-code/kos-ui-sdk\";\n\ntype TroubleResponse = TroubleServices.TroubleResponse<{ flex: any }>;\n\ninterface RankAwareTrouble {\n rank: number;\n}\n\ninterface RoleAwareTrouble {\n visibleRole: string;\n}\n\ninterface ColorAwareTrouble {\n color: string;\n}\n\nconst isRankedInfo = (i: any): i is RankAwareTrouble => i?.rank !== undefined;\n\nconst isRoleAwareInfo = (i: any): i is RoleAwareTrouble =>\n i?.visibleRole !== undefined;\n\nconst isColorAwareInfo = (i: any): i is ColorAwareTrouble =>\n i?.color !== undefined;\n\nexport const freestyleTroubleRankMapper = (trouble: TroubleResponse) => {\n const info = trouble.attrs?.flex;\n if (isRankedInfo(info)) {\n return info.rank; // return the rank\n }\n return 0; // return 0 if not ranked\n};\n\nexport const freestyleTroubleColorMapper = (trouble: TroubleResponse) => {\n const info = trouble.attrs?.flex;\n if (isColorAwareInfo(info)) {\n return info.color; // return the color\n }\n return \"orange\"; // return ORANGE if no color defined\n};\n\nexport const freestyleTroubleRoleMapper = (trouble: TroubleResponse) => {\n const info = trouble.attrs?.flex;\n if (isRoleAwareInfo(info)) {\n return info.visibleRole; // return the role\n }\n return \"TECHNICIAN\"; // return empty if no role\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { DispenseExtensionManager } from \"@kosdev-code/kos-dispense-sdk\";\nimport {\n CoreExtensionManager,\n EXTENSION_TROUBLE_DATA_MAPPER,\n ExtensionManager,\n KosFeatureFlags,\n type TroubleModel,\n} from \"@kosdev-code/kos-ui-sdk\";\nimport type { AgitationRequiredTroubleIface } from \"../models/cartridge-agitator/types\";\nimport { FEATURE_SUPPORTS_ICE } from \"../models/freestyle-assembly/freestyle-assembly-model\";\nimport { freestyleAssemblyDataMapper } from \"./extensions/assembly/assembly-data-mapper\";\nimport {\n freestyleAvailabilityLoader,\n type AvailabilityLoaderProps,\n} from \"./extensions/availability/freestyle-loader\";\nimport {\n ingredientDataMapper,\n ingredientIndexExtension,\n} from \"./extensions/ingredient\";\nimport { pourableRequestMapper } from \"./extensions/pourable/select-pourable-mapper\";\nimport {\n freestyleTroubleColorMapper,\n freestyleTroubleRankMapper,\n freestyleTroubleRoleMapper,\n} from \"./extensions/trouble/trouble-utils\";\nexport const EXTENSION_PLUGIN_VISIBILITY = \"pluginVisibility\";\n\nexport class FreestyleExtensionManager {\n core: CoreExtensionManager;\n dispense: DispenseExtensionManager;\n constructor(core: CoreExtensionManager, dispense: DispenseExtensionManager) {\n this.core = core;\n this.dispense = dispense;\n }\n\n /**\n * Loads the core brandset data into a format that can be consumed by the\n * freestyle models.\n * */\n registerFreestyleBrandsetReader(props: AvailabilityLoaderProps = {}) {\n this.dispense.registerAvailabilityLoader(\n freestyleAvailabilityLoader(props)\n );\n\n return this;\n }\n\n registerFreestylePourableMapper() {\n this.dispense.registerSelectedPourableDataMapper(pourableRequestMapper);\n }\n\n registerFreestyleAssemblyMapper() {\n this.dispense.registerAssemblyDataMapper(freestyleAssemblyDataMapper);\n }\n\n registerFreestyleIngredientIndex() {\n this.dispense.registerIngredientIndex(ingredientIndexExtension);\n }\n\n registerFreestyleIngredientDataMapper() {\n this.dispense.registerIngredientDataMapper(ingredientDataMapper);\n }\n\n registerFreestyleColorMapper() {\n this.core.registerTroubleColorMapper(freestyleTroubleColorMapper);\n }\n\n registerFreestyleRankMapper() {\n this.core.registerTroubleRankMapper(freestyleTroubleRankMapper);\n }\n\n registerFreestyleRoleMapper() {\n this.core.registerTroubleRoleMapper(freestyleTroubleRoleMapper);\n }\n\n registerFreestyleIceAgitator() {\n ExtensionManager[EXTENSION_PLUGIN_VISIBILITY].register(\n EXTENSION_PLUGIN_VISIBILITY,\n (key) =>\n key !== \"iceAgitator\" ||\n KosFeatureFlags.isFeatureEnabled(FEATURE_SUPPORTS_ICE)\n );\n }\n\n registerFreestyleAgitationRequiredTroubleMapper() {\n ExtensionManager[EXTENSION_TROUBLE_DATA_MAPPER].register(\n \"agitationRequired\",\n async (trouble: TroubleModel<AgitationRequiredTroubleIface>) => {\n return { isAgitationRequired: !!trouble.data.agitationRequired };\n }\n );\n }\n\n initializeFreestyleExtension() {\n this.registerFreestylePourableMapper();\n this.registerFreestyleAssemblyMapper();\n this.registerFreestyleIngredientIndex();\n this.registerFreestyleIngredientDataMapper();\n this.registerFreestyleIceAgitator();\n this.registerFreestyleAgitationRequiredTroubleMapper();\n this.registerFreestyleRankMapper();\n this.registerFreestyleColorMapper();\n this.registerFreestyleRoleMapper();\n }\n}\n/**\n * The KosExtensionManager provides access to the extension points that are provided in the SDK for Dispense applications.\n *\n * The extension points are divided into two categories:\n *\n * @param core - The core extension {@link CoreExtensionManager} points are used to extend the base models that are provided by the SDK.\n * @param dispense - The dispense extension {@link DispenseExtensionManager} points are used to extend the models that are specific to the Dispense SDK.\n */\nexport class KosExtensionManager {\n dispense: DispenseExtensionManager;\n core: CoreExtensionManager;\n freestyle: FreestyleExtensionManager;\n constructor() {\n this.dispense = new DispenseExtensionManager();\n this.core = new CoreExtensionManager();\n this.freestyle = new FreestyleExtensionManager(this.core, this.dispense);\n }\n}\n"],"names":["organizeBeverageData","beverageScreenReducer","relatedBrand","processMiddleware","kosFetch","freestyleAssemblyDataMapper","ExtensionManager","KosFeatureFlags","FEATURE_SUPPORTS_ICE","EXTENSION_TROUBLE_DATA_MAPPER","DispenseExtensionManager","CoreExtensionManager"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,MAAM,eAAe,CAAC,KAA4B,UAAiB;AACjE,MAAI,MAAM,KAAK,SAAA,CAAU,IAAI;AAC7B,SAAO;AACT;AAOO,MAAM,mBAGT,OAAO,SAAS,SAAS;AAC3B,QAAM,QAAQ,QAAQ;AACtB,QAAM,SAAS,MAAM,OAAO,OAAO,cAAc,CAAA,CAA2B;AAC5E,UAAQ,SAAS,EAAE,GAAG,QAAQ,QAAQ,OAAA;AACtC,QAAM,KAAA;AACR;ACbA,SAASA,uBACP,UACoB;AACpB,QAAM,eAAmC,CAAA;AAEzC,aAAW,OAAO,UAAU;AAE1B,QAAI,SAAS,eAAe,GAAG,KAAK,IAAI,SAAS,MAAM,GAAG;AACxD,YAAM,eAAe,IAAI,SAAS,QAAQ;AAC1C,UAAI,CAAC,cAAc;AACjB,cAAM,OAAO,IAAI,MAAM,GAAG,EAAE,CAAC;AAC7B,cAAM,aAAa,SAAS,QAAQ,IAAI,WAAW;AAEnD,YAAI,YAAY;AAEd,cAAI,CAAC,aAAa,UAAU,GAAG;AAC7B,yBAAa,UAAU,IAAI,CAAA;AAAA,UAC7B;AAEA,uBAAa,UAAU,EAAE,OAAO;AAEhC,gBAAM,cAAc,IAAI,QAAQ,QAAQ,IAAI,KAAK,EAAE;AACnD,uBAAa,UAAU,EAAE,WAAW,IAAI,SAAS,GAAG;AAAA,QACtD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AACA,MAAMC,0BACJ,CAAC,UACD,CAAC,KAAqC,SAAiB;AACrD,MAAI,IAAI,IAAI,MAAM,gBAAgB,IAAI;AACtC,MAAI,IAAI,EAAE,YAAYD,uBAAqB,IAAI,IAAI,CAAC;AACpD,SAAO;AACT;AAWK,MAAM,2BAGT,OAAO,SAAS,SAAS;AAC3B,QAAM,QAAQ,QAAQ;AACtB,QAAM,kBAAkB,OAAO,KAAK,MAAM,eAAe,EAAE;AAAA,IACzDC,wBAAsB,KAAK;AAAA,IAC3B,MAAM;AAAA,EAAA;AAER,UAAQ,SAAS,EAAE,GAAG,QAAQ,QAAQ,gBAAA;AACtC,QAAM,KAAA;AACR;AC/DA,MAAM,kBAAkB,CAAC,KAA+B,aAAuB;AAC7E,MAAI,SAAS,WAAW,SAAA,CAAU,IAAI;AACtC,SAAO;AACT;AAOO,MAAM,sBAGT,OAAO,SAAS,SAAS;AAC3B,QAAM,QAAQ,QAAQ;AACtB,QAAM,YAAY,MAAM,UAAU;AAAA,IAChC;AAAA,IACA,CAAA;AAAA,EAAC;AAEH,QAAM,cAAc,MAAM,UAAU,OAAO,CAAC,KAAK,SAAS;AACxD,QAAI,KAAK,KAAK,SAAA,CAAU,IAAI,KAAK,WAAW,SAAA;AAC5C,WAAO;AAAA,EACT,GAAG,CAAA,CAA4B;AAC/B,UAAQ,SAAS,EAAE,GAAG,QAAQ,QAAQ,WAAW,YAAA;AACjD,QAAM,KAAA;AACR;ACrBA,SAAS,kBAAkB,UAAoD;AAC7E,QAAM,kBAAmC,EAAE,MAAM,EAAA;AAEjD,aAAW,OAAO,UAAU;AAE1B,QAAI,SAAS,eAAe,GAAG,KAAK,IAAI,SAAS,MAAM,GAAG;AACxD,YAAM,OAAO,IAAI,MAAM,GAAG,EAAE,CAAC;AAC7B,YAAM,WAAW,KAAK,MAAM,GAAG,EAAE,CAAC;AAClC,YAAM,UAAU,SAAS,QAAQ,IAAI,QAAQ;AAE7C,UAAI,SAAS;AACX,YAAI,CAAC,gBAAgB,OAAO,GAAG;AAC7B,0BAAgB,OAAO,IAAI;AAAA,YACzB,MAAM,OAAO,QAAQ;AAAA,UAAA;AAAA,QAEzB;AAGA,cAAM,WAAW,IAAI,QAAQ,QAAQ,IAAI,KAAK,EAAE;AAChD,wBAAgB,OAAO,EAAE,QAAQ,IAAI,SAAS,GAAG;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AACO,MAAM,wBAGT,OAAO,SAAS,SAAS;AAC3B,QAAM,QAAQ,QAAQ;AACtB,QAAM,cAAc,kBAAkB,MAAM,WAAW;AACvD,UAAQ,SAAS,EAAE,GAAG,QAAQ,QAAQ,YAAA;AACtC,QAAM,KAAA;AACR;ACtCA,MAAM,eAAe,CAAC,KAA4B,UAAiB;AACjE,MAAI,MAAM,KAAK,SAAA,CAAU,IAAI;AAC7B,SAAO;AACT;AAOO,MAAM,mBAGT,OAAO,SAAS,SAAS;AAC3B,QAAM,QAAQ,QAAQ;AACtB,QAAM,SAAS,MAAM,OAAO,OAAO,cAAc,CAAA,CAA2B;AAC5E,UAAQ,SAAS,EAAE,GAAG,QAAQ,QAAQ,OAAA;AACtC,QAAM,KAAA;AACR;ACnBO,MAAM,iBAAuC,OAAO,SAAS,SAAS;AAC3E,UAAQ,SAAS,EAAE,GAAG,QAAQ,KAAA;AAC9B,QAAM,KAAA;AACR;ACFA,MAAM,gBAAgB,CAAC,KAA6B,WAAmB;AACrE,MAAI,OAAO,KAAK,SAAA,CAAU,IAAI;AAC9B,SAAO;AACT;AAOO,MAAM,oBAGT,OAAO,SAAS,SAAS;AAC3B,QAAM,QAAQ,QAAQ;AACtB,QAAM,UAAU,MAAM,QAAQ;AAAA,IAC5B;AAAA,IACA,CAAA;AAAA,EAAC;AAEH,UAAQ,SAAS,EAAE,GAAG,QAAQ,QAAQ,QAAA;AACtC,QAAM,KAAA;AACR;ACxBO,SAAS,mBACd,UACA,MACA;AACA,QAAM,eAAe,SAAS,UAAU,IAAI,QAAQ;AACpD,SAAO;AACT;ACJO,MAAM,sBACX,CAAC,SACD,CACE,cACA,SACA,MACA,QACG;AACH,MAAI,CAAC,aAAa,cAAc;AAC9B,iBAAa,eAAe,CAAA;AAAA,EAC9B;AAEA,MAAI,CAAC,aAAa,aAAa,OAAO,GAAG;AACvC,iBAAa,aAAa,OAAO,IAAI;AAAA,MACnC,MAAM;AAAA,IAAA;AAAA,EAEV;AAEA,QAAM,cAAc,IAAI,QAAQ,UAAU,IAAI,KAAK,EAAE;AACrD,eAAa,aAAa,OAAO,EAAE,WAAW,IAAI,KAAK,GAAG;AAC5D;ACZF,SAAS,qBACP,UACoB;AACpB,QAAM,eAAmC,CAAA;AAEzC,aAAW,OAAO,UAAU;AAE1B,QAAI,SAAS,eAAe,GAAG,KAAK,IAAI,SAAS,MAAM,GAAG;AACxD,YAAM,eAAe,IAAI,SAAS,QAAQ;AAC1C,UAAI,cAAc;AAChB,cAAM,OAAO,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;AAC3C,cAAMC,gBAAe,mBAAmB,UAAU,IAAI;AACtD,4BAAoB,QAAQ,EAAE,cAAcA,eAAc,MAAM,GAAG;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AACA,MAAM,wBACJ,CAAC,UACD,CAAC,KAAqC,SAAiB;AACrD,MAAI,IAAI,IAAI,MAAM,gBAAgB,IAAI;AACtC,MAAI,IAAI,EAAE,YAAY;AAAA,IACpB,GAAG,IAAI,IAAI,EAAE;AAAA,IACb,GAAG,qBAAqB,IAAI,IAAI,CAAC;AAAA,EAAA;AAEnC,SAAO;AACT;AAWK,MAAM,yBAGT,OAAO,SAAS,SAAS;AAC3B,QAAM,QAAQ,QAAQ;AACtB,QAAM,kBAAkB,OAAO,KAAK,MAAM,eAAe,EAAE;AAAA,IACzD,sBAAsB,KAAK;AAAA,IAC3B,MAAM;AAAA,EAAA;AAER,UAAQ,SAAS,EAAE,GAAG,QAAQ,QAAQ,gBAAA;AACtC,QAAM,KAAA;AACR;AC5CO,MAAM,4BAA4B,OACvC,OACA,uBAGM,CAAA,GACN,UAAU,UACuB;AACjC,QAAM,aAAa,UACf,CAAC,GAAG,oBAAoB,IACxB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EAAA;AAET,QAAM,sBAAsB,MAAMC,2BAGhC,OAAO,UAAU;AAEnB,SAAO;AACT;AA6BO,MAAM,8BACX,CAAC;AAAA,EACC,MAAM;AAAA,EACN,aAAa,CAAA;AAAA,EACb,UAAU;AACZ,IAA6B,CAAA,MAC7B,YAA0C;AACxC,QAAM,SAAS,MAAMC,SAAAA,SAAS,GAAG;AACjC,MAAI,OAAO,IAAI;AACb,UAAM,WAAW,MAAM,OAAO,KAAA;AAC9B,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,sCAAsC;AAAA,IACxD;AACA,WAAO,MAAM,0BAA0B,UAAU,YAAY,OAAO;AAAA,EACtE;AACA,QAAM,IAAI,MAAM,qCAAqC;AACvD;AC7EK,MAAM,uBAAmC,OAC9C,SACG;AAEH,QAAM,EAAE,IAAI,MAAM,GAAG,SAAS;AAC9B,QAAM,WAAoC;AAAA,IACxC,GAAG;AAAA,IACH,iBAAiB,KAAK,OAAO,CAAC,KAAK,YAAY,UAAU;AAAA,EAAA;AAE3D,SAAO;AACT;AAEO,MAAM,2BACX;AAAA,EACE,OAAO;AACT;ACxBK,MAAM,wBAAwB,OAAO,SAA2B;AACrE,SAAO;AAAA,IACL,OAAO,KAAK,UAAU;AAAA,EAAA;AAE1B;ACUA,MAAM,eAAe,CAAC,MAAkC,GAAG,SAAS;AAEpE,MAAM,kBAAkB,CAAC,MACvB,GAAG,gBAAgB;AAErB,MAAM,mBAAmB,CAAC,MACxB,GAAG,UAAU;AAER,MAAM,6BAA6B,CAAC,YAA6B;AACtE,QAAM,OAAO,QAAQ,OAAO;AAC5B,MAAI,aAAa,IAAI,GAAG;AACtB,WAAO,KAAK;AAAA,EACd;AACA,SAAO;AACT;AAEO,MAAM,8BAA8B,CAAC,YAA6B;AACvE,QAAM,OAAO,QAAQ,OAAO;AAC5B,MAAI,iBAAiB,IAAI,GAAG;AAC1B,WAAO,KAAK;AAAA,EACd;AACA,SAAO;AACT;AAEO,MAAM,6BAA6B,CAAC,YAA6B;AACtE,QAAM,OAAO,QAAQ,OAAO;AAC5B,MAAI,gBAAgB,IAAI,GAAG;AACzB,WAAO,KAAK;AAAA,EACd;AACA,SAAO;AACT;ACnBO,MAAM,8BAA8B;AAEpC,MAAM,0BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA,YAAY,MAA4B,UAAoC;AAC1E,SAAK,OAAO;AACZ,SAAK,WAAW;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gCAAgC,QAAiC,IAAI;AACnE,SAAK,SAAS;AAAA,MACZ,4BAA4B,KAAK;AAAA,IAAA;AAGnC,WAAO;AAAA,EACT;AAAA,EAEA,kCAAkC;AAChC,SAAK,SAAS,mCAAmC,qBAAqB;AAAA,EACxE;AAAA,EAEA,kCAAkC;AAChC,SAAK,SAAS,2BAA2BC,mCAA2B;AAAA,EACtE;AAAA,EAEA,mCAAmC;AACjC,SAAK,SAAS,wBAAwB,wBAAwB;AAAA,EAChE;AAAA,EAEA,wCAAwC;AACtC,SAAK,SAAS,6BAA6B,oBAAoB;AAAA,EACjE;AAAA,EAEA,+BAA+B;AAC7B,SAAK,KAAK,2BAA2B,2BAA2B;AAAA,EAClE;AAAA,EAEA,8BAA8B;AAC5B,SAAK,KAAK,0BAA0B,0BAA0B;AAAA,EAChE;AAAA,EAEA,8BAA8B;AAC5B,SAAK,KAAK,0BAA0B,0BAA0B;AAAA,EAChE;AAAA,EAEA,+BAA+B;AAC7BC,aAAAA,iBAAiB,2BAA2B,EAAE;AAAA,MAC5C;AAAA,MACA,CAAC,QACC,QAAQ,iBACRC,SAAAA,gBAAgB,iBAAiBC,QAAAA,oBAAoB;AAAA,IAAA;AAAA,EAE3D;AAAA,EAEA,kDAAkD;AAChDF,aAAAA,iBAAiBG,SAAAA,6BAA6B,EAAE;AAAA,MAC9C;AAAA,MACA,OAAO,YAAyD;AAC9D,eAAO,EAAE,qBAAqB,CAAC,CAAC,QAAQ,KAAK,kBAAA;AAAA,MAC/C;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,+BAA+B;AAC7B,SAAK,gCAAA;AACL,SAAK,gCAAA;AACL,SAAK,iCAAA;AACL,SAAK,sCAAA;AACL,SAAK,6BAAA;AACL,SAAK,gDAAA;AACL,SAAK,4BAAA;AACL,SAAK,6BAAA;AACL,SAAK,4BAAA;AAAA,EACP;AACF;AASO,MAAM,oBAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AACZ,SAAK,WAAW,IAAIC,wCAAA;AACpB,SAAK,OAAO,IAAIC,8BAAA;AAChB,SAAK,YAAY,IAAI,0BAA0B,KAAK,MAAM,KAAK,QAAQ;AAAA,EACzE;AACF;;;;;;;;"}
1
+ {"version":3,"file":"extension-utils-D847XVCc.cjs","sources":["../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/assets.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/beverage-screen.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/beverages.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/brand-screen.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/brands.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/copy-input.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/flavors.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/util/locate-brand.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/util/process-related-brand.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/related-brands.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/freestyle-loader.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/ingredient/model-extension.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/pourable/select-pourable-mapper.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/trouble/trouble-utils.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extension-utils.ts"],"sourcesContent":["import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type { Asset, AvailabilityContext, UiSchemaResponse } from \"../types\";\n\nconst assetReducer = (acc: Record<string, Asset>, asset: Asset) => {\n acc[asset.dbId.toString()] = asset;\n return acc;\n};\n\n/**\n * Middleware that will normalize the assets array into a dictionary\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const assetsMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const assets = input.assets.reduce(assetReducer, {} as Record<string, Asset>);\n context.result = { ...context.result, assets };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type {\n AvailabilityContext,\n BeverageScreen,\n BeverageScreenData,\n UiSchemaResponse,\n} from \"../types\";\n\nfunction organizeBeverageData(\n jsonData: Record<string, any>\n): BeverageScreenData {\n const beverageData: BeverageScreenData = {};\n\n for (const key in jsonData) {\n // eslint-disable-next-line no-prototype-builtins\n if (jsonData.hasOwnProperty(key) && key.includes(\"slot\")) {\n const relatedBrand = key.includes(\"slotrb\");\n if (!relatedBrand) {\n const slot = key.split(\".\")[1]; // Extracting the slot number\n const beverageId = jsonData[`slot.${slot}.beverage`];\n\n if (beverageId) {\n // eslint-disable-next-line max-depth\n if (!beverageData[beverageId]) {\n beverageData[beverageId] = {};\n }\n\n beverageData[beverageId].rank = slot;\n // Removing the slot.x part from the key and adding to the object\n const beverageKey = key.replace(`slot.${slot}.`, \"\");\n beverageData[beverageId][beverageKey] = jsonData[key];\n }\n }\n }\n }\n\n return beverageData;\n}\nconst beverageScreenReducer =\n (input: UiSchemaResponse) =>\n (acc: Record<string, BeverageScreen>, curr: string) => {\n acc[curr] = input.beverageScreens[curr];\n acc[curr].beverages = organizeBeverageData(acc[curr]);\n return acc;\n };\n\n/**\n * Middleware that will normalize the beverage screen data. The middleware will perform the following:\n * 1. Organize the beverage screen data into a dictionary keyed by the brand id\n * 2. Adds a beverages property to the beverage screen data that contains the organized beverage data\n * 3. Processes related brands for each beverage screen\n *\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const beverageScreenMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const beverageScreens = Object.keys(input.beverageScreens).reduce(\n beverageScreenReducer(input),\n input.beverageScreens\n );\n context.result = { ...context.result, beverageScreens };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type { AvailabilityContext, Beverage, UiSchemaResponse } from \"../types\";\n\nconst beverageReducer = (acc: Record<string, Beverage>, beverage: Beverage) => {\n acc[beverage.beverageId.toString()] = beverage;\n return acc;\n};\n\n/**\n * Middleware that will normalize the brands array into a dictionary\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const beveragesMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const beverages = input.beverages.reduce(\n beverageReducer,\n {} as Record<string, Beverage>\n );\n const beverageMap = input.beverages.reduce((acc, curr) => {\n acc[curr.dbId.toString()] = curr.beverageId.toString();\n return acc;\n }, {} as Record<string, string>);\n context.result = { ...context.result, beverages, beverageMap };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type {\n AvailabilityContext,\n BrandScreenData,\n UiSchemaResponse,\n} from \"../types\";\n\nfunction organizeBrandData(jsonData: Record<string, any>): Record<string, any> {\n const brandScreenData: BrandScreenData = { rank: 0 };\n\n for (const key in jsonData) {\n // eslint-disable-next-line no-prototype-builtins\n if (jsonData.hasOwnProperty(key) && key.includes(\"slot\")) {\n const slot = key.split(\".\")[1]; // Extracting the slot number\n const position = slot.split(\":\")[1]; // Extracting the position number\n const brandId = jsonData[`slot.${slot}.brand`];\n\n if (brandId) {\n if (!brandScreenData[brandId]) {\n brandScreenData[brandId] = {\n rank: Number(position),\n };\n }\n\n // Removing the slot.x part from the key and adding to the object\n const brandKey = key.replace(`slot.${slot}.`, \"\");\n brandScreenData[brandId][brandKey] = jsonData[key];\n }\n }\n }\n\n return brandScreenData;\n}\nexport const brandScreenMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const brandScreen = organizeBrandData(input.brandScreen);\n context.result = { ...context.result, brandScreen };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type { AvailabilityContext, Brand, UiSchemaResponse } from \"../types\";\n\nconst brandReducer = (acc: Record<string, Brand>, brand: Brand) => {\n acc[brand.dbId.toString()] = brand;\n return acc;\n};\n\n/**\n * Middleware that will normalize the brands array into a dictionary\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const brandsMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const brands = input.brands.reduce(brandReducer, {} as Record<string, Brand>);\n context.result = { ...context.result, brands };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\n\nexport const copyMiddleware: Middleware<any, any> = async (context, next) => {\n context.result = { ...context.data };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type { AvailabilityContext, Flavor, UiSchemaResponse } from \"../types\";\n\nconst flavorReducer = (acc: Record<string, Flavor>, flavor: Flavor) => {\n acc[flavor.dbId.toString()] = flavor;\n return acc;\n};\n\n/**\n * Middleware that will normalize the flavors array into a dictionary\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const flavorsMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const flavors = input.flavors.reduce(\n flavorReducer,\n {} as Record<string, Flavor>\n );\n context.result = { ...context.result, flavors };\n await next();\n};\n","export function locateRelatedBrand(\n jsonData: Record<string, any>,\n slot: string\n) {\n const relatedBrand = jsonData[`slotrb:${slot}.brand`];\n return relatedBrand;\n}\n","import type { BeverageScreenData } from \"../types\";\n\nexport const processRelatedBrand =\n (json: Record<string, any>) =>\n (\n beverageData: BeverageScreenData,\n brandId: string,\n slot: string,\n key: string\n ) => {\n if (!beverageData.relatedBrand) {\n beverageData.relatedBrand = {};\n }\n\n if (!beverageData.relatedBrand[brandId]) {\n beverageData.relatedBrand[brandId] = {\n rank: slot,\n };\n }\n\n const beverageKey = key.replace(`slotrb:${slot}.`, \"\");\n beverageData.relatedBrand[brandId][beverageKey] = json[key];\n };\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type {\n AvailabilityContext,\n BeverageScreen,\n BeverageScreenData,\n UiSchemaResponse,\n} from \"../types\";\nimport { locateRelatedBrand } from \"../util/locate-brand\";\nimport { processRelatedBrand } from \"../util/process-related-brand\";\n\nfunction organizeBeverageData(\n jsonData: Record<string, any>\n): BeverageScreenData {\n const beverageData: BeverageScreenData = {};\n\n for (const key in jsonData) {\n // eslint-disable-next-line no-prototype-builtins\n if (jsonData.hasOwnProperty(key) && key.includes(\"slot\")) {\n const relatedBrand = key.includes(\"slotrb\");\n if (relatedBrand) {\n const slot = key.split(\":\")[1].split(\".\")[0]; // Extracting the slot number\n const relatedBrand = locateRelatedBrand(jsonData, slot);\n processRelatedBrand(jsonData)(beverageData, relatedBrand, slot, key);\n }\n }\n }\n\n return beverageData;\n}\nconst beverageScreenReducer =\n (input: UiSchemaResponse) =>\n (acc: Record<string, BeverageScreen>, curr: string) => {\n acc[curr] = input.beverageScreens[curr];\n acc[curr].beverages = {\n ...acc[curr].beverages,\n ...organizeBeverageData(acc[curr]),\n };\n return acc;\n };\n\n/**\n * Middleware that will normalize the beverage screen data. The middleware will perform the following:\n * 1. Organize the beverage screen data into a dictionary keyed by the brand id\n * 2. Adds a beverages property to the beverage screen data that contains the organized beverage data\n * 3. Processes related brands for each beverage screen\n *\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const relatedBrandMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const beverageScreens = Object.keys(input.beverageScreens).reduce(\n beverageScreenReducer(input),\n input.beverageScreens\n );\n context.result = { ...context.result, beverageScreens };\n await next();\n};\n","import {\n kosFetch,\n processMiddleware,\n type DataLoader,\n type Middleware,\n} from \"@kosdev-code/kos-ui-sdk\";\nimport { assetsMiddleware } from \"./middleware/assets\";\nimport { beverageScreenMiddleware } from \"./middleware/beverage-screen\";\nimport { beveragesMiddleware } from \"./middleware/beverages\";\nimport { brandScreenMiddleware } from \"./middleware/brand-screen\";\nimport { brandsMiddleware } from \"./middleware/brands\";\nimport { copyMiddleware } from \"./middleware/copy-input\";\nimport { flavorsMiddleware } from \"./middleware/flavors\";\nimport { relatedBrandMiddleware } from \"./middleware/related-brands\";\nimport type { AvailabilityContext, UiSchemaResponse } from \"./types\";\n\nexport const transformAvailabilityData = async (\n input: UiSchemaResponse,\n additionalMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n >[] = [],\n replace = false\n): Promise<AvailabilityContext> => {\n const middleware = replace\n ? [...additionalMiddleware]\n : [\n copyMiddleware,\n assetsMiddleware,\n flavorsMiddleware,\n beveragesMiddleware,\n brandsMiddleware,\n beverageScreenMiddleware,\n relatedBrandMiddleware,\n brandScreenMiddleware,\n ...additionalMiddleware,\n ];\n const availabilityContext = await processMiddleware<\n UiSchemaResponse,\n AvailabilityContext\n >(input, middleware);\n\n return availabilityContext;\n};\n\n/**\n * Props for the freestyle availability loader\n */\nexport interface AvailabilityLoaderProps {\n /** the url to send the request for the UiSchemaData. Defaults to http://localhost:8081/system/cui/core.json */\n url?: string;\n\n /** additional middlewares to execute as part of the data processing */\n middleware?: Middleware<UiSchemaResponse, AvailabilityContext>[];\n\n /** if true, replace the default middleware with the provided middleware */\n replace?: boolean;\n}\n/**\n * Utility method to load the freestyle brandset data into the availability context.\n *\n * This loader will retrieve the UI Schema from the provided URL and transform it into\n * a format that can be used to populate the availability brands and beverages with UI schema\n * data.\n *\n * With this data, the availability models can have access to the brandset assets for\n * brands, beverages and flavours.\n *\n *\n * @param props\n * @returns A DataLoader function that will load the availability context\n */\nexport const freestyleAvailabilityLoader =\n ({\n url = \"http://localhost:8081/system/cui/core.json\",\n middleware = [],\n replace = false,\n }: AvailabilityLoaderProps = {}): DataLoader =>\n async (): Promise<AvailabilityContext> => {\n const schema = await kosFetch(url);\n if (schema.ok) {\n const response = await schema.json<UiSchemaResponse>();\n if (!response) {\n throw new Error(\"Failed to parse availability context\");\n }\n return await transformAvailabilityData(response, middleware, replace);\n }\n throw new Error(\"Failed to load availability context\");\n };\n","import {\n DataMapper,\n IndexExtension,\n PropertyMapper,\n} from \"@kosdev-code/kos-ui-sdk\";\nimport type {\n FreestyleIngredientData,\n FreestyleIngredientModelData,\n FreestyleIngredientResponseData,\n} from \"../../../models/types/ingredients\";\n\nexport const ingredientDataMapper: DataMapper = async (\n data: FreestyleIngredientResponseData\n) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { id, name, ...rest } = data;\n const response: FreestyleIngredientData = {\n ...rest,\n ingredientMacro: rest.bib && !rest.sweetener ? \"macro\" : \"micro\",\n };\n return response;\n};\n\nexport const ingredientIndexExtension: IndexExtension<FreestyleIngredientModelData> =\n {\n macro: \"ingredientMacro\",\n };\nexport const ingredientCategoryMapper: PropertyMapper = (\n ingredientData: FreestyleIngredientResponseData\n) => ingredientData.type;\n","import type { SelectedPourable } from \"@kosdev-code/kos-dispense-sdk\";\n\nexport const pourableRequestMapper = async (data: SelectedPourable) => {\n return {\n bevId: data.beverage?.rawId,\n };\n};\n","import type { TroubleServices } from \"@kosdev-code/kos-ui-sdk\";\n\ntype TroubleResponse = TroubleServices.TroubleResponse<{ flex: any }>;\n\ninterface RankAwareTrouble {\n rank: number;\n}\n\ninterface RoleAwareTrouble {\n visibleRole: string;\n}\n\ninterface ColorAwareTrouble {\n color: string;\n}\n\nconst isRankedInfo = (i: any): i is RankAwareTrouble => i?.rank !== undefined;\n\nconst isRoleAwareInfo = (i: any): i is RoleAwareTrouble =>\n i?.visibleRole !== undefined;\n\nconst isColorAwareInfo = (i: any): i is ColorAwareTrouble =>\n i?.color !== undefined;\n\nexport const freestyleTroubleRankMapper = (trouble: TroubleResponse) => {\n const info = trouble.attrs?.flex;\n if (isRankedInfo(info)) {\n return info.rank; // return the rank\n }\n return 0; // return 0 if not ranked\n};\n\nexport const freestyleTroubleColorMapper = (trouble: TroubleResponse) => {\n const info = trouble.attrs?.flex;\n if (isColorAwareInfo(info)) {\n return info.color; // return the color\n }\n return \"orange\"; // return ORANGE if no color defined\n};\n\nexport const freestyleTroubleRoleMapper = (trouble: TroubleResponse) => {\n const info = trouble.attrs?.flex;\n if (isRoleAwareInfo(info)) {\n return info.visibleRole; // return the role\n }\n return \"TECHNICIAN\"; // return empty if no role\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { DispenseExtensionManager } from \"@kosdev-code/kos-dispense-sdk\";\nimport {\n CoreExtensionManager,\n EXTENSION_TROUBLE_DATA_MAPPER,\n ExtensionManager,\n KosFeatureFlags,\n type TroubleModel,\n} from \"@kosdev-code/kos-ui-sdk\";\nimport type { AgitationRequiredTroubleIface } from \"../models/cartridge-agitator/types\";\nimport { FEATURE_SUPPORTS_ICE } from \"../models/freestyle-assembly/freestyle-assembly-model\";\nimport { freestyleAssemblyDataMapper } from \"./extensions/assembly/assembly-data-mapper\";\nimport {\n freestyleAvailabilityLoader,\n type AvailabilityLoaderProps,\n} from \"./extensions/availability/freestyle-loader\";\nimport {\n ingredientDataMapper,\n ingredientIndexExtension,\n} from \"./extensions/ingredient\";\nimport { pourableRequestMapper } from \"./extensions/pourable/select-pourable-mapper\";\nimport {\n freestyleTroubleColorMapper,\n freestyleTroubleRankMapper,\n freestyleTroubleRoleMapper,\n} from \"./extensions/trouble/trouble-utils\";\nexport const EXTENSION_PLUGIN_VISIBILITY = \"pluginVisibility\";\n\nexport class FreestyleExtensionManager {\n core: CoreExtensionManager;\n dispense: DispenseExtensionManager;\n constructor(core: CoreExtensionManager, dispense: DispenseExtensionManager) {\n this.core = core;\n this.dispense = dispense;\n }\n\n /**\n * Loads the core brandset data into a format that can be consumed by the\n * freestyle models.\n * */\n registerFreestyleBrandsetReader(props: AvailabilityLoaderProps = {}) {\n this.dispense.registerAvailabilityLoader(\n freestyleAvailabilityLoader(props)\n );\n\n return this;\n }\n\n registerFreestylePourableMapper() {\n this.dispense.registerSelectedPourableDataMapper(pourableRequestMapper);\n }\n\n registerFreestyleAssemblyMapper() {\n this.dispense.registerAssemblyDataMapper(freestyleAssemblyDataMapper);\n }\n\n registerFreestyleIngredientIndex() {\n this.dispense.registerIngredientIndex(ingredientIndexExtension);\n }\n\n registerFreestyleIngredientDataMapper() {\n this.dispense.registerIngredientDataMapper(ingredientDataMapper);\n }\n\n registerFreestyleColorMapper() {\n this.core.registerTroubleColorMapper(freestyleTroubleColorMapper);\n }\n\n registerFreestyleRankMapper() {\n this.core.registerTroubleRankMapper(freestyleTroubleRankMapper);\n }\n\n registerFreestyleRoleMapper() {\n this.core.registerTroubleRoleMapper(freestyleTroubleRoleMapper);\n }\n\n registerFreestyleIceAgitator() {\n ExtensionManager[EXTENSION_PLUGIN_VISIBILITY].register(\n EXTENSION_PLUGIN_VISIBILITY,\n (key) =>\n key !== \"iceAgitator\" ||\n KosFeatureFlags.isFeatureEnabled(FEATURE_SUPPORTS_ICE)\n );\n }\n\n registerFreestyleAgitationRequiredTroubleMapper() {\n ExtensionManager[EXTENSION_TROUBLE_DATA_MAPPER].register(\n \"agitationRequired\",\n async (trouble: TroubleModel<AgitationRequiredTroubleIface>) => {\n return { isAgitationRequired: !!trouble.data.agitationRequired };\n }\n );\n }\n\n initializeFreestyleExtension() {\n this.registerFreestylePourableMapper();\n this.registerFreestyleAssemblyMapper();\n this.registerFreestyleIngredientIndex();\n this.registerFreestyleIngredientDataMapper();\n this.registerFreestyleIceAgitator();\n this.registerFreestyleAgitationRequiredTroubleMapper();\n this.registerFreestyleRankMapper();\n this.registerFreestyleColorMapper();\n this.registerFreestyleRoleMapper();\n }\n}\n/**\n * The KosExtensionManager provides access to the extension points that are provided in the SDK for Dispense applications.\n *\n * The extension points are divided into two categories:\n *\n * @param core - The core extension {@link CoreExtensionManager} points are used to extend the base models that are provided by the SDK.\n * @param dispense - The dispense extension {@link DispenseExtensionManager} points are used to extend the models that are specific to the Dispense SDK.\n */\nexport class KosExtensionManager {\n dispense: DispenseExtensionManager;\n core: CoreExtensionManager;\n freestyle: FreestyleExtensionManager;\n constructor() {\n this.dispense = new DispenseExtensionManager();\n this.core = new CoreExtensionManager();\n this.freestyle = new FreestyleExtensionManager(this.core, this.dispense);\n }\n}\n"],"names":["organizeBeverageData","beverageScreenReducer","relatedBrand","processMiddleware","kosFetch","freestyleAssemblyDataMapper","ExtensionManager","KosFeatureFlags","FEATURE_SUPPORTS_ICE","EXTENSION_TROUBLE_DATA_MAPPER","DispenseExtensionManager","CoreExtensionManager"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { p as performCalibrate, q as performComplete, t as performElectricalTest, u as performPreCalibrate, v as performVerify, w as InvalidRequestError, N as NutritionInfoError, x as getFreestyleNutritionInfo, y as replacePump, z as performCalibrate$1, B as performComplete$1, D as performPreCalibrate$1, E as performVerify$1, G as freestyleAssemblyDataMapper, H as FEATURE_SUPPORTS_ICE } from "./service-BCeBcq6r.js";
1
+ import { p as performCalibrate, q as performComplete, t as performElectricalTest, u as performPreCalibrate, v as performVerify, w as InvalidRequestError, N as NutritionInfoError, x as getFreestyleNutritionInfo, y as replacePump, z as performCalibrate$1, B as performComplete$1, D as performPreCalibrate$1, E as performVerify$1, G as freestyleAssemblyDataMapper, H as FEATURE_SUPPORTS_ICE } from "./service-BDbUdYS7.js";
2
2
  import { DispenseExtensionManager } from "@kosdev-code/kos-dispense-sdk";
3
3
  import { kosFetch, processMiddleware, ExtensionManager, KosFeatureFlags, EXTENSION_TROUBLE_DATA_MAPPER, CoreExtensionManager } from "@kosdev-code/kos-ui-sdk";
4
4
  const index$3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
@@ -342,4 +342,4 @@ export {
342
342
  index as c,
343
343
  index$3 as i
344
344
  };
345
- //# sourceMappingURL=extension-utils-BGWhQNVU.js.map
345
+ //# sourceMappingURL=extension-utils-H-ll8ljh.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extension-utils-BGWhQNVU.js","sources":["../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/assets.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/beverage-screen.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/beverages.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/brand-screen.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/brands.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/copy-input.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/flavors.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/util/locate-brand.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/util/process-related-brand.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/related-brands.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/freestyle-loader.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/ingredient/model-extension.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/pourable/select-pourable-mapper.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/trouble/trouble-utils.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extension-utils.ts"],"sourcesContent":["import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type { Asset, AvailabilityContext, UiSchemaResponse } from \"../types\";\n\nconst assetReducer = (acc: Record<string, Asset>, asset: Asset) => {\n acc[asset.dbId.toString()] = asset;\n return acc;\n};\n\n/**\n * Middleware that will normalize the assets array into a dictionary\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const assetsMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const assets = input.assets.reduce(assetReducer, {} as Record<string, Asset>);\n context.result = { ...context.result, assets };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type {\n AvailabilityContext,\n BeverageScreen,\n BeverageScreenData,\n UiSchemaResponse,\n} from \"../types\";\n\nfunction organizeBeverageData(\n jsonData: Record<string, any>\n): BeverageScreenData {\n const beverageData: BeverageScreenData = {};\n\n for (const key in jsonData) {\n // eslint-disable-next-line no-prototype-builtins\n if (jsonData.hasOwnProperty(key) && key.includes(\"slot\")) {\n const relatedBrand = key.includes(\"slotrb\");\n if (!relatedBrand) {\n const slot = key.split(\".\")[1]; // Extracting the slot number\n const beverageId = jsonData[`slot.${slot}.beverage`];\n\n if (beverageId) {\n // eslint-disable-next-line max-depth\n if (!beverageData[beverageId]) {\n beverageData[beverageId] = {};\n }\n\n beverageData[beverageId].rank = slot;\n // Removing the slot.x part from the key and adding to the object\n const beverageKey = key.replace(`slot.${slot}.`, \"\");\n beverageData[beverageId][beverageKey] = jsonData[key];\n }\n }\n }\n }\n\n return beverageData;\n}\nconst beverageScreenReducer =\n (input: UiSchemaResponse) =>\n (acc: Record<string, BeverageScreen>, curr: string) => {\n acc[curr] = input.beverageScreens[curr];\n acc[curr].beverages = organizeBeverageData(acc[curr]);\n return acc;\n };\n\n/**\n * Middleware that will normalize the beverage screen data. The middleware will perform the following:\n * 1. Organize the beverage screen data into a dictionary keyed by the brand id\n * 2. Adds a beverages property to the beverage screen data that contains the organized beverage data\n * 3. Processes related brands for each beverage screen\n *\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const beverageScreenMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const beverageScreens = Object.keys(input.beverageScreens).reduce(\n beverageScreenReducer(input),\n input.beverageScreens\n );\n context.result = { ...context.result, beverageScreens };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type { AvailabilityContext, Beverage, UiSchemaResponse } from \"../types\";\n\nconst beverageReducer = (acc: Record<string, Beverage>, beverage: Beverage) => {\n acc[beverage.beverageId.toString()] = beverage;\n return acc;\n};\n\n/**\n * Middleware that will normalize the brands array into a dictionary\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const beveragesMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const beverages = input.beverages.reduce(\n beverageReducer,\n {} as Record<string, Beverage>\n );\n const beverageMap = input.beverages.reduce((acc, curr) => {\n acc[curr.dbId.toString()] = curr.beverageId.toString();\n return acc;\n }, {} as Record<string, string>);\n context.result = { ...context.result, beverages, beverageMap };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type {\n AvailabilityContext,\n BrandScreenData,\n UiSchemaResponse,\n} from \"../types\";\n\nfunction organizeBrandData(jsonData: Record<string, any>): Record<string, any> {\n const brandScreenData: BrandScreenData = { rank: 0 };\n\n for (const key in jsonData) {\n // eslint-disable-next-line no-prototype-builtins\n if (jsonData.hasOwnProperty(key) && key.includes(\"slot\")) {\n const slot = key.split(\".\")[1]; // Extracting the slot number\n const position = slot.split(\":\")[1]; // Extracting the position number\n const brandId = jsonData[`slot.${slot}.brand`];\n\n if (brandId) {\n if (!brandScreenData[brandId]) {\n brandScreenData[brandId] = {\n rank: Number(position),\n };\n }\n\n // Removing the slot.x part from the key and adding to the object\n const brandKey = key.replace(`slot.${slot}.`, \"\");\n brandScreenData[brandId][brandKey] = jsonData[key];\n }\n }\n }\n\n return brandScreenData;\n}\nexport const brandScreenMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const brandScreen = organizeBrandData(input.brandScreen);\n context.result = { ...context.result, brandScreen };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type { AvailabilityContext, Brand, UiSchemaResponse } from \"../types\";\n\nconst brandReducer = (acc: Record<string, Brand>, brand: Brand) => {\n acc[brand.dbId.toString()] = brand;\n return acc;\n};\n\n/**\n * Middleware that will normalize the brands array into a dictionary\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const brandsMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const brands = input.brands.reduce(brandReducer, {} as Record<string, Brand>);\n context.result = { ...context.result, brands };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\n\nexport const copyMiddleware: Middleware<any, any> = async (context, next) => {\n context.result = { ...context.data };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type { AvailabilityContext, Flavor, UiSchemaResponse } from \"../types\";\n\nconst flavorReducer = (acc: Record<string, Flavor>, flavor: Flavor) => {\n acc[flavor.dbId.toString()] = flavor;\n return acc;\n};\n\n/**\n * Middleware that will normalize the flavors array into a dictionary\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const flavorsMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const flavors = input.flavors.reduce(\n flavorReducer,\n {} as Record<string, Flavor>\n );\n context.result = { ...context.result, flavors };\n await next();\n};\n","export function locateRelatedBrand(\n jsonData: Record<string, any>,\n slot: string\n) {\n const relatedBrand = jsonData[`slotrb:${slot}.brand`];\n return relatedBrand;\n}\n","import type { BeverageScreenData } from \"../types\";\n\nexport const processRelatedBrand =\n (json: Record<string, any>) =>\n (\n beverageData: BeverageScreenData,\n brandId: string,\n slot: string,\n key: string\n ) => {\n if (!beverageData.relatedBrand) {\n beverageData.relatedBrand = {};\n }\n\n if (!beverageData.relatedBrand[brandId]) {\n beverageData.relatedBrand[brandId] = {\n rank: slot,\n };\n }\n\n const beverageKey = key.replace(`slotrb:${slot}.`, \"\");\n beverageData.relatedBrand[brandId][beverageKey] = json[key];\n };\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type {\n AvailabilityContext,\n BeverageScreen,\n BeverageScreenData,\n UiSchemaResponse,\n} from \"../types\";\nimport { locateRelatedBrand } from \"../util/locate-brand\";\nimport { processRelatedBrand } from \"../util/process-related-brand\";\n\nfunction organizeBeverageData(\n jsonData: Record<string, any>\n): BeverageScreenData {\n const beverageData: BeverageScreenData = {};\n\n for (const key in jsonData) {\n // eslint-disable-next-line no-prototype-builtins\n if (jsonData.hasOwnProperty(key) && key.includes(\"slot\")) {\n const relatedBrand = key.includes(\"slotrb\");\n if (relatedBrand) {\n const slot = key.split(\":\")[1].split(\".\")[0]; // Extracting the slot number\n const relatedBrand = locateRelatedBrand(jsonData, slot);\n processRelatedBrand(jsonData)(beverageData, relatedBrand, slot, key);\n }\n }\n }\n\n return beverageData;\n}\nconst beverageScreenReducer =\n (input: UiSchemaResponse) =>\n (acc: Record<string, BeverageScreen>, curr: string) => {\n acc[curr] = input.beverageScreens[curr];\n acc[curr].beverages = {\n ...acc[curr].beverages,\n ...organizeBeverageData(acc[curr]),\n };\n return acc;\n };\n\n/**\n * Middleware that will normalize the beverage screen data. The middleware will perform the following:\n * 1. Organize the beverage screen data into a dictionary keyed by the brand id\n * 2. Adds a beverages property to the beverage screen data that contains the organized beverage data\n * 3. Processes related brands for each beverage screen\n *\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const relatedBrandMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const beverageScreens = Object.keys(input.beverageScreens).reduce(\n beverageScreenReducer(input),\n input.beverageScreens\n );\n context.result = { ...context.result, beverageScreens };\n await next();\n};\n","import {\n kosFetch,\n processMiddleware,\n type DataLoader,\n type Middleware,\n} from \"@kosdev-code/kos-ui-sdk\";\nimport { assetsMiddleware } from \"./middleware/assets\";\nimport { beverageScreenMiddleware } from \"./middleware/beverage-screen\";\nimport { beveragesMiddleware } from \"./middleware/beverages\";\nimport { brandScreenMiddleware } from \"./middleware/brand-screen\";\nimport { brandsMiddleware } from \"./middleware/brands\";\nimport { copyMiddleware } from \"./middleware/copy-input\";\nimport { flavorsMiddleware } from \"./middleware/flavors\";\nimport { relatedBrandMiddleware } from \"./middleware/related-brands\";\nimport type { AvailabilityContext, UiSchemaResponse } from \"./types\";\n\nexport const transformAvailabilityData = async (\n input: UiSchemaResponse,\n additionalMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n >[] = [],\n replace = false\n): Promise<AvailabilityContext> => {\n const middleware = replace\n ? [...additionalMiddleware]\n : [\n copyMiddleware,\n assetsMiddleware,\n flavorsMiddleware,\n beveragesMiddleware,\n brandsMiddleware,\n beverageScreenMiddleware,\n relatedBrandMiddleware,\n brandScreenMiddleware,\n ...additionalMiddleware,\n ];\n const availabilityContext = await processMiddleware<\n UiSchemaResponse,\n AvailabilityContext\n >(input, middleware);\n\n return availabilityContext;\n};\n\n/**\n * Props for the freestyle availability loader\n */\nexport interface AvailabilityLoaderProps {\n /** the url to send the request for the UiSchemaData. Defaults to http://localhost:8081/system/cui/core.json */\n url?: string;\n\n /** additional middlewares to execute as part of the data processing */\n middleware?: Middleware<UiSchemaResponse, AvailabilityContext>[];\n\n /** if true, replace the default middleware with the provided middleware */\n replace?: boolean;\n}\n/**\n * Utility method to load the freestyle brandset data into the availability context.\n *\n * This loader will retrieve the UI Schema from the provided URL and transform it into\n * a format that can be used to populate the availability brands and beverages with UI schema\n * data.\n *\n * With this data, the availability models can have access to the brandset assets for\n * brands, beverages and flavours.\n *\n *\n * @param props\n * @returns A DataLoader function that will load the availability context\n */\nexport const freestyleAvailabilityLoader =\n ({\n url = \"http://localhost:8081/system/cui/core.json\",\n middleware = [],\n replace = false,\n }: AvailabilityLoaderProps = {}): DataLoader =>\n async (): Promise<AvailabilityContext> => {\n const schema = await kosFetch(url);\n if (schema.ok) {\n const response = await schema.json<UiSchemaResponse>();\n if (!response) {\n throw new Error(\"Failed to parse availability context\");\n }\n return await transformAvailabilityData(response, middleware, replace);\n }\n throw new Error(\"Failed to load availability context\");\n };\n","import {\n DataMapper,\n IndexExtension,\n PropertyMapper,\n} from \"@kosdev-code/kos-ui-sdk\";\nimport type {\n FreestyleIngredientData,\n FreestyleIngredientModelData,\n FreestyleIngredientResponseData,\n} from \"../../../models/types/ingredients\";\n\nexport const ingredientDataMapper: DataMapper = async (\n data: FreestyleIngredientResponseData\n) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { id, name, ...rest } = data;\n const response: FreestyleIngredientData = {\n ...rest,\n ingredientMacro: rest.bib && !rest.sweetener ? \"macro\" : \"micro\",\n };\n return response;\n};\n\nexport const ingredientIndexExtension: IndexExtension<FreestyleIngredientModelData> =\n {\n macro: \"ingredientMacro\",\n };\nexport const ingredientCategoryMapper: PropertyMapper = (\n ingredientData: FreestyleIngredientResponseData\n) => ingredientData.type;\n","import type { SelectedPourable } from \"@kosdev-code/kos-dispense-sdk\";\n\nexport const pourableRequestMapper = async (data: SelectedPourable) => {\n return {\n bevId: data.beverage?.rawId,\n };\n};\n","import type { TroubleServices } from \"@kosdev-code/kos-ui-sdk\";\n\ntype TroubleResponse = TroubleServices.TroubleResponse<{ flex: any }>;\n\ninterface RankAwareTrouble {\n rank: number;\n}\n\ninterface RoleAwareTrouble {\n visibleRole: string;\n}\n\ninterface ColorAwareTrouble {\n color: string;\n}\n\nconst isRankedInfo = (i: any): i is RankAwareTrouble => i?.rank !== undefined;\n\nconst isRoleAwareInfo = (i: any): i is RoleAwareTrouble =>\n i?.visibleRole !== undefined;\n\nconst isColorAwareInfo = (i: any): i is ColorAwareTrouble =>\n i?.color !== undefined;\n\nexport const freestyleTroubleRankMapper = (trouble: TroubleResponse) => {\n const info = trouble.attrs?.flex;\n if (isRankedInfo(info)) {\n return info.rank; // return the rank\n }\n return 0; // return 0 if not ranked\n};\n\nexport const freestyleTroubleColorMapper = (trouble: TroubleResponse) => {\n const info = trouble.attrs?.flex;\n if (isColorAwareInfo(info)) {\n return info.color; // return the color\n }\n return \"orange\"; // return ORANGE if no color defined\n};\n\nexport const freestyleTroubleRoleMapper = (trouble: TroubleResponse) => {\n const info = trouble.attrs?.flex;\n if (isRoleAwareInfo(info)) {\n return info.visibleRole; // return the role\n }\n return \"TECHNICIAN\"; // return empty if no role\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { DispenseExtensionManager } from \"@kosdev-code/kos-dispense-sdk\";\nimport {\n CoreExtensionManager,\n EXTENSION_TROUBLE_DATA_MAPPER,\n ExtensionManager,\n KosFeatureFlags,\n type TroubleModel,\n} from \"@kosdev-code/kos-ui-sdk\";\nimport type { AgitationRequiredTroubleIface } from \"../models/cartridge-agitator/types\";\nimport { FEATURE_SUPPORTS_ICE } from \"../models/freestyle-assembly/freestyle-assembly-model\";\nimport { freestyleAssemblyDataMapper } from \"./extensions/assembly/assembly-data-mapper\";\nimport {\n freestyleAvailabilityLoader,\n type AvailabilityLoaderProps,\n} from \"./extensions/availability/freestyle-loader\";\nimport {\n ingredientDataMapper,\n ingredientIndexExtension,\n} from \"./extensions/ingredient\";\nimport { pourableRequestMapper } from \"./extensions/pourable/select-pourable-mapper\";\nimport {\n freestyleTroubleColorMapper,\n freestyleTroubleRankMapper,\n freestyleTroubleRoleMapper,\n} from \"./extensions/trouble/trouble-utils\";\nexport const EXTENSION_PLUGIN_VISIBILITY = \"pluginVisibility\";\n\nexport class FreestyleExtensionManager {\n core: CoreExtensionManager;\n dispense: DispenseExtensionManager;\n constructor(core: CoreExtensionManager, dispense: DispenseExtensionManager) {\n this.core = core;\n this.dispense = dispense;\n }\n\n /**\n * Loads the core brandset data into a format that can be consumed by the\n * freestyle models.\n * */\n registerFreestyleBrandsetReader(props: AvailabilityLoaderProps = {}) {\n this.dispense.registerAvailabilityLoader(\n freestyleAvailabilityLoader(props)\n );\n\n return this;\n }\n\n registerFreestylePourableMapper() {\n this.dispense.registerSelectedPourableDataMapper(pourableRequestMapper);\n }\n\n registerFreestyleAssemblyMapper() {\n this.dispense.registerAssemblyDataMapper(freestyleAssemblyDataMapper);\n }\n\n registerFreestyleIngredientIndex() {\n this.dispense.registerIngredientIndex(ingredientIndexExtension);\n }\n\n registerFreestyleIngredientDataMapper() {\n this.dispense.registerIngredientDataMapper(ingredientDataMapper);\n }\n\n registerFreestyleColorMapper() {\n this.core.registerTroubleColorMapper(freestyleTroubleColorMapper);\n }\n\n registerFreestyleRankMapper() {\n this.core.registerTroubleRankMapper(freestyleTroubleRankMapper);\n }\n\n registerFreestyleRoleMapper() {\n this.core.registerTroubleRoleMapper(freestyleTroubleRoleMapper);\n }\n\n registerFreestyleIceAgitator() {\n ExtensionManager[EXTENSION_PLUGIN_VISIBILITY].register(\n EXTENSION_PLUGIN_VISIBILITY,\n (key) =>\n key !== \"iceAgitator\" ||\n KosFeatureFlags.isFeatureEnabled(FEATURE_SUPPORTS_ICE)\n );\n }\n\n registerFreestyleAgitationRequiredTroubleMapper() {\n ExtensionManager[EXTENSION_TROUBLE_DATA_MAPPER].register(\n \"agitationRequired\",\n async (trouble: TroubleModel<AgitationRequiredTroubleIface>) => {\n return { isAgitationRequired: !!trouble.data.agitationRequired };\n }\n );\n }\n\n initializeFreestyleExtension() {\n this.registerFreestylePourableMapper();\n this.registerFreestyleAssemblyMapper();\n this.registerFreestyleIngredientIndex();\n this.registerFreestyleIngredientDataMapper();\n this.registerFreestyleIceAgitator();\n this.registerFreestyleAgitationRequiredTroubleMapper();\n this.registerFreestyleRankMapper();\n this.registerFreestyleColorMapper();\n this.registerFreestyleRoleMapper();\n }\n}\n/**\n * The KosExtensionManager provides access to the extension points that are provided in the SDK for Dispense applications.\n *\n * The extension points are divided into two categories:\n *\n * @param core - The core extension {@link CoreExtensionManager} points are used to extend the base models that are provided by the SDK.\n * @param dispense - The dispense extension {@link DispenseExtensionManager} points are used to extend the models that are specific to the Dispense SDK.\n */\nexport class KosExtensionManager {\n dispense: DispenseExtensionManager;\n core: CoreExtensionManager;\n freestyle: FreestyleExtensionManager;\n constructor() {\n this.dispense = new DispenseExtensionManager();\n this.core = new CoreExtensionManager();\n this.freestyle = new FreestyleExtensionManager(this.core, this.dispense);\n }\n}\n"],"names":["organizeBeverageData","beverageScreenReducer","relatedBrand"],"mappings":"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"}
1
+ {"version":3,"file":"extension-utils-H-ll8ljh.js","sources":["../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/assets.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/beverage-screen.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/beverages.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/brand-screen.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/brands.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/copy-input.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/flavors.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/util/locate-brand.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/util/process-related-brand.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/middleware/related-brands.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/availability/freestyle-loader.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/ingredient/model-extension.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/pourable/select-pourable-mapper.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extensions/trouble/trouble-utils.ts","../../../packages/kos-freestyle-sdk/src/models/utils/extension-utils.ts"],"sourcesContent":["import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type { Asset, AvailabilityContext, UiSchemaResponse } from \"../types\";\n\nconst assetReducer = (acc: Record<string, Asset>, asset: Asset) => {\n acc[asset.dbId.toString()] = asset;\n return acc;\n};\n\n/**\n * Middleware that will normalize the assets array into a dictionary\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const assetsMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const assets = input.assets.reduce(assetReducer, {} as Record<string, Asset>);\n context.result = { ...context.result, assets };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type {\n AvailabilityContext,\n BeverageScreen,\n BeverageScreenData,\n UiSchemaResponse,\n} from \"../types\";\n\nfunction organizeBeverageData(\n jsonData: Record<string, any>\n): BeverageScreenData {\n const beverageData: BeverageScreenData = {};\n\n for (const key in jsonData) {\n // eslint-disable-next-line no-prototype-builtins\n if (jsonData.hasOwnProperty(key) && key.includes(\"slot\")) {\n const relatedBrand = key.includes(\"slotrb\");\n if (!relatedBrand) {\n const slot = key.split(\".\")[1]; // Extracting the slot number\n const beverageId = jsonData[`slot.${slot}.beverage`];\n\n if (beverageId) {\n // eslint-disable-next-line max-depth\n if (!beverageData[beverageId]) {\n beverageData[beverageId] = {};\n }\n\n beverageData[beverageId].rank = slot;\n // Removing the slot.x part from the key and adding to the object\n const beverageKey = key.replace(`slot.${slot}.`, \"\");\n beverageData[beverageId][beverageKey] = jsonData[key];\n }\n }\n }\n }\n\n return beverageData;\n}\nconst beverageScreenReducer =\n (input: UiSchemaResponse) =>\n (acc: Record<string, BeverageScreen>, curr: string) => {\n acc[curr] = input.beverageScreens[curr];\n acc[curr].beverages = organizeBeverageData(acc[curr]);\n return acc;\n };\n\n/**\n * Middleware that will normalize the beverage screen data. The middleware will perform the following:\n * 1. Organize the beverage screen data into a dictionary keyed by the brand id\n * 2. Adds a beverages property to the beverage screen data that contains the organized beverage data\n * 3. Processes related brands for each beverage screen\n *\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const beverageScreenMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const beverageScreens = Object.keys(input.beverageScreens).reduce(\n beverageScreenReducer(input),\n input.beverageScreens\n );\n context.result = { ...context.result, beverageScreens };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type { AvailabilityContext, Beverage, UiSchemaResponse } from \"../types\";\n\nconst beverageReducer = (acc: Record<string, Beverage>, beverage: Beverage) => {\n acc[beverage.beverageId.toString()] = beverage;\n return acc;\n};\n\n/**\n * Middleware that will normalize the brands array into a dictionary\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const beveragesMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const beverages = input.beverages.reduce(\n beverageReducer,\n {} as Record<string, Beverage>\n );\n const beverageMap = input.beverages.reduce((acc, curr) => {\n acc[curr.dbId.toString()] = curr.beverageId.toString();\n return acc;\n }, {} as Record<string, string>);\n context.result = { ...context.result, beverages, beverageMap };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type {\n AvailabilityContext,\n BrandScreenData,\n UiSchemaResponse,\n} from \"../types\";\n\nfunction organizeBrandData(jsonData: Record<string, any>): Record<string, any> {\n const brandScreenData: BrandScreenData = { rank: 0 };\n\n for (const key in jsonData) {\n // eslint-disable-next-line no-prototype-builtins\n if (jsonData.hasOwnProperty(key) && key.includes(\"slot\")) {\n const slot = key.split(\".\")[1]; // Extracting the slot number\n const position = slot.split(\":\")[1]; // Extracting the position number\n const brandId = jsonData[`slot.${slot}.brand`];\n\n if (brandId) {\n if (!brandScreenData[brandId]) {\n brandScreenData[brandId] = {\n rank: Number(position),\n };\n }\n\n // Removing the slot.x part from the key and adding to the object\n const brandKey = key.replace(`slot.${slot}.`, \"\");\n brandScreenData[brandId][brandKey] = jsonData[key];\n }\n }\n }\n\n return brandScreenData;\n}\nexport const brandScreenMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const brandScreen = organizeBrandData(input.brandScreen);\n context.result = { ...context.result, brandScreen };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type { AvailabilityContext, Brand, UiSchemaResponse } from \"../types\";\n\nconst brandReducer = (acc: Record<string, Brand>, brand: Brand) => {\n acc[brand.dbId.toString()] = brand;\n return acc;\n};\n\n/**\n * Middleware that will normalize the brands array into a dictionary\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const brandsMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const brands = input.brands.reduce(brandReducer, {} as Record<string, Brand>);\n context.result = { ...context.result, brands };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\n\nexport const copyMiddleware: Middleware<any, any> = async (context, next) => {\n context.result = { ...context.data };\n await next();\n};\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type { AvailabilityContext, Flavor, UiSchemaResponse } from \"../types\";\n\nconst flavorReducer = (acc: Record<string, Flavor>, flavor: Flavor) => {\n acc[flavor.dbId.toString()] = flavor;\n return acc;\n};\n\n/**\n * Middleware that will normalize the flavors array into a dictionary\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const flavorsMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const flavors = input.flavors.reduce(\n flavorReducer,\n {} as Record<string, Flavor>\n );\n context.result = { ...context.result, flavors };\n await next();\n};\n","export function locateRelatedBrand(\n jsonData: Record<string, any>,\n slot: string\n) {\n const relatedBrand = jsonData[`slotrb:${slot}.brand`];\n return relatedBrand;\n}\n","import type { BeverageScreenData } from \"../types\";\n\nexport const processRelatedBrand =\n (json: Record<string, any>) =>\n (\n beverageData: BeverageScreenData,\n brandId: string,\n slot: string,\n key: string\n ) => {\n if (!beverageData.relatedBrand) {\n beverageData.relatedBrand = {};\n }\n\n if (!beverageData.relatedBrand[brandId]) {\n beverageData.relatedBrand[brandId] = {\n rank: slot,\n };\n }\n\n const beverageKey = key.replace(`slotrb:${slot}.`, \"\");\n beverageData.relatedBrand[brandId][beverageKey] = json[key];\n };\n","import type { Middleware } from \"@kosdev-code/kos-ui-sdk\";\nimport type {\n AvailabilityContext,\n BeverageScreen,\n BeverageScreenData,\n UiSchemaResponse,\n} from \"../types\";\nimport { locateRelatedBrand } from \"../util/locate-brand\";\nimport { processRelatedBrand } from \"../util/process-related-brand\";\n\nfunction organizeBeverageData(\n jsonData: Record<string, any>\n): BeverageScreenData {\n const beverageData: BeverageScreenData = {};\n\n for (const key in jsonData) {\n // eslint-disable-next-line no-prototype-builtins\n if (jsonData.hasOwnProperty(key) && key.includes(\"slot\")) {\n const relatedBrand = key.includes(\"slotrb\");\n if (relatedBrand) {\n const slot = key.split(\":\")[1].split(\".\")[0]; // Extracting the slot number\n const relatedBrand = locateRelatedBrand(jsonData, slot);\n processRelatedBrand(jsonData)(beverageData, relatedBrand, slot, key);\n }\n }\n }\n\n return beverageData;\n}\nconst beverageScreenReducer =\n (input: UiSchemaResponse) =>\n (acc: Record<string, BeverageScreen>, curr: string) => {\n acc[curr] = input.beverageScreens[curr];\n acc[curr].beverages = {\n ...acc[curr].beverages,\n ...organizeBeverageData(acc[curr]),\n };\n return acc;\n };\n\n/**\n * Middleware that will normalize the beverage screen data. The middleware will perform the following:\n * 1. Organize the beverage screen data into a dictionary keyed by the brand id\n * 2. Adds a beverages property to the beverage screen data that contains the organized beverage data\n * 3. Processes related brands for each beverage screen\n *\n * @param context The context object that contains the data and result\n * @param next called at the end of the middleware to indicate that the next middleware can be called\n */\nexport const relatedBrandMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n> = async (context, next) => {\n const input = context.data;\n const beverageScreens = Object.keys(input.beverageScreens).reduce(\n beverageScreenReducer(input),\n input.beverageScreens\n );\n context.result = { ...context.result, beverageScreens };\n await next();\n};\n","import {\n kosFetch,\n processMiddleware,\n type DataLoader,\n type Middleware,\n} from \"@kosdev-code/kos-ui-sdk\";\nimport { assetsMiddleware } from \"./middleware/assets\";\nimport { beverageScreenMiddleware } from \"./middleware/beverage-screen\";\nimport { beveragesMiddleware } from \"./middleware/beverages\";\nimport { brandScreenMiddleware } from \"./middleware/brand-screen\";\nimport { brandsMiddleware } from \"./middleware/brands\";\nimport { copyMiddleware } from \"./middleware/copy-input\";\nimport { flavorsMiddleware } from \"./middleware/flavors\";\nimport { relatedBrandMiddleware } from \"./middleware/related-brands\";\nimport type { AvailabilityContext, UiSchemaResponse } from \"./types\";\n\nexport const transformAvailabilityData = async (\n input: UiSchemaResponse,\n additionalMiddleware: Middleware<\n UiSchemaResponse,\n AvailabilityContext\n >[] = [],\n replace = false\n): Promise<AvailabilityContext> => {\n const middleware = replace\n ? [...additionalMiddleware]\n : [\n copyMiddleware,\n assetsMiddleware,\n flavorsMiddleware,\n beveragesMiddleware,\n brandsMiddleware,\n beverageScreenMiddleware,\n relatedBrandMiddleware,\n brandScreenMiddleware,\n ...additionalMiddleware,\n ];\n const availabilityContext = await processMiddleware<\n UiSchemaResponse,\n AvailabilityContext\n >(input, middleware);\n\n return availabilityContext;\n};\n\n/**\n * Props for the freestyle availability loader\n */\nexport interface AvailabilityLoaderProps {\n /** the url to send the request for the UiSchemaData. Defaults to http://localhost:8081/system/cui/core.json */\n url?: string;\n\n /** additional middlewares to execute as part of the data processing */\n middleware?: Middleware<UiSchemaResponse, AvailabilityContext>[];\n\n /** if true, replace the default middleware with the provided middleware */\n replace?: boolean;\n}\n/**\n * Utility method to load the freestyle brandset data into the availability context.\n *\n * This loader will retrieve the UI Schema from the provided URL and transform it into\n * a format that can be used to populate the availability brands and beverages with UI schema\n * data.\n *\n * With this data, the availability models can have access to the brandset assets for\n * brands, beverages and flavours.\n *\n *\n * @param props\n * @returns A DataLoader function that will load the availability context\n */\nexport const freestyleAvailabilityLoader =\n ({\n url = \"http://localhost:8081/system/cui/core.json\",\n middleware = [],\n replace = false,\n }: AvailabilityLoaderProps = {}): DataLoader =>\n async (): Promise<AvailabilityContext> => {\n const schema = await kosFetch(url);\n if (schema.ok) {\n const response = await schema.json<UiSchemaResponse>();\n if (!response) {\n throw new Error(\"Failed to parse availability context\");\n }\n return await transformAvailabilityData(response, middleware, replace);\n }\n throw new Error(\"Failed to load availability context\");\n };\n","import {\n DataMapper,\n IndexExtension,\n PropertyMapper,\n} from \"@kosdev-code/kos-ui-sdk\";\nimport type {\n FreestyleIngredientData,\n FreestyleIngredientModelData,\n FreestyleIngredientResponseData,\n} from \"../../../models/types/ingredients\";\n\nexport const ingredientDataMapper: DataMapper = async (\n data: FreestyleIngredientResponseData\n) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { id, name, ...rest } = data;\n const response: FreestyleIngredientData = {\n ...rest,\n ingredientMacro: rest.bib && !rest.sweetener ? \"macro\" : \"micro\",\n };\n return response;\n};\n\nexport const ingredientIndexExtension: IndexExtension<FreestyleIngredientModelData> =\n {\n macro: \"ingredientMacro\",\n };\nexport const ingredientCategoryMapper: PropertyMapper = (\n ingredientData: FreestyleIngredientResponseData\n) => ingredientData.type;\n","import type { SelectedPourable } from \"@kosdev-code/kos-dispense-sdk\";\n\nexport const pourableRequestMapper = async (data: SelectedPourable) => {\n return {\n bevId: data.beverage?.rawId,\n };\n};\n","import type { TroubleServices } from \"@kosdev-code/kos-ui-sdk\";\n\ntype TroubleResponse = TroubleServices.TroubleResponse<{ flex: any }>;\n\ninterface RankAwareTrouble {\n rank: number;\n}\n\ninterface RoleAwareTrouble {\n visibleRole: string;\n}\n\ninterface ColorAwareTrouble {\n color: string;\n}\n\nconst isRankedInfo = (i: any): i is RankAwareTrouble => i?.rank !== undefined;\n\nconst isRoleAwareInfo = (i: any): i is RoleAwareTrouble =>\n i?.visibleRole !== undefined;\n\nconst isColorAwareInfo = (i: any): i is ColorAwareTrouble =>\n i?.color !== undefined;\n\nexport const freestyleTroubleRankMapper = (trouble: TroubleResponse) => {\n const info = trouble.attrs?.flex;\n if (isRankedInfo(info)) {\n return info.rank; // return the rank\n }\n return 0; // return 0 if not ranked\n};\n\nexport const freestyleTroubleColorMapper = (trouble: TroubleResponse) => {\n const info = trouble.attrs?.flex;\n if (isColorAwareInfo(info)) {\n return info.color; // return the color\n }\n return \"orange\"; // return ORANGE if no color defined\n};\n\nexport const freestyleTroubleRoleMapper = (trouble: TroubleResponse) => {\n const info = trouble.attrs?.flex;\n if (isRoleAwareInfo(info)) {\n return info.visibleRole; // return the role\n }\n return \"TECHNICIAN\"; // return empty if no role\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { DispenseExtensionManager } from \"@kosdev-code/kos-dispense-sdk\";\nimport {\n CoreExtensionManager,\n EXTENSION_TROUBLE_DATA_MAPPER,\n ExtensionManager,\n KosFeatureFlags,\n type TroubleModel,\n} from \"@kosdev-code/kos-ui-sdk\";\nimport type { AgitationRequiredTroubleIface } from \"../models/cartridge-agitator/types\";\nimport { FEATURE_SUPPORTS_ICE } from \"../models/freestyle-assembly/freestyle-assembly-model\";\nimport { freestyleAssemblyDataMapper } from \"./extensions/assembly/assembly-data-mapper\";\nimport {\n freestyleAvailabilityLoader,\n type AvailabilityLoaderProps,\n} from \"./extensions/availability/freestyle-loader\";\nimport {\n ingredientDataMapper,\n ingredientIndexExtension,\n} from \"./extensions/ingredient\";\nimport { pourableRequestMapper } from \"./extensions/pourable/select-pourable-mapper\";\nimport {\n freestyleTroubleColorMapper,\n freestyleTroubleRankMapper,\n freestyleTroubleRoleMapper,\n} from \"./extensions/trouble/trouble-utils\";\nexport const EXTENSION_PLUGIN_VISIBILITY = \"pluginVisibility\";\n\nexport class FreestyleExtensionManager {\n core: CoreExtensionManager;\n dispense: DispenseExtensionManager;\n constructor(core: CoreExtensionManager, dispense: DispenseExtensionManager) {\n this.core = core;\n this.dispense = dispense;\n }\n\n /**\n * Loads the core brandset data into a format that can be consumed by the\n * freestyle models.\n * */\n registerFreestyleBrandsetReader(props: AvailabilityLoaderProps = {}) {\n this.dispense.registerAvailabilityLoader(\n freestyleAvailabilityLoader(props)\n );\n\n return this;\n }\n\n registerFreestylePourableMapper() {\n this.dispense.registerSelectedPourableDataMapper(pourableRequestMapper);\n }\n\n registerFreestyleAssemblyMapper() {\n this.dispense.registerAssemblyDataMapper(freestyleAssemblyDataMapper);\n }\n\n registerFreestyleIngredientIndex() {\n this.dispense.registerIngredientIndex(ingredientIndexExtension);\n }\n\n registerFreestyleIngredientDataMapper() {\n this.dispense.registerIngredientDataMapper(ingredientDataMapper);\n }\n\n registerFreestyleColorMapper() {\n this.core.registerTroubleColorMapper(freestyleTroubleColorMapper);\n }\n\n registerFreestyleRankMapper() {\n this.core.registerTroubleRankMapper(freestyleTroubleRankMapper);\n }\n\n registerFreestyleRoleMapper() {\n this.core.registerTroubleRoleMapper(freestyleTroubleRoleMapper);\n }\n\n registerFreestyleIceAgitator() {\n ExtensionManager[EXTENSION_PLUGIN_VISIBILITY].register(\n EXTENSION_PLUGIN_VISIBILITY,\n (key) =>\n key !== \"iceAgitator\" ||\n KosFeatureFlags.isFeatureEnabled(FEATURE_SUPPORTS_ICE)\n );\n }\n\n registerFreestyleAgitationRequiredTroubleMapper() {\n ExtensionManager[EXTENSION_TROUBLE_DATA_MAPPER].register(\n \"agitationRequired\",\n async (trouble: TroubleModel<AgitationRequiredTroubleIface>) => {\n return { isAgitationRequired: !!trouble.data.agitationRequired };\n }\n );\n }\n\n initializeFreestyleExtension() {\n this.registerFreestylePourableMapper();\n this.registerFreestyleAssemblyMapper();\n this.registerFreestyleIngredientIndex();\n this.registerFreestyleIngredientDataMapper();\n this.registerFreestyleIceAgitator();\n this.registerFreestyleAgitationRequiredTroubleMapper();\n this.registerFreestyleRankMapper();\n this.registerFreestyleColorMapper();\n this.registerFreestyleRoleMapper();\n }\n}\n/**\n * The KosExtensionManager provides access to the extension points that are provided in the SDK for Dispense applications.\n *\n * The extension points are divided into two categories:\n *\n * @param core - The core extension {@link CoreExtensionManager} points are used to extend the base models that are provided by the SDK.\n * @param dispense - The dispense extension {@link DispenseExtensionManager} points are used to extend the models that are specific to the Dispense SDK.\n */\nexport class KosExtensionManager {\n dispense: DispenseExtensionManager;\n core: CoreExtensionManager;\n freestyle: FreestyleExtensionManager;\n constructor() {\n this.dispense = new DispenseExtensionManager();\n this.core = new CoreExtensionManager();\n this.freestyle = new FreestyleExtensionManager(this.core, this.dispense);\n }\n}\n"],"names":["organizeBeverageData","beverageScreenReducer","relatedBrand"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,MAAM,eAAe,CAAC,KAA4B,UAAiB;AACjE,MAAI,MAAM,KAAK,SAAA,CAAU,IAAI;AAC7B,SAAO;AACT;AAOO,MAAM,mBAGT,OAAO,SAAS,SAAS;AAC3B,QAAM,QAAQ,QAAQ;AACtB,QAAM,SAAS,MAAM,OAAO,OAAO,cAAc,CAAA,CAA2B;AAC5E,UAAQ,SAAS,EAAE,GAAG,QAAQ,QAAQ,OAAA;AACtC,QAAM,KAAA;AACR;ACbA,SAASA,uBACP,UACoB;AACpB,QAAM,eAAmC,CAAA;AAEzC,aAAW,OAAO,UAAU;AAE1B,QAAI,SAAS,eAAe,GAAG,KAAK,IAAI,SAAS,MAAM,GAAG;AACxD,YAAM,eAAe,IAAI,SAAS,QAAQ;AAC1C,UAAI,CAAC,cAAc;AACjB,cAAM,OAAO,IAAI,MAAM,GAAG,EAAE,CAAC;AAC7B,cAAM,aAAa,SAAS,QAAQ,IAAI,WAAW;AAEnD,YAAI,YAAY;AAEd,cAAI,CAAC,aAAa,UAAU,GAAG;AAC7B,yBAAa,UAAU,IAAI,CAAA;AAAA,UAC7B;AAEA,uBAAa,UAAU,EAAE,OAAO;AAEhC,gBAAM,cAAc,IAAI,QAAQ,QAAQ,IAAI,KAAK,EAAE;AACnD,uBAAa,UAAU,EAAE,WAAW,IAAI,SAAS,GAAG;AAAA,QACtD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AACA,MAAMC,0BACJ,CAAC,UACD,CAAC,KAAqC,SAAiB;AACrD,MAAI,IAAI,IAAI,MAAM,gBAAgB,IAAI;AACtC,MAAI,IAAI,EAAE,YAAYD,uBAAqB,IAAI,IAAI,CAAC;AACpD,SAAO;AACT;AAWK,MAAM,2BAGT,OAAO,SAAS,SAAS;AAC3B,QAAM,QAAQ,QAAQ;AACtB,QAAM,kBAAkB,OAAO,KAAK,MAAM,eAAe,EAAE;AAAA,IACzDC,wBAAsB,KAAK;AAAA,IAC3B,MAAM;AAAA,EAAA;AAER,UAAQ,SAAS,EAAE,GAAG,QAAQ,QAAQ,gBAAA;AACtC,QAAM,KAAA;AACR;AC/DA,MAAM,kBAAkB,CAAC,KAA+B,aAAuB;AAC7E,MAAI,SAAS,WAAW,SAAA,CAAU,IAAI;AACtC,SAAO;AACT;AAOO,MAAM,sBAGT,OAAO,SAAS,SAAS;AAC3B,QAAM,QAAQ,QAAQ;AACtB,QAAM,YAAY,MAAM,UAAU;AAAA,IAChC;AAAA,IACA,CAAA;AAAA,EAAC;AAEH,QAAM,cAAc,MAAM,UAAU,OAAO,CAAC,KAAK,SAAS;AACxD,QAAI,KAAK,KAAK,SAAA,CAAU,IAAI,KAAK,WAAW,SAAA;AAC5C,WAAO;AAAA,EACT,GAAG,CAAA,CAA4B;AAC/B,UAAQ,SAAS,EAAE,GAAG,QAAQ,QAAQ,WAAW,YAAA;AACjD,QAAM,KAAA;AACR;ACrBA,SAAS,kBAAkB,UAAoD;AAC7E,QAAM,kBAAmC,EAAE,MAAM,EAAA;AAEjD,aAAW,OAAO,UAAU;AAE1B,QAAI,SAAS,eAAe,GAAG,KAAK,IAAI,SAAS,MAAM,GAAG;AACxD,YAAM,OAAO,IAAI,MAAM,GAAG,EAAE,CAAC;AAC7B,YAAM,WAAW,KAAK,MAAM,GAAG,EAAE,CAAC;AAClC,YAAM,UAAU,SAAS,QAAQ,IAAI,QAAQ;AAE7C,UAAI,SAAS;AACX,YAAI,CAAC,gBAAgB,OAAO,GAAG;AAC7B,0BAAgB,OAAO,IAAI;AAAA,YACzB,MAAM,OAAO,QAAQ;AAAA,UAAA;AAAA,QAEzB;AAGA,cAAM,WAAW,IAAI,QAAQ,QAAQ,IAAI,KAAK,EAAE;AAChD,wBAAgB,OAAO,EAAE,QAAQ,IAAI,SAAS,GAAG;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AACO,MAAM,wBAGT,OAAO,SAAS,SAAS;AAC3B,QAAM,QAAQ,QAAQ;AACtB,QAAM,cAAc,kBAAkB,MAAM,WAAW;AACvD,UAAQ,SAAS,EAAE,GAAG,QAAQ,QAAQ,YAAA;AACtC,QAAM,KAAA;AACR;ACtCA,MAAM,eAAe,CAAC,KAA4B,UAAiB;AACjE,MAAI,MAAM,KAAK,SAAA,CAAU,IAAI;AAC7B,SAAO;AACT;AAOO,MAAM,mBAGT,OAAO,SAAS,SAAS;AAC3B,QAAM,QAAQ,QAAQ;AACtB,QAAM,SAAS,MAAM,OAAO,OAAO,cAAc,CAAA,CAA2B;AAC5E,UAAQ,SAAS,EAAE,GAAG,QAAQ,QAAQ,OAAA;AACtC,QAAM,KAAA;AACR;ACnBO,MAAM,iBAAuC,OAAO,SAAS,SAAS;AAC3E,UAAQ,SAAS,EAAE,GAAG,QAAQ,KAAA;AAC9B,QAAM,KAAA;AACR;ACFA,MAAM,gBAAgB,CAAC,KAA6B,WAAmB;AACrE,MAAI,OAAO,KAAK,SAAA,CAAU,IAAI;AAC9B,SAAO;AACT;AAOO,MAAM,oBAGT,OAAO,SAAS,SAAS;AAC3B,QAAM,QAAQ,QAAQ;AACtB,QAAM,UAAU,MAAM,QAAQ;AAAA,IAC5B;AAAA,IACA,CAAA;AAAA,EAAC;AAEH,UAAQ,SAAS,EAAE,GAAG,QAAQ,QAAQ,QAAA;AACtC,QAAM,KAAA;AACR;ACxBO,SAAS,mBACd,UACA,MACA;AACA,QAAM,eAAe,SAAS,UAAU,IAAI,QAAQ;AACpD,SAAO;AACT;ACJO,MAAM,sBACX,CAAC,SACD,CACE,cACA,SACA,MACA,QACG;AACH,MAAI,CAAC,aAAa,cAAc;AAC9B,iBAAa,eAAe,CAAA;AAAA,EAC9B;AAEA,MAAI,CAAC,aAAa,aAAa,OAAO,GAAG;AACvC,iBAAa,aAAa,OAAO,IAAI;AAAA,MACnC,MAAM;AAAA,IAAA;AAAA,EAEV;AAEA,QAAM,cAAc,IAAI,QAAQ,UAAU,IAAI,KAAK,EAAE;AACrD,eAAa,aAAa,OAAO,EAAE,WAAW,IAAI,KAAK,GAAG;AAC5D;ACZF,SAAS,qBACP,UACoB;AACpB,QAAM,eAAmC,CAAA;AAEzC,aAAW,OAAO,UAAU;AAE1B,QAAI,SAAS,eAAe,GAAG,KAAK,IAAI,SAAS,MAAM,GAAG;AACxD,YAAM,eAAe,IAAI,SAAS,QAAQ;AAC1C,UAAI,cAAc;AAChB,cAAM,OAAO,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;AAC3C,cAAMC,gBAAe,mBAAmB,UAAU,IAAI;AACtD,4BAAoB,QAAQ,EAAE,cAAcA,eAAc,MAAM,GAAG;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AACA,MAAM,wBACJ,CAAC,UACD,CAAC,KAAqC,SAAiB;AACrD,MAAI,IAAI,IAAI,MAAM,gBAAgB,IAAI;AACtC,MAAI,IAAI,EAAE,YAAY;AAAA,IACpB,GAAG,IAAI,IAAI,EAAE;AAAA,IACb,GAAG,qBAAqB,IAAI,IAAI,CAAC;AAAA,EAAA;AAEnC,SAAO;AACT;AAWK,MAAM,yBAGT,OAAO,SAAS,SAAS;AAC3B,QAAM,QAAQ,QAAQ;AACtB,QAAM,kBAAkB,OAAO,KAAK,MAAM,eAAe,EAAE;AAAA,IACzD,sBAAsB,KAAK;AAAA,IAC3B,MAAM;AAAA,EAAA;AAER,UAAQ,SAAS,EAAE,GAAG,QAAQ,QAAQ,gBAAA;AACtC,QAAM,KAAA;AACR;AC5CO,MAAM,4BAA4B,OACvC,OACA,uBAGM,CAAA,GACN,UAAU,UACuB;AACjC,QAAM,aAAa,UACf,CAAC,GAAG,oBAAoB,IACxB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EAAA;AAET,QAAM,sBAAsB,MAAM,kBAGhC,OAAO,UAAU;AAEnB,SAAO;AACT;AA6BO,MAAM,8BACX,CAAC;AAAA,EACC,MAAM;AAAA,EACN,aAAa,CAAA;AAAA,EACb,UAAU;AACZ,IAA6B,CAAA,MAC7B,YAA0C;AACxC,QAAM,SAAS,MAAM,SAAS,GAAG;AACjC,MAAI,OAAO,IAAI;AACb,UAAM,WAAW,MAAM,OAAO,KAAA;AAC9B,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,sCAAsC;AAAA,IACxD;AACA,WAAO,MAAM,0BAA0B,UAAU,YAAY,OAAO;AAAA,EACtE;AACA,QAAM,IAAI,MAAM,qCAAqC;AACvD;AC7EK,MAAM,uBAAmC,OAC9C,SACG;AAEH,QAAM,EAAE,IAAI,MAAM,GAAG,SAAS;AAC9B,QAAM,WAAoC;AAAA,IACxC,GAAG;AAAA,IACH,iBAAiB,KAAK,OAAO,CAAC,KAAK,YAAY,UAAU;AAAA,EAAA;AAE3D,SAAO;AACT;AAEO,MAAM,2BACX;AAAA,EACE,OAAO;AACT;ACxBK,MAAM,wBAAwB,OAAO,SAA2B;AACrE,SAAO;AAAA,IACL,OAAO,KAAK,UAAU;AAAA,EAAA;AAE1B;ACUA,MAAM,eAAe,CAAC,MAAkC,GAAG,SAAS;AAEpE,MAAM,kBAAkB,CAAC,MACvB,GAAG,gBAAgB;AAErB,MAAM,mBAAmB,CAAC,MACxB,GAAG,UAAU;AAER,MAAM,6BAA6B,CAAC,YAA6B;AACtE,QAAM,OAAO,QAAQ,OAAO;AAC5B,MAAI,aAAa,IAAI,GAAG;AACtB,WAAO,KAAK;AAAA,EACd;AACA,SAAO;AACT;AAEO,MAAM,8BAA8B,CAAC,YAA6B;AACvE,QAAM,OAAO,QAAQ,OAAO;AAC5B,MAAI,iBAAiB,IAAI,GAAG;AAC1B,WAAO,KAAK;AAAA,EACd;AACA,SAAO;AACT;AAEO,MAAM,6BAA6B,CAAC,YAA6B;AACtE,QAAM,OAAO,QAAQ,OAAO;AAC5B,MAAI,gBAAgB,IAAI,GAAG;AACzB,WAAO,KAAK;AAAA,EACd;AACA,SAAO;AACT;ACnBO,MAAM,8BAA8B;AAEpC,MAAM,0BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA,YAAY,MAA4B,UAAoC;AAC1E,SAAK,OAAO;AACZ,SAAK,WAAW;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gCAAgC,QAAiC,IAAI;AACnE,SAAK,SAAS;AAAA,MACZ,4BAA4B,KAAK;AAAA,IAAA;AAGnC,WAAO;AAAA,EACT;AAAA,EAEA,kCAAkC;AAChC,SAAK,SAAS,mCAAmC,qBAAqB;AAAA,EACxE;AAAA,EAEA,kCAAkC;AAChC,SAAK,SAAS,2BAA2B,2BAA2B;AAAA,EACtE;AAAA,EAEA,mCAAmC;AACjC,SAAK,SAAS,wBAAwB,wBAAwB;AAAA,EAChE;AAAA,EAEA,wCAAwC;AACtC,SAAK,SAAS,6BAA6B,oBAAoB;AAAA,EACjE;AAAA,EAEA,+BAA+B;AAC7B,SAAK,KAAK,2BAA2B,2BAA2B;AAAA,EAClE;AAAA,EAEA,8BAA8B;AAC5B,SAAK,KAAK,0BAA0B,0BAA0B;AAAA,EAChE;AAAA,EAEA,8BAA8B;AAC5B,SAAK,KAAK,0BAA0B,0BAA0B;AAAA,EAChE;AAAA,EAEA,+BAA+B;AAC7B,qBAAiB,2BAA2B,EAAE;AAAA,MAC5C;AAAA,MACA,CAAC,QACC,QAAQ,iBACR,gBAAgB,iBAAiB,oBAAoB;AAAA,IAAA;AAAA,EAE3D;AAAA,EAEA,kDAAkD;AAChD,qBAAiB,6BAA6B,EAAE;AAAA,MAC9C;AAAA,MACA,OAAO,YAAyD;AAC9D,eAAO,EAAE,qBAAqB,CAAC,CAAC,QAAQ,KAAK,kBAAA;AAAA,MAC/C;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,+BAA+B;AAC7B,SAAK,gCAAA;AACL,SAAK,gCAAA;AACL,SAAK,iCAAA;AACL,SAAK,sCAAA;AACL,SAAK,6BAAA;AACL,SAAK,gDAAA;AACL,SAAK,4BAAA;AACL,SAAK,6BAAA;AACL,SAAK,4BAAA;AAAA,EACP;AACF;AASO,MAAM,oBAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AACZ,SAAK,WAAW,IAAI,yBAAA;AACpB,SAAK,OAAO,IAAI,qBAAA;AAChB,SAAK,YAAY,IAAI,0BAA0B,KAAK,MAAM,KAAK,QAAQ;AAAA,EACzE;AACF;"}
package/index.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const service = require("./service-DP30iIee.cjs");
4
- const extensionUtils = require("./extension-utils-D5XZ8LIl.cjs");
5
- const useNutritionInfo = require("./use-nutrition-info-jT0h49sO.cjs");
3
+ const service = require("./service-C8lk9GgD.cjs");
4
+ const extensionUtils = require("./extension-utils-D847XVCc.cjs");
5
+ const useNutritionInfo = require("./use-nutrition-info-Cy9rRWLz.cjs");
6
6
  exports.AGITATION_REQUIRED_TROUBLE = service.AGITATION_REQUIRED_TROUBLE;
7
7
  exports.AgitationRequiredTrouble = service.AgitationRequiredTrouble;
8
8
  exports.CarbAgitator = service.CarbAgitator;
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import { A, a, C, b, c, d, e, s, f, g, F, h, i, j, k, l, m, I, n, K, L, R, o, S, r } from "./service-BCeBcq6r.js";
2
- import { E, i as i2, F as F2, a as a2, b as b2, K as K2, c as c2 } from "./extension-utils-BGWhQNVU.js";
3
- import { u, a as a3, b as b3, c as c3, w } from "./use-nutrition-info-BCn3S1KP.js";
1
+ import { A, a, C, b, c, d, e, s, f, g, F, h, i, j, k, l, m, I, n, K, L, R, o, S, r } from "./service-BDbUdYS7.js";
2
+ import { E, i as i2, F as F2, a as a2, b as b2, K as K2, c as c2 } from "./extension-utils-H-ll8ljh.js";
3
+ import { u, a as a3, b as b3, c as c3, w } from "./use-nutrition-info-CFICkr6p.js";
4
4
  export {
5
5
  A as AGITATION_REQUIRED_TROUBLE,
6
6
  a as AgitationRequiredTrouble,
@@ -22,27 +22,13 @@ export declare const MODEL_TYPE = "agitation-required-trouble-model";
22
22
  */
23
23
  export type AgitationRequiredTroubleModel = PublicModelInterface<AgitationRequiredTroubleModelImpl>;
24
24
  /**
25
- * Factory function to determine if a trouble requires agitation handling.
26
- *
27
- * Examines the trouble model's data to determine if it represents an
28
- * insufficient agitation condition that requires a dedicated agitation
29
- * trouble model.
25
+ * Companion factory for trouble models. Returns the agitation trouble model type when the trouble's
26
+ * data has `agitationRequired` set, so the framework creates an {@link AgitationRequiredTroubleModel}
27
+ * companion for it.
30
28
  *
31
29
  * @param troubleModel - The trouble model to examine
32
30
  * @returns The agitation model type if agitation is required, undefined otherwise
33
31
  *
34
- * @example
35
- * ```typescript
36
- * const modelType = agitationModelFactory(troubleModel);
37
- * if (modelType) {
38
- * // Create agitation trouble model
39
- * const agitationModel = AgitationRequiredTrouble
40
- * .instance(troubleModel.id)
41
- * .options({ companionParent: troubleModel })
42
- * .build();
43
- * }
44
- * ```
45
- *
46
32
  * @category Trouble Models
47
33
  */
48
34
  export declare const agitationModelFactory: (troubleModel: TroubleModel) => "agitation-required-trouble-model" | undefined;
@@ -60,37 +46,13 @@ export interface AgitationRequiredTroubleModelImpl extends KosLoggerAware, KosCo
60
46
  trouble: TroubleModel<HolderTroubleData>;
61
47
  }
62
48
  /**
63
- * Companion model for managing agitation-required troubles in KOS beverage dispensers.
64
- *
65
- * This model represents troubles caused by insufficient agitation in ingredient holders,
66
- * typically occurring when carbonation levels are too low or agitation mechanisms fail.
67
- * It provides resolution capabilities and deferral logic to prevent pouring until
68
- * agitation conditions are met.
69
- *
70
- * The model integrates with the KOS configuration system to respect the
71
- * `ncui.agitateBeforePour` setting, allowing operators to control whether
72
- * pouring should wait for agitation to complete.
49
+ * Companion model for troubles that need the holder to be agitated first, typically because
50
+ * carbonation is too low. It resolves through the parent trouble and defers resolution while the
51
+ * holder has insufficient-agitation troubles and the `ncui.agitateBeforePour` setting is enabled.
73
52
  *
74
53
  * @remarks
75
- * This is a companion model to the parent trouble model, created via the
76
- * {@link agitationModelFactory} when a trouble's `agitationRequired` flag is set.
77
- *
78
- * @example
79
- * ```typescript
80
- * // Factory-based creation (typical usage)
81
- * const agitationTrouble = AgitationRequiredTrouble
82
- * .instance(troubleId)
83
- * .options({ companionParent: parentTroubleModel })
84
- * .build();
85
- *
86
- * // Check if pouring should be deferred
87
- * if (agitationTrouble.shouldDefer) {
88
- * await agitationTrouble.defer();
89
- * }
90
- *
91
- * // Resolve the trouble
92
- * await agitationTrouble.resolve();
93
- * ```
54
+ * Created by the framework through {@link agitationModelFactory} when a trouble's
55
+ * `agitationRequired` flag is set.
94
56
  *
95
57
  * @category Trouble Models
96
58
  * @author Mark Pomerant (mark@matrica.ca)
@@ -126,10 +88,7 @@ export declare class AgitationRequiredTroubleModelImpl implements IKosDataModel,
126
88
  */
127
89
  constructor(modelId: string);
128
90
  /**
129
- * Resolves the agitation trouble by delegating to the parent trouble model.
130
- *
131
- * Resolution typically involves completing the agitation process and clearing
132
- * the trouble state once carbonation or mixing levels are acceptable.
91
+ * Resolves the trouble through the parent trouble model.
133
92
  *
134
93
  * @returns Promise resolving to the future response from the parent trouble's resolution
135
94
  */
@@ -154,15 +113,8 @@ export declare class AgitationRequiredTroubleModelImpl implements IKosDataModel,
154
113
  */
155
114
  updateHolder(): void;
156
115
  /**
157
- * Determines if trouble resolution should be deferred until agitation completes.
158
- *
159
- * Trouble resolution is deferred when:
160
- * 1. The holder has active insufficient agitation troubles
161
- * 2. The `agitateBeforePour` configuration is enabled
162
- *
163
- * This ensures that operations requiring agitation (prime, purge, or other
164
- * holder-related troubles) wait for proper carbonation or mixing before
165
- * being marked as resolved.
116
+ * Whether trouble resolution should wait for agitation: true when the holder has insufficient
117
+ * agitation troubles and `agitateBeforePour` is enabled, or when the holder is not loaded yet.
166
118
  *
167
119
  * @returns true if trouble resolution should wait for agitation to complete
168
120
  */
@@ -189,24 +141,7 @@ export declare class AgitationRequiredTroubleModelImpl implements IKosDataModel,
189
141
  clearDefer(): void;
190
142
  }
191
143
  /**
192
- * Registration factory for creating AgitationRequiredTrouble model instances.
193
- *
194
- * Use this constant to create new instances of the agitation trouble model
195
- * using the fluent factory pattern.
196
- *
197
- * @example
198
- * ```typescript
199
- * // Create a new agitation trouble model
200
- * const agitationTrouble = AgitationRequiredTrouble
201
- * .instance(troubleId)
202
- * .options({ companionParent: parentTroubleModel })
203
- * .build();
204
- *
205
- * // Check deferral status
206
- * if (agitationTrouble.shouldDefer) {
207
- * console.log('Pouring deferred due to agitation');
208
- * }
209
- * ```
144
+ * Registration factory for the AgitationRequiredTrouble model.
210
145
  *
211
146
  * @category Trouble Models
212
147
  */
@@ -1 +1 @@
1
- {"version":3,"file":"agitation-required-trouble-model.d.ts","sourceRoot":"","sources":["../../../../../../packages/kos-freestyle-sdk/src/models/models/agitation-required-trouble/agitation-required-trouble-model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAEL,WAAW,EACX,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,cAAc,EACd,2BAA2B,EAC3B,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACb,MAAM,yBAAyB,CAAC;AAWjC,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,SAAS,CAAC;AAE/D;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,qCAAqC,CAAC;AAE7D;;;;;;;;;GASG;AACH,MAAM,MAAM,6BAA6B,GACvC,oBAAoB,CAAC,iCAAiC,CAAC,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,qBAAqB,GAAI,cAAc,YAAY,mDAK/D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,iCAAiC,CAAC;AAEzE,MAAM,WAAW,iCACf,SAAQ,cAAc,EACpB,uBAAuB,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAC1D,0FAA0F;IAC1F,OAAO,EAAE,YAAY,CAAC,iBAAiB,CAAC,CAAC;CAC1C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBAGa,iCACX,YAAW,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU;IAEpE;;;;;;;OAOG;IACH,MAAM,CAAC,YAAY,EAAE,2BAA2B,CAC9C,6BAA6B,EAC7B,+BAA+B,CAChC,CAAC;IAEF;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,cAAc,CAAS;IAE/B;;;;;OAKG;IAKH,iBAAiB,EAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAE/C;;;;OAIG;gBACS,OAAO,EAAE,MAAM;IAK3B;;;;;;;OAOG;IACG,OAAO,IAAI,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAIpD;;;;;;;;OAQG;IAEH,IAAI,MAAM,iCAYT;IAED;;;;;;;OAOG;IAKH,YAAY;IAUZ;;;;;;;;;;;;OAYG;IACH,IAAI,WAAW,YASd;IAED;;;;OAIG;IACH,IAAI,QAAQ,YAEX;IAED;;;;;OAKG;IACH,KAAK;IAIL;;;;;OAKG;IACH,UAAU;CAGX;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,wBAAwB,6FACW,CAAC"}
1
+ {"version":3,"file":"agitation-required-trouble-model.d.ts","sourceRoot":"","sources":["../../../../../../packages/kos-freestyle-sdk/src/models/models/agitation-required-trouble/agitation-required-trouble-model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAEL,WAAW,EACX,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,cAAc,EACd,2BAA2B,EAC3B,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACb,MAAM,yBAAyB,CAAC;AAWjC,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,SAAS,CAAC;AAE/D;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,qCAAqC,CAAC;AAE7D;;;;;;;;;GASG;AACH,MAAM,MAAM,6BAA6B,GACvC,oBAAoB,CAAC,iCAAiC,CAAC,CAAC;AAE1D;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,GAAI,cAAc,YAAY,mDAK/D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,iCAAiC,CAAC;AAEzE,MAAM,WAAW,iCACf,SAAQ,cAAc,EACpB,uBAAuB,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAC1D,0FAA0F;IAC1F,OAAO,EAAE,YAAY,CAAC,iBAAiB,CAAC,CAAC;CAC1C;AAED;;;;;;;;;;;;GAYG;AACH,qBAGa,iCACX,YAAW,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU;IAEpE;;;;;;;OAOG;IACH,MAAM,CAAC,YAAY,EAAE,2BAA2B,CAC9C,6BAA6B,EAC7B,+BAA+B,CAChC,CAAC;IAEF;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,cAAc,CAAS;IAE/B;;;;;OAKG;IAKH,iBAAiB,EAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAE/C;;;;OAIG;gBACS,OAAO,EAAE,MAAM;IAK3B;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAIpD;;;;;;;;OAQG;IAEH,IAAI,MAAM,iCAYT;IAED;;;;;;;OAOG;IAKH,YAAY;IAUZ;;;;;OAKG;IACH,IAAI,WAAW,YASd;IAED;;;;OAIG;IACH,IAAI,QAAQ,YAEX;IAED;;;;;OAKG;IACH,KAAK;IAIL;;;;;OAKG;IACH,UAAU;CAGX;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,6FACW,CAAC"}
@@ -276,26 +276,7 @@ export declare class CarbAgitatorModelImpl implements IKosDataModel {
276
276
  handleTestCarbTank(tracker?: string): Promise<import('@kosdev-code/kos-ui-sdk').FutureResponse>;
277
277
  }
278
278
  /**
279
- * Registration factory for creating CarbAgitator model instances.
280
- *
281
- * Use this constant to create new carb agitator instances using the fluent factory pattern.
282
- *
283
- * @example
284
- * ```typescript
285
- * // Create a new carb agitator model
286
- * const carbAgitator = CarbAgitator
287
- * .instance("carb-agitator-1")
288
- * .options({ name: "Carb Tank" })
289
- * .build();
290
- *
291
- * // Activate carb tank
292
- * await carbAgitator.activateCarbTank();
293
- *
294
- * // Check readiness
295
- * if (carbAgitator.canProceed) {
296
- * console.log("Ready for beverage operations");
297
- * }
298
- * ```
279
+ * Registration factory for the CarbAgitator model.
299
280
  *
300
281
  * @category Models
301
282
  */
@@ -1 +1 @@
1
- {"version":3,"file":"carb-agitator-model.d.ts","sourceRoot":"","sources":["../../../../../../packages/kos-freestyle-sdk/src/models/models/carb-agitator/carb-agitator-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"carb-agitator-model.d.ts","sourceRoot":"","sources":["../../../../../../packages/kos-freestyle-sdk/src/models/models/carb-agitator/carb-agitator-model.ts"],"names":[],"mappings":"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"}
@@ -2,26 +2,13 @@ import { FutureResponse } from '@kosdev-code/kos-ui-sdk';
2
2
  /**
3
3
  * Initiates a carb tank test operation on the device.
4
4
  *
5
- * Sends a test command to the carb tank hardware at the specified path and returns
6
- * a future response that can be used to track the test operation's progress and
7
- * completion status.
5
+ * Returns the future response that tracks the test's progress and completion.
8
6
  *
9
7
  * @param path - Device path to the carb tank hardware (e.g., "assembly:core:board:macksm:carbTank:carbTank")
10
8
  * @param tracker - Future tracker ID for monitoring operation progress
11
9
  * @returns Promise resolving to a FutureResponse for operation tracking
12
10
  * @throws {Error} If the server returns no response data
13
11
  *
14
- * @example
15
- * ```typescript
16
- * const future = await testCarbTank(
17
- * "assembly:core:board:macksm:carbTank:carbTank",
18
- * "tracker-123"
19
- * );
20
- *
21
- * // Monitor future progress
22
- * console.log(`Test status: ${future.status}`);
23
- * ```
24
- *
25
12
  * @category Services
26
13
  */
27
14
  export declare const testCarbTank: (path: string, tracker: string) => Promise<FutureResponse>;
@@ -1 +1 @@
1
- {"version":3,"file":"carb-tank-services.d.ts","sourceRoot":"","sources":["../../../../../../../packages/kos-freestyle-sdk/src/models/models/carb-agitator/services/carb-tank-services.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAGL,KAAK,cAAc,EAEpB,MAAM,yBAAyB,CAAC;AAOjC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,YAAY,GAAU,MAAM,MAAM,EAAE,SAAS,MAAM,4BAY/D,CAAC"}
1
+ {"version":3,"file":"carb-tank-services.d.ts","sourceRoot":"","sources":["../../../../../../../packages/kos-freestyle-sdk/src/models/models/carb-agitator/services/carb-tank-services.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAGL,KAAK,cAAc,EAEpB,MAAM,yBAAyB,CAAC;AAOjC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,GAAU,MAAM,MAAM,EAAE,SAAS,MAAM,4BAY/D,CAAC"}