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.
Files changed (183) hide show
  1. package/dist/add/commands.d.ts +15 -0
  2. package/dist/add/commands.d.ts.map +1 -0
  3. package/dist/add/commands.js +22 -0
  4. package/dist/add/commands.js.map +1 -0
  5. package/dist/add/index.d.ts +10 -0
  6. package/dist/add/index.d.ts.map +1 -0
  7. package/dist/add/index.js +10 -0
  8. package/dist/add/index.js.map +1 -0
  9. package/dist/add/routes.d.ts +11 -0
  10. package/dist/add/routes.d.ts.map +1 -0
  11. package/dist/add/routes.js +23 -0
  12. package/dist/add/routes.js.map +1 -0
  13. package/dist/add/run-write.d.ts +37 -0
  14. package/dist/add/run-write.d.ts.map +1 -0
  15. package/dist/add/run-write.js +187 -0
  16. package/dist/add/run-write.js.map +1 -0
  17. package/dist/cli/cmd_read.js +32 -289
  18. package/dist/cli/cmd_read.js.map +1 -1
  19. package/dist/cli/keys.d.ts +2 -1
  20. package/dist/cli/keys.d.ts.map +1 -1
  21. package/dist/cli/keys.js +37 -1
  22. package/dist/cli/keys.js.map +1 -1
  23. package/dist/cook/commands.d.ts +13 -0
  24. package/dist/cook/commands.d.ts.map +1 -0
  25. package/dist/cook/commands.js +21 -0
  26. package/dist/cook/commands.js.map +1 -0
  27. package/dist/cook/index.d.ts +9 -0
  28. package/dist/cook/index.d.ts.map +1 -0
  29. package/dist/cook/index.js +9 -0
  30. package/dist/cook/index.js.map +1 -0
  31. package/dist/cook/routes.d.ts +11 -0
  32. package/dist/cook/routes.d.ts.map +1 -0
  33. package/dist/cook/routes.js +35 -0
  34. package/dist/cook/routes.js.map +1 -0
  35. package/dist/cook/run.d.ts +24 -0
  36. package/dist/cook/run.d.ts.map +1 -0
  37. package/dist/cook/run.js +46 -0
  38. package/dist/cook/run.js.map +1 -0
  39. package/dist/data/commands.d.ts +12 -0
  40. package/dist/data/commands.d.ts.map +1 -0
  41. package/dist/data/commands.js +11 -0
  42. package/dist/data/commands.js.map +1 -0
  43. package/dist/data/index.d.ts +9 -0
  44. package/dist/data/index.d.ts.map +1 -0
  45. package/dist/data/index.js +9 -0
  46. package/dist/data/index.js.map +1 -0
  47. package/dist/data/routes.d.ts +12 -0
  48. package/dist/data/routes.d.ts.map +1 -0
  49. package/dist/data/routes.js +19 -0
  50. package/dist/data/routes.js.map +1 -0
  51. package/dist/data/run-query.d.ts +15 -0
  52. package/dist/data/run-query.d.ts.map +1 -0
  53. package/dist/data/run-query.js +73 -0
  54. package/dist/data/run-query.js.map +1 -0
  55. package/dist/fetch/db.d.ts +11 -31
  56. package/dist/fetch/db.d.ts.map +1 -1
  57. package/dist/fetch/db.js +39 -328
  58. package/dist/fetch/db.js.map +1 -1
  59. package/dist/fetch/index.d.ts +7 -1
  60. package/dist/fetch/index.d.ts.map +1 -1
  61. package/dist/fetch/index.js +9 -1
  62. package/dist/fetch/index.js.map +1 -1
  63. package/dist/fetch/schema.d.ts +7 -0
  64. package/dist/fetch/schema.d.ts.map +1 -0
  65. package/dist/fetch/schema.js +53 -0
  66. package/dist/fetch/schema.js.map +1 -0
  67. package/dist/history/index.d.ts +3 -2
  68. package/dist/history/index.d.ts.map +1 -1
  69. package/dist/history/index.js +3 -2
  70. package/dist/history/index.js.map +1 -1
  71. package/dist/history/run-query.d.ts +13 -0
  72. package/dist/history/run-query.d.ts.map +1 -0
  73. package/dist/history/run-query.js +44 -0
  74. package/dist/history/run-query.js.map +1 -0
  75. package/dist/history/run-record.d.ts +21 -0
  76. package/dist/history/run-record.d.ts.map +1 -0
  77. package/dist/history/run-record.js +71 -0
  78. package/dist/history/run-record.js.map +1 -0
  79. package/dist/relation/commands.d.ts +10 -0
  80. package/dist/relation/commands.d.ts.map +1 -0
  81. package/dist/relation/commands.js +9 -0
  82. package/dist/relation/commands.js.map +1 -0
  83. package/dist/relation/index.d.ts +8 -0
  84. package/dist/relation/index.d.ts.map +1 -0
  85. package/dist/relation/index.js +8 -0
  86. package/dist/relation/index.js.map +1 -0
  87. package/dist/relation/routes.d.ts +10 -0
  88. package/dist/relation/routes.d.ts.map +1 -0
  89. package/dist/relation/routes.js +28 -0
  90. package/dist/relation/routes.js.map +1 -0
  91. package/dist/render/index.d.ts +7 -1
  92. package/dist/render/index.d.ts.map +1 -1
  93. package/dist/render/index.js +9 -1
  94. package/dist/render/index.js.map +1 -1
  95. package/dist/render/views.d.ts +1 -39
  96. package/dist/render/views.d.ts.map +1 -1
  97. package/dist/render/views.js +6 -56
  98. package/dist/render/views.js.map +1 -1
  99. package/dist/search/commands.d.ts +14 -0
  100. package/dist/search/commands.d.ts.map +1 -0
  101. package/dist/search/commands.js +22 -0
  102. package/dist/search/commands.js.map +1 -0
  103. package/dist/search/index.d.ts +9 -0
  104. package/dist/search/index.d.ts.map +1 -0
  105. package/dist/search/index.js +9 -0
  106. package/dist/search/index.js.map +1 -0
  107. package/dist/search/routes.d.ts +11 -0
  108. package/dist/search/routes.d.ts.map +1 -0
  109. package/dist/search/routes.js +59 -0
  110. package/dist/search/routes.js.map +1 -0
  111. package/dist/search/run.d.ts +22 -0
  112. package/dist/search/run.d.ts.map +1 -0
  113. package/dist/search/run.js +105 -0
  114. package/dist/search/run.js.map +1 -0
  115. package/dist/setup/commands.d.ts +10 -0
  116. package/dist/setup/commands.d.ts.map +1 -0
  117. package/dist/setup/commands.js +9 -0
  118. package/dist/setup/commands.js.map +1 -0
  119. package/dist/setup/index.d.ts +8 -0
  120. package/dist/setup/index.d.ts.map +1 -0
  121. package/dist/setup/index.js +8 -0
  122. package/dist/setup/index.js.map +1 -0
  123. package/dist/setup/routes.d.ts +10 -0
  124. package/dist/setup/routes.d.ts.map +1 -0
  125. package/dist/setup/routes.js +16 -0
  126. package/dist/setup/routes.js.map +1 -0
  127. package/dist/shared/command-spec.d.ts +42 -0
  128. package/dist/shared/command-spec.d.ts.map +1 -0
  129. package/dist/shared/command-spec.js +15 -0
  130. package/dist/shared/command-spec.js.map +1 -0
  131. package/dist/shared/slots.d.ts +24 -0
  132. package/dist/shared/slots.d.ts.map +1 -0
  133. package/dist/shared/slots.js +63 -0
  134. package/dist/shared/slots.js.map +1 -0
  135. package/dist/shopping/commands.d.ts +13 -0
  136. package/dist/shopping/commands.d.ts.map +1 -0
  137. package/dist/shopping/commands.js +21 -0
  138. package/dist/shopping/commands.js.map +1 -0
  139. package/dist/shopping/index.d.ts +9 -0
  140. package/dist/shopping/index.d.ts.map +1 -0
  141. package/dist/shopping/index.js +9 -0
  142. package/dist/shopping/index.js.map +1 -0
  143. package/dist/shopping/routes.d.ts +11 -0
  144. package/dist/shopping/routes.d.ts.map +1 -0
  145. package/dist/shopping/routes.js +35 -0
  146. package/dist/shopping/routes.js.map +1 -0
  147. package/dist/shopping/run.d.ts +24 -0
  148. package/dist/shopping/run.d.ts.map +1 -0
  149. package/dist/shopping/run.js +74 -0
  150. package/dist/shopping/run.js.map +1 -0
  151. package/dist/update/commands.d.ts +12 -0
  152. package/dist/update/commands.d.ts.map +1 -0
  153. package/dist/update/commands.js +11 -0
  154. package/dist/update/commands.js.map +1 -0
  155. package/dist/update/index.d.ts +9 -0
  156. package/dist/update/index.d.ts.map +1 -0
  157. package/dist/update/index.js +9 -0
  158. package/dist/update/index.js.map +1 -0
  159. package/dist/update/routes.d.ts +12 -0
  160. package/dist/update/routes.d.ts.map +1 -0
  161. package/dist/update/routes.js +24 -0
  162. package/dist/update/routes.js.map +1 -0
  163. package/dist/update/run-write.d.ts +19 -0
  164. package/dist/update/run-write.d.ts.map +1 -0
  165. package/dist/update/run-write.js +99 -0
  166. package/dist/update/run-write.js.map +1 -0
  167. package/dist/view/commands.d.ts +14 -0
  168. package/dist/view/commands.d.ts.map +1 -0
  169. package/dist/view/commands.js +22 -0
  170. package/dist/view/commands.js.map +1 -0
  171. package/dist/view/index.d.ts +9 -0
  172. package/dist/view/index.d.ts.map +1 -0
  173. package/dist/view/index.js +9 -0
  174. package/dist/view/index.js.map +1 -0
  175. package/dist/view/routes.d.ts +11 -0
  176. package/dist/view/routes.d.ts.map +1 -0
  177. package/dist/view/routes.js +53 -0
  178. package/dist/view/routes.js.map +1 -0
  179. package/dist/view/run.d.ts +13 -0
  180. package/dist/view/run.d.ts.map +1 -0
  181. package/dist/view/run.js +34 -0
  182. package/dist/view/run.js.map +1 -0
  183. package/package.json +3 -3
@@ -0,0 +1,53 @@
1
+ /** 取数层·建表语句(老家 17 表 schema 对应):DDL 稳定、查询常变,变化频率分层(#839 整包落位票从 db.ts 抽出)。
2
+ *
3
+ * 唯一定义地:开库建表(db.ts openChefDb)与体检门槛(health.ts DB_TABLE_THRESHOLD=17)都以它为准,
4
+ * 不另抄第二份表清单。改表=改这里(本次不改 schema,只搬家)。
5
+ */
6
+ export const CHEF_TABLE_DDL = [] = [
7
+ `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 '')`,
8
+ `CREATE INDEX IF NOT EXISTS idx_recipes_name ON recipes(name)`,
9
+ `CREATE INDEX IF NOT EXISTS idx_recipes_difficulty ON recipes(difficulty)`,
10
+ `CREATE INDEX IF NOT EXISTS idx_recipes_status ON recipes(status)`,
11
+ `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)`,
12
+ `CREATE INDEX IF NOT EXISTS idx_recipe_categories_recipe ON recipe_categories(recipe_id)`,
13
+ `CREATE INDEX IF NOT EXISTS idx_recipe_categories_cuisine ON recipe_categories(cuisine_type)`,
14
+ `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)`,
15
+ `CREATE INDEX IF NOT EXISTS idx_recipe_seasons_recipe ON recipe_seasons(recipe_id)`,
16
+ `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)`,
17
+ `CREATE INDEX IF NOT EXISTS idx_recipe_cooking_methods_recipe ON recipe_cooking_methods(recipe_id)`,
18
+ `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)`,
19
+ `CREATE INDEX IF NOT EXISTS idx_recipe_flavors_recipe ON recipe_flavors(recipe_id)`,
20
+ `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)`,
21
+ `CREATE INDEX IF NOT EXISTS idx_recipe_diet_tags_recipe ON recipe_diet_tags(recipe_id)`,
22
+ `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)`,
23
+ `CREATE INDEX IF NOT EXISTS idx_recipe_meal_types_recipe ON recipe_meal_types(recipe_id)`,
24
+ `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)`,
25
+ `CREATE INDEX IF NOT EXISTS idx_ingredients_recipe ON ingredients(recipe_id)`,
26
+ `CREATE INDEX IF NOT EXISTS idx_ingredients_name ON ingredients(name)`,
27
+ `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)`,
28
+ `CREATE INDEX IF NOT EXISTS idx_cooking_steps_recipe ON cooking_steps(recipe_id)`,
29
+ `CREATE INDEX IF NOT EXISTS idx_cooking_steps_sequence ON cooking_steps(recipe_id, sequence)`,
30
+ `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)`,
31
+ `CREATE INDEX IF NOT EXISTS idx_step_ingredients_step ON step_ingredients(step_id)`,
32
+ `CREATE INDEX IF NOT EXISTS idx_step_ingredients_ingredient ON step_ingredients(ingredient_id)`,
33
+ `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)`,
34
+ `CREATE INDEX IF NOT EXISTS idx_step_techniques_step ON step_techniques(step_id)`,
35
+ `CREATE INDEX IF NOT EXISTS idx_step_techniques_recipe ON step_techniques(recipe_id)`,
36
+ `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)`,
37
+ `CREATE INDEX IF NOT EXISTS idx_tips_recipe ON tips(recipe_id)`,
38
+ `CREATE INDEX IF NOT EXISTS idx_tips_step ON tips(step_id)`,
39
+ `CREATE INDEX IF NOT EXISTS idx_tips_ingredient ON tips(ingredient_id)`,
40
+ `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)`,
41
+ `CREATE INDEX IF NOT EXISTS idx_recipe_history_recipe ON recipe_history(recipe_id)`,
42
+ `CREATE INDEX IF NOT EXISTS idx_recipe_history_date ON recipe_history(cook_date)`,
43
+ `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)`,
44
+ `CREATE INDEX IF NOT EXISTS idx_background_recipe ON background_knowledge(recipe_id)`,
45
+ `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)`,
46
+ `CREATE INDEX IF NOT EXISTS idx_recipe_relations_parent ON recipe_relations(parent_id)`,
47
+ `CREATE INDEX IF NOT EXISTS idx_recipe_relations_child ON recipe_relations(child_id)`,
48
+ `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)`,
49
+ `CREATE INDEX IF NOT EXISTS idx_cookware_recipe ON cookware(recipe_id)`,
50
+ `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)`,
51
+ `CREATE INDEX IF NOT EXISTS idx_nutrition_recipe ON nutrition_info(recipe_id)`,
52
+ ];
53
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/fetch/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAa,EAAE,GAAG;IAC3C,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"}
@@ -1,10 +1,11 @@
1
1
  /** 历史能力门:能力对外只经这里(结构纪律铁律一、铁律五)。
2
2
  *
3
- * 对外两件:命令声明表与路由声明表。处理函数与取数实现不在这里,
4
- * 本票只立声明;外边要用历史能力的东西,只经这两个名字。
3
+ * 对外四件:命令声明表、路由声明表与两路处理函数(写/查)。类型两件不干活。
5
4
  */
6
5
  export { HISTORY_COMMANDS } from './commands.js';
7
6
  export type { HistoryCommandSpec } from './commands.js';
8
7
  export { HISTORY_ROUTES } from './routes.js';
9
8
  export type { HistoryRouteDecl } from './routes.js';
9
+ export { buildHistoryRecord, recordHistory, runHistoryRecord } from './run-record.js';
10
+ export { runHistoryQuery, toHistoryItem } from './run-query.js';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/history/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/history/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,8 +1,9 @@
1
1
  /** 历史能力门:能力对外只经这里(结构纪律铁律一、铁律五)。
2
2
  *
3
- * 对外两件:命令声明表与路由声明表。处理函数与取数实现不在这里,
4
- * 本票只立声明;外边要用历史能力的东西,只经这两个名字。
3
+ * 对外四件:命令声明表、路由声明表与两路处理函数(写/查)。类型两件不干活。
5
4
  */
6
5
  export { HISTORY_COMMANDS } from './commands.js';
7
6
  export { HISTORY_ROUTES } from './routes.js';
7
+ export { buildHistoryRecord, recordHistory, runHistoryRecord } from './run-record.js';
8
+ export { runHistoryQuery, toHistoryItem } from './run-query.js';
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/history/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/history/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /** 历史能力的查处理(`chef.history.query` 的 timeline/stats 两 kind)+ 本域独占的行装配。
2
+ *
3
+ * 老分派层(`src/cli/cmd_read.ts`)`chef.history.query` 分支中 timeline/stats 两路逐字节下沉:
4
+ * 只改 import 出处,判定与装配一字不动。quality/backup 两路住数据管理域
5
+ * (`src/data/run-query.ts`);kind 路由由入口注册表做(非法 kind 入口已拦,落不到这里)。
6
+ * `toHistoryItem`(原 `src/render/views.ts`)只被本域调用,随行搬入;旧址改转出(搬迁债务)。
7
+ */
8
+ import type { ChefDb, HistoryRow } from '../fetch/db.js';
9
+ /** 历史行+菜名拼条目。原 `src/render/views.ts`,本域独占。 */
10
+ export declare function toHistoryItem(h: HistoryRow, recipeName?: string): Record<string, unknown>;
11
+ /** 跑 `chef.history.query` 的 timeline/stats:`kind` 由入口注册表算好下传,本函数只做本域两路分支。 */
12
+ export declare function runHistoryQuery(handle: ChefDb, params: Record<string, unknown>, kind: string): unknown;
13
+ //# sourceMappingURL=run-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-query.d.ts","sourceRoot":"","sources":["../../src/history/run-query.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAMzD,8CAA8C;AAC9C,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIzF;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAuBtG"}
@@ -0,0 +1,44 @@
1
+ /** 历史能力的查处理(`chef.history.query` 的 timeline/stats 两 kind)+ 本域独占的行装配。
2
+ *
3
+ * 老分派层(`src/cli/cmd_read.ts`)`chef.history.query` 分支中 timeline/stats 两路逐字节下沉:
4
+ * 只改 import 出处,判定与装配一字不动。quality/backup 两路住数据管理域
5
+ * (`src/data/run-query.ts`);kind 路由由入口注册表做(非法 kind 入口已拦,落不到这里)。
6
+ * `toHistoryItem`(原 `src/render/views.ts`)只被本域调用,随行搬入;旧址改转出(搬迁债务)。
7
+ */
8
+ import { getRecipeDetail, historyStats, listRecipes, queryHistory } from '../fetch/db.js';
9
+ import { ChefPolicyError } from '../fetch/errors.js';
10
+ import { buildHistoryQuery } from '../render/index.js';
11
+ import { needName } from '../policy/index.js';
12
+ /** 历史行+菜名拼条目。原 `src/render/views.ts`,本域独占。 */
13
+ export function toHistoryItem(h, recipeName) {
14
+ const out = { ...h };
15
+ if (recipeName !== undefined)
16
+ out.recipe_name = recipeName;
17
+ return out;
18
+ }
19
+ /** 跑 `chef.history.query` 的 timeline/stats:`kind` 由入口注册表算好下传,本函数只做本域两路分支。 */
20
+ export function runHistoryQuery(handle, params, kind) {
21
+ if (kind === 'timeline') {
22
+ const name = needName(params);
23
+ const detail = getRecipeDetail(handle, name);
24
+ const rows = queryHistory(handle, detail.recipe.id);
25
+ return buildHistoryQuery('timeline:' + detail.recipe.name, rows.map((h) => toHistoryItem(h, detail.recipe.name)));
26
+ }
27
+ if (kind === 'stats') {
28
+ const name = params.name;
29
+ if (typeof name === 'string' && name.trim()) {
30
+ const detail = getRecipeDetail(handle, name.trim());
31
+ const st = historyStats(handle, detail.recipe.id);
32
+ return buildHistoryQuery('stats:' + detail.recipe.name, [{ name: detail.recipe.name, count: st.count, avgRating: st.avgRating }]);
33
+ }
34
+ const recipes = listRecipes(handle);
35
+ const items = recipes.map((r) => {
36
+ const st = historyStats(handle, r.id);
37
+ return { id: r.id, name: r.name, count: st.count, avgRating: st.avgRating };
38
+ });
39
+ return buildHistoryQuery('stats:all', items);
40
+ }
41
+ // 不可达:入口注册表已拦过非法 kind(原文分支尾 fail(2) 同报文,归用法错 exit 2)。
42
+ throw new ChefPolicyError('POLICY_BAD_INPUT', 'history.query 只接受 kind=timeline/stats/quality/backup');
43
+ }
44
+ //# sourceMappingURL=run-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-query.js","sourceRoot":"","sources":["../../src/history/run-query.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,8CAA8C;AAC9C,MAAM,UAAU,aAAa,CAAC,CAAa,EAAE,UAAmB;IAC9D,MAAM,GAAG,GAA4B,EAAE,GAAG,CAAC,EAAE,CAAC;IAC9C,IAAI,UAAU,KAAK,SAAS;QAAE,GAAG,CAAC,WAAW,GAAG,UAAU,CAAC;IAC3D,OAAO,GAAG,CAAC;AACb,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,MAA+B,EAAE,IAAY;IAC3F,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpD,OAAO,iBAAiB,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpH,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACpD,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAClD,OAAO,iBAAiB,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACpI,CAAC;QACD,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC9B,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACtC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC;QAC9E,CAAC,CAAC,CAAC;QACH,OAAO,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IACD,sDAAsD;IACtD,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,sDAAsD,CAAC,CAAC;AACxG,CAAC"}
@@ -0,0 +1,21 @@
1
+ /** 历史能力的写处理(`chef.history.record`)+ 本域独占的取数与回执装配。
2
+ *
3
+ * 老分派层(`src/cli/cmd_read.ts`)分支逐字节下沉:只改 import 出处,判定与装配一字不动。
4
+ * `recordHistory`(原 `src/fetch/db.ts`)与 `buildHistoryRecord`(原 `src/render/views.ts`)
5
+ * 只被本域调用,按“写不出的留回域目录”搬入本文件;旧址改转出(搬迁债务,见对应 index)。
6
+ */
7
+ import type { ChefDb, HistoryRow } from '../fetch/db.js';
8
+ /** 记一次做菜(评分必填:老库 rating NOT NULL,缺评分直接拦)。原 `src/fetch/db.ts`,本域独占。 */
9
+ export declare function recordHistory(h: ChefDb, input: {
10
+ recipe_id: string;
11
+ rating?: number | null;
12
+ feedback?: string;
13
+ cook_date?: string;
14
+ }): HistoryRow;
15
+ export declare function buildHistoryRecord(message: string): {
16
+ ok: boolean;
17
+ message: string;
18
+ };
19
+ /** 跑 `chef.history.record`:定位母菜+评分校验+落历史(receipt 形)。 */
20
+ export declare function runHistoryRecord(handle: ChefDb, params: Record<string, unknown>): unknown;
21
+ //# sourceMappingURL=run-record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-record.d.ts","sourceRoot":"","sources":["../../src/history/run-record.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AASzD,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CA4BhJ;AAGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAEpF;AAED,wDAAwD;AACxD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAYzF"}
@@ -0,0 +1,71 @@
1
+ /** 历史能力的写处理(`chef.history.record`)+ 本域独占的取数与回执装配。
2
+ *
3
+ * 老分派层(`src/cli/cmd_read.ts`)分支逐字节下沉:只改 import 出处,判定与装配一字不动。
4
+ * `recordHistory`(原 `src/fetch/db.ts`)与 `buildHistoryRecord`(原 `src/render/views.ts`)
5
+ * 只被本域调用,按“写不出的留回域目录”搬入本文件;旧址改转出(搬迁债务,见对应 index)。
6
+ */
7
+ import { randomUUID } from 'node:crypto';
8
+ import { ChefFetchError } from '../fetch/errors.js';
9
+ import { getRecipeDetail, mustRecipe, now, qGet, qRun, toHistory } from '../fetch/db.js';
10
+ import { needName, validateRating } from '../policy/index.js';
11
+ /** 当日日期(本域独占:落历史默认 cook_date 与补录默认 date;原 db.ts `today()`,随 recordHistory 搬入)。 */
12
+ function today() {
13
+ return new Date().toISOString().slice(0, 10);
14
+ }
15
+ /** 记一次做菜(评分必填:老库 rating NOT NULL,缺评分直接拦)。原 `src/fetch/db.ts`,本域独占。 */
16
+ export function recordHistory(h, input) {
17
+ const rid = typeof input?.recipe_id === 'string' ? input.recipe_id.trim() : '';
18
+ if (!rid)
19
+ throw new ChefFetchError('CHEF_BAD_QUERY', '记录做菜须给 recipe_id');
20
+ const recipe = mustRecipe(h, rid);
21
+ let rating = null;
22
+ const rawRt = input.rating;
23
+ // 818 定案(甲):老库 rating REAL NOT NULL,本次不改 schema;卡面“选填”暂改“必填”,缺评分不写历史,直接拦下。
24
+ if (rawRt === undefined || rawRt === null || rawRt === '')
25
+ throw new ChefFetchError('CHEF_BAD_QUERY', '记录做菜须给评分 rating(0-5 数字;老库 NOT NULL,未评分请先问用户要分)');
26
+ {
27
+ const n = typeof rawRt === 'string' ? Number(String(rawRt).trim()) : rawRt;
28
+ if (typeof n !== 'number' || !Number.isFinite(n))
29
+ throw new ChefFetchError('CHEF_HISTORY_CORRUPT', '评分须为数字');
30
+ if (n < 0 || n > 5)
31
+ throw new ChefFetchError('CHEF_HISTORY_CORRUPT', '评分须在 0-5 内');
32
+ rating = n;
33
+ }
34
+ const cookDate = typeof input.cook_date === 'string' && input.cook_date.trim() ? input.cook_date.trim() : today();
35
+ const maxRow = qGet(h, 'SELECT MAX(cook_sequence) AS m FROM recipe_history WHERE recipe_id = ?', [recipe.id]);
36
+ const seq = (maxRow?.m ?? 0) + 1;
37
+ const id = randomUUID();
38
+ try {
39
+ qRun(h, 'INSERT INTO recipe_history (id, recipe_id, cook_date, cook_sequence, rating, feedback) VALUES (?, ?, ?, ?, ?, ?)', [id, recipe.id, cookDate, seq, rating, input.feedback ?? '']);
40
+ if (recipe.status === '未做')
41
+ qRun(h, 'UPDATE recipes SET status = ?, updated_at = ? WHERE id = ?', ['已做', now(), recipe.id]);
42
+ }
43
+ catch (e) {
44
+ if (e instanceof ChefFetchError)
45
+ throw e;
46
+ throw new ChefFetchError('CHEF_DB_UNREADABLE', '历史写盘失败', { cause: e });
47
+ }
48
+ const row = qGet(h, 'SELECT * FROM recipe_history WHERE id = ?', [id]);
49
+ if (!row)
50
+ throw new ChefFetchError('CHEF_HISTORY_CORRUPT', '历史写后读回失败');
51
+ return toHistory(row);
52
+ }
53
+ // 记做菜回执 receipt。原 `src/render/views.ts`,本域独占。
54
+ export function buildHistoryRecord(message) {
55
+ return { ok: true, message };
56
+ }
57
+ /** 跑 `chef.history.record`:定位母菜+评分校验+落历史(receipt 形)。 */
58
+ export function runHistoryRecord(handle, params) {
59
+ const name = needName(params);
60
+ const detail = getRecipeDetail(handle, name);
61
+ let rating = null;
62
+ if (params.rating !== undefined) {
63
+ const raw = typeof params.rating === 'string' && params.rating.trim() !== '' ? Number(params.rating.trim()) : params.rating;
64
+ rating = validateRating(raw);
65
+ }
66
+ const feedback = params.feedback === undefined ? '' : String(params.feedback);
67
+ const cookDate = params.date === undefined || params.date === '' ? today() : String(params.date);
68
+ const h = recordHistory(handle, { recipe_id: detail.recipe.id, rating, feedback, cook_date: cookDate });
69
+ return buildHistoryRecord('已记录做菜:' + detail.recipe.name + '(' + h.cook_date + (rating !== null ? ',评分 ' + rating : '') + ')');
70
+ }
71
+ //# sourceMappingURL=run-record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-record.js","sourceRoot":"","sources":["../../src/history/run-record.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /** 派生能力的命令声明(空):本域暂无 key。
2
+ *
3
+ * 本能力即 HELP 一级分组「派生」。三组短语(添加派生关系/查看派生关系/从已有派生新菜)在
4
+ * #767 资产里去向为 `tbd`(不可路由)——运行时无 key、无实现。空数组仍是「恰好一个声明数组」
5
+ * (生成器认它为一域,来源域名单里有 `relation`),派生端到端票接入 key 时再填。
6
+ */
7
+ import type { CommandSpec } from '../shared/command-spec.js';
8
+ /** 派生能力的声明表:恰好导出一个声明数组(生成器只认这一个;本域暂空)。 */
9
+ export declare const RELATION_COMMANDS: readonly CommandSpec[];
10
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/relation/commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,0CAA0C;AAC1C,eAAO,MAAM,iBAAiB,EAAE,SAAS,WAAW,EAAO,CAAC"}
@@ -0,0 +1,9 @@
1
+ /** 派生能力的命令声明(空):本域暂无 key。
2
+ *
3
+ * 本能力即 HELP 一级分组「派生」。三组短语(添加派生关系/查看派生关系/从已有派生新菜)在
4
+ * #767 资产里去向为 `tbd`(不可路由)——运行时无 key、无实现。空数组仍是「恰好一个声明数组」
5
+ * (生成器认它为一域,来源域名单里有 `relation`),派生端到端票接入 key 时再填。
6
+ */
7
+ /** 派生能力的声明表:恰好导出一个声明数组(生成器只认这一个;本域暂空)。 */
8
+ export const RELATION_COMMANDS = [];
9
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/relation/commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,0CAA0C;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAA2B,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** 派生能力门:能力对外只经这里(结构纪律铁律一、铁律五)。
2
+ *
3
+ * 对外两件:命令声明表(暂空)与路由声明表(全 tbd)。处理函数与取数实现不在这里,
4
+ * 本票只立声明;外边要用派生能力的东西,只经这两个名字。
5
+ */
6
+ export { RELATION_COMMANDS } from './commands.js';
7
+ export { RELATION_ROUTES } from './routes.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/relation/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** 派生能力门:能力对外只经这里(结构纪律铁律一、铁律五)。
2
+ *
3
+ * 对外两件:命令声明表(暂空)与路由声明表(全 tbd)。处理函数与取数实现不在这里,
4
+ * 本票只立声明;外边要用派生能力的东西,只经这两个名字。
5
+ */
6
+ export { RELATION_COMMANDS } from './commands.js';
7
+ export { RELATION_ROUTES } from './routes.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/relation/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,10 @@
1
+ /** 派生能力的路由声明(占位):三组短语暂无 key。
2
+ *
3
+ * 三行对应 #767 资产里派生的三组短语,`key: 'tbd'`、`order: 0`(未入 `WAKE_TABLE`,
4
+ * 运行时唤醒词未命中)。`cli` 为空串——无可跑命令行,占位等域票接入。
5
+ * 对账脚本认 `key: 'tbd'` 行为 tbd 行(仅 relation/setup 允许出现)。
6
+ */
7
+ import type { RouteDecl } from '../shared/command-spec.js';
8
+ /** 派生能力的路由声明表:恰好导出一个声明数组(全 tbd,域票接入时填实)。 */
9
+ export declare const RELATION_ROUTES: readonly RouteDecl[];
10
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/relation/routes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,4CAA4C;AAC5C,eAAO,MAAM,eAAe,EAAE,SAAS,SAAS,EAmB/C,CAAC"}
@@ -0,0 +1,28 @@
1
+ /** 派生能力的路由声明(占位):三组短语暂无 key。
2
+ *
3
+ * 三行对应 #767 资产里派生的三组短语,`key: 'tbd'`、`order: 0`(未入 `WAKE_TABLE`,
4
+ * 运行时唤醒词未命中)。`cli` 为空串——无可跑命令行,占位等域票接入。
5
+ * 对账脚本认 `key: 'tbd'` 行为 tbd 行(仅 relation/setup 允许出现)。
6
+ */
7
+ /** 派生能力的路由声明表:恰好导出一个声明数组(全 tbd,域票接入时填实)。 */
8
+ export const RELATION_ROUTES = [
9
+ {
10
+ order: 0,
11
+ wakeWord: '添加派生关系',
12
+ key: 'tbd',
13
+ cli: '',
14
+ },
15
+ {
16
+ order: 0,
17
+ wakeWord: '查看派生关系',
18
+ key: 'tbd',
19
+ cli: '',
20
+ },
21
+ {
22
+ order: 0,
23
+ wakeWord: '从已有派生新菜',
24
+ key: 'tbd',
25
+ cli: '',
26
+ },
27
+ ];
28
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/relation/routes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,4CAA4C;AAC5C,MAAM,CAAC,MAAM,eAAe,GAAyB;IACnD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,QAAQ;QAClB,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,EAAE;KACR;IACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,QAAQ;QAClB,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,EAAE;KACR;IACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,SAAS;QACnB,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,EAAE;KACR;CACF,CAAC"}
@@ -3,6 +3,12 @@ export { CHEF_KEY_SHAPES, chefShapeFor, buildChefEnvelope, parseChefEnvelope } f
3
3
  export { CHEF_HTML_MAX_BYTES, escapeHtml, renderEnvelopeHtml, estimateBytes, assertHtmlSize, SHARED_CSS_MARKER, SHARED_HELPERS_MARKER, CONTENT_MARKER, SHARED_CSS, SHARED_HELPERS, fillTemplate } from './html.js';
4
4
  export { CHEF_TEMPLATES, templateFor, loadTemplate } from './templates.js';
5
5
  export type { ChefTemplate } from './templates.js';
6
- export { toRecipeItem, recipeDetail, buildRecipeSearch, buildRecipeReceipt, buildCookingRun, buildShopping, buildHistoryRecord, buildHistoryQuery, toHistoryItem, buildHelpItems } from './views.js';
6
+ export { toRecipeItem, buildRecipeReceipt, buildHistoryQuery, buildHelpItems } from './views.js';
7
+ export { recipeDetail } from '../view/run.js';
8
+ export { buildRecipeSearch } from '../search/run.js';
9
+ export { buildCookingRun } from '../cook/run.js';
10
+ export { buildShopping } from '../shopping/run.js';
11
+ export { buildHistoryRecord } from '../history/run-record.js';
12
+ export { toHistoryItem } from '../history/run-query.js';
7
13
  export type { RecipeItem, RecipeDetail, RecipeHistoryStats, CookingStep, HelpItem } from './views.js';
8
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACnN,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3E,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACrM,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACnN,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3E,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjG,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -2,5 +2,13 @@ export { ChefRenderError } from './errors.js';
2
2
  export { CHEF_KEY_SHAPES, chefShapeFor, buildChefEnvelope, parseChefEnvelope } from './envelope.js';
3
3
  export { CHEF_HTML_MAX_BYTES, escapeHtml, renderEnvelopeHtml, estimateBytes, assertHtmlSize, SHARED_CSS_MARKER, SHARED_HELPERS_MARKER, CONTENT_MARKER, SHARED_CSS, SHARED_HELPERS, fillTemplate } from './html.js';
4
4
  export { CHEF_TEMPLATES, templateFor, loadTemplate } from './templates.js';
5
- export { toRecipeItem, recipeDetail, buildRecipeSearch, buildRecipeReceipt, buildCookingRun, buildShopping, buildHistoryRecord, buildHistoryQuery, toHistoryItem, buildHelpItems } from './views.js';
5
+ export { toRecipeItem, buildRecipeReceipt, buildHistoryQuery, buildHelpItems } from './views.js';
6
+ // #839 搬迁债务(到期=收口票把测试改打域接口后删):下六件的新家在域目录,
7
+ // 本 barrel 只转出、不断言内容(结构纪律铁律五:过渡期旧共用 barrel 对新家内部件的深路径直引用)。
8
+ export { recipeDetail } from '../view/run.js';
9
+ export { buildRecipeSearch } from '../search/run.js';
10
+ export { buildCookingRun } from '../cook/run.js';
11
+ export { buildShopping } from '../shopping/run.js';
12
+ export { buildHistoryRecord } from '../history/run-record.js';
13
+ export { toHistoryItem } from '../history/run-query.js';
6
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACnN,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACnN,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjG,0CAA0C;AAC1C,2DAA2D;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { RecipeRow, IngredientRow, StepRow, HistoryRow, ShoppingItem } from '../fetch/db.js';
1
+ import type { RecipeRow, IngredientRow, StepRow } from '../fetch/db.js';
2
2
  export interface RecipeItem {
3
3
  id: string;
4
4
  name: string;
@@ -19,14 +19,6 @@ export interface RecipeDetail {
19
19
  steps: StepRow[];
20
20
  history?: RecipeHistoryStats | null;
21
21
  }
22
- export declare function recipeDetail(detail: RecipeDetail): {
23
- item: Record<string, unknown>;
24
- };
25
- export declare function buildRecipeSearch(kind: string, items: RecipeItem[]): {
26
- items: RecipeItem[];
27
- total: number;
28
- kind: string;
29
- };
30
22
  export declare function buildRecipeReceipt(message: string): {
31
23
  ok: boolean;
32
24
  message: string;
@@ -36,41 +28,11 @@ export interface CookingStep extends Record<string, unknown> {
36
28
  action: string;
37
29
  ingredients?: Record<string, unknown>[];
38
30
  }
39
- export declare function buildCookingRun(args: {
40
- recipe: RecipeItem;
41
- steps: CookingStep[];
42
- servings?: number;
43
- history?: RecipeHistoryStats | null;
44
- }): {
45
- items: CookingStep[];
46
- total: number;
47
- recipe: RecipeItem;
48
- servingsNote: string;
49
- historyHint: string;
50
- steps: CookingStep[];
51
- };
52
- export declare function buildShopping(args: {
53
- items: ShoppingItem[];
54
- recipes: string[];
55
- servings?: number;
56
- excludeOptional?: boolean;
57
- }): {
58
- items: ShoppingItem[];
59
- total: number;
60
- recipes: string[];
61
- servings?: number;
62
- excludeOptional: boolean;
63
- };
64
- export declare function buildHistoryRecord(message: string): {
65
- ok: boolean;
66
- message: string;
67
- };
68
31
  export declare function buildHistoryQuery(kind: string, items: Record<string, unknown>[]): {
69
32
  items: Record<string, unknown>[];
70
33
  total: number;
71
34
  kind: string;
72
35
  };
73
- export declare function toHistoryItem(h: HistoryRow, recipeName?: string): Record<string, unknown>;
74
36
  export interface HelpItem {
75
37
  phrase: string;
76
38
  key: string;
@@ -1 +1 @@
1
- {"version":3,"file":"views.d.ts","sourceRoot":"","sources":["../../src/render/views.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"views.d.ts","sourceRoot":"","sources":["../../src/render/views.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAExE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAClE,QAAQ,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CAC9D;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,SAAS,GAAG,UAAU,CAKrD;AAED,MAAM,WAAW,kBAAkB;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAAE;AAGhF,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACrC;AAMD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAEpF;AAED,MAAM,WAAW,WAAY,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACzC;AAUD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAEnJ;AAKD,MAAM,WAAW,QAAQ;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;CAAE;AAEpG,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAkBhG"}
@@ -4,70 +4,20 @@ export function toRecipeItem(r) {
4
4
  servings: r.servings, total_time_minutes: r.total_time_minutes, status: r.status,
5
5
  };
6
6
  }
7
- // 单菜全貌 detail:基本 + 食材 + 步骤 + 历史统计 + 营养占位(一期只占位,不编数字)。
8
- export function recipeDetail(detail) {
9
- const ingredients = [...detail.ingredients].sort((a, b) => a.sequence - b.sequence).map((g) => ({ ...g }));
10
- const steps = [...detail.steps].sort((a, b) => a.sequence - b.sequence).map((s) => ({ ...s }));
11
- return {
12
- item: {
13
- ...toRecipeItem(detail.recipe),
14
- photo_url: detail.recipe.photo_url,
15
- source: detail.recipe.source,
16
- source_url: detail.recipe.source_url,
17
- created_at: detail.recipe.created_at,
18
- updated_at: detail.recipe.updated_at,
19
- ingredients,
20
- steps,
21
- history: detail.history ?? { count: 0, avgRating: null },
22
- // 营养占位:一期不估算,显式标记未估算,不编数字冒充。
23
- nutrition: { estimated: false, note: '营养估算一期占位(以实际食材称量为准)' },
24
- },
25
- };
26
- }
27
- // 搜菜/筛菜/全部:items + total + kind。
28
- export function buildRecipeSearch(kind, items) {
29
- return { items, total: items.length, kind };
30
- }
31
- // 写菜回执 receipt。
7
+ // 单菜全貌装配 `recipeDetail` 已搬入 `src/view/run.ts`(本域独占;旧址由 `src/render/index.ts` 转出)。
8
+ // 搜菜/筛菜/全部装配 `buildRecipeSearch` 已搬入 `src/search/run.ts`(本域独占;旧址由 `src/render/index.ts` 转出)。
9
+ // 写菜回执 receipt(update/add 两域共用,留守)。
32
10
  export function buildRecipeReceipt(message) {
33
11
  return { ok: true, message };
34
12
  }
35
- // 开做 list:items 为步骤(内联食材)+ total;recipe/份数放大说明/历史提示作扩展字段(list 形只校验 items/total)。
36
- export function buildCookingRun(args) {
37
- const base = args.recipe.servings > 0 ? args.recipe.servings : 2;
38
- const servings = args.servings ?? base;
39
- const factor = Math.round((servings / base) * 100) / 100;
40
- const servingsNote = servings === base
41
- ? '按原份量 ' + base + ' 人份备料'
42
- : '已按 ' + servings + ' 人份放大(原 ' + base + ' 人份,倍率 ' + factor + ',食材用量同倍)';
43
- const h = args.history;
44
- const historyHint = h && h.count > 0
45
- ? '做过 ' + h.count + ' 次' + (h.avgRating !== null && h.avgRating !== undefined ? ',平均评分 ' + h.avgRating : '') + ';本次做完请走 chef.history.record 记录'
46
- : '还没做过;本次做完请走 chef.history.record 记录';
47
- return { items: args.steps, total: args.steps.length, recipe: args.recipe, servingsNote, historyHint, steps: args.steps };
48
- }
13
+ // 开做装配 `buildCookingRun` 已搬入 `src/cook/run.ts`(本域独占;旧址由 `src/render/index.ts` 转出)。
49
14
  // 采购行复用 fetch ShoppingItem(跨菜合并行:name/quantity/unit/recipes),不另建影子类型。
50
- // 跨菜合并采购 list:items(fetch 合并行 name/quantity/unit/recipes)+ total + recipes(+servings/excludeOptional 回显)。
51
- export function buildShopping(args) {
52
- const out = { items: args.items, total: args.items.length, recipes: args.recipes, excludeOptional: args.excludeOptional === true };
53
- if (args.servings !== undefined)
54
- out.servings = args.servings;
55
- return out;
56
- }
57
- // 记做菜回执 receipt。
58
- export function buildHistoryRecord(message) {
59
- return { ok: true, message };
60
- }
15
+ // 跨菜合并采购装配 `buildShopping` 已搬入 `src/shopping/run.ts`(本域独占;旧址由 `src/render/index.ts` 转出).
16
+ // 记做菜回执 `buildHistoryRecord` 已搬入 `src/history/run-record.ts`(本域独占;旧址由 `src/render/index.ts` 转出)。
61
17
  // 查历史统一 list:timeline/stats/quality/backup 全作条目(单 key 单 shape=list)。
62
18
  export function buildHistoryQuery(kind, items) {
63
19
  return { items, total: items.length, kind };
64
20
  }
65
- export function toHistoryItem(h, recipeName) {
66
- const out = { ...h };
67
- if (recipeName !== undefined)
68
- out.recipe_name = recipeName;
69
- return out;
70
- }
71
21
  export function buildHelpItems(all, q) {
72
22
  if (!q || !q.trim())
73
23
  return { items: all, total: all.length };
@@ -1 +1 @@
1
- {"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/render/views.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/render/views.ts"],"names":[],"mappings":"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"}