@recipe-book/core 0.0.1 → 0.0.3

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 (73) hide show
  1. package/dist/{chunk-2WUP3JQY.mjs → chunk-3FFMHRB7.mjs} +3 -2
  2. package/dist/{chunk-IEYO4T4T.mjs → chunk-4EHNJLGI.mjs} +9 -8
  3. package/dist/chunk-4IA5EEKI.mjs +81 -0
  4. package/dist/chunk-4TATADPT.mjs +51 -0
  5. package/dist/chunk-6GI5KLI4.mjs +22 -0
  6. package/dist/chunk-6YYQ4RYZ.mjs +26 -0
  7. package/dist/chunk-7BBUDI2L.mjs +0 -0
  8. package/dist/chunk-7KEMNCV7.mjs +26 -0
  9. package/dist/chunk-7MMJZZ7Z.mjs +75 -0
  10. package/dist/chunk-BES4V7DM.mjs +26 -0
  11. package/dist/{chunk-OBJ5JUVG.mjs → chunk-BRDXRIAH.mjs} +5 -4
  12. package/dist/chunk-CFR2ZBPB.mjs +77 -0
  13. package/dist/chunk-DYMNVFL2.mjs +78 -0
  14. package/dist/{chunk-NJQRYZC2.mjs → chunk-F6AQKXJU.mjs} +7 -4
  15. package/dist/chunk-FW4M2R43.mjs +51 -0
  16. package/dist/chunk-GCCEDUST.mjs +75 -0
  17. package/dist/chunk-GE7KBYZR.mjs +26 -0
  18. package/dist/chunk-GN7ZDGYC.mjs +51 -0
  19. package/dist/chunk-GOO2SCQX.mjs +75 -0
  20. package/dist/chunk-HAVKBQLH.mjs +51 -0
  21. package/dist/chunk-HCBIPANU.mjs +50 -0
  22. package/dist/chunk-IEBAGBS7.mjs +51 -0
  23. package/dist/chunk-IQ6WN2V4.mjs +75 -0
  24. package/dist/chunk-JB4Z2FR7.mjs +77 -0
  25. package/dist/chunk-JMTQOTBM.mjs +75 -0
  26. package/dist/{chunk-JPGZ2MYF.mjs → chunk-JRO6JUES.mjs} +9 -6
  27. package/dist/chunk-KH3SRXET.mjs +52 -0
  28. package/dist/chunk-KNZMCAQZ.mjs +51 -0
  29. package/dist/chunk-LEBGCVCJ.mjs +75 -0
  30. package/dist/chunk-MAHWFCIL.mjs +51 -0
  31. package/dist/chunk-MPH76SLC.mjs +51 -0
  32. package/dist/chunk-MQGMFBJQ.mjs +26 -0
  33. package/dist/chunk-NMIVG7T4.mjs +6 -0
  34. package/dist/chunk-Q3TT3AZ4.mjs +26 -0
  35. package/dist/chunk-QY5HJQIL.mjs +51 -0
  36. package/dist/chunk-RCPLSNKM.mjs +1 -0
  37. package/dist/chunk-UQ3EUYFR.mjs +1 -0
  38. package/dist/chunk-WSW6FMUL.mjs +51 -0
  39. package/dist/chunk-WU55SBIV.mjs +75 -0
  40. package/dist/chunk-XINK45P3.mjs +51 -0
  41. package/dist/chunk-XNOHIWI3.mjs +1 -0
  42. package/dist/chunk-YHBXEVUX.mjs +51 -0
  43. package/dist/chunk-YSZSCEI7.mjs +75 -0
  44. package/dist/const/conversion.d.mts +2 -2
  45. package/dist/const/conversion.d.ts +2 -2
  46. package/dist/index.d.mts +1 -1
  47. package/dist/index.d.ts +1 -1
  48. package/dist/index.js +1 -1
  49. package/dist/index.mjs +1 -1
  50. package/dist/lib/ingredient.d.mts +3 -2
  51. package/dist/lib/ingredient.d.ts +3 -2
  52. package/dist/lib/ingredient.js +1 -1
  53. package/dist/lib/ingredient.mjs +1 -1
  54. package/dist/lib/recipe.d.mts +4 -2
  55. package/dist/lib/recipe.d.ts +4 -2
  56. package/dist/lib/recipe.js +1 -1
  57. package/dist/lib/recipe.mjs +1 -1
  58. package/dist/lib/unit.d.mts +5 -4
  59. package/dist/lib/unit.d.ts +5 -4
  60. package/dist/lib/unit.js +1 -1
  61. package/dist/lib/unit.mjs +1 -1
  62. package/dist/types.d.mts +17 -12
  63. package/dist/types.d.ts +17 -12
  64. package/dist/types.js +1 -1
  65. package/package.json +1 -1
  66. package/dist/chunk-4AN32V3Z.mjs +0 -1
  67. package/dist/chunk-5ZCZ6LQB.mjs +0 -1
  68. package/dist/chunk-BOG6H6FE.mjs +0 -1
  69. package/dist/chunk-CEPTOQUR.mjs +0 -1
  70. package/dist/chunk-EKLUF5ED.mjs +0 -1
  71. package/dist/chunk-LLHRB3T7.mjs +0 -1
  72. package/dist/chunk-MUILH2IA.mjs +0 -1
  73. package/dist/chunk-YHBHNGQX.mjs +0 -1
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  UnitUtils
3
- } from "./chunk-IEYO4T4T.mjs";
3
+ } from "./chunk-GN7ZDGYC.mjs";
4
4
 
5
5
  // src/lib/ingredient.ts
6
- var IngredientUtils = class {
6
+ var IngredientUtilsImpl = class {
7
7
  convert(ingredient, to) {
8
8
  const amount = UnitUtils.convert(
9
9
  ingredient.amount.value,
@@ -19,6 +19,7 @@ var IngredientUtils = class {
19
19
  };
20
20
  }
21
21
  };
22
+ var IngredientUtils = new IngredientUtilsImpl();
22
23
 
23
24
  export {
24
25
  IngredientUtils
@@ -1,22 +1,22 @@
1
+ import {
2
+ VOLUME_CONVERSION_TABLE,
3
+ WEIGHT_CONVERSION_TABLE
4
+ } from "./chunk-V26OCCTL.mjs";
1
5
  import {
2
6
  UNITS
3
7
  } from "./chunk-YZB3IG47.mjs";
4
8
  import {
5
9
  assert
6
10
  } from "./chunk-YY3SUQ7P.mjs";
7
- import {
8
- VOLUME_CONVERSION_TABLE,
9
- WEIGHT_CONVERSION_TABLE
10
- } from "./chunk-V26OCCTL.mjs";
11
11
 
12
12
  // src/lib/unit.ts
13
- var UnitUtils = class {
14
- static getUnit(unit) {
13
+ var UnitUtilsImpl = class {
14
+ getUnit(unit) {
15
15
  const match = UNITS.find((u) => u.abbreviation === unit || u.name === unit);
16
16
  assert(match, (match2) => !!match2, `No unit found for key: ${unit}`);
17
17
  return match;
18
18
  }
19
- static getConversionRatio(from, to) {
19
+ getConversionRatio(from, to) {
20
20
  const { type, abbreviation } = this.getUnit(from);
21
21
  const conversionTable = type === "volume" ? VOLUME_CONVERSION_TABLE : WEIGHT_CONVERSION_TABLE;
22
22
  const lookupTable = conversionTable[abbreviation];
@@ -35,7 +35,7 @@ var UnitUtils = class {
35
35
  * @param to - The unit to convert to
36
36
  * @returns - The converted amount
37
37
  */
38
- static convert(amount, from, to) {
38
+ convert(amount, from, to) {
39
39
  if (from === to) {
40
40
  return amount;
41
41
  }
@@ -43,6 +43,7 @@ var UnitUtils = class {
43
43
  return amount * ratio;
44
44
  }
45
45
  };
46
+ var UnitUtils = new UnitUtilsImpl();
46
47
 
47
48
  export {
48
49
  UnitUtils
@@ -0,0 +1,81 @@
1
+ import {
2
+ warn
3
+ } from "./chunk-YY3SUQ7P.mjs";
4
+ import {
5
+ IS_DEV
6
+ } from "./chunk-XV4QN4LA.mjs";
7
+
8
+ // src/lib/recipe.ts
9
+ var RecipeUtilsImpl = class {
10
+ scopedMessageFactory(recipe) {
11
+ return (message) => `${recipe.name}: ${message}`;
12
+ }
13
+ validateConfig(config) {
14
+ if (!IS_DEV) {
15
+ return;
16
+ }
17
+ const msg = this.scopedMessageFactory(config);
18
+ warn(
19
+ config.instructions,
20
+ (instructions) => instructions.length > 0,
21
+ msg("Recipe has no instructions")
22
+ );
23
+ warn(
24
+ config.serves,
25
+ (serves) => serves === void 0 || serves > 0,
26
+ msg("Recipe serves less than 1 person")
27
+ );
28
+ warn(
29
+ config.ingredients,
30
+ (ingredients) => ingredients.length > 0,
31
+ msg("Recipe has no ingredients")
32
+ );
33
+ }
34
+ determineMeasurementSystem(config) {
35
+ const { ingredients } = config;
36
+ const hasMetric = ingredients.some(
37
+ (ingredient) => {
38
+ var _a;
39
+ return (_a = ingredient.conversion) == null ? void 0 : _a.metric;
40
+ }
41
+ );
42
+ const hasImperial = ingredients.some(
43
+ (ingredient) => {
44
+ var _a;
45
+ return (_a = ingredient.conversion) == null ? void 0 : _a["us-customary"];
46
+ }
47
+ );
48
+ if (hasMetric && hasImperial) {
49
+ return void 0;
50
+ }
51
+ if (hasMetric) {
52
+ return "metric";
53
+ }
54
+ if (hasImperial) {
55
+ return "us-customary";
56
+ }
57
+ return void 0;
58
+ }
59
+ create(config) {
60
+ this.validateConfig(config);
61
+ return {
62
+ name: config.name,
63
+ ingredients: config.ingredients,
64
+ // optional
65
+ thumbnail: config.thumbnail,
66
+ serves: config.serves ?? 1,
67
+ instructions: config.instructions ?? [],
68
+ // computed
69
+ measurements: (
70
+ // if the user has specified a measurement system, use that
71
+ // otherwise, determine the measurement system based on the ingredients
72
+ config.measurements ?? this.determineMeasurementSystem(config)
73
+ )
74
+ };
75
+ }
76
+ };
77
+ var RecipeUtils = new RecipeUtilsImpl();
78
+
79
+ export {
80
+ RecipeUtils
81
+ };
@@ -0,0 +1,51 @@
1
+ import {
2
+ warn
3
+ } from "./chunk-YY3SUQ7P.mjs";
4
+ import {
5
+ IS_DEV
6
+ } from "./chunk-XV4QN4LA.mjs";
7
+
8
+ // src/lib/recipe.ts
9
+ var RecipeUtilsImpl = class {
10
+ scopedMessageFactory(recipe) {
11
+ return (message) => `${recipe.name}: ${message}`;
12
+ }
13
+ validateConfig(config) {
14
+ if (!IS_DEV) {
15
+ return;
16
+ }
17
+ const msg = this.scopedMessageFactory(config);
18
+ warn(
19
+ config.instructions,
20
+ (instructions) => instructions.length > 0,
21
+ msg("Recipe has no instructions")
22
+ );
23
+ warn(
24
+ config.serves,
25
+ (servings) => servings === void 0 || servings > 0,
26
+ msg("Recipe serves less than 1 person")
27
+ );
28
+ warn(
29
+ config.ingredients,
30
+ (ingredients) => ingredients.length > 0,
31
+ msg("Recipe has no ingredients")
32
+ );
33
+ }
34
+ create(config) {
35
+ this.validateConfig(config);
36
+ return {
37
+ name: config.name,
38
+ ingredients: config.ingredients,
39
+ units: config.units,
40
+ // optional
41
+ thumbnail: config.thumbnail,
42
+ serves: config.serves ?? 1,
43
+ instructions: config.instructions ?? []
44
+ };
45
+ }
46
+ };
47
+ var RecipeUtils = new RecipeUtilsImpl();
48
+
49
+ export {
50
+ RecipeUtils
51
+ };
@@ -0,0 +1,22 @@
1
+ // src/lib/ingredient.ts
2
+ var IngredientUtilsImpl = class {
3
+ convert(ingredient, to) {
4
+ const amount = (void 0).convert(
5
+ ingredient.amount.value,
6
+ ingredient.amount.unit,
7
+ to
8
+ );
9
+ return {
10
+ ...ingredient,
11
+ amount: {
12
+ value: amount,
13
+ unit: to
14
+ }
15
+ };
16
+ }
17
+ };
18
+ var IngredientUtils = new IngredientUtilsImpl();
19
+
20
+ export {
21
+ IngredientUtils
22
+ };
@@ -0,0 +1,26 @@
1
+ import {
2
+ UnitUtils
3
+ } from "./chunk-6QJZOZ6W.mjs";
4
+
5
+ // src/lib/ingredient.ts
6
+ var IngredientUtilsImpl = class {
7
+ convert(ingredient, to) {
8
+ const amount = UnitUtils.convert(
9
+ ingredient.amount.value,
10
+ ingredient.amount.unit,
11
+ to
12
+ );
13
+ return {
14
+ ...ingredient,
15
+ amount: {
16
+ value: amount,
17
+ unit: to
18
+ }
19
+ };
20
+ }
21
+ };
22
+ var IngredientUtils = new IngredientUtilsImpl();
23
+
24
+ export {
25
+ IngredientUtils
26
+ };
File without changes
@@ -0,0 +1,26 @@
1
+ import {
2
+ UnitUtils
3
+ } from "./chunk-FW4M2R43.mjs";
4
+
5
+ // src/lib/ingredient.ts
6
+ var IngredientUtilsImpl = class {
7
+ convert(ingredient, to) {
8
+ const amount = UnitUtils.convert(
9
+ ingredient.amount.value,
10
+ ingredient.amount.unit,
11
+ to
12
+ );
13
+ return {
14
+ ...ingredient,
15
+ amount: {
16
+ value: amount,
17
+ unit: to
18
+ }
19
+ };
20
+ }
21
+ };
22
+ var IngredientUtils = new IngredientUtilsImpl();
23
+
24
+ export {
25
+ IngredientUtils
26
+ };
@@ -0,0 +1,75 @@
1
+ import {
2
+ warn
3
+ } from "./chunk-YY3SUQ7P.mjs";
4
+ import {
5
+ IS_DEV
6
+ } from "./chunk-XV4QN4LA.mjs";
7
+
8
+ // src/lib/recipe.ts
9
+ var RecipeUtilsImpl = class {
10
+ scopedMessageFactory(recipe) {
11
+ return (message) => `${recipe.name}: ${message}`;
12
+ }
13
+ validateConfig(config) {
14
+ if (!IS_DEV) {
15
+ return;
16
+ }
17
+ const msg = this.scopedMessageFactory(config);
18
+ warn(
19
+ config.instructions,
20
+ (instructions) => instructions.length > 0,
21
+ msg("Recipe has no instructions")
22
+ );
23
+ warn(
24
+ config.serves,
25
+ (serves) => serves === void 0 || serves > 0,
26
+ msg("Recipe serves less than 1 person")
27
+ );
28
+ warn(
29
+ config.ingredients,
30
+ (ingredients) => ingredients.length > 0,
31
+ msg("Recipe has no ingredients")
32
+ );
33
+ }
34
+ determineMeasurementSystem(config) {
35
+ const { ingredients } = config;
36
+ const hasMetric = ingredients.some(
37
+ (ingredient) => {
38
+ var _a;
39
+ return (_a = ingredient.conversion) == null ? void 0 : _a.metric;
40
+ }
41
+ );
42
+ const hasImperial = ingredients.some(
43
+ (ingredient) => {
44
+ var _a;
45
+ return (_a = ingredient.conversion) == null ? void 0 : _a["us-customary"];
46
+ }
47
+ );
48
+ if (hasMetric && hasImperial) {
49
+ return void 0;
50
+ }
51
+ if (hasMetric) {
52
+ return "metric";
53
+ }
54
+ if (hasImperial) {
55
+ return "us-customary";
56
+ }
57
+ return void 0;
58
+ }
59
+ create(config) {
60
+ this.validateConfig(config);
61
+ return {
62
+ name: config.name,
63
+ ingredients: config.ingredients,
64
+ // optional
65
+ thumbnail: config.thumbnail,
66
+ serves: config.serves ?? 1,
67
+ instructions: config.instructions ?? []
68
+ };
69
+ }
70
+ };
71
+ var RecipeUtils = new RecipeUtilsImpl();
72
+
73
+ export {
74
+ RecipeUtils
75
+ };
@@ -0,0 +1,26 @@
1
+ import {
2
+ UnitUtils
3
+ } from "./chunk-MAHWFCIL.mjs";
4
+
5
+ // src/lib/ingredient.ts
6
+ var IngredientUtilsImpl = class {
7
+ convert(ingredient, to) {
8
+ const amount = UnitUtils.convert(
9
+ ingredient.amount.value,
10
+ ingredient.amount.unit,
11
+ to
12
+ );
13
+ return {
14
+ ...ingredient,
15
+ amount: {
16
+ value: amount,
17
+ unit: to
18
+ }
19
+ };
20
+ }
21
+ };
22
+ var IngredientUtils = new IngredientUtilsImpl();
23
+
24
+ export {
25
+ IngredientUtils
26
+ };
@@ -31,15 +31,16 @@ var RecipeUtils = class {
31
31
  msg("Recipe has no ingredients")
32
32
  );
33
33
  }
34
- create(config) {
34
+ static create(config) {
35
35
  this.validateConfig(config);
36
36
  return {
37
37
  name: config.name,
38
38
  ingredients: config.ingredients,
39
- servings: config.servings ?? 1,
40
- instructions: config.instructions ?? [],
41
39
  units: config.units,
42
- thumbnail: config.thumbnail
40
+ // optional
41
+ thumbnail: config.thumbnail,
42
+ servings: config.servings ?? 1,
43
+ instructions: config.instructions ?? []
43
44
  };
44
45
  }
45
46
  };
@@ -0,0 +1,77 @@
1
+ import {
2
+ warn
3
+ } from "./chunk-YY3SUQ7P.mjs";
4
+ import {
5
+ IS_DEV
6
+ } from "./chunk-XV4QN4LA.mjs";
7
+
8
+ // src/lib/recipe.ts
9
+ var RecipeUtilsImpl = class {
10
+ scopedMessageFactory(recipe) {
11
+ return (message) => `${recipe.name}: ${message}`;
12
+ }
13
+ validateConfig(config) {
14
+ if (!IS_DEV) {
15
+ return;
16
+ }
17
+ const msg = this.scopedMessageFactory(config);
18
+ warn(
19
+ config.instructions,
20
+ (instructions) => instructions.length > 0,
21
+ msg("Recipe has no instructions")
22
+ );
23
+ warn(
24
+ config.serves,
25
+ (serves) => serves === void 0 || serves > 0,
26
+ msg("Recipe serves less than 1 person")
27
+ );
28
+ warn(
29
+ config.ingredients,
30
+ (ingredients) => ingredients.length > 0,
31
+ msg("Recipe has no ingredients")
32
+ );
33
+ }
34
+ determineMeasurementSystem(config) {
35
+ const { ingredients } = config;
36
+ const hasMetric = ingredients.some(
37
+ (ingredient) => {
38
+ var _a;
39
+ return (_a = ingredient.conversion) == null ? void 0 : _a.metric;
40
+ }
41
+ );
42
+ const hasImperial = ingredients.some(
43
+ (ingredient) => {
44
+ var _a;
45
+ return (_a = ingredient.conversion) == null ? void 0 : _a["us-customary"];
46
+ }
47
+ );
48
+ if (hasMetric && hasImperial) {
49
+ return void 0;
50
+ }
51
+ if (hasMetric) {
52
+ return "metric";
53
+ }
54
+ if (hasImperial) {
55
+ return "us-customary";
56
+ }
57
+ return void 0;
58
+ }
59
+ create(config) {
60
+ this.validateConfig(config);
61
+ return {
62
+ name: config.name,
63
+ ingredients: config.ingredients,
64
+ // optional
65
+ thumbnail: config.thumbnail,
66
+ serves: config.serves ?? 1,
67
+ instructions: config.instructions ?? [],
68
+ // computed
69
+ measurements: this.determineMeasurementSystem(config)
70
+ };
71
+ }
72
+ };
73
+ var RecipeUtils = new RecipeUtilsImpl();
74
+
75
+ export {
76
+ RecipeUtils
77
+ };
@@ -0,0 +1,78 @@
1
+ import {
2
+ warn
3
+ } from "./chunk-YY3SUQ7P.mjs";
4
+ import {
5
+ IS_DEV
6
+ } from "./chunk-XV4QN4LA.mjs";
7
+
8
+ // src/lib/recipe.ts
9
+ var RecipeUtilsImpl = class {
10
+ scopedMessageFactory(recipe) {
11
+ return (message) => `${recipe.name}: ${message}`;
12
+ }
13
+ validateConfig(config) {
14
+ if (!IS_DEV) {
15
+ return;
16
+ }
17
+ const msg = this.scopedMessageFactory(config);
18
+ warn(
19
+ config.instructions,
20
+ (instructions) => instructions.length > 0,
21
+ msg("Recipe has no instructions")
22
+ );
23
+ warn(
24
+ config.serves,
25
+ (serves) => serves === void 0 || serves > 0,
26
+ msg("Recipe serves less than 1 person")
27
+ );
28
+ warn(
29
+ config.ingredients,
30
+ (ingredients) => ingredients.length > 0,
31
+ msg("Recipe has no ingredients")
32
+ );
33
+ }
34
+ determineMeasurementSystem(config) {
35
+ const { ingredients } = config;
36
+ const hasMetric = ingredients.some(
37
+ (ingredient) => ingredient.amount.unit === "g"
38
+ );
39
+ const hasImperial = ingredients.some(
40
+ (ingredient) => {
41
+ var _a;
42
+ return (_a = ingredient.conversion) == null ? void 0 : _a["us-customary"];
43
+ }
44
+ );
45
+ if (hasMetric && hasImperial) {
46
+ return void 0;
47
+ }
48
+ if (hasMetric) {
49
+ return "metric";
50
+ }
51
+ if (hasImperial) {
52
+ return "us-customary";
53
+ }
54
+ return void 0;
55
+ }
56
+ create(config) {
57
+ this.validateConfig(config);
58
+ return {
59
+ name: config.name,
60
+ ingredients: config.ingredients,
61
+ // optional
62
+ thumbnail: config.thumbnail,
63
+ serves: config.serves ?? 1,
64
+ instructions: config.instructions ?? [],
65
+ // computed
66
+ measurements: (
67
+ // if the user has specified a measurement system, use that
68
+ // otherwise, determine the measurement system based on the ingredients
69
+ config.measurements ?? this.determineMeasurementSystem(config)
70
+ )
71
+ };
72
+ }
73
+ };
74
+ var RecipeUtils = new RecipeUtilsImpl();
75
+
76
+ export {
77
+ RecipeUtils
78
+ };
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-XV4QN4LA.mjs";
7
7
 
8
8
  // src/lib/recipe.ts
9
- var RecipeUtils = class {
9
+ var RecipeUtilsImpl = class {
10
10
  scopedMessageFactory(recipe) {
11
11
  return (message) => `${recipe.name}: ${message}`;
12
12
  }
@@ -21,7 +21,7 @@ var RecipeUtils = class {
21
21
  msg("Recipe has no instructions")
22
22
  );
23
23
  warn(
24
- config.servings,
24
+ config.serves,
25
25
  (servings) => servings !== void 0 && servings <= 0,
26
26
  msg("Recipe has less than one serving")
27
27
  );
@@ -36,12 +36,15 @@ var RecipeUtils = class {
36
36
  return {
37
37
  name: config.name,
38
38
  ingredients: config.ingredients,
39
+ units: config.units,
40
+ // optional
41
+ thumbnail: config.thumbnail,
39
42
  servings: config.servings ?? 1,
40
- instructions: config.instructions ?? [],
41
- units: config.units
43
+ instructions: config.instructions ?? []
42
44
  };
43
45
  }
44
46
  };
47
+ var RecipeUtils = new RecipeUtilsImpl();
45
48
 
46
49
  export {
47
50
  RecipeUtils
@@ -0,0 +1,51 @@
1
+ import {
2
+ VOLUME_CONVERSION_TABLE,
3
+ WEIGHT_CONVERSION_TABLE
4
+ } from "./chunk-V26OCCTL.mjs";
5
+ import {
6
+ UNITS
7
+ } from "./chunk-YZB3IG47.mjs";
8
+ import {
9
+ assert
10
+ } from "./chunk-YY3SUQ7P.mjs";
11
+
12
+ // src/lib/unit.ts
13
+ var UnitUtilsImpl = class {
14
+ getUnit(unit) {
15
+ const match = UNITS.find((u) => u.abbreviation === unit || u.name === unit);
16
+ assert(match, (match2) => !!match2, `No unit found for key: ${unit}`);
17
+ return match;
18
+ }
19
+ getConversionRatio(from, to) {
20
+ const { type, abbreviation } = this.getUnit(from);
21
+ console.log({ type, abbreviation });
22
+ const conversionTable = type === "volume" ? VOLUME_CONVERSION_TABLE : WEIGHT_CONVERSION_TABLE;
23
+ const lookupTable = conversionTable[abbreviation];
24
+ assert(
25
+ lookupTable,
26
+ (lookupTable2) => !!lookupTable2[to],
27
+ `No conversion table available for unit ${from} to ${to}`
28
+ );
29
+ return lookupTable[to];
30
+ }
31
+ /**
32
+ * Converts a number from one unit to another
33
+ *
34
+ * @param amount - The amount to convert
35
+ * @param from - The unit to convert from
36
+ * @param to - The unit to convert to
37
+ * @returns - The converted amount
38
+ */
39
+ convert(amount, from, to) {
40
+ if (from === to) {
41
+ return amount;
42
+ }
43
+ const ratio = this.getConversionRatio(from, to);
44
+ return amount * ratio;
45
+ }
46
+ };
47
+ var UnitUtils = new UnitUtilsImpl();
48
+
49
+ export {
50
+ UnitUtils
51
+ };