@recipe-book/core 0.0.3 → 0.1.1

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 (185) hide show
  1. package/CHANGELOG.md +116 -0
  2. package/LICENSE +21 -0
  3. package/README.md +50 -7
  4. package/dist/chunk-D5CV3UF7.cjs +2754 -0
  5. package/dist/chunk-D5CV3UF7.cjs.map +1 -0
  6. package/dist/errors.js +76 -0
  7. package/dist/errors.js.map +1 -0
  8. package/dist/format/duration.js +36 -0
  9. package/dist/format/duration.js.map +1 -0
  10. package/dist/format/ingredient.js +49 -0
  11. package/dist/format/ingredient.js.map +1 -0
  12. package/dist/format/number.js +120 -0
  13. package/dist/format/number.js.map +1 -0
  14. package/dist/format/options.js +31 -0
  15. package/dist/format/options.js.map +1 -0
  16. package/dist/format/quantity.js +144 -0
  17. package/dist/format/quantity.js.map +1 -0
  18. package/dist/format/servings.js +68 -0
  19. package/dist/format/servings.js.map +1 -0
  20. package/dist/format/temperature.js +35 -0
  21. package/dist/format/temperature.js.map +1 -0
  22. package/dist/index.cjs +476 -0
  23. package/dist/index.cjs.map +1 -0
  24. package/dist/index.d.cts +994 -0
  25. package/dist/index.d.ts +994 -5
  26. package/dist/index.js +48 -1
  27. package/dist/index.js.map +1 -0
  28. package/dist/ingredient/parse.js +412 -0
  29. package/dist/ingredient/parse.js.map +1 -0
  30. package/dist/issues.js +26 -0
  31. package/dist/issues.js.map +1 -0
  32. package/dist/quantity/amount.js +78 -0
  33. package/dist/quantity/amount.js.map +1 -0
  34. package/dist/quantity/parse.js +255 -0
  35. package/dist/quantity/parse.js.map +1 -0
  36. package/dist/quantity/scale.js +23 -0
  37. package/dist/quantity/scale.js.map +1 -0
  38. package/dist/recipe/duration.js +28 -0
  39. package/dist/recipe/duration.js.map +1 -0
  40. package/dist/recipe/ids.js +68 -0
  41. package/dist/recipe/ids.js.map +1 -0
  42. package/dist/recipe/infer.js +24 -0
  43. package/dist/recipe/infer.js.map +1 -0
  44. package/dist/recipe/nutrient-units.js +18 -0
  45. package/dist/recipe/nutrient-units.js.map +1 -0
  46. package/dist/recipe/nutrition.js +26 -0
  47. package/dist/recipe/nutrition.js.map +1 -0
  48. package/dist/recipe/parse.js +854 -0
  49. package/dist/recipe/parse.js.map +1 -0
  50. package/dist/recipe/schema.js +32 -0
  51. package/dist/recipe/schema.js.map +1 -0
  52. package/dist/recipe/url.js +9 -0
  53. package/dist/recipe/url.js.map +1 -0
  54. package/dist/resolve.js +120 -0
  55. package/dist/resolve.js.map +1 -0
  56. package/dist/schema-org/find.js +158 -0
  57. package/dist/schema-org/find.js.map +1 -0
  58. package/dist/schema-org/from-json-ld.js +647 -0
  59. package/dist/schema-org/from-json-ld.js.map +1 -0
  60. package/dist/schema-org/nutrients.js +19 -0
  61. package/dist/schema-org/nutrients.js.map +1 -0
  62. package/dist/schema-org/text.js +125 -0
  63. package/dist/schema-org/text.js.map +1 -0
  64. package/dist/schema-org/to-json-ld.js +151 -0
  65. package/dist/schema-org/to-json-ld.js.map +1 -0
  66. package/dist/schema-org.cjs +1062 -0
  67. package/dist/schema-org.cjs.map +1 -0
  68. package/dist/schema-org.d.cts +223 -0
  69. package/dist/schema-org.d.ts +223 -0
  70. package/dist/schema-org.js +10 -0
  71. package/dist/schema-org.js.map +1 -0
  72. package/dist/steps/segment.js +45 -0
  73. package/dist/steps/segment.js.map +1 -0
  74. package/dist/steps/temperature.js +174 -0
  75. package/dist/steps/temperature.js.map +1 -0
  76. package/dist/suggest.js +50 -0
  77. package/dist/suggest.js.map +1 -0
  78. package/dist/types-BknM8KOd.d.cts +628 -0
  79. package/dist/types-BknM8KOd.d.ts +628 -0
  80. package/dist/units/convert.js +79 -0
  81. package/dist/units/convert.js.map +1 -0
  82. package/dist/units/lookup.js +86 -0
  83. package/dist/units/lookup.js.map +1 -0
  84. package/dist/units/registry.js +183 -0
  85. package/dist/units/registry.js.map +1 -0
  86. package/dist/units/system.js +91 -0
  87. package/dist/units/system.js.map +1 -0
  88. package/dist/units/temperature.js +40 -0
  89. package/dist/units/temperature.js.map +1 -0
  90. package/dist/validation.js +90 -0
  91. package/dist/validation.js.map +1 -0
  92. package/package.json +53 -8
  93. package/schema-org/package.json +5 -0
  94. package/dist/chunk-22RBQQWH.mjs +0 -1
  95. package/dist/chunk-3CSP4UZG.mjs +0 -1
  96. package/dist/chunk-3FFMHRB7.mjs +0 -26
  97. package/dist/chunk-4EB3HG6B.mjs +0 -50
  98. package/dist/chunk-4EHNJLGI.mjs +0 -50
  99. package/dist/chunk-4IA5EEKI.mjs +0 -81
  100. package/dist/chunk-4TATADPT.mjs +0 -51
  101. package/dist/chunk-6GI5KLI4.mjs +0 -22
  102. package/dist/chunk-6QJZOZ6W.mjs +0 -49
  103. package/dist/chunk-6YYQ4RYZ.mjs +0 -26
  104. package/dist/chunk-7BBUDI2L.mjs +0 -0
  105. package/dist/chunk-7KEMNCV7.mjs +0 -26
  106. package/dist/chunk-7MMJZZ7Z.mjs +0 -75
  107. package/dist/chunk-BES4V7DM.mjs +0 -26
  108. package/dist/chunk-BRDXRIAH.mjs +0 -50
  109. package/dist/chunk-C45UD45A.mjs +0 -1
  110. package/dist/chunk-CBLJXA6P.mjs +0 -1
  111. package/dist/chunk-CFR2ZBPB.mjs +0 -77
  112. package/dist/chunk-DYMNVFL2.mjs +0 -78
  113. package/dist/chunk-F6AQKXJU.mjs +0 -51
  114. package/dist/chunk-FW4M2R43.mjs +0 -51
  115. package/dist/chunk-GCCEDUST.mjs +0 -75
  116. package/dist/chunk-GE7KBYZR.mjs +0 -26
  117. package/dist/chunk-GN7ZDGYC.mjs +0 -51
  118. package/dist/chunk-GOO2SCQX.mjs +0 -75
  119. package/dist/chunk-HAVKBQLH.mjs +0 -51
  120. package/dist/chunk-HCBIPANU.mjs +0 -50
  121. package/dist/chunk-IEBAGBS7.mjs +0 -51
  122. package/dist/chunk-IQ6WN2V4.mjs +0 -75
  123. package/dist/chunk-JB4Z2FR7.mjs +0 -77
  124. package/dist/chunk-JMTQOTBM.mjs +0 -75
  125. package/dist/chunk-JRO6JUES.mjs +0 -51
  126. package/dist/chunk-KH3SRXET.mjs +0 -52
  127. package/dist/chunk-KNZMCAQZ.mjs +0 -51
  128. package/dist/chunk-KXFUCO3R.mjs +0 -1
  129. package/dist/chunk-LEBGCVCJ.mjs +0 -75
  130. package/dist/chunk-MAHWFCIL.mjs +0 -51
  131. package/dist/chunk-MPH76SLC.mjs +0 -51
  132. package/dist/chunk-MQGMFBJQ.mjs +0 -26
  133. package/dist/chunk-NMIVG7T4.mjs +0 -6
  134. package/dist/chunk-Q3TT3AZ4.mjs +0 -26
  135. package/dist/chunk-QY5HJQIL.mjs +0 -51
  136. package/dist/chunk-RCPLSNKM.mjs +0 -1
  137. package/dist/chunk-SR2KFBT3.mjs +0 -1
  138. package/dist/chunk-ULDLBAEG.mjs +0 -1
  139. package/dist/chunk-UQ3EUYFR.mjs +0 -1
  140. package/dist/chunk-V26OCCTL.mjs +0 -82
  141. package/dist/chunk-WBQAMGXK.mjs +0 -0
  142. package/dist/chunk-WSW6FMUL.mjs +0 -51
  143. package/dist/chunk-WU55SBIV.mjs +0 -75
  144. package/dist/chunk-XINK45P3.mjs +0 -51
  145. package/dist/chunk-XNOHIWI3.mjs +0 -1
  146. package/dist/chunk-XV4QN4LA.mjs +0 -6
  147. package/dist/chunk-YHBXEVUX.mjs +0 -51
  148. package/dist/chunk-YSZSCEI7.mjs +0 -75
  149. package/dist/chunk-YY3SUQ7P.mjs +0 -16
  150. package/dist/chunk-YZB3IG47.mjs +0 -80
  151. package/dist/chunk-ZPZT4LMQ.mjs +0 -25
  152. package/dist/const/conversion.d.mts +0 -7
  153. package/dist/const/conversion.d.ts +0 -7
  154. package/dist/const/conversion.js +0 -1
  155. package/dist/const/conversion.mjs +0 -1
  156. package/dist/const/unit.d.mts +0 -119
  157. package/dist/const/unit.d.ts +0 -119
  158. package/dist/const/unit.js +0 -1
  159. package/dist/const/unit.mjs +0 -1
  160. package/dist/index.d.mts +0 -5
  161. package/dist/index.mjs +0 -1
  162. package/dist/lib/assert.d.mts +0 -18
  163. package/dist/lib/assert.d.ts +0 -18
  164. package/dist/lib/assert.js +0 -1
  165. package/dist/lib/assert.mjs +0 -1
  166. package/dist/lib/ingredient.d.mts +0 -9
  167. package/dist/lib/ingredient.d.ts +0 -9
  168. package/dist/lib/ingredient.js +0 -1
  169. package/dist/lib/ingredient.mjs +0 -1
  170. package/dist/lib/recipe.d.mts +0 -12
  171. package/dist/lib/recipe.d.ts +0 -12
  172. package/dist/lib/recipe.js +0 -1
  173. package/dist/lib/recipe.mjs +0 -1
  174. package/dist/lib/runtime.d.mts +0 -3
  175. package/dist/lib/runtime.d.ts +0 -3
  176. package/dist/lib/runtime.js +0 -1
  177. package/dist/lib/runtime.mjs +0 -1
  178. package/dist/lib/unit.d.mts +0 -19
  179. package/dist/lib/unit.d.ts +0 -19
  180. package/dist/lib/unit.js +0 -1
  181. package/dist/lib/unit.mjs +0 -1
  182. package/dist/types.d.mts +0 -36
  183. package/dist/types.d.ts +0 -36
  184. package/dist/types.js +0 -1
  185. package/dist/types.mjs +0 -1
package/package.json CHANGED
@@ -1,16 +1,61 @@
1
1
  {
2
2
  "name": "@recipe-book/core",
3
- "version": "0.0.3",
3
+ "version": "0.1.1",
4
+ "description": "Framework-agnostic recipe parsing, scaling, unit conversion and formatting.",
5
+ "homepage": "https://recipe-book.siraj.page",
4
6
  "license": "MIT",
5
- "main": "./dist/index.js",
6
- "module": "./dist/index.mjs",
7
- "types": "./dist/index.d.ts",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/SirajChokshi/recipe-book.git",
10
+ "directory": "core"
11
+ },
12
+ "type": "module",
13
+ "sideEffects": false,
14
+ "exports": {
15
+ ".": {
16
+ "import": {
17
+ "types": "./dist/index.d.ts",
18
+ "default": "./dist/index.js"
19
+ },
20
+ "require": {
21
+ "types": "./dist/index.d.cts",
22
+ "default": "./dist/index.cjs"
23
+ }
24
+ },
25
+ "./schema-org": {
26
+ "import": {
27
+ "types": "./dist/schema-org.d.ts",
28
+ "default": "./dist/schema-org.js"
29
+ },
30
+ "require": {
31
+ "types": "./dist/schema-org.d.cts",
32
+ "default": "./dist/schema-org.cjs"
33
+ }
34
+ },
35
+ "./package.json": "./package.json"
36
+ },
37
+ "main": "./dist/index.cjs",
38
+ "module": "./dist/index.js",
39
+ "types": "./dist/index.d.cts",
8
40
  "files": [
9
- "dist"
41
+ "dist",
42
+ "schema-org",
43
+ "CHANGELOG.md"
10
44
  ],
11
- "sideEffects": false,
45
+ "engines": {
46
+ "node": ">=22"
47
+ },
48
+ "devDependencies": {
49
+ "@standard-schema/spec": "1.1.0",
50
+ "fast-check": "4.10.2",
51
+ "schema-dts": "2.1.0"
52
+ },
12
53
  "scripts": {
13
- "build": "tsup src",
14
- "dev": "tsup src --watch"
54
+ "build": "rm -rf dist && tsup",
55
+ "dev": "tsup --watch",
56
+ "typecheck": "tsc && tsc -p tsconfig.src.json && tsc -p tsconfig.schema-dts.json",
57
+ "check:package": "node ../scripts/check-package.js && node scripts/check-single-copy.js",
58
+ "api:check": "api-extractor run --print-api-report-diff && api-extractor run --print-api-report-diff -c api-extractor.schema-org.json",
59
+ "api:update": "api-extractor run --local && api-extractor run --local -c api-extractor.schema-org.json"
15
60
  }
16
61
  }
@@ -0,0 +1,5 @@
1
+ {
2
+ "main": "../dist/schema-org.cjs",
3
+ "module": "../dist/schema-org.js",
4
+ "types": "../dist/schema-org.d.cts"
5
+ }
@@ -1 +0,0 @@
1
- var e=[{key:!0,name:"gram",abbreviation:"g",value:1,type:"weight"},{name:"kilogram",abbreviation:"kg",value:1e3,type:"weight"},{name:"ounce",abbreviation:"oz",value:28.3495,type:"weight"},{name:"pound",abbreviation:"lb",value:453.592,type:"weight"}],a=[{key:!0,name:"liter",abbreviation:"L",value:1,type:"volume"},{name:"gallon",abbreviation:"gal",value:3.78541,type:"volume"},{name:"milliliter",abbreviation:"mL",value:.001,type:"volume"},{name:"cup",abbreviation:"cup",value:.0625,type:"volume"},{name:"teaspoon",abbreviation:"tsp",value:.0208333,type:"volume"},{name:"tablespoon",abbreviation:"tbsp",value:.0625,type:"volume"},{name:"fluid ounce",abbreviation:"fl oz",value:.125,type:"volume"}],t=[...e,...a];export{e as a,a as b,t as c};
@@ -1 +0,0 @@
1
- var t=!0;export{t as a};
@@ -1,26 +0,0 @@
1
- import {
2
- UnitUtils
3
- } from "./chunk-GN7ZDGYC.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
- };
@@ -1,50 +0,0 @@
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 RecipeUtils = 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.servings,
25
- (servings) => servings !== void 0 && servings <= 0,
26
- msg("Recipe has less than one serving")
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
- servings: config.servings ?? 1,
43
- instructions: config.instructions ?? []
44
- };
45
- }
46
- };
47
-
48
- export {
49
- RecipeUtils
50
- };
@@ -1,50 +0,0 @@
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
- const conversionTable = type === "volume" ? VOLUME_CONVERSION_TABLE : WEIGHT_CONVERSION_TABLE;
22
- const lookupTable = conversionTable[abbreviation];
23
- assert(
24
- lookupTable,
25
- (lookupTable2) => !!lookupTable2[to],
26
- `No conversion table available for unit ${from} to ${to}`
27
- );
28
- return lookupTable[to];
29
- }
30
- /**
31
- * Converts a number from one unit to another
32
- *
33
- * @param amount - The amount to convert
34
- * @param from - The unit to convert from
35
- * @param to - The unit to convert to
36
- * @returns - The converted amount
37
- */
38
- convert(amount, from, to) {
39
- if (from === to) {
40
- return amount;
41
- }
42
- const ratio = this.getConversionRatio(from, to);
43
- return amount * ratio;
44
- }
45
- };
46
- var UnitUtils = new UnitUtilsImpl();
47
-
48
- export {
49
- UnitUtils
50
- };
@@ -1,81 +0,0 @@
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
- };
@@ -1,51 +0,0 @@
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
- };
@@ -1,22 +0,0 @@
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
- };
@@ -1,49 +0,0 @@
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 UnitUtils = class {
14
- static 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
- static getConversionRatio(from, to) {
20
- const { type, abbreviation } = this.getUnit(from);
21
- const conversionTable = type === "volume" ? VOLUME_CONVERSION_TABLE : WEIGHT_CONVERSION_TABLE;
22
- const lookupTable = conversionTable[abbreviation];
23
- assert(
24
- lookupTable,
25
- (lookupTable2) => !!lookupTable2[to],
26
- `No conversion table available for unit ${from} to ${to}`
27
- );
28
- return lookupTable[to];
29
- }
30
- /**
31
- * Converts a number from one unit to another
32
- *
33
- * @param amount - The amount to convert
34
- * @param from - The unit to convert from
35
- * @param to - The unit to convert to
36
- * @returns - The converted amount
37
- */
38
- static convert(amount, from, to) {
39
- if (from === to) {
40
- return amount;
41
- }
42
- const ratio = this.getConversionRatio(from, to);
43
- return amount * ratio;
44
- }
45
- };
46
-
47
- export {
48
- UnitUtils
49
- };
@@ -1,26 +0,0 @@
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
@@ -1,26 +0,0 @@
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
- };
@@ -1,75 +0,0 @@
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
- };
@@ -1,26 +0,0 @@
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
- };
@@ -1,50 +0,0 @@
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 RecipeUtils = 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.servings,
25
- (servings) => servings !== void 0 && servings <= 0,
26
- msg("Recipe has less than one serving")
27
- );
28
- warn(
29
- config.ingredients,
30
- (ingredients) => ingredients.length > 0,
31
- msg("Recipe has no ingredients")
32
- );
33
- }
34
- static 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
- servings: config.servings ?? 1,
43
- instructions: config.instructions ?? []
44
- };
45
- }
46
- };
47
-
48
- export {
49
- RecipeUtils
50
- };
@@ -1 +0,0 @@
1
- function e(n,o,r){if(!o(n))throw new Error(r)}function t(n,o,r){o(n)||console.warn(r)}export{e as a,t as b};
@@ -1 +0,0 @@
1
- import{b as s}from"./chunk-C45UD45A.mjs";import{a as r}from"./chunk-3CSP4UZG.mjs";var t=class{scopedMessageFactory(e){return i=>`${e.name}: ${i}`}validateConfig(e){if(!!0)return;let i=this.scopedMessageFactory(e);s(e.instructions,n=>n.length>0,i("Recipe has no instructions")),s(e.servings,n=>n!==void 0&&n<=0,i("Recipe has less than one serving")),s(e.ingredients,n=>n.length>0,i("Recipe has no ingredients"))}create(e){return this.validateConfig(e),{name:e.name,ingredients:e.ingredients,units:e.units,thumbnail:e.thumbnail,servings:e.servings??1,instructions:e.instructions??[]}}};export{t as a};