skill-chef 0.3.1 → 0.3.2
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.
- package/dist/add/commands.d.ts +15 -0
- package/dist/add/commands.d.ts.map +1 -0
- package/dist/add/commands.js +22 -0
- package/dist/add/commands.js.map +1 -0
- package/dist/add/index.d.ts +10 -0
- package/dist/add/index.d.ts.map +1 -0
- package/dist/add/index.js +10 -0
- package/dist/add/index.js.map +1 -0
- package/dist/add/routes.d.ts +11 -0
- package/dist/add/routes.d.ts.map +1 -0
- package/dist/add/routes.js +23 -0
- package/dist/add/routes.js.map +1 -0
- package/dist/add/run-write.d.ts +37 -0
- package/dist/add/run-write.d.ts.map +1 -0
- package/dist/add/run-write.js +187 -0
- package/dist/add/run-write.js.map +1 -0
- package/dist/cli/cmd_read.js +32 -289
- package/dist/cli/cmd_read.js.map +1 -1
- package/dist/cli/keys.d.ts +2 -1
- package/dist/cli/keys.d.ts.map +1 -1
- package/dist/cli/keys.js +37 -1
- package/dist/cli/keys.js.map +1 -1
- package/dist/cook/commands.d.ts +13 -0
- package/dist/cook/commands.d.ts.map +1 -0
- package/dist/cook/commands.js +21 -0
- package/dist/cook/commands.js.map +1 -0
- package/dist/cook/index.d.ts +9 -0
- package/dist/cook/index.d.ts.map +1 -0
- package/dist/cook/index.js +9 -0
- package/dist/cook/index.js.map +1 -0
- package/dist/cook/routes.d.ts +11 -0
- package/dist/cook/routes.d.ts.map +1 -0
- package/dist/cook/routes.js +35 -0
- package/dist/cook/routes.js.map +1 -0
- package/dist/cook/run.d.ts +24 -0
- package/dist/cook/run.d.ts.map +1 -0
- package/dist/cook/run.js +46 -0
- package/dist/cook/run.js.map +1 -0
- package/dist/data/commands.d.ts +12 -0
- package/dist/data/commands.d.ts.map +1 -0
- package/dist/data/commands.js +11 -0
- package/dist/data/commands.js.map +1 -0
- package/dist/data/index.d.ts +9 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/data/index.js +9 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/routes.d.ts +12 -0
- package/dist/data/routes.d.ts.map +1 -0
- package/dist/data/routes.js +19 -0
- package/dist/data/routes.js.map +1 -0
- package/dist/data/run-query.d.ts +15 -0
- package/dist/data/run-query.d.ts.map +1 -0
- package/dist/data/run-query.js +73 -0
- package/dist/data/run-query.js.map +1 -0
- package/dist/fetch/db.d.ts +11 -31
- package/dist/fetch/db.d.ts.map +1 -1
- package/dist/fetch/db.js +39 -328
- package/dist/fetch/db.js.map +1 -1
- package/dist/fetch/index.d.ts +7 -1
- package/dist/fetch/index.d.ts.map +1 -1
- package/dist/fetch/index.js +9 -1
- package/dist/fetch/index.js.map +1 -1
- package/dist/fetch/schema.d.ts +7 -0
- package/dist/fetch/schema.d.ts.map +1 -0
- package/dist/fetch/schema.js +53 -0
- package/dist/fetch/schema.js.map +1 -0
- package/dist/history/index.d.ts +3 -2
- package/dist/history/index.d.ts.map +1 -1
- package/dist/history/index.js +3 -2
- package/dist/history/index.js.map +1 -1
- package/dist/history/run-query.d.ts +13 -0
- package/dist/history/run-query.d.ts.map +1 -0
- package/dist/history/run-query.js +44 -0
- package/dist/history/run-query.js.map +1 -0
- package/dist/history/run-record.d.ts +21 -0
- package/dist/history/run-record.d.ts.map +1 -0
- package/dist/history/run-record.js +71 -0
- package/dist/history/run-record.js.map +1 -0
- package/dist/relation/commands.d.ts +10 -0
- package/dist/relation/commands.d.ts.map +1 -0
- package/dist/relation/commands.js +9 -0
- package/dist/relation/commands.js.map +1 -0
- package/dist/relation/index.d.ts +8 -0
- package/dist/relation/index.d.ts.map +1 -0
- package/dist/relation/index.js +8 -0
- package/dist/relation/index.js.map +1 -0
- package/dist/relation/routes.d.ts +10 -0
- package/dist/relation/routes.d.ts.map +1 -0
- package/dist/relation/routes.js +28 -0
- package/dist/relation/routes.js.map +1 -0
- package/dist/render/index.d.ts +7 -1
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +9 -1
- package/dist/render/index.js.map +1 -1
- package/dist/render/views.d.ts +1 -39
- package/dist/render/views.d.ts.map +1 -1
- package/dist/render/views.js +6 -56
- package/dist/render/views.js.map +1 -1
- package/dist/search/commands.d.ts +14 -0
- package/dist/search/commands.d.ts.map +1 -0
- package/dist/search/commands.js +22 -0
- package/dist/search/commands.js.map +1 -0
- package/dist/search/index.d.ts +9 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +9 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/routes.d.ts +11 -0
- package/dist/search/routes.d.ts.map +1 -0
- package/dist/search/routes.js +59 -0
- package/dist/search/routes.js.map +1 -0
- package/dist/search/run.d.ts +22 -0
- package/dist/search/run.d.ts.map +1 -0
- package/dist/search/run.js +105 -0
- package/dist/search/run.js.map +1 -0
- package/dist/setup/commands.d.ts +10 -0
- package/dist/setup/commands.d.ts.map +1 -0
- package/dist/setup/commands.js +9 -0
- package/dist/setup/commands.js.map +1 -0
- package/dist/setup/index.d.ts +8 -0
- package/dist/setup/index.d.ts.map +1 -0
- package/dist/setup/index.js +8 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/routes.d.ts +10 -0
- package/dist/setup/routes.d.ts.map +1 -0
- package/dist/setup/routes.js +16 -0
- package/dist/setup/routes.js.map +1 -0
- package/dist/shared/command-spec.d.ts +42 -0
- package/dist/shared/command-spec.d.ts.map +1 -0
- package/dist/shared/command-spec.js +15 -0
- package/dist/shared/command-spec.js.map +1 -0
- package/dist/shared/slots.d.ts +24 -0
- package/dist/shared/slots.d.ts.map +1 -0
- package/dist/shared/slots.js +63 -0
- package/dist/shared/slots.js.map +1 -0
- package/dist/shopping/commands.d.ts +13 -0
- package/dist/shopping/commands.d.ts.map +1 -0
- package/dist/shopping/commands.js +21 -0
- package/dist/shopping/commands.js.map +1 -0
- package/dist/shopping/index.d.ts +9 -0
- package/dist/shopping/index.d.ts.map +1 -0
- package/dist/shopping/index.js +9 -0
- package/dist/shopping/index.js.map +1 -0
- package/dist/shopping/routes.d.ts +11 -0
- package/dist/shopping/routes.d.ts.map +1 -0
- package/dist/shopping/routes.js +35 -0
- package/dist/shopping/routes.js.map +1 -0
- package/dist/shopping/run.d.ts +24 -0
- package/dist/shopping/run.d.ts.map +1 -0
- package/dist/shopping/run.js +74 -0
- package/dist/shopping/run.js.map +1 -0
- package/dist/update/commands.d.ts +12 -0
- package/dist/update/commands.d.ts.map +1 -0
- package/dist/update/commands.js +11 -0
- package/dist/update/commands.js.map +1 -0
- package/dist/update/index.d.ts +9 -0
- package/dist/update/index.d.ts.map +1 -0
- package/dist/update/index.js +9 -0
- package/dist/update/index.js.map +1 -0
- package/dist/update/routes.d.ts +12 -0
- package/dist/update/routes.d.ts.map +1 -0
- package/dist/update/routes.js +24 -0
- package/dist/update/routes.js.map +1 -0
- package/dist/update/run-write.d.ts +19 -0
- package/dist/update/run-write.d.ts.map +1 -0
- package/dist/update/run-write.js +99 -0
- package/dist/update/run-write.js.map +1 -0
- package/dist/view/commands.d.ts +14 -0
- package/dist/view/commands.d.ts.map +1 -0
- package/dist/view/commands.js +22 -0
- package/dist/view/commands.js.map +1 -0
- package/dist/view/index.d.ts +9 -0
- package/dist/view/index.d.ts.map +1 -0
- package/dist/view/index.js +9 -0
- package/dist/view/index.js.map +1 -0
- package/dist/view/routes.d.ts +11 -0
- package/dist/view/routes.d.ts.map +1 -0
- package/dist/view/routes.js +53 -0
- package/dist/view/routes.js.map +1 -0
- package/dist/view/run.d.ts +13 -0
- package/dist/view/run.d.ts.map +1 -0
- package/dist/view/run.js +34 -0
- package/dist/view/run.js.map +1 -0
- package/package.json +3 -3
package/dist/fetch/db.js
CHANGED
|
@@ -1,62 +1,14 @@
|
|
|
1
1
|
// 取数层·文件 DB(老家 scripts/db.py + init_db.py + 17 表 schema 对应):node:sqlite。
|
|
2
2
|
// 缺失/损坏大声失败,不返空。废弃 = status 置已废弃(只增不删,无物理删除)。
|
|
3
3
|
import { DatabaseSync } from 'node:sqlite';
|
|
4
|
-
import { randomUUID } from 'node:crypto';
|
|
5
4
|
import { ChefFetchError } from './errors.js';
|
|
6
|
-
|
|
5
|
+
import { CHEF_TABLE_DDL } from './schema.js';
|
|
6
|
+
/** #839 搬迁后包内共享的取数原语:域目录的 run 可直接引用(`src/<域>/run*.ts`),包门不管。 */
|
|
7
|
+
export function now() {
|
|
7
8
|
return new Date().toISOString().slice(0, 19).replace('T', ' ');
|
|
8
9
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
const DDL = [
|
|
13
|
-
`CREATE TABLE IF NOT EXISTS recipes (id TEXT PRIMARY KEY, name TEXT NOT NULL UNIQUE, description TEXT DEFAULT '', difficulty TEXT DEFAULT '', servings INTEGER DEFAULT 2, total_time_minutes INTEGER DEFAULT 30, status TEXT DEFAULT '未做', photo_url TEXT DEFAULT '', source TEXT DEFAULT '', source_url TEXT DEFAULT '', created_at TEXT DEFAULT '', updated_at TEXT DEFAULT '')`,
|
|
14
|
-
`CREATE INDEX IF NOT EXISTS idx_recipes_name ON recipes(name)`,
|
|
15
|
-
`CREATE INDEX IF NOT EXISTS idx_recipes_difficulty ON recipes(difficulty)`,
|
|
16
|
-
`CREATE INDEX IF NOT EXISTS idx_recipes_status ON recipes(status)`,
|
|
17
|
-
`CREATE TABLE IF NOT EXISTS recipe_categories (id TEXT PRIMARY KEY, recipe_id TEXT NOT NULL, cuisine_type TEXT DEFAULT '', region TEXT DEFAULT '', country TEXT DEFAULT '', FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE)`,
|
|
18
|
-
`CREATE INDEX IF NOT EXISTS idx_recipe_categories_recipe ON recipe_categories(recipe_id)`,
|
|
19
|
-
`CREATE INDEX IF NOT EXISTS idx_recipe_categories_cuisine ON recipe_categories(cuisine_type)`,
|
|
20
|
-
`CREATE TABLE IF NOT EXISTS recipe_seasons (id TEXT PRIMARY KEY, recipe_id TEXT NOT NULL, season TEXT NOT NULL, FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE)`,
|
|
21
|
-
`CREATE INDEX IF NOT EXISTS idx_recipe_seasons_recipe ON recipe_seasons(recipe_id)`,
|
|
22
|
-
`CREATE TABLE IF NOT EXISTS recipe_cooking_methods (id TEXT PRIMARY KEY, recipe_id TEXT NOT NULL, method TEXT NOT NULL, FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE)`,
|
|
23
|
-
`CREATE INDEX IF NOT EXISTS idx_recipe_cooking_methods_recipe ON recipe_cooking_methods(recipe_id)`,
|
|
24
|
-
`CREATE TABLE IF NOT EXISTS recipe_flavors (id TEXT PRIMARY KEY, recipe_id TEXT NOT NULL, flavor TEXT NOT NULL, FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE)`,
|
|
25
|
-
`CREATE INDEX IF NOT EXISTS idx_recipe_flavors_recipe ON recipe_flavors(recipe_id)`,
|
|
26
|
-
`CREATE TABLE IF NOT EXISTS recipe_diet_tags (id TEXT PRIMARY KEY, recipe_id TEXT NOT NULL, tag TEXT NOT NULL, FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE)`,
|
|
27
|
-
`CREATE INDEX IF NOT EXISTS idx_recipe_diet_tags_recipe ON recipe_diet_tags(recipe_id)`,
|
|
28
|
-
`CREATE TABLE IF NOT EXISTS recipe_meal_types (id TEXT PRIMARY KEY, recipe_id TEXT NOT NULL, meal_type TEXT NOT NULL, FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE)`,
|
|
29
|
-
`CREATE INDEX IF NOT EXISTS idx_recipe_meal_types_recipe ON recipe_meal_types(recipe_id)`,
|
|
30
|
-
`CREATE TABLE IF NOT EXISTS ingredients (id TEXT PRIMARY KEY, recipe_id TEXT NOT NULL, sequence INTEGER DEFAULT 0, name TEXT NOT NULL, category TEXT DEFAULT '', quantity REAL DEFAULT NULL, unit TEXT DEFAULT '', quantity_text TEXT DEFAULT '', is_optional INTEGER DEFAULT 0, substitute TEXT DEFAULT '', FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE)`,
|
|
31
|
-
`CREATE INDEX IF NOT EXISTS idx_ingredients_recipe ON ingredients(recipe_id)`,
|
|
32
|
-
`CREATE INDEX IF NOT EXISTS idx_ingredients_name ON ingredients(name)`,
|
|
33
|
-
`CREATE TABLE IF NOT EXISTS cooking_steps (id TEXT PRIMARY KEY, recipe_id TEXT NOT NULL, sequence INTEGER NOT NULL, action TEXT NOT NULL, duration_minutes INTEGER DEFAULT NULL, heat_level TEXT DEFAULT '', temperature TEXT DEFAULT '', expected_result TEXT DEFAULT '', FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE)`,
|
|
34
|
-
`CREATE INDEX IF NOT EXISTS idx_cooking_steps_recipe ON cooking_steps(recipe_id)`,
|
|
35
|
-
`CREATE INDEX IF NOT EXISTS idx_cooking_steps_sequence ON cooking_steps(recipe_id, sequence)`,
|
|
36
|
-
`CREATE TABLE IF NOT EXISTS step_ingredients (id TEXT PRIMARY KEY, step_id TEXT NOT NULL, ingredient_id TEXT NOT NULL, quantity_used REAL DEFAULT NULL, introduced_at TEXT DEFAULT '', unit TEXT DEFAULT '', FOREIGN KEY (step_id) REFERENCES cooking_steps(id) ON DELETE CASCADE, FOREIGN KEY (ingredient_id) REFERENCES ingredients(id) ON DELETE CASCADE)`,
|
|
37
|
-
`CREATE INDEX IF NOT EXISTS idx_step_ingredients_step ON step_ingredients(step_id)`,
|
|
38
|
-
`CREATE INDEX IF NOT EXISTS idx_step_ingredients_ingredient ON step_ingredients(ingredient_id)`,
|
|
39
|
-
`CREATE TABLE IF NOT EXISTS step_techniques (id TEXT PRIMARY KEY, step_id TEXT NOT NULL, recipe_id TEXT NOT NULL, technique_name TEXT NOT NULL, description TEXT DEFAULT '', key_points TEXT DEFAULT '', FOREIGN KEY (step_id) REFERENCES cooking_steps(id) ON DELETE CASCADE, FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE)`,
|
|
40
|
-
`CREATE INDEX IF NOT EXISTS idx_step_techniques_step ON step_techniques(step_id)`,
|
|
41
|
-
`CREATE INDEX IF NOT EXISTS idx_step_techniques_recipe ON step_techniques(recipe_id)`,
|
|
42
|
-
`CREATE TABLE IF NOT EXISTS tips (id TEXT PRIMARY KEY, recipe_id TEXT NOT NULL, step_id TEXT DEFAULT NULL, ingredient_id TEXT DEFAULT NULL, category TEXT DEFAULT '', content TEXT NOT NULL, priority INTEGER DEFAULT 0, FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE, FOREIGN KEY (step_id) REFERENCES cooking_steps(id) ON DELETE SET NULL, FOREIGN KEY (ingredient_id) REFERENCES ingredients(id) ON DELETE SET NULL)`,
|
|
43
|
-
`CREATE INDEX IF NOT EXISTS idx_tips_recipe ON tips(recipe_id)`,
|
|
44
|
-
`CREATE INDEX IF NOT EXISTS idx_tips_step ON tips(step_id)`,
|
|
45
|
-
`CREATE INDEX IF NOT EXISTS idx_tips_ingredient ON tips(ingredient_id)`,
|
|
46
|
-
`CREATE TABLE IF NOT EXISTS recipe_history (id TEXT PRIMARY KEY, recipe_id TEXT NOT NULL, cook_date TEXT NOT NULL, cook_sequence INTEGER DEFAULT 1, rating REAL DEFAULT NULL, feedback TEXT DEFAULT '', photo TEXT DEFAULT NULL, FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE)`,
|
|
47
|
-
`CREATE INDEX IF NOT EXISTS idx_recipe_history_recipe ON recipe_history(recipe_id)`,
|
|
48
|
-
`CREATE INDEX IF NOT EXISTS idx_recipe_history_date ON recipe_history(cook_date)`,
|
|
49
|
-
`CREATE TABLE IF NOT EXISTS background_knowledge (id TEXT PRIMARY KEY, recipe_id TEXT NOT NULL UNIQUE, origin_story TEXT DEFAULT '', historical_background TEXT DEFAULT '', cultural_significance TEXT DEFAULT '', FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE)`,
|
|
50
|
-
`CREATE INDEX IF NOT EXISTS idx_background_recipe ON background_knowledge(recipe_id)`,
|
|
51
|
-
`CREATE TABLE IF NOT EXISTS recipe_relations (id TEXT PRIMARY KEY, parent_id TEXT NOT NULL, child_id TEXT NOT NULL, relation_type TEXT DEFAULT '', change_summary TEXT DEFAULT '', FOREIGN KEY (parent_id) REFERENCES recipes(id) ON DELETE CASCADE, FOREIGN KEY (child_id) REFERENCES recipes(id) ON DELETE CASCADE)`,
|
|
52
|
-
`CREATE INDEX IF NOT EXISTS idx_recipe_relations_parent ON recipe_relations(parent_id)`,
|
|
53
|
-
`CREATE INDEX IF NOT EXISTS idx_recipe_relations_child ON recipe_relations(child_id)`,
|
|
54
|
-
`CREATE TABLE IF NOT EXISTS cookware (id TEXT PRIMARY KEY, recipe_id TEXT NOT NULL, name TEXT NOT NULL, category TEXT DEFAULT '', FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE)`,
|
|
55
|
-
`CREATE INDEX IF NOT EXISTS idx_cookware_recipe ON cookware(recipe_id)`,
|
|
56
|
-
`CREATE TABLE IF NOT EXISTS nutrition_info (id TEXT PRIMARY KEY, recipe_id TEXT NOT NULL UNIQUE, serving_size REAL DEFAULT NULL, serving_unit TEXT DEFAULT '', calories INTEGER DEFAULT NULL, protein REAL DEFAULT NULL, fat REAL DEFAULT NULL, carbs REAL DEFAULT NULL, fiber REAL DEFAULT NULL, sodium REAL DEFAULT NULL, FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE)`,
|
|
57
|
-
`CREATE INDEX IF NOT EXISTS idx_nutrition_recipe ON nutrition_info(recipe_id)`,
|
|
58
|
-
];
|
|
59
|
-
function qAll(h, sql, params = []) {
|
|
10
|
+
// 建表语句已搬入 ./schema.ts(CHEF_TABLE_DDL):DDL 稳定、查询常变,变化频率分层(#839)。
|
|
11
|
+
export function qAll(h, sql, params = []) {
|
|
60
12
|
try {
|
|
61
13
|
const stmt = h.db.prepare(sql);
|
|
62
14
|
return stmt.all(...params);
|
|
@@ -65,7 +17,7 @@ function qAll(h, sql, params = []) {
|
|
|
65
17
|
throw new ChefFetchError('CHEF_DB_UNREADABLE', '查询失败', { cause: e });
|
|
66
18
|
}
|
|
67
19
|
}
|
|
68
|
-
function qGet(h, sql, params = []) {
|
|
20
|
+
export function qGet(h, sql, params = []) {
|
|
69
21
|
try {
|
|
70
22
|
const stmt = h.db.prepare(sql);
|
|
71
23
|
return stmt.get(...params);
|
|
@@ -74,7 +26,7 @@ function qGet(h, sql, params = []) {
|
|
|
74
26
|
throw new ChefFetchError('CHEF_DB_UNREADABLE', '查询失败', { cause: e });
|
|
75
27
|
}
|
|
76
28
|
}
|
|
77
|
-
function qRun(h, sql, params = []) {
|
|
29
|
+
export function qRun(h, sql, params = []) {
|
|
78
30
|
try {
|
|
79
31
|
const stmt = h.db.prepare(sql);
|
|
80
32
|
stmt.run(...params);
|
|
@@ -85,7 +37,7 @@ function qRun(h, sql, params = []) {
|
|
|
85
37
|
throw new ChefFetchError('CHEF_DB_UNREADABLE', '写库失败', { cause: e });
|
|
86
38
|
}
|
|
87
39
|
}
|
|
88
|
-
function toRecipe(r) {
|
|
40
|
+
export function toRecipe(r) {
|
|
89
41
|
return {
|
|
90
42
|
id: String(r.id ?? ''), name: String(r.name ?? ''), description: String(r.description ?? ''),
|
|
91
43
|
difficulty: String(r.difficulty ?? ''), servings: Number(r.servings ?? 2),
|
|
@@ -95,7 +47,7 @@ function toRecipe(r) {
|
|
|
95
47
|
updated_at: String(r.updated_at ?? ''),
|
|
96
48
|
};
|
|
97
49
|
}
|
|
98
|
-
function toIngredient(r) {
|
|
50
|
+
export function toIngredient(r) {
|
|
99
51
|
const q = r.quantity === null || r.quantity === undefined || r.quantity === '' ? null : Number(r.quantity);
|
|
100
52
|
return {
|
|
101
53
|
id: String(r.id ?? ''), recipe_id: String(r.recipe_id ?? ''), sequence: Number(r.sequence ?? 0),
|
|
@@ -105,7 +57,7 @@ function toIngredient(r) {
|
|
|
105
57
|
substitute: String(r.substitute ?? ''),
|
|
106
58
|
};
|
|
107
59
|
}
|
|
108
|
-
function toStep(r) {
|
|
60
|
+
export function toStep(r) {
|
|
109
61
|
const d = r.duration_minutes === null || r.duration_minutes === undefined || r.duration_minutes === '' ? null : Number(r.duration_minutes);
|
|
110
62
|
return {
|
|
111
63
|
id: String(r.id ?? ''), recipe_id: String(r.recipe_id ?? ''), sequence: Number(r.sequence ?? 0),
|
|
@@ -114,7 +66,7 @@ function toStep(r) {
|
|
|
114
66
|
expected_result: String(r.expected_result ?? ''),
|
|
115
67
|
};
|
|
116
68
|
}
|
|
117
|
-
function toHistory(r) {
|
|
69
|
+
export function toHistory(r) {
|
|
118
70
|
const rt = r.rating === null || r.rating === undefined || r.rating === '' ? null : Number(r.rating);
|
|
119
71
|
return {
|
|
120
72
|
id: String(r.id ?? ''), recipe_id: String(r.recipe_id ?? ''),
|
|
@@ -137,6 +89,7 @@ export function openChefDb(dbPath) {
|
|
|
137
89
|
try {
|
|
138
90
|
db.exec('PRAGMA journal_mode=WAL');
|
|
139
91
|
db.exec('PRAGMA busy_timeout=5000');
|
|
92
|
+
db.exec('PRAGMA foreign_keys=ON');
|
|
140
93
|
let existed = false;
|
|
141
94
|
try {
|
|
142
95
|
const row = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='recipes'").get();
|
|
@@ -145,7 +98,7 @@ export function openChefDb(dbPath) {
|
|
|
145
98
|
catch {
|
|
146
99
|
existed = false;
|
|
147
100
|
}
|
|
148
|
-
for (const ddl of
|
|
101
|
+
for (const ddl of CHEF_TABLE_DDL)
|
|
149
102
|
db.exec(ddl);
|
|
150
103
|
h.initialized = !existed;
|
|
151
104
|
}
|
|
@@ -164,99 +117,27 @@ export function closeChefDb(handle) {
|
|
|
164
117
|
}
|
|
165
118
|
catch { /* ignore */ }
|
|
166
119
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
return
|
|
172
|
-
}
|
|
173
|
-
export function
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
const
|
|
180
|
-
const servings = p.servings === undefined || p.servings === '' ? 2 : Number(p.servings);
|
|
181
|
-
const totalTime = (p.total_time_minutes === undefined || p.total_time_minutes === '') ? (p.total_time === undefined || p.total_time === '' ? 30 : Number(p.total_time)) : Number(p.total_time_minutes);
|
|
182
|
-
try {
|
|
183
|
-
qRun(h, 'INSERT INTO recipes (id, name, description, difficulty, servings, total_time_minutes, status, photo_url, source, source_url, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', [
|
|
184
|
-
id, name,
|
|
185
|
-
String(p.description ?? ''), String(p.difficulty ?? ''), servings,
|
|
186
|
-
totalTime, String(p.status ?? '未做'),
|
|
187
|
-
String(p.photo_url ?? ''), String(p.source ?? ''), String(p.source_url ?? ''), ts, ts,
|
|
188
|
-
]);
|
|
189
|
-
}
|
|
190
|
-
catch (e) {
|
|
191
|
-
if (e instanceof ChefFetchError)
|
|
192
|
-
throw e;
|
|
193
|
-
throw new ChefFetchError('CHEF_DB_UNREADABLE', '加菜写盘失败:' + name, { cause: e });
|
|
194
|
-
}
|
|
195
|
-
return mustRecipe(h, id);
|
|
196
|
-
}
|
|
197
|
-
export function addIngredient(h, recipeIdOrParams, input) {
|
|
198
|
-
const params = typeof recipeIdOrParams === 'string' ? { ...(input ?? {}), recipe_id: recipeIdOrParams } : recipeIdOrParams;
|
|
199
|
-
const recipeId = String(params.recipe_id ?? params.recipeId ?? '');
|
|
200
|
-
if (!recipeId)
|
|
201
|
-
throw new ChefFetchError('CHEF_BAD_QUERY', '加食材须给 recipe_id');
|
|
202
|
-
mustRecipe(h, recipeId);
|
|
203
|
-
const name = typeof params?.name === 'string' ? String(params.name).trim() : '';
|
|
120
|
+
// #854(承接 #819 G1):菜名相等唯一口径——写前去首尾空格后精确相等、大小写敏感,
|
|
121
|
+
// 与未来唯一索引的二进制语义一致;新增与改名两处写路径(现住 add/update 域)+本件 mustRecipe 引用它。
|
|
122
|
+
// 三处用户(add.run-write/update.run-write/mustRecipe),留守共享原语。
|
|
123
|
+
export function canonicalRecipeName(name) {
|
|
124
|
+
return typeof name === 'string' ? name.trim() : '';
|
|
125
|
+
}
|
|
126
|
+
export function mustRecipe(h, idOrName) {
|
|
127
|
+
// id 优先:按 id 精确命中一行即返回(id 唯一,不会撞)。
|
|
128
|
+
const byId = qGet(h, 'SELECT * FROM recipes WHERE id = ?', [idOrName]);
|
|
129
|
+
if (byId)
|
|
130
|
+
return toRecipe(byId);
|
|
131
|
+
// 按名:去首尾空格后精确相等、大小写敏感;多行即遗留重名,报错不任取第一行。
|
|
132
|
+
const name = canonicalRecipeName(idOrName);
|
|
204
133
|
if (!name)
|
|
205
|
-
throw new ChefFetchError('
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
if (qtyNum === null || Number.isNaN(qtyNum))
|
|
213
|
-
throw new ChefFetchError('CHEF_BAD_QUERY', '食材须给数字用量 quantity(老库 NOT NULL;适量请同时给估计数+quantity_text)');
|
|
214
|
-
const qty = qtyNum;
|
|
215
|
-
const isOptRaw = params.is_optional;
|
|
216
|
-
const isOpt = isOptRaw === true || isOptRaw === 1 || isOptRaw === '1' ? 1 : 0;
|
|
217
|
-
try {
|
|
218
|
-
qRun(h, 'INSERT INTO ingredients (id, recipe_id, sequence, name, category, quantity, unit, quantity_text, is_optional, substitute) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', [
|
|
219
|
-
id, recipeId, seq, name, String(params.category ?? ''), qty, String(params.unit ?? ''), String(params.quantity_text ?? ''), isOpt, String(params.substitute ?? ''),
|
|
220
|
-
]);
|
|
221
|
-
}
|
|
222
|
-
catch (e) {
|
|
223
|
-
throw new ChefFetchError('CHEF_DB_UNREADABLE', '食材写盘失败:' + name, { cause: e });
|
|
224
|
-
}
|
|
225
|
-
const row = qGet(h, 'SELECT * FROM ingredients WHERE id = ?', [id]);
|
|
226
|
-
if (!row)
|
|
227
|
-
throw new ChefFetchError('CHEF_RECIPE_CORRUPT', '食材写后读回失败:' + name);
|
|
228
|
-
return toIngredient(row);
|
|
229
|
-
}
|
|
230
|
-
export function addStep(h, recipeIdOrParams, input) {
|
|
231
|
-
const params = typeof recipeIdOrParams === 'string' ? { ...(input ?? {}), recipe_id: recipeIdOrParams } : recipeIdOrParams;
|
|
232
|
-
const recipeId = String(params.recipe_id ?? params.recipeId ?? '');
|
|
233
|
-
if (!recipeId)
|
|
234
|
-
throw new ChefFetchError('CHEF_BAD_QUERY', '加步骤须给 recipe_id');
|
|
235
|
-
mustRecipe(h, recipeId);
|
|
236
|
-
const action = typeof params?.action === 'string' ? String(params.action).trim() : '';
|
|
237
|
-
if (!action)
|
|
238
|
-
throw new ChefFetchError('CHEF_BAD_QUERY', '步骤须给操作 action');
|
|
239
|
-
const maxRow = qGet(h, 'SELECT MAX(sequence) AS m FROM cooking_steps WHERE recipe_id = ?', [recipeId]);
|
|
240
|
-
const seq = (maxRow?.m ?? 0) + 1;
|
|
241
|
-
const id = randomUUID();
|
|
242
|
-
const durRaw = params.duration_minutes;
|
|
243
|
-
const durNum = durRaw === undefined || durRaw === null || durRaw === '' ? null : Number(durRaw);
|
|
244
|
-
// 818 定案(甲):老库 duration_minutes INTEGER NOT NULL,本次不改 schema,缺值不插 NULL,直接拦下让 AI 问用户补齐。
|
|
245
|
-
if (durNum === null || Number.isNaN(durNum))
|
|
246
|
-
throw new ChefFetchError('CHEF_BAD_QUERY', '步骤须给数字时长 duration_minutes(老库 NOT NULL;缺时长请问用户补齐)');
|
|
247
|
-
const dur = durNum;
|
|
248
|
-
try {
|
|
249
|
-
qRun(h, 'INSERT INTO cooking_steps (id, recipe_id, sequence, action, duration_minutes, heat_level, temperature, expected_result) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', [
|
|
250
|
-
id, recipeId, seq, action, dur, String(params.heat_level ?? ''), String(params.temperature ?? ''), String(params.expected_result ?? ''),
|
|
251
|
-
]);
|
|
252
|
-
}
|
|
253
|
-
catch (e) {
|
|
254
|
-
throw new ChefFetchError('CHEF_DB_UNREADABLE', '步骤写盘失败', { cause: e });
|
|
255
|
-
}
|
|
256
|
-
const row = qGet(h, 'SELECT * FROM cooking_steps WHERE id = ?', [id]);
|
|
257
|
-
if (!row)
|
|
258
|
-
throw new ChefFetchError('CHEF_RECIPE_CORRUPT', '步骤写后读回失败');
|
|
259
|
-
return toStep(row);
|
|
134
|
+
throw new ChefFetchError('CHEF_RECIPE_NOT_FOUND', '无此菜谱:' + idOrName);
|
|
135
|
+
const rows = qAll(h, 'SELECT * FROM recipes WHERE name = ?', [name]);
|
|
136
|
+
if (rows.length === 0)
|
|
137
|
+
throw new ChefFetchError('CHEF_RECIPE_NOT_FOUND', '无此菜谱:' + idOrName);
|
|
138
|
+
if (rows.length > 1)
|
|
139
|
+
throw new ChefFetchError('CHEF_RECIPE_CORRUPT', '菜名撞名(库内多行同名,须先清重):“' + name + '”共' + rows.length + '行');
|
|
140
|
+
return toRecipe(rows[0]);
|
|
260
141
|
}
|
|
261
142
|
export function listRecipes(h, opts = {}) {
|
|
262
143
|
const conds = ['1=1'];
|
|
@@ -270,14 +151,7 @@ export function listRecipes(h, opts = {}) {
|
|
|
270
151
|
const rows = qAll(h, 'SELECT * FROM recipes WHERE ' + conds.join(' AND ') + ' ORDER BY name ASC', params);
|
|
271
152
|
return rows.map(toRecipe);
|
|
272
153
|
}
|
|
273
|
-
|
|
274
|
-
if (typeof kw !== 'string' || kw.trim().length === 0) {
|
|
275
|
-
throw new ChefFetchError('CHEF_BAD_QUERY', '搜索须给关键词(空查询不返全量)');
|
|
276
|
-
}
|
|
277
|
-
const k = '%' + kw.trim() + '%';
|
|
278
|
-
const rows = qAll(h, "SELECT DISTINCT r.* FROM recipes r LEFT JOIN ingredients i ON i.recipe_id = r.id WHERE (r.name LIKE ? OR r.description LIKE ? OR i.name LIKE ?) AND r.status != '已废弃' ORDER BY r.name ASC", [k, k, k]);
|
|
279
|
-
return rows.map(toRecipe);
|
|
280
|
-
}
|
|
154
|
+
// `searchRecipes`/`filterRecipes` 已搬入 `src/search/run.ts`(本域独占;旧址由 `src/fetch/index.ts` 转出,不断链)。
|
|
281
155
|
export function getRecipeDetail(h, idOrName) {
|
|
282
156
|
if (typeof idOrName !== 'string' || idOrName.trim().length === 0) {
|
|
283
157
|
throw new ChefFetchError('CHEF_BAD_QUERY', '查看须给菜名或 id');
|
|
@@ -287,111 +161,9 @@ export function getRecipeDetail(h, idOrName) {
|
|
|
287
161
|
const steps = qAll(h, 'SELECT * FROM cooking_steps WHERE recipe_id = ? ORDER BY sequence ASC', [recipe.id]);
|
|
288
162
|
return { recipe, ingredients: ings.map(toIngredient), steps: steps.map(toStep) };
|
|
289
163
|
}
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
return mustRecipe(h, r.id);
|
|
294
|
-
}
|
|
295
|
-
export function updateRecipe(h, id, patch) {
|
|
296
|
-
const r = mustRecipe(h, id);
|
|
297
|
-
const allowed = ['name', 'description', 'difficulty', 'servings', 'total_time_minutes', 'status', 'photo_url', 'source', 'source_url'];
|
|
298
|
-
const sets = [];
|
|
299
|
-
const params = [];
|
|
300
|
-
for (const k of allowed) {
|
|
301
|
-
const v = patch[k];
|
|
302
|
-
if (v !== undefined) {
|
|
303
|
-
sets.push(k + ' = ?');
|
|
304
|
-
params.push(k === 'servings' || k === 'total_time_minutes' ? Number(v) : String(v));
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
if (!sets.length)
|
|
308
|
-
throw new ChefFetchError('CHEF_BAD_QUERY', 'update 至少改一个字段');
|
|
309
|
-
sets.push('updated_at = ?');
|
|
310
|
-
params.push(now());
|
|
311
|
-
params.push(r.id);
|
|
312
|
-
try {
|
|
313
|
-
qRun(h, 'UPDATE recipes SET ' + sets.join(', ') + ' WHERE id = ?', params);
|
|
314
|
-
}
|
|
315
|
-
catch (e) {
|
|
316
|
-
throw new ChefFetchError('CHEF_DB_UNREADABLE', '菜谱更新失败:' + id, { cause: e });
|
|
317
|
-
}
|
|
318
|
-
return mustRecipe(h, r.id);
|
|
319
|
-
}
|
|
320
|
-
export function filterRecipes(h, filters = {}) {
|
|
321
|
-
const conds = ['1=1'];
|
|
322
|
-
const params = [];
|
|
323
|
-
if (filters.status !== undefined && filters.status !== '') {
|
|
324
|
-
conds.push('r.status = ?');
|
|
325
|
-
params.push(String(filters.status));
|
|
326
|
-
}
|
|
327
|
-
else
|
|
328
|
-
conds.push("r.status != '已废弃'");
|
|
329
|
-
if (filters.difficulty !== undefined && filters.difficulty !== '') {
|
|
330
|
-
conds.push('r.difficulty = ?');
|
|
331
|
-
params.push(String(filters.difficulty));
|
|
332
|
-
}
|
|
333
|
-
if (filters.maxTime !== undefined && filters.maxTime !== '') {
|
|
334
|
-
conds.push('r.total_time_minutes <= ?');
|
|
335
|
-
params.push(Number(filters.maxTime));
|
|
336
|
-
}
|
|
337
|
-
const exists = (table, col, val) => {
|
|
338
|
-
conds.push('EXISTS (SELECT 1 FROM ' + table + ' t WHERE t.recipe_id = r.id AND t.' + col + ' = ?)');
|
|
339
|
-
params.push(String(val));
|
|
340
|
-
};
|
|
341
|
-
if (filters.cuisine !== undefined && filters.cuisine !== '')
|
|
342
|
-
exists('recipe_categories', 'cuisine_type', filters.cuisine);
|
|
343
|
-
if (filters.season !== undefined && filters.season !== '')
|
|
344
|
-
exists('recipe_seasons', 'season', filters.season);
|
|
345
|
-
if (filters.method !== undefined && filters.method !== '')
|
|
346
|
-
exists('recipe_cooking_methods', 'method', filters.method);
|
|
347
|
-
if (filters.flavor !== undefined && filters.flavor !== '')
|
|
348
|
-
exists('recipe_flavors', 'flavor', filters.flavor);
|
|
349
|
-
if (filters.tag !== undefined && filters.tag !== '')
|
|
350
|
-
exists('recipe_diet_tags', 'tag', filters.tag);
|
|
351
|
-
if (filters.meal !== undefined && filters.meal !== '')
|
|
352
|
-
exists('recipe_meal_types', 'meal_type', filters.meal);
|
|
353
|
-
if (filters.cookware !== undefined && filters.cookware !== '')
|
|
354
|
-
exists('cookware', 'name', filters.cookware);
|
|
355
|
-
const rows = qAll(h, 'SELECT DISTINCT r.* FROM recipes r WHERE ' + conds.join(' AND ') + ' ORDER BY r.name ASC', params);
|
|
356
|
-
return rows.map(toRecipe);
|
|
357
|
-
}
|
|
358
|
-
export function recordHistory(h, input) {
|
|
359
|
-
const rid = typeof input?.recipe_id === 'string' ? input.recipe_id.trim() : '';
|
|
360
|
-
if (!rid)
|
|
361
|
-
throw new ChefFetchError('CHEF_BAD_QUERY', '记录做菜须给 recipe_id');
|
|
362
|
-
const recipe = mustRecipe(h, rid);
|
|
363
|
-
let rating = null;
|
|
364
|
-
const rawRt = input.rating;
|
|
365
|
-
// 818 定案(甲):老库 rating REAL NOT NULL,本次不改 schema;卡面“选填”暂改“必填”,缺评分不写历史,直接拦下。
|
|
366
|
-
if (rawRt === undefined || rawRt === null || rawRt === '')
|
|
367
|
-
throw new ChefFetchError('CHEF_BAD_QUERY', '记录做菜须给评分 rating(0-5 数字;老库 NOT NULL,未评分请先问用户要分)');
|
|
368
|
-
{
|
|
369
|
-
const n = typeof rawRt === 'string' ? Number(String(rawRt).trim()) : rawRt;
|
|
370
|
-
if (typeof n !== 'number' || !Number.isFinite(n))
|
|
371
|
-
throw new ChefFetchError('CHEF_HISTORY_CORRUPT', '评分须为数字');
|
|
372
|
-
if (n < 0 || n > 5)
|
|
373
|
-
throw new ChefFetchError('CHEF_HISTORY_CORRUPT', '评分须在 0-5 内');
|
|
374
|
-
rating = n;
|
|
375
|
-
}
|
|
376
|
-
const cookDate = typeof input.cook_date === 'string' && input.cook_date.trim() ? input.cook_date.trim() : today();
|
|
377
|
-
const maxRow = qGet(h, 'SELECT MAX(cook_sequence) AS m FROM recipe_history WHERE recipe_id = ?', [recipe.id]);
|
|
378
|
-
const seq = (maxRow?.m ?? 0) + 1;
|
|
379
|
-
const id = randomUUID();
|
|
380
|
-
try {
|
|
381
|
-
qRun(h, 'INSERT INTO recipe_history (id, recipe_id, cook_date, cook_sequence, rating, feedback) VALUES (?, ?, ?, ?, ?, ?)', [id, recipe.id, cookDate, seq, rating, input.feedback ?? '']);
|
|
382
|
-
if (recipe.status === '未做')
|
|
383
|
-
qRun(h, 'UPDATE recipes SET status = ?, updated_at = ? WHERE id = ?', ['已做', now(), recipe.id]);
|
|
384
|
-
}
|
|
385
|
-
catch (e) {
|
|
386
|
-
if (e instanceof ChefFetchError)
|
|
387
|
-
throw e;
|
|
388
|
-
throw new ChefFetchError('CHEF_DB_UNREADABLE', '历史写盘失败', { cause: e });
|
|
389
|
-
}
|
|
390
|
-
const row = qGet(h, 'SELECT * FROM recipe_history WHERE id = ?', [id]);
|
|
391
|
-
if (!row)
|
|
392
|
-
throw new ChefFetchError('CHEF_HISTORY_CORRUPT', '历史写后读回失败');
|
|
393
|
-
return toHistory(row);
|
|
394
|
-
}
|
|
164
|
+
// `deprecateRecipe`/`updateRecipe` 已搬入 `src/update/run-write.ts`(本域独占;旧址由 `src/fetch/index.ts` 转出)。
|
|
165
|
+
// `addRecipe`/`addIngredient`/`addStep` 已搬入 `src/add/run-write.ts`(同上)。
|
|
166
|
+
// `filterRecipes` 已搬入 `src/search/run.ts`(本域独占,见上);`recordHistory` 已搬入 `src/history/run-record.ts`(本域独占;旧址由 `src/fetch/index.ts` 转出,不断链)。
|
|
395
167
|
export function queryHistory(h, recipeId) {
|
|
396
168
|
if (recipeId === undefined || recipeId === null || recipeId === '') {
|
|
397
169
|
const rows = qAll(h, 'SELECT * FROM recipe_history ORDER BY cook_date DESC, cook_sequence ASC');
|
|
@@ -408,67 +180,6 @@ export function historyStats(h, recipeId) {
|
|
|
408
180
|
const avg = row?.a === null || row?.a === undefined ? null : Number(row.a);
|
|
409
181
|
return { count, avgRating: avg };
|
|
410
182
|
}
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
throw new ChefFetchError('CHEF_BAD_QUERY', '采购须给菜名(空查询不返空)');
|
|
414
|
-
}
|
|
415
|
-
const ids = [];
|
|
416
|
-
const nameById = new Map();
|
|
417
|
-
for (const n of names) {
|
|
418
|
-
if (typeof n !== 'string' || !n.trim())
|
|
419
|
-
throw new ChefFetchError('CHEF_BAD_QUERY', '采购菜名含空串');
|
|
420
|
-
const r = mustRecipe(h, n.trim());
|
|
421
|
-
if (!ids.includes(r.id)) {
|
|
422
|
-
ids.push(r.id);
|
|
423
|
-
nameById.set(r.id, r.name);
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
const placeholders = ids.map(() => '?').join(',');
|
|
427
|
-
const rows = qAll(h, 'SELECT i.*, r.name AS _recipe_name FROM ingredients i JOIN recipes r ON r.id = i.recipe_id WHERE i.recipe_id IN (' + placeholders + ') ORDER BY i.name ASC', ids);
|
|
428
|
-
const merged = new Map();
|
|
429
|
-
for (const r of rows) {
|
|
430
|
-
const ing = toIngredient(r);
|
|
431
|
-
const recipeName = String(r._recipe_name ?? nameById.get(ing.recipe_id) ?? '');
|
|
432
|
-
const key = ing.name + '|||' + ing.unit;
|
|
433
|
-
const qty = ing.quantity ?? 0;
|
|
434
|
-
const hit = merged.get(key);
|
|
435
|
-
const qt = ing.quantity_text || (ing.quantity !== null ? String(ing.quantity) + ing.unit : '');
|
|
436
|
-
if (!hit) {
|
|
437
|
-
merged.set(key, { name: ing.name, quantity: qty, unit: ing.unit, recipes: [recipeName], quantity_text: qt, from: recipeName, optional: ing.is_optional === 1, category: ing.category });
|
|
438
|
-
}
|
|
439
|
-
else {
|
|
440
|
-
hit.quantity += qty;
|
|
441
|
-
if (!hit.recipes.includes(recipeName))
|
|
442
|
-
hit.recipes.push(recipeName);
|
|
443
|
-
hit.from = hit.recipes.join('+');
|
|
444
|
-
if (ing.is_optional !== 1)
|
|
445
|
-
hit.optional = false;
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
return [...merged.values()].sort((a, b) => a.name.localeCompare(b.name, 'zh'));
|
|
449
|
-
}
|
|
450
|
-
export function healthCheck(h) {
|
|
451
|
-
const issues = [];
|
|
452
|
-
try {
|
|
453
|
-
const noIng = qAll(h, "SELECT r.name AS name FROM recipes r LEFT JOIN ingredients i ON i.recipe_id = r.id WHERE i.id IS NULL AND r.status != '已废弃'");
|
|
454
|
-
for (const r of noIng)
|
|
455
|
-
issues.push({ level: 'warn', message: '无食材:' + String(r.name ?? '') });
|
|
456
|
-
const noStep = qAll(h, "SELECT r.name AS name FROM recipes r LEFT JOIN cooking_steps s ON s.recipe_id = r.id WHERE s.id IS NULL AND r.status != '已废弃'");
|
|
457
|
-
for (const r of noStep)
|
|
458
|
-
issues.push({ level: 'warn', message: '无步骤:' + String(r.name ?? '') });
|
|
459
|
-
const noHeat = qAll(h, "SELECT r.name AS name, s.sequence AS seq FROM cooking_steps s JOIN recipes r ON r.id = s.recipe_id WHERE (s.heat_level IS NULL OR s.heat_level = '') AND r.status != '已废弃'");
|
|
460
|
-
for (const r of noHeat)
|
|
461
|
-
issues.push({ level: 'warn', message: '步骤缺火候:' + String(r.name ?? '') + '第' + String(r.seq ?? '') + '步' });
|
|
462
|
-
const never = qAll(h, "SELECT r.name AS name FROM recipes r LEFT JOIN recipe_history hh ON hh.recipe_id = r.id WHERE hh.id IS NULL AND r.status != '已废弃'");
|
|
463
|
-
for (const r of never)
|
|
464
|
-
issues.push({ level: 'info', message: '从未做过:' + String(r.name ?? '') });
|
|
465
|
-
}
|
|
466
|
-
catch (e) {
|
|
467
|
-
if (e instanceof ChefFetchError)
|
|
468
|
-
throw e;
|
|
469
|
-
throw new ChefFetchError('CHEF_DB_UNREADABLE', '体检查询失败', { cause: e });
|
|
470
|
-
}
|
|
471
|
-
issues.sort((a, b) => (a.level < b.level ? -1 : a.level > b.level ? 1 : String(a.message ?? '').localeCompare(String(b.message ?? ''), 'zh')));
|
|
472
|
-
return issues;
|
|
473
|
-
}
|
|
183
|
+
// `buildShoppingList` 已搬入 `src/shopping/run.ts`、`healthCheck` 已搬入 `src/data/run-query.ts`
|
|
184
|
+
//(各本域独占;旧址由 `src/fetch/index.ts` 转出,不断链)。本文件到此结束。
|
|
474
185
|
//# sourceMappingURL=db.js.map
|
package/dist/fetch/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/fetch/db.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,8CAA8C;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAqC7C,SAAS,GAAG;IACV,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,KAAK;IACZ,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,GAAG,GAAa;IACpB,kXAAkX;IAClX,8DAA8D;IAC9D,0EAA0E;IAC1E,kEAAkE;IAClE,8OAA8O;IAC9O,yFAAyF;IACzF,6FAA6F;IAC7F,kLAAkL;IAClL,mFAAmF;IACnF,0LAA0L;IAC1L,mGAAmG;IACnG,kLAAkL;IAClL,mFAAmF;IACnF,iLAAiL;IACjL,uFAAuF;IACvF,wLAAwL;IACxL,yFAAyF;IACzF,+WAA+W;IAC/W,6EAA6E;IAC7E,sEAAsE;IACtE,6UAA6U;IAC7U,iFAAiF;IACjF,6FAA6F;IAC7F,6VAA6V;IAC7V,mFAAmF;IACnF,+FAA+F;IAC/F,iVAAiV;IACjV,iFAAiF;IACjF,qFAAqF;IACrF,6aAA6a;IAC7a,+DAA+D;IAC/D,2DAA2D;IAC3D,uEAAuE;IACvE,mSAAmS;IACnS,mFAAmF;IACnF,iFAAiF;IACjF,qRAAqR;IACrR,qFAAqF;IACrF,sTAAsT;IACtT,uFAAuF;IACvF,qFAAqF;IACrF,oMAAoM;IACpM,uEAAuE;IACvE,8XAA8X;IAC9X,8EAA8E;CAC/E,CAAC;AACF,SAAS,IAAI,CAAI,CAAS,EAAE,GAAW,EAAE,SAAoB,EAAE;IAC7D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAA+C,CAAC;QAC7E,OAAO,IAAI,CAAC,GAAG,CAAC,GAAI,MAAkB,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,cAAc,CAAC,oBAAoB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAAI,CAAS,EAAE,GAAW,EAAE,SAAoB,EAAE;IAC7D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAyD,CAAC;QACvF,OAAO,IAAI,CAAC,GAAG,CAAC,GAAI,MAAkB,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,cAAc,CAAC,oBAAoB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAAC,CAAS,EAAE,GAAW,EAAE,SAAoB,EAAE;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAmD,CAAC;QACjF,IAAI,CAAC,GAAG,CAAC,GAAI,MAAkB,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,cAAc;YAAE,MAAM,CAAC,CAAC;QACzC,MAAM,IAAI,cAAc,CAAC,oBAAoB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,CAA0B;IAC1C,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;QAC5F,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;QACzE,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,kBAAkB,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;QACtF,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;QACpE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;QAC9E,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,CAA0B;IAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC3G,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC/F,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC9D,QAAQ,EAAE,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAC9E,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;QACrF,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,CAA0B;IACxC,MAAM,CAAC,GAAG,CAAC,CAAC,gBAAgB,KAAK,IAAI,IAAI,CAAC,CAAC,gBAAgB,KAAK,SAAS,IAAI,CAAC,CAAC,gBAAgB,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC3I,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC/F,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1F,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;QAChF,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,CAA0B;IAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACpG,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;QAC5D,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC;QACjF,MAAM,EAAE,EAAE,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;KACxF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,EAAgB,CAAC;IACrB,IAAI,CAAC;QAAC,EAAE,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;IAAC,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC;QAAC,MAAM,IAAI,cAAc,CAAC,oBAAoB,EAAE,YAAY,GAAG,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;IAClG,MAAM,CAAC,GAAW,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAC3D,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACnC,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACpC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,GAAI,EAAE,CAAC,OAAO,CAAC,sEAAsE,CAAuC,CAAC,GAAG,EAAE,CAAC;YAC5I,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,GAAG,KAAK,CAAC;QAAC,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,GAAG;YAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC,CAAC,WAAW,GAAG,CAAC,OAAO,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC;YAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC1C,MAAM,IAAI,cAAc,CAAC,oBAAoB,EAAE,cAAc,GAAG,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,UAAU,CAAC,CAAS,EAAE,QAAgB;IAC7C,MAAM,GAAG,GAAG,IAAI,CAA0B,CAAC,EAAE,gDAAgD,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACrH,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,cAAc,CAAC,uBAAuB,EAAE,OAAO,GAAG,QAAQ,CAAC,CAAC;IAChF,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,CAAS,EAAE,KAA8B;IACjE,MAAM,IAAI,GAAG,OAAQ,KAAiC,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAE,KAAiC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACxI,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;IACrE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxF,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,kBAAkB,KAAK,SAAS,IAAI,CAAC,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;IACvM,IAAI,CAAC;QACH,IAAI,CAAC,CAAC,EAAE,kMAAkM,EAAE;YAC1M,EAAE,EAAE,IAAI;YACR,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,QAAQ;YACjE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC;YACnC,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;SACtF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,cAAc;YAAE,MAAM,CAAC,CAAC;QACzC,MAAM,IAAI,cAAc,CAAC,oBAAoB,EAAE,SAAS,GAAG,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC;AAID,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,gBAAkD,EAAE,KAA+B;IAC1H,MAAM,MAAM,GAAG,OAAO,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAE,gBAA4C,CAAC;IACxJ,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACnE,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;IAC7E,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,OAAO,MAAM,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChF,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,IAAI,CAAuB,CAAC,EAAE,gEAAgE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3H,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,MAAM,MAAM,GAAI,MAAkC,CAAC,QAAQ,CAAC;IAC5D,MAAM,MAAM,GAAG,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChG,4EAA4E;IAC5E,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,wDAAwD,CAAC,CAAC;IAClJ,MAAM,GAAG,GAAG,MAAM,CAAC;IACnB,MAAM,QAAQ,GAAI,MAAkC,CAAC,WAAW,CAAC;IACjE,MAAM,KAAK,GAAG,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,CAAC,IAAI,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,IAAI,CAAC;QACH,IAAI,CAAC,CAAC,EAAE,iKAAiK,EAAE;YACzK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;SACnK,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,cAAc,CAAC,oBAAoB,EAAE,SAAS,GAAG,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAA0B,CAAC,EAAE,wCAAwC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7F,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,cAAc,CAAC,qBAAqB,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC;IAC9E,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAID,MAAM,UAAU,OAAO,CAAC,CAAS,EAAE,gBAAkD,EAAE,KAA+B;IACpH,MAAM,MAAM,GAAG,OAAO,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAE,gBAA4C,CAAC;IACxJ,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACnE,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;IAC7E,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,OAAO,MAAM,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,IAAI,CAAuB,CAAC,EAAE,kEAAkE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7H,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,MAAM,MAAM,GAAI,MAAkC,CAAC,gBAAgB,CAAC;IACpE,MAAM,MAAM,GAAG,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChG,uFAAuF;IACvF,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,kDAAkD,CAAC,CAAC;IAC5I,MAAM,GAAG,GAAG,MAAM,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,CAAC,CAAC,EAAE,yJAAyJ,EAAE;YACjK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;SACxI,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,cAAc,CAAC,oBAAoB,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAA0B,CAAC,EAAE,0CAA0C,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/F,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,cAAc,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS,EAAE,OAA6D,EAAE;IACpG,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;IACtB,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,IAAI,CAAC,IAAI,CAAC,iBAAiB;QAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAAC,CAAC;IAClG,MAAM,IAAI,GAAG,IAAI,CAA0B,CAAC,EAAE,8BAA8B,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,oBAAoB,EAAE,MAAM,CAAC,CAAC;IACnI,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,EAAU;IACjD,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,CAA0B,CAAC,EAAE,2LAA2L,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtP,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAS,EAAE,QAAgB;IACzD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,IAAI,CAA0B,CAAC,EAAE,qEAAqE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAClI,MAAM,KAAK,GAAG,IAAI,CAA0B,CAAC,EAAE,uEAAuE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACrI,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAS,EAAE,EAAU;IACnD,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5B,IAAI,CAAC,CAAC,EAAE,4DAA4D,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAS,EAAE,EAAU,EAAE,KAA8B;IAChF,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAU,CAAC;IAChJ,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,GAAI,KAAiC,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IACtI,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;IAC/E,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACnB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,CAAC,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,eAAe,EAAE,MAAM,CAAC,CAAC;IAC7E,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,cAAc,CAAC,oBAAoB,EAAE,SAAS,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,UAAmC,EAAE;IAC5E,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;IACtB,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;;QAC1H,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACrC,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU,KAAK,EAAE,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAAC,CAAC;IAC/I,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,EAAE,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAAC,CAAC;IAC/I,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,GAAY,EAAQ,EAAE;QAChE,KAAK,CAAC,IAAI,CAAC,wBAAwB,GAAG,KAAK,GAAG,oCAAoC,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC;QACpG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,CAAC,CAAC;IACF,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,EAAE;QAAE,MAAM,CAAC,mBAAmB,EAAE,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1H,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE;QAAE,MAAM,CAAC,gBAAgB,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9G,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE;QAAE,MAAM,CAAC,wBAAwB,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACtH,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE;QAAE,MAAM,CAAC,gBAAgB,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9G,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,KAAK,EAAE;QAAE,MAAM,CAAC,kBAAkB,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACpG,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;QAAE,MAAM,CAAC,mBAAmB,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9G,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE;QAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5G,MAAM,IAAI,GAAG,IAAI,CAA0B,CAAC,EAAE,2CAA2C,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,sBAAsB,EAAE,MAAM,CAAC,CAAC;IAClJ,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,KAA2F;IAClI,MAAM,GAAG,GAAG,OAAO,KAAK,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClC,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,MAAM,KAAK,GAAI,KAAiC,CAAC,MAAM,CAAC;IACxD,2EAA2E;IAC3E,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;QAAE,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,gDAAgD,CAAC,CAAC;IACxJ,CAAC;QACC,MAAM,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC3E,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,cAAc,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;QAC7G,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,cAAc,CAAC,sBAAsB,EAAE,YAAY,CAAC,CAAC;QACnF,MAAM,GAAG,CAAW,CAAC;IACvB,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAClH,MAAM,MAAM,GAAG,IAAI,CAAuB,CAAC,EAAE,wEAAwE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACpI,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,IAAI,CAAC;QACH,IAAI,CAAC,CAAC,EAAE,kHAAkH,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1L,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI;YAAE,IAAI,CAAC,CAAC,EAAE,4DAA4D,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9H,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,cAAc;YAAE,MAAM,CAAC,CAAC;QACzC,MAAM,IAAI,cAAc,CAAC,oBAAoB,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAA0B,CAAC,EAAE,2CAA2C,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChG,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,cAAc,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;IACvE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAS,EAAE,QAAiB;IACvD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;QACnE,MAAM,IAAI,GAAG,IAAI,CAA0B,CAAC,EAAE,yEAAyE,CAAC,CAAC;QACzH,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAA0B,CAAC,EAAE,6EAA6E,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1I,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAS,EAAE,QAAgB;IACtD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAkC,CAAC,EAAE,gFAAgF,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACpJ,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,KAAK,IAAI,IAAI,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3E,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,CAAS,EAAE,KAAe;IAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;QAC9F,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;IAC1E,CAAC;IACD,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,IAAI,CAA0B,CAAC,EAAE,mHAAmH,GAAG,YAAY,GAAG,uBAAuB,EAAE,GAAG,CAAC,CAAC;IACjN,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/E,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC;QACxC,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,IAAI,CAAC,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/F,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,WAAW,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1L,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC;YACpB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACpE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,GAAG,CAAC,WAAW,KAAK,CAAC;gBAAE,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;QAClD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAA0B,CAAC,EAAE,6HAA6H,CAAC,CAAC;QAC9K,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9F,MAAM,MAAM,GAAG,IAAI,CAA0B,CAAC,EAAE,+HAA+H,CAAC,CAAC;QACjL,KAAK,MAAM,CAAC,IAAI,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/F,MAAM,MAAM,GAAG,IAAI,CAA0B,CAAC,EAAE,4KAA4K,CAAC,CAAC;QAC9N,KAAK,MAAM,CAAC,IAAI,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACnI,MAAM,KAAK,GAAG,IAAI,CAA0B,CAAC,EAAE,mIAAmI,CAAC,CAAC;QACpL,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,cAAc;YAAE,MAAM,CAAC,CAAC;QACzC,MAAM,IAAI,cAAc,CAAC,oBAAoB,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/I,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/fetch/db.ts"],"names":[],"mappings":"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"}
|
package/dist/fetch/index.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
export { ChefFetchError, ChefPolicyError } from './errors.js';
|
|
2
2
|
export { DEFAULT_DB_FILENAME, dbFilename, resolveDbDir, resolveDbPath } from './paths.js';
|
|
3
|
-
export { openChefDb, closeChefDb,
|
|
3
|
+
export { openChefDb, closeChefDb, listRecipes, getRecipeDetail, queryHistory, historyStats } from './db.js';
|
|
4
|
+
export { filterRecipes, searchRecipes } from '../search/run.js';
|
|
5
|
+
export { recordHistory } from '../history/run-record.js';
|
|
6
|
+
export { buildShoppingList } from '../shopping/run.js';
|
|
7
|
+
export { healthCheck } from '../data/run-query.js';
|
|
8
|
+
export { addIngredient, addRecipe, addStep } from '../add/run-write.js';
|
|
9
|
+
export { deprecateRecipe, updateRecipe } from '../update/run-write.js';
|
|
4
10
|
export type { RecipeRow, IngredientRow, StepRow, HistoryRow, HealthIssue, ChefDb } from './db.js';
|
|
5
11
|
export type { ShoppingItem as ChefShoppingItem } from './db.js';
|
|
6
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fetch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fetch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5G,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACvE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAClG,YAAY,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/fetch/index.js
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
export { ChefFetchError, ChefPolicyError } from './errors.js';
|
|
2
2
|
export { DEFAULT_DB_FILENAME, dbFilename, resolveDbDir, resolveDbPath } from './paths.js';
|
|
3
|
-
export { openChefDb, closeChefDb,
|
|
3
|
+
export { openChefDb, closeChefDb, listRecipes, getRecipeDetail, queryHistory, historyStats } from './db.js';
|
|
4
|
+
// #839 搬迁债务(到期=收口票把测试改打域接口后删):下十件的新家在域目录,
|
|
5
|
+
// 本 barrel 只转出、不断言内容(结构纪律铁律五:过渡期旧共用 barrel 对新家内部件的深路径直引用)。
|
|
6
|
+
export { filterRecipes, searchRecipes } from '../search/run.js';
|
|
7
|
+
export { recordHistory } from '../history/run-record.js';
|
|
8
|
+
export { buildShoppingList } from '../shopping/run.js';
|
|
9
|
+
export { healthCheck } from '../data/run-query.js';
|
|
10
|
+
export { addIngredient, addRecipe, addStep } from '../add/run-write.js';
|
|
11
|
+
export { deprecateRecipe, updateRecipe } from '../update/run-write.js';
|
|
4
12
|
//# sourceMappingURL=index.js.map
|
package/dist/fetch/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fetch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fetch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5G,0CAA0C;AAC1C,2DAA2D;AAC3D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** 取数层·建表语句(老家 17 表 schema 对应):DDL 稳定、查询常变,变化频率分层(#839 整包落位票从 db.ts 抽出)。
|
|
2
|
+
*
|
|
3
|
+
* 唯一定义地:开库建表(db.ts openChefDb)与体检门槛(health.ts DB_TABLE_THRESHOLD=17)都以它为准,
|
|
4
|
+
* 不另抄第二份表清单。改表=改这里(本次不改 schema,只搬家)。
|
|
5
|
+
*/
|
|
6
|
+
export declare const CHEF_TABLE_DDL: string[];
|
|
7
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/fetch/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,cAAc,EAAE,MAAM,EA8ClC,CAAC"}
|