UNPKG

kopi.js

Version:

API for ordering Singaporean Coffee

147 lines (125 loc) 3.15 kB
export default { parse(name){ name = name.trim().toLowerCase(); // defaults var coffee = 0, condensed_milk = 0, // sweetened evaporated_milk = 0, // unsweetened sugar = 0, water = 0, state = 'warm'; if (/^kopi/.test(name)){ // 1. TYPES sugar = 1; // Kopi C if (/^kopi\s(c|si|see)\b/.test(name)){ evaporated_milk = .2; water = .4; coffee = .4; } // Kopi O else if (/^kopi\soh?\b/.test(name)){ water = .5; coffee = .5; } // Kopi else { condensed_milk = .2; water = .4; coffee = .4; } // 2. STATE if (/\b(peng|bing)\b/.test(name)){ state = 'iced'; } else if (/\bpua sio\b/.test(name)){ state = 'lukewarm'; } // 3. EXPRESSIONS // po = more water, less coffee if (/\bpoh?\b/.test(name)){ water += .1; coffee -= .1; } // gau = more coffee, less water else if (/\b(g|k)a(u|o)\b/.test(name)){ water -= .1; coffee += .1; } // di lo = no water, more coffee else if (/\bdi\slo\b/.test(name)){ coffee += water; water = 0; } // kosong = no sugar if (/\bkosong\b/.test(name)){ if (condensed_milk){ throw new Error('Invalid Kopi. Condensed milk contains sugar.'); } sugar = 0; } // gah dai = sweeter else if (/\b(ga|ka)h?\s(d|t)ai\b/.test(name)){ if (condensed_milk > 0){ condensed_milk += .1; water -= .05; coffee -= .05; } else if (evaporated_milk > 0){ evaporated_milk += .1; water -= .05; coffee -= .05; } sugar = 1.5; } // siu dai = less sweet else if (/\b(siu|siew|xiu)\s(t|d)ai\b/.test(name)){ sugar = .5; } } else if (/^water$/.test(name)){ water = 1; } return { water, coffee, sugar, condensed_milk, evaporated_milk, state }; }, stringify(ingredients = {}){ var {condensed_milk, evaporated_milk, state, sugar, coffee, water} = ingredients; var coffeeText = '', stateText = '', milkText = '', sweetnessText = ''; if (evaporated_milk > 0){ milkText = ' C'; } else if (condensed_milk <= 0){ // No milk milkText = ' O'; } if (state == 'iced'){ stateText = ' Peng'; } else if (state == 'lukewarm'){ stateText = ' Pua Sio'; } if (coffee > water){ if (water == 0){ coffeeText = ' Di Lo'; } else if (condensed_milk > water){ sweetnessText = ' Gah Dai'; } else { coffeeText = ' Gao'; } } else if (coffee < water){ coffeeText = ' Po'; } if (sugar == 0 && condensed_milk <= 0){ sweetnessText = ' Kosong'; } else if (sugar < 1){ sweetnessText = ' Siew Dai'; } else if (sugar > 1){ sweetnessText = ' Gah Dai'; } return `Kopi${milkText}${stateText}${coffeeText}${sweetnessText}`; } };