open-nutrition-engine 1.0.0 → 1.1.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAWjE;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,QAAQ,EAU3B,CAAC;AAKF,eAAO,MAAM,WAAW,GAAI,IAAI,MAAM,KAAG,QAAQ,GAAG,SAA+B,CAAC;AAEpF,wEAAwE;AACxE,eAAO,MAAM,UAAU,QAAe,CAAC;AAEvC,mDAAmD;AACnD,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC;AAC1C,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,YAAY,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,iGAAiG;AACjG,eAAO,MAAM,WAAW,GAAI,2BAA2B,iBAAiB,KAAG,QAAQ,EAsClF,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAWjE;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,QAAQ,EAU3B,CAAC;AAKF,eAAO,MAAM,WAAW,OAAQ,MAAM,KAAG,QAAQ,GAAG,SAA+B,CAAC;AAEpF,wEAAwE;AACxE,eAAO,MAAM,UAAU,QAAe,CAAC;AAEvC,mDAAmD;AACnD,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC;AAC1C,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,YAAY,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,iGAAiG;AACjG,eAAO,MAAM,WAAW,8BAA+B,iBAAiB,KAAG,QAAQ,EAsClF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "open-nutrition-engine",
3
- "version": "1.0.0",
4
- "description": "Open source Indian food nutrition database and macro calculation engine with over 2,500 verified fitness staples, Hindi aliases, and serving conversions.",
3
+ "version": "1.1.0",
4
+ "description": "Open source Indian food nutrition database and macro calculation engine with over 5,000 verified fitness staples, Hindi aliases, and serving conversions.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
7
7
  "types": "dist/index.d.ts",
8
8
  "files": [
9
9
  "dist",
10
- "src"
10
+ "README.md"
11
11
  ],
12
12
  "scripts": {
13
13
  "build": "tsc"
@@ -28,5 +28,8 @@
28
28
  "repository": {
29
29
  "type": "git",
30
30
  "url": "https://github.com/suryachalla/open-nutrition-engine"
31
+ },
32
+ "devDependencies": {
33
+ "typescript": "^7.0.2"
31
34
  }
32
- }
35
+ }
@@ -1,65 +0,0 @@
1
- import type {
2
- FoodItem,
3
- FoodLogEntry,
4
- FoodServing,
5
- FoodTotals,
6
- MealType,
7
- } from '../types';
8
-
9
- const round = (num: number, precision = 1): number => {
10
- const factor = Math.pow(10, precision);
11
- return Math.round(num * factor) / factor;
12
- };
13
-
14
- /**
15
- * Build a food log entry from a food, one of its preset servings, a quantity,
16
- * and a meal. Nutrition is scaled linearly from the per-100 g figures and
17
- * multiplied by the chosen quantity of servings.
18
- */
19
- export const createFoodEntry = (
20
- food: FoodItem,
21
- serving: FoodServing,
22
- quantity: number,
23
- meal: MealType = 'lunch'
24
- ): FoodLogEntry => {
25
- const factor = (serving.amount * quantity) / 100;
26
- return {
27
- id: crypto.randomUUID(),
28
- foodId: food.id,
29
- foodName: food.name,
30
- servingLabel: quantity > 1 ? `${quantity} × ${serving.label}` : serving.label,
31
- quantity,
32
- amount: serving.amount * quantity,
33
- meal,
34
- calories: round(food.calories * factor),
35
- protein: round(food.protein * factor),
36
- carbs: round(food.carbs * factor),
37
- fat: round(food.fat * factor),
38
- fiber: food.fiber !== undefined ? round(food.fiber * factor) : undefined,
39
- sugar: food.sugar !== undefined ? round(food.sugar * factor) : undefined,
40
- };
41
- };
42
-
43
- /** Aggregate all logged entries into daily calorie + macro totals. */
44
- export const computeFoodTotals = (entries: FoodLogEntry[]): FoodTotals => {
45
- const totals = entries.reduce(
46
- (acc, entry) => ({
47
- calories: acc.calories + entry.calories,
48
- protein: acc.protein + entry.protein,
49
- carbs: acc.carbs + entry.carbs,
50
- fat: acc.fat + entry.fat,
51
- fiber: (acc.fiber || 0) + (entry.fiber || 0),
52
- sugar: (acc.sugar || 0) + (entry.sugar || 0),
53
- }),
54
- { calories: 0, protein: 0, carbs: 0, fat: 0, fiber: 0, sugar: 0 }
55
- );
56
-
57
- return {
58
- calories: Math.round(totals.calories),
59
- protein: round(totals.protein),
60
- carbs: round(totals.carbs),
61
- fat: round(totals.fat),
62
- fiber: round(totals.fiber),
63
- sugar: round(totals.sugar),
64
- };
65
- };
@@ -1,542 +0,0 @@
1
- import type { FoodItem } from '../types';
2
-
3
- /**
4
- * Indian vegetable curries, individual vegetables, and chutneys.
5
- * Curries and vegetables are per 100 g cooked; chutneys per 100 g.
6
- * Serving options use household katoris, bowls and tablespoons.
7
- */
8
- export const CURRIES: FoodItem[] = [
9
- // ───────────────────────────── Curries ─────────────────────────────
10
- {
11
- id: 'vegetable-kurma',
12
- name: 'Vegetable Kurma',
13
- hindiName: 'Kurma',
14
- category: 'curry',
15
- diet: 'veg',
16
- calories: 120,
17
- protein: 4,
18
- carbs: 12,
19
- fat: 7,
20
- servings: [
21
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
22
- { id: 'plate', label: '1 plate (150 g)', amount: 150 },
23
- ],
24
- },
25
- {
26
- id: 'mixed-veg',
27
- name: 'Mixed Vegetable Curry',
28
- hindiName: 'Kootu',
29
- category: 'curry',
30
- diet: 'veg',
31
- calories: 110,
32
- protein: 2.5,
33
- carbs: 13,
34
- fat: 5,
35
- servings: [
36
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
37
- { id: 'bowl', label: '1 bowl (150 g)', amount: 150 },
38
- ],
39
- },
40
- {
41
- id: 'poriyal',
42
- name: 'Vegetable Poriyal (stir-fry)',
43
- hindiName: 'Poriyal',
44
- category: 'curry',
45
- diet: 'veg',
46
- calories: 85,
47
- protein: 2.5,
48
- carbs: 10,
49
- fat: 4,
50
- servings: [
51
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
52
- { id: 'plate', label: '1 plate (120 g)', amount: 120 },
53
- ],
54
- },
55
- {
56
- id: 'avial',
57
- name: 'Avial',
58
- hindiName: 'Avial',
59
- category: 'curry',
60
- diet: 'veg',
61
- calories: 110,
62
- protein: 2.5,
63
- carbs: 10,
64
- fat: 7,
65
- servings: [
66
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
67
- { id: 'bowl', label: '1 bowl (150 g)', amount: 150 },
68
- ],
69
- },
70
- {
71
- id: 'thoran',
72
- name: 'Vegetable Thoran',
73
- hindiName: 'Thoran',
74
- category: 'curry',
75
- diet: 'veg',
76
- calories: 90,
77
- protein: 2.5,
78
- carbs: 10,
79
- fat: 5,
80
- servings: [
81
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
82
- { id: 'plate', label: '1 plate (120 g)', amount: 120 },
83
- ],
84
- },
85
-
86
- // ─────────────────────────── Vegetables ───────────────────────────
87
- {
88
- id: 'potato',
89
- name: 'Potato (boiled)',
90
- hindiName: 'Aloo / Urulaikizhangu',
91
- category: 'curry',
92
- diet: 'veg',
93
- calories: 87,
94
- protein: 1.9,
95
- carbs: 20,
96
- fat: 0.1,
97
- servings: [
98
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
99
- { id: '1pc', label: '1 medium (120 g)', amount: 120 },
100
- ],
101
- },
102
- {
103
- id: 'sweet-potato',
104
- name: 'Sweet Potato (boiled)',
105
- hindiName: 'Sakkara Valli',
106
- category: 'curry',
107
- diet: 'veg',
108
- calories: 76,
109
- protein: 1.4,
110
- carbs: 17.7,
111
- fat: 0.1,
112
- servings: [
113
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
114
- { id: '1pc', label: '1 medium (130 g)', amount: 130 },
115
- ],
116
- },
117
- {
118
- id: 'carrot',
119
- name: 'Carrot',
120
- hindiName: 'Gajar',
121
- category: 'curry',
122
- diet: 'veg',
123
- calories: 41,
124
- protein: 0.9,
125
- carbs: 10,
126
- fat: 0.2,
127
- servings: [
128
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
129
- { id: '1pc', label: '1 medium (60 g)', amount: 60 },
130
- ],
131
- },
132
- {
133
- id: 'green-beans',
134
- name: 'Green Beans (cooked)',
135
- hindiName: 'Beans',
136
- category: 'curry',
137
- diet: 'veg',
138
- calories: 35,
139
- protein: 1.8,
140
- carbs: 8,
141
- fat: 0.2,
142
- servings: [
143
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
144
- { id: 'bowl', label: '1 bowl (150 g)', amount: 150 },
145
- ],
146
- },
147
- {
148
- id: 'cauliflower',
149
- name: 'Cauliflower (cooked)',
150
- hindiName: 'Gobi',
151
- category: 'curry',
152
- diet: 'veg',
153
- calories: 23,
154
- protein: 1.8,
155
- carbs: 4,
156
- fat: 0.5,
157
- servings: [
158
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
159
- { id: 'bowl', label: '1 bowl (150 g)', amount: 150 },
160
- ],
161
- },
162
- {
163
- id: 'cabbage',
164
- name: 'Cabbage (cooked)',
165
- hindiName: 'Muttaikose',
166
- category: 'curry',
167
- diet: 'veg',
168
- calories: 25,
169
- protein: 1.3,
170
- carbs: 6,
171
- fat: 0.1,
172
- servings: [
173
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
174
- { id: 'bowl', label: '1 bowl (150 g)', amount: 150 },
175
- ],
176
- },
177
- {
178
- id: 'spinach',
179
- name: 'Spinach (cooked)',
180
- hindiName: 'Palak / Keerai',
181
- category: 'curry',
182
- diet: 'veg',
183
- calories: 23,
184
- protein: 3,
185
- carbs: 3.7,
186
- fat: 0.3,
187
- servings: [
188
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
189
- { id: 'bowl', label: '1 bowl (150 g)', amount: 150 },
190
- ],
191
- },
192
- {
193
- id: 'okra',
194
- name: 'Okra / Lady Finger (cooked)',
195
- hindiName: 'Bhindi / Vendakkai',
196
- category: 'curry',
197
- diet: 'veg',
198
- calories: 22,
199
- protein: 2,
200
- carbs: 4.5,
201
- fat: 0.2,
202
- servings: [
203
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
204
- { id: 'bowl', label: '1 bowl (150 g)', amount: 150 },
205
- ],
206
- },
207
- {
208
- id: 'brinjal',
209
- name: 'Brinjal / Eggplant (cooked)',
210
- hindiName: 'Baingan / Kathirikkai',
211
- category: 'curry',
212
- diet: 'veg',
213
- calories: 25,
214
- protein: 1,
215
- carbs: 6,
216
- fat: 0.2,
217
- servings: [
218
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
219
- { id: 'bowl', label: '1 bowl (150 g)', amount: 150 },
220
- ],
221
- },
222
- {
223
- id: 'tomato',
224
- name: 'Tomato',
225
- hindiName: 'Tamatar / Thakkali',
226
- category: 'curry',
227
- diet: 'veg',
228
- calories: 18,
229
- protein: 0.9,
230
- carbs: 3.9,
231
- fat: 0.2,
232
- servings: [
233
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
234
- { id: '1pc', label: '1 medium (100 g)', amount: 100 },
235
- ],
236
- },
237
- {
238
- id: 'onion',
239
- name: 'Onion',
240
- hindiName: 'Pyaz / Vengayam',
241
- category: 'curry',
242
- diet: 'veg',
243
- calories: 40,
244
- protein: 1.1,
245
- carbs: 9,
246
- fat: 0.1,
247
- servings: [
248
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
249
- { id: '1pc', label: '1 medium (110 g)', amount: 110 },
250
- ],
251
- },
252
- {
253
- id: 'cucumber',
254
- name: 'Cucumber',
255
- hindiName: 'Kheera / Vellarikkai',
256
- category: 'curry',
257
- diet: 'veg',
258
- calories: 15,
259
- protein: 0.7,
260
- carbs: 3.6,
261
- fat: 0.1,
262
- servings: [
263
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
264
- { id: '1pc', label: '1 medium (130 g)', amount: 130 },
265
- ],
266
- },
267
- {
268
- id: 'bottle-gourd',
269
- name: 'Bottle Gourd (cooked)',
270
- hindiName: 'Lauki / Surai',
271
- category: 'curry',
272
- diet: 'veg',
273
- calories: 12,
274
- protein: 0.6,
275
- carbs: 3,
276
- fat: 0.1,
277
- servings: [
278
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
279
- { id: 'bowl', label: '1 bowl (150 g)', amount: 150 },
280
- ],
281
- },
282
- {
283
- id: 'ridge-gourd',
284
- name: 'Ridge Gourd (cooked)',
285
- hindiName: 'Turai / Peerkangai',
286
- category: 'curry',
287
- diet: 'veg',
288
- calories: 14,
289
- protein: 0.5,
290
- carbs: 3,
291
- fat: 0.1,
292
- servings: [
293
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
294
- { id: 'bowl', label: '1 bowl (150 g)', amount: 150 },
295
- ],
296
- },
297
- {
298
- id: 'green-peas',
299
- name: 'Green Peas (cooked)',
300
- hindiName: 'Matar / Pattani',
301
- category: 'curry',
302
- diet: 'veg',
303
- calories: 84,
304
- protein: 5.4,
305
- carbs: 15.6,
306
- fat: 0.2,
307
- servings: [
308
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
309
- { id: 'bowl', label: '1 bowl (150 g)', amount: 150 },
310
- ],
311
- },
312
-
313
- // ───────────────────────────── Chutneys ─────────────────────────────
314
- {
315
- id: 'coconut-chutney',
316
- name: 'Coconut Chutney',
317
- hindiName: 'Thengai Chutney',
318
- category: 'curry',
319
- diet: 'veg',
320
- calories: 150,
321
- protein: 3,
322
- carbs: 10,
323
- fat: 12,
324
- servings: [
325
- { id: '1tbsp', label: '1 tbsp (15 g)', amount: 15 },
326
- { id: '2tbsp', label: '2 tbsp (30 g)', amount: 30 },
327
- { id: 'quarter', label: '1/4 cup (50 g)', amount: 50 },
328
- ],
329
- },
330
- {
331
- id: 'peanut-chutney',
332
- name: 'Peanut Chutney',
333
- hindiName: 'Kadalai Chutney',
334
- category: 'curry',
335
- diet: 'veg',
336
- calories: 350,
337
- protein: 15,
338
- carbs: 18,
339
- fat: 26,
340
- servings: [
341
- { id: '1tbsp', label: '1 tbsp (15 g)', amount: 15 },
342
- { id: '2tbsp', label: '2 tbsp (30 g)', amount: 30 },
343
- { id: 'quarter', label: '1/4 cup (50 g)', amount: 50 },
344
- ],
345
- },
346
- {
347
- id: 'tomato-chutney',
348
- name: 'Tomato Chutney',
349
- hindiName: 'Thakkali Chutney',
350
- category: 'curry',
351
- diet: 'veg',
352
- calories: 100,
353
- protein: 2,
354
- carbs: 12,
355
- fat: 5,
356
- servings: [
357
- { id: '1tbsp', label: '1 tbsp (15 g)', amount: 15 },
358
- { id: '2tbsp', label: '2 tbsp (30 g)', amount: 30 },
359
- { id: 'quarter', label: '1/4 cup (50 g)', amount: 50 },
360
- ],
361
- },
362
- {
363
- id: 'mint-chutney',
364
- name: 'Mint Chutney',
365
- hindiName: 'Pudina Chutney',
366
- category: 'curry',
367
- diet: 'veg',
368
- calories: 80,
369
- protein: 2,
370
- carbs: 10,
371
- fat: 4,
372
- servings: [
373
- { id: '1tbsp', label: '1 tbsp (15 g)', amount: 15 },
374
- { id: '2tbsp', label: '2 tbsp (30 g)', amount: 30 },
375
- { id: 'quarter', label: '1/4 cup (50 g)', amount: 50 },
376
- ],
377
- },
378
- {
379
- id: 'ginger-chutney',
380
- name: 'Ginger Chutney',
381
- hindiName: 'Inji Chutney',
382
- category: 'curry',
383
- diet: 'veg',
384
- calories: 120,
385
- protein: 2,
386
- carbs: 18,
387
- fat: 5,
388
- servings: [
389
- { id: '1tbsp', label: '1 tbsp (15 g)', amount: 15 },
390
- { id: '2tbsp', label: '2 tbsp (30 g)', amount: 30 },
391
- { id: 'quarter', label: '1/4 cup (50 g)', amount: 50 },
392
- ],
393
- },
394
- {
395
- id: 'palak-paneer',
396
- name: 'Palak Paneer / Keerai Paneer',
397
- hindiName: 'Palak Paneer',
398
- category: 'curry',
399
- diet: 'veg',
400
- calories: 150,
401
- protein: 7.5,
402
- carbs: 5,
403
- fat: 11,
404
- fiber: 2.5,
405
- servings: [
406
- { id: 'bowl', label: '1 bowl (150 g)', amount: 150 },
407
- { id: 'plate', label: '1 plate (200 g)', amount: 200 },
408
- ],
409
- },
410
- {
411
- id: 'paneer-bhurji',
412
- name: 'Paneer Bhurji',
413
- hindiName: 'Paneer Bhurji',
414
- category: 'curry',
415
- diet: 'veg',
416
- calories: 185,
417
- protein: 12,
418
- carbs: 5,
419
- fat: 13,
420
- fiber: 1.5,
421
- servings: [
422
- { id: 'small', label: '1 plate (100 g)', amount: 100 },
423
- { id: 'medium', label: '1 plate (150 g)', amount: 150 },
424
- ],
425
- },
426
- {
427
- id: 'soya-masala-curry',
428
- name: 'Soya Chunks Masala Curry',
429
- hindiName: 'Soya Curry',
430
- category: 'curry',
431
- diet: 'veg',
432
- calories: 135,
433
- protein: 14,
434
- carbs: 10,
435
- fat: 4,
436
- fiber: 3.8,
437
- servings: [
438
- { id: 'bowl', label: '1 bowl (150 g)', amount: 150 },
439
- { id: 'plate', label: '1 plate (200 g)', amount: 200 },
440
- ],
441
- },
442
- {
443
- id: 'chettinad-mushroom',
444
- name: 'Chettinad Mushroom Masala',
445
- hindiName: 'Kalan Masala',
446
- category: 'curry',
447
- diet: 'veg',
448
- calories: 85,
449
- protein: 3.5,
450
- carbs: 7.5,
451
- fat: 4.5,
452
- fiber: 2.2,
453
- servings: [
454
- { id: 'bowl', label: '1 bowl (150 g)', amount: 150 },
455
- { id: 'plate', label: '1 plate (200 g)', amount: 200 },
456
- ],
457
- },
458
- {
459
- id: 'cabbage-poriyal-dal',
460
- name: 'Cabbage Poriyal with Moong Dal',
461
- hindiName: 'Muttaikose Poriyal',
462
- category: 'curry',
463
- diet: 'veg',
464
- calories: 75,
465
- protein: 3.2,
466
- carbs: 8,
467
- fat: 3,
468
- fiber: 3,
469
- servings: [
470
- { id: 'katori', label: '1 katori (100 g)', amount: 100 },
471
- { id: 'plate', label: '1 plate (150 g)', amount: 150 },
472
- ],
473
- },
474
- {
475
- id: 'paneer-butter-masala',
476
- name: 'Paneer Butter Masala',
477
- hindiName: 'Paneer Makhani',
478
- aliases: ['paneer butter masala', 'paneer makhani', 'butter paneer'],
479
- category: 'curry',
480
- diet: 'veg',
481
- calories: 195,
482
- protein: 8.5,
483
- carbs: 7.5,
484
- fat: 15,
485
- fiber: 1.5,
486
- servings: [
487
- { id: 'bowl', label: '1 bowl (150 g)', amount: 150 },
488
- { id: 'plate', label: '1 full plate (250 g)', amount: 250 },
489
- ],
490
- },
491
- {
492
- id: 'dal-makhani',
493
- name: 'Dal Makhani',
494
- hindiName: 'Maa Ki Dal',
495
- aliases: ['dal makhani', 'makhani dal', 'maa ki dal', 'black dal'],
496
- category: 'curry',
497
- diet: 'veg',
498
- calories: 140,
499
- protein: 5.8,
500
- carbs: 16.5,
501
- fat: 6.2,
502
- fiber: 4.5,
503
- servings: [
504
- { id: 'bowl', label: '1 bowl (150 g)', amount: 150 },
505
- { id: 'plate', label: '1 plate (200 g)', amount: 200 },
506
- ],
507
- },
508
- {
509
- id: 'chole-masala',
510
- name: 'Chole Masala (Chickpea Curry)',
511
- hindiName: 'Punjabi Chole',
512
- aliases: ['chole', 'chole masala', 'punjabi chole', 'chickpea curry', 'chana masala'],
513
- category: 'curry',
514
- diet: 'veg',
515
- calories: 130,
516
- protein: 6.2,
517
- carbs: 19,
518
- fat: 3.5,
519
- fiber: 5.2,
520
- servings: [
521
- { id: 'bowl', label: '1 bowl (150 g)', amount: 150 },
522
- { id: 'plate', label: '1 plate (200 g)', amount: 200 },
523
- ],
524
- },
525
- {
526
- id: 'kadai-paneer',
527
- name: 'Kadai Paneer',
528
- hindiName: 'Kadhai Paneer',
529
- aliases: ['kadai paneer', 'kadhai paneer', 'paneer capsicum'],
530
- category: 'curry',
531
- diet: 'veg',
532
- calories: 175,
533
- protein: 9,
534
- carbs: 6,
535
- fat: 13,
536
- fiber: 2,
537
- servings: [
538
- { id: 'bowl', label: '1 bowl (150 g)', amount: 150 },
539
- { id: 'plate', label: '1 plate (200 g)', amount: 200 },
540
- ],
541
- },
542
- ];