@brewfoo/core
TypeScript icon, indicating that this package has built-in type declarations

0.2.0 • Public • Published

Brewfoo Core

The aim of this project is to be the most comprehensive and most accurate and fully free collection of core brewing formulae, calculations and conversions written specifically for the web in TypeScript.

Features

  • Basic quantity and unit conversions.
  • Collection of formulae and calculations.
  • Full recipe planning tool.
  • Water profile and treatment calculations.

Please see TypeDoc for API documentation.

Examples

Simple quantities & conversions:

import { Mass, MassUnit, Temperature, TemperatureUnit, Volume, VolumeUnit } from '@brewfoo/core';

const mass = new Mass(MassUnit.Kilogram, 3.5);
mass.convert(MassUnit.Gram); // => 3500
mass.convert(MassUnit.USPound); // => ~7.7
mass.convert(MassUnit.USOunce); // => ~123.5

const vol = new Volume(VolumeUnit.Liter, 20);
vol.convert(VolumeUnit.USGallon); // => 5.3

const temp = new Temperature(TemperatureUnit.Celsius, 19);
temp.convert(TemperatureUnit.Fahrenheit); // => 66.2

Fermentation calculation:

const calc = new FermentationCalc(
  new Gravity(GravityUnit.SG, 1.07),
  new Gravity(GravityUnit.SG, 1.015),
);
calc.AA; // => ~77.6%
calc.RA; // => ~62.7%
calc.ABV; // => ~7.24%
calc.ABW.g(); // => ~5.67
calc.energy.kcal(); // => ~65.07

IBU calculations:

const util = new UtilizationCalc({
  wortGravity: Gravity.points(60),
  batchVolume: Volume.liter(20),
  boilTime: Duration.minutes(50),
  standTime: Duration.minutes(10),
});
util.rager(); // => ~28.9
util.tinseth(); // => ~20.8

const calc = new IBUCalc({
  mass: Mass.kg(0.06),
  alpha: 10.0,
  batchVolume: Volume.liter(20),
  utilization: 10,
});
calc.alphaMass.g(); // => ~6.0
calc.IBU; // => ~30.0

Simple recipe:

const pale = new Fermentable({
  mass: Mass.kg(3.0),
  color: new Color(ColorUnit.Lovibond, 3),
  power: DiastaticPower.lintner(60),
  extraction: ExtractYield.percent(80),
  isGrain: true,
});
const crystal = new Fermentable({
  mass: Mass.kg(0.4),
  color: new Color(ColorUnit.Lovibond, 120),
  extraction: ExtractYield.percent(70),
  isGrain: true,
});

const magnum = new Hop({
  boilTime: Duration.minutes(60),
  mass: new Mass(MassUnit.Gram, 10),
  alpha: 13.8,
  multiplier: 1.1,
});
const simcoe = new Hop({
  boilTime: Duration.minutes(5),
  mass: new Mass(MassUnit.Gram, 30),
  alpha: 11.3,
});
const citra = new Hop({
  mass: new Mass(MassUnit.Gram, 60),
  alpha: 12.0,
});

const recipe = new RecipeCalc({
  attenuation: 78,
  fermentables: [pale, crystal],
  hops: [magnum, simcoe, citra],
});

recipe.BG.SG(); // => ~1.031
recipe.OG.SG(); // => ~1.040
recipe.FG.SG(); // => ~1.009
recipe.beerColor.convert(ColorUnit.SRM); // => ~13.1
recipe.IBU; // => ~29.5
recipe.BUGU; // => ~0.74
recipe.ABV; // => ~4.1
recipe.ABW.g(); // => ~3.2
recipe.energy.kcal(); // => ~37
recipe.DP.lintner(); // => ~52.9

recipe.waterUsage.boilVolume.L(); // => ~25.3
recipe.waterUsage.totalVolume.L(); // => ~29.7
recipe.postBoilAddition = Volume.liter(6);
recipe.waterUsage.boilVolume.L(); // => ~19.1
recipe.waterUsage.totalVolume.L(); // => ~23.5

Water profiles and treatment:

// Create profile
const london = new WaterProfile({
  calcium: 100,
  magnesium: 5,
  sodium: 30,
  sulphate: 50,
  chloride: 50,
  bicarbonate: 245,
  alkalinity: 200,
  pH: 7.7,
});
london.hardness(); // => 270
london.RA(); // => 126
london.ratio(); // => 1.0
london.cation(); // => 6.7
london.anion(); // => 6.5

// Apply treatments
const treated = london.treat(Volume.liter(20), [
  new DilutionTreatment(10),
  new SaltTreatment(Salt.CalciumChloride, new Mass(MassUnit.Gram, 3)),
  new SaltTreatment(Salt.CalciumSulphate, new Mass(MassUnit.Gram, 3)),
  new AcidTreatment(Acid.Lactic, {
    volume: new Volume(VolumeUnit.Milliliter, 2),
    concentration: 88,
  }),
]); // => { alkalinity: 122, bicarbonate: 150, calcium: 166, chloride: 117, magnesium: 5, pH: 7.7, sodium: 27, sulphate: 129 }
treated.RA(); // => ~0.0

Licence

Licensed under LGPLv3

Readme

Keywords

none

Package Sidebar

Install

npm i @brewfoo/core

Weekly Downloads

0

Version

0.2.0

License

LGPL-3.0-or-later

Unpacked Size

211 kB

Total Files

129

Last publish

Collaborators

  • dim