@cravery/core 0.0.60 → 0.0.61

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 (78) hide show
  1. package/README.md +80 -80
  2. package/dist/types/core/errors.d.ts +2 -2
  3. package/dist/types/core/errors.js +16 -16
  4. package/dist/types/recipes/difficulty.d.ts.map +1 -1
  5. package/dist/types/recipes/difficulty.js +1 -6
  6. package/dist/types/recipes/difficulty.js.map +1 -1
  7. package/dist/types/recipes/spiciness.d.ts.map +1 -1
  8. package/dist/types/recipes/spiciness.js +7 -1
  9. package/dist/types/recipes/spiciness.js.map +1 -1
  10. package/dist/types/reports/target.d.ts.map +1 -1
  11. package/dist/types/reports/update.d.ts.map +1 -1
  12. package/dist/types/reports/update_type.d.ts.map +1 -1
  13. package/dist/types/reports/update_type.js +1 -5
  14. package/dist/types/reports/update_type.js.map +1 -1
  15. package/dist/types/subscriptions/store.d.ts.map +1 -1
  16. package/dist/types/subscriptions/store.js +6 -1
  17. package/dist/types/subscriptions/store.js.map +1 -1
  18. package/package.json +34 -34
  19. package/src/index.ts +1 -1
  20. package/src/types/core/entity.ts +13 -13
  21. package/src/types/core/entity_status.ts +9 -9
  22. package/src/types/core/errors.ts +119 -119
  23. package/src/types/core/index.ts +8 -8
  24. package/src/types/core/locale.ts +2 -2
  25. package/src/types/core/measurement_system.ts +2 -2
  26. package/src/types/core/price.ts +4 -4
  27. package/src/types/core/theme.ts +2 -2
  28. package/src/types/core/timestamp.ts +4 -4
  29. package/src/types/equipment/category.ts +15 -15
  30. package/src/types/equipment/equipment.ts +12 -12
  31. package/src/types/equipment/equipment_entity.ts +17 -17
  32. package/src/types/equipment/index.ts +4 -4
  33. package/src/types/equipment/user_equipment.ts +9 -9
  34. package/src/types/ingredients/category.ts +28 -28
  35. package/src/types/ingredients/group.ts +8 -8
  36. package/src/types/ingredients/index.ts +6 -6
  37. package/src/types/ingredients/ingredient.ts +16 -16
  38. package/src/types/ingredients/ingredient_entity.ts +21 -21
  39. package/src/types/ingredients/ingredient_section.ts +18 -18
  40. package/src/types/ingredients/user_ingredient.ts +14 -14
  41. package/src/types/recipes/allergen.ts +16 -16
  42. package/src/types/recipes/comment.ts +8 -8
  43. package/src/types/recipes/cuisine.ts +90 -90
  44. package/src/types/recipes/dietary_tag.ts +18 -18
  45. package/src/types/recipes/difficulty.ts +2 -7
  46. package/src/types/recipes/index.ts +14 -14
  47. package/src/types/recipes/instruction.ts +19 -19
  48. package/src/types/recipes/meal_type.ts +13 -13
  49. package/src/types/recipes/nutrition.ts +11 -11
  50. package/src/types/recipes/recipe.ts +81 -81
  51. package/src/types/recipes/recipe_source.ts +2 -2
  52. package/src/types/recipes/recipe_stats.ts +8 -8
  53. package/src/types/recipes/spiciness.ts +8 -2
  54. package/src/types/recipes/temperature.ts +6 -6
  55. package/src/types/recipes/temperature_unit.ts +2 -2
  56. package/src/types/recipes/unit.ts +48 -48
  57. package/src/types/reports/category.ts +1 -1
  58. package/src/types/reports/index.ts +8 -8
  59. package/src/types/reports/priority.ts +7 -7
  60. package/src/types/reports/report.ts +18 -18
  61. package/src/types/reports/status.ts +9 -9
  62. package/src/types/reports/target.ts +23 -19
  63. package/src/types/reports/update.ts +4 -4
  64. package/src/types/reports/update_type.ts +1 -5
  65. package/src/types/settings/notification.ts +6 -6
  66. package/src/types/settings/settings.ts +26 -26
  67. package/src/types/subscriptions/cost.ts +5 -5
  68. package/src/types/subscriptions/index.ts +8 -8
  69. package/src/types/subscriptions/member.ts +11 -11
  70. package/src/types/subscriptions/store.ts +6 -1
  71. package/src/types/subscriptions/subscription.ts +21 -21
  72. package/src/types/subscriptions/subscription_role.ts +2 -2
  73. package/src/types/subscriptions/subscription_status.ts +11 -11
  74. package/src/types/subscriptions/subscription_tier.ts +2 -2
  75. package/src/types/users/index.ts +4 -4
  76. package/src/types/users/profile.ts +8 -8
  77. package/src/types/users/user.ts +11 -11
  78. package/src/types/users/user_role.ts +8 -8
@@ -1,119 +1,119 @@
1
- export const APP_ERROR_CODE_VALUES = [
2
- "bad_request",
3
- "conflict",
4
- "daily_limit_reached",
5
- "forbidden",
6
- "internal_error",
7
- "low_confidence",
8
- "monthly_limit_reached",
9
- "not_found",
10
- "no_recipe_found",
11
- "unauthorized",
12
- "unsafe_content",
13
- "validation_error",
14
- ] as const;
15
-
16
- export type AppErrorCode = (typeof APP_ERROR_CODE_VALUES)[number];
17
-
18
- export class AppError extends Error {
19
- public readonly code: AppErrorCode;
20
- public readonly context?: Record<string, unknown>;
21
-
22
- constructor(
23
- code: AppErrorCode,
24
- message: string,
25
- context?: Record<string, unknown>,
26
- ) {
27
- super(message);
28
- this.name = "AppError";
29
- this.code = code;
30
- this.context = context;
31
-
32
- if (Error.captureStackTrace) {
33
- Error.captureStackTrace(this, AppError);
34
- }
35
- }
36
-
37
- toJSON() {
38
- return {
39
- name: this.name,
40
- code: this.code,
41
- message: this.message,
42
- context: this.context,
43
- };
44
- }
45
- }
46
-
47
- export class ValidationError extends AppError {
48
- constructor(message: string, context?: Record<string, unknown>) {
49
- super("validation_error", message, context);
50
- this.name = "ValidationError";
51
- }
52
- }
53
-
54
- export class NotFoundError extends AppError {
55
- constructor(message: string, context?: Record<string, unknown>) {
56
- super("not_found", message, context);
57
- this.name = "NotFoundError";
58
- }
59
- }
60
-
61
- export class UnauthorizedError extends AppError {
62
- constructor(message: string, context?: Record<string, unknown>) {
63
- super("unauthorized", message, context);
64
- this.name = "UnauthorizedError";
65
- }
66
- }
67
-
68
- export class ForbiddenError extends AppError {
69
- constructor(message: string, context?: Record<string, unknown>) {
70
- super("forbidden", message, context);
71
- this.name = "ForbiddenError";
72
- }
73
- }
74
-
75
- export class ConflictError extends AppError {
76
- constructor(message: string, context?: Record<string, unknown>) {
77
- super("conflict", message, context);
78
- this.name = "ConflictError";
79
- }
80
- }
81
-
82
- export class DailyLimitError extends AppError {
83
- constructor(message: string, context?: Record<string, unknown>) {
84
- super("daily_limit_reached", message, context);
85
- this.name = "DailyLimitError";
86
- }
87
- }
88
-
89
- export class MonthlyLimitError extends AppError {
90
- constructor(message: string, context?: Record<string, unknown>) {
91
- super("monthly_limit_reached", message, context);
92
- this.name = "MonthlyLimitError";
93
- }
94
- }
95
-
96
- export class NoRecipeFoundError extends AppError {
97
- constructor(reason: string, context?: Record<string, unknown>) {
98
- super("no_recipe_found", reason, context);
99
- this.name = "NoRecipeFoundError";
100
- }
101
- }
102
-
103
- export class LowConfidenceError extends AppError {
104
- constructor(confidence: number, context?: Record<string, unknown>) {
105
- super(
106
- "low_confidence",
107
- "We couldn't extract a complete recipe. Try a clearer image or more detailed text.",
108
- { ...context, confidence },
109
- );
110
- this.name = "LowConfidenceError";
111
- }
112
- }
113
-
114
- export class UnsafeContentError extends AppError {
115
- constructor(context?: Record<string, unknown>) {
116
- super("unsafe_content", "This content cannot be processed.", context);
117
- this.name = "UnsafeContentError";
118
- }
119
- }
1
+ export const APP_ERROR_CODE_VALUES = [
2
+ "bad-request",
3
+ "conflict",
4
+ "daily-limit-reached",
5
+ "forbidden",
6
+ "internal-error",
7
+ "low-confidence",
8
+ "monthly-limit-reached",
9
+ "not-found",
10
+ "no-recipe-found",
11
+ "unauthorized",
12
+ "unsafe-content",
13
+ "validation-error",
14
+ ] as const;
15
+
16
+ export type AppErrorCode = (typeof APP_ERROR_CODE_VALUES)[number];
17
+
18
+ export class AppError extends Error {
19
+ public readonly code: AppErrorCode;
20
+ public readonly context?: Record<string, unknown>;
21
+
22
+ constructor(
23
+ code: AppErrorCode,
24
+ message: string,
25
+ context?: Record<string, unknown>,
26
+ ) {
27
+ super(message);
28
+ this.name = "AppError";
29
+ this.code = code;
30
+ this.context = context;
31
+
32
+ if (Error.captureStackTrace) {
33
+ Error.captureStackTrace(this, AppError);
34
+ }
35
+ }
36
+
37
+ toJSON() {
38
+ return {
39
+ name: this.name,
40
+ code: this.code,
41
+ message: this.message,
42
+ context: this.context,
43
+ };
44
+ }
45
+ }
46
+
47
+ export class ValidationError extends AppError {
48
+ constructor(message: string, context?: Record<string, unknown>) {
49
+ super("validation-error", message, context);
50
+ this.name = "ValidationError";
51
+ }
52
+ }
53
+
54
+ export class NotFoundError extends AppError {
55
+ constructor(message: string, context?: Record<string, unknown>) {
56
+ super("not-found", message, context);
57
+ this.name = "NotFoundError";
58
+ }
59
+ }
60
+
61
+ export class UnauthorizedError extends AppError {
62
+ constructor(message: string, context?: Record<string, unknown>) {
63
+ super("unauthorized", message, context);
64
+ this.name = "UnauthorizedError";
65
+ }
66
+ }
67
+
68
+ export class ForbiddenError extends AppError {
69
+ constructor(message: string, context?: Record<string, unknown>) {
70
+ super("forbidden", message, context);
71
+ this.name = "ForbiddenError";
72
+ }
73
+ }
74
+
75
+ export class ConflictError extends AppError {
76
+ constructor(message: string, context?: Record<string, unknown>) {
77
+ super("conflict", message, context);
78
+ this.name = "ConflictError";
79
+ }
80
+ }
81
+
82
+ export class DailyLimitError extends AppError {
83
+ constructor(message: string, context?: Record<string, unknown>) {
84
+ super("daily-limit-reached", message, context);
85
+ this.name = "DailyLimitError";
86
+ }
87
+ }
88
+
89
+ export class MonthlyLimitError extends AppError {
90
+ constructor(message: string, context?: Record<string, unknown>) {
91
+ super("monthly-limit-reached", message, context);
92
+ this.name = "MonthlyLimitError";
93
+ }
94
+ }
95
+
96
+ export class NoRecipeFoundError extends AppError {
97
+ constructor(reason: string, context?: Record<string, unknown>) {
98
+ super("no-recipe-found", reason, context);
99
+ this.name = "NoRecipeFoundError";
100
+ }
101
+ }
102
+
103
+ export class LowConfidenceError extends AppError {
104
+ constructor(confidence: number, context?: Record<string, unknown>) {
105
+ super(
106
+ "low-confidence",
107
+ "We couldn't extract a complete recipe. Try a clearer image or more detailed text.",
108
+ { ...context, confidence },
109
+ );
110
+ this.name = "LowConfidenceError";
111
+ }
112
+ }
113
+
114
+ export class UnsafeContentError extends AppError {
115
+ constructor(context?: Record<string, unknown>) {
116
+ super("unsafe-content", "This content cannot be processed.", context);
117
+ this.name = "UnsafeContentError";
118
+ }
119
+ }
@@ -1,8 +1,8 @@
1
- export * from "./entity";
2
- export * from "./entity_status";
3
- export * from "./errors";
4
- export * from "./locale";
5
- export * from "./measurement_system";
6
- export * from "./price";
7
- export * from "./theme";
8
- export * from "./timestamp";
1
+ export * from "./entity";
2
+ export * from "./entity_status";
3
+ export * from "./errors";
4
+ export * from "./locale";
5
+ export * from "./measurement_system";
6
+ export * from "./price";
7
+ export * from "./theme";
8
+ export * from "./timestamp";
@@ -1,2 +1,2 @@
1
- export const LOCALE_VALUES = ["en", "ar", "es"] as const;
2
- export type Locale = (typeof LOCALE_VALUES)[number];
1
+ export const LOCALE_VALUES = ["en", "ar", "es"] as const;
2
+ export type Locale = (typeof LOCALE_VALUES)[number];
@@ -1,2 +1,2 @@
1
- export const MEASUREMENT_SYSTEM_VALUES = ["imperial", "metric"] as const;
2
- export type MeasurementSystem = (typeof MEASUREMENT_SYSTEM_VALUES)[number];
1
+ export const MEASUREMENT_SYSTEM_VALUES = ["imperial", "metric"] as const;
2
+ export type MeasurementSystem = (typeof MEASUREMENT_SYSTEM_VALUES)[number];
@@ -1,4 +1,4 @@
1
- export interface Price {
2
- amount: number;
3
- currency: string;
4
- }
1
+ export interface Price {
2
+ amount: number;
3
+ currency: string;
4
+ }
@@ -1,2 +1,2 @@
1
- export const THEME_VALUES = ["dark", "light", "system"] as const;
2
- export type Theme = (typeof THEME_VALUES)[number];
1
+ export const THEME_VALUES = ["dark", "light", "system"] as const;
2
+ export type Theme = (typeof THEME_VALUES)[number];
@@ -1,4 +1,4 @@
1
- export interface Timestamp {
2
- seconds: number;
3
- nanoseconds: number;
4
- }
1
+ export interface Timestamp {
2
+ seconds: number;
3
+ nanoseconds: number;
4
+ }
@@ -1,15 +1,15 @@
1
- export const EQUIPMENT_CATEGORY_VALUES = [
2
- "cookware",
3
- "bakeware",
4
- "cutlery",
5
- "utensils",
6
- "appliances",
7
- "mixing",
8
- "measuring",
9
- "prep",
10
- "baking_tools",
11
- "storage",
12
- "serving",
13
- "specialty",
14
- ] as const;
15
- export type EquipmentCategory = (typeof EQUIPMENT_CATEGORY_VALUES)[number];
1
+ export const EQUIPMENT_CATEGORY_VALUES = [
2
+ "cookware",
3
+ "bakeware",
4
+ "cutlery",
5
+ "utensils",
6
+ "appliances",
7
+ "mixing",
8
+ "measuring",
9
+ "prep",
10
+ "baking_tools",
11
+ "storage",
12
+ "serving",
13
+ "specialty",
14
+ ] as const;
15
+ export type EquipmentCategory = (typeof EQUIPMENT_CATEGORY_VALUES)[number];
@@ -1,12 +1,12 @@
1
- export interface EquipmentMeta {
2
- slug: string;
3
- optional?: boolean;
4
- }
5
-
6
- export interface EquipmentContent {
7
- name: string;
8
- slug: string;
9
- notes?: string;
10
- }
11
-
12
- export interface Equipment extends EquipmentMeta, EquipmentContent {}
1
+ export interface EquipmentMeta {
2
+ slug: string;
3
+ optional?: boolean;
4
+ }
5
+
6
+ export interface EquipmentContent {
7
+ name: string;
8
+ slug: string;
9
+ notes?: string;
10
+ }
11
+
12
+ export interface Equipment extends EquipmentMeta, EquipmentContent {}
@@ -1,17 +1,17 @@
1
- import { Entity, Price } from "../core";
2
- import { EquipmentCategory } from "./category";
3
-
4
- export interface EquipmentEntityMeta extends Entity {
5
- category: EquipmentCategory;
6
- slug: string;
7
- imageUrl?: string | null;
8
- price?: Price;
9
- }
10
-
11
- export interface EquipmentEntityContent {
12
- name: string;
13
- slug: string;
14
- }
15
-
16
- export interface EquipmentEntity
17
- extends EquipmentEntityMeta, EquipmentEntityContent {}
1
+ import { Entity, Price } from "../core";
2
+ import { EquipmentCategory } from "./category";
3
+
4
+ export interface EquipmentEntityMeta extends Entity {
5
+ category: EquipmentCategory;
6
+ slug: string;
7
+ imageUrl?: string | null;
8
+ price?: Price;
9
+ }
10
+
11
+ export interface EquipmentEntityContent {
12
+ name: string;
13
+ slug: string;
14
+ }
15
+
16
+ export interface EquipmentEntity
17
+ extends EquipmentEntityMeta, EquipmentEntityContent {}
@@ -1,4 +1,4 @@
1
- export * from "./category";
2
- export * from "./equipment_entity";
3
- export * from "./equipment";
4
- export * from "./user_equipment";
1
+ export * from "./category";
2
+ export * from "./equipment_entity";
3
+ export * from "./equipment";
4
+ export * from "./user_equipment";
@@ -1,9 +1,9 @@
1
- import { Entity, Price } from "../core";
2
- import { EquipmentCategory } from "./category";
3
-
4
- export interface UserEquipment extends Entity {
5
- category: EquipmentCategory;
6
- slug: string;
7
- price?: Price;
8
- quantity?: number;
9
- }
1
+ import { Entity, Price } from "../core";
2
+ import { EquipmentCategory } from "./category";
3
+
4
+ export interface UserEquipment extends Entity {
5
+ category: EquipmentCategory;
6
+ slug: string;
7
+ price?: Price;
8
+ quantity?: number;
9
+ }
@@ -1,28 +1,28 @@
1
- export const INGREDIENT_CATEGORY_VALUES = [
2
- "fruits",
3
- "vegetables",
4
- "meat",
5
- "poultry",
6
- "seafood",
7
- "dairy",
8
- "grains",
9
- "legumes",
10
- "spices",
11
- "nuts_seeds",
12
- "oils_fats",
13
- "sauces",
14
- "condiments",
15
- "sweeteners",
16
- "baking",
17
- "pantry",
18
- "canned",
19
- "frozen",
20
- "bakery",
21
- "prepared",
22
- "beverages",
23
- "snacks",
24
- "international",
25
- "specialty",
26
- "baby",
27
- ] as const;
28
- export type IngredientCategory = (typeof INGREDIENT_CATEGORY_VALUES)[number];
1
+ export const INGREDIENT_CATEGORY_VALUES = [
2
+ "fruits",
3
+ "vegetables",
4
+ "meat",
5
+ "poultry",
6
+ "seafood",
7
+ "dairy",
8
+ "grains",
9
+ "legumes",
10
+ "spices",
11
+ "nuts_seeds",
12
+ "oils_fats",
13
+ "sauces",
14
+ "condiments",
15
+ "sweeteners",
16
+ "baking",
17
+ "pantry",
18
+ "canned",
19
+ "frozen",
20
+ "bakery",
21
+ "prepared",
22
+ "beverages",
23
+ "snacks",
24
+ "international",
25
+ "specialty",
26
+ "baby",
27
+ ] as const;
28
+ export type IngredientCategory = (typeof INGREDIENT_CATEGORY_VALUES)[number];
@@ -1,8 +1,8 @@
1
- export const INGREDIENT_GROUP_VALUES = [
2
- "counter",
3
- "freezer",
4
- "fridge",
5
- "pantry",
6
- "spice",
7
- ] as const;
8
- export type IngredientGroup = (typeof INGREDIENT_GROUP_VALUES)[number];
1
+ export const INGREDIENT_GROUP_VALUES = [
2
+ "counter",
3
+ "freezer",
4
+ "fridge",
5
+ "pantry",
6
+ "spice",
7
+ ] as const;
8
+ export type IngredientGroup = (typeof INGREDIENT_GROUP_VALUES)[number];
@@ -1,6 +1,6 @@
1
- export * from "./category";
2
- export * from "./group";
3
- export * from "./ingredient_entity";
4
- export * from "./ingredient_section";
5
- export * from "./ingredient";
6
- export * from "./user_ingredient";
1
+ export * from "./category";
2
+ export * from "./group";
3
+ export * from "./ingredient_entity";
4
+ export * from "./ingredient_section";
5
+ export * from "./ingredient";
6
+ export * from "./user_ingredient";
@@ -1,16 +1,16 @@
1
- import { Unit } from "../recipes";
2
-
3
- export interface IngredientMeta {
4
- slug: string;
5
- quantity?: number;
6
- required?: boolean;
7
- unit?: Unit;
8
- }
9
-
10
- export interface IngredientContent {
11
- name: string;
12
- slug: string;
13
- notes?: string;
14
- }
15
-
16
- export interface Ingredient extends IngredientMeta, IngredientContent {}
1
+ import { Unit } from "../recipes";
2
+
3
+ export interface IngredientMeta {
4
+ slug: string;
5
+ quantity?: number;
6
+ required?: boolean;
7
+ unit?: Unit;
8
+ }
9
+
10
+ export interface IngredientContent {
11
+ name: string;
12
+ slug: string;
13
+ notes?: string;
14
+ }
15
+
16
+ export interface Ingredient extends IngredientMeta, IngredientContent {}
@@ -1,21 +1,21 @@
1
- import { Entity, Price } from "../core";
2
- import { Unit } from "../recipes";
3
- import { IngredientCategory } from "./category";
4
- import { IngredientGroup } from "./group";
5
-
6
- export interface IngredientEntityMeta extends Entity {
7
- category: IngredientCategory;
8
- group: IngredientGroup;
9
- slug: string;
10
- imageUrl?: string | null;
11
- price?: Price;
12
- standardUnit?: Unit;
13
- }
14
-
15
- export interface IngredientEntityContent {
16
- name: string;
17
- slug: string;
18
- }
19
-
20
- export interface IngredientEntity
21
- extends IngredientEntityMeta, IngredientEntityContent {}
1
+ import { Entity, Price } from "../core";
2
+ import { Unit } from "../recipes";
3
+ import { IngredientCategory } from "./category";
4
+ import { IngredientGroup } from "./group";
5
+
6
+ export interface IngredientEntityMeta extends Entity {
7
+ category: IngredientCategory;
8
+ group: IngredientGroup;
9
+ slug: string;
10
+ imageUrl?: string | null;
11
+ price?: Price;
12
+ standardUnit?: Unit;
13
+ }
14
+
15
+ export interface IngredientEntityContent {
16
+ name: string;
17
+ slug: string;
18
+ }
19
+
20
+ export interface IngredientEntity
21
+ extends IngredientEntityMeta, IngredientEntityContent {}
@@ -1,18 +1,18 @@
1
- import { Ingredient, IngredientContent, IngredientMeta } from "./ingredient";
2
-
3
- export interface IngredientSectionMeta {
4
- ingredients: IngredientMeta[];
5
- slug: string;
6
- }
7
-
8
- export interface IngredientSectionContent {
9
- ingredients: IngredientContent[];
10
- slug: string;
11
- title?: string;
12
- }
13
-
14
- export interface IngredientSection {
15
- ingredients: Ingredient[];
16
- slug: string;
17
- title?: string;
18
- }
1
+ import { Ingredient, IngredientContent, IngredientMeta } from "./ingredient";
2
+
3
+ export interface IngredientSectionMeta {
4
+ ingredients: IngredientMeta[];
5
+ slug: string;
6
+ }
7
+
8
+ export interface IngredientSectionContent {
9
+ ingredients: IngredientContent[];
10
+ slug: string;
11
+ title?: string;
12
+ }
13
+
14
+ export interface IngredientSection {
15
+ ingredients: Ingredient[];
16
+ slug: string;
17
+ title?: string;
18
+ }
@@ -1,14 +1,14 @@
1
- import { Entity, Price, Timestamp } from "../core";
2
- import { Unit } from "../recipes";
3
- import { IngredientCategory } from "./category";
4
- import { IngredientGroup } from "./group";
5
-
6
- export interface UserIngredient extends Entity {
7
- category: IngredientCategory;
8
- slug: string;
9
- expiresAt?: Timestamp;
10
- group: IngredientGroup;
11
- price?: Price;
12
- quantity?: number;
13
- unit?: Unit;
14
- }
1
+ import { Entity, Price, Timestamp } from "../core";
2
+ import { Unit } from "../recipes";
3
+ import { IngredientCategory } from "./category";
4
+ import { IngredientGroup } from "./group";
5
+
6
+ export interface UserIngredient extends Entity {
7
+ category: IngredientCategory;
8
+ slug: string;
9
+ expiresAt?: Timestamp;
10
+ group: IngredientGroup;
11
+ price?: Price;
12
+ quantity?: number;
13
+ unit?: Unit;
14
+ }