From dbbaba9fe47e59dbcf70a225a4fb3e6ddb9b80ef Mon Sep 17 00:00:00 2001 From: jableader Date: Tue, 21 Oct 2025 19:06:10 +1100 Subject: [PATCH 01/11] What a hot mess --- cloc.baseline.txt | 29 + code-removal-and-consolodation-spec.md | 197 + coverage/base.css | 224 + coverage/block-navigation.js | 87 + coverage/clover.xml | 4199 +++++++++++++++++ coverage/coverage-final.json | 38 + coverage/favicon.png | Bin 0 -> 445 bytes coverage/index.html | 281 ++ coverage/munch-ease-frontend/index.html | 116 + .../scripts/codegen-check.js.html | 181 + .../munch-ease-frontend/scripts/index.html | 116 + coverage/munch-ease-frontend/src/App.vue.html | 379 ++ .../munch-ease-frontend/src/api/auth.ts.html | 175 + .../src/api/client.ts.html | 145 + .../munch-ease-frontend/src/api/index.html | 146 + .../munch-ease-frontend/src/api/sdk.ts.html | 1102 +++++ .../src/components/ActionItem.vue.html | 205 + .../src/components/AlertToast.vue.html | 355 ++ .../src/components/LoginPage.vue.html | 397 ++ .../src/components/index.html | 146 + .../CompactParsedIngredient.vue.html | 469 ++ .../EditableIngredientsPanel.vue.html | 463 ++ .../ingredients/IngredientLine.vue.html | 313 ++ .../src/components/ingredients/index.html | 146 + .../src/components/meals/DatePicker.vue.html | 418 ++ .../components/meals/EditMealPage.vue.html | 1252 +++++ .../src/components/meals/MealCard.vue.html | 379 ++ .../components/meals/MealPlanPage.vue.html | 514 ++ .../src/components/meals/PersonList.vue.html | 697 +++ .../src/components/meals/index.html | 176 + .../recipes/EditRecipePage.vue.html | 802 ++++ .../components/recipes/RecipeCard.vue.html | 244 + .../recipes/RecipeSearchBox.vue.html | 766 +++ .../components/recipes/RecipesPage.vue.html | 178 + .../src/components/recipes/index.html | 161 + .../shopping/CurrentShoppingListPage.vue.html | 910 ++++ .../shopping/MealSelectionList.vue.html | 574 +++ .../shopping/MyShoppingPage.vue.html | 355 ++ .../PurchasedShoppingListPage.vue.html | 286 ++ .../shopping/ShoppingListItem.vue.html | 742 +++ .../src/components/shopping/index.html | 176 + .../src/composables/index.html | 161 + .../src/composables/useAlert.ts.html | 172 + .../src/composables/useAuth.ts.html | 154 + .../src/composables/usePagination.ts.html | 406 ++ .../src/composables/useShopping.ts.html | 340 ++ .../src/dateformats.ts.html | 130 + .../src/domain/decoders.ts.html | 445 ++ .../munch-ease-frontend/src/domain/index.html | 131 + .../src/domain/pagination.ts.html | 124 + coverage/munch-ease-frontend/src/index.html | 161 + coverage/munch-ease-frontend/src/main.ts.html | 118 + .../src/router/helpers.ts.html | 166 + .../munch-ease-frontend/src/router/index.html | 131 + .../src/router/index.ts.html | 322 ++ .../munch-ease-frontend/src/units.ts.html | 502 ++ .../munch-ease-frontend/vue.config.js.html | 103 + coverage/prettify.css | 1 + coverage/prettify.js | 2 + coverage/sort-arrow-sprite.png | Bin 0 -> 138 bytes coverage/sorter.js | 210 + depcheck.baseline.json | 1 + package-lock.json | 317 +- package.json | 30 +- src/api/sdk.ts | 86 +- src/components/meals/EditMealPage.vue | 19 +- src/components/meals/MealPlanPage.vue | 2 +- src/components/recipes/EditRecipePage.vue | 2 +- .../shopping/CurrentShoppingListPage.vue | 3 +- src/components/shopping/MyShoppingPage.vue | 2 - src/components/shopping/ShoppingListItem.vue | 31 +- src/composables/useMeals.ts | 46 - src/composables/useShopping.ts | 81 +- src/domain/decoders.ts | 43 +- src/domain/types.ts | 7 +- tests/useAlert.test.js | 7 - ts-prune.baseline.txt | 60 + vitest.config.js | 2 +- 78 files changed, 22849 insertions(+), 208 deletions(-) create mode 100644 cloc.baseline.txt create mode 100644 code-removal-and-consolodation-spec.md create mode 100644 coverage/base.css create mode 100644 coverage/block-navigation.js create mode 100644 coverage/clover.xml create mode 100644 coverage/coverage-final.json create mode 100644 coverage/favicon.png create mode 100644 coverage/index.html create mode 100644 coverage/munch-ease-frontend/index.html create mode 100644 coverage/munch-ease-frontend/scripts/codegen-check.js.html create mode 100644 coverage/munch-ease-frontend/scripts/index.html create mode 100644 coverage/munch-ease-frontend/src/App.vue.html create mode 100644 coverage/munch-ease-frontend/src/api/auth.ts.html create mode 100644 coverage/munch-ease-frontend/src/api/client.ts.html create mode 100644 coverage/munch-ease-frontend/src/api/index.html create mode 100644 coverage/munch-ease-frontend/src/api/sdk.ts.html create mode 100644 coverage/munch-ease-frontend/src/components/ActionItem.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/AlertToast.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/LoginPage.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/index.html create mode 100644 coverage/munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/ingredients/IngredientLine.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/ingredients/index.html create mode 100644 coverage/munch-ease-frontend/src/components/meals/DatePicker.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/meals/EditMealPage.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/meals/MealCard.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/meals/MealPlanPage.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/meals/PersonList.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/meals/index.html create mode 100644 coverage/munch-ease-frontend/src/components/recipes/EditRecipePage.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/recipes/RecipeCard.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/recipes/RecipesPage.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/recipes/index.html create mode 100644 coverage/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/shopping/MealSelectionList.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue.html create mode 100644 coverage/munch-ease-frontend/src/components/shopping/index.html create mode 100644 coverage/munch-ease-frontend/src/composables/index.html create mode 100644 coverage/munch-ease-frontend/src/composables/useAlert.ts.html create mode 100644 coverage/munch-ease-frontend/src/composables/useAuth.ts.html create mode 100644 coverage/munch-ease-frontend/src/composables/usePagination.ts.html create mode 100644 coverage/munch-ease-frontend/src/composables/useShopping.ts.html create mode 100644 coverage/munch-ease-frontend/src/dateformats.ts.html create mode 100644 coverage/munch-ease-frontend/src/domain/decoders.ts.html create mode 100644 coverage/munch-ease-frontend/src/domain/index.html create mode 100644 coverage/munch-ease-frontend/src/domain/pagination.ts.html create mode 100644 coverage/munch-ease-frontend/src/index.html create mode 100644 coverage/munch-ease-frontend/src/main.ts.html create mode 100644 coverage/munch-ease-frontend/src/router/helpers.ts.html create mode 100644 coverage/munch-ease-frontend/src/router/index.html create mode 100644 coverage/munch-ease-frontend/src/router/index.ts.html create mode 100644 coverage/munch-ease-frontend/src/units.ts.html create mode 100644 coverage/munch-ease-frontend/vue.config.js.html create mode 100644 coverage/prettify.css create mode 100644 coverage/prettify.js create mode 100644 coverage/sort-arrow-sprite.png create mode 100644 coverage/sorter.js create mode 100644 depcheck.baseline.json delete mode 100644 src/composables/useMeals.ts delete mode 100644 tests/useAlert.test.js create mode 100644 ts-prune.baseline.txt diff --git a/cloc.baseline.txt b/cloc.baseline.txt new file mode 100644 index 0000000..b3858bb --- /dev/null +++ b/cloc.baseline.txt @@ -0,0 +1,29 @@ +github.com/AlDanial/cloc v 2.06 T=23.00 s (1169.6 files/s, 151267.9 lines/s) +--------------------------------------------------------------------------------------- +Language files blank comment code +--------------------------------------------------------------------------------------- +JavaScript 14249 164282 304963 2048804 +TypeScript 3482 28869 152153 297192 +JSON 7353 40 0 207974 +Markdown 1436 61501 538 161358 +YAML 141 668 64 33497 +CSS 107 1365 743 6603 +Vuejs Component 33 389 67 3020 +CoffeeScript 9 363 29 874 +Bourne Shell 4 175 112 831 +Text 25 194 0 821 +Windows Module Definition 5 83 0 451 +HTML 15 26 2 280 +Python 2 51 15 146 +INI 10 34 0 141 +PHP 2 13 20 132 +SVG 19 3 5 122 +AppleScript 2 21 44 116 +make 4 23 4 46 +Bourne Again Shell 2 11 1 43 +Nix 1 1 0 19 +XML 1 0 0 10 +EJS 1 0 0 9 +--------------------------------------------------------------------------------------- +SUM: 26903 258112 458760 2762489 +--------------------------------------------------------------------------------------- diff --git a/code-removal-and-consolodation-spec.md b/code-removal-and-consolodation-spec.md new file mode 100644 index 0000000..1303f77 --- /dev/null +++ b/code-removal-and-consolodation-spec.md @@ -0,0 +1,197 @@ +# Code Removal and Consolidation (LOC Reduction) + +Owner: Engineering +Document: code-removal-and-consolodation-spec.md +Revision: 2.0 +Date: 2025-10-20 + +Purpose +- Reduce lines of code (LOC) in this TS/Vue project (and any Python utilities) without changing behavior. +- Remove dead/duplicate code, collapse pass-through layers, and slim public APIs. + +Success metrics +- [ ] LOC reduced by 10–30% (cloc baseline vs. final). +- [ ] Test coverage ≥ baseline; typecheck/lint clean. +- [ ] Bundle size stable or lower. +- [ ] No regressions in main user flows. + +Current status (2025-10-20) +- Interim verification: typecheck and tests passing locally. +- Consolidations completed in this pass (see checklist 4): + - Shopping request types centralized in sdk. + - UIShoppingListItem removed; grouping works on domain items with refs. + - Meals composable removed; toMealInput moved to decoders; components now import sdk directly. + - decodeLookup moved to decoders and reused. +- Baseline metrics captured (cloc, coverage, build size): + - cloc saved: cloc.baseline.txt + - coverage saved (v8): coverage/ (see summary in terminal output) + - build size: dist size ~1.6M + - ts-prune saved: ts-prune.baseline.txt + - depcheck saved: depcheck.baseline.json + +Status update (2025-10-21) +- Ran ts-prune and depcheck again to guide safe removals. +- Notes: + - ts-prune doesn’t analyze .vue SFC imports, so exports used only by SFCs (e.g., dateformats.ago) appear unused; avoid removing those. + - Completed a safe API shrink: removed unused exports in domain (Maybe, NonNull) and decoders (decodeRecipes) without changing behavior. + - Removed an unused ref in MyShoppingPage.vue. + - depcheck flags core-js as unused; given Vue CLI/babel preset may rely on it for polyfills, defer removal for now. + - depcheck shows some devDependencies as unused but they are required by the Vue CLI toolchain; defer removal. + - Resolved typecheck errors after domain ref opt-in changes: updated ShoppingListItem.vue to remove person ref usage and guard optional ingredient access; TS + vue-tsc + tests pass. + - Verified end-to-end: lint PASS, typecheck PASS, vue-tsc PASS, tests PASS (no regressions). + - Reduced nullability in public SDK APIs where safe: getRecipe/getMeal/markMealConsumed/getCurrentShoppingList now return non-null and throw on errors; updated call sites accordingly. + +Scope +- In: TS/Vue app code, tests, configs, scripts; Python utilities if present. +- Out: New features, architectural rewrites. + +Baseline and tooling (TS/Vue/Python) +- Commands: + - JS/TS LOC: npx cloc . | tee cloc.baseline.txt + - Lint/typecheck: npm run lint && npm run typecheck + - Coverage: npm test -- --coverage + - Unused TS exports: npx ts-prune + - Unused deps: npx depcheck + - Search: rg (ripgrep) + - Bundle size (Vite): npm run build && du -h dist + - Python (if present): vulture . and coverage run -m pytest + +Acceptance +- [ ] Baselines saved (LOC, coverage, bundle size). +- [ ] CI green on main before starting. + +Ordered checklist (actionable) + +1) Baseline snapshot +- [x] Run cloc; store cloc.baseline.txt. +- [x] Run tests with coverage; store coverage report. (added dev dep @vitest/coverage-v8) +- [x] Run npm run build; record dist size. +- [x] Run ts-prune and depcheck; save outputs. + +2) Dead code inventory +- [ ] ts-prune: list unused exports; verify via rg searches. +- [ ] Find unreferenced files: + rg -l "export default|export const|export function" | + while read f; do rg -q "(from|import).*$f" -g "!$f" . || echo "$f"; done +- [ ] depcheck: identify unused deps/scripts. +- [ ] Python (optional): vulture . for unused code. + +3) Delete proven dead code +- [ ] Remove files/symbols with zero references. +- [ ] Delete tests/mocks for removed code. +- [ ] Fix imports; run lint, typecheck, tests, build. + +Acceptance +- [ ] LOC decreased; CI green. + +4) Consolidate duplicated types and logic (repo targets) +- Shopping requests + - [x] Export PurchaseExisting/PurchaseRefs (or a single request builder) from src/api/sdk.ts. + - [x] Reuse in src/composables/useShopping.ts; delete local duplicates. + - [x] Added PurchaseRequest union in SDK to simplify signatures and centralize request typing. +- UIShoppingListItem mapping + - [x] Make itemsToGroups/uniqueMeals accept ShoppingListItemWithRefs. + - [x] Remove UIShoppingListItem and mapItemToUI; update callers. +- Meals composable + - [x] Delete src/composables/useMeals.ts OR keep only toMealInput. + - [x] Move toMealInput to src/domain/decoders.ts if file removed. + - [x] Update components to import sdk directly for API calls. +- Common decoder + - [x] Move decodeLookup() to src/domain/decoders.ts; import in sdk.ts. +- Component-local types + - [ ] Replace ad-hoc component types (e.g., MealCard.vue) with domain types. + - [x] Align ShoppingListItem.vue template/computed logic with domain changes (optional ingredient refs; removed person ref). +- Unused refs + - [x] Remove unused reactive refs/vars (e.g., stray person ref in shopping pages if unused). + +Acceptance +- [ ] Single source for purchase request types/builders. +- [ ] One fewer UI-only item shape in shopping flow. +- [ ] Meals API calls go through sdk; no pass-through wrappers. + +5) Shrink public API surface +- [x] Export only used symbols from domain and sdk modules. +- [ ] Remove unused overloads/params; prefer narrower interfaces. +- [ ] Update re-exports; fix imports accordingly. + - [x] Reduce unnecessary null/undefined on public SDK returns (getRecipe/getMeal/markMealConsumed/getCurrentShoppingList). + +Acceptance +- [ ] ts-prune emits fewer/no unused export warnings. + +6) Simplify control flow and inline pass-throughs +- [x] Inline trivial wrappers where applicable (meals composable removed; components call sdk directly). + - [ ] Prefer guard clauses over nested branches in remaining hotspots (audit pending). +- [ ] Remove speculative extension points not used. +- [ ] Replace small class-style modules with plain functions where LOC decreases. + +Acceptance +- [ ] Complexity lower in touched files; tests unchanged. + +7) Test suite consolidation +- [x] Remove duplicate tests (e.g., .js vs .ts duplicates), fixtures for deleted code. + - Removed tests/useAlert.test.js (duplicate of tests/useAlert.test.ts). +- [ ] Ensure assertions are meaningful; avoid testing implementation details. +- [ ] Keep or improve branch coverage on critical paths. + +Acceptance +- [ ] Coverage ≥ baseline; runtime stable or faster. + +8) Dependency cleanup +- [ ] Remove unused npm deps (depcheck) and scripts. +- [ ] Prefer stdlib/small helpers over heavy libs where equal. +- [ ] npm prune && clean install; verify build. + +Acceptance +- [ ] Smaller dependency graph; no new vulns; CI green. + +9) Docs and examples +- [ ] Update README/ARCHITECTURE and code comments to reflect removals. +- [ ] Document canonical modules replacing duplicates. +- [ ] Add migration notes in CHANGELOG if applicable. + +Acceptance +- [ ] Docs consistent; onboarding simpler. + +10) Final verification +- [ ] Re-run cloc; save cloc.final.txt and LOC delta. +- [ ] Re-run tests with coverage; compare to baseline. +- [ ] Re-run build; record bundle size delta. +- [ ] Sanity test main user flows locally. + +Acceptance +- [ ] All metrics at or better than baseline; no regressions. + +Quick command reference +- LOC: npx cloc . +- Typecheck: npm run typecheck +- Lint: npm run lint +- Tests + coverage: npm test -- --coverage +- Unused TS exports: npx ts-prune +- Unused deps: npx depcheck +- Search: rg -n "" +- Build + size: npm run build && du -h dist + +Exit criteria +- [ ] Target LOC reduction met with stable quality metrics. +- [ ] Duplicates removed; canonical modules in place. +- [ ] No pending deprecations awaiting removal. + +Next actions (clear, actionable) +1) Capture baselines + - [x] Run cloc and save cloc.baseline.txt + - [x] Run tests with coverage and save report summary + - [x] Build app and note dist size + - [x] Run ts-prune and depcheck; save outputs +2) Component type audit + - [ ] Replace any ad-hoc component types with domain types (scan components/*) +3) Unused refs/vars cleanup + - [x] Scan shopping/meals components for unused refs/variables; remove +4) Shrink public API surface + - [x] Use ts-prune results to remove unused exports in domain and sdk + - [ ] Second pass: validate remaining ts-prune hints against .vue usage; prune safely +5) Test suite consolidation + - [x] De-duplicate tests with .js and .ts counterparts (e.g., prefer TypeScript) +6) Dependency cleanup + - [ ] Remove unused npm deps/scripts per depcheck; npm prune; verify build (defer core-js and Vue CLI toolchain deps) +7) Final verification + - [ ] Re-run cloc/tests/build; record deltas vs. baseline; sanity test user flows \ No newline at end of file diff --git a/coverage/base.css b/coverage/base.css new file mode 100644 index 0000000..f418035 --- /dev/null +++ b/coverage/base.css @@ -0,0 +1,224 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* yellow */ +.cbranch-no { background: yellow !important; color: #111; } +/* dark red */ +.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } +.low .chart { border:1px solid #C21F39 } +.highlighted, +.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ + background: #C21F39 !important; +} +/* medium red */ +.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +/* light red */ +.low, .cline-no { background:#FCE1E5 } +/* light green */ +.high, .cline-yes { background:rgb(230,245,208) } +/* medium green */ +.cstat-yes { background:rgb(161,215,106) } +/* dark green */ +.status-line.high, .high .cover-fill { background:rgb(77,146,33) } +.high .chart { border:1px solid rgb(77,146,33) } +/* dark yellow (gold) */ +.status-line.medium, .medium .cover-fill { background: #f9cd0b; } +.medium .chart { border:1px solid #f9cd0b; } +/* light yellow */ +.medium { background: #fff4c2; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + +span.cline-neutral { background: #eaeaea; } + +.coverage-summary td.empty { + opacity: .5; + padding-top: 4px; + padding-bottom: 4px; + line-height: 1; + color: #888; +} + +.cover-fill, .cover-empty { + display:inline-block; + height: 12px; +} +.chart { + line-height: 0; +} +.cover-empty { + background: white; +} +.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; +} +.footer, .push { + height: 48px; +} diff --git a/coverage/block-navigation.js b/coverage/block-navigation.js new file mode 100644 index 0000000..530d1ed --- /dev/null +++ b/coverage/block-navigation.js @@ -0,0 +1,87 @@ +/* eslint-disable */ +var jumpToCode = (function init() { + // Classes of code we would like to highlight in the file view + var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; + + // Elements to highlight in the file listing view + var fileListingElements = ['td.pct.low']; + + // We don't want to select elements that are direct descendants of another match + var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` + + // Selector that finds elements on the page to which we can jump + var selector = + fileListingElements.join(', ') + + ', ' + + notSelector + + missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` + + // The NodeList of matching elements + var missingCoverageElements = document.querySelectorAll(selector); + + var currentIndex; + + function toggleClass(index) { + missingCoverageElements + .item(currentIndex) + .classList.remove('highlighted'); + missingCoverageElements.item(index).classList.add('highlighted'); + } + + function makeCurrent(index) { + toggleClass(index); + currentIndex = index; + missingCoverageElements.item(index).scrollIntoView({ + behavior: 'smooth', + block: 'center', + inline: 'center' + }); + } + + function goToPrevious() { + var nextIndex = 0; + if (typeof currentIndex !== 'number' || currentIndex === 0) { + nextIndex = missingCoverageElements.length - 1; + } else if (missingCoverageElements.length > 1) { + nextIndex = currentIndex - 1; + } + + makeCurrent(nextIndex); + } + + function goToNext() { + var nextIndex = 0; + + if ( + typeof currentIndex === 'number' && + currentIndex < missingCoverageElements.length - 1 + ) { + nextIndex = currentIndex + 1; + } + + makeCurrent(nextIndex); + } + + return function jump(event) { + if ( + document.getElementById('fileSearch') === document.activeElement && + document.activeElement != null + ) { + // if we're currently focused on the search input, we don't want to navigate + return; + } + + switch (event.which) { + case 78: // n + case 74: // j + goToNext(); + break; + case 66: // b + case 75: // k + case 80: // p + goToPrevious(); + break; + } + }; +})(); +window.addEventListener('keydown', jumpToCode); diff --git a/coverage/clover.xml b/coverage/clover.xml new file mode 100644 index 0000000..a983a84 --- /dev/null +++ b/coverage/clover.xml @@ -0,0 +1,4199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json new file mode 100644 index 0000000..856e621 --- /dev/null +++ b/coverage/coverage-final.json @@ -0,0 +1,38 @@ +{"/home/jables/source/doof/munch-ease-frontend/vue.config.js": {"path":"/home/jables/source/doof/munch-ease-frontend/vue.config.js","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":55}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":52}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":54}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":31}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":30}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":2}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":229},"end":{"line":6,"column":2}},"locations":[{"start":{"line":1,"column":229},"end":{"line":6,"column":2}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":229},"end":{"line":6,"column":2}},"loc":{"start":{"line":1,"column":229},"end":{"line":6,"column":2}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/scripts/codegen-check.js": {"path":"/home/jables/source/doof/munch-ease-frontend/scripts/codegen-check.js","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":19}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":3}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":72}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":3}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":35}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":88}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":68}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":0}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":31}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":74}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":17}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":1}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":29}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":80}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":17}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":1}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":0}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":5}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":49}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":46}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":29}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":111}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":19}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":10}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":66}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":3}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":13}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":70}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":17}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":1054},"end":{"line":32,"column":1}},"locations":[{"start":{"line":1,"column":1054},"end":{"line":32,"column":1}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":1054},"end":{"line":32,"column":1}},"loc":{"start":{"line":1,"column":1054},"end":{"line":32,"column":1}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/App.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/App.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":7}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":27}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":20}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":26}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":35}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":31}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":9}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":17}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":22}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":11}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":27}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":20}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":26}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":36}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":31}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":9}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":19}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":22}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":11}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":27}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":20}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":26}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":36}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":31}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":9}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":18}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":22}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":11}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":9}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":8}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":24}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":19}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":8}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":0}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":17}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":11}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":0}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":14}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":52}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":0}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":69}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":9}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":0}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":7}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":6}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":52}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":38}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":37}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":21}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":17}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":19}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":1}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":0}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":53}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":6}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":18}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":10}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":11}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":9}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":13}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":0}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":16}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":32}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":24}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":12}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":13}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":18}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":9}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":14}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":25}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":1}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":0}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":9}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":10}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":1}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":0}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":47}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":8}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":24}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":17}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":21}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":21}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":24}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":1}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":0}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":43}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":25}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":28}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":15}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":1}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":0}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":11}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":20}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":15}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":1}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":98,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":98,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":98,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":98,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/dateformats.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/dateformats.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":52}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":31}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":54}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":1}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":41}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":24}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":45}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":36}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":69}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":81}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":89}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":97}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":34}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":669},"end":{"line":15,"column":1}},"locations":[{"start":{"line":1,"column":669},"end":{"line":15,"column":1}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":669},"end":{"line":15,"column":1}},"loc":{"start":{"line":1,"column":669},"end":{"line":15,"column":1}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/main.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/main.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":31}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":27}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":42}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":40}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":64}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":51}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":26}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":15}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":17}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":323},"end":{"line":11,"column":17}},"locations":[{"start":{"line":1,"column":323},"end":{"line":11,"column":17}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":323},"end":{"line":11,"column":17}},"loc":{"start":{"line":1,"column":323},"end":{"line":11,"column":17}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/units.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/units.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":85}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":52}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":73}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":7}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":11}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":17}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":16}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":0}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":12}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":15}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":16}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":0}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":16}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":17}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":19}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":20}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":4}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":11}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":9}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":13}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":13}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":13}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":22}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":21}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":0}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":20}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":26}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":27}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":0}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":17}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":18}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":0}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":17}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":23}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":24}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":0}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":17}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":22}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":23}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":0}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":16}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":18}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":19}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":0}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":16}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":19}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":20}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":0}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":18}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":21}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":22}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":0}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":16}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":19}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":4}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":10}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":12}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":13}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":11}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":13}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":14}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":27}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":24}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":25}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":23}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":24}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":21}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":23}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":24}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":22}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":23}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":23}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":24}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":25}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":27}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":25}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":26}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":28}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":27}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":30}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":31}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":33}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":34}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":35}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":36}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":4}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":1}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":0}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":67}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":53}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":33}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":1}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":0}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":52}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":39}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":39}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":34}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":3}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":13}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":1}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":0}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":102}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":49}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":0}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":46}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":65}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":0}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":36}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":17}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":52}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":69}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":15}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":3}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":0}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":46}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":22}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":62}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":74}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":15}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":3}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":0}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":13}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":1}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":0}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":57}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":54}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":0}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":68}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":43}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":40}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":93}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":34}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":38}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":67}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":3}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":83}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":1}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":16,"92":16,"93":16,"94":1,"95":7,"96":7,"97":11,"98":11,"99":11,"100":0,"101":0,"102":1,"103":1,"104":9,"105":7,"106":7,"107":9,"108":7,"109":7,"110":7,"111":7,"112":7,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":4,"133":4,"134":4,"135":4,"136":4,"137":1,"138":1},"branchMap":{"0":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":0},"end":{"line":94,"column":1}},"locations":[{"start":{"line":92,"column":0},"end":{"line":94,"column":1}}]},"1":{"type":"branch","line":96,"loc":{"start":{"line":96,"column":0},"end":{"line":102,"column":1}},"locations":[{"start":{"line":96,"column":0},"end":{"line":102,"column":1}}]},"2":{"type":"branch","line":97,"loc":{"start":{"line":97,"column":38},"end":{"line":100,"column":3}},"locations":[{"start":{"line":97,"column":38},"end":{"line":100,"column":3}}]},"3":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":23},"end":{"line":99,"column":34}},"locations":[{"start":{"line":99,"column":23},"end":{"line":99,"column":34}}]},"4":{"type":"branch","line":100,"loc":{"start":{"line":100,"column":2},"end":{"line":102,"column":1}},"locations":[{"start":{"line":100,"column":2},"end":{"line":102,"column":1}}]},"5":{"type":"branch","line":104,"loc":{"start":{"line":104,"column":7},"end":{"line":125,"column":1}},"locations":[{"start":{"line":104,"column":7},"end":{"line":125,"column":1}}]},"6":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":23},"end":{"line":105,"column":49}},"locations":[{"start":{"line":105,"column":23},"end":{"line":105,"column":49}}]},"7":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":48},"end":{"line":108,"column":35}},"locations":[{"start":{"line":105,"column":48},"end":{"line":108,"column":35}}]},"8":{"type":"branch","line":108,"loc":{"start":{"line":108,"column":28},"end":{"line":108,"column":65}},"locations":[{"start":{"line":108,"column":28},"end":{"line":108,"column":65}}]},"9":{"type":"branch","line":108,"loc":{"start":{"line":108,"column":64},"end":{"line":115,"column":3}},"locations":[{"start":{"line":108,"column":64},"end":{"line":115,"column":3}}]},"10":{"type":"branch","line":113,"loc":{"start":{"line":113,"column":68},"end":{"line":115,"column":3}},"locations":[{"start":{"line":113,"column":68},"end":{"line":115,"column":3}}]},"11":{"type":"branch","line":115,"loc":{"start":{"line":115,"column":2},"end":{"line":125,"column":1}},"locations":[{"start":{"line":115,"column":2},"end":{"line":125,"column":1}}]},"12":{"type":"branch","line":130,"loc":{"start":{"line":130,"column":7},"end":{"line":139,"column":1}},"locations":[{"start":{"line":130,"column":7},"end":{"line":139,"column":1}}]},"13":{"type":"branch","line":132,"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":3}},"locations":[{"start":{"line":132,"column":39},"end":{"line":137,"column":3}}]},"14":{"type":"branch","line":133,"loc":{"start":{"line":133,"column":54},"end":{"line":133,"column":93}},"locations":[{"start":{"line":133,"column":54},"end":{"line":133,"column":93}}]},"15":{"type":"branch","line":136,"loc":{"start":{"line":136,"column":31},"end":{"line":136,"column":41}},"locations":[{"start":{"line":136,"column":31},"end":{"line":136,"column":41}}]},"16":{"type":"branch","line":138,"loc":{"start":{"line":138,"column":33},"end":{"line":138,"column":82}},"locations":[{"start":{"line":138,"column":33},"end":{"line":138,"column":82}}]},"17":{"type":"branch","line":138,"loc":{"start":{"line":138,"column":73},"end":{"line":138,"column":80}},"locations":[{"start":{"line":138,"column":73},"end":{"line":138,"column":80}}]}},"b":{"0":[16],"1":[7],"2":[11],"3":[7],"4":[0],"5":[9],"6":[2],"7":[7],"8":[0],"9":[7],"10":[0],"11":[0],"12":[1],"13":[4],"14":[0],"15":[2],"16":[2],"17":[0]},"fnMap":{"0":{"name":"isUnitKey","decl":{"start":{"line":92,"column":0},"end":{"line":94,"column":1}},"loc":{"start":{"line":92,"column":0},"end":{"line":94,"column":1}},"line":92},"1":{"name":"getBaseUnit","decl":{"start":{"line":96,"column":0},"end":{"line":102,"column":1}},"loc":{"start":{"line":96,"column":0},"end":{"line":102,"column":1}},"line":96},"2":{"name":"getConversionFactor","decl":{"start":{"line":104,"column":7},"end":{"line":125,"column":1}},"loc":{"start":{"line":104,"column":7},"end":{"line":125,"column":1}},"line":104},"3":{"name":"calculateTotals","decl":{"start":{"line":130,"column":7},"end":{"line":139,"column":1}},"loc":{"start":{"line":130,"column":7},"end":{"line":139,"column":1}},"line":130}},"f":{"0":16,"1":7,"2":9,"3":1}} +,"/home/jables/source/doof/munch-ease-frontend/src/api/auth.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/api/auth.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":34}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":44}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":36}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":61}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":35}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":7}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":94}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":37}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":33}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":15}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":21}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":3}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":19}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":1}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":0}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":64}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":74}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":25}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":25}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":11}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":38}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":129}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":5}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":3}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":31}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":66}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":19}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":30,"column":-104}},"locations":[{"start":{"line":1,"column":0},"end":{"line":30,"column":-104}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":30,"column":-104}},"loc":{"start":{"line":1,"column":0},"end":{"line":30,"column":-104}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/api/client.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/api/client.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":40}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":36}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":37}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":128}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":117}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":82}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":85}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":81}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":40}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":10}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":60}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":36}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":29}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":14}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":6}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":4}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":20,"15":20,"16":20,"17":20,"18":20,"19":1},"branchMap":{"0":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":106},"end":{"line":5,"column":128}},"locations":[{"start":{"line":5,"column":106},"end":{"line":5,"column":128}}]},"1":{"type":"branch","line":6,"loc":{"start":{"line":6,"column":74},"end":{"line":6,"column":117}},"locations":[{"start":{"line":6,"column":74},"end":{"line":6,"column":117}}]},"2":{"type":"branch","line":10,"loc":{"start":{"line":10,"column":33},"end":{"line":10,"column":81}},"locations":[{"start":{"line":10,"column":33},"end":{"line":10,"column":81}}]},"3":{"type":"branch","line":14,"loc":{"start":{"line":14,"column":9},"end":{"line":19,"column":4}},"locations":[{"start":{"line":14,"column":9},"end":{"line":19,"column":4}}]}},"b":{"0":[0],"1":[0],"2":[0],"3":[20]},"fnMap":{"0":{"name":"fetch","decl":{"start":{"line":14,"column":9},"end":{"line":19,"column":4}},"loc":{"start":{"line":14,"column":9},"end":{"line":19,"column":4}},"line":14}},"f":{"0":20}} +,"/home/jables/source/doof/munch-ease-frontend/src/api/sdk.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/api/sdk.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":34}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":45}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":164}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":13}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":9}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":7}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":13}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":15}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":27}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":25}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":27}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":18}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":23}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":64}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":63}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":42}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":56}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":79}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":1}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":0}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":82}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":61}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":24}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":60}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":26}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":9}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":35}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":29}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":55}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":43}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":47}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":43}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":36}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":131}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":71}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":5}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":107}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":53}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":5}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":115}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":59}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":5}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":121}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":60}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":5}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":65}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":3}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":1}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":0}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":147}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":23}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":0}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":40}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":44}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":52}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":26}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":0}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":62}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":68}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":80}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":0}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":69}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":16}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":44}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":15}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":94}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":31}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":40}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":56}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":44}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":48}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":56}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":7}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":41}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":5}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":3}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":0}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":10}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":52}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":40}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":44}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":26}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":3}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":1}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":0}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":141}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":23}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":0}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":45}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":41}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":41}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":0}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":52}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":40}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":44}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":54}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":0}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":80}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":62}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":68}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":0}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":66}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":30}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":80}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":3}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":0}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":42}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":68}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":64}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":64}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":52}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":40}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":44}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":54}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":3}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":0}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":36}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":52}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":40}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":44}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":54}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":3}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":58}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":56}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":56}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":0}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":15}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":1}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":0}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":130}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":43}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":15}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":50}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":65}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":68}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":3}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":91}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":52}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":70}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":75}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":1}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":0}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":78}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":129}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":52}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":27}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":1}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":0}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":105}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":123}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":52}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":27}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":1}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":0}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":72}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":150}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":52}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":1}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":0}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":72}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":130}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":52}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":27}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":1}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":0}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":80}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":88}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":46}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":4}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":52}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":38}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":1}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":0}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":35}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":73}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":13}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":53}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":101}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":58}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":64}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":25}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":1}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":0}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":10}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":155}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":43}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":15}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":50}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":65}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":68}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":3}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":91}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":52}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":75}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":112}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":1}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":0}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":90}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":22}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":1}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":0}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":99}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":33}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":1}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":0}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":8}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":79}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":77}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":74}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":4}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":52}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":46}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":13}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":30}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":34}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":92}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":1}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":0}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":74}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":123}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":52}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":25}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":1}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":0}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":97}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":59}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":14}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":80}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":53}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":17}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":6}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":54}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":27}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":10}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":85}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":54}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":27}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":3}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":1}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":0}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":87}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":88}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":74}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":4}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":52}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":25}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":1}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":0}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":74}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":75}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":74}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":4}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":52}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":1}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":0}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":11}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":66}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":132}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":52}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":38}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":1}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":0}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":111}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":95}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":16}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":39}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":4}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":52}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":38}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":1}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":0}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":60}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":126}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":52}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":47}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":29}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":1}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":0}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":48}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":77}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":52}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":37}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":1}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":0}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":111}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":141}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":0}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":43}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":59}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":66}},"294":{"start":{"line":295,"column":0},"end":{"line":295,"column":86}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":114}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":89}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":25}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":80}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":9}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":17}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":31}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":47}},"303":{"start":{"line":304,"column":0},"end":{"line":304,"column":39}},"304":{"start":{"line":305,"column":0},"end":{"line":305,"column":35}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":9}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":3}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":0}},"308":{"start":{"line":309,"column":0},"end":{"line":309,"column":37}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":0}},"310":{"start":{"line":311,"column":0},"end":{"line":311,"column":55}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":11}},"312":{"start":{"line":313,"column":0},"end":{"line":313,"column":18}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":22}},"314":{"start":{"line":315,"column":0},"end":{"line":315,"column":10}},"315":{"start":{"line":316,"column":0},"end":{"line":316,"column":3}},"316":{"start":{"line":317,"column":0},"end":{"line":317,"column":72}},"317":{"start":{"line":318,"column":0},"end":{"line":318,"column":9}},"318":{"start":{"line":319,"column":0},"end":{"line":319,"column":39}},"319":{"start":{"line":320,"column":0},"end":{"line":320,"column":4}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":52}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":47}},"322":{"start":{"line":323,"column":0},"end":{"line":323,"column":29}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":1}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":0}},"325":{"start":{"line":326,"column":0},"end":{"line":326,"column":75}},"326":{"start":{"line":327,"column":0},"end":{"line":327,"column":83}},"327":{"start":{"line":328,"column":0},"end":{"line":328,"column":37}},"328":{"start":{"line":329,"column":0},"end":{"line":329,"column":39}},"329":{"start":{"line":330,"column":0},"end":{"line":330,"column":4}},"330":{"start":{"line":331,"column":0},"end":{"line":331,"column":52}},"331":{"start":{"line":332,"column":0},"end":{"line":332,"column":1}},"332":{"start":{"line":333,"column":0},"end":{"line":333,"column":0}},"333":{"start":{"line":334,"column":0},"end":{"line":334,"column":77}},"334":{"start":{"line":335,"column":0},"end":{"line":335,"column":92}},"335":{"start":{"line":336,"column":0},"end":{"line":336,"column":74}},"336":{"start":{"line":337,"column":0},"end":{"line":337,"column":4}},"337":{"start":{"line":338,"column":0},"end":{"line":338,"column":52}},"338":{"start":{"line":339,"column":0},"end":{"line":339,"column":1}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":6,"16":6,"17":6,"18":6,"19":6,"20":1,"21":1,"22":1,"23":1,"24":1,"25":9,"26":9,"27":9,"28":9,"29":9,"30":9,"31":2,"32":2,"33":2,"34":2,"35":2,"36":2,"37":2,"38":2,"39":2,"40":2,"41":2,"42":2,"43":2,"44":2,"45":2,"46":2,"47":2,"48":2,"49":2,"50":2,"51":9,"52":1,"53":1,"54":3,"55":3,"56":3,"57":3,"58":3,"59":3,"60":3,"61":3,"62":3,"63":3,"64":3,"65":3,"66":3,"67":3,"68":3,"69":3,"70":3,"71":3,"72":3,"73":3,"74":3,"75":3,"76":3,"77":3,"78":3,"79":3,"80":3,"81":3,"82":3,"83":3,"84":3,"85":3,"86":3,"87":3,"88":1,"89":1,"90":2,"91":2,"92":2,"93":2,"94":2,"95":2,"96":2,"97":2,"98":2,"99":2,"100":2,"101":2,"102":2,"103":2,"104":2,"105":2,"106":2,"107":1,"108":1,"109":2,"110":2,"111":2,"112":2,"113":2,"114":2,"115":2,"116":2,"117":2,"118":2,"119":2,"120":2,"121":2,"122":2,"123":2,"124":2,"125":2,"126":2,"127":2,"128":2,"129":2,"130":2,"131":2,"132":1,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":1,"146":2,"147":2,"148":2,"149":1,"150":1,"151":1,"152":0,"153":0,"154":0,"155":0,"156":0,"157":1,"158":0,"159":0,"160":0,"161":0,"162":1,"163":2,"164":2,"165":2,"166":1,"167":1,"168":1,"169":2,"170":2,"171":2,"172":2,"173":2,"174":2,"175":2,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":3,"189":3,"190":3,"191":1,"192":1,"193":1,"194":1,"195":3,"196":3,"197":3,"198":3,"199":3,"200":1,"201":2,"202":2,"203":2,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":2,"211":2,"212":2,"213":2,"214":2,"215":2,"216":2,"217":2,"218":2,"219":2,"220":2,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":1,"259":1,"260":0,"261":0,"262":0,"263":0,"264":0,"265":1,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":2,"292":2,"293":2,"294":2,"295":2,"296":2,"297":2,"298":2,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":2,"307":2,"308":2,"309":2,"310":2,"311":2,"312":2,"313":2,"314":2,"315":2,"316":2,"317":2,"318":2,"319":2,"320":2,"321":1,"322":2,"323":2,"324":1,"325":1,"326":1,"327":1,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"338":1},"branchMap":{"0":{"type":"branch","line":16,"loc":{"start":{"line":16,"column":0},"end":{"line":20,"column":1}},"locations":[{"start":{"line":16,"column":0},"end":{"line":20,"column":1}}]},"1":{"type":"branch","line":17,"loc":{"start":{"line":17,"column":30},"end":{"line":17,"column":42}},"locations":[{"start":{"line":17,"column":30},"end":{"line":17,"column":42}}]},"2":{"type":"branch","line":18,"loc":{"start":{"line":18,"column":55},"end":{"line":19,"column":76}},"locations":[{"start":{"line":18,"column":55},"end":{"line":19,"column":76}}]},"3":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":0},"end":{"line":52,"column":1}},"locations":[{"start":{"line":26,"column":0},"end":{"line":52,"column":1}}]},"4":{"type":"branch","line":30,"loc":{"start":{"line":30,"column":29},"end":{"line":30,"column":35}},"locations":[{"start":{"line":30,"column":29},"end":{"line":30,"column":35}}]},"5":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":28},"end":{"line":51,"column":3}},"locations":[{"start":{"line":31,"column":28},"end":{"line":51,"column":3}}]},"6":{"type":"branch","line":32,"loc":{"start":{"line":32,"column":30},"end":{"line":32,"column":55}},"locations":[{"start":{"line":32,"column":30},"end":{"line":32,"column":55}}]},"7":{"type":"branch","line":33,"loc":{"start":{"line":33,"column":24},"end":{"line":33,"column":43}},"locations":[{"start":{"line":33,"column":24},"end":{"line":33,"column":43}}]},"8":{"type":"branch","line":34,"loc":{"start":{"line":34,"column":26},"end":{"line":34,"column":47}},"locations":[{"start":{"line":34,"column":26},"end":{"line":34,"column":47}}]},"9":{"type":"branch","line":35,"loc":{"start":{"line":35,"column":24},"end":{"line":35,"column":43}},"locations":[{"start":{"line":35,"column":24},"end":{"line":35,"column":43}}]},"10":{"type":"branch","line":54,"loc":{"start":{"line":54,"column":7},"end":{"line":88,"column":1}},"locations":[{"start":{"line":54,"column":7},"end":{"line":88,"column":1}}]},"11":{"type":"branch","line":55,"loc":{"start":{"line":55,"column":12},"end":{"line":55,"column":23}},"locations":[{"start":{"line":55,"column":12},"end":{"line":55,"column":23}}]},"12":{"type":"branch","line":70,"loc":{"start":{"line":70,"column":88},"end":{"line":70,"column":94}},"locations":[{"start":{"line":70,"column":88},"end":{"line":70,"column":94}}]},"13":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":12},"end":{"line":73,"column":56}},"locations":[{"start":{"line":73,"column":12},"end":{"line":73,"column":56}}]},"14":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":12},"end":{"line":74,"column":44}},"locations":[{"start":{"line":74,"column":12},"end":{"line":74,"column":44}}]},"15":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":12},"end":{"line":75,"column":48}},"locations":[{"start":{"line":75,"column":12},"end":{"line":75,"column":48}}]},"16":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":8},"end":{"line":83,"column":52}},"locations":[{"start":{"line":83,"column":8},"end":{"line":83,"column":52}}]},"17":{"type":"branch","line":84,"loc":{"start":{"line":84,"column":8},"end":{"line":84,"column":40}},"locations":[{"start":{"line":84,"column":8},"end":{"line":84,"column":40}}]},"18":{"type":"branch","line":85,"loc":{"start":{"line":85,"column":8},"end":{"line":85,"column":44}},"locations":[{"start":{"line":85,"column":8},"end":{"line":85,"column":44}}]},"19":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":7},"end":{"line":132,"column":1}},"locations":[{"start":{"line":90,"column":7},"end":{"line":132,"column":1}}]},"20":{"type":"branch","line":91,"loc":{"start":{"line":91,"column":12},"end":{"line":91,"column":23}},"locations":[{"start":{"line":91,"column":12},"end":{"line":91,"column":23}}]},"21":{"type":"branch","line":107,"loc":{"start":{"line":107,"column":29},"end":{"line":109,"column":3}},"locations":[{"start":{"line":107,"column":29},"end":{"line":109,"column":3}}]},"22":{"type":"branch","line":112,"loc":{"start":{"line":112,"column":46},"end":{"line":112,"column":66}},"locations":[{"start":{"line":112,"column":46},"end":{"line":112,"column":66}}]},"23":{"type":"branch","line":113,"loc":{"start":{"line":113,"column":44},"end":{"line":113,"column":62}},"locations":[{"start":{"line":113,"column":44},"end":{"line":113,"column":62}}]},"24":{"type":"branch","line":114,"loc":{"start":{"line":114,"column":44},"end":{"line":114,"column":62}},"locations":[{"start":{"line":114,"column":44},"end":{"line":114,"column":62}}]},"25":{"type":"branch","line":115,"loc":{"start":{"line":115,"column":8},"end":{"line":115,"column":52}},"locations":[{"start":{"line":115,"column":8},"end":{"line":115,"column":52}}]},"26":{"type":"branch","line":116,"loc":{"start":{"line":116,"column":8},"end":{"line":116,"column":40}},"locations":[{"start":{"line":116,"column":8},"end":{"line":116,"column":40}}]},"27":{"type":"branch","line":117,"loc":{"start":{"line":117,"column":8},"end":{"line":117,"column":44}},"locations":[{"start":{"line":117,"column":8},"end":{"line":117,"column":44}}]},"28":{"type":"branch","line":118,"loc":{"start":{"line":118,"column":8},"end":{"line":118,"column":54}},"locations":[{"start":{"line":118,"column":8},"end":{"line":118,"column":54}}]},"29":{"type":"branch","line":122,"loc":{"start":{"line":122,"column":8},"end":{"line":122,"column":52}},"locations":[{"start":{"line":122,"column":8},"end":{"line":122,"column":52}}]},"30":{"type":"branch","line":123,"loc":{"start":{"line":123,"column":8},"end":{"line":123,"column":40}},"locations":[{"start":{"line":123,"column":8},"end":{"line":123,"column":40}}]},"31":{"type":"branch","line":124,"loc":{"start":{"line":124,"column":8},"end":{"line":124,"column":44}},"locations":[{"start":{"line":124,"column":8},"end":{"line":124,"column":44}}]},"32":{"type":"branch","line":125,"loc":{"start":{"line":125,"column":8},"end":{"line":125,"column":54}},"locations":[{"start":{"line":125,"column":8},"end":{"line":125,"column":54}}]},"33":{"type":"branch","line":127,"loc":{"start":{"line":127,"column":24},"end":{"line":127,"column":50}},"locations":[{"start":{"line":127,"column":24},"end":{"line":127,"column":50}}]},"34":{"type":"branch","line":128,"loc":{"start":{"line":128,"column":24},"end":{"line":128,"column":48}},"locations":[{"start":{"line":128,"column":24},"end":{"line":128,"column":48}}]},"35":{"type":"branch","line":129,"loc":{"start":{"line":129,"column":24},"end":{"line":129,"column":48}},"locations":[{"start":{"line":129,"column":24},"end":{"line":129,"column":48}}]},"36":{"type":"branch","line":147,"loc":{"start":{"line":147,"column":0},"end":{"line":151,"column":1}},"locations":[{"start":{"line":147,"column":0},"end":{"line":151,"column":1}}]},"37":{"type":"branch","line":149,"loc":{"start":{"line":149,"column":20},"end":{"line":151,"column":1}},"locations":[{"start":{"line":149,"column":20},"end":{"line":151,"column":1}}]},"38":{"type":"branch","line":164,"loc":{"start":{"line":164,"column":0},"end":{"line":168,"column":1}},"locations":[{"start":{"line":164,"column":0},"end":{"line":168,"column":1}}]},"39":{"type":"branch","line":166,"loc":{"start":{"line":166,"column":20},"end":{"line":168,"column":1}},"locations":[{"start":{"line":166,"column":20},"end":{"line":168,"column":1}}]},"40":{"type":"branch","line":170,"loc":{"start":{"line":170,"column":0},"end":{"line":176,"column":1}},"locations":[{"start":{"line":170,"column":0},"end":{"line":176,"column":1}}]},"41":{"type":"branch","line":174,"loc":{"start":{"line":174,"column":20},"end":{"line":175,"column":37}},"locations":[{"start":{"line":174,"column":20},"end":{"line":175,"column":37}}]},"42":{"type":"branch","line":175,"loc":{"start":{"line":175,"column":27},"end":{"line":175,"column":37}},"locations":[{"start":{"line":175,"column":27},"end":{"line":175,"column":37}}]},"43":{"type":"branch","line":178,"loc":{"start":{"line":178,"column":0},"end":{"line":186,"column":1}},"locations":[{"start":{"line":178,"column":0},"end":{"line":186,"column":1}}]},"44":{"type":"branch","line":184,"loc":{"start":{"line":184,"column":24},"end":{"line":184,"column":64}},"locations":[{"start":{"line":184,"column":24},"end":{"line":184,"column":64}}]},"45":{"type":"branch","line":185,"loc":{"start":{"line":185,"column":13},"end":{"line":185,"column":25}},"locations":[{"start":{"line":185,"column":13},"end":{"line":185,"column":25}}]},"46":{"type":"branch","line":189,"loc":{"start":{"line":189,"column":0},"end":{"line":200,"column":1}},"locations":[{"start":{"line":189,"column":0},"end":{"line":200,"column":1}}]},"47":{"type":"branch","line":191,"loc":{"start":{"line":191,"column":14},"end":{"line":195,"column":3}},"locations":[{"start":{"line":191,"column":14},"end":{"line":195,"column":3}}]},"48":{"type":"branch","line":193,"loc":{"start":{"line":193,"column":37},"end":{"line":193,"column":65}},"locations":[{"start":{"line":193,"column":37},"end":{"line":193,"column":65}}]},"49":{"type":"branch","line":194,"loc":{"start":{"line":194,"column":42},"end":{"line":194,"column":68}},"locations":[{"start":{"line":194,"column":42},"end":{"line":194,"column":68}}]},"50":{"type":"branch","line":197,"loc":{"start":{"line":197,"column":20},"end":{"line":197,"column":52}},"locations":[{"start":{"line":197,"column":20},"end":{"line":197,"column":52}}]},"51":{"type":"branch","line":197,"loc":{"start":{"line":197,"column":51},"end":{"line":198,"column":62}},"locations":[{"start":{"line":197,"column":51},"end":{"line":198,"column":62}}]},"52":{"type":"branch","line":198,"loc":{"start":{"line":198,"column":57},"end":{"line":198,"column":75}},"locations":[{"start":{"line":198,"column":57},"end":{"line":198,"column":75}}]},"53":{"type":"branch","line":199,"loc":{"start":{"line":199,"column":103},"end":{"line":199,"column":111}},"locations":[{"start":{"line":199,"column":103},"end":{"line":199,"column":111}}]},"54":{"type":"branch","line":202,"loc":{"start":{"line":202,"column":0},"end":{"line":204,"column":1}},"locations":[{"start":{"line":202,"column":0},"end":{"line":204,"column":1}}]},"55":{"type":"branch","line":206,"loc":{"start":{"line":206,"column":0},"end":{"line":208,"column":1}},"locations":[{"start":{"line":206,"column":0},"end":{"line":208,"column":1}}]},"56":{"type":"branch","line":211,"loc":{"start":{"line":211,"column":0},"end":{"line":221,"column":1}},"locations":[{"start":{"line":211,"column":0},"end":{"line":221,"column":1}}]},"57":{"type":"branch","line":215,"loc":{"start":{"line":215,"column":20},"end":{"line":216,"column":44}},"locations":[{"start":{"line":215,"column":20},"end":{"line":216,"column":44}}]},"58":{"type":"branch","line":216,"loc":{"start":{"line":216,"column":37},"end":{"line":216,"column":46}},"locations":[{"start":{"line":216,"column":37},"end":{"line":216,"column":46}}]},"59":{"type":"branch","line":218,"loc":{"start":{"line":218,"column":9},"end":{"line":218,"column":29}},"locations":[{"start":{"line":218,"column":9},"end":{"line":218,"column":29}}]},"60":{"type":"branch","line":219,"loc":{"start":{"line":219,"column":12},"end":{"line":219,"column":33}},"locations":[{"start":{"line":219,"column":12},"end":{"line":219,"column":33}}]},"61":{"type":"branch","line":220,"loc":{"start":{"line":220,"column":10},"end":{"line":220,"column":91}},"locations":[{"start":{"line":220,"column":10},"end":{"line":220,"column":91}}]},"62":{"type":"branch","line":220,"loc":{"start":{"line":220,"column":47},"end":{"line":220,"column":58}},"locations":[{"start":{"line":220,"column":47},"end":{"line":220,"column":58}}]},"63":{"type":"branch","line":220,"loc":{"start":{"line":220,"column":83},"end":{"line":220,"column":91}},"locations":[{"start":{"line":220,"column":83},"end":{"line":220,"column":91}}]},"64":{"type":"branch","line":223,"loc":{"start":{"line":223,"column":0},"end":{"line":227,"column":1}},"locations":[{"start":{"line":223,"column":0},"end":{"line":227,"column":1}}]},"65":{"type":"branch","line":225,"loc":{"start":{"line":225,"column":20},"end":{"line":225,"column":52}},"locations":[{"start":{"line":225,"column":20},"end":{"line":225,"column":52}}]},"66":{"type":"branch","line":245,"loc":{"start":{"line":245,"column":0},"end":{"line":251,"column":1}},"locations":[{"start":{"line":245,"column":0},"end":{"line":251,"column":1}}]},"67":{"type":"branch","line":249,"loc":{"start":{"line":249,"column":20},"end":{"line":249,"column":52}},"locations":[{"start":{"line":249,"column":20},"end":{"line":249,"column":52}}]},"68":{"type":"branch","line":276,"loc":{"start":{"line":276,"column":0},"end":{"line":281,"column":1}},"locations":[{"start":{"line":276,"column":0},"end":{"line":281,"column":1}}]},"69":{"type":"branch","line":278,"loc":{"start":{"line":278,"column":20},"end":{"line":278,"column":52}},"locations":[{"start":{"line":278,"column":20},"end":{"line":278,"column":52}}]},"70":{"type":"branch","line":280,"loc":{"start":{"line":280,"column":17},"end":{"line":280,"column":29}},"locations":[{"start":{"line":280,"column":17},"end":{"line":280,"column":29}}]},"71":{"type":"branch","line":283,"loc":{"start":{"line":283,"column":0},"end":{"line":287,"column":1}},"locations":[{"start":{"line":283,"column":0},"end":{"line":287,"column":1}}]},"72":{"type":"branch","line":285,"loc":{"start":{"line":285,"column":20},"end":{"line":285,"column":52}},"locations":[{"start":{"line":285,"column":20},"end":{"line":285,"column":52}}]},"73":{"type":"branch","line":292,"loc":{"start":{"line":292,"column":0},"end":{"line":324,"column":1}},"locations":[{"start":{"line":292,"column":0},"end":{"line":324,"column":1}}]},"74":{"type":"branch","line":295,"loc":{"start":{"line":295,"column":75},"end":{"line":295,"column":86}},"locations":[{"start":{"line":295,"column":75},"end":{"line":295,"column":86}}]},"75":{"type":"branch","line":309,"loc":{"start":{"line":309,"column":26},"end":{"line":309,"column":37}},"locations":[{"start":{"line":309,"column":26},"end":{"line":309,"column":37}}]},"76":{"type":"branch","line":321,"loc":{"start":{"line":321,"column":20},"end":{"line":323,"column":25}},"locations":[{"start":{"line":321,"column":20},"end":{"line":323,"column":25}}]},"77":{"type":"branch","line":323,"loc":{"start":{"line":323,"column":17},"end":{"line":323,"column":29}},"locations":[{"start":{"line":323,"column":17},"end":{"line":323,"column":29}}]},"78":{"type":"branch","line":297,"loc":{"start":{"line":297,"column":83},"end":{"line":306,"column":9}},"locations":[{"start":{"line":297,"column":83},"end":{"line":306,"column":9}}]},"79":{"type":"branch","line":299,"loc":{"start":{"line":299,"column":79},"end":{"line":306,"column":9}},"locations":[{"start":{"line":299,"column":79},"end":{"line":306,"column":9}}]},"80":{"type":"branch","line":326,"loc":{"start":{"line":326,"column":0},"end":{"line":332,"column":1}},"locations":[{"start":{"line":326,"column":0},"end":{"line":332,"column":1}}]},"81":{"type":"branch","line":331,"loc":{"start":{"line":331,"column":20},"end":{"line":331,"column":52}},"locations":[{"start":{"line":331,"column":20},"end":{"line":331,"column":52}}]},"82":{"type":"branch","line":334,"loc":{"start":{"line":334,"column":0},"end":{"line":339,"column":1}},"locations":[{"start":{"line":334,"column":0},"end":{"line":339,"column":1}}]},"83":{"type":"branch","line":338,"loc":{"start":{"line":338,"column":20},"end":{"line":338,"column":52}},"locations":[{"start":{"line":338,"column":20},"end":{"line":338,"column":52}}]}},"b":{"0":[6],"1":[0],"2":[0],"3":[9],"4":[0],"5":[2],"6":[0],"7":[0],"8":[0],"9":[0],"10":[3],"11":[0],"12":[0],"13":[1],"14":[1],"15":[1],"16":[1],"17":[1],"18":[1],"19":[2],"20":[0],"21":[1],"22":[0],"23":[1],"24":[1],"25":[1],"26":[1],"27":[1],"28":[1],"29":[1],"30":[1],"31":[1],"32":[1],"33":[0],"34":[0],"35":[0],"36":[2],"37":[1],"38":[2],"39":[1],"40":[2],"41":[1],"42":[0],"43":[1],"44":[0],"45":[0],"46":[3],"47":[1],"48":[0],"49":[0],"50":[1],"51":[2],"52":[0],"53":[2],"54":[2],"55":[1],"56":[2],"57":[1],"58":[0],"59":[2],"60":[2],"61":[1],"62":[0],"63":[0],"64":[1],"65":[0],"66":[1],"67":[0],"68":[1],"69":[0],"70":[0],"71":[1],"72":[0],"73":[2],"74":[0],"75":[0],"76":[1],"77":[0],"78":[2],"79":[0],"80":[1],"81":[0],"82":[1],"83":[0]},"fnMap":{"0":{"name":"httpError","decl":{"start":{"line":16,"column":0},"end":{"line":20,"column":1}},"loc":{"start":{"line":16,"column":0},"end":{"line":20,"column":1}},"line":16},"1":{"name":"attachItemRefs","decl":{"start":{"line":26,"column":0},"end":{"line":52,"column":1}},"loc":{"start":{"line":26,"column":0},"end":{"line":52,"column":1}},"line":26},"2":{"name":"mapPurchasedShoppingList","decl":{"start":{"line":54,"column":7},"end":{"line":88,"column":1}},"loc":{"start":{"line":54,"column":7},"end":{"line":88,"column":1}},"line":54},"3":{"name":"mapCurrentShoppingList","decl":{"start":{"line":90,"column":7},"end":{"line":132,"column":1}},"loc":{"start":{"line":90,"column":7},"end":{"line":132,"column":1}},"line":90},"4":{"name":"listRecipes","decl":{"start":{"line":134,"column":0},"end":{"line":145,"column":1}},"loc":{"start":{"line":134,"column":0},"end":{"line":145,"column":1}},"line":134},"5":{"name":"getRecipe","decl":{"start":{"line":147,"column":0},"end":{"line":151,"column":1}},"loc":{"start":{"line":147,"column":0},"end":{"line":151,"column":1}},"line":147},"6":{"name":"saveRecipe","decl":{"start":{"line":153,"column":0},"end":{"line":157,"column":1}},"loc":{"start":{"line":153,"column":0},"end":{"line":157,"column":1}},"line":153},"7":{"name":"deleteRecipe","decl":{"start":{"line":159,"column":0},"end":{"line":162,"column":1}},"loc":{"start":{"line":159,"column":0},"end":{"line":162,"column":1}},"line":159},"8":{"name":"parseRecipe","decl":{"start":{"line":164,"column":0},"end":{"line":168,"column":1}},"loc":{"start":{"line":164,"column":0},"end":{"line":168,"column":1}},"line":164},"9":{"name":"parseIngredients","decl":{"start":{"line":170,"column":0},"end":{"line":176,"column":1}},"loc":{"start":{"line":170,"column":0},"end":{"line":176,"column":1}},"line":170},"10":{"name":"parseProduct","decl":{"start":{"line":178,"column":0},"end":{"line":186,"column":1}},"loc":{"start":{"line":178,"column":0},"end":{"line":186,"column":1}},"line":178},"11":{"name":"listPersons","decl":{"start":{"line":189,"column":0},"end":{"line":200,"column":1}},"loc":{"start":{"line":189,"column":0},"end":{"line":200,"column":1}},"line":189},"12":{"name":"getPersonsInHome","decl":{"start":{"line":202,"column":0},"end":{"line":204,"column":1}},"loc":{"start":{"line":202,"column":0},"end":{"line":204,"column":1}},"line":202},"13":{"name":"searchPersons","decl":{"start":{"line":206,"column":0},"end":{"line":208,"column":1}},"loc":{"start":{"line":206,"column":0},"end":{"line":208,"column":1}},"line":206},"14":{"name":"getUpcomingMeals","decl":{"start":{"line":211,"column":0},"end":{"line":221,"column":1}},"loc":{"start":{"line":211,"column":0},"end":{"line":221,"column":1}},"line":211},"15":{"name":"getMeal","decl":{"start":{"line":223,"column":0},"end":{"line":227,"column":1}},"loc":{"start":{"line":223,"column":0},"end":{"line":227,"column":1}},"line":223},"16":{"name":"saveMeal","decl":{"start":{"line":229,"column":0},"end":{"line":243,"column":1}},"loc":{"start":{"line":229,"column":0},"end":{"line":243,"column":1}},"line":229},"17":{"name":"markMealConsumed","decl":{"start":{"line":245,"column":0},"end":{"line":251,"column":1}},"loc":{"start":{"line":245,"column":0},"end":{"line":251,"column":1}},"line":245},"18":{"name":"deleteMeal","decl":{"start":{"line":253,"column":0},"end":{"line":258,"column":1}},"loc":{"start":{"line":253,"column":0},"end":{"line":258,"column":1}},"line":253},"19":{"name":"getMyShoppingList","decl":{"start":{"line":261,"column":0},"end":{"line":265,"column":1}},"loc":{"start":{"line":261,"column":0},"end":{"line":265,"column":1}},"line":261},"20":{"name":"saveMyShoppingList","decl":{"start":{"line":267,"column":0},"end":{"line":274,"column":1}},"loc":{"start":{"line":267,"column":0},"end":{"line":274,"column":1}},"line":267},"21":{"name":"getShoppingList","decl":{"start":{"line":276,"column":0},"end":{"line":281,"column":1}},"loc":{"start":{"line":276,"column":0},"end":{"line":281,"column":1}},"line":276},"22":{"name":"getCurrentShoppingList","decl":{"start":{"line":283,"column":0},"end":{"line":287,"column":1}},"loc":{"start":{"line":283,"column":0},"end":{"line":287,"column":1}},"line":283},"23":{"name":"purchaseShoppingList","decl":{"start":{"line":292,"column":0},"end":{"line":324,"column":1}},"loc":{"start":{"line":292,"column":0},"end":{"line":324,"column":1}},"line":292},"24":{"name":"requestMeal","decl":{"start":{"line":326,"column":0},"end":{"line":332,"column":1}},"loc":{"start":{"line":326,"column":0},"end":{"line":332,"column":1}},"line":326},"25":{"name":"unrequestMeal","decl":{"start":{"line":334,"column":0},"end":{"line":339,"column":1}},"loc":{"start":{"line":334,"column":0},"end":{"line":339,"column":1}},"line":334}},"f":{"0":6,"1":9,"2":3,"3":2,"4":0,"5":2,"6":0,"7":0,"8":2,"9":2,"10":1,"11":3,"12":2,"13":1,"14":2,"15":1,"16":0,"17":1,"18":0,"19":0,"20":0,"21":1,"22":1,"23":2,"24":1,"25":1}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/ActionItem.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/ActionItem.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":20}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":30}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":26}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":10}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":20}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":20}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":7}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":8}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":8}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":11}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":0}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":14}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":35}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":13}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":42}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":42}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":2}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":9}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":0}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":14}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":5}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":14}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":15}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":1}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":0}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":7}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":24}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":25}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":21}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":16}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":22}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":14}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":18}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":1}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":0}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":13}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":25}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":1}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":40,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":40,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":40,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":40,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/AlertToast.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/AlertToast.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":6}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":28}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":20}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":3}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":8}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":17}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":17}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":5}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":35}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":26}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":21}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":11}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":25}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":21}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":10}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":10}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":8}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":11}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":0}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":14}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":37}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":49}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":0}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":20}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":80}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":84}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":78}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":1}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":0}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":58}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":0}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":49}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":60}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":60}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":54}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":99}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":0}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":20}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":9}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":1}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":0}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":6}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":27}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":11}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":37}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":3}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":1}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":9}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":0}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":14}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":52}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":108}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":0}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":8}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":18}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":14}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":13}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":16}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":22}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":15}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":21}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":15}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":42}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":19}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":1}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":0}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":12}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":13}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":14}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":20}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":0}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":25}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":20}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":1}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":0}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":14}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":28}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":1}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":0}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":16}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":28}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":1}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":0}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":13}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":28}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":1}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":90,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":90,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":90,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":90,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/LoginPage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/LoginPage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":21}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":23}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":29}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":9}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":42}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":33}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":7}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":15}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":23}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":33}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":34}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":9}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":27}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":17}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":11}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":9}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":8}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":11}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":0}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":24}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":36}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":38}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":44}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":46}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":44}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":0}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":27}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":43}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":2}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":0}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":26}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":33}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":0}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":23}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":39}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":28}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":2}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":0}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":48}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":52}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":24}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":31}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":10}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":3}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":23}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":1}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":9}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":0}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":14}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":37}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":4}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":24}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":13}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":1}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":0}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":69}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":0}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":15}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":16}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":18}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":26}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":1}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":0}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":49}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":0}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":8}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":15}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":16}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":21}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":15}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":19}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":0}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":51}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":16}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":26}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":22}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":0}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":68}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":42}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":1}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":0}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":56}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":0}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":26}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":28}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":15}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":1}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":0}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":26}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":28}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":15}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":1}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":0}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":26}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":28}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":15}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":1}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":0}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":26}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":28}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":15}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":1}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":104,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":104,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":104,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":104,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":42}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":65}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":8}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":34}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":11}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":38}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":51}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":9}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":37}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":15}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":11}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":34}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":47}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":9}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":34}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":15}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":50}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":11}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":34}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":47}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":9}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":34}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":22}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":11}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":42}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":50}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":7}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":10}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":42}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":43}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":27}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":9}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":43}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":14}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":31}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":19}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":25}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":26}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":37}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":33}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":35}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":13}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":11}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":11}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":12}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":10}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":38}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":28}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":25}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":24}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":33}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":13}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":8}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":8}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":11}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":0}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":14}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":30}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":90}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":86}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":0}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":27}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":47}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":2}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":0}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":33}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":24}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":72}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":47}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":8}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":1}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":9}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":0}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":14}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":24}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":13}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":16}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":24}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":19}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":1}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":0}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":16}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":17}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":20}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":32}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":20}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":1}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":0}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":24}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":13}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":24}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":1}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":0}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":28}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":23}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":15}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":22}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":1}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":0}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":33}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":13}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":15}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":13}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":14}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":1}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":0}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":21}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":10}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":1}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":0}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":11}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":14}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":1}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":0}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":7}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":15}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":1}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":0}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":7}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":15}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":1}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":0}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":15}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":16}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":1}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":128,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":128,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":128,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":128,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":11}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":20}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":29}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":5}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":10}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":20}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":12}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":20}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":13}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":11}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":22}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":28}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":5}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":27}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":12}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":24}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":14}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":20}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":13}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":19}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":12}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":22}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":23}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":14}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":20}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":13}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":13}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":8}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":9}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":41}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":25}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":7}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":28}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":37}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":28}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":38}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":51}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":50}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":14}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":14}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":57}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":16}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":26}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":26}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":13}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":19}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":14}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":20}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":64}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":14}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":11}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":9}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":8}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":11}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":0}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":14}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":25}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":58}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":49}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":67}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":76}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":76}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":71}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":71}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":0}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":27}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":47}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":46}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":2}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":87}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":0}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":44}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":0}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":56}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":62}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":70}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":1}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":0}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":51}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":55}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":61}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":1}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":0}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":26}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":32}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":35}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":1}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":9}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":0}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":14}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":7}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":13}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":14}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":1}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":0}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":4}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":13}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":1}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":0}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":4}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":19}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":1}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":0}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":10}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":16}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":22}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":33}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":14}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":1}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":0}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":13}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":25}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":21}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":15}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":1}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":0}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":18}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":10}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":12}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":20}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":1}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":126,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":126,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":126,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":126,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/IngredientLine.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/IngredientLine.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":31}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":7}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":12}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":32}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":41}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":39}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":32}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":7}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":12}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":30}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":29}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":34}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":40}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":40}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":33}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":7}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":8}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":30}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":40}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":60}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":8}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":8}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":11}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":24}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":32}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":67}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":48}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":0}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":55}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":26}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":73}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":72}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":4}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":0}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":64}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":69}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":0}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":6}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":25}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":22}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":52}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":58}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":4}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":16}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":1}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":0}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":29}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":54}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":69}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":3}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":1}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":0}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":30}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":81}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":68}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":3}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":1}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":9}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":0}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":14}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":7}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":12}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":20}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":32}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":30}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":14}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":17}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":1}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":0}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":21}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":14}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":20}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":1}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":76,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":76,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":76,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":76,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/meals/DatePicker.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/meals/DatePicker.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":27}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":10}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":28}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":17}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":33}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":36}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":36}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":5}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":8}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":27}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":34}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":5}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":10}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":11}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":38}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":22}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":38}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":9}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":30}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":13}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":11}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":10}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":8}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":11}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":0}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":24}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":42}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":0}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":44}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":70}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":0}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":40}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":99}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":50}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":1}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":44}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":56}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":33}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":0}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":6}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":19}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":16}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":56}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":3}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":1}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":0}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":37}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":26}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":27}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":32}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":29}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":34}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":18}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":3}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":15}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":2}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":0}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":33}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":38}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":30}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":29}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":1}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":9}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":0}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":14}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":14}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":21}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":1}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":0}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":20}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":14}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":15}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":25}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":21}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":18}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":16}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":1}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":0}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":23}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":21}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":12}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":14}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":15}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":25}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":25}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":43}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":16}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":1}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":0}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":26}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":24}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":12}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":13}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":1}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":0}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":26}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":15}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":18}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":32}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":1}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":0}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":32}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":25}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":1}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":0}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":37}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":22}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":1}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":111,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":111,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":111,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":111,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/meals/EditMealPage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/meals/EditMealPage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":25}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":18}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":48}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":35}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":8}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":32}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":17}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":20}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":30}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":58}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":52}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":10}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":11}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":20}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":34}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":62}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":56}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":16}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":20}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":32}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":60}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":54}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":10}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":19}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":12}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":10}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":25}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":22}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":37}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":11}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":44}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":61}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":9}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":14}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":36}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":32}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":11}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":35}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":57}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":16}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":0}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":32}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":20}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":45}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":29}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":23}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":15}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":46}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":16}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":0}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":18}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":29}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":46}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":51}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":13}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":18}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":36}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":78}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":13}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":18}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":28}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":42}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":15}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":20}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":19}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":33}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":47}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":13}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":18}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":28}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":28}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":15}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":21}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":16}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":0}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":49}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":16}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":17}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":66}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":36}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":40}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":15}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":68}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":19}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":17}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":16}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":13}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":11}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":18}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":52}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":12}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":26}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":59}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":12}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":10}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":29}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":45}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":33}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":44}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":31}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":37}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":48}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":49}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":8}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":10}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":0}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":32}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":10}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":13}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":32}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":53}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":8}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":8}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":11}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":0}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":24}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":45}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":48}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":56}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":47}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":40}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":49}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":47}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":74}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":0}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":35}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":0}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":70}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":60}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":41}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":82}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":41}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":80}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":96}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":71}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":0}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":82}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":23}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":48}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":25}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":5}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":1}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":0}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":24}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":26}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":38}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":0}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":50}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":0}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":29}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":11}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":30}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":23}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":23}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":16}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":25}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":14}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":18}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":16}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":2}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":0}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":27}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":44}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":22}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":40}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":21}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":39}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":9}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":12}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":40}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":19}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":31}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":35}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":33}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":9}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":5}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":2}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":0}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":33}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":29}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":1}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":0}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":47}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":8}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":16}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":140}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":9}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":7}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":67}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":5}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":1}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":0}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":26}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":193}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":1}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":0}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":51}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":81}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":1}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":0}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":78}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":100}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":1}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":0}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":56}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":61}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":1}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":0}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":53}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":44}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":1}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":0}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":62}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":40}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":40}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":18}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":0}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":22}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":53}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":57}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":0}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":40}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":59}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":9}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":5}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":0}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":89}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":1}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":0}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":62}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":56}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":23}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":12}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":77}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":5}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":1}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":0}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":53}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":75}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":50}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":64}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":30}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":29}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":5}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":24}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":16}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":1}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":0}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":51}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":52}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":49}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":27}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":16}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":17}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":66}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":9}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":6}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":1}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":0}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":29}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":51}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":33}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":34}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":41}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":97}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":14}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":5}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":0}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":15}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":37}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":59}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":22}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":6}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":1}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":9}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":0}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":14}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":10}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":15}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":16}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":1}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":0}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":15}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":21}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":21}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":1}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":0}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":17}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":14}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":24}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":1}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":0}},"294":{"start":{"line":295,"column":0},"end":{"line":295,"column":17}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":26}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":23}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":1}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":0}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":12}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":21}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":1}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":0}},"303":{"start":{"line":304,"column":0},"end":{"line":304,"column":4}},"304":{"start":{"line":305,"column":0},"end":{"line":305,"column":26}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":14}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":15}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":1}},"308":{"start":{"line":309,"column":0},"end":{"line":309,"column":0}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":4}},"310":{"start":{"line":311,"column":0},"end":{"line":311,"column":26}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":1}},"312":{"start":{"line":313,"column":0},"end":{"line":313,"column":0}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":19}},"314":{"start":{"line":315,"column":0},"end":{"line":315,"column":18}},"315":{"start":{"line":316,"column":0},"end":{"line":316,"column":35}},"316":{"start":{"line":317,"column":0},"end":{"line":317,"column":24}},"317":{"start":{"line":318,"column":0},"end":{"line":318,"column":1}},"318":{"start":{"line":319,"column":0},"end":{"line":319,"column":0}},"319":{"start":{"line":320,"column":0},"end":{"line":320,"column":15}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":18}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":35}},"322":{"start":{"line":323,"column":0},"end":{"line":323,"column":24}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":1}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":0}},"325":{"start":{"line":326,"column":0},"end":{"line":326,"column":21}},"326":{"start":{"line":327,"column":0},"end":{"line":327,"column":12}},"327":{"start":{"line":328,"column":0},"end":{"line":328,"column":14}},"328":{"start":{"line":329,"column":0},"end":{"line":329,"column":22}},"329":{"start":{"line":330,"column":0},"end":{"line":330,"column":1}},"330":{"start":{"line":331,"column":0},"end":{"line":331,"column":0}},"331":{"start":{"line":332,"column":0},"end":{"line":332,"column":28}},"332":{"start":{"line":333,"column":0},"end":{"line":333,"column":21}},"333":{"start":{"line":334,"column":0},"end":{"line":334,"column":1}},"334":{"start":{"line":335,"column":0},"end":{"line":335,"column":0}},"335":{"start":{"line":336,"column":0},"end":{"line":336,"column":28}},"336":{"start":{"line":337,"column":0},"end":{"line":337,"column":14}},"337":{"start":{"line":338,"column":0},"end":{"line":338,"column":1}},"338":{"start":{"line":339,"column":0},"end":{"line":339,"column":0}},"339":{"start":{"line":340,"column":0},"end":{"line":340,"column":14}},"340":{"start":{"line":341,"column":0},"end":{"line":341,"column":12}},"341":{"start":{"line":342,"column":0},"end":{"line":342,"column":1}},"342":{"start":{"line":343,"column":0},"end":{"line":343,"column":0}},"343":{"start":{"line":344,"column":0},"end":{"line":344,"column":11}},"344":{"start":{"line":345,"column":0},"end":{"line":345,"column":26}},"345":{"start":{"line":346,"column":0},"end":{"line":346,"column":22}},"346":{"start":{"line":347,"column":0},"end":{"line":347,"column":1}},"347":{"start":{"line":348,"column":0},"end":{"line":348,"column":0}},"348":{"start":{"line":349,"column":0},"end":{"line":349,"column":17}},"349":{"start":{"line":350,"column":0},"end":{"line":350,"column":15}},"350":{"start":{"line":351,"column":0},"end":{"line":351,"column":17}},"351":{"start":{"line":352,"column":0},"end":{"line":352,"column":34}},"352":{"start":{"line":353,"column":0},"end":{"line":353,"column":23}},"353":{"start":{"line":354,"column":0},"end":{"line":354,"column":21}},"354":{"start":{"line":355,"column":0},"end":{"line":355,"column":23}},"355":{"start":{"line":356,"column":0},"end":{"line":356,"column":1}},"356":{"start":{"line":357,"column":0},"end":{"line":357,"column":0}},"357":{"start":{"line":358,"column":0},"end":{"line":358,"column":14}},"358":{"start":{"line":359,"column":0},"end":{"line":359,"column":21}},"359":{"start":{"line":360,"column":0},"end":{"line":360,"column":17}},"360":{"start":{"line":361,"column":0},"end":{"line":361,"column":20}},"361":{"start":{"line":362,"column":0},"end":{"line":362,"column":23}},"362":{"start":{"line":363,"column":0},"end":{"line":363,"column":19}},"363":{"start":{"line":364,"column":0},"end":{"line":364,"column":1}},"364":{"start":{"line":365,"column":0},"end":{"line":365,"column":0}},"365":{"start":{"line":366,"column":0},"end":{"line":366,"column":20}},"366":{"start":{"line":367,"column":0},"end":{"line":367,"column":45}},"367":{"start":{"line":368,"column":0},"end":{"line":368,"column":22}},"368":{"start":{"line":369,"column":0},"end":{"line":369,"column":1}},"369":{"start":{"line":370,"column":0},"end":{"line":370,"column":0}},"370":{"start":{"line":371,"column":0},"end":{"line":371,"column":27}},"371":{"start":{"line":372,"column":0},"end":{"line":372,"column":18}},"372":{"start":{"line":373,"column":0},"end":{"line":373,"column":1}},"373":{"start":{"line":374,"column":0},"end":{"line":374,"column":0}},"374":{"start":{"line":375,"column":0},"end":{"line":375,"column":33}},"375":{"start":{"line":376,"column":0},"end":{"line":376,"column":20}},"376":{"start":{"line":377,"column":0},"end":{"line":377,"column":27}},"377":{"start":{"line":378,"column":0},"end":{"line":378,"column":19}},"378":{"start":{"line":379,"column":0},"end":{"line":379,"column":23}},"379":{"start":{"line":380,"column":0},"end":{"line":380,"column":1}},"380":{"start":{"line":381,"column":0},"end":{"line":381,"column":0}},"381":{"start":{"line":382,"column":0},"end":{"line":382,"column":39}},"382":{"start":{"line":383,"column":0},"end":{"line":383,"column":27}},"383":{"start":{"line":384,"column":0},"end":{"line":384,"column":1}},"384":{"start":{"line":385,"column":0},"end":{"line":385,"column":0}},"385":{"start":{"line":386,"column":0},"end":{"line":386,"column":41}},"386":{"start":{"line":387,"column":0},"end":{"line":387,"column":22}},"387":{"start":{"line":388,"column":0},"end":{"line":388,"column":1}},"388":{"start":{"line":389,"column":0},"end":{"line":389,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":389,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":389,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":389,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":389,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealCard.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealCard.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":25}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":28}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":8}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":47}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":9}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":7}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":15}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":11}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":43}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":22}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":7}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":64}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":13}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":54}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":8}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":7}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":9}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":11}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":51}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":26}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":7}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":72}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":13}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":58}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":8}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":32}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":44}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":8}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":8}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":11}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":0}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":24}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":30}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":35}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":42}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":46}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":34}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":13}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":28}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":17}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":21}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":24}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":33}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":28}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":1}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":0}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":43}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":0}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":64}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":18}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":25}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":15}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":25}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":20}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":12}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":17}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":3}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":1}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":0}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":38}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":24}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":11}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":15}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":11}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":20}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":11}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":40}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":12}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":69}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":3}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":1}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":0}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":27}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":26}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":96}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":8}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":1}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":0}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":32}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":107}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":1}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":0}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":34}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":42}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":50}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":70}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":64}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":0}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":85}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":75}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":26}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":2}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":9}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":0}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":15}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":98,"column":15}},"locations":[{"start":{"line":1,"column":0},"end":{"line":98,"column":15}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":98,"column":15}},"loc":{"start":{"line":1,"column":0},"end":{"line":98,"column":15}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealPlanPage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealPlanPage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":7}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":7}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":25}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":24}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":5}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":9}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":29}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":7}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":34}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":15}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":32}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":68}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":9}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":69}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":17}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":0}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":11}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":37}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":25}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":9}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":14}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":24}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":30}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":47}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":35}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":13}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":23}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":26}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":15}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":61}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":14}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":14}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":28}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":41}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":23}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":15}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":13}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":11}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":9}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":30}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":31}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":10}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":16}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":23}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":23}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":47}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":6}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":8}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":11}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":0}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":14}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":40}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":52}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":54}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":74}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":84}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":80}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":78}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":0}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":23}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":15}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":0}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":21}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":28}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":0}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":21}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":30}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":0}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":27}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":48}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":2}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":0}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":37}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":33}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":41}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":73}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":27}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":1}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":0}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":31}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":33}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":47}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":73}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":1}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":9}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":0}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":14}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":4}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":24}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":1}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":0}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":15}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":13}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":1}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":0}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":17}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":18}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":25}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":15}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":32}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":17}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":12}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":1}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":0}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":21}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":13}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":14}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":1}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":0}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":18}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":21}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":13}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":25}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":21}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":16}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":1}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":0}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":12}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":12}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":13}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":1}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":0}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":13}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":17}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":25}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":1}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":0}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":19}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":25}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":1}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":0}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":15}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":17}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":24}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":14}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":14}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":18}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":19}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":22}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":1}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":143,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":143,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":143,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":143,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/meals/PersonList.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/meals/PersonList.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":28}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":9}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":30}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":22}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":5}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":13}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":43}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":37}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":7}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":25}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":15}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":11}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":10}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":13}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":30}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":40}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":38}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":7}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":9}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":15}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":12}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":14}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":29}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":28}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":32}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":43}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":38}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":7}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":9}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":53}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":28}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":31}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":7}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":11}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":41}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":26}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":9}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":17}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":44}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":42}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":11}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":29}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":19}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":13}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":11}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":11}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":9}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":11}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":0}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":24}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":32}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":41}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":44}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":86}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":26}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":41}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":44}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":4}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":0}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":33}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":26}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":39}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":0}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":33}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":58}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":57}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":0}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":38}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":35}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":11}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":28}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":10}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":3}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":37}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":79}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":54}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":71}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":1}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":0}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":37}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":50}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":35}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":3}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":16}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":25}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":28}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":32}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":10}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":3}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":54}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":30}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":3}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":23}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":26}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":30}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":1}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":0}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":39}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":31}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":1}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":0}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":11}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":31}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":29}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":2}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":0}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":38}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":11}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":14}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":31}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":3}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":2}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":0}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":61}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":22}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":51}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":43}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":44}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":45}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":3}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":2}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":9}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":0}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":14}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":14}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":24}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":21}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":19}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":13}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":12}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":1}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":0}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":35}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":16}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":19}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":15}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":13}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":12}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":1}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":0}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":49}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":16}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":24}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":14}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":15}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":20}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":21}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":21}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":19}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":1}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":0}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":61}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":80}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":22}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":18}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":21}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":31}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":1}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":0}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":31}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":29}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":29}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":23}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":15}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":15}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":21}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":9}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":12}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":10}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":11}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":1}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":0}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":13}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":31}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":1}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":0}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":19}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":18}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":22}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":15}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":26}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":1}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":0}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":18}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":21}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":26}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":25}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":43}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":24}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":13}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":12}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":19}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":21}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":16}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":1}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":0}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":21}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":15}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":18}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":18}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":19}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":1}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":204,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":204,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":204,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":204,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/recipes/EditRecipePage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/recipes/EditRecipePage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":7}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":31}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":12}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":22}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":27}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":19}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":36}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":12}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":33}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":13}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":15}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":41}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":27}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":15}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":10}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":0}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":29}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":29}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":10}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":0}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":40}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":10}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":28}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":31}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":30}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":8}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":10}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":14}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":31}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":29}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":21}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":9}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":11}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":59}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":12}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":31}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":21}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":7}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":30}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":46}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":11}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":26}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":33}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":41}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":25}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":31}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":37}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":48}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":8}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":0}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":11}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":15}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":26}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":28}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":31}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":9}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":16}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":17}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":15}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":28}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":29}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":9}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":45}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":17}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":12}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":10}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":8}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":11}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":0}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":24}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":53}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":48}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":49}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":51}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":112}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":92}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":85}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":0}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":27}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":60}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":2}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":0}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":26}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":24}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":38}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":0}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":59}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":31}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":45}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":0}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":38}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":44}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":31}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":26}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":12}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":145}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":5}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":3}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":13}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":2}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":0}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":22}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":67}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":17}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":1}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":0}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":32}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":49}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":31}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":33}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":20}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":30}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":10}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":26}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":43}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":20}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":27}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":10}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":23}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":3}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":1}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":0}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":84}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":27}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":45}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":106}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":1}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":0}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":51}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":27}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":45}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":87}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":1}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":0}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":29}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":86}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":31}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":98}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":39}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":10}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":3}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":112}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":1}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":0}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":30}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":18}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":11}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":26}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":20}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":13}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":20}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":18}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":14}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":28}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":21}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":3}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":1}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":0}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":26}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":27}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":45}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":165}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":67}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":1}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":0}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":31}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":64}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":29}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":42}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":27}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":3}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":1}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":0}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":17}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":17}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":2}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":0}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":58}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":6}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":24}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":15}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":43}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":17}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":25}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":21}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":5}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":3}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":1}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":0}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":76}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":54}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":10}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":13}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":17}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":17}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":21}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":33}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":37}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":41}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":41}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":31}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":35}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":23}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":37}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":33}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":3}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":1}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":9}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":0}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":14}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":7}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":12}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":32}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":19}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":1}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":0}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":19}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":13}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":1}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":0}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":18}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":19}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":19}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":16}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":25}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":1}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":0}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":19}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":14}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":20}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":20}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":1}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":0}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":14}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":17}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":24}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":1}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":239,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":239,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":239,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":239,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipeCard.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipeCard.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":27}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":7}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":10}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":58}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":49}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":7}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":10}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":14}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":26}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":7}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":8}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":27}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":23}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":8}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":8}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":11}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":0}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":24}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":47}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":66}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":0}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":41}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":75}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":9}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":0}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":14}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":14}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":16}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":22}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":33}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":19}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":19}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":12}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":1}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":0}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":16}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":17}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":20}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":1}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":0}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":8}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":17}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":13}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":14}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":20}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":1}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":0}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":14}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":10}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":15}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":1}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":53,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":53,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":53,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":53,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":6}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":29}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":26}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":3}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":10}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":26}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":17}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":36}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":27}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":23}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":5}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":7}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":28}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":22}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":5}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":38}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":11}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":35}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":26}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":24}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":43}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":9}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":42}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":13}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":11}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":41}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":23}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":9}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":17}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":29}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":35}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":41}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":11}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":16}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":19}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":17}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":29}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":35}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":41}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":11}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":16}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":19}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":13}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":17}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":9}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":14}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":21}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":7}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":24}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":11}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":9}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":8}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":11}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":0}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":24}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":59}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":39}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":44}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":49}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":59}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":41}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":0}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":69}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":33}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":2}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":70}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":0}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":59}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":26}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":48}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":4}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":0}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":26}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":19}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":150}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":21}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":42}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":12}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":50}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":30}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":30}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":32}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":5}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":4}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":14}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":1}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":97}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":0}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":59}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":0}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":59}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":0}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":6}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":13}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":15}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":18}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":24}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":46}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":12}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":5}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":44}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":35}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":40}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":16}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":7}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":11}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":3}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":1}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":0}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":25}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":7}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":39}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":11}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":73}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":11}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":103}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":25}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":3}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":1}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":0}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":27}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":31}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":7}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":24}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":11}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":107}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":25}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":3}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":1}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":0}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":27}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":31}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":7}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":24}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":11}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":111}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":25}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":3}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":1}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":0}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":46}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":65}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":1}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":0}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":43}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":31}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":23}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":20}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":1}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":0}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":18}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":23}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":9}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":1}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":0}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":23}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":51}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":9}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":1}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":0}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":23}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":42}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":2}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":9}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":0}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":14}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":20}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":21}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":1}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":0}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":26}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":26}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":15}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":25}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":21}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":18}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":16}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":1}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":0}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":30}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":21}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":12}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":14}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":15}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":25}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":25}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":43}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":16}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":0}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":24}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":12}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":13}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":19}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":21}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":1}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":0}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":33}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":15}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":18}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":32}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":1}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":0}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":44}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":22}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":1}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":0}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":39}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":25}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":1}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":0}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":37}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":16}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":33}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":11}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":1}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":0}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":41}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":13}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":1}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":0}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":37}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":15}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":14}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":1}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":227,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":227,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":227,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":227,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipesPage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipesPage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":7}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":22}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":42}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":37}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":6}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":16}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":28}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":24}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":26}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":6}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":8}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":11}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":24}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":38}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":52}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":51}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":44}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":0}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":80}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":0}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":26}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":48}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":33}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":1}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":0}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":24}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":29}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":1}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":9}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":31,"column":9}},"locations":[{"start":{"line":1,"column":0},"end":{"line":31,"column":9}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":31,"column":9}},"loc":{"start":{"line":1,"column":0},"end":{"line":31,"column":9}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":29}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":25}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":22}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":28}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":27}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":33}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":37}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":4}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":33}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":7}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":44}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":28}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":24}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":46}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":34}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":5}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":62}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":9}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":7}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":49}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":31}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":8}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":0}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":32}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":52}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":11}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":31}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":36}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":5}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":24}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":13}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":11}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":12}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":35}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":5}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":24}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":13}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":0}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":64}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":30}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":26}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":32}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":31}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":37}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":41}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":8}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":0}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":30}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":37}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":11}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":45}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":31}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":9}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":65}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":13}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":11}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":10}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":8}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":0}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":6}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":26}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":18}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":3}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":6}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":8}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":0}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":147}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":6}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":26}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":26}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":3}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":36}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":64}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":8}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":14}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":41}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":8}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":0}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":30}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":33}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":35}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":13}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":15}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":0}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":37}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":37}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":17}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":15}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":0}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":37}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":34}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":14}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":15}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":10}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":8}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":11}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":0}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":24}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":50}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":38}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":49}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":55}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":44}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":54}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":43}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":55}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":53}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":0}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":82}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":86}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":75}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":0}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":26}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":38}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":119}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":0}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":23}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":15}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":21}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":28}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":0}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":41}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":86}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":37}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":33}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":32}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":0}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":45}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":37}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":70}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":88}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":14}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":1}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":0}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":103}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":99}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":94}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":39}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":85}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":60}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":39}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":37}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":4}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":29}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":33}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":130}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":2}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":129}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":0}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":27}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":56}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":53}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":1}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":0}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":51}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":28}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":18}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":1}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":0}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":53}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":30}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":18}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":1}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":0}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":28}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":57}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":16}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":63}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":10}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":3}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":21}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":18}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":1}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":0}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":32}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":59}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":34}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":64}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":10}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":3}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":21}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":41}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":1}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":0}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":36}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":69}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":45}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":38}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":1}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":0}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":34}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":57}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":1}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":0}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":33}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":62}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":53}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":35}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":1}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":0}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":35}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":67}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":46}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":15}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":1}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":0}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":23}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":9}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":0}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":14}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":21}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":13}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":1}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":0}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":24}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":24}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":0}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":26}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":23}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":21}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":1}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":0}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":35}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":18}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":26}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":1}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":0}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":33}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":28}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":21}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":1}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":0}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":17}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":18}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":12}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":10}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":11}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":15}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":28}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":29}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":1}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":0}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":19}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":12}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":19}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":21}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":1}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":0}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":15}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":61}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":16}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":1}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":0}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":22}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":10}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":15}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":25}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":23}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":28}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":18}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":1}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":0}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":12}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":13}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":14}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":1}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":0}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":9}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":15}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":1}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":275,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":275,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":275,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":275,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MealSelectionList.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MealSelectionList.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":6}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":7}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":27}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":20}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":5}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":78}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":83}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":12}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":23}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":34}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":30}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":34}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":7}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":12}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":30}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":38}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":7}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":44}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":14}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":9}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":7}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":11}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":24}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":42}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":0}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":116}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":107}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":0}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":97}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":26}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":47}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":49}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":4}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":28}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":34}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":19}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":11}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":17}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":11}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":17}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":11}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":17}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":12}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":17}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":3}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":1}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":0}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":0}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":43}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":22}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":28}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":86}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":1}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":0}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":39}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":63}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":21}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":36}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":39}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":43}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":22}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":7}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":5}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":3}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":0}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":61}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":30}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":53}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":34}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":40}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":40}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":5}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":3}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":13}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":1}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":0}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":45}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":31}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":28}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":21}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":10}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":162}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":3}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":1}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":0}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":41}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":29}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":62}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":36}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":55}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":19}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":49}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":36}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":1}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":0}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":39}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":52}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":1}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":9}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":0}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":14}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":4}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":13}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":1}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":0}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":4}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":24}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":24}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":25}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":23}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":21}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":16}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":19}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":21}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":1}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":0}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":71}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":24}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":16}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":1}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":0}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":7}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":24}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":23}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":54}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":45}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":32}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":23}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":12}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":22}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":18}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":17}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":1}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":0}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":40}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":28}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":30}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":1}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":0}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":41}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":22}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":1}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":0}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":56}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":13}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":14}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":15}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":20}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":1}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":0}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":49}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":7}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":16}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":26}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":22}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":20}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":20}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":1}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":163,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":163,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":163,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":163,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":7}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":29}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":43}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":24}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":18}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":31}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":32}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":29}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":35}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":46}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":29}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":6}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":8}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":6}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":19}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":40}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":32}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":45}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":44}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":31}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":64}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":69}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":50}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":84}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":54}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":19}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":18}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":19}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":22}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":34}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":30}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":46}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":51}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":25}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":61}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":7}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":11}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":0}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":24}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":40}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":38}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":47}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":55}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":48}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":92}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":0}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":26}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":30}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":63}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":0}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":63}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":41}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":0}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":49}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":103}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":59}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":1}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":0}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":26}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":23}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":95}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":25}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":3}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":1}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":0}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":51}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":71}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":1}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":0}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":81}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":108}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":1}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":0}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":51}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":43}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":71}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":1}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":0}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":27}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":28}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":47}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":18}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":28}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":2}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":9}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":0}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":22}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":90,"column":22}},"locations":[{"start":{"line":1,"column":0},"end":{"line":90,"column":22}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":90,"column":22}},"loc":{"start":{"line":1,"column":0},"end":{"line":90,"column":22}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":89}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":39}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":27}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":24}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":30}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":28}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":6}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":8}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":0}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":33}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":7}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":35}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":27}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":5}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":66}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":9}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":7}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":11}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":0}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":24}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":50}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":37}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":35}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":55}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":47}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":54}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":42}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":55}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":57}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":0}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":24}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":64}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":84}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":82}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":75}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":0}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":27}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":42}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":20}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":50}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":3}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":2}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":0}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":33}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":62}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":53}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":35}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":1}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":9}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":0}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":14}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":24}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":24}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":0}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":25}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":23}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":21}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":1}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":0}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":21}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":13}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":1}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":67,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":67,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":67,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":67,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":129}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":8}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":21}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":27}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":5}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":33}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":25}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":16}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":12}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":98}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":55}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":56}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":118}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":15}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":15}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":61}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":24}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":11}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":40}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":83}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":17}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":15}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":39}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":40}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":56}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":16}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":11}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":8}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":34}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":23}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":7}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":31}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":13}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":45}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":26}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":9}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":42}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":37}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":98}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":36}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":17}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":42}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":97}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":65}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":32}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":28}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":15}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":62}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":40}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":73}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":34}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":32}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":33}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":18}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":20}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":28}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":17}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":40}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":44}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":62}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":40}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":73}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":34}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":32}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":33}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":18}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":20}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":28}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":17}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":15}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":10}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":37}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":53}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":13}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":46}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":26}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":9}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":42}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":37}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":98}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":36}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":17}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":42}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":97}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":65}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":32}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":28}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":15}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":68}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":40}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":73}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":34}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":32}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":33}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":18}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":20}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":28}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":17}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":40}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":44}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":61}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":39}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":73}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":34}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":32}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":33}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":18}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":20}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":28}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":17}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":15}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":10}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":10}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":8}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":11}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":0}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":24}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":30}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":35}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":41}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":54}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":0}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":61}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":0}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":87}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":33}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":55}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":71}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":3}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":20}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":2}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":0}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":46}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":18}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":66}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":41}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":52}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":7}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":3}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":1}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":0}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":109}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":0}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":109}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":0}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":38}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":100}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":46}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":63}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":90}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":73}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":10}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":2}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":0}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":45}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":22}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":18}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":1}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":0}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":43}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":36}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":47}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":43}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":28}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":1}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":9}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":0}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":14}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":85}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":0}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":21}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":21}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":16}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":33}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":22}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":15}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":1}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":0}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":16}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":17}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":18}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":20}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":1}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":0}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":18}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":15}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":19}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":1}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":0}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":9}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":12}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":1}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":0}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":15}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":14}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":21}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":24}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":20}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":21}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":22}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":0}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":21}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":22}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":21}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":15}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":20}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":16}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":1}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":0}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":21}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":26}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":1}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":0}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":23}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":34}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":1}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":219,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":219,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":219,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":219,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/composables/useAlert.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/composables/useAlert.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":25}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":0}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":45}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":81}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":45}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":66}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":58}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":0}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":38}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":49}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":1}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":0}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":18}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":22}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":1}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":0}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":41}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":40}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":28}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":32}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":11}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":20}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":8}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":1}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":0}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":28}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":54}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":1}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":2,"10":2,"11":2,"12":1,"13":2,"14":2,"15":2,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":2,"28":2},"branchMap":{"0":{"type":"branch","line":10,"loc":{"start":{"line":10,"column":0},"end":{"line":12,"column":1}},"locations":[{"start":{"line":10,"column":0},"end":{"line":12,"column":1}}]},"1":{"type":"branch","line":14,"loc":{"start":{"line":14,"column":0},"end":{"line":16,"column":1}},"locations":[{"start":{"line":14,"column":0},"end":{"line":16,"column":1}}]},"2":{"type":"branch","line":18,"loc":{"start":{"line":18,"column":0},"end":{"line":25,"column":1}},"locations":[{"start":{"line":18,"column":0},"end":{"line":25,"column":1}}]},"3":{"type":"branch","line":19,"loc":{"start":{"line":19,"column":17},"end":{"line":19,"column":40}},"locations":[{"start":{"line":19,"column":17},"end":{"line":19,"column":40}}]},"4":{"type":"branch","line":20,"loc":{"start":{"line":20,"column":22},"end":{"line":20,"column":28}},"locations":[{"start":{"line":20,"column":22},"end":{"line":20,"column":28}}]},"5":{"type":"branch","line":21,"loc":{"start":{"line":21,"column":25},"end":{"line":24,"column":5}},"locations":[{"start":{"line":21,"column":25},"end":{"line":24,"column":5}}]},"6":{"type":"branch","line":27,"loc":{"start":{"line":27,"column":7},"end":{"line":29,"column":1}},"locations":[{"start":{"line":27,"column":7},"end":{"line":29,"column":1}}]}},"b":{"0":[2],"1":[2],"2":[1],"3":[0],"4":[0],"5":[1],"6":[2]},"fnMap":{"0":{"name":"show","decl":{"start":{"line":10,"column":0},"end":{"line":12,"column":1}},"loc":{"start":{"line":10,"column":0},"end":{"line":12,"column":1}},"line":10},"1":{"name":"clear","decl":{"start":{"line":14,"column":0},"end":{"line":16,"column":1}},"loc":{"start":{"line":14,"column":0},"end":{"line":16,"column":1}},"line":14},"2":{"name":"scheduleAutoDismiss","decl":{"start":{"line":18,"column":0},"end":{"line":25,"column":1}},"loc":{"start":{"line":18,"column":0},"end":{"line":25,"column":1}},"line":18},"3":{"name":"useAlert","decl":{"start":{"line":27,"column":7},"end":{"line":29,"column":1}},"loc":{"start":{"line":27,"column":7},"end":{"line":29,"column":1}},"line":27}},"f":{"0":2,"1":2,"2":1,"3":2}} +,"/home/jables/source/doof/munch-ease-frontend/src/composables/useAuth.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/composables/useAuth.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":25}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":77}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":44}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":37}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":23}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":34}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":21}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":39}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":22}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":3}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":19}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":1}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":47}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":39}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":19}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":1}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":0}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":27}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":34}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":535},"end":{"line":23,"column":1}},"locations":[{"start":{"line":1,"column":535},"end":{"line":23,"column":1}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":535},"end":{"line":23,"column":1}},"loc":{"start":{"line":1,"column":535},"end":{"line":23,"column":1}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/composables/usePagination.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/composables/usePagination.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":64}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":47}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":93}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":69}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":33}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":28}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":33}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":4}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":17}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":26}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":26}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":27}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":23}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":21}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":50}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":31}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":31}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":19}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":3}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":47}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":30}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":3}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":43}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":59}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":59}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":60}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":51}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":48}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":0}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":36}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":44}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":0}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":42}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":34}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":34}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":34}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":36}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":3}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":0}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":52}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":24}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":22}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":91}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":45}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":31}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":9}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":44}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":51}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":68}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":42}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":26}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":17}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":21}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":22}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":23}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":23}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":24}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":15}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":27}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":5}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":3}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":0}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":56}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":23}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":24}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":22}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":9}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":34}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":32}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":15}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":7}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":63}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":42}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":26}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":17}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":21}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":22}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":23}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":23}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":24}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":15}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":27}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":5}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":3}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":0}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":29}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":36}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":3}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":0}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":29}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":36}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":3}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":0}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":20}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":20}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":21}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":21}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":22}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":25}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":22}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":29}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":3}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":0}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":86}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":3038},"end":{"line":107,"column":1}},"locations":[{"start":{"line":1,"column":3038},"end":{"line":107,"column":1}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":3038},"end":{"line":107,"column":1}},"loc":{"start":{"line":1,"column":3038},"end":{"line":107,"column":1}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/composables/useShopping.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/composables/useShopping.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":77}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":113}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":103}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":48}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":76}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":54}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":1}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":84}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":102}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":111}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":20}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":27}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":16}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":6}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":6}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":3}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":35}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":1}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":87}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":79}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":61}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":41}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":35}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":71}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":19}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":73}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":26}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":43}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":32}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":9}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":7}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":40}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":12}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":46}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":43}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":19}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":45}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":23}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":15}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":32}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":9}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":7}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":40}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":5}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":3}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":93}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":1}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":0}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":31}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":96}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":92}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":10}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":55}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":41}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":51}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":33}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":37}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":45}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":47}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":25}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":15}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":14}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":47}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":95}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":52}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":109}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":9}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":16}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":23}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":31}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":49}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":41}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":37}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":9}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":8}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":37}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":44}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":6}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":3}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":3224},"end":{"line":85,"column":1}},"locations":[{"start":{"line":1,"column":3224},"end":{"line":85,"column":1}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":3224},"end":{"line":85,"column":1}},"loc":{"start":{"line":1,"column":3224},"end":{"line":85,"column":1}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/domain/decoders.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/domain/decoders.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":150}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":45}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":78}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":56}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":60}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":1}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":81}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":40}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":46}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":33}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":37}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":28}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":38}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":39}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":65}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":26}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":37}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":33}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":43}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":3}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":12}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":1}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":78}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":21}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":10}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":9}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":39}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":37}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":3}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":1}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":0}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":79}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":37}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":73}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":1}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":0}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":72}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":21}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":43}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":83}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":8}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":2}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":10}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":9}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":43}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":41}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":41}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":12}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":25}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":33}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":29}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":47}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":3}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":1}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":0}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":120}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":22}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":10}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":10}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":55}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":3}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":1}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":0}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":118}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":21}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":54}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":17}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":1}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":0}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":119}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":37}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":87}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":1}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":0}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":130}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":21}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":10}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":9}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":39}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":3}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":1}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":0}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":131}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":37}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":93}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":1}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":0}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":118}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":21}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":40}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":87}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":10}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":12}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":39}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":32}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":3}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":1}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":0}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":89}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":52}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":10}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":16}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":100}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":77}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":77}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":22}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":26}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":30}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":39}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":23}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":27}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":27}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":19}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":8}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":44}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":3}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":1}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":44,"5":44,"6":44,"7":1,"8":1,"9":1,"10":16,"11":16,"12":16,"13":16,"14":7,"15":7,"16":7,"17":7,"18":7,"19":7,"20":7,"21":7,"22":7,"23":7,"24":1,"25":1,"26":4,"27":4,"28":4,"29":4,"30":4,"31":4,"32":4,"33":1,"34":1,"35":0,"36":0,"37":0,"38":1,"39":1,"40":9,"41":9,"42":2,"43":7,"44":9,"45":9,"46":9,"47":9,"48":9,"49":9,"50":9,"51":9,"52":9,"53":9,"54":9,"55":9,"56":9,"57":1,"58":1,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":1,"66":1,"67":3,"68":3,"69":3,"70":3,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":3,"79":3,"80":3,"81":3,"82":3,"83":3,"84":1,"85":1,"86":12,"87":12,"88":12,"89":1,"90":1,"91":4,"92":4,"93":4,"94":4,"95":4,"96":4,"97":4,"98":4,"99":4,"100":1,"101":1,"102":1,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0},"branchMap":{"0":{"type":"branch","line":4,"loc":{"start":{"line":4,"column":7},"end":{"line":7,"column":1}},"locations":[{"start":{"line":4,"column":7},"end":{"line":7,"column":1}}]},"1":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":16},"end":{"line":5,"column":45}},"locations":[{"start":{"line":5,"column":16},"end":{"line":5,"column":45}}]},"2":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":45},"end":{"line":5,"column":56}},"locations":[{"start":{"line":5,"column":45},"end":{"line":5,"column":56}}]},"3":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":52},"end":{"line":6,"column":55}},"locations":[{"start":{"line":5,"column":52},"end":{"line":6,"column":55}}]},"4":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":52},"end":{"line":6,"column":37}},"locations":[{"start":{"line":5,"column":52},"end":{"line":6,"column":37}}]},"5":{"type":"branch","line":6,"loc":{"start":{"line":6,"column":26},"end":{"line":6,"column":55}},"locations":[{"start":{"line":6,"column":26},"end":{"line":6,"column":55}}]},"6":{"type":"branch","line":6,"loc":{"start":{"line":6,"column":51},"end":{"line":6,"column":60}},"locations":[{"start":{"line":6,"column":51},"end":{"line":6,"column":60}}]},"7":{"type":"branch","line":10,"loc":{"start":{"line":10,"column":7},"end":{"line":24,"column":1}},"locations":[{"start":{"line":10,"column":7},"end":{"line":24,"column":1}}]},"8":{"type":"branch","line":14,"loc":{"start":{"line":14,"column":12},"end":{"line":14,"column":28}},"locations":[{"start":{"line":14,"column":12},"end":{"line":14,"column":28}}]},"9":{"type":"branch","line":14,"loc":{"start":{"line":14,"column":19},"end":{"line":24,"column":1}},"locations":[{"start":{"line":14,"column":19},"end":{"line":24,"column":1}}]},"10":{"type":"branch","line":17,"loc":{"start":{"line":17,"column":57},"end":{"line":17,"column":65}},"locations":[{"start":{"line":17,"column":57},"end":{"line":17,"column":65}}]},"11":{"type":"branch","line":19,"loc":{"start":{"line":19,"column":29},"end":{"line":19,"column":37}},"locations":[{"start":{"line":19,"column":29},"end":{"line":19,"column":37}}]},"12":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":7},"end":{"line":33,"column":1}},"locations":[{"start":{"line":26,"column":7},"end":{"line":33,"column":1}}]},"13":{"type":"branch","line":27,"loc":{"start":{"line":27,"column":10},"end":{"line":27,"column":21}},"locations":[{"start":{"line":27,"column":10},"end":{"line":27,"column":21}}]},"14":{"type":"branch","line":40,"loc":{"start":{"line":40,"column":7},"end":{"line":57,"column":1}},"locations":[{"start":{"line":40,"column":7},"end":{"line":57,"column":1}}]},"15":{"type":"branch","line":41,"loc":{"start":{"line":41,"column":10},"end":{"line":41,"column":21}},"locations":[{"start":{"line":41,"column":10},"end":{"line":41,"column":21}}]},"16":{"type":"branch","line":42,"loc":{"start":{"line":42,"column":41},"end":{"line":43,"column":83}},"locations":[{"start":{"line":42,"column":41},"end":{"line":43,"column":83}}]},"17":{"type":"branch","line":43,"loc":{"start":{"line":43,"column":82},"end":{"line":44,"column":8}},"locations":[{"start":{"line":43,"column":82},"end":{"line":44,"column":8}}]},"18":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":13},"end":{"line":52,"column":25}},"locations":[{"start":{"line":52,"column":13},"end":{"line":52,"column":25}}]},"19":{"type":"branch","line":53,"loc":{"start":{"line":53,"column":17},"end":{"line":53,"column":33}},"locations":[{"start":{"line":53,"column":17},"end":{"line":53,"column":33}}]},"20":{"type":"branch","line":54,"loc":{"start":{"line":54,"column":15},"end":{"line":54,"column":29}},"locations":[{"start":{"line":54,"column":15},"end":{"line":54,"column":29}}]},"21":{"type":"branch","line":55,"loc":{"start":{"line":55,"column":24},"end":{"line":55,"column":47}},"locations":[{"start":{"line":55,"column":24},"end":{"line":55,"column":47}}]},"22":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":7},"end":{"line":71,"column":1}},"locations":[{"start":{"line":67,"column":7},"end":{"line":71,"column":1}}]},"23":{"type":"branch","line":68,"loc":{"start":{"line":68,"column":10},"end":{"line":68,"column":21}},"locations":[{"start":{"line":68,"column":10},"end":{"line":68,"column":21}}]},"24":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":7},"end":{"line":76,"column":1}},"locations":[{"start":{"line":73,"column":7},"end":{"line":76,"column":1}}]},"25":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":28},"end":{"line":74,"column":37}},"locations":[{"start":{"line":74,"column":28},"end":{"line":74,"column":37}}]},"26":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":18},"end":{"line":75,"column":44}},"locations":[{"start":{"line":75,"column":18},"end":{"line":75,"column":44}}]},"27":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":53},"end":{"line":75,"column":86}},"locations":[{"start":{"line":75,"column":53},"end":{"line":75,"column":86}}]},"28":{"type":"branch","line":78,"loc":{"start":{"line":78,"column":7},"end":{"line":84,"column":1}},"locations":[{"start":{"line":78,"column":7},"end":{"line":84,"column":1}}]},"29":{"type":"branch","line":79,"loc":{"start":{"line":79,"column":10},"end":{"line":79,"column":21}},"locations":[{"start":{"line":79,"column":10},"end":{"line":79,"column":21}}]},"30":{"type":"branch","line":86,"loc":{"start":{"line":86,"column":7},"end":{"line":89,"column":1}},"locations":[{"start":{"line":86,"column":7},"end":{"line":89,"column":1}}]},"31":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":28},"end":{"line":87,"column":37}},"locations":[{"start":{"line":87,"column":28},"end":{"line":87,"column":37}}]},"32":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":18},"end":{"line":88,"column":50}},"locations":[{"start":{"line":88,"column":18},"end":{"line":88,"column":50}}]},"33":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":59},"end":{"line":88,"column":92}},"locations":[{"start":{"line":88,"column":59},"end":{"line":88,"column":92}}]},"34":{"type":"branch","line":91,"loc":{"start":{"line":91,"column":7},"end":{"line":100,"column":1}},"locations":[{"start":{"line":91,"column":7},"end":{"line":100,"column":1}}]},"35":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":21}},"locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":21}}]},"36":{"type":"branch","line":94,"loc":{"start":{"line":94,"column":38},"end":{"line":94,"column":78}},"locations":[{"start":{"line":94,"column":38},"end":{"line":94,"column":78}}]},"37":{"type":"branch","line":94,"loc":{"start":{"line":94,"column":74},"end":{"line":94,"column":87}},"locations":[{"start":{"line":94,"column":74},"end":{"line":94,"column":87}}]},"38":{"type":"branch","line":98,"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":28}},"locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":28}}]},"39":{"type":"branch","line":98,"loc":{"start":{"line":98,"column":24},"end":{"line":98,"column":32}},"locations":[{"start":{"line":98,"column":24},"end":{"line":98,"column":32}}]}},"b":{"0":[44],"1":[43],"2":[29],"3":[26],"4":[15],"5":[14],"6":[1],"7":[16],"8":[9],"9":[7],"10":[0],"11":[0],"12":[4],"13":[0],"14":[9],"15":[0],"16":[2],"17":[7],"18":[7],"19":[7],"20":[7],"21":[7],"22":[3],"23":[0],"24":[1],"25":[0],"26":[1],"27":[1],"28":[3],"29":[0],"30":[12],"31":[0],"32":[3],"33":[3],"34":[4],"35":[0],"36":[3],"37":[1],"38":[3],"39":[1]},"fnMap":{"0":{"name":"toDate","decl":{"start":{"line":4,"column":7},"end":{"line":7,"column":1}},"loc":{"start":{"line":4,"column":7},"end":{"line":7,"column":1}},"line":4},"1":{"name":"decodeLookup","decl":{"start":{"line":10,"column":7},"end":{"line":24,"column":1}},"loc":{"start":{"line":10,"column":7},"end":{"line":24,"column":1}},"line":10},"2":{"name":"decodeRecipe","decl":{"start":{"line":26,"column":7},"end":{"line":33,"column":1}},"loc":{"start":{"line":26,"column":7},"end":{"line":33,"column":1}},"line":26},"3":{"name":"decodeRecipes","decl":{"start":{"line":35,"column":7},"end":{"line":38,"column":1}},"loc":{"start":{"line":35,"column":7},"end":{"line":38,"column":1}},"line":35},"4":{"name":"decodeMeal","decl":{"start":{"line":40,"column":7},"end":{"line":57,"column":1}},"loc":{"start":{"line":40,"column":7},"end":{"line":57,"column":1}},"line":40},"5":{"name":"decodeMealRecipe","decl":{"start":{"line":59,"column":7},"end":{"line":65,"column":1}},"loc":{"start":{"line":59,"column":7},"end":{"line":65,"column":1}},"line":59},"6":{"name":"decodeIngredient","decl":{"start":{"line":67,"column":7},"end":{"line":71,"column":1}},"loc":{"start":{"line":67,"column":7},"end":{"line":71,"column":1}},"line":67},"7":{"name":"decodeIngredients","decl":{"start":{"line":73,"column":7},"end":{"line":76,"column":1}},"loc":{"start":{"line":73,"column":7},"end":{"line":76,"column":1}},"line":73},"8":{"name":"decodeShoppingListItem","decl":{"start":{"line":78,"column":7},"end":{"line":84,"column":1}},"loc":{"start":{"line":78,"column":7},"end":{"line":84,"column":1}},"line":78},"9":{"name":"decodeShoppingListItems","decl":{"start":{"line":86,"column":7},"end":{"line":89,"column":1}},"loc":{"start":{"line":86,"column":7},"end":{"line":89,"column":1}},"line":86},"10":{"name":"decodeShoppingList","decl":{"start":{"line":91,"column":7},"end":{"line":100,"column":1}},"loc":{"start":{"line":91,"column":7},"end":{"line":100,"column":1}},"line":91},"11":{"name":"toMealInput","decl":{"start":{"line":103,"column":7},"end":{"line":120,"column":1}},"loc":{"start":{"line":103,"column":7},"end":{"line":120,"column":1}},"line":103}},"f":{"0":44,"1":16,"2":4,"3":0,"4":9,"5":0,"6":3,"7":1,"8":3,"9":12,"10":4,"11":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/domain/pagination.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/domain/pagination.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":103}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":0}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":113}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":123}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":33}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":10}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":53}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":34}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":34}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":30}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":3}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":1}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":2,"6":2,"7":2,"8":2,"9":2,"10":2,"11":2,"12":2},"branchMap":{"0":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":7},"end":{"line":13,"column":1}},"locations":[{"start":{"line":5,"column":7},"end":{"line":13,"column":1}}]},"1":{"type":"branch","line":6,"loc":{"start":{"line":6,"column":13},"end":{"line":6,"column":33}},"locations":[{"start":{"line":6,"column":13},"end":{"line":6,"column":33}}]},"2":{"type":"branch","line":8,"loc":{"start":{"line":8,"column":17},"end":{"line":8,"column":30}},"locations":[{"start":{"line":8,"column":17},"end":{"line":8,"column":30}}]},"3":{"type":"branch","line":8,"loc":{"start":{"line":8,"column":34},"end":{"line":8,"column":51}},"locations":[{"start":{"line":8,"column":34},"end":{"line":8,"column":51}}]}},"b":{"0":[2],"1":[0],"2":[0],"3":[2]},"fnMap":{"0":{"name":"fromOpenApiPage","decl":{"start":{"line":5,"column":7},"end":{"line":13,"column":1}},"loc":{"start":{"line":5,"column":7},"end":{"line":13,"column":1}},"line":5}},"f":{"0":2}} +,"/home/jables/source/doof/munch-ease-frontend/src/router/helpers.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/router/helpers.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":3}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":44}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":78}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":3}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":52}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":3}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":69}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":46}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":3}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":83}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":25}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":53}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":23}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":30}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":40}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":1}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":0}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":3}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":40}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":65}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":3}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":104}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":23}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":42}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":863},"end":{"line":27,"column":1}},"locations":[{"start":{"line":1,"column":863},"end":{"line":27,"column":1}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":863},"end":{"line":27,"column":1}},"loc":{"start":{"line":1,"column":863},"end":{"line":27,"column":1}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/router/index.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/router/index.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":71}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":48}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":31}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":60}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":72}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":72}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":79}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":101}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":97}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":72}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":78}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":0}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":91}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":36}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":50}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":60}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":99}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":5}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":24}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":23}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":32}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":35}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":6}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":5}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":32}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":31}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":41}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":35}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":6}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":5}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":28}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":28}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":43}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":18}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":35}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":6}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":96}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":5}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":27}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":25}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":32}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":35}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":6}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":5}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":27}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":26}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":32}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":18}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":35}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":6}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":100}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":5}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":25}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":24}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":30}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":18}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":35}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":6}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":3}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":0}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":31}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":36}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":11}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":4}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":0}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":35}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":42}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":9}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":41}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":27}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":17}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":18}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":5}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":62}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":4}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":0}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":15}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":79,"column":-140}},"locations":[{"start":{"line":1,"column":0},"end":{"line":79,"column":-140}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":79,"column":-140}},"loc":{"start":{"line":1,"column":0},"end":{"line":79,"column":-140}},"line":1}},"f":{"0":0}} +} diff --git a/coverage/favicon.png b/coverage/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..c1525b811a167671e9de1fa78aab9f5c0b61cef7 GIT binary patch literal 445 zcmV;u0Yd(XP))rP{nL}Ln%S7`m{0DjX9TLF* zFCb$4Oi7vyLOydb!7n&^ItCzb-%BoB`=x@N2jll2Nj`kauio%aw_@fe&*}LqlFT43 z8doAAe))z_%=P%v^@JHp3Hjhj^6*Kr_h|g_Gr?ZAa&y>wxHE99Gk>A)2MplWz2xdG zy8VD2J|Uf#EAw*bo5O*PO_}X2Tob{%bUoO2G~T`@%S6qPyc}VkhV}UifBuRk>%5v( z)x7B{I~z*k<7dv#5tC+m{km(D087J4O%+<<;K|qwefb6@GSX45wCK}Sn*> + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 13.79% + Statements + 558/4046 +
+ + +
+ 53.72% + Branches + 101/188 +
+ + +
+ 48.1% + Functions + 38/79 +
+ + +
+ 13.79% + Lines + 558/4046 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
munch-ease-frontend +
+
0%0/60%0/10%0/10%0/6
munch-ease-frontend/scripts +
+
0%0/320%0/10%0/10%0/32
munch-ease-frontend/src +
+
47.52%125/26357.14%12/2157.14%4/747.52%125/263
munch-ease-frontend/src/api +
+
76.34%297/38957.3%51/8971.42%20/2876.34%297/389
munch-ease-frontend/src/components +
+
0%0/2340%0/30%0/30%0/234
munch-ease-frontend/src/components/ingredients +
+
0%0/3300%0/30%0/30%0/330
munch-ease-frontend/src/components/meals +
+
0%0/9450%0/50%0/50%0/945
munch-ease-frontend/src/components/recipes +
+
0%0/5500%0/40%0/40%0/550
munch-ease-frontend/src/components/shopping +
+
0%0/8140%0/50%0/50%0/814
munch-ease-frontend/src/composables +
+
11.88%29/24450%5/1057.14%4/711.88%29/244
munch-ease-frontend/src/domain +
+
80.45%107/13375%33/4476.92%10/1380.45%107/133
munch-ease-frontend/src/router +
+
0%0/1060%0/20%0/20%0/106
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/index.html b/coverage/munch-ease-frontend/index.html new file mode 100644 index 0000000..1a42d4e --- /dev/null +++ b/coverage/munch-ease-frontend/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for munch-ease-frontend + + + + + + + + + +
+
+

All files munch-ease-frontend

+
+ +
+ 0% + Statements + 0/6 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/6 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
vue.config.js +
+
0%0/60%0/10%0/10%0/6
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/scripts/codegen-check.js.html b/coverage/munch-ease-frontend/scripts/codegen-check.js.html new file mode 100644 index 0000000..6ae6599 --- /dev/null +++ b/coverage/munch-ease-frontend/scripts/codegen-check.js.html @@ -0,0 +1,181 @@ + + + + + + Code coverage report for munch-ease-frontend/scripts/codegen-check.js + + + + + + + + + +
+
+

All files / munch-ease-frontend/scripts codegen-check.js

+
+ +
+ 0% + Statements + 0/32 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/32 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
#!/usr/bin/env node
+/**
+ * Warn if backend openapi.json is newer than generated src/api/types.ts
+ */
+const { statSync, existsSync } = require('fs')
+const { resolve } = require('path')
+
+const backendSpec = resolve(__dirname, '..', '..', 'munch-ease-backend', 'openapi.json')
+const generated = resolve(__dirname, '..', 'src', 'api', 'types.ts')
+
+if (!existsSync(backendSpec)) {
+  console.log('codegen-check: Skipping (backend openapi.json not found).')
+  process.exit(0)
+}
+if (!existsSync(generated)) {
+  console.log('codegen-check: src/api/types.ts not found. Run: npm run codegen')
+  process.exit(1)
+}
+
+try {
+  const specMtime = statSync(backendSpec).mtimeMs
+  const genMtime = statSync(generated).mtimeMs
+  if (specMtime > genMtime) {
+    console.log('codegen-check: OpenAPI spec is newer than generated types. Consider running: npm run codegen')
+    process.exit(2)
+  } else {
+    console.log('codegen-check: OK (generated types up to date).')
+  }
+} catch (e) {
+  console.error('codegen-check: Error reading timestamps:', e.message)
+  process.exit(3)
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/scripts/index.html b/coverage/munch-ease-frontend/scripts/index.html new file mode 100644 index 0000000..3577af0 --- /dev/null +++ b/coverage/munch-ease-frontend/scripts/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for munch-ease-frontend/scripts + + + + + + + + + +
+
+

All files munch-ease-frontend/scripts

+
+ +
+ 0% + Statements + 0/32 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/32 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
codegen-check.js +
+
0%0/320%0/10%0/10%0/32
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/App.vue.html b/coverage/munch-ease-frontend/src/App.vue.html new file mode 100644 index 0000000..64db669 --- /dev/null +++ b/coverage/munch-ease-frontend/src/App.vue.html @@ -0,0 +1,379 @@ + + + + + + Code coverage report for munch-ease-frontend/src/App.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src App.vue

+
+ +
+ 0% + Statements + 0/98 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/98 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <div>
+    <ul class="nav">
+      <li class="nav-item">
+        <router-link
+          class="nav-link"
+          :to="{ name: 'recipes' }"
+          active-class="active"
+        >
+          Recipes
+        </router-link>
+      </li>
+      <li class="nav-item">
+        <router-link
+          class="nav-link"
+          :to="{ name: 'mealplan' }"
+          active-class="active"
+        >
+          Meal Plan
+        </router-link>
+      </li>
+      <li class="nav-item">
+        <router-link
+          class="nav-link"
+          :to="{ name: 'shopping' }"
+          active-class="active"
+        >
+          Shopping
+        </router-link>
+      </li>
+    </ul>
+  </div>
+  <div class="viewport">
+    <router-view />
+  </div>
+
+  <alert-toast />
+</template>
+
+<script setup>
+import AlertToast from './components/AlertToast.vue'
+
+// components in <script setup> are auto-registered by import + usage
+</script>
+
+<style>
+#app {
+  font-family: Avenir, Helvetica, Arial, sans-serif;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  text-align: center;
+  color: #2c3e50;
+  margin-top: 60px;
+}
+
+/* Make nav bar links buttons across top of screen */
+.nav {
+  position: fixed;
+  left: 0;
+  right: 0;
+  top: 0;
+  z-index: 1;
+
+  display: flex;
+  justify-content: space-around;
+  list-style-type: none;
+  margin: 0;
+  padding: 0;
+  position: fixed;
+  top: 0;
+  width: 100%;
+  background-color: #333;
+}
+
+.nav li {
+  flex: 1;
+}
+
+/* Style the links inside the navigation bar */
+.nav a {
+  display: inline-block;
+  color: #f2f2f2;
+  text-align: center;
+  padding: 14px 16px;
+  text-decoration: none;
+}
+
+/* Have active route use different color */
+.nav li:has(> a.active) {
+  background-color: #4caf50;
+  color: white;
+}
+
+.viewport {
+  max-width: 1200px;
+  margin: auto;
+}
+</style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/api/auth.ts.html b/coverage/munch-ease-frontend/src/api/auth.ts.html new file mode 100644 index 0000000..01bee94 --- /dev/null +++ b/coverage/munch-ease-frontend/src/api/auth.ts.html @@ -0,0 +1,175 @@ + + + + + + Code coverage report for munch-ease-frontend/src/api/auth.ts + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/api auth.ts

+
+ +
+ 0% + Statements + 0/30 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/30 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { api } from '@/api/client'
+import type { Person } from '@/domain/types'
+
+let cachedUser: Person | null = null
+
+export async function currentUser(): Promise<Person | null> {
+  if (cachedUser) return cachedUser
+  try {
+    const res = await api.POST('/api/v1/auth/refresh', { params: { cookie: { user_id: 0 } } })
+    if (!res.response.ok) return null
+    cachedUser = res.data ?? null
+  } catch (_) {
+    cachedUser = null
+  }
+  return cachedUser
+}
+
+export async function login(username: string): Promise<Person> {
+  const res = await api.POST('/api/v1/auth/login', { body: { username } })
+  if (!res.response.ok) {
+    const err = res.error
+    throw (
+      (err instanceof Error && err) ||
+      (typeof err === 'string' ? new Error(err) : new Error(`${res.response.status} ${res.response.statusText || 'HTTP error'}`))
+    )
+  }
+  cachedUser = res.data ?? null
+  if (!cachedUser) throw new Error('Login failed: empty response')
+  return cachedUser
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/api/client.ts.html b/coverage/munch-ease-frontend/src/api/client.ts.html new file mode 100644 index 0000000..3ad3264 --- /dev/null +++ b/coverage/munch-ease-frontend/src/api/client.ts.html @@ -0,0 +1,145 @@ + + + + + + Code coverage report for munch-ease-frontend/src/api/client.ts + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/api client.ts

+
+ +
+ 100% + Statements + 20/20 +
+ + +
+ 25% + Branches + 1/4 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 20/20 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +211x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +20x +20x +20x +20x +20x +1x + 
import createClient from 'openapi-fetch'
+import type { paths } from './types'
+ 
+// Vue CLI uses process.env.VUE_APP_*
+const vueCliBase: string | undefined = typeof process !== 'undefined' ? (process.env?.VUE_APP_API_BASE ?? undefined) : undefined
+const isTest = typeof process !== 'undefined' && (process.env?.VITEST === 'true' || process.env?.NODE_ENV === 'test')
+// Prefer absolute http URL in tests to avoid TLS issues and ease MSW interception
+// Use host-only base URL; always pass full "/api/v1/..." paths to the client methods
+const defaultBase = ''
+const baseUrl: string = isTest ? 'http://localhost' : (vueCliBase || defaultBase)
+ 
+export const api = createClient<paths>({
+  baseUrl,
+  fetch: (input: RequestInfo | URL, init?: RequestInit) => {
+    return globalThis.fetch(input, {
+      credentials: 'include',
+      ...init,
+    })
+  },
+})
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/api/index.html b/coverage/munch-ease-frontend/src/api/index.html new file mode 100644 index 0000000..42a4e03 --- /dev/null +++ b/coverage/munch-ease-frontend/src/api/index.html @@ -0,0 +1,146 @@ + + + + + + Code coverage report for munch-ease-frontend/src/api + + + + + + + + + +
+
+

All files munch-ease-frontend/src/api

+
+ +
+ 76.34% + Statements + 297/389 +
+ + +
+ 57.3% + Branches + 51/89 +
+ + +
+ 71.42% + Functions + 20/28 +
+ + +
+ 76.34% + Lines + 297/389 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
auth.ts +
+
0%0/300%0/10%0/10%0/30
client.ts +
+
100%20/2025%1/4100%1/1100%20/20
sdk.ts +
+
81.71%277/33959.52%50/8473.07%19/2681.71%277/339
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/api/sdk.ts.html b/coverage/munch-ease-frontend/src/api/sdk.ts.html new file mode 100644 index 0000000..968d4e7 --- /dev/null +++ b/coverage/munch-ease-frontend/src/api/sdk.ts.html @@ -0,0 +1,1102 @@ + + + + + + Code coverage report for munch-ease-frontend/src/api/sdk.ts + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/api sdk.ts

+
+ +
+ 81.71% + Statements + 277/339 +
+ + +
+ 59.52% + Branches + 50/84 +
+ + +
+ 73.07% + Functions + 19/26 +
+ + +
+ 81.71% + Lines + 277/339 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +3401x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +6x +6x +6x +6x +6x +1x +1x +1x +1x +1x +9x +9x +9x +9x +9x +9x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +9x +1x +1x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +3x +1x +1x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +1x +1x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +1x +  +  +  +  +  +  +  +  +  +  +  +  +1x +2x +2x +2x +1x +1x +1x +  +  +  +  +  +1x +  +  +  +  +1x +2x +2x +2x +1x +1x +1x +2x +2x +2x +2x +2x +2x +2x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +3x +3x +3x +1x +1x +1x +1x +3x +3x +3x +3x +3x +1x +2x +2x +2x +1x +1x +1x +1x +1x +1x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +1x +1x +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +2x +2x +2x +2x +2x +2x +2x +2x +  +  +  +  +  +  +  +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +1x +2x +2x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { api } from '@/api/client'
+import type { components } from '@/api/types'
+import { toDate, decodeMeal, decodeRecipe, decodeIngredients, decodeShoppingList, decodeShoppingListItems, decodeIngredient, decodeLookup } from '@/domain/decoders'
+import type {
+  Recipe,
+  Meal,
+  Ingredient,
+  ShoppingList,
+  ShoppingListItemWithRefs,
+  CurrentShoppingListDTO,
+  PurchasedShoppingListDTO,
+  ShoppingLookups,
+} from '@/domain/types'
+import { fromOpenApiPage, type Page } from '@/domain/pagination'
+ 
+function httpError(response: Response, error: unknown): Error {
+  if (error instanceof Error) return error
+  if (typeof error === 'string') return new Error(error)
+  return new Error(`${response.status} ${response.statusText || 'HTTP error'}`)
+}
+ 
+// decodeLookup moved to domain/decoders to be reused across SDK and other modules
+ 
+// Shopping list mapped view types now come from domain/types
+ 
+function attachItemRefs(
+  items: Array<ShoppingListItemWithRefs> | null | undefined,
+  lookups: ShoppingLookups
+): void {
+  if (!Array.isArray(items)) return
+  for (const item of items) {
+    const ingredientId = item.ingredientId ?? undefined
+    const mealId = item.mealId ?? undefined
+    const recipeId = item.recipeId ?? undefined
+    const listId = item.listId ?? undefined
+    const created = item.createdDate
+ 
+    if (ingredientId !== undefined && lookups.ingredientsLookup && lookups.ingredientsLookup[String(ingredientId)] !== undefined) {
+      item.ingredient = lookups.ingredientsLookup[String(ingredientId)]
+    }
+    if (mealId !== undefined && lookups.mealsLookup && lookups.mealsLookup[String(mealId)] !== undefined) {
+      item.meal = lookups.mealsLookup[String(mealId)]
+    }
+    if (recipeId !== undefined && lookups.recipesLookup && lookups.recipesLookup[String(recipeId)] !== undefined) {
+      item.recipe = lookups.recipesLookup[String(recipeId)]
+    }
+    if (listId !== undefined && lookups.shoppingListLookup && lookups.shoppingListLookup[String(listId)] !== undefined) {
+      item.list = lookups.shoppingListLookup[String(listId)]
+    }
+    if (created !== undefined) item.createdDate = toDate(created)
+  }
+}
+ 
+export function mapPurchasedShoppingList(dto: components['schemas']['PurchasedShoppingList'] | null | undefined): PurchasedShoppingListDTO | null {
+  if (!dto) return null
+ 
+  const mealsLookupRaw = dto.mealsLookup
+  const recipesLookupRaw = dto.recipesLookup
+  const ingredientsLookupRaw = dto.ingredientsLookup
+  const listRaw = dto.list
+ 
+  const mealsLookup = decodeLookup(mealsLookupRaw, decodeMeal)
+  const recipesLookup = decodeLookup(recipesLookupRaw, decodeRecipe)
+  const ingredientsLookup = decodeLookup(ingredientsLookupRaw, decodeIngredient)
+ 
+  let list: import('@/domain/types').ShoppingListWithRefs | undefined
+  if (listRaw) {
+    const base = decodeShoppingList(listRaw)
+    if (base) {
+      const items = Array.isArray(listRaw.items) ? decodeShoppingListItems(listRaw.items) : []
+      list = { ...base, items }
+      const lookups: ShoppingLookups = {
+        ...(ingredientsLookup && { ingredientsLookup }),
+        ...(mealsLookup && { mealsLookup }),
+        ...(recipesLookup && { recipesLookup }),
+        shoppingListLookup: { [String(list.id)]: list },
+      }
+      attachItemRefs(list.items, lookups)
+    }
+  }
+ 
+  return {
+    ...(ingredientsLookup && { ingredientsLookup }),
+    ...(mealsLookup && { mealsLookup }),
+    ...(recipesLookup && { recipesLookup }),
+    ...(list && { list }),
+  }
+}
+ 
+export function mapCurrentShoppingList(dto: components['schemas']['CurrentShoppingList'] | null | undefined): CurrentShoppingListDTO | null {
+  if (!dto) return null
+ 
+  const outstandingRaw = dto.outstandingItems
+  const requestedRaw = dto.requestedMeals
+  const purchasedRaw = dto.purchasedItems
+ 
+  const ingredientsLookupRaw = dto.ingredientsLookup
+  const mealsLookupRaw = dto.mealsLookup
+  const recipesLookupRaw = dto.recipesLookup
+  const shoppingListLookupRaw = dto.shoppingListLookup
+ 
+  const ingredientsLookup = decodeLookup(ingredientsLookupRaw, decodeIngredient)
+  const mealsLookup = decodeLookup(mealsLookupRaw, decodeMeal)
+  const recipesLookup = decodeLookup(recipesLookupRaw, decodeRecipe)
+ 
+  let shoppingListLookup: Record<string, ShoppingList> | undefined
+  if (shoppingListLookupRaw) {
+    shoppingListLookup = decodeLookup(shoppingListLookupRaw, decodeShoppingList)
+  }
+ 
+  const dtoOut: CurrentShoppingListDTO = {
+    outstandingItems: decodeShoppingListItems(outstandingRaw ?? []),
+    requestedMeals: decodeShoppingListItems(requestedRaw ?? []),
+    purchasedItems: decodeShoppingListItems(purchasedRaw ?? []),
+    ...(ingredientsLookup && { ingredientsLookup }),
+    ...(mealsLookup && { mealsLookup }),
+    ...(recipesLookup && { recipesLookup }),
+    ...(shoppingListLookup && { shoppingListLookup }),
+  }
+ 
+  const lookups: ShoppingLookups = {
+    ...(ingredientsLookup && { ingredientsLookup }),
+    ...(mealsLookup && { mealsLookup }),
+    ...(recipesLookup && { recipesLookup }),
+    ...(shoppingListLookup && { shoppingListLookup }),
+  }
+  attachItemRefs(dtoOut.outstandingItems ?? null, lookups)
+  attachItemRefs(dtoOut.requestedMeals ?? null, lookups)
+  attachItemRefs(dtoOut.purchasedItems ?? null, lookups)
+ 
+  return dtoOut
+}
+ 
+export async function listRecipes(params?: { q?: string | null; cursor?: string | null; limit?: number }): Promise<Page<Recipe>> {
+  const query: Record<string, unknown> = {}
+  if (params) {
+    if (params.q !== undefined) query.q = params.q
+    if (params.cursor !== undefined) query.cursor = params.cursor
+    if (typeof params.limit === 'number') query.limit = params.limit
+  }
+  const { data, error, response } = await api.GET('/api/v1/recipes', { params: { query } })
+  if (!response.ok) throw httpError(response, error)
+  const mapped = fromOpenApiPage(data ?? null, (r) => decodeRecipe(r))
+  return { ...mapped, items: mapped.items.filter((r): r is Recipe => !!r) }
+}
+ 
+export async function getRecipe(id: number | string): Promise<Recipe | null> {
+  const { data, error, response } = await api.GET('/api/v1/recipes/{recipe_id}', { params: { path: { recipe_id: Number(id) } } })
+  if (!response.ok) throw httpError(response, error)
+  return decodeRecipe(data)
+}
+ 
+export async function saveRecipe(recipe: components['schemas']['Recipe-Input']): Promise<Recipe | null> {
+  const { data, error, response } = await api.POST('/api/v1/recipes', { body: recipe, params: { cookie: { user_id: 0 } } })
+  if (!response.ok) throw httpError(response, error)
+  return decodeRecipe(data)
+}
+ 
+export async function deleteRecipe(id: number | string): Promise<void> {
+  const { error, response } = await api.DELETE('/api/v1/recipes/{recipe_id}', { params: { path: { recipe_id: Number(id) }, cookie: { user_id: 0 } } })
+  if (!response.ok) throw httpError(response, error)
+}
+ 
+export async function parseRecipe(url: string): Promise<Recipe | null> {
+  const { data, error, response } = await api.GET('/api/v1/recipes/parse', { params: { query: { url }, cookie: { user_id: 0 } } })
+  if (!response.ok) throw httpError(response, error)
+  return decodeRecipe(data)
+}
+ 
+export async function parseIngredients(lines: string[]): Promise<Ingredient[]> {
+  const { data, error, response } = await api.GET('/api/v1/recipes/ingredients/parse', {
+    params: { query: { ingredients: lines } },
+  })
+  if (!response.ok) throw httpError(response, error)
+  return decodeIngredients(data ?? [])
+}
+ 
+export async function parseProduct(
+  ingredient: Pick<components['schemas']['Ingredient'], 'name' | 'line'>,
+  url: string
+): Promise<components['schemas']['Product'] | null> {
+  const body: components['schemas']['ProductUrl'] = { url, tags: [ingredient.name, ingredient.line] }
+  const res = await api.POST('/api/v1/products', { body })
+  if (!res.response.ok) throw httpError(res.response, res.error)
+  return res.data ?? null
+}
+ 
+// Persons
+export async function listPersons(params?: { q?: string | null; cursor?: string | null; limit?: number }): Promise<Page<components['schemas']['Person']>> {
+  const query: Record<string, unknown> = {}
+  if (params) {
+    if (params.q !== undefined) query.q = params.q
+    if (params.cursor !== undefined) query.cursor = params.cursor
+    if (typeof params.limit === 'number') query.limit = params.limit
+  }
+  const { data, error, response } = await api.GET('/api/v1/persons', { params: { query } })
+  if (!response.ok) throw httpError(response, error)
+  const normalized = Array.isArray(data) ? { items: data } : (data ?? null)
+  return fromOpenApiPage<components['schemas']['Person'], components['schemas']['Person']>(normalized, (p) => p)
+}
+ 
+export async function getPersonsInHome(): Promise<Page<components['schemas']['Person']>> {
+  return listPersons()
+}
+ 
+export async function searchPersons(name: string): Promise<Page<components['schemas']['Person']>> {
+  return listPersons({ q: name })
+}
+ 
+// Meals
+export async function getUpcomingMeals(from: Date, to: Date): Promise<Meal[]> {
+  const { data, error, response } = await api.GET('/api/v1/meals/upcoming', {
+    params: { query: { from: from.toISOString(), to: to.toISOString() } },
+  })
+  if (!response.ok) throw httpError(response, error)
+  const list = Array.isArray(data) ? data : []
+  return list
+    .map((m) => decodeMeal(m))
+    .filter((m): m is Meal => !!m)
+    .sort((a, b) => ((a.suggestedDate?.getTime() ?? 0) - (b.suggestedDate?.getTime() ?? 0)))
+}
+ 
+export async function getMeal(id: number | string): Promise<Meal | null> {
+  const { data, error, response } = await api.GET('/api/v1/meals/{meal_id}', { params: { path: { meal_id: Number(id) } } })
+  if (!response.ok) throw httpError(response, error)
+  return decodeMeal(data)
+}
+ 
+export async function saveMeal(meal: components['schemas']['Meal-Input']): Promise<Meal | null> {
+  const hasId = typeof meal.id === 'number' && meal.id >= 0
+  if (hasId) {
+    const { data, error, response } = await api.PUT('/api/v1/meals/{meal_id}', {
+      params: { path: { meal_id: Number(meal.id) } },
+      body: meal,
+    })
+    if (!response.ok) throw httpError(response, error)
+    return decodeMeal(data)
+  } else {
+    const { data, error, response } = await api.POST('/api/v1/meals', { body: meal })
+    if (!response.ok) throw httpError(response, error)
+    return decodeMeal(data)
+  }
+}
+ 
+export async function markMealConsumed(mealId: number | string): Promise<Meal | null> {
+  const { data, error, response } = await api.POST('/api/v1/meals/{meal_id}/consumed', {
+    params: { path: { meal_id: Number(mealId) }, cookie: { user_id: 0 } },
+  })
+  if (!response.ok) throw httpError(response, error)
+  return decodeMeal(data)
+}
+ 
+export async function deleteMeal(mealId: number | string): Promise<void> {
+  const { error, response } = await api.DELETE('/api/v1/meals/{meal_id}', {
+    params: { path: { meal_id: Number(mealId) }, cookie: { user_id: 0 } },
+  })
+  if (!response.ok) throw httpError(response, error)
+}
+ 
+// Shopping
+export async function getMyShoppingList(): Promise<Ingredient[]> {
+  const { data, error, response } = await api.GET('/api/v1/shopping/current/me/ingredients', { params: { cookie: { user_id: 0 } } })
+  if (!response.ok) throw httpError(response, error)
+  return decodeIngredients(data ?? [])
+}
+ 
+export async function saveMyShoppingList(items: components['schemas']['Ingredient'][]): Promise<Ingredient[]> {
+  const { data, error, response } = await api.POST('/api/v1/shopping/current/me/ingredients', {
+    body: items,
+    params: { cookie: { user_id: 0 } },
+  })
+  if (!response.ok) throw httpError(response, error)
+  return decodeIngredients(data ?? [])
+}
+ 
+export async function getShoppingList(id: number | string) {
+  const { data, error, response } = await api.GET('/api/v1/shopping/{list_id}', { params: { path: { list_id: Number(id) } } })
+  if (!response.ok) throw httpError(response, error)
+  const mapped = mapPurchasedShoppingList(data)
+  return mapped?.list ?? null
+}
+ 
+export async function getCurrentShoppingList() {
+  const { data, error, response } = await api.GET('/api/v1/shopping/current')
+  if (!response.ok) throw httpError(response, error)
+  return mapCurrentShoppingList(data)
+}
+ 
+export type PurchaseExisting = { type: 'existing'; id: number; personId: number; ingredientId?: number | null }
+export type PurchaseRefs = { type: 'refs'; personId: number; ingredientId?: number | null; recipeId?: number | null; mealId?: number | null }
+ 
+export async function purchaseShoppingList(
+  completedRequests: Array<PurchaseExisting | PurchaseRefs>
+): Promise<import('@/domain/types').ShoppingListWithRefs | null> {
+  if (!Array.isArray(completedRequests) || completedRequests.length === 0) return null
+  // Map incoming requests: if id provided and >= 0, use it; otherwise send identifiers for ingredient/recipe/meal
+  const items: components['schemas']['ShoppingListItem'][] = completedRequests.map((i) =>
+    i.type === 'existing'
+      ? { id: i.id, personId: i.personId, ingredientId: i.ingredientId ?? null }
+      : {
+          id: -1,
+          personId: i.personId,
+          ingredientId: i.ingredientId ?? null,
+          recipeId: i.recipeId ?? null,
+          mealId: i.mealId ?? null,
+        }
+  )
+ 
+  if (items.length === 0) return null
+ 
+  const body: components['schemas']['ShoppingList'] = {
+    id: -1,
+    storeName: '',
+    purchasedById: -1,
+    items,
+  }
+  const { data, error, response } = await api.POST('/api/v1/shopping', {
+    body,
+    params: { cookie: { user_id: 0 } },
+  })
+  if (!response.ok) throw httpError(response, error)
+  const mapped = mapPurchasedShoppingList(data)
+  return mapped?.list ?? null
+}
+ 
+export async function requestMeal(mealId: number | string): Promise<void> {
+  const { error, response } = await api.POST('/api/v1/shopping/current/meals/me', {
+    body: { mealId: Number(mealId) },
+    params: { cookie: { user_id: 0 } },
+  })
+  if (!response.ok) throw httpError(response, error)
+}
+ 
+export async function unrequestMeal(mealId: number | string): Promise<void> {
+  const { error, response } = await api.DELETE('/api/v1/shopping/current/meals/{meal_id}', {
+    params: { path: { meal_id: Number(mealId) }, cookie: { user_id: 0 } },
+  })
+  if (!response.ok) throw httpError(response, error)
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/ActionItem.vue.html b/coverage/munch-ease-frontend/src/components/ActionItem.vue.html new file mode 100644 index 0000000..4256438 --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/ActionItem.vue.html @@ -0,0 +1,205 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/ActionItem.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components ActionItem.vue

+
+ +
+ 0% + Statements + 0/40 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/40 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <div class="card">
+    <a @click="emit('click')">
+      <h2>{{ title }}</h2>
+      <img
+        :src="image"
+        :alt="title"
+      >
+    </a>
+  </div>
+</template>
+
+<script setup>
+const emit = defineEmits(['click'])
+defineProps({
+  title: { type: String, required: true },
+  image: { type: String, required: true },
+})
+</script>
+
+<style scoped>
+img {
+  width: 100%;
+  height: auto;
+}
+
+.card {
+  display: inline-block;
+  border: 1px solid #ccc;
+  border-radius: 5px;
+  padding: 10px;
+  margin-bottom: 10px;
+  width: 20em;
+  margin: 1em 1ex;
+}
+
+.card:hover {
+  background-color: #ccc;
+}
+</style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/AlertToast.vue.html b/coverage/munch-ease-frontend/src/components/AlertToast.vue.html new file mode 100644 index 0000000..43cf6e3 --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/AlertToast.vue.html @@ -0,0 +1,355 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/AlertToast.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components AlertToast.vue

+
+ +
+ 0% + Statements + 0/90 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/90 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <div
+    v-if="showAlert"
+    :class="['alert', type]"
+    @click="dismiss"
+  >
+    <img
+      v-if="icon"
+      :src="icon"
+      alt="Notification icon"
+    >
+    <div class="message-container">
+      <h4 class="heading">
+        {{ heading }}
+      </h4>
+      <p class="message">
+        {{ message }}
+      </p>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import { computed, watch } from 'vue'
+import { useAlert } from '@/composables/useAlert'
+
+const alertIcons = {
+  error: new URL('@/assets/notification-error.svg', import.meta.url).toString(),
+  success: new URL('@/assets/notification-success.svg', import.meta.url).toString(),
+  info: new URL('@/assets/notification-info.svg', import.meta.url).toString(),
+}
+
+const { current, clear, scheduleAutoDismiss } = useAlert()
+
+const showAlert = computed(() => !!current.value)
+const heading = computed(() => current.value?.heading ?? '')
+const message = computed(() => current.value?.message ?? '')
+const type = computed(() => current.value?.type ?? '')
+const icon = computed(() => (type.value && alertIcons[type.value] ? alertIcons[type.value] : null))
+
+function dismiss() {
+  clear()
+}
+
+watch(
+  () => current.value?._ts,
+  (ts) => {
+    if (ts) scheduleAutoDismiss(5000)
+  }
+)
+</script>
+
+<style scoped>
+/* Display as a toast, in the bottom right corner */
+/* Place the icon to the left for the full height, then have the heading and message stacked to the right */
+
+.alert {
+  position: fixed;
+  bottom: 1em;
+  right: 1em;
+  display: flex;
+  align-items: center;
+  padding: 1em;
+  border-radius: 5px;
+  color: white;
+  box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
+  text-align: left;
+}
+
+.alert img {
+  width: 2em;
+  height: 2em;
+  margin-right: 1em;
+
+  /* Invert svg colors */
+  filter: invert(1);
+}
+
+.alert.error {
+  background-color: #f44336;
+}
+
+.alert.success {
+  background-color: #4caf50;
+}
+
+.alert.info {
+  background-color: #2196f3;
+}
+</style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/LoginPage.vue.html b/coverage/munch-ease-frontend/src/components/LoginPage.vue.html new file mode 100644 index 0000000..246d7ce --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/LoginPage.vue.html @@ -0,0 +1,397 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/LoginPage.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components LoginPage.vue

+
+ +
+ 0% + Statements + 0/104 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/104 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <div class="login">
+    <h1>Login Page</h1>
+    <ul class="button-group">
+      <li
+        v-for="(person, index) in persons"
+        :key="person.id ?? index"
+      >
+        <button
+          type="button"
+          class="btn btn-primary"
+          @click="onLogin(person)"
+        >
+          {{ person.name }}
+        </button>
+      </li>
+    </ul>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref, onMounted } from 'vue'
+import { useRouter } from 'vue-router'
+import { getPersonsInHome } from '@/api/sdk'
+import { login as loginApi } from '@/api/auth'
+import type { Person } from '@/domain/types'
+
+const props = defineProps({
+  redirect: { type: String, default: '/' },
+})
+
+const router = useRouter()
+const persons = ref<Person[]>([])
+
+onMounted(async () => {
+  const page = await getPersonsInHome()
+  persons.value = page.items
+})
+
+async function onLogin(selectedPerson: Person) {
+  const person = await loginApi(selectedPerson.name)
+  if (person?.id >= 0) {
+    router.push(props.redirect)
+    return
+  }
+  alert('Login failed')
+}
+</script>
+
+<style scoped>
+/* Remove the default list styling */
+ul {
+  list-style-type: none;
+  padding: 0;
+}
+
+/* Center the buttons in the middle of the page, and let them wrap */
+
+.button-group {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: center;
+}
+
+/* Display each button as a large round circle */
+
+button {
+  width: 100px;
+  height: 100px;
+  border-radius: 50%;
+  margin: 10px;
+  font-size: 1.5em;
+
+  /* Center the text in the middle of the button */
+  display: flex;
+  justify-content: center;
+  align-items: center;
+
+  /* Add a shadow to make the buttons look like they are floating */
+  box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
+}
+
+/* Some nice flat nuetral shades for the user buttons */
+
+li:nth-child(1) > button {
+  background-color: #3939ff;
+  color: white;
+}
+
+li:nth-child(2) > button {
+  background-color: #156a14;
+  color: white;
+}
+
+li:nth-child(3) > button {
+  background-color: #325293;
+  color: white;
+}
+
+li:nth-child(4) > button {
+  background-color: #9a1f1f;
+  color: white;
+}
+</style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/index.html b/coverage/munch-ease-frontend/src/components/index.html new file mode 100644 index 0000000..ec5bb98 --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/index.html @@ -0,0 +1,146 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components + + + + + + + + + +
+
+

All files munch-ease-frontend/src/components

+
+ +
+ 0% + Statements + 0/234 +
+ + +
+ 0% + Branches + 0/3 +
+ + +
+ 0% + Functions + 0/3 +
+ + +
+ 0% + Lines + 0/234 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
ActionItem.vue +
+
0%0/400%0/10%0/10%0/40
AlertToast.vue +
+
0%0/900%0/10%0/10%0/90
LoginPage.vue +
+
0%0/1040%0/10%0/10%0/104
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue.html b/coverage/munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue.html new file mode 100644 index 0000000..32844c3 --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue.html @@ -0,0 +1,469 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components/ingredients CompactParsedIngredient.vue

+
+ +
+ 0% + Statements + 0/128 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/128 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <div class="compact-parse-results">
+    <p class="parse-element teaser-image">
+      <img :src="ingredient.product?.imgSmall ?? missingProduct">
+    </p>
+    <p class="ingredient-details">
+      <span
+        class="parse-element quantity"
+        :class="{ missing: !ingredient?.quantity }"
+      >{{
+        ingredient?.quantity || 'qty'
+      }}</span>
+      <span
+        class="parse-element unit"
+        :class="{ missing: !ingredient?.unit }"
+      >{{
+        ingredient?.unit || 'unit'
+      }}</span>
+      <span class="parse-element helper">of</span>
+      <span
+        class="parse-element name"
+        :class="{ missing: !ingredient?.name }"
+      >{{
+        ingredient?.name || 'name'
+      }}</span>:&nbsp;
+      <span
+        class="parse-element product-name"
+        :class="{ missing: !ingredient?.product }"
+      >
+        <a
+          v-if="ingredient?.product?.link"
+          :href="ingredient?.product?.link"
+          target="”_blank”"
+        >
+          ( {{ ingredient?.product?.name }}
+          <img
+            :src="externalLink"
+            style="
+              width: 1em;
+              height: 1em;
+              vertical-align: middle;
+              margin-left: 0.5em;
+              margin-bottom: 0.2em;
+            "
+          >
+          )
+        </a>
+        <a
+          v-else-if="ingredient?.name"
+          :href="searchlink"
+          target="_blank"
+        > (search?) </a>
+        <a v-else> (product) </a>
+      </span>
+    </p>
+  </div>
+</template>
+
+<script setup>
+import { computed } from 'vue'
+const missingProduct = new URL('@/assets/missing-product.svg', import.meta.url).toString()
+const externalLink = new URL('@/assets/external-link.svg', import.meta.url).toString()
+
+const props = defineProps({
+  ingredient: { type: Object, required: true },
+})
+
+const searchlink = computed(() =>
+  props.ingredient?.name
+    ? 'https://www.woolworths.com.au/shop/search/products?searchTerm=' +
+      encodeURIComponent(props.ingredient.name)
+    : ''
+)
+</script>
+
+<style scoped>
+.compact-parse-results {
+  flex: left;
+  display: flex;
+  justify-content: left;
+  text-align: left;
+}
+
+.parse-element {
+  margin: auto 0;
+  margin-right: 1em;
+  border-bottom: solid 1px #ccc;
+  font-weight: bold;
+}
+
+.parse-element.missing {
+  color: red;
+  border: solid red 1px;
+}
+
+.parse-element.teaser-image,
+.parse-element.helper {
+  border: none;
+  font-weight: normal;
+}
+
+.parse-element.teaser-image img {
+  padding: 0;
+  border: none;
+  width: 2em;
+  height: 2em;
+}
+
+.ingredient-details {
+  flex: 1;
+}
+
+.quantity {
+  color: blue;
+}
+
+.unit {
+  color: green;
+}
+
+.name {
+  color: black;
+}
+
+.product-name {
+  color: purple;
+}
+</style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue.html b/coverage/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue.html new file mode 100644 index 0000000..5b4d714 --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue.html @@ -0,0 +1,463 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components/ingredients EditableIngredientsPanel.vue

+
+ +
+ 0% + Statements + 0/126 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/126 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <div :class="{ editing: editing }">
+    <button
+      v-if="editing"
+      @click="emit('on-add')"
+    >
+      <img
+        class="icon"
+        :src="addCart"
+      > <br>
+      Add Ingredient
+    </button>
+    <button
+      v-if="!editOnly"
+      @click="toggleEditing"
+    >
+      <span v-if="editing">
+        <img
+          class="icon"
+          :src="editOff"
+        > <br>
+        Done Editing
+      </span>
+      <span v-else>
+        <img
+          class="icon"
+          :src="editOn"
+        > <br>
+        Edit My List
+      </span>
+    </button>
+    <ul>
+      <li
+        v-for="ingredient in ingredients"
+        :key="ingredient"
+      >
+        <div v-if="editing">
+          <p class="ingredient-line">
+            <ingredient-line
+              :ingredient="ingredient"
+              @update-ingredient="updateIngredient"
+              @update-product-link="updateProduct"
+            />
+          </p>
+          <button @click="emit('on-delete', ingredient)">
+            <img
+              class="icon"
+              :src="trash"
+            >
+          </button>
+        </div>
+        <div v-else>
+          <compact-parsed-ingredient :ingredient="ingredient" />
+        </div>
+      </li>
+    </ul>
+  </div>
+</template>
+
+<script setup>
+import { ref } from 'vue'
+import { parseProduct, parseIngredients } from '@/api/sdk'
+import IngredientLine from './IngredientLine.vue'
+import CompactParsedIngredient from './CompactParsedIngredient.vue'
+const addCart = new URL('@/assets/add-cart.svg', import.meta.url).toString()
+const editOff = new URL('@/assets/edit-off.svg', import.meta.url).toString()
+const editOn = new URL('@/assets/edit.svg', import.meta.url).toString()
+const trash = new URL('@/assets/trash.svg', import.meta.url).toString()
+
+const props = defineProps({
+  ingredients: { type: Array, required: true },
+  editOnly: { type: Boolean, default: false },
+})
+const emit = defineEmits(['on-add', 'on-delete', 'on-update-ingredient', 'on-editing'])
+
+const editing = ref(props.editOnly ?? false)
+
+async function updateProduct(ingredient, product_link) {
+  const product = await parseProduct(ingredient, product_link)
+  emit('on-update-ingredient', ingredient, { ...ingredient, product })
+}
+
+async function updateIngredient(ingredient, line) {
+  const newIngredients = await parseIngredients([line])
+  emit('on-update-ingredient', ingredient, newIngredients[0])
+}
+
+function toggleEditing() {
+  editing.value = !editing.value
+  emit('on-editing', editing.value)
+}
+</script>
+
+<style scoped>
+.icon {
+  width: 2em;
+  height: 2em;
+}
+
+ul {
+  padding: 0;
+}
+
+li {
+  list-style: none;
+}
+
+li > div {
+  display: flex;
+  flex-direction: row;
+  justify-content: space-between;
+  width: 100%;
+}
+
+.editing li {
+  border: 1px solid #ccc;
+  border-radius: 5px;
+  padding: 5px;
+}
+
+.ingredient-line {
+  flex: 1;
+  margin: 0;
+  margin-right: 1em;
+}
+</style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/ingredients/IngredientLine.vue.html b/coverage/munch-ease-frontend/src/components/ingredients/IngredientLine.vue.html new file mode 100644 index 0000000..8affebc --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/ingredients/IngredientLine.vue.html @@ -0,0 +1,313 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/ingredients/IngredientLine.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components/ingredients IngredientLine.vue

+
+ +
+ 0% + Statements + 0/76 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/76 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <div class="ingredient-item">
+    <p>
+      <input
+        v-model="ingredientText"
+        placeholder="Enter an ingredient"
+        @keyup.enter="updateIngredient"
+        @blur="updateIngredient"
+      >
+      <input
+        v-if="ingredient.line"
+        v-model="productLink"
+        class="product-link-input"
+        placeholder="Enter product link"
+        @keyup.enter="updateProductLink"
+        @blur="updateProductLink"
+      >
+    </p>
+    <p v-if="ingredient.line">
+      <!-- Single line parse results -->
+      <compact-parsed-ingredient :ingredient="ingredient" />
+    </p>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref, watch } from 'vue'
+import CompactParsedIngredient from './CompactParsedIngredient.vue'
+import type { Ingredient } from '@/domain/types'
+
+const props = defineProps<{ ingredient: Ingredient }>()
+const emit = defineEmits<{
+  (e: 'update-ingredient', ingredient: Ingredient, newLine: string): void
+  (e: 'update-product-link', ingredient: Ingredient, link: string): void
+}>()
+
+const ingredientText = ref<string>(props.ingredient?.line ?? '')
+const productLink = ref<string>(props.ingredient.product?.link ?? '')
+
+watch(
+  () => props.ingredient,
+  (newIngredient) => {
+    ingredientText.value = newIngredient?.line ?? ''
+    productLink.value = newIngredient?.product?.link ?? ''
+  },
+  { deep: true }
+)
+
+function updateIngredient() {
+  if (ingredientText.value != props.ingredient.line) {
+    emit('update-ingredient', props.ingredient, ingredientText.value)
+  }
+}
+
+function updateProductLink() {
+  if (productLink.value && productLink.value != props.ingredient.product?.link) {
+    emit('update-product-link', props.ingredient, productLink.value)
+  }
+}
+</script>
+
+<style scoped>
+input {
+  border: 0;
+  font-size: larger;
+  border-bottom: 1px solid #ccc;
+  border-left: 1px solid #ccc;
+  width: 100%;
+  padding: 0.5vh;
+}
+
+.product-link-input {
+  color: #777;
+  margin-top: 0.5vh;
+}
+</style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/ingredients/index.html b/coverage/munch-ease-frontend/src/components/ingredients/index.html new file mode 100644 index 0000000..a0e0931 --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/ingredients/index.html @@ -0,0 +1,146 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/ingredients + + + + + + + + + +
+
+

All files munch-ease-frontend/src/components/ingredients

+
+ +
+ 0% + Statements + 0/330 +
+ + +
+ 0% + Branches + 0/3 +
+ + +
+ 0% + Functions + 0/3 +
+ + +
+ 0% + Lines + 0/330 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
CompactParsedIngredient.vue +
+
0%0/1280%0/10%0/10%0/128
EditableIngredientsPanel.vue +
+
0%0/1260%0/10%0/10%0/126
IngredientLine.vue +
+
0%0/760%0/10%0/10%0/76
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/meals/DatePicker.vue.html b/coverage/munch-ease-frontend/src/components/meals/DatePicker.vue.html new file mode 100644 index 0000000..7fa9ecf --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/meals/DatePicker.vue.html @@ -0,0 +1,418 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/meals/DatePicker.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components/meals DatePicker.vue

+
+ +
+ 0% + Statements + 0/111 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/111 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <div class="date-picker">
+    <input
+      v-model="selectedDate"
+      type="text"
+      placeholder="Select a date"
+      @focus="showDatePicker = true"
+      @blur="showDatePicker = false"
+    >
+    <div
+      v-if="showDatePicker"
+      class="date-picker-dropdown"
+    >
+      <ul>
+        <li
+          v-for="(day, index) in days"
+          :key="index"
+          @mousedown="selectDate(day)"
+        >
+          {{ formatDay(day) }}
+        </li>
+      </ul>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref, computed, watch } from 'vue'
+
+const props = defineProps<{ date?: Date }>()
+const emit = defineEmits<{ (e: 'date-selected', date: Date): void }>()
+
+function formatDay(date: Date): string {
+  const options: Intl.DateTimeFormatOptions = { weekday: 'long', day: 'numeric', month: 'numeric' }
+  return date.toLocaleDateString('en-AU', options)
+}
+
+const initialDate = props.date ?? new Date()
+const selectedDate = ref<string>(formatDay(initialDate))
+const showDatePicker = ref(false)
+
+watch(
+  () => props.date,
+  (newDate) => {
+    if (newDate) selectedDate.value = formatDay(newDate)
+  }
+)
+
+const days = computed<Date[]>(() => {
+  const today = new Date()
+  const result: Date[] = []
+  for (let i = 0; i < 15; i++) {
+    const d = new Date(today)
+    d.setDate(today.getDate() + i)
+    result.push(d)
+  }
+  return result
+})
+
+function selectDate(date: Date) {
+  selectedDate.value = formatDay(date)
+  showDatePicker.value = false
+  emit('date-selected', date)
+}
+</script>
+
+<style scoped>
+.date-picker {
+  position: relative;
+}
+
+.date-picker input {
+  width: 100%;
+  padding: 8px;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+  font-size: 16px;
+  outline: none;
+}
+
+.date-picker-dropdown {
+  position: absolute;
+  top: 100%;
+  width: 100%;
+  margin: auto;
+  background-color: #fff;
+  border: 1px solid #ccc;
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+  z-index: 1000;
+}
+
+.date-picker-dropdown ul {
+  list-style-type: none;
+  margin: 0;
+  padding: 0;
+}
+
+.date-picker-dropdown li {
+  padding: 8px;
+  cursor: pointer;
+  border-bottom: 1px solid #ccc;
+}
+
+.date-picker-dropdown li:hover {
+  background-color: #eee;
+}
+
+.date-picker-dropdown li:last-child {
+  border-bottom: none;
+}
+</style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/meals/EditMealPage.vue.html b/coverage/munch-ease-frontend/src/components/meals/EditMealPage.vue.html new file mode 100644 index 0000000..3d190d2 --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/meals/EditMealPage.vue.html @@ -0,0 +1,1252 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/meals/EditMealPage.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components/meals EditMealPage.vue

+
+ +
+ 0% + Statements + 0/389 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/389 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <div class="container">
+    <div class="fields">
+      <date-picker
+        :date="meal.suggestedDate ?? new Date()"
+        @date-selected="selectDate"
+      />
+      <div class="persons-list">
+        Cooked by
+        <person-list
+          :people="meal.chefs"
+          @remove-person="(p) => removePerson('chefs', p)"
+          @add-person="(p) => addPerson('chefs', p)"
+        />
+        for
+        <person-list
+          :people="meal.consumers"
+          @remove-person="(p) => removePerson('consumers', p)"
+          @add-person="(p) => addPerson('consumers', p)"
+        />, with
+        <person-list
+          :people="meal.cleanup"
+          @remove-person="(p) => removePerson('cleanup', p)"
+          @add-person="(p) => addPerson('cleanup', p)"
+        />
+        on cleanup.
+      </div>
+    </div>
+    <div class="recipes">
+      <h2>Recipes</h2>
+      <ul v-if="meal.recipes.length">
+        <li
+          v-for="mealRecipe in meal.recipes"
+          :key="mealRecipe.recipe?.id ?? mealRecipe.recipeId"
+        >
+          <div
+            v-if="mealRecipe.recipe"
+            class="saved-recipe"
+          >
+            <p class="recipe-card">
+              <recipe-card :recipe="mealRecipe.recipe" />
+            </p>
+
+            <p class="servings">
+              <input
+                v-model="mealRecipe.servings"
+                type="number"
+                min="1"
+              >
+              <small><em>servings</em></small>
+            </p>
+
+            <input
+              type="checkbox"
+              class="show-ingredient-checkbox"
+              :checked="showIngredient(mealRecipe)"
+            >
+            <label
+              for="show-ingredients"
+              @click="showIngredient(mealRecipe, !showIngredient(mealRecipe))"
+            >
+              <img
+                class="icon"
+                :src="showIngredientsIcon"
+              >
+            </label>
+            <button
+              class="icon-button"
+              @click="removeRecipe(mealRecipe)"
+            >
+              <img
+                class="icon"
+                :src="trash"
+              >
+            </button>
+          </div>
+
+          <div v-if="showIngredient(mealRecipe)">
+            <ul>
+              <li
+                v-for="ingredient in scaleIngredients(mealRecipe)"
+                :key="ingredient.id"
+                class="saved-ingredient"
+              >
+                <CompactParsedIngredient :ingredient="ingredient" />
+              </li>
+            </ul>
+          </div>
+        </li>
+      </ul>
+      <div v-else>
+        <p>Add some recipes using the search box</p>
+      </div>
+      <div class="fields">
+        <recipe-search-box @select-recipe="selectRecipe" />
+      </div>
+    </div>
+    <div class="ingredients">
+      <h2>Sides & Additional Ingredients</h2>
+      <editable-ingredients-panel
+        :ingredients="meal.extraIngredients"
+        @on-add="addIngredient"
+        @on-delete="deleteIngredient"
+        @on-update-ingredient="updateIngredient"
+        @on-editing="onEditAdditionalIngredients"
+      />
+    </div>
+
+    <button @click="onSaveMeal">
+      Save
+    </button>
+    <p v-if="meal.purchaseDate">
+      <em>Purchased {{ ago(meal.purchaseDate) }}</em>
+    </p>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { reactive, onBeforeMount } from 'vue'
+import { useRoute, useRouter } from 'vue-router'
+import { getMeal, saveMeal, getRecipe } from '@/api/sdk'
+import { toMealInput } from '@/domain/decoders'
+import { currentUser } from '@/api/auth'
+import { useAlert } from '@/composables/useAlert'
+import { parseRouteId } from '@/router/helpers'
+import type { Person, Ingredient, Meal, MealRecipe } from '@/domain/types'
+
+import { ago } from '@/dateformats'
+
+import RecipeSearchBox from '@/components/recipes/RecipeSearchBox.vue'
+import RecipeCard from '@/components/recipes/RecipeCard.vue'
+import DatePicker from './DatePicker.vue'
+import EditableIngredientsPanel from '../ingredients/EditableIngredientsPanel.vue'
+import PersonList from './PersonList.vue'
+import CompactParsedIngredient from '../ingredients/CompactParsedIngredient.vue'
+const showIngredientsIcon = new URL('@/assets/show-ingredients.svg', import.meta.url).toString()
+const trash = new URL('@/assets/trash.svg', import.meta.url).toString()
+
+function addPersonIfNotExists(list: Person[], person: Person | null | undefined) {
+    if (!person) return
+    if (!list.find((p) => p.id === person.id)) {
+        list.push(person)
+    }
+}
+
+const route = useRoute()
+const router = useRouter()
+const { show: showAlert } = useAlert()
+
+type PeopleKey = 'chefs' | 'consumers' | 'cleanup'
+
+const meal = reactive<Meal>({
+    id: -1,
+    suggestedDate: new Date(),
+    consumedDate: null,
+    purchaseDate: null,
+    recipes: [],
+    extraIngredients: [],
+    chefs: [],
+    consumers: [],
+    cleanup: [],
+})
+
+onBeforeMount(async () => {
+    const id = parseRouteId(route.params.id)
+    if (id !== null) {
+        const loaded = await getMeal(id)
+        if (loaded) {
+            Object.assign(meal, loaded)
+        }
+    } else {
+        const self = await currentUser()
+        if (self) {
+            meal.chefs = [self]
+            meal.consumers = [self]
+            meal.cleanup = [self]
+        }
+    }
+})
+
+function selectDate(date: Date) {
+    meal.suggestedDate = date
+}
+
+function removeRecipe(mealRecipe: MealRecipe) {
+    if (
+        confirm(
+            `Are you sure you want to remove ${mealRecipe.servings} servings of ${mealRecipe.recipe?.name ?? 'this recipe'} from this meal?`
+        )
+    ) {
+        meal.recipes = meal.recipes.filter((r) => r !== mealRecipe)
+    }
+}
+
+function addIngredient() {
+    meal.extraIngredients = [{ id: -1, name: '', line: '', unit: 'Items', quantity: 0, preparation: '', productId: null, recipeId: null, mealId: null, product: null }, ...meal.extraIngredients]
+}
+
+function deleteIngredient(ingredient: Ingredient) {
+    meal.extraIngredients = meal.extraIngredients.filter((i) => i !== ingredient)
+}
+
+function updateIngredient(ingredient: Ingredient, newIngredient: Ingredient) {
+    meal.extraIngredients = meal.extraIngredients.map((i) => (i === ingredient ? newIngredient : i))
+}
+
+function removePerson(list: PeopleKey, person: Person) {
+    meal[list] = meal[list].filter((p) => p.id !== person.id)
+}
+
+function addPerson(list: PeopleKey, person: Person) {
+    addPersonIfNotExists(meal[list], person)
+}
+
+async function selectRecipe(recipe: { id: number | string }) {
+    // Refetch to get additional details
+    const r = await getRecipe(recipe.id)
+    if (!r) return
+
+    if (r.createdBy) {
+        addPersonIfNotExists(meal.chefs, r.createdBy)
+        addPersonIfNotExists(meal.consumers, r.createdBy)
+
+        if (meal.cleanup.length === 0) {
+            addPersonIfNotExists(meal.cleanup, r.createdBy)
+        }
+    }
+
+    meal.recipes.push({ recipe: r, recipeId: r.id, mealId: meal.id, servings: r.serves })
+}
+
+async function onEditAdditionalIngredients(editing: boolean) {
+    if (editing && meal.extraIngredients.length === 0) {
+        addIngredient()
+    } else {
+        meal.extraIngredients = meal.extraIngredients.filter((i) => !!i.line)
+    }
+}
+
+const showMap = reactive<Record<string, boolean>>({})
+function showIngredient(mealRecipe: MealRecipe, value?: boolean): boolean {
+    const index = meal.recipes.indexOf(mealRecipe)
+    const key = `${mealRecipe.recipe?.id ?? 'unknown'}-${index}`
+    if (value === undefined) {
+        return !!showMap[key]
+    }
+    showMap[key] = value
+    return value
+}
+
+function scaleIngredients(mealRecipe: MealRecipe) {
+    const ing = mealRecipe.recipe?.ingredients ?? []
+    const serves = mealRecipe.recipe?.serves ?? 1
+    return ing.map((i) => {
+        return {
+            ...i,
+            quantity: (i.quantity * mealRecipe.servings) / serves,
+        }
+    })
+}
+
+async function onSaveMeal() {
+    const saved = await saveMeal(toMealInput(meal))
+    if (saved && saved.id >= 0) {
+        Object.assign(meal, saved)
+        router.push(`/meals/${saved.id}`)
+        showAlert({ heading: 'Meal saved', message: 'Meal saved successfully', type: 'success' })
+        return
+    }
+
+    showAlert({
+        heading: 'Error saving meal',
+        message: 'An error occurred while saving the meal',
+        type: 'error',
+    })
+}
+</script>
+
+<style scoped>
+img.icon {
+    width: 2em;
+    height: 2em;
+}
+
+.persons-list {
+    text-align: left;
+    padding: 1ex 2em;
+}
+
+.persons-list p {
+    margin: 0;
+    padding-bottom: 1em;
+}
+
+.person-list li {
+    display: inline-block;
+    padding-right: 1em;
+}
+
+.container {
+    margin: 1em auto;
+}
+
+ul {
+    list-style-type: none;
+    margin: 0;
+    padding: 0;
+}
+
+li {
+    padding-bottom: 0.5vh;
+}
+
+.saved-ingredient {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+}
+
+.saved-recipe {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+}
+
+.saved-ingredient p {
+    flex: 1;
+    margin: 0;
+    margin-right: 1em;
+}
+
+.saved-recipe button:hover {
+    background: #eee;
+}
+
+.saved-recipe .recipe-card {
+    margin: 0;
+}
+
+.recipe-card {
+    flex: 1;
+}
+
+.servings {
+    display: inline-block;
+    margin-right: 1em;
+}
+
+.servings input {
+    width: 3em;
+    border: none;
+    border-bottom: 1px solid #000;
+    text-align: center;
+    font-size: large;
+    font-style: italic;
+}
+
+.icon-button {
+    background: none;
+    border: none;
+    cursor: pointer;
+    border-radius: 1em;
+    padding: 0.5em;
+}
+
+.icon-button:hover {
+    /* Invert the colors of the trash icon */
+    filter: invert(1);
+}
+
+.show-ingredient-checkbox {
+    display: none;
+}
+
+.show-ingredient-checkbox+label {
+    cursor: pointer;
+    background-color: #fff;
+    padding: 0.5em;
+    border-radius: 1em;
+}
+
+.show-ingredient-checkbox+label:hover {
+    background-color: #eee;
+}
+
+.show-ingredient-checkbox:checked+label {
+    filter: invert(1);
+}
+</style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/meals/MealCard.vue.html b/coverage/munch-ease-frontend/src/components/meals/MealCard.vue.html new file mode 100644 index 0000000..63b3a98 --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/meals/MealCard.vue.html @@ -0,0 +1,379 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/meals/MealCard.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components/meals MealCard.vue

+
+ +
+ 0% + Statements + 0/98 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/98 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <div class="meal-card">
+    <h3>{{ mealTitle }}</h3>
+    <h4>
+      {{ dayOfWeek }} <small>{{ date }}</small>
+    </h4>
+
+    <p>
+      Cooked by
+      <span
+        v-for="(chef, index) in meal.chefs"
+        :key="chef.id"
+      >
+        {{ chef.name }}{{ englishSeperator(index, meal.chefs) }}
+      </span>
+      <span v-if="!meal.chefs.length">somebody?</span>
+    </p>
+    <p>
+      For
+      <span
+        v-for="(consumer, index) in meal.consumers"
+        :key="consumer.id"
+      >
+        {{ consumer.name }}{{ englishSeperator(index, meal.consumers) }}
+      </span>
+      <span v-if="!meal.consumers.length">somebody?</span>
+    </p>
+    <p v-if="meal.purchaseDate">
+      Purchased {{ ago(meal.purchaseDate) }}
+    </p>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { computed } from 'vue'
+import { ago } from '@/dateformats'
+
+type Person = { id: number; name: string }
+type MealRecipe = { recipe: { name: string } }
+type Ingredient = { name: string }
+type Meal = {
+  suggestedDate: Date | null
+  chefs: Person[]
+  consumers: Person[]
+  recipes?: MealRecipe[]
+  extraIngredients?: Ingredient[]
+  purchaseDate?: Date | null
+}
+
+const props = defineProps<{ meal: Meal }>()
+
+function englishSeperator(index: number, list: Array<unknown>) {
+  switch (index) {
+    case list.length - 1:
+      return ''
+    case list.length - 2:
+      return ' and '
+    default:
+      return ', '
+  }
+}
+
+function englishList(list: string[]) {
+  switch (list.length) {
+    case 0:
+      return ''
+    case 1:
+      return list[0]
+    case 2:
+      return `${list[0]} and ${list[1]}`
+    default:
+      return `${list.slice(0, -1).join(', ')}, and ${list.slice(-1)}`
+  }
+}
+
+const date = computed(() =>
+  props.meal.suggestedDate
+    ? props.meal.suggestedDate.toLocaleDateString('en-au', { month: 'numeric', day: 'numeric' })
+    : ''
+)
+
+const dayOfWeek = computed(() =>
+  props.meal.suggestedDate ? props.meal.suggestedDate.toLocaleDateString('en-au', { weekday: 'long' }) : ''
+)
+
+const mealTitle = computed(() => {
+  const recipes = props.meal.recipes ?? []
+  const extras = props.meal.extraIngredients ?? []
+  const recipesText = englishList(recipes.map((mr) => mr.recipe.name))
+  const ingredientsText = englishList(extras.map((i) => i.name))
+
+  if (recipesText && ingredientsText) return `${recipesText} with ${ingredientsText}`
+  if (recipesText || ingredientsText) return recipesText || ingredientsText
+  return 'Nothing planned'
+})
+</script>
+
+<style></style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/meals/MealPlanPage.vue.html b/coverage/munch-ease-frontend/src/components/meals/MealPlanPage.vue.html new file mode 100644 index 0000000..a28eb52 --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/meals/MealPlanPage.vue.html @@ -0,0 +1,514 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/meals/MealPlanPage.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components/meals MealPlanPage.vue

+
+ +
+ 0% + Statements + 0/143 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/143 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <div>
+    <ul
+      v-if="meals.length"
+      class="meals-list"
+    >
+      <li
+        v-for="meal in meals"
+        :key="meal.id"
+      >
+        <meal-card :meal="meal" />
+        <button
+          class="toggle-actions"
+          @click="selectedMeal = meal == selectedMeal ? null : meal"
+        >
+          <img :src="meal == selectedMeal ? chevronDown : chevronUp">
+        </button>
+
+        <ul
+          v-if="selectedMeal == meal"
+          class="actions"
+        >
+          <li>
+            <router-link
+              class="nav-link"
+              :to="`/meals/${selectedMeal.id}`"
+              active-class="active"
+            >
+              Edit Meal
+            </router-link>
+          </li>
+          <li><a @click="markConsumed">Mark Consumed</a></li>
+          <li>
+            <a
+              class="button"
+              @click="deleteSelectedMeal"
+            >Remove</a>
+          </li>
+        </ul>
+      </li>
+    </ul>
+    <div v-if="!meals.length">
+      <em>No meals planned</em>
+    </div>
+    <action-item
+      title="Plan Meal"
+      :image="planMeal"
+      @click="() => $router.push('/meals/add')"
+    />
+  </div>
+</template>
+
+<script setup>
+import { ref, onBeforeMount } from 'vue'
+import ActionItem from '@/components/ActionItem.vue'
+import MealCard from '@/components/meals/MealCard.vue'
+import { getUpcomingMeals, markMealConsumed, deleteMeal } from '@/api/sdk'
+const chevronDown = new URL('@/assets/chevron-down.svg', import.meta.url).toString()
+const chevronUp = new URL('@/assets/chevron-up.svg', import.meta.url).toString()
+const planMeal = new URL('@/assets/plan-meal.svg', import.meta.url).toString()
+
+const from = new Date()
+from.setTime(0)
+
+const to = new Date()
+to.setDate(to.getDate() + 7)
+
+const meals = ref([])
+const selectedMeal = ref(null)
+
+onBeforeMount(async () => {
+  meals.value = await getUpcomingMeals(from, to)
+})
+
+async function deleteSelectedMeal() {
+  if (!selectedMeal.value) return
+  await deleteMeal(selectedMeal.value.id)
+  meals.value = meals.value.filter((m) => m.id !== selectedMeal.value.id)
+  selectedMeal.value = null
+}
+
+async function markConsumed() {
+  if (!selectedMeal.value) return
+  await markMealConsumed(selectedMeal.value.id)
+  meals.value = meals.value.filter((m) => m.id !== selectedMeal.value.id)
+}
+</script>
+
+<style scoped>
+li {
+  list-style-type: none;
+}
+
+ul.meals-list {
+  padding: 0;
+}
+
+.toggle-actions {
+  cursor: pointer;
+  background-color: #fff;
+  border: none;
+  border-bottom: solid 1px #ccc;
+  padding: 0 2em;
+  margin: 0;
+}
+
+.toggle-actions img {
+  width: 2em;
+  height: 2em;
+}
+
+.meals-list > li {
+  margin-bottom: 1em;
+  padding: 0;
+  border: 1px solid #ccc;
+  border-radius: 5px;
+  padding: 10px;
+}
+
+ul.actions {
+  margin: 0;
+  padding: 0;
+}
+
+.actions li {
+  display: block;
+  border: 1px solid #ccc;
+}
+
+.actions li:hover {
+  background-color: #ccc;
+}
+
+.actions li a {
+  display: block;
+  text-decoration: none;
+  color: #000;
+  width: 100%;
+  cursor: pointer;
+  padding-top: 2ex;
+  padding-bottom: 2ex;
+}
+</style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/meals/PersonList.vue.html b/coverage/munch-ease-frontend/src/components/meals/PersonList.vue.html new file mode 100644 index 0000000..28899ed --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/meals/PersonList.vue.html @@ -0,0 +1,697 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/meals/PersonList.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components/meals PersonList.vue

+
+ +
+ 0% + Statements + 0/204 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/204 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <span class="person-list">
+    <span
+      v-for="person in people"
+      :key="person.id"
+    >
+      <button
+        class="person-circle remove-person"
+        @click="removePerson(person)"
+      >
+        {{ person.name }}
+      </button>
+    </span>
+    <span>
+      <button
+        v-if="!isAddingPerson"
+        class="person-circle add-person"
+        @click="isAddingPerson = true"
+      >
+        +
+      </button>
+      <input
+        v-else
+        ref="searchNameInput"
+        v-model="searchName"
+        @keyup.enter="addPerson"
+        @keyup.esc="isAddingPerson = false"
+        @blur="isAddingPerson = false"
+      >
+      <ul
+        v-if="isAddingPerson && searchResults.length"
+        ref="persondroplist"
+        class="person-droplist"
+      >
+        <li
+          v-for="person in searchResults"
+          :key="person.id"
+        >
+          <button
+            class="person-circle add-person"
+            @mousedown="addPerson(person)"
+          >
+            {{ person.name }}
+          </button>
+        </li>
+      </ul>
+    </span>
+  </span>
+</template>
+
+<script setup lang="ts">
+import { ref, watch } from 'vue'
+import { searchPersons } from '@/api/sdk'
+import type { Person } from '@/domain/types'
+const props = withDefaults(defineProps<{ people?: Person[] }>(), { people: () => [] })
+const emit = defineEmits<{
+  (e: 'add-person', person: Person): void
+  (e: 'remove-person', person: Person): void
+}>()
+
+const isAddingPerson = ref(false)
+const searchName = ref('')
+const searchResults = ref<Person[]>([])
+
+// Template refs for DOM elements
+const searchNameInput = ref<HTMLInputElement | null>(null)
+const persondroplist = ref<HTMLUListElement | null>(null)
+
+async function updateSearchResults() {
+  const q = searchName.value.trim()
+  if (!q) {
+    searchResults.value = []
+    return
+  }
+  const page = await searchPersons(q)
+  const results: Person[] = page.items.map((p) => ({ id: p.id, name: p.name }))
+  const idSet = new Set(props.people.map((p) => p.id))
+  searchResults.value = results.filter((p: Person) => !idSet.has(p.id))
+}
+
+function addPerson(person?: Person) {
+  if (!person && searchResults.value.length > 0) {
+    person = searchResults.value[0]
+  }
+  if (!person) {
+    searchName.value = ''
+    searchResults.value = []
+    isAddingPerson.value = false
+    return
+  }
+  if (!props.people.find((p) => p.id === person.id)) {
+    emit('add-person', person)
+  }
+  searchName.value = ''
+  searchResults.value = []
+  isAddingPerson.value = false
+}
+
+function removePerson(person: Person) {
+  emit('remove-person', person)
+}
+
+// Watchers
+watch(searchName, async () => {
+  await updateSearchResults()
+})
+
+watch(searchNameInput, async (el) => {
+  if (el) {
+    el.focus()
+    await updateSearchResults()
+  }
+})
+
+watch([persondroplist, searchNameInput], ([drop, input]) => {
+  if (drop && input) {
+    const inputRect = input.getBoundingClientRect()
+    drop.style.left = `${inputRect.left}px`
+    drop.style.top = `${inputRect.bottom}px`
+    drop.style.width = `${inputRect.width}px`
+  }
+})
+</script>
+
+<style scoped>
+.person-list {
+  display: inline-block;
+  text-align: center;
+  min-height: 50px;
+  padding: 0;
+  margin: 0;
+}
+
+/* Remove all the button styling */
+.person-circle {
+  background: none;
+  border: none;
+  padding: 0;
+  margin: 0;
+}
+
+/* Show the initials of the person in a circle */
+.person-circle {
+  display: inline-block;
+  width: 50px;
+  height: 50px;
+  line-height: 50px;
+  text-align: center;
+  border-radius: 50%;
+  background: #eee;
+}
+
+/* On hover, prompt the user to click to remove the person */
+/* change opacity of circle, and use css to add a large cross over the circle */
+.remove-person:hover {
+  cursor: pointer;
+  position: relative;
+  background-color: lightcoral;
+}
+
+/* Add a cross to the circle */
+.remove-person:hover::before,
+.remove-person:hover::after {
+  pointer-events: none;
+  content: 'X';
+  color: white;
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+}
+
+.add-person {
+  background-color: lightgreen;
+}
+
+.add-person:hover {
+  cursor: pointer;
+  font-weight: bolder;
+  color: white;
+  background-color: green;
+}
+
+.person-droplist {
+  position: absolute;
+  background-color: white;
+  border: 1px solid #ccc;
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+  list-style-type: none;
+  padding: 0;
+  margin: 0;
+  max-height: 40vh;
+  overflow-y: scroll;
+  z-index: 1000;
+}
+
+.person-droplist li {
+  padding: 8px;
+  cursor: pointer;
+  display: inline;
+  padding: 1ex 1em;
+}
+</style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/meals/index.html b/coverage/munch-ease-frontend/src/components/meals/index.html new file mode 100644 index 0000000..31682a2 --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/meals/index.html @@ -0,0 +1,176 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/meals + + + + + + + + + +
+
+

All files munch-ease-frontend/src/components/meals

+
+ +
+ 0% + Statements + 0/945 +
+ + +
+ 0% + Branches + 0/5 +
+ + +
+ 0% + Functions + 0/5 +
+ + +
+ 0% + Lines + 0/945 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
DatePicker.vue +
+
0%0/1110%0/10%0/10%0/111
EditMealPage.vue +
+
0%0/3890%0/10%0/10%0/389
MealCard.vue +
+
0%0/980%0/10%0/10%0/98
MealPlanPage.vue +
+
0%0/1430%0/10%0/10%0/143
PersonList.vue +
+
0%0/2040%0/10%0/10%0/204
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/recipes/EditRecipePage.vue.html b/coverage/munch-ease-frontend/src/components/recipes/EditRecipePage.vue.html new file mode 100644 index 0000000..51d6e16 --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/recipes/EditRecipePage.vue.html @@ -0,0 +1,802 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/recipes/EditRecipePage.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components/recipes EditRecipePage.vue

+
+ +
+ 0% + Statements + 0/239 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/239 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <div>
+    <div v-if="!id && !recipe">
+      <input
+        v-model="link"
+        class="recipe-link"
+        type="text"
+        placeholder="Link to Recipe"
+      > <br>
+      <button @click="parseLink">
+        Parse
+      </button>
+      <button @click="createFromScratch">
+        Create from Scratch
+      </button>
+    </div>
+
+    <div v-if="parse_failed">
+      <p>Recipe not found</p>
+    </div>
+
+    <div v-if="!parse_failed && recipe">
+      <div
+        v-if="image_styling"
+        class="image-container"
+        :style="image_styling"
+      />
+      <h1>
+        <input
+          v-model="recipe.name"
+          class="recipe-name"
+          type="text"
+        >
+      </h1>
+      <label for="recipe-serves">Number of serves: </label>
+      <input
+        v-model="recipe.serves"
+        type="number"
+      >
+      <h3 class="recipe-link">
+        <a :href="recipe.link">View Recipe</a>
+      </h3>
+      <h2>Ingredients</h2>
+      <editable-ingredients-panel
+        :ingredients="recipe.ingredients"
+        :edit-only="true"
+        @on-add="addIngredient"
+        @on-delete="deleteIngredient"
+        @on-update-ingredient="updateIngredient"
+      />
+
+      <div>
+        <button
+          v-if="recipe.id"
+          class="delete-btn"
+          @click="deleteRecipe"
+        >
+          Delete
+        </button>
+        <button
+          class="submit-btn"
+          @click="saveRecipe"
+        >
+          {{ recipe.id ? 'Save' : 'Create' }}
+        </button>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref, computed, onMounted, watch } from 'vue'
+import { useRouter, useRoute } from 'vue-router'
+import { useAlert } from '@/composables/useAlert'
+import { parseQueryString } from '@/router/helpers'
+import { getRecipe, parseRecipe, saveRecipe as saveRecipeApi, deleteRecipe as deleteRecipeApi } from '@/api/sdk'
+import EditableIngredientsPanel from '@/components/ingredients/EditableIngredientsPanel.vue'
+import type { Recipe as DomainRecipe, Ingredient, RecipeInput } from '@/domain/types'
+
+const props = defineProps({
+  id: { type: String, required: false, default: undefined },
+})
+
+const router = useRouter()
+const route = useRoute()
+const { show: showAlert } = useAlert()
+
+const link = ref<string>(parseQueryString(route.query.url))
+const parse_failed = ref(false)
+const recipe = ref<DomainRecipe | null>(null)
+
+const image_styling = computed(() => {
+  const urls = recipe.value?.imageUrls ?? []
+  if (urls.length && urls[0]) {
+    const image = urls[0]!
+    return {
+      background: `linear-gradient(to bottom, rgba(255, 255, 255, 0.8) 0%, rgba(255, 255, 255, 0) 100%), url('${image}') center/cover no-repeat`,
+    }
+  }
+  return null
+})
+
+function parseLink() {
+  router.push({ path: '/recipes/add', query: { url: link.value } })
+  refreshRecipe()
+}
+
+async function refreshRecipe() {
+  const id = props.id ? parseInt(props.id) : null
+  if (id !== null && id >= 0) {
+    const r = await getRecipe(id)
+    recipe.value = r
+    link.value = r?.link ?? ''
+    return
+  } else if (link.value) {
+    const r = await parseRecipe(link.value)
+    recipe.value = r
+    parse_failed.value = !r
+  } else {
+    recipe.value = null
+  }
+}
+
+async function updateIngredient(ingredient: Ingredient, newIngredient: Ingredient) {
+  if (!recipe.value) return
+  const list = recipe.value.ingredients ?? []
+  recipe.value = { ...recipe.value, ingredients: list.map((i) => (i === ingredient ? newIngredient : i)) }
+}
+
+function deleteIngredient(ingredient: Ingredient) {
+  if (!recipe.value) return
+  const list = recipe.value.ingredients ?? []
+  recipe.value = { ...recipe.value, ingredients: list.filter((i) => i !== ingredient) }
+}
+
+async function saveRecipe() {
+  const saved = recipe.value ? await saveRecipeApi(toRecipeInput(recipe.value)) : null
+  if (saved && saved.id >= 0) {
+    showAlert({ heading: 'Recipe saved', message: 'Your recipe has been saved', type: 'success' })
+    router.push(`/recipes/${saved.id}`)
+    return
+  }
+  showAlert({ heading: 'Error saving recipe', message: 'There was an error saving your recipe', type: 'error' })
+}
+
+function createFromScratch() {
+  recipe.value = {
+    id: -1,
+    name: 'My new recipe',
+    createdById: -1,
+    link: '',
+    ingredients: [],
+    imageUrls: [],
+    serves: 1,
+    dateCreated: new Date(),
+    dateHidden: null,
+  }
+}
+
+function addIngredient() {
+  if (!recipe.value) return
+  const list = recipe.value.ingredients ?? []
+  const draft: Ingredient = { id: -1, name: '', line: '', unit: 'Items', quantity: 0, preparation: '', productId: null, recipeId: null, mealId: null, product: null }
+  recipe.value = { ...recipe.value, ingredients: [draft, ...list] }
+}
+
+async function deleteRecipe() {
+  if (confirm('Are you sure you want to delete this recipe?')) {
+    if (!recipe.value) return
+    await deleteRecipeApi(recipe.value.id)
+    router.push('/recipes')
+  }
+}
+
+onMounted(() => {
+  refreshRecipe()
+})
+
+// Keep recipe in sync if link query changes while on page
+watch(
+  () => route.query.url,
+  (newUrl) => {
+    const parsed = parseQueryString(newUrl)
+    if (parsed) {
+      link.value = parsed
+      refreshRecipe()
+    }
+  }
+)
+
+// expose functions for template binding names (automatic in <script setup>)
+function toRecipeInput(r: DomainRecipe): RecipeInput {
+  return {
+    id: r.id,
+    name: r.name,
+    link: r.link,
+    serves: r.serves,
+    imageUrls: r.imageUrls ?? [],
+    ingredients: r.ingredients ?? [],
+  basedOnRecipe: r.basedOnRecipe ?? null,
+  // let backend set created/hidden dates
+    createdById: r.createdById,
+    createdBy: r.createdBy ?? null,
+  // dateHidden omitted
+    hiddenById: r.hiddenById ?? null,
+    hiddenBy: r.hiddenBy ?? null,
+  }
+}
+</script>
+
+<style scoped>
+input {
+  border: 0;
+  border-bottom: 1px solid #ccc;
+  font-size: large;
+}
+
+input.recipe-link {
+  width: 80%;
+}
+
+.image-container {
+  max-height: 20vh;
+  min-height: 20vh;
+  display: flex;
+  flex-direction: column;
+}
+
+input.recipe-name {
+  width: 100%;
+  font-weight: bold;
+  font-size: larger;
+}
+
+.recipe-link {
+  color: #0000ee;
+  text-decoration: none;
+}
+</style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/recipes/RecipeCard.vue.html b/coverage/munch-ease-frontend/src/components/recipes/RecipeCard.vue.html new file mode 100644 index 0000000..d0ab9d4 --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/recipes/RecipeCard.vue.html @@ -0,0 +1,244 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/recipes/RecipeCard.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components/recipes RecipeCard.vue

+
+ +
+ 0% + Statements + 0/53 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/53 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <div class="recipe-card">
+    <p>
+      <img
+        v-if="recipe.imageUrls && recipe.imageUrls.length"
+        :src="recipe.imageUrls[0] || fallbackEgg"
+      >
+      <img
+        v-else
+        :src="fallbackEgg"
+      >
+    </p>
+    <p class="recipe-name">
+      {{ recipe.name }}
+    </p>
+  </div>
+</template>
+
+<script setup lang="ts">
+import type { RecipeOut } from '@/domain/types'
+type RecipeCardItem = Pick<RecipeOut, 'id' | 'name' | 'imageUrls'>
+
+defineProps<{ recipe: RecipeCardItem }>()
+const fallbackEgg = new URL('@/assets/egg.svg', import.meta.url).toString()
+</script>
+
+<style scoped>
+.recipe-card {
+  display: flex;
+  flex-direction: row;
+  justify-content: space-between;
+  text-align: left;
+  max-height: 10em;
+  margin: 0;
+}
+
+.recipe-card p {
+  margin: auto 0;
+  margin-right: 1em;
+}
+
+li img {
+  display: block;
+  width: 3em;
+  height: 3em;
+  object-fit: cover;
+}
+
+.recipe-name {
+  flex: 1;
+  margin: auto;
+}
+</style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue.html b/coverage/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue.html new file mode 100644 index 0000000..b1d8ed5 --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue.html @@ -0,0 +1,766 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components/recipes RecipeSearchBox.vue

+
+ +
+ 0% + Statements + 0/227 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/227 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <div
+    class="recipe-search-box"
+    @focusout="onFocusOut"
+  >
+    <input
+      v-model="searchTerm"
+      type="text"
+      :placeholder="placeholderText"
+      @keyup.enter="search"
+      @keyup.esc="clear"
+      @focusin="search"
+    >
+    <ul
+      v-if="dropdownVisible"
+      class="dropdown"
+    >
+      <template v-if="recipes.length">
+        <li
+          v-for="recipe in recipes"
+          :key="recipe.id"
+          class="recipe"
+          @mousedown="selectRecipe(recipe)"
+        >
+          <recipe-card :recipe="recipe" />
+        </li>
+        <li
+          v-if="prevCursor || nextCursor"
+          class="pager"
+        >
+          <button
+            class="pager-btn"
+            :disabled="!prevCursor"
+            @mousedown.prevent="loadPrev"
+          >
+            Prev
+          </button>
+          <button
+            class="pager-btn"
+            :disabled="!nextCursor"
+            @mousedown.prevent="loadNext"
+          >
+            Next
+          </button>
+        </li>
+      </template>
+      <li
+        v-else
+        class="empty"
+      >
+        No recipes found
+      </li>
+    </ul>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref, watch, onBeforeUnmount, computed } from 'vue'
+import { listRecipes } from '@/api/sdk'
+import type { Recipe } from '@/domain/types'
+import { useAlert } from '@/composables/useAlert'
+import { usePagination } from '@/composables/usePagination'
+import RecipeCard from './RecipeCard.vue'
+
+const props = withDefaults(defineProps<{ placeholder?: string }>(), {
+  placeholder: 'Add a recipe...',
+})
+const placeholderText: string = props.placeholder ?? 'Add a recipe...'
+
+type RecipeItem = Pick<Recipe, 'id' | 'name' | 'imageUrls'>
+const emit = defineEmits<{
+  (e: 'select-recipe', recipe: RecipeItem): void
+}>()
+
+const searchTerm = ref('')
+const pageSize = 10
+const { items: recipes, next: nextCursor, prev: prevCursor, load, loadNext: loadNextPage, loadPrev: loadPrevPage, reset } = usePagination<RecipeItem>(
+  async (params) => {
+    const page = await listRecipes(params)
+    return {
+      items: (page.items ?? []).map(toRecipeItem),
+      next: page.next ?? null,
+      prev: page.prev ?? null,
+      total: page.total ?? null,
+    }
+  },
+  { pageSize }
+)
+const dropdownVisible = computed(() => recipes.value.length > 0 || (searchTerm.value.length > 0))
+
+const { show: showAlert, scheduleAutoDismiss } = useAlert()
+
+let debounceId: ReturnType<typeof setTimeout> | null = null
+
+watch(
+  searchTerm,
+  (newVal) => {
+    if (!newVal) {
+      recipes.value = []
+      if (debounceId) clearTimeout(debounceId)
+      return
+    }
+    if (debounceId) clearTimeout(debounceId)
+    debounceId = setTimeout(() => {
+      if (newVal === searchTerm.value) {
+        search()
+      }
+    }, 200)
+  }
+)
+
+async function search() {
+  try {
+    await load({ q: searchTerm.value })
+  } catch {
+    // swallow errors and clear suggestions on failures, also notify user
+    reset()
+    showAlert({ type: 'error', heading: 'Recipe search failed', message: 'Please try again shortly.' })
+    scheduleAutoDismiss()
+  }
+}
+
+async function loadNext() {
+  if (!nextCursor.value) return
+  try {
+    await loadNextPage()
+  } catch {
+    showAlert({ type: 'error', heading: 'Unable to load more', message: 'Could not fetch the next page.' })
+    scheduleAutoDismiss()
+  }
+}
+
+async function loadPrev() {
+  if (!prevCursor.value) return
+  try {
+    await loadPrevPage()
+  } catch {
+    showAlert({ type: 'error', heading: 'Unable to load more', message: 'Could not fetch the previous page.' })
+    scheduleAutoDismiss()
+  }
+}
+
+function toRecipeItem(r: Recipe): RecipeItem {
+  return { id: r.id, name: r.name, imageUrls: r.imageUrls ?? [] }
+}
+
+function selectRecipe(recipe: RecipeItem) {
+  emit('select-recipe', recipe)
+  searchTerm.value = ''
+  recipes.value = []
+}
+
+function clear() {
+  searchTerm.value = ''
+  reset()
+}
+
+function onFocusOut() {
+  // keep results while focused; on blur, clear all
+  reset()
+}
+
+onBeforeUnmount(() => {
+  if (debounceId) clearTimeout(debounceId)
+})
+</script>
+
+<style scoped>
+.recipe-search-box {
+  position: relative;
+}
+
+.recipe-search-box input {
+  width: calc(100% - 2em);
+  padding: 8px;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+  font-size: 16px;
+  outline: none;
+}
+
+.recipe-search-box .dropdown {
+  position: absolute;
+  top: 100%;
+  width: 100%;
+  margin: auto;
+  background-color: #fff;
+  border: 1px solid #ccc;
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+  z-index: 1000;
+
+  list-style-type: none;
+  margin: 0;
+  padding: 0;
+  max-height: 40vh;
+  overflow-y: scroll;
+}
+
+.recipe-search-box .dropdown li {
+  padding: 8px;
+  cursor: pointer;
+  border-bottom: 1px solid #ccc;
+}
+
+.recipe-search-box .dropdown li:last-child {
+  border-bottom: none;
+}
+
+.recipe-search-box .dropdown li:hover {
+  background-color: #eee;
+}
+
+.recipe-search-box .dropdown .pager {
+  display: flex;
+  justify-content: space-between;
+  gap: 8px;
+}
+
+.recipe-search-box .dropdown .pager-btn {
+  width: 48%;
+}
+
+.recipe-search-box .dropdown .empty {
+  padding: 8px;
+  color: #666;
+}
+</style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/recipes/RecipesPage.vue.html b/coverage/munch-ease-frontend/src/components/recipes/RecipesPage.vue.html new file mode 100644 index 0000000..5231e47 --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/recipes/RecipesPage.vue.html @@ -0,0 +1,178 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/recipes/RecipesPage.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components/recipes RecipesPage.vue

+
+ +
+ 0% + Statements + 0/31 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/31 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <div>
+    <recipe-search-box
+      placeholder="Search for a recipe..."
+      @select-recipe="onSelectRecipe"
+    />
+    <action-item
+      title="Add new Recipe"
+      :image="addRecipe"
+      @click="onAddRecipe"
+    />
+  </div>
+</template>
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import ActionItem from '@/components/ActionItem.vue'
+import RecipeSearchBox from './RecipeSearchBox.vue'
+import type { Recipe } from '@/domain/types'
+
+const addRecipe = new URL('@/assets/add-recipe.svg', import.meta.url).toString()
+
+const router = useRouter()
+
+function onSelectRecipe(r: Pick<Recipe, 'id'>) {
+  router.push(`/recipes/${r.id}`)
+}
+
+function onAddRecipe() {
+  router.push('/recipes/add')
+}
+</script>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/recipes/index.html b/coverage/munch-ease-frontend/src/components/recipes/index.html new file mode 100644 index 0000000..59129ef --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/recipes/index.html @@ -0,0 +1,161 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/recipes + + + + + + + + + +
+
+

All files munch-ease-frontend/src/components/recipes

+
+ +
+ 0% + Statements + 0/550 +
+ + +
+ 0% + Branches + 0/4 +
+ + +
+ 0% + Functions + 0/4 +
+ + +
+ 0% + Lines + 0/550 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
EditRecipePage.vue +
+
0%0/2390%0/10%0/10%0/239
RecipeCard.vue +
+
0%0/530%0/10%0/10%0/53
RecipeSearchBox.vue +
+
0%0/2270%0/10%0/10%0/227
RecipesPage.vue +
+
0%0/310%0/10%0/10%0/31
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue.html b/coverage/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue.html new file mode 100644 index 0000000..93681ca --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue.html @@ -0,0 +1,910 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components/shopping CurrentShoppingListPage.vue

+
+ +
+ 0% + Statements + 0/275 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/275 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <h3>Full shopping list</h3>
+
+  <h4>Included Meals</h4>
+  <meal-selection-list
+    :checked="includedMeals"
+    :meals="availableMeals"
+    @meal-selected="mealSelected"
+    @meal-unselected="mealUnselected"
+  />
+
+  <ul class="full-shopping-list">
+    <li
+      v-for="group in outstandingItemGroups"
+      :key="groupKey(group)"
+      class="selectable"
+      :class="{ selected: isSelected(group) }"
+      @click="toggleSelect(group)"
+    >
+      <shopping-list-item :shopping-list-item-group="group" />
+    </li>
+  </ul>
+
+  <div v-if="outstandingItemGroups.length === 0">
+    <p>No items to purchase</p>
+  </div>
+
+  <div class="purchased-slider">
+    <span v-if="purchasedItemGroups.length === 0" />
+    <button
+      v-else-if="showPurchased"
+      @click="showPurchased = false"
+    >
+      ⏶ Hide Purchased ⏶
+    </button>
+    <button
+      v-else
+      @click="showPurchased = true"
+    >
+      ⏷ Show Purchased ⏷
+    </button>
+
+    <div v-if="showPurchased && purchasedItemGroups.length > 0">
+      <h4>Purchased Meals</h4>
+      <meal-selection-list
+        :checked="includedMeals"
+        :meals="purchasedMeals"
+        @meal-selected="mealSelected"
+        @meal-unselected="mealUnselected"
+      />
+
+      <h4>Purchased Items</h4>
+      <ul class="full-shopping-list">
+        <li
+          v-for="item in purchasedItemGroups"
+          :key="groupKey(item)"
+        >
+          <shopping-list-item :shopping-list-item-group="item" />
+        </li>
+      </ul>
+    </div>
+  </div>
+
+  <div
+    v-if="selected.length"
+    class="spacer"
+  >
+&nbsp;
+  </div>
+
+  <!-- Display 'Stocked', 'Purchased' and 'Cancel' buttons in a vertical stack fixed to the bottom of the screen when any elements are selected -->
+  <div
+    v-if="selected.length"
+    class="footer-buttons"
+  >
+    <p v-if="selected.length === 1">
+      Mark '{{ selected[0] ? groupLabel(selected[0]) : '' }}' as
+    </p>
+    <p v-else>
+      Mark {{ selected.length }} items as
+    </p>
+
+    <div class="button-group">
+      <button @click="markFound">
+        <img :src="houseCheck"><br>
+        Found
+      </button>
+
+      <button @click="markPurchased">
+        <img :src="shoppingCart"><br>
+        Purchased
+      </button>
+
+      <button @click="selected = []">
+        <img :src="closeIcon"><br>
+        Cancel
+      </button>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref, computed, onBeforeMount } from 'vue'
+import { useRouter } from 'vue-router'
+import { useAlert } from '@/composables/useAlert'
+import { useShopping } from '@/composables/useShopping'
+import { getUpcomingMeals } from '@/api/sdk'
+import { type Group } from '@/composables/useShopping'
+type UIMeal = import('@/domain/types').Meal
+import MealSelectionList from './MealSelectionList.vue'
+import ShoppingListItem from './ShoppingListItem.vue'
+
+const houseCheck = new URL('@/assets/house-check.svg', import.meta.url).toString()
+const shoppingCart = new URL('@/assets/shopping-cart.svg', import.meta.url).toString()
+const closeIcon = new URL('@/assets/close.svg', import.meta.url).toString()
+
+const router = useRouter()
+const { show: showAlert } = useAlert()
+const { getCurrentShoppingList, requestMeal, unrequestMeal, purchaseFromGroups, groupsFrom, mealsFrom } = useShopping()
+
+const from = new Date()
+from.setTime(0)
+const to = new Date()
+to.setDate(to.getDate() + 7)
+
+type Meal = import('@/domain/types').Meal
+const shoppingList = ref<import('@/domain/types').CurrentShoppingListDTO | null>(null)
+const upcomingMeals = ref<Meal[]>([])
+const selected = ref<Group[]>([])
+const showPurchased = ref(false)
+
+const groupsMatch = (a: Group, b: Group) => {
+  if (a.type !== b.type) return false
+  if (a.type === 'name' && b.type === 'name') return a.name === b.name
+  if (a.type === 'product' && b.type === 'product') return a.product.id === b.product.id
+  return false
+}
+
+const outstandingItemGroups = computed<Group[]>(() => groupsFrom(shoppingList.value?.outstandingItems))
+const purchasedItemGroups = computed<Group[]>(() => groupsFrom(shoppingList.value?.purchasedItems))
+const purchasedMeals = computed<UIMeal[]>(() => mealsFrom(shoppingList.value?.purchasedItems))
+const availableMeals = computed(() => {
+  const lookup: Record<string | number, Meal> = shoppingList.value?.mealsLookup ?? {}
+  const meals: Record<string | number, Meal> = { ...lookup }
+  upcomingMeals.value?.forEach((m) => {
+    if (!meals[m.id]) meals[m.id] = m
+  })
+  return Object.values(meals)
+  .filter((m) => !m.purchaseDate)
+    .sort((a, b) => ((a.suggestedDate && a.suggestedDate.getTime()) || 0) - ((b.suggestedDate && b.suggestedDate.getTime()) || 0))
+})
+const includedMeals = computed(() => (shoppingList.value?.requestedMeals ?? []).map((i) => i.meal).filter((m): m is Meal => !!m))
+
+async function loadData() {
+  upcomingMeals.value = await getUpcomingMeals(from, to)
+  shoppingList.value = await getCurrentShoppingList()
+}
+
+async function mealSelected(meal: { id: number }) {
+  await requestMeal(meal.id)
+  await loadData()
+}
+
+async function mealUnselected(meal: { id: number }) {
+  await unrequestMeal(meal.id)
+  await loadData()
+}
+
+async function markFound() {
+  const result = await purchaseFromGroups(selected.value)
+  if (!result) {
+    showAlert({ type: 'error', message: 'No items selected.' })
+    return
+  }
+  selected.value = []
+  await loadData()
+}
+
+async function markPurchased() {
+  const shopping = await purchaseFromGroups(selected.value)
+  if (!shopping || !shopping.id) {
+    showAlert({ type: 'error', message: 'Failed to purchase.' })
+    return
+  }
+  selected.value = []
+  router.push(`/shopping/${shopping.id}`)
+}
+
+function toggleSelect(item: Group) {
+  const index = selected.value.findIndex((i) => groupsMatch(i, item))
+  if (index === -1) selected.value.push(item)
+  else selected.value.splice(index, 1)
+}
+
+function isSelected(item: Group) {
+  return selected.value.some((i) => groupsMatch(i, item))
+}
+
+function groupKey(group: Group) {
+  if (group.type === 'product') return `p-${group.product.id}`
+  if (group.type === 'name') return `n-${group.name}`
+  return Math.random().toString(36)
+}
+
+function groupLabel(group: Group) {
+  if (group.type === 'product') return group.product.name ?? 'item'
+  if (group.type === 'name') return group.name
+  return 'item'
+}
+
+onBeforeMount(loadData)
+</script>
+
+<style scoped>
+.full-shopping-list {
+  padding: 0;
+}
+
+.full-shopping-list li {
+  list-style-type: none;
+
+  outline: 1px solid #ccc;
+  border-radius: 0.5em;
+  margin-bottom: 1em;
+}
+
+.full-shopping-list li.selectable {
+  cursor: pointer;
+  outline: 1px solid #ccc;
+}
+
+.full-shopping-list li.selected {
+  background-color: #f0f0f0;
+  outline-width: 3px;
+}
+
+.footer-buttons {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  padding: 1ex;
+  background-color: #f0f0f0;
+  border-top: 1px solid #ccc;
+}
+
+.footer-buttons p {
+  margin: 0;
+  text-align: left;
+  font-style: italic;
+}
+
+.button-group {
+  /* Display as vertical fixed to the bottom of the screen */
+  display: flex;
+}
+
+.button-group button {
+  flex: 1;
+  padding: 1em;
+  border: 1px solid #ccc;
+  border-radius: 0.5em;
+  background-color: #f0f0f0;
+  cursor: pointer;
+}
+
+button img {
+  width: 2em;
+  height: 2em;
+}
+
+.spacer {
+  height: 12em;
+}
+</style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/shopping/MealSelectionList.vue.html b/coverage/munch-ease-frontend/src/components/shopping/MealSelectionList.vue.html new file mode 100644 index 0000000..019d7b9 --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/shopping/MealSelectionList.vue.html @@ -0,0 +1,574 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/shopping/MealSelectionList.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components/shopping MealSelectionList.vue

+
+ +
+ 0% + Statements + 0/163 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/163 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <ul>
+    <li
+      v-for="meal in meals"
+      :key="meal.id"
+    >
+      <!-- Have a checkbox and card for each meal, show the image and name -->
+      <!-- Emit meal-selected event on checked and meal-unselected on unchecked -->
+      <input
+        :id="String(meal.id)"
+        type="checkbox"
+        :checked="isChecked(meal)"
+        :disabled="!!disabled"
+        @change="mealCheckChanged"
+      >
+      <label
+        :for="String(meal.id)"
+        :style="getImageStyling(meal)"
+      >
+        {{ formatDate(meal.suggestedDate) }}
+      </label>
+    </li>
+  </ul>
+</template>
+
+<script setup lang="ts">
+import type { Meal } from '@/domain/types'
+
+// MealSelectionList only needs minimal fields from Meal; recipes and extraIngredients are optional for image lookup
+type MealDisplay = Pick<Meal, 'id' | 'suggestedDate'> & Partial<Pick<Meal, 'recipes' | 'extraIngredients'>>
+
+const props = defineProps<{ meals: MealDisplay[]; checked: MealDisplay[]; disabled?: boolean }>()
+const emit = defineEmits<{
+  (e: 'meal-selected', meal: MealDisplay): void
+  (e: 'meal-unselected', meal: MealDisplay): void
+}>()
+
+const nth = (d: number) => {
+  if (d > 3 && d < 21) return 'th'
+  switch (d % 10) {
+    case 1:
+      return 'st'
+    case 2:
+      return 'nd'
+    case 3:
+      return 'rd'
+    default:
+      return 'th'
+  }
+}
+
+
+const formatDate = (date: Date | null) => {
+  if (!date) return ''
+  const day = date.getDate()
+  return `${date.toLocaleDateString('en-AU', { weekday: 'short' })} ${day}${nth(day)}`
+}
+
+const getUrl = (meal: MealDisplay) => {
+  // First non empty value in meal.recipes[*].recipe image URLs
+  if (meal.recipes) {
+    for (const mr of meal.recipes) {
+      const imgs = mr.recipe?.imageUrls
+      if (imgs && imgs.length && imgs[0]) {
+        return imgs[0]
+      }
+    }
+  }
+
+  // First meal.extraIngredients with a product with an image
+  if (meal.extraIngredients) {
+    for (const ingredient of meal.extraIngredients) {
+      const p = ingredient.product
+      if (p?.imgLarge) return p.imgLarge
+      if (p?.imgSmall) return p.imgSmall
+    }
+  }
+  return null
+}
+
+function getImageStyling(meal: MealDisplay) {
+  const imageUrl = getUrl(meal)
+  if (!imageUrl) return null
+  const opacity = 0.7
+  return {
+    background: `linear-gradient(to bottom, rgba(255, 255, 255, ${opacity}) 0%, rgba(255, 255, 255, ${opacity}) 100%), url('${imageUrl}') center/cover no-repeat`,
+  }
+}
+
+function mealCheckChanged(event: Event) {
+  const target = event.target
+  if (!target || !(target instanceof HTMLInputElement)) return
+  const mealId = parseInt(target.id)
+  const meal = props.meals.find((m) => m.id === mealId)
+  if (!meal) return
+  if (target.checked) emit('meal-selected', meal)
+  else emit('meal-unselected', meal)
+}
+
+function isChecked(meal: MealDisplay) {
+  return props.checked.some((m) => m.id === meal.id)
+}
+</script>
+
+<style scoped>
+ul {
+  padding: 0;
+}
+
+li {
+  display: inline-block;
+  list-style-type: none;
+  border: 1px solid #ccc;
+  border-radius: 0.5em;
+  margin-bottom: 1em;
+  padding: none;
+  overflow: hidden;
+  text-align: center;
+}
+
+/* Hide the default checkbox formatting, and format the card instead */
+input[type='checkbox'] {
+  display: none;
+}
+
+label {
+  display: inline-block;
+  padding: 0.1vh 0.3em;
+  /* Help the visibility of the text over the image */
+  background-color: rgba(255, 255, 255, 0.9);
+  border: 3px solid transparent;
+  border-radius: 0.5em;
+  margin: 0;
+  font-weight: normal;
+  cursor: pointer;
+  color: #3d5447;
+}
+
+input[type='checkbox']:checked + label {
+  border: 3px solid #3d5447;
+  text-shadow: #ccc 0 0 0.1em;
+}
+
+input[type='checkbox']:disabled + label {
+  cursor: not-allowed;
+}
+
+/* Show the image as the background image of the card */
+.meal-image {
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
+}
+
+/* Position the text in the center of the card */
+label {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  font-size: larger;
+  font-weight: bold;
+}
+</style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue.html b/coverage/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue.html new file mode 100644 index 0000000..baab8a7 --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue.html @@ -0,0 +1,355 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/shopping/MyShoppingPage.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components/shopping MyShoppingPage.vue

+
+ +
+ 0% + Statements + 0/90 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/90 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <div>
+    <h1>My Shopping List</h1>
+    <router-link :to="`/shopping/current`">
+      Full Shopping List
+    </router-link>
+    <editable-ingredients-panel
+      :ingredients="ingredients"
+      @on-add="addIngredient"
+      @on-delete="deleteIngredient"
+      @on-update-ingredient="updateIngredient"
+      @on-editing="onEditing"
+    />
+  </div>
+
+  <!--
+        # Functions
+        * Add a random item to next shop
+        * Add meals to next shop
+            * Show cards for the next 7 meals
+            * Slider / drawer for more meals
+            * Check meal to add
+            * Update shopping list automatically as meals change
+            * Visual indicator for meals that are already in the list
+            * Visual indicator for purchased meals
+        * Aggregate items from meals and random items into a single list of products
+        * For each product, need to have visibility of
+            * Name 
+            * Link
+            * Image
+            * Quantity
+            * Source meal / person
+            * Date added / for
+        * Need to be able to mark list as done
+            * Keeps history - track purchased meals
+            * Clears list
+
+        * History view of purchased lists (seperate page ofc)
+    -->
+</template>
+
+<script setup lang="ts">
+import { ref, onBeforeMount } from 'vue'
+import { useRouter } from 'vue-router'
+import { useAuth } from '@/composables/useAuth'
+import { useShopping } from '@/composables/useShopping'
+import type { Ingredient } from '@/domain/types'
+import EditableIngredientsPanel from '@/components/ingredients/EditableIngredientsPanel.vue'
+
+const router = useRouter()
+const { loadUser } = useAuth()
+const { getMyShoppingList, saveMyShoppingList } = useShopping()
+
+const person = ref<{ id?: number; name?: string } | null>(null)
+const ingredients = ref<Ingredient[]>([])
+
+async function updateShoppingList(save = false) {
+  const newIngredients = save ? await saveMyShoppingList(ingredients.value) : await getMyShoppingList()
+  ingredients.value = newIngredients.map((i) => ({ ...i }))
+}
+
+function addIngredient() {
+  ingredients.value = [
+    { id: -1, name: '', line: '', quantity: 1, unit: 'Items', preparation: '', product: null },
+    ...ingredients.value,
+  ]
+}
+
+function deleteIngredient(ingredient: Ingredient) {
+  ingredients.value = ingredients.value.filter((i) => i !== ingredient)
+}
+
+function updateIngredient(oldIngredient: Ingredient, newIngredient: Ingredient) {
+  ingredients.value = ingredients.value.map((source) => (source === oldIngredient ? newIngredient : source))
+}
+
+async function onEditing(isStartingEdit: boolean) {
+  await updateShoppingList(!isStartingEdit)
+  if (isStartingEdit && ingredients.value.length === 0) addIngredient()
+}
+
+onBeforeMount(async () => {
+  const u = await loadUser()
+  if (!u) return router.push({ name: 'login' })
+  person.value = u
+  await updateShoppingList()
+})
+</script>
+
+<style scoped></style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue.html b/coverage/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue.html new file mode 100644 index 0000000..90554aa --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue.html @@ -0,0 +1,286 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components/shopping PurchasedShoppingListPage.vue

+
+ +
+ 0% + Statements + 0/67 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/67 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <h3>Purchased {{ shoppingList?.createdDate ? ago(shoppingList.createdDate) : '' }}</h3>
+
+  <div v-if="includedMeals.length > 0">
+    <h4>Included Meals</h4>
+    <meal-selection-list
+      :checked="includedMeals"
+      :meals="includedMeals"
+      :disabled="true"
+    />
+  </div>
+
+  <ul class="full-shopping-list">
+    <li
+      v-for="item in listByProduct"
+      :key="groupKey(item)"
+    >
+      <shopping-list-item-comp :shopping-list-item-group="item" />
+    </li>
+  </ul>
+</template>
+
+<script setup lang="ts">
+import { ref, computed, onBeforeMount } from 'vue'
+import { useRoute } from 'vue-router'
+import { ago } from '@/dateformats'
+import { useShopping } from '@/composables/useShopping'
+import { parseRouteId } from '@/router/helpers'
+import type { Group } from '@/composables/useShopping'
+import type { Meal } from '@/domain/types'
+import MealSelectionList from './MealSelectionList.vue'
+import ShoppingListItemComp from './ShoppingListItem.vue'
+
+const route = useRoute()
+const { getShoppingList, groupsFrom, mealsFrom } = useShopping()
+const shoppingList = ref<import('@/domain/types').ShoppingListWithRefs | null>(null)
+
+const includedMeals = computed<Meal[]>(() => mealsFrom(shoppingList.value?.items))
+const listByProduct = computed(() => groupsFrom(shoppingList.value?.items))
+
+onBeforeMount(async () => {
+  const id = parseRouteId(route.params.id)
+  if (id !== null) {
+    shoppingList.value = await getShoppingList(id)
+  }
+})
+
+function groupKey(group: Group) {
+  if (group.type === 'product') return `p-${group.product.id}`
+  if (group.type === 'name') return `n-${group.name}`
+  return Math.random().toString(36)
+}
+</script>
+
+<style scoped>
+.full-shopping-list li {
+  list-style-type: none;
+
+  border: 1px solid #ccc;
+  border-radius: 0.5em;
+  margin-bottom: 1em;
+}
+
+.full-shopping-list {
+  padding: 0;
+}
+</style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue.html b/coverage/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue.html new file mode 100644 index 0000000..10e2a02 --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue.html @@ -0,0 +1,742 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/shopping/ShoppingListItem.vue + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/components/shopping ShoppingListItem.vue

+
+ +
+ 0% + Statements + 0/219 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/219 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
<template>
+  <!-- Show a card of the product with the total, taking up the available space and have an expanding section to view sources -->
+  <div class="shopping-list-item">
+    <img
+      :src="imageSrc"
+      class="product-image"
+    >
+    <div class="product-details">
+      <h3 class="header">
+        <strong>
+          <a
+            v-if="shoppingListItemGroup.type === 'product' && shoppingListItemGroup.product?.link"
+            :href="shoppingListItemGroup.product?.link"
+          >{{ shoppingListItemGroup.product?.name }}</a>
+          <span v-else>{{ shoppingListItemGroup.type === 'name' ? shoppingListItemGroup.name : '' }}</span> </strong>,
+        <small>
+          <span
+            v-for="(total, index) in remainingRequiredTotals"
+            :key="index"
+          >
+            <span v-if="index">, </span>
+            <span>{{ formatQuantity(total.quantity) }}&nbsp;{{ total.unit }}</span>
+          </span>
+          <span
+            v-if="purchased.length > 0"
+            class="found-marker partial"
+          >✓ {{ getFriendlyDate(lastPurchased) }}</span>
+        </small>
+      </h3>
+      <p
+        v-if="required.length > 0"
+        class="sources"
+      >
+        <strong>Need: </strong>
+        <span
+          v-for="(source, index) in required"
+          :key="source.id"
+        >
+          <span v-if="index">, and </span>
+          <span v-if="source.person">
+            {{ formatQuantity(source.ingredient.quantity) }}&nbsp;{{ source.ingredient.unit }} for
+            {{ source.person.name }}
+          </span>
+          <span v-else-if="source.recipe">
+            {{ formatQuantity(source.ingredient.quantity) }}&nbsp;{{ source.ingredient.unit }} in
+            <router-link :to="`/recipes/${source.recipe.id}/`">{{
+              source.recipe.name
+            }}</router-link>
+            for
+            <router-link :to="`/meals/${source.meal?.id}/`">{{
+              source.meal?.suggestedDate
+                ? source.meal.suggestedDate.toLocaleDateString('en-AU', {
+                  weekday: 'long',
+                  month: 'long',
+                  day: 'numeric',
+                })
+                : ''
+            }}</router-link>
+          </span>
+          <span v-else-if="source.meal">
+            {{ source.ingredient.line }} for
+            <router-link :to="`/meals/${source.meal?.id}/`">{{
+              source.meal?.suggestedDate
+                ? source.meal.suggestedDate.toLocaleDateString('en-AU', {
+                  weekday: 'long',
+                  month: 'long',
+                  day: 'numeric',
+                })
+                : ''
+            }}</router-link>
+          </span>
+        </span>
+      </p>
+      <p v-if="purchased.length > 0">
+        <strong>Already found or purchased: </strong>
+        <span
+          v-for="(source, index) in purchased"
+          :key="source.id"
+        >
+          <span v-if="index">, and </span>
+          <span v-if="source.person">
+            {{ formatQuantity(source.ingredient.quantity) }}&nbsp;{{ source.ingredient.unit }} for
+            {{ source.person.name }}
+          </span>
+          <span v-else-if="source.recipe">
+            {{ formatQuantity(source.ingredient.quantity) }}&nbsp;{{ source.ingredient.unit }} in
+            <router-link :to="`/recipes/${source.recipe.id}/`">{{
+              source.recipe.name
+            }}</router-link>
+            for
+            <router-link :to="`/meals/${source.meal?.id ?? ''}/`">{{
+              source.meal?.suggestedDate
+                ? source.meal.suggestedDate.toLocaleDateString('en-AU', {
+                  weekday: 'long',
+                  month: 'long',
+                  day: 'numeric',
+                })
+                : ''
+            }}</router-link>
+          </span>
+          <span v-else-if="source.meal">
+            {{ source.ingredient.line }} for
+            <router-link :to="`/meals/${source.meal.id}/`">{{
+              source.meal.suggestedDate
+                ? source.meal.suggestedDate.toLocaleDateString('en-AU', {
+                  weekday: 'long',
+                  month: 'long',
+                  day: 'numeric',
+                })
+                : ''
+            }}</router-link>
+          </span>
+        </span>
+      </p>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { computed } from 'vue'
+import { ago } from '@/dateformats'
+import { calculateTotals } from '@/units'
+import type { Group } from '@/composables/useShopping'
+
+const props = defineProps<{ shoppingListItemGroup: Group }>()
+
+const fallbackImg = new URL('@/assets/missing-product.svg', import.meta.url).toString()
+const imageSrc = computed(() => {
+  if (props.shoppingListItemGroup.type === 'product') {
+    return props.shoppingListItemGroup.product?.imgSmall ?? fallbackImg
+  }
+  return fallbackImg
+})
+
+const remainingRequiredTotals = computed(() =>
+  calculateTotals(
+    props.shoppingListItemGroup.shoppingListItems.map((item) => ({
+      quantity: item.ingredient.quantity,
+      unit: String(item.ingredient.unit || 'items'),
+    }))
+  )
+)
+
+const required = computed(() => props.shoppingListItemGroup.shoppingListItems.filter((item) => !item.listId))
+
+const purchased = computed(() => props.shoppingListItemGroup.shoppingListItems.filter((item) => item.listId))
+
+const lastPurchased = computed(() => {
+  const purchasedItems = props.shoppingListItemGroup.shoppingListItems.filter((item) => item.listId)
+  if (purchasedItems.length === 0) return null
+  return purchasedItems.reduce<Date | null>((latest, item) => {
+    const itemDate: Date | null = (item?.meal?.suggestedDate ?? item?.createdDate) || null
+    return !latest || (itemDate && itemDate > latest) ? itemDate : latest
+  }, null)
+})
+
+function getFriendlyDate(date: Date | null) {
+  if (!date) return ''
+  return ago(date)
+}
+
+function formatQuantity(quantity: number) {
+  const log10 = Math.log10(quantity)
+  if (log10 < 0) return quantity.toPrecision(2)
+  if (log10 < 1) return quantity.toFixed(1)
+  return quantity.toFixed(0)
+}
+</script>
+
+<style scoped>
+/* Show the product image to the left, then the product name and size to the right */
+
+.shopping-list-item {
+  position: relative;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 1em;
+}
+
+.product-image {
+  max-width: 5em;
+  max-height: 4em;
+  margin-right: 1em;
+}
+
+.product-details {
+  flex-grow: 1;
+  text-align: left;
+}
+
+.header {
+  margin: 0;
+}
+
+.found-marker {
+  margin: 1ex;
+  padding-top: 0.6ex;
+  padding-bottom: 0.5ex;
+  padding-left: 1em;
+  padding-right: 1em;
+  border-radius: 25px;
+
+  text-align: center;
+  white-space: nowrap;
+  font-size: smaller;
+  color: white;
+  font-weight: bold;
+  z-index: 1000;
+}
+
+.found-marker.found {
+  background-color: green;
+}
+
+.found-marker.partial {
+  background-color: darkgoldenrod;
+}
+</style>
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/shopping/index.html b/coverage/munch-ease-frontend/src/components/shopping/index.html new file mode 100644 index 0000000..1ddaddb --- /dev/null +++ b/coverage/munch-ease-frontend/src/components/shopping/index.html @@ -0,0 +1,176 @@ + + + + + + Code coverage report for munch-ease-frontend/src/components/shopping + + + + + + + + + +
+
+

All files munch-ease-frontend/src/components/shopping

+
+ +
+ 0% + Statements + 0/814 +
+ + +
+ 0% + Branches + 0/5 +
+ + +
+ 0% + Functions + 0/5 +
+ + +
+ 0% + Lines + 0/814 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
CurrentShoppingListPage.vue +
+
0%0/2750%0/10%0/10%0/275
MealSelectionList.vue +
+
0%0/1630%0/10%0/10%0/163
MyShoppingPage.vue +
+
0%0/900%0/10%0/10%0/90
PurchasedShoppingListPage.vue +
+
0%0/670%0/10%0/10%0/67
ShoppingListItem.vue +
+
0%0/2190%0/10%0/10%0/219
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/composables/index.html b/coverage/munch-ease-frontend/src/composables/index.html new file mode 100644 index 0000000..9219f62 --- /dev/null +++ b/coverage/munch-ease-frontend/src/composables/index.html @@ -0,0 +1,161 @@ + + + + + + Code coverage report for munch-ease-frontend/src/composables + + + + + + + + + +
+
+

All files munch-ease-frontend/src/composables

+
+ +
+ 11.88% + Statements + 29/244 +
+ + +
+ 50% + Branches + 5/10 +
+ + +
+ 57.14% + Functions + 4/7 +
+ + +
+ 11.88% + Lines + 29/244 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
useAlert.ts +
+
100%29/2971.42%5/7100%4/4100%29/29
useAuth.ts +
+
0%0/230%0/10%0/10%0/23
usePagination.ts +
+
0%0/1070%0/10%0/10%0/107
useShopping.ts +
+
0%0/850%0/10%0/10%0/85
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/composables/useAlert.ts.html b/coverage/munch-ease-frontend/src/composables/useAlert.ts.html new file mode 100644 index 0000000..bf5ea79 --- /dev/null +++ b/coverage/munch-ease-frontend/src/composables/useAlert.ts.html @@ -0,0 +1,172 @@ + + + + + + Code coverage report for munch-ease-frontend/src/composables/useAlert.ts + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/composables useAlert.ts

+
+ +
+ 100% + Statements + 29/29 +
+ + +
+ 71.42% + Branches + 5/7 +
+ + +
+ 100% + Functions + 4/4 +
+ + +
+ 100% + Lines + 29/29 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +301x +1x +1x +1x +1x +1x +1x +1x +1x +2x +2x +2x +1x +2x +2x +2x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +2x +2x + 
import { ref } from 'vue'
+ 
+type AlertType = 'success' | 'error' | 'info'
+export type AlertMessage = { heading?: string; message: string; type: AlertType }
+ 
+// Singleton reactive alert state for the app
+const current = ref<(AlertMessage & { _ts: number }) | null>(null)
+let timeoutId: ReturnType<typeof setTimeout> | null = null
+ 
+function show(message: AlertMessage) {
+  current.value = { ...message, _ts: Date.now() }
+}
+ 
+function clear() {
+  current.value = null
+}
+ 
+function scheduleAutoDismiss(ms = 5000) {
+  if (timeoutId) clearTimeout(timeoutId)
+  if (!current.value) return
+  timeoutId = setTimeout(() => {
+    clear()
+    timeoutId = null
+  }, ms)
+}
+ 
+export function useAlert() {
+  return { current, show, clear, scheduleAutoDismiss }
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/composables/useAuth.ts.html b/coverage/munch-ease-frontend/src/composables/useAuth.ts.html new file mode 100644 index 0000000..c79732b --- /dev/null +++ b/coverage/munch-ease-frontend/src/composables/useAuth.ts.html @@ -0,0 +1,154 @@ + + + + + + Code coverage report for munch-ease-frontend/src/composables/useAuth.ts + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/composables useAuth.ts

+
+ +
+ 0% + Statements + 0/23 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/23 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { ref } from 'vue'
+import { currentUser as apiCurrentUser, login as apiLogin } from '@/api/auth'
+import type { Person } from '@/domain/types'
+
+const user = ref<Person | null>(null)
+let initialized = false
+
+export async function loadUser() {
+  if (!initialized) {
+    user.value = await apiCurrentUser()
+    initialized = true
+  }
+  return user.value
+}
+
+export async function login(username: string) {
+  user.value = await apiLogin(username)
+  return user.value
+}
+
+export function useAuth() {
+  return { user, loadUser, login }
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/composables/usePagination.ts.html b/coverage/munch-ease-frontend/src/composables/usePagination.ts.html new file mode 100644 index 0000000..2fad130 --- /dev/null +++ b/coverage/munch-ease-frontend/src/composables/usePagination.ts.html @@ -0,0 +1,406 @@ + + + + + + Code coverage report for munch-ease-frontend/src/composables/usePagination.ts + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/composables usePagination.ts

+
+ +
+ 0% + Statements + 0/107 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/107 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { ref, shallowRef, type Ref, type ShallowRef } from 'vue'
+import type { Page } from '@/domain/pagination'
+
+export type PageParams = { cursor?: string | null; limit?: number } & Record<string, unknown>
+export type PageFetcher<T> = (params: PageParams) => Promise<Page<T>>
+
+export function usePagination<T>(
+  fetchPage: PageFetcher<T>,
+  options?: { pageSize?: number }
+): {
+  items: Ref<T[]>
+  next: Ref<string | null>
+  prev: Ref<string | null>
+  total: Ref<number | null>
+  loading: Ref<boolean>
+  error: Ref<unknown>
+  load: (baseParams?: PageParams) => Promise<void>
+  loadNext: () => Promise<void>
+  loadPrev: () => Promise<void>
+  reset: () => void
+} {
+  function makeItemsRef<U>(): ShallowRef<U[]> {
+    return shallowRef<U[]>([])
+  }
+  const items: Ref<T[]> = makeItemsRef<T>()
+  const next: Ref<string | null> = ref<string | null>(null)
+  const prev: Ref<string | null> = ref<string | null>(null)
+  const total: Ref<number | null> = ref<number | null>(null)
+  const loading: Ref<boolean> = ref<boolean>(false)
+  const error: Ref<unknown> = ref<unknown>(null)
+
+  const pageSize = options?.pageSize
+  const lastBaseParams = ref<PageParams>({})
+
+  function assignFromPage(page: Page<T>) {
+    items.value = page.items ?? []
+    next.value = page.next ?? null
+    prev.value = page.prev ?? null
+    total.value = page.total ?? null
+  }
+
+  async function load(baseParams: PageParams = {}) {
+    loading.value = true
+    error.value = null
+    // keep base params without cursor; limit comes from options unless explicitly provided
+    const { limit: _l, ...rest } = baseParams
+    lastBaseParams.value = rest
+    try {
+      const params: PageParams = { ...rest }
+      if (typeof _l === 'number') params.limit = _l
+      else if (typeof pageSize === 'number') params.limit = pageSize
+      const page = await fetchPage(params)
+      assignFromPage(page)
+    } catch (e) {
+      error.value = e
+      items.value = []
+      next.value = null
+      prev.value = null
+      total.value = null
+    } finally {
+      loading.value = false
+    }
+  }
+
+  async function loadWithCursor(cursor: string | null) {
+    if (!cursor) return
+    loading.value = true
+    error.value = null
+    try {
+      const params: PageParams = {
+        ...lastBaseParams.value,
+        cursor,
+      }
+      if (typeof pageSize === 'number') params.limit = pageSize
+      const page = await fetchPage(params)
+      assignFromPage(page)
+    } catch (e) {
+      error.value = e
+      items.value = []
+      next.value = null
+      prev.value = null
+      total.value = null
+    } finally {
+      loading.value = false
+    }
+  }
+
+  async function loadNext() {
+    await loadWithCursor(next.value)
+  }
+
+  async function loadPrev() {
+    await loadWithCursor(prev.value)
+  }
+
+  function reset() {
+    items.value = []
+    next.value = null
+    prev.value = null
+    total.value = null
+    loading.value = false
+    error.value = null
+    lastBaseParams.value = {}
+  }
+
+  return { items, next, prev, total, loading, error, load, loadNext, loadPrev, reset }
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/composables/useShopping.ts.html b/coverage/munch-ease-frontend/src/composables/useShopping.ts.html new file mode 100644 index 0000000..6650a8c --- /dev/null +++ b/coverage/munch-ease-frontend/src/composables/useShopping.ts.html @@ -0,0 +1,340 @@ + + + + + + Code coverage report for munch-ease-frontend/src/composables/useShopping.ts + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/composables useShopping.ts

+
+ +
+ 0% + Statements + 0/85 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/85 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import * as sdk from '@/api/sdk'
+import type { ShoppingListItemWithRefs, Product, Meal } from '@/domain/types'
+
+export type GroupByProduct = { type: 'product'; product: Product; shoppingListItems: ShoppingListItemWithRefs[] }
+export type GroupByName = { type: 'name'; name: string; shoppingListItems: ShoppingListItemWithRefs[] }
+export type Group = GroupByProduct | GroupByName
+
+export function groupsToItems(groups: Group[]): ShoppingListItemWithRefs[] {
+  return groups.map((g) => g.shoppingListItems).flat()
+}
+
+export function uniqueMeals(shoppingListItems: ShoppingListItemWithRefs[]): Meal[] {
+  const mealsWithDuplicates = shoppingListItems.map((item) => item.meal).filter((m): m is Meal => !!m)
+  const mealsLookup: Record<string | number, Meal> = mealsWithDuplicates.reduce<Record<string | number, Meal>>(
+    (acc, meal) => {
+      acc[meal.id] ??= meal
+      return acc
+    },
+    {}
+  )
+  return Object.values(mealsLookup)
+}
+
+export function itemsToGroups(shoppingListItems: ShoppingListItemWithRefs[]): Group[] {
+  const ingredients_by_product_id: Record<string | number, GroupByProduct> = {}
+  const ingredients_by_name: Record<string, GroupByName> = {}
+  for (const item of shoppingListItems) {
+    if (item.ingredient?.product) {
+      let group = ingredients_by_product_id[item.ingredient.product.id]
+      if (!group) {
+        group = ingredients_by_product_id[item.ingredient.product.id] = {
+          type: 'product',
+          product: item.ingredient.product,
+          shoppingListItems: [],
+        }
+      }
+      group.shoppingListItems.push(item)
+    } else {
+      const name = item.ingredient?.name ?? ''
+      let group = ingredients_by_name[name]
+      if (!group) {
+        group = ingredients_by_name[name] = {
+          type: 'name',
+          name,
+          shoppingListItems: [],
+        }
+      }
+      group.shoppingListItems.push(item)
+    }
+  }
+  return [...Object.values(ingredients_by_product_id), ...Object.values(ingredients_by_name)]
+}
+
+export function useShopping() {
+  const groupsFrom = (items?: ShoppingListItemWithRefs[]): Group[] => itemsToGroups(items ?? [])
+  const mealsFrom = (items?: ShoppingListItemWithRefs[]): Meal[] => uniqueMeals(items ?? [])
+  return {
+    getCurrentShoppingList: sdk.getCurrentShoppingList,
+    getShoppingList: sdk.getShoppingList,
+    purchaseShoppingList: sdk.purchaseShoppingList,
+    requestMeal: sdk.requestMeal,
+    unrequestMeal: sdk.unrequestMeal,
+    getMyShoppingList: sdk.getMyShoppingList,
+    saveMyShoppingList: sdk.saveMyShoppingList,
+    // View-model helpers
+    groupsFrom,
+    mealsFrom,
+    async purchaseFromGroups(groups: Group[]) {
+      const items = groupsToItems(groups).map((i): sdk.PurchaseExisting | sdk.PurchaseRefs => {
+        if (typeof i.id === 'number' && i.id >= 0) {
+          return { type: 'existing', id: i.id, personId: i.personId, ingredientId: i.ingredient?.id ?? null }
+        }
+        return {
+          type: 'refs',
+          personId: i.personId,
+          ingredientId: i.ingredient?.id ?? null,
+          recipeId: i.recipe?.id ?? null,
+          mealId: i.meal?.id ?? null,
+        }
+      })
+      if (!items?.length) return null
+      return sdk.purchaseShoppingList(items)
+    },
+  }
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/dateformats.ts.html b/coverage/munch-ease-frontend/src/dateformats.ts.html new file mode 100644 index 0000000..628fc6f --- /dev/null +++ b/coverage/munch-ease-frontend/src/dateformats.ts.html @@ -0,0 +1,130 @@ + + + + + + Code coverage report for munch-ease-frontend/src/dateformats.ts + + + + + + + + + +
+
+

All files / munch-ease-frontend/src dateformats.ts

+
+ +
+ 0% + Statements + 0/15 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/15 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
function plural(num: number, unit: string): string {
+  const whole = Math.floor(num)
+  return whole + ' ' + unit + (whole === 1 ? '' : 's')
+}
+
+export function ago(date: Date): string {
+  const now = new Date()
+  const diff = now.getTime() - date.getTime()
+  if (diff < 1000) return 'just now'
+  if (diff < 60 * 1000) return plural(diff / 1000, 'second') + ' ago'
+  if (diff < 60 * 60 * 1000) return plural(diff / (60 * 1000), 'minute') + ' ago'
+  if (diff < 24 * 60 * 60 * 1000) return plural(diff / (60 * 60 * 1000), 'hour') + ' ago'
+  if (diff < 7 * 24 * 60 * 60 * 1000) return plural(diff / (24 * 60 * 60 * 1000), 'day') + ' ago'
+  return date.toLocaleDateString()
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/domain/decoders.ts.html b/coverage/munch-ease-frontend/src/domain/decoders.ts.html new file mode 100644 index 0000000..b627213 --- /dev/null +++ b/coverage/munch-ease-frontend/src/domain/decoders.ts.html @@ -0,0 +1,445 @@ + + + + + + Code coverage report for munch-ease-frontend/src/domain/decoders.ts + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/domain decoders.ts

+
+ +
+ 78.33% + Statements + 94/120 +
+ + +
+ 77.5% + Branches + 31/40 +
+ + +
+ 75% + Functions + 9/12 +
+ + +
+ 78.33% + Lines + 94/120 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +1211x +1x +1x +1x +44x +44x +44x +1x +1x +1x +16x +16x +16x +16x +7x +7x +7x +7x +7x +7x +7x +7x +7x +7x +1x +1x +4x +4x +4x +4x +4x +4x +4x +1x +1x +  +  +  +1x +1x +9x +9x +2x +7x +9x +9x +9x +9x +9x +9x +9x +9x +9x +9x +9x +9x +9x +1x +1x +  +  +  +  +  +  +1x +1x +3x +3x +3x +3x +1x +1x +1x +1x +1x +1x +1x +3x +3x +3x +3x +3x +3x +1x +1x +12x +12x +12x +1x +1x +4x +4x +4x +4x +4x +4x +4x +4x +4x +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import type { RecipeOut, Recipe, MealOut, Meal, MealRecipe, Ingredient as DomainIngredient, ShoppingList, ShoppingListItem, MealInput } from './types'
+import type { components } from '@/api/types'
+ 
+export function toDate(value: string | Date | null | undefined): Date | null {
+  if (value === null || value === undefined) return null
+  return typeof value === 'string' ? new Date(value) : value
+}
+ 
+// Small helper to decode optional lookup maps without repeating loops everywhere
+export function decodeLookup<TIn, TOut>(
+  raw: Record<string, TIn> | null | undefined,
+  decode: (v: TIn) => TOut | null
+): Record<string, TOut> | undefined {
+  if (!raw) return undefined
+  const out: Record<string, TOut> = {}
+  for (const key of Object.keys(raw)) {
+    if (!Object.prototype.hasOwnProperty.call(raw, key)) continue
+    const maybe = raw[key]
+    if (maybe === undefined) continue
+    const decoded = decode(maybe)
+    if (decoded) out[String(key)] = decoded
+  }
+  return out
+}
+ 
+export function decodeRecipe(r: RecipeOut | null | undefined): Recipe | null {
+  if (!r) return null
+  return {
+    ...r,
+    dateCreated: toDate(r.dateCreated),
+    dateHidden: toDate(r.dateHidden),
+  }
+}
+ 
+export function decodeRecipes(list: RecipeOut[] | null | undefined): Recipe[] {
+  if (!Array.isArray(list)) return []
+  return list.map((r) => decodeRecipe(r)).filter((r): r is Recipe => !!r)
+}
+ 
+export function decodeMeal(m: MealOut | null | undefined): Meal | null {
+  if (!m) return null
+  const recipes = Array.isArray(m.recipes) 
+    ? m.recipes.map(mr => decodeMealRecipe(mr)).filter((r): r is MealRecipe => !!r)
+    : []
+  
+  return {
+    ...m,
+    suggestedDate: toDate(m.suggestedDate),
+    purchaseDate: toDate(m.purchaseDate),
+    consumedDate: toDate(m.consumedDate),
+    recipes,
+    chefs: m.chefs ?? [],
+    consumers: m.consumers ?? [],
+    cleanup: m.cleanup ?? [],
+    extraIngredients: m.extraIngredients ?? [],
+  }
+}
+ 
+export function decodeMealRecipe(mr: components['schemas']['MealRecipe-Output'] | null | undefined): MealRecipe | null {
+  if (!mr) return null
+  return {
+    ...mr,
+    recipe: mr.recipe ? decodeRecipe(mr.recipe) : null,
+  }
+}
+ 
+export function decodeIngredient(i: components['schemas']['Ingredient'] | null | undefined): DomainIngredient | null {
+  if (!i) return null
+  // API guarantees quantity is a number; pass through
+  return { ...i }
+}
+ 
+export function decodeIngredients(list: components['schemas']['Ingredient'][] | null | undefined): DomainIngredient[] {
+  if (!Array.isArray(list)) return []
+  return list.map((i) => decodeIngredient(i)).filter((x): x is DomainIngredient => !!x)
+}
+ 
+export function decodeShoppingListItem(i: components['schemas']['ShoppingListItem'] | null | undefined): ShoppingListItem | null {
+  if (!i) return null
+  return {
+    ...i,
+    createdDate: toDate(i.createdDate),
+  }
+}
+ 
+export function decodeShoppingListItems(list: components['schemas']['ShoppingListItem'][] | null | undefined): ShoppingListItem[] {
+  if (!Array.isArray(list)) return []
+  return list.map((i) => decodeShoppingListItem(i)).filter((x): x is ShoppingListItem => !!x)
+}
+ 
+export function decodeShoppingList(v: components['schemas']['ShoppingList'] | null | undefined): ShoppingList | null {
+  if (!v) return null
+  const { items: rawItems, ...rest } = v
+  const items = Array.isArray(rawItems) ? decodeShoppingListItems(rawItems) : undefined
+  return {
+    ...rest,
+    createdDate: toDate(v.createdDate),
+    ...(items ? { items } : {}),
+  }
+}
+ 
+// Helper to convert domain Meal to MealInput, keeping Date→string conversion in boundary
+export function toMealInput(meal: Meal): MealInput {
+  return {
+    id: meal.id,
+    suggestedDate: meal.suggestedDate ? meal.suggestedDate.toISOString() : new Date().toISOString(),
+    consumedDate: meal.consumedDate ? meal.consumedDate.toISOString() : null,
+    purchaseDate: meal.purchaseDate ? meal.purchaseDate.toISOString() : null,
+    chefs: meal.chefs,
+    cleanup: meal.cleanup,
+    consumers: meal.consumers,
+    recipes: meal.recipes.map((r) => ({
+      mealId: r.mealId,
+      recipeId: r.recipeId,
+      servings: r.servings,
+      recipe: null,
+    })),
+    extraIngredients: meal.extraIngredients,
+  }
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/domain/index.html b/coverage/munch-ease-frontend/src/domain/index.html new file mode 100644 index 0000000..314f83a --- /dev/null +++ b/coverage/munch-ease-frontend/src/domain/index.html @@ -0,0 +1,131 @@ + + + + + + Code coverage report for munch-ease-frontend/src/domain + + + + + + + + + +
+
+

All files munch-ease-frontend/src/domain

+
+ +
+ 80.45% + Statements + 107/133 +
+ + +
+ 75% + Branches + 33/44 +
+ + +
+ 76.92% + Functions + 10/13 +
+ + +
+ 80.45% + Lines + 107/133 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
decoders.ts +
+
78.33%94/12077.5%31/4075%9/1278.33%94/120
pagination.ts +
+
100%13/1350%2/4100%1/1100%13/13
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/domain/pagination.ts.html b/coverage/munch-ease-frontend/src/domain/pagination.ts.html new file mode 100644 index 0000000..c57eb26 --- /dev/null +++ b/coverage/munch-ease-frontend/src/domain/pagination.ts.html @@ -0,0 +1,124 @@ + + + + + + Code coverage report for munch-ease-frontend/src/domain/pagination.ts + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/domain pagination.ts

+
+ +
+ 100% + Statements + 13/13 +
+ + +
+ 50% + Branches + 2/4 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 13/13 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +141x +1x +1x +1x +1x +2x +2x +2x +2x +2x +2x +2x +2x + 
export type Page<T> = { items: T[]; next?: string | null; prev?: string | null; total?: number | null }
+ 
+type PageLike<T> = { items?: T[]; nextCursor?: string | null; prevCursor?: string | null; total?: number | null }
+ 
+export function fromOpenApiPage<TIn, TOut>(page: PageLike<TIn> | null | undefined, mapItem: (i: TIn) => TOut): Page<TOut> {
+  if (!page) return { items: [] }
+  return {
+    items: (page.items ?? []).map((i) => mapItem(i)),
+    next: page.nextCursor ?? null,
+    prev: page.prevCursor ?? null,
+    total: page.total ?? null,
+  }
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/index.html b/coverage/munch-ease-frontend/src/index.html new file mode 100644 index 0000000..a03f62d --- /dev/null +++ b/coverage/munch-ease-frontend/src/index.html @@ -0,0 +1,161 @@ + + + + + + Code coverage report for munch-ease-frontend/src + + + + + + + + + +
+
+

All files munch-ease-frontend/src

+
+ +
+ 47.52% + Statements + 125/263 +
+ + +
+ 57.14% + Branches + 12/21 +
+ + +
+ 57.14% + Functions + 4/7 +
+ + +
+ 47.52% + Lines + 125/263 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
App.vue +
+
0%0/980%0/10%0/10%0/98
dateformats.ts +
+
0%0/150%0/10%0/10%0/15
main.ts +
+
0%0/110%0/10%0/10%0/11
units.ts +
+
89.92%125/13966.66%12/18100%4/489.92%125/139
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/main.ts.html b/coverage/munch-ease-frontend/src/main.ts.html new file mode 100644 index 0000000..61d0011 --- /dev/null +++ b/coverage/munch-ease-frontend/src/main.ts.html @@ -0,0 +1,118 @@ + + + + + + Code coverage report for munch-ease-frontend/src/main.ts + + + + + + + + + +
+
+

All files / munch-ease-frontend/src main.ts

+
+ +
+ 0% + Statements + 0/11 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/11 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12  +  +  +  +  +  +  +  +  +  +  + 
import { createApp } from 'vue'
+import App from './App.vue'
+import { createAppRouter } from '@/router'
+import { currentUser } from '@/api/auth'
+
+// Create the router with an auth callback to check current user
+const router = createAppRouter(() => currentUser())
+
+const app = createApp(App)
+app.use(router)
+app.mount('#app')
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/router/helpers.ts.html b/coverage/munch-ease-frontend/src/router/helpers.ts.html new file mode 100644 index 0000000..315399e --- /dev/null +++ b/coverage/munch-ease-frontend/src/router/helpers.ts.html @@ -0,0 +1,166 @@ + + + + + + Code coverage report for munch-ease-frontend/src/router/helpers.ts + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/router helpers.ts

+
+ +
+ 0% + Statements + 0/27 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/27 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
/**
+ * Route parameter and query parsing helpers
+ * Centralizes route param type handling to avoid runtime checks in components
+ */
+
+import type { LocationQueryValue } from 'vue-router'
+
+/**
+ * Parse a route param (string | string[] | undefined) to a number ID
+ * Returns null if param is missing or invalid
+ */
+export function parseRouteId(param: string | string[] | undefined): number | null {
+  if (!param) return null
+  const str = Array.isArray(param) ? param[0] : param
+  if (!str) return null
+  const id = parseInt(str, 10)
+  return isNaN(id) || id < 0 ? null : id
+}
+
+/**
+ * Parse a route query param to a string
+ * Returns empty string if param is missing, null, or is an array
+ */
+export function parseQueryString(param: LocationQueryValue | LocationQueryValue[] | undefined): string {
+  if (!param) return ''
+  return Array.isArray(param) ? '' : param
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/router/index.html b/coverage/munch-ease-frontend/src/router/index.html new file mode 100644 index 0000000..cdaf58f --- /dev/null +++ b/coverage/munch-ease-frontend/src/router/index.html @@ -0,0 +1,131 @@ + + + + + + Code coverage report for munch-ease-frontend/src/router + + + + + + + + + +
+
+

All files munch-ease-frontend/src/router

+
+ +
+ 0% + Statements + 0/106 +
+ + +
+ 0% + Branches + 0/2 +
+ + +
+ 0% + Functions + 0/2 +
+ + +
+ 0% + Lines + 0/106 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
helpers.ts +
+
0%0/270%0/10%0/10%0/27
index.ts +
+
0%0/790%0/10%0/10%0/79
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/router/index.ts.html b/coverage/munch-ease-frontend/src/router/index.ts.html new file mode 100644 index 0000000..9d671fc --- /dev/null +++ b/coverage/munch-ease-frontend/src/router/index.ts.html @@ -0,0 +1,322 @@ + + + + + + Code coverage report for munch-ease-frontend/src/router/index.ts + + + + + + + + + +
+
+

All files / munch-ease-frontend/src/router index.ts

+
+ +
+ 0% + Statements + 0/79 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/79 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { createRouter, createWebHashHistory, Router } from 'vue-router'
+import type { RouteRecordRaw } from 'vue-router'
+
+// Lazy-loaded route components
+const LoginPage = () => import('@/components/LoginPage.vue')
+const RecipesPage = () => import('@/components/recipes/RecipesPage.vue')
+const MealPlanPage = () => import('@/components/meals/MealPlanPage.vue')
+const MyShoppingPage = () => import('@/components/shopping/MyShoppingPage.vue')
+const PurchasedShoppingListPage = () => import('@/components/shopping/PurchasedShoppingListPage.vue')
+const CurrentShoppingListPage = () => import('@/components/shopping/CurrentShoppingListPage.vue')
+const EditMealPage = () => import('@/components/meals/EditMealPage.vue')
+const EditRecipePage = () => import('@/components/recipes/EditRecipePage.vue')
+
+export function createAppRouter(getCurrentUser: () => Promise<unknown> | unknown): Router {
+  const routes: RouteRecordRaw[] = [
+    { path: '/', redirect: { name: 'mealplan' } },
+    { path: '/login', name: 'login', component: LoginPage },
+    { path: '/mealplan', name: 'mealplan', component: MealPlanPage, meta: { requiresAuth: true } },
+    {
+      path: '/shopping',
+      name: 'shopping',
+      component: MyShoppingPage,
+      meta: { requiresAuth: true },
+    },
+    {
+      path: '/shopping/current',
+      name: 'shopping-current',
+      component: CurrentShoppingListPage,
+      meta: { requiresAuth: true },
+    },
+    {
+      path: '/shopping/:id',
+      name: 'shopping-list',
+      component: PurchasedShoppingListPage,
+      props: true,
+      meta: { requiresAuth: true },
+    },
+    { path: '/recipes', name: 'recipes', component: RecipesPage, meta: { requiresAuth: true } },
+    {
+      path: '/recipes/add',
+      name: 'recipe-add',
+      component: EditRecipePage,
+      meta: { requiresAuth: true },
+    },
+    {
+      path: '/recipes/:id',
+      name: 'recipe-edit',
+      component: EditRecipePage,
+      props: true,
+      meta: { requiresAuth: true },
+    },
+    { path: '/meals/add', name: 'meal-add', component: EditMealPage, meta: { requiresAuth: true } },
+    {
+      path: '/meals/:id',
+      name: 'meal-edit',
+      component: EditMealPage,
+      props: true,
+      meta: { requiresAuth: true },
+    },
+  ]
+
+  const router = createRouter({
+    history: createWebHashHistory(),
+    routes,
+  })
+
+  router.beforeEach(async (to) => {
+    if (!to.meta.requiresAuth) return true
+    try {
+      const user = await getCurrentUser()
+      if (user) return true
+    } catch (_) {
+      /* ignore */
+    }
+    return { name: 'login', query: { redirect: to.fullPath } }
+  })
+
+  return router
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/units.ts.html b/coverage/munch-ease-frontend/src/units.ts.html new file mode 100644 index 0000000..d0b0bfe --- /dev/null +++ b/coverage/munch-ease-frontend/src/units.ts.html @@ -0,0 +1,502 @@ + + + + + + Code coverage report for munch-ease-frontend/src/units.ts + + + + + + + + + +
+
+

All files / munch-ease-frontend/src units.ts

+
+ +
+ 89.92% + Statements + 125/139 +
+ + +
+ 66.66% + Branches + 12/18 +
+ + +
+ 100% + Functions + 4/4 +
+ + +
+ 89.92% + Lines + 125/139 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +1401x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +16x +16x +16x +1x +7x +7x +11x +11x +11x +  +  +1x +1x +9x +7x +7x +9x +7x +7x +7x +7x +7x +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +4x +4x +4x +4x +4x +1x +1x + 
const UNIT_KEYS_ARRAY: readonly ['kg', 'litres', 'items'] = ['kg', 'litres', 'items']
+export type UnitKey = typeof UNIT_KEYS_ARRAY[number]
+ 
+export const equivalentUnits: Record<UnitKey, Record<string, number>> = {
+  kg: {
+    kgs: 1,
+    kilograms: 1,
+    kilogram: 1,
+ 
+    g: 1000,
+    gram: 1000,
+    grams: 1000,
+ 
+    lb: 2.20462,
+    lbs: 2.20462,
+    pound: 2.20462,
+    pounds: 2.20462,
+  },
+  litres: {
+    l: 1,
+    liter: 1,
+    litre: 1,
+ 
+    ml: 1000,
+    milliliters: 1000,
+    milliliter: 1000,
+ 
+    'fl oz': 33.814,
+    'fluid ounce': 33.814,
+    'fluid ounces': 33.814,
+ 
+    cup: 4.22675,
+    cups: 4.22675,
+ 
+    tbsp: 67.628,
+    tablespoon: 67.628,
+    tablespoons: 67.628,
+ 
+    tsp: 202.884,
+    teaspoon: 202.884,
+    teaspoons: 202.884,
+ 
+    pt: 2.11338,
+    pint: 2.11338,
+    pints: 2.11338,
+ 
+    qt: 1.05669,
+    quart: 1.05669,
+    quarts: 1.05669,
+ 
+    gal: 0.264172,
+    gallon: 0.264172,
+    gallons: 0.264172,
+ 
+    oz: 35.1951,
+    ounce: 35.1951,
+  },
+  items: {
+    item: 1,
+    items: 1,
+    pcs: 1,
+    piece: 1,
+    pieces: 1,
+    florets: 8, // Broccoli
+    head: 1, // Broccoli
+    heads: 1, // Broccoli
+    slice: 10, // Bread
+    slices: 10, // Bread
+    loaf: 1, // Bread
+    loaves: 1, // Bread
+    cloves: 8, // Garlic
+    bulb: 1, // Garlic
+    bulbs: 1, // Garlic
+    stalk: 1, // Celery
+    stalks: 1, // Celery
+    bunch: 1, // Cilantro
+    bunches: 1, // Cilantro
+    sprig: 1, // Cilantro
+    sprigs: 1, // Cilantro
+    cans: 1, // Canned goods
+    can: 1, // Canned goods
+    pack: 1, // Packaged goods
+    packs: 1, // Packaged goods
+    package: 1, // Packaged goods
+    packages: 1, // Packaged goods
+    container: 1, // Packaged goods
+    containers: 1, // Packaged goods
+  },
+}
+ 
+const UNIT_KEYS_SET: ReadonlySet<string> = new Set(UNIT_KEYS_ARRAY)
+function isUnitKey(value: string): value is UnitKey {
+  return UNIT_KEYS_SET.has(value)
+}
+ 
+function getBaseUnit(unit: string): UnitKey | null {
+  for (const type of UNIT_KEYS_ARRAY) {
+    const group = equivalentUnits[type]
+    if (unit in group) return type
+  }
+  return null
+}
+ 
+export function getConversionFactor(unit: string): { unit: UnitKey | string; factor: number } | null {
+  if (isUnitKey(unit)) return { unit, factor: 1 }
+ 
+  const unitLower = String(unit).toLowerCase()
+  if (isUnitKey(unitLower)) return { unit: unitLower, factor: 1 }
+ 
+  const baseUnit = getBaseUnit(unit)
+  if (baseUnit) {
+    const factor = equivalentUnits[baseUnit]?.[unit]
+    if (typeof factor === 'number') return { unit: baseUnit, factor }
+    return null
+  }
+
+  const baseUnitLower = getBaseUnit(unitLower)
+  if (baseUnitLower) {
+    const factor = equivalentUnits[baseUnitLower]?.[unitLower]
+    if (typeof factor === 'number') return { unit: baseUnitLower, factor }
+    return null
+  }
+
+  return null
+}
+ 
+export type Quantity = { quantity: number; unit: string }
+export type Total = { unit: string; quantity: number }
+ 
+export function calculateTotals(quantityList: Quantity[]): Total[] {
+  const totals: Record<string, number> = {}
+  for (const quantity of quantityList) {
+    const baseUnit = getConversionFactor(quantity.unit) ?? { unit: quantity.unit, factor: 1 }
+    const factor = baseUnit.factor
+    const unit = String(baseUnit.unit)
+    totals[unit] = (totals[unit] ?? 0) + quantity.quantity / factor
+  }
+  return Object.keys(totals).map((unit) => ({ unit, quantity: totals[unit] ?? 0 }))
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/munch-ease-frontend/vue.config.js.html b/coverage/munch-ease-frontend/vue.config.js.html new file mode 100644 index 0000000..87da409 --- /dev/null +++ b/coverage/munch-ease-frontend/vue.config.js.html @@ -0,0 +1,103 @@ + + + + + + Code coverage report for munch-ease-frontend/vue.config.js + + + + + + + + + +
+
+

All files / munch-ease-frontend vue.config.js

+
+ +
+ 0% + Statements + 0/6 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/6 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7  +  +  +  +  +  + 
/* eslint-disable @typescript-eslint/no-var-requires */
+const { defineConfig } = require('@vue/cli-service')
+/* eslint-enable @typescript-eslint/no-var-requires */
+module.exports = defineConfig({
+  transpileDependencies: true,
+})
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/prettify.css b/coverage/prettify.css new file mode 100644 index 0000000..b317a7c --- /dev/null +++ b/coverage/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/coverage/prettify.js b/coverage/prettify.js new file mode 100644 index 0000000..b322523 --- /dev/null +++ b/coverage/prettify.js @@ -0,0 +1,2 @@ +/* eslint-disable */ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/coverage/sort-arrow-sprite.png b/coverage/sort-arrow-sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed68316eb3f65dec9063332d2f69bf3093bbfab GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qh}Z>jv*C{$p!i!8j}?a+@3A= zIAGwzjijN=FBi!|L1t?LM;Q;gkwn>2cAy-KV{dn nf0J1DIvEHQu*n~6U}x}qyky7vi4|9XhBJ7&`njxgN@xNA8m%nc literal 0 HcmV?d00001 diff --git a/coverage/sorter.js b/coverage/sorter.js new file mode 100644 index 0000000..4ed70ae --- /dev/null +++ b/coverage/sorter.js @@ -0,0 +1,210 @@ +/* eslint-disable */ +var addSorting = (function() { + 'use strict'; + var cols, + currentSort = { + index: 0, + desc: false + }; + + // returns the summary table element + function getTable() { + return document.querySelector('.coverage-summary'); + } + // returns the thead element of the summary table + function getTableHeader() { + return getTable().querySelector('thead tr'); + } + // returns the tbody element of the summary table + function getTableBody() { + return getTable().querySelector('tbody'); + } + // returns the th element for nth column + function getNthColumn(n) { + return getTableHeader().querySelectorAll('th')[n]; + } + + function onFilterInput() { + const searchValue = document.getElementById('fileSearch').value; + const rows = document.getElementsByTagName('tbody')[0].children; + + // Try to create a RegExp from the searchValue. If it fails (invalid regex), + // it will be treated as a plain text search + let searchRegex; + try { + searchRegex = new RegExp(searchValue, 'i'); // 'i' for case-insensitive + } catch (error) { + searchRegex = null; + } + + for (let i = 0; i < rows.length; i++) { + const row = rows[i]; + let isMatch = false; + + if (searchRegex) { + // If a valid regex was created, use it for matching + isMatch = searchRegex.test(row.textContent); + } else { + // Otherwise, fall back to the original plain text search + isMatch = row.textContent + .toLowerCase() + .includes(searchValue.toLowerCase()); + } + + row.style.display = isMatch ? '' : 'none'; + } + } + + // loads the search box + function addSearchBox() { + var template = document.getElementById('filterTemplate'); + var templateClone = template.content.cloneNode(true); + templateClone.getElementById('fileSearch').oninput = onFilterInput; + template.parentElement.appendChild(templateClone); + } + + // loads all columns + function loadColumns() { + var colNodes = getTableHeader().querySelectorAll('th'), + colNode, + cols = [], + col, + i; + + for (i = 0; i < colNodes.length; i += 1) { + colNode = colNodes[i]; + col = { + key: colNode.getAttribute('data-col'), + sortable: !colNode.getAttribute('data-nosort'), + type: colNode.getAttribute('data-type') || 'string' + }; + cols.push(col); + if (col.sortable) { + col.defaultDescSort = col.type === 'number'; + colNode.innerHTML = + colNode.innerHTML + ''; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function(a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function(a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc + ? ' sorted-desc' + : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function() { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i = 0; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function() { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(); + addSearchBox(); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); diff --git a/depcheck.baseline.json b/depcheck.baseline.json new file mode 100644 index 0000000..36066b3 --- /dev/null +++ b/depcheck.baseline.json @@ -0,0 +1 @@ +{"dependencies":["core-js"],"devDependencies":["@babel/core","@babel/eslint-parser","@vue/cli-plugin-eslint","@vue/cli-plugin-typescript","node-fetch","undici"],"missing":{"vue-eslint-parser":["/home/jables/source/doof/munch-ease-frontend/package.json"],"vite":["/home/jables/source/doof/munch-ease-frontend/tsconfig.json"]},"using":{"@vue/cli-plugin-babel":["/home/jables/source/doof/munch-ease-frontend/babel.config.js"],"@vue/cli-service":["/home/jables/source/doof/munch-ease-frontend/babel.config.js","/home/jables/source/doof/munch-ease-frontend/package.json","/home/jables/source/doof/munch-ease-frontend/vue.config.js"],"husky":["/home/jables/source/doof/munch-ease-frontend/package.json"],"openapi-typescript":["/home/jables/source/doof/munch-ease-frontend/package.json"],"prettier":["/home/jables/source/doof/munch-ease-frontend/package.json"],"typescript":["/home/jables/source/doof/munch-ease-frontend/package.json","/home/jables/source/doof/munch-ease-frontend/tests/test-setup.js","/home/jables/source/doof/munch-ease-frontend/src/main.ts","/home/jables/source/doof/munch-ease-frontend/src/shims-vue.d.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/useAlert.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/useAuth.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/usePagination.ts","/home/jables/source/doof/munch-ease-frontend/src/components/AlertToast.vue","/home/jables/source/doof/munch-ease-frontend/src/components/LoginPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/EditRecipePage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/DatePicker.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/EditMealPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealCard.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealPlanPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/PersonList.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/IngredientLine.vue"],"vitest":["/home/jables/source/doof/munch-ease-frontend/package.json","/home/jables/source/doof/munch-ease-frontend/vitest.config.js","/home/jables/source/doof/munch-ease-frontend/tests/mealMapper.test.js","/home/jables/source/doof/munch-ease-frontend/tests/meals.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/meals.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/parse.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/parse.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/persons.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/persons.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/recipes.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/recipes.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shopping.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shopping.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shoppingListMapper.test.js","/home/jables/source/doof/munch-ease-frontend/tests/test-setup.js","/home/jables/source/doof/munch-ease-frontend/tests/units.test.js","/home/jables/source/doof/munch-ease-frontend/tests/useAlert.test.js","/home/jables/source/doof/munch-ease-frontend/tests/useAlert.test.ts"],"vue-tsc":["/home/jables/source/doof/munch-ease-frontend/package.json"],"@types/node":["/home/jables/source/doof/munch-ease-frontend/package.json","/home/jables/source/doof/munch-ease-frontend/tsconfig.json","/home/jables/source/doof/munch-ease-frontend/vitest.config.js","/home/jables/source/doof/munch-ease-frontend/tests/mealMapper.test.js","/home/jables/source/doof/munch-ease-frontend/tests/meals.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/meals.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/parse.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/parse.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/persons.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/persons.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/recipes.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/recipes.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shopping.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shopping.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shoppingListMapper.test.js","/home/jables/source/doof/munch-ease-frontend/tests/test-setup.js","/home/jables/source/doof/munch-ease-frontend/tests/units.test.js","/home/jables/source/doof/munch-ease-frontend/tests/useAlert.test.js","/home/jables/source/doof/munch-ease-frontend/tests/useAlert.test.ts"],"vue-eslint-parser":["/home/jables/source/doof/munch-ease-frontend/package.json"],"@typescript-eslint/eslint-plugin":["/home/jables/source/doof/munch-ease-frontend/package.json"],"eslint-plugin-vue":["/home/jables/source/doof/munch-ease-frontend/package.json"],"eslint":["/home/jables/source/doof/munch-ease-frontend/package.json"],"@typescript-eslint/parser":["/home/jables/source/doof/munch-ease-frontend/package.json"],"lint-staged":["/home/jables/source/doof/munch-ease-frontend/package.json"],"vite":["/home/jables/source/doof/munch-ease-frontend/tsconfig.json"],"msw":["/home/jables/source/doof/munch-ease-frontend/tests/test-setup.js"],"vue":["/home/jables/source/doof/munch-ease-frontend/src/main.ts","/home/jables/source/doof/munch-ease-frontend/src/shims-vue.d.ts","/home/jables/source/doof/munch-ease-frontend/src/router/helpers.ts","/home/jables/source/doof/munch-ease-frontend/src/router/index.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/useAlert.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/useAuth.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/usePagination.ts","/home/jables/source/doof/munch-ease-frontend/src/components/AlertToast.vue","/home/jables/source/doof/munch-ease-frontend/src/components/LoginPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/EditRecipePage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipesPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/DatePicker.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/EditMealPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealCard.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealPlanPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/PersonList.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/IngredientLine.vue"],"vue-router":["/home/jables/source/doof/munch-ease-frontend/src/router/helpers.ts","/home/jables/source/doof/munch-ease-frontend/src/router/index.ts","/home/jables/source/doof/munch-ease-frontend/src/components/LoginPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/EditRecipePage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipesPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/EditMealPage.vue"],"openapi-fetch":["/home/jables/source/doof/munch-ease-frontend/src/api/client.ts"]},"invalidFiles":{},"invalidDirs":{}} diff --git a/package-lock.json b/package-lock.json index 639517a..fb755f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "@types/node": "^20.19.22", "@typescript-eslint/eslint-plugin": "^7.18.0", "@typescript-eslint/parser": "^7.18.0", + "@vitest/coverage-v8": "^1.6.0", "@vue/cli-plugin-babel": "~5.0.0", "@vue/cli-plugin-eslint": "~5.0.0", "@vue/cli-plugin-typescript": "~5.0.0", @@ -1821,6 +1822,13 @@ "node": ">=6.9.0" } }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -2531,6 +2539,16 @@ } } }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", @@ -2593,10 +2611,11 @@ "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -3723,6 +3742,34 @@ "dev": true, "license": "ISC" }, + "node_modules/@vitest/coverage-v8": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.6.1.tgz", + "integrity": "sha512-6YeRZwuO4oTGKxD3bijok756oktHSIm3eczVVzNe3scqzuhLwltIF3S9ZL/vwOVIpURmU6SnZhziXXAfw8/Qlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.4", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.4", + "istanbul-reports": "^3.1.6", + "magic-string": "^0.30.5", + "magicast": "^0.3.3", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^2.0.0", + "test-exclude": "^6.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "1.6.1" + } + }, "node_modules/@vitest/expect": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.1.tgz", @@ -9294,6 +9341,112 @@ "node": ">=0.10.0" } }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/javascript-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", @@ -10366,6 +10519,18 @@ "@jridgewell/sourcemap-codec": "^1.5.0" } }, + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -13516,6 +13681,21 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -16667,6 +16847,12 @@ "to-fast-properties": "^2.0.0" } }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, "@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -17023,6 +17209,12 @@ "dev": true, "requires": {} }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, "@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", @@ -17071,9 +17263,9 @@ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.1.0", @@ -17868,6 +18060,27 @@ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "dev": true }, + "@vitest/coverage-v8": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.6.1.tgz", + "integrity": "sha512-6YeRZwuO4oTGKxD3bijok756oktHSIm3eczVVzNe3scqzuhLwltIF3S9ZL/vwOVIpURmU6SnZhziXXAfw8/Qlw==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.1", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.4", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.4", + "istanbul-reports": "^3.1.6", + "magic-string": "^0.30.5", + "magicast": "^0.3.3", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^2.0.0", + "test-exclude": "^6.0.0" + } + }, "@vitest/expect": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.1.tgz", @@ -21907,6 +22120,76 @@ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, + "istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true + }, + "istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "requires": { + "semver": "^7.5.3" + } + }, + "semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + } + }, + "istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, "javascript-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", @@ -22660,6 +22943,17 @@ "@jridgewell/sourcemap-codec": "^1.5.0" } }, + "magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dev": true, + "requires": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -24939,6 +25233,17 @@ } } }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", diff --git a/package.json b/package.json index 9876c52..1a40eec 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,8 @@ "test": "vitest run", "test:watch": "vitest", "test:coverage": "vitest run --coverage", - "typecheck": "tsc -p tsconfig.json --noEmit", - "typecheck:vue": "vue-tsc --noEmit", + "typecheck": "tsc -p tsconfig.json --noEmit", + "typecheck:vue": "vue-tsc --noEmit", "codegen:api": "openapi-typescript ../munch-ease-backend/openapi.json -o src/api/types.ts", "codegen": "npm run codegen:api", "codegen:check": "node scripts/codegen-check.js" @@ -26,14 +26,15 @@ "@babel/core": "^7.12.16", "@babel/eslint-parser": "^7.12.16", "@types/node": "^20.19.22", - "@typescript-eslint/eslint-plugin": "^7.18.0", - "@typescript-eslint/parser": "^7.18.0", + "@typescript-eslint/eslint-plugin": "^7.18.0", + "@typescript-eslint/parser": "^7.18.0", + "@vitest/coverage-v8": "^1.6.0", "@vue/cli-plugin-babel": "~5.0.0", "@vue/cli-plugin-eslint": "~5.0.0", "@vue/cli-plugin-typescript": "~5.0.0", "@vue/cli-service": "~5.0.0", - "eslint": "^8.57.0", - "eslint-plugin-vue": "^9.27.0", + "eslint": "^8.57.0", + "eslint-plugin-vue": "^9.27.0", "husky": "^8.0.0", "lint-staged": "^13.3.0", "msw": "^2.5.2", @@ -41,7 +42,7 @@ "openapi-fetch": "^0.9.5", "openapi-typescript": "^7.4.2", "prettier": "^3.3.3", - "typescript": "~5.5.4", + "typescript": "~5.5.4", "undici": "^6.19.8", "vitest": "^1.6.0", "vue-tsc": "^2.0.29" @@ -80,10 +81,19 @@ }, "overrides": [ { - "files": ["src/**/*.ts", "src/**/*.vue", "src/**/*.d.ts"], - "excludedFiles": ["src/api/types.ts", "src/**/*.d.ts"], + "files": [ + "src/**/*.ts", + "src/**/*.vue", + "src/**/*.d.ts" + ], + "excludedFiles": [ + "src/api/types.ts", + "src/**/*.d.ts" + ], "parserOptions": { - "project": ["./tsconfig.eslint.json"], + "project": [ + "./tsconfig.eslint.json" + ], "tsconfigRootDir": "." }, "rules": { diff --git a/src/api/sdk.ts b/src/api/sdk.ts index c6eca08..b5cd3f8 100644 --- a/src/api/sdk.ts +++ b/src/api/sdk.ts @@ -1,6 +1,6 @@ import { api } from '@/api/client' import type { components } from '@/api/types' -import { toDate, decodeMeal, decodeRecipe, decodeIngredients, decodeShoppingList, decodeShoppingListItems, decodeIngredient } from '@/domain/decoders' +import { toDate, decodeMeal, decodeRecipe, decodeIngredients, decodeShoppingList, decodeShoppingListItems, decodeIngredient, decodeLookup } from '@/domain/decoders' import type { Recipe, Meal, @@ -19,22 +19,7 @@ function httpError(response: Response, error: unknown): Error { return new Error(`${response.status} ${response.statusText || 'HTTP error'}`) } -// Small helper to decode optional lookup maps without repeating loops everywhere -function decodeLookup( - raw: Record | null | undefined, - decode: (v: TIn) => TOut | null -): Record | undefined { - if (!raw) return undefined - const out: Record = {} - for (const key of Object.keys(raw)) { - if (!Object.prototype.hasOwnProperty.call(raw, key)) continue - const maybe = raw[key] - if (maybe === undefined) continue - const decoded = decode(maybe) - if (decoded) out[String(key)] = decoded - } - return out -} +// decodeLookup moved to domain/decoders to be reused across SDK and other modules // Shopping list mapped view types now come from domain/types @@ -50,17 +35,21 @@ function attachItemRefs( const listId = item.listId ?? undefined const created = item.createdDate - if (ingredientId !== undefined && lookups.ingredientsLookup && lookups.ingredientsLookup[String(ingredientId)] !== undefined) { - item.ingredient = lookups.ingredientsLookup[String(ingredientId)] + if (ingredientId !== undefined && lookups.ingredientsLookup) { + const v = lookups.ingredientsLookup[String(ingredientId)] + if (v !== undefined) item.ingredient = v } - if (mealId !== undefined && lookups.mealsLookup && lookups.mealsLookup[String(mealId)] !== undefined) { - item.meal = lookups.mealsLookup[String(mealId)] + if (mealId !== undefined && lookups.mealsLookup) { + const v = lookups.mealsLookup[String(mealId)] + if (v !== undefined) item.meal = v } - if (recipeId !== undefined && lookups.recipesLookup && lookups.recipesLookup[String(recipeId)] !== undefined) { - item.recipe = lookups.recipesLookup[String(recipeId)] + if (recipeId !== undefined && lookups.recipesLookup) { + const v = lookups.recipesLookup[String(recipeId)] + if (v !== undefined) item.recipe = v } - if (listId !== undefined && lookups.shoppingListLookup && lookups.shoppingListLookup[String(listId)] !== undefined) { - item.list = lookups.shoppingListLookup[String(listId)] + if (listId !== undefined && lookups.shoppingListLookup) { + const v = lookups.shoppingListLookup[String(listId)] + if (v !== undefined) item.list = v } if (created !== undefined) item.createdDate = toDate(created) } @@ -82,13 +71,15 @@ export function mapPurchasedShoppingList(dto: components['schemas']['PurchasedSh if (listRaw) { const base = decodeShoppingList(listRaw) if (base) { - const items = Array.isArray(listRaw.items) ? decodeShoppingListItems(listRaw.items) : [] + const decoded = Array.isArray(listRaw.items) ? decodeShoppingListItems(listRaw.items) : [] + // start with decoded items and attach refs below; treat as WithRefs variant + const items = decoded as unknown as import('@/domain/types').ShoppingListItemWithRefs[] list = { ...base, items } const lookups: ShoppingLookups = { ...(ingredientsLookup && { ingredientsLookup }), ...(mealsLookup && { mealsLookup }), ...(recipesLookup && { recipesLookup }), - shoppingListLookup: { [String(list.id)]: list }, + ...(list && { shoppingListLookup: { [String(list.id)]: list } }), } attachItemRefs(list.items, lookups) } @@ -99,6 +90,8 @@ export function mapPurchasedShoppingList(dto: components['schemas']['PurchasedSh ...(mealsLookup && { mealsLookup }), ...(recipesLookup && { recipesLookup }), ...(list && { list }), + // include shoppingListLookup when list exists for consistency with lookups type + ...(list && { shoppingListLookup: { [String(list.id)]: list } }), } } @@ -124,9 +117,9 @@ export function mapCurrentShoppingList(dto: components['schemas']['CurrentShoppi } const dtoOut: CurrentShoppingListDTO = { - outstandingItems: decodeShoppingListItems(outstandingRaw ?? []), - requestedMeals: decodeShoppingListItems(requestedRaw ?? []), - purchasedItems: decodeShoppingListItems(purchasedRaw ?? []), + outstandingItems: (decodeShoppingListItems(outstandingRaw ?? []) as unknown) as ShoppingListItemWithRefs[], + requestedMeals: (decodeShoppingListItems(requestedRaw ?? []) as unknown) as ShoppingListItemWithRefs[], + purchasedItems: (decodeShoppingListItems(purchasedRaw ?? []) as unknown) as ShoppingListItemWithRefs[], ...(ingredientsLookup && { ingredientsLookup }), ...(mealsLookup && { mealsLookup }), ...(recipesLookup && { recipesLookup }), @@ -159,10 +152,12 @@ export async function listRecipes(params?: { q?: string | null; cursor?: string return { ...mapped, items: mapped.items.filter((r): r is Recipe => !!r) } } -export async function getRecipe(id: number | string): Promise { +export async function getRecipe(id: number | string): Promise { const { data, error, response } = await api.GET('/api/v1/recipes/{recipe_id}', { params: { path: { recipe_id: Number(id) } } }) if (!response.ok) throw httpError(response, error) - return decodeRecipe(data) + const mapped = decodeRecipe(data) + if (!mapped) throw new Error('Recipe not found') + return mapped } export async function saveRecipe(recipe: components['schemas']['Recipe-Input']): Promise { @@ -235,10 +230,12 @@ export async function getUpcomingMeals(from: Date, to: Date): Promise { .sort((a, b) => ((a.suggestedDate?.getTime() ?? 0) - (b.suggestedDate?.getTime() ?? 0))) } -export async function getMeal(id: number | string): Promise { +export async function getMeal(id: number | string): Promise { const { data, error, response } = await api.GET('/api/v1/meals/{meal_id}', { params: { path: { meal_id: Number(id) } } }) if (!response.ok) throw httpError(response, error) - return decodeMeal(data) + const mapped = decodeMeal(data) + if (!mapped) throw new Error('Meal not found') + return mapped } export async function saveMeal(meal: components['schemas']['Meal-Input']): Promise { @@ -257,12 +254,14 @@ export async function saveMeal(meal: components['schemas']['Meal-Input']): Promi } } -export async function markMealConsumed(mealId: number | string): Promise { +export async function markMealConsumed(mealId: number | string): Promise { const { data, error, response } = await api.POST('/api/v1/meals/{meal_id}/consumed', { params: { path: { meal_id: Number(mealId) }, cookie: { user_id: 0 } }, }) if (!response.ok) throw httpError(response, error) - return decodeMeal(data) + const mapped = decodeMeal(data) + if (!mapped) throw new Error('Meal not found') + return mapped } export async function deleteMeal(mealId: number | string): Promise { @@ -288,24 +287,27 @@ export async function saveMyShoppingList(items: components['schemas']['Ingredien return decodeIngredients(data ?? []) } -export async function getShoppingList(id: number | string) { +export async function getShoppingList(id: number | string): Promise { const { data, error, response } = await api.GET('/api/v1/shopping/{list_id}', { params: { path: { list_id: Number(id) } } }) if (!response.ok) throw httpError(response, error) const mapped = mapPurchasedShoppingList(data) return mapped?.list ?? null } -export async function getCurrentShoppingList() { +export async function getCurrentShoppingList(): Promise { const { data, error, response } = await api.GET('/api/v1/shopping/current') if (!response.ok) throw httpError(response, error) - return mapCurrentShoppingList(data) + const mapped = mapCurrentShoppingList(data) + if (!mapped) throw new Error('Failed to map current shopping list') + return mapped } -type PurchaseExisting = { type: 'existing'; id: number; personId: number; ingredientId?: number | null } -type PurchaseRefs = { type: 'refs'; personId: number; ingredientId?: number | null; recipeId?: number | null; mealId?: number | null } +export type PurchaseExisting = { type: 'existing'; id: number; personId: number; ingredientId?: number | null } +export type PurchaseRefs = { type: 'refs'; personId: number; ingredientId?: number | null; recipeId?: number | null; mealId?: number | null } +export type PurchaseRequest = PurchaseExisting | PurchaseRefs export async function purchaseShoppingList( - completedRequests: Array + completedRequests: PurchaseRequest[] ): Promise { if (!Array.isArray(completedRequests) || completedRequests.length === 0) return null // Map incoming requests: if id provided and >= 0, use it; otherwise send identifiers for ingredient/recipe/meal diff --git a/src/components/meals/EditMealPage.vue b/src/components/meals/EditMealPage.vue index 5fcd93e..1aa98ab 100644 --- a/src/components/meals/EditMealPage.vue +++ b/src/components/meals/EditMealPage.vue @@ -118,8 +118,8 @@ diff --git a/src/components/shopping/ShoppingListItem.vue b/src/components/shopping/ShoppingListItem.vue index 0d2eeb9..2a23df6 100644 --- a/src/components/shopping/ShoppingListItem.vue +++ b/src/components/shopping/ShoppingListItem.vue @@ -37,11 +37,11 @@ :key="source.id" > , and - - {{ formatQuantity(source.ingredient.quantity) }} {{ source.ingredient.unit }} for - {{ source.person.name }} + + + {{ formatQuantity(source.ingredient.quantity) }} {{ source.ingredient.unit }} - + {{ formatQuantity(source.ingredient.quantity) }} {{ source.ingredient.unit }} in {{ source.recipe.name @@ -57,7 +57,7 @@ : '' }} - + {{ source.ingredient.line }} for {{ source.meal?.suggestedDate @@ -78,11 +78,11 @@ :key="source.id" > , and - - {{ formatQuantity(source.ingredient.quantity) }} {{ source.ingredient.unit }} for - {{ source.person.name }} + + + {{ formatQuantity(source.ingredient.quantity) }} {{ source.ingredient.unit }} - + {{ formatQuantity(source.ingredient.quantity) }} {{ source.ingredient.unit }} in {{ source.recipe.name @@ -98,7 +98,7 @@ : '' }} - + {{ source.ingredient.line }} for {{ source.meal.suggestedDate @@ -134,10 +134,13 @@ const imageSrc = computed(() => { const remainingRequiredTotals = computed(() => calculateTotals( - props.shoppingListItemGroup.shoppingListItems.map((item) => ({ - quantity: item.ingredient.quantity, - unit: String(item.ingredient.unit || 'items'), - })) + props.shoppingListItemGroup.shoppingListItems + .filter((item) => !!item.ingredient) + .map((item) => ({ + // item.ingredient is defined due to filter above + quantity: item.ingredient!.quantity, + unit: String(item.ingredient!.unit || 'items'), + })) ) ) diff --git a/src/composables/useMeals.ts b/src/composables/useMeals.ts deleted file mode 100644 index 3b9c51f..0000000 --- a/src/composables/useMeals.ts +++ /dev/null @@ -1,46 +0,0 @@ -import * as sdk from '@/api/sdk' -import type { MealInput, Meal } from '@/domain/types' - -export async function getUpcomingMeals(from: Date, to: Date) { - return sdk.getUpcomingMeals(from, to) -} - -export async function getMeal(id: number | string) { - return sdk.getMeal(id) -} - -export async function saveMeal(meal: MealInput) { - return sdk.saveMeal(meal) -} - -export async function markMealConsumed(mealId: number | string) { - return sdk.markMealConsumed(mealId) -} - -export async function deleteMeal(mealId: number | string) { - return sdk.deleteMeal(mealId) -} - -// Helper to convert domain Meal to MealInput, keeping Date→string conversion in boundary -export function toMealInput(meal: Meal): MealInput { - return { - id: meal.id, - suggestedDate: meal.suggestedDate ? meal.suggestedDate.toISOString() : new Date().toISOString(), - consumedDate: meal.consumedDate ? meal.consumedDate.toISOString() : null, - purchaseDate: meal.purchaseDate ? meal.purchaseDate.toISOString() : null, - chefs: meal.chefs, - cleanup: meal.cleanup, - consumers: meal.consumers, - recipes: meal.recipes.map((r) => ({ - mealId: r.mealId, - recipeId: r.recipeId, - servings: r.servings, - recipe: null - })), - extraIngredients: meal.extraIngredients, - } -} - -export function useMeals() { - return { getUpcomingMeals, getMeal, saveMeal, markMealConsumed, deleteMeal, toMealInput } -} diff --git a/src/composables/useShopping.ts b/src/composables/useShopping.ts index b70d0df..6c59922 100644 --- a/src/composables/useShopping.ts +++ b/src/composables/useShopping.ts @@ -1,27 +1,15 @@ import * as sdk from '@/api/sdk' -import type { ShoppingListItemWithRefs, Product, Meal, Ingredient, Person, Recipe } from '@/domain/types' +import type { ShoppingListItemWithRefs, Product, Meal } from '@/domain/types' -export type UIShoppingListItem = { - id: number - ingredient: Ingredient - person?: Person | null - personId: number - recipe?: Recipe | null - meal?: Meal | null - ingredientId?: number | null - listId?: number | null - createdDate?: Date | null -} - -export type GroupByProduct = { type: 'product'; product: Product; shoppingListItems: UIShoppingListItem[] } -export type GroupByName = { type: 'name'; name: string; shoppingListItems: UIShoppingListItem[] } +export type GroupByProduct = { type: 'product'; product: Product; shoppingListItems: ShoppingListItemWithRefs[] } +export type GroupByName = { type: 'name'; name: string; shoppingListItems: ShoppingListItemWithRefs[] } export type Group = GroupByProduct | GroupByName -export function groupsToItems(groups: Group[]): UIShoppingListItem[] { +export function groupsToItems(groups: Group[]): ShoppingListItemWithRefs[] { return groups.map((g) => g.shoppingListItems).flat() } -export function uniqueMeals(shoppingListItems: UIShoppingListItem[]): Meal[] { +export function uniqueMeals(shoppingListItems: ShoppingListItemWithRefs[]): Meal[] { const mealsWithDuplicates = shoppingListItems.map((item) => item.meal).filter((m): m is Meal => !!m) const mealsLookup: Record = mealsWithDuplicates.reduce>( (acc, meal) => { @@ -33,11 +21,11 @@ export function uniqueMeals(shoppingListItems: UIShoppingListItem[]): Meal[] { return Object.values(mealsLookup) } -export function itemsToGroups(shoppingListItems: UIShoppingListItem[]): Group[] { +export function itemsToGroups(shoppingListItems: ShoppingListItemWithRefs[]): Group[] { const ingredients_by_product_id: Record = {} const ingredients_by_name: Record = {} for (const item of shoppingListItems) { - if (item.ingredient.product) { + if (item.ingredient?.product) { let group = ingredients_by_product_id[item.ingredient.product.id] if (!group) { group = ingredients_by_product_id[item.ingredient.product.id] = { @@ -48,11 +36,12 @@ export function itemsToGroups(shoppingListItems: UIShoppingListItem[]): Group[] } group.shoppingListItems.push(item) } else { - let group = ingredients_by_name[item.ingredient.name] + const name = item.ingredient?.name ?? '' + let group = ingredients_by_name[name] if (!group) { - group = ingredients_by_name[item.ingredient.name] = { + group = ingredients_by_name[name] = { type: 'name', - name: item.ingredient.name, + name, shoppingListItems: [], } } @@ -63,34 +52,8 @@ export function itemsToGroups(shoppingListItems: UIShoppingListItem[]): Group[] } export function useShopping() { - // Request shapes expected by sdk.purchaseShoppingList - type PurchaseExisting = { type: 'existing'; id: number; personId: number; ingredientId?: number | null } - type PurchaseRefs = { type: 'refs'; personId: number; ingredientId?: number | null; recipeId?: number | null; mealId?: number | null } - const toExisting = (id: number, personId: number, ingredientId?: number | null): PurchaseExisting => ({ type: 'existing', id, personId, ingredientId: ingredientId ?? null }) - const toRefs = (personId: number, ingredientId?: number | null, recipeId?: number | null, mealId?: number | null): PurchaseRefs => ({ - type: 'refs', - personId, - ingredientId: ingredientId ?? null, - recipeId: recipeId ?? null, - mealId: mealId ?? null, - }) - const mapItemToUI = (i: ShoppingListItemWithRefs): UIShoppingListItem => ({ - id: Number(i.id), - ingredient: i.ingredient!, - person: null, - personId: i.personId, - recipe: i.recipe ?? null, - meal: i.meal ?? null, - ingredientId: i.ingredient?.id ?? null, - listId: i.listId ?? null, - createdDate: i.createdDate, - }) - const groupsFrom = (items?: ShoppingListItemWithRefs[]): Group[] => { - return itemsToGroups((items ?? []).map(mapItemToUI)) - } - const mealsFrom = (items?: ShoppingListItemWithRefs[]): Meal[] => { - return uniqueMeals((items ?? []).map(mapItemToUI)) - } + const groupsFrom = (items?: ShoppingListItemWithRefs[]): Group[] => itemsToGroups(items ?? []) + const mealsFrom = (items?: ShoppingListItemWithRefs[]): Meal[] => uniqueMeals(items ?? []) return { getCurrentShoppingList: sdk.getCurrentShoppingList, getShoppingList: sdk.getShoppingList, @@ -100,15 +63,21 @@ export function useShopping() { getMyShoppingList: sdk.getMyShoppingList, saveMyShoppingList: sdk.saveMyShoppingList, // View-model helpers - mapItemToUI, groupsFrom, mealsFrom, async purchaseFromGroups(groups: Group[]) { - const items = groupsToItems(groups).map((i) => - typeof i.id === 'number' && i.id >= 0 - ? toExisting(i.id, i.personId, i.ingredientId) - : toRefs(i.personId, i.ingredient?.id ?? null, i.recipe?.id ?? null, i.meal?.id ?? null) - ) + const items = groupsToItems(groups).map((i): sdk.PurchaseRequest => { + if (typeof i.id === 'number' && i.id >= 0) { + return { type: 'existing', id: i.id, personId: i.personId, ingredientId: i.ingredient?.id ?? null } + } + return { + type: 'refs', + personId: i.personId, + ingredientId: i.ingredient?.id ?? null, + recipeId: i.recipe?.id ?? null, + mealId: i.meal?.id ?? null, + } + }) if (!items?.length) return null return sdk.purchaseShoppingList(items) }, diff --git a/src/domain/decoders.ts b/src/domain/decoders.ts index 055a53e..0fa5050 100644 --- a/src/domain/decoders.ts +++ b/src/domain/decoders.ts @@ -1,4 +1,4 @@ -import type { RecipeOut, Recipe, MealOut, Meal, MealRecipe, Ingredient as DomainIngredient, ShoppingList, ShoppingListItem } from './types' +import type { RecipeOut, Recipe, MealOut, Meal, MealRecipe, Ingredient as DomainIngredient, ShoppingList, ShoppingListItem, MealInput } from './types' import type { components } from '@/api/types' export function toDate(value: string | Date | null | undefined): Date | null { @@ -6,6 +6,23 @@ export function toDate(value: string | Date | null | undefined): Date | null { return typeof value === 'string' ? new Date(value) : value } +// Small helper to decode optional lookup maps without repeating loops everywhere +export function decodeLookup( + raw: Record | null | undefined, + decode: (v: TIn) => TOut | null +): Record | undefined { + if (!raw) return undefined + const out: Record = {} + for (const key of Object.keys(raw)) { + if (!Object.prototype.hasOwnProperty.call(raw, key)) continue + const maybe = raw[key] + if (maybe === undefined) continue + const decoded = decode(maybe) + if (decoded) out[String(key)] = decoded + } + return out +} + export function decodeRecipe(r: RecipeOut | null | undefined): Recipe | null { if (!r) return null return { @@ -15,10 +32,6 @@ export function decodeRecipe(r: RecipeOut | null | undefined): Recipe | null { } } -export function decodeRecipes(list: RecipeOut[] | null | undefined): Recipe[] { - if (!Array.isArray(list)) return [] - return list.map((r) => decodeRecipe(r)).filter((r): r is Recipe => !!r) -} export function decodeMeal(m: MealOut | null | undefined): Meal | null { if (!m) return null @@ -81,3 +94,23 @@ export function decodeShoppingList(v: components['schemas']['ShoppingList'] | nu ...(items ? { items } : {}), } } + +// Helper to convert domain Meal to MealInput, keeping Date→string conversion in boundary +export function toMealInput(meal: Meal): MealInput { + return { + id: meal.id, + suggestedDate: meal.suggestedDate ? meal.suggestedDate.toISOString() : new Date().toISOString(), + consumedDate: meal.consumedDate ? meal.consumedDate.toISOString() : null, + purchaseDate: meal.purchaseDate ? meal.purchaseDate.toISOString() : null, + chefs: meal.chefs, + cleanup: meal.cleanup, + consumers: meal.consumers, + recipes: meal.recipes.map((r) => ({ + mealId: r.mealId, + recipeId: r.recipeId, + servings: r.servings, + recipe: null, + })), + extraIngredients: meal.extraIngredients, + } +} diff --git a/src/domain/types.ts b/src/domain/types.ts index cbc98de..54c02e3 100644 --- a/src/domain/types.ts +++ b/src/domain/types.ts @@ -4,10 +4,9 @@ import type { components } from '@/api/types' export type Replace = Omit & M export type WithDates = Replace -// Common helpers -export type Maybe = T | null | undefined -export type NonNull = Exclude +// Common helpers (intentionally minimal to avoid unused exports) export type Lookup = Record +// Refs are optional and may be attached later by mappers (e.g., in sdk) export type WithRefs = T & { [K in keyof Refs]?: Refs[K] | undefined } // Domain type aliases @@ -49,7 +48,7 @@ export type ShoppingListItemWithRefs = WithRefs -// Lookup maps used by shopping mappings +// Lookup maps used by shopping mappings (all optional; mappers may omit absent ones) export type ShoppingLookups = { ingredientsLookup?: Lookup mealsLookup?: Lookup diff --git a/tests/useAlert.test.js b/tests/useAlert.test.js deleted file mode 100644 index 60815d5..0000000 --- a/tests/useAlert.test.js +++ /dev/null @@ -1,7 +0,0 @@ -// Legacy JS test shim: the authoritative tests live in tests/useAlert.test.ts -// Keep a trivial passing test here so Vitest doesn't fail this file collection. -import { it, expect } from 'vitest' - -it('noop shim (see useAlert.test.ts)', () => { - expect(true).toBe(true) -}) diff --git a/ts-prune.baseline.txt b/ts-prune.baseline.txt new file mode 100644 index 0000000..a88cce8 --- /dev/null +++ b/ts-prune.baseline.txt @@ -0,0 +1,60 @@ +src/dateformats.ts:6 - ago +src/units.ts:104 - getConversionFactor (used in module) +src/units.ts:130 - calculateTotals +src/units.ts:2 - UnitKey (used in module) +src/units.ts:4 - equivalentUnits (used in module) +src/units.ts:127 - Quantity (used in module) +src/units.ts:128 - Total (used in module) +src/api/sdk.ts:54 - mapPurchasedShoppingList (used in module) +src/api/sdk.ts:90 - mapCurrentShoppingList (used in module) +src/api/sdk.ts:134 - listRecipes +src/api/sdk.ts:147 - getRecipe +src/api/sdk.ts:153 - saveRecipe +src/api/sdk.ts:159 - deleteRecipe +src/api/sdk.ts:164 - parseRecipe +src/api/sdk.ts:170 - parseIngredients +src/api/sdk.ts:178 - parseProduct +src/api/sdk.ts:189 - listPersons (used in module) +src/api/sdk.ts:202 - getPersonsInHome +src/api/sdk.ts:206 - searchPersons +src/api/types.ts:337 - webhooks +src/api/types.ts:771 - $defs +src/api/types.ts:772 - operations (used in module) +src/composables/useAlert.ts:27 - useAlert +src/composables/useAlert.ts:4 - AlertMessage (used in module) +src/composables/useAuth.ts:8 - loadUser (used in module) +src/composables/useAuth.ts:16 - login (used in module) +src/composables/useAuth.ts:21 - useAuth +src/composables/useMeals.ts:4 - getUpcomingMeals (used in module) +src/composables/useMeals.ts:8 - getMeal (used in module) +src/composables/useMeals.ts:12 - saveMeal (used in module) +src/composables/useMeals.ts:16 - markMealConsumed (used in module) +src/composables/useMeals.ts:20 - deleteMeal (used in module) +src/composables/useMeals.ts:25 - toMealInput (used in module) +src/composables/useMeals.ts:44 - useMeals +src/composables/usePagination.ts:7 - usePagination +src/composables/usePagination.ts:4 - PageParams (used in module) +src/composables/usePagination.ts:5 - PageFetcher (used in module) +src/composables/useShopping.ts:8 - groupsToItems (used in module) +src/composables/useShopping.ts:12 - uniqueMeals (used in module) +src/composables/useShopping.ts:24 - itemsToGroups (used in module) +src/composables/useShopping.ts:54 - useShopping +src/composables/useShopping.ts:4 - GroupByProduct (used in module) +src/composables/useShopping.ts:5 - GroupByName (used in module) +src/composables/useShopping.ts:6 - Group (used in module) +src/domain/decoders.ts:35 - decodeRecipes +src/domain/decoders.ts:59 - decodeMealRecipe (used in module) +src/domain/decoders.ts:78 - decodeShoppingListItem (used in module) +src/domain/decoders.ts:103 - toMealInput +src/domain/types.ts:4 - Replace (used in module) +src/domain/types.ts:5 - WithDates (used in module) +src/domain/types.ts:8 - Maybe +src/domain/types.ts:9 - NonNull +src/domain/types.ts:10 - Lookup (used in module) +src/domain/types.ts:11 - WithRefs (used in module) +src/domain/types.ts:19 - RecipeInput +src/domain/types.ts:21 - MealRecipeOut (used in module) +src/domain/types.ts:50 - ShoppingListWithRefs +src/router/helpers.ts:12 - parseRouteId +src/router/helpers.ts:24 - parseQueryString +src/router/index.ts:14 - createAppRouter diff --git a/vitest.config.js b/vitest.config.js index c43adf8..c9dff06 100644 --- a/vitest.config.js +++ b/vitest.config.js @@ -9,7 +9,7 @@ export default defineConfig({ }, test: { environment: 'node', - include: ['tests/**/*.{test,spec}.js'], + include: ['tests/**/*.{test,spec}.{js,ts}'], globals: true, reporters: 'default', setupFiles: ['tests/test-setup.js'], -- 2.45.2 From 94072019a0d91128111b3f0c8b8aea2e3ed2aed6 Mon Sep 17 00:00:00 2001 From: jableader Date: Tue, 21 Oct 2025 19:19:38 +1100 Subject: [PATCH 02/11] Change decoders to no longer return nullable values, instead throw on invalid input --- src/api/sdk.ts | 10 ++++------ src/domain/decoders.ts | 42 +++++++++++++++++++++--------------------- 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/src/api/sdk.ts b/src/api/sdk.ts index b5cd3f8..e84261a 100644 --- a/src/api/sdk.ts +++ b/src/api/sdk.ts @@ -71,9 +71,7 @@ export function mapPurchasedShoppingList(dto: components['schemas']['PurchasedSh if (listRaw) { const base = decodeShoppingList(listRaw) if (base) { - const decoded = Array.isArray(listRaw.items) ? decodeShoppingListItems(listRaw.items) : [] - // start with decoded items and attach refs below; treat as WithRefs variant - const items = decoded as unknown as import('@/domain/types').ShoppingListItemWithRefs[] + const items = Array.isArray(listRaw.items) ? decodeShoppingListItems(listRaw.items) : [] list = { ...base, items } const lookups: ShoppingLookups = { ...(ingredientsLookup && { ingredientsLookup }), @@ -117,9 +115,9 @@ export function mapCurrentShoppingList(dto: components['schemas']['CurrentShoppi } const dtoOut: CurrentShoppingListDTO = { - outstandingItems: (decodeShoppingListItems(outstandingRaw ?? []) as unknown) as ShoppingListItemWithRefs[], - requestedMeals: (decodeShoppingListItems(requestedRaw ?? []) as unknown) as ShoppingListItemWithRefs[], - purchasedItems: (decodeShoppingListItems(purchasedRaw ?? []) as unknown) as ShoppingListItemWithRefs[], + outstandingItems: decodeShoppingListItems(outstandingRaw ?? []), + requestedMeals: decodeShoppingListItems(requestedRaw ?? []), + purchasedItems: decodeShoppingListItems(purchasedRaw ?? []), ...(ingredientsLookup && { ingredientsLookup }), ...(mealsLookup && { mealsLookup }), ...(recipesLookup && { recipesLookup }), diff --git a/src/domain/decoders.ts b/src/domain/decoders.ts index 0fa5050..31afcdd 100644 --- a/src/domain/decoders.ts +++ b/src/domain/decoders.ts @@ -1,4 +1,4 @@ -import type { RecipeOut, Recipe, MealOut, Meal, MealRecipe, Ingredient as DomainIngredient, ShoppingList, ShoppingListItem, MealInput } from './types' +import type { RecipeOut, Recipe, MealOut, Meal, MealRecipe, Ingredient as DomainIngredient, ShoppingList, ShoppingListItem, ShoppingListItemWithRefs, MealInput } from './types' import type { components } from '@/api/types' export function toDate(value: string | Date | null | undefined): Date | null { @@ -9,7 +9,7 @@ export function toDate(value: string | Date | null | undefined): Date | null { // Small helper to decode optional lookup maps without repeating loops everywhere export function decodeLookup( raw: Record | null | undefined, - decode: (v: TIn) => TOut | null + decode: (v: TIn) => TOut ): Record | undefined { if (!raw) return undefined const out: Record = {} @@ -18,13 +18,13 @@ export function decodeLookup( const maybe = raw[key] if (maybe === undefined) continue const decoded = decode(maybe) - if (decoded) out[String(key)] = decoded + out[String(key)] = decoded } return out } -export function decodeRecipe(r: RecipeOut | null | undefined): Recipe | null { - if (!r) return null +export function decodeRecipe(r: RecipeOut | null | undefined): Recipe { + if (!r) throw new Error('Invalid recipe payload') return { ...r, dateCreated: toDate(r.dateCreated), @@ -32,11 +32,10 @@ export function decodeRecipe(r: RecipeOut | null | undefined): Recipe | null { } } - -export function decodeMeal(m: MealOut | null | undefined): Meal | null { - if (!m) return null - const recipes = Array.isArray(m.recipes) - ? m.recipes.map(mr => decodeMealRecipe(mr)).filter((r): r is MealRecipe => !!r) +export function decodeMeal(m: MealOut | null | undefined): Meal { + if (!m) throw new Error('Invalid meal payload') + const recipes = Array.isArray(m.recipes) + ? m.recipes.map((mr) => decodeMealRecipe(mr)) : [] return { @@ -52,40 +51,41 @@ export function decodeMeal(m: MealOut | null | undefined): Meal | null { } } -export function decodeMealRecipe(mr: components['schemas']['MealRecipe-Output'] | null | undefined): MealRecipe | null { - if (!mr) return null +export function decodeMealRecipe(mr: components['schemas']['MealRecipe-Output'] | null | undefined): MealRecipe { + if (!mr) throw new Error('Invalid meal recipe payload') return { ...mr, recipe: mr.recipe ? decodeRecipe(mr.recipe) : null, } } -export function decodeIngredient(i: components['schemas']['Ingredient'] | null | undefined): DomainIngredient | null { - if (!i) return null +export function decodeIngredient(i: components['schemas']['Ingredient'] | null | undefined): DomainIngredient { + if (!i) throw new Error('Invalid ingredient payload') // API guarantees quantity is a number; pass through return { ...i } } export function decodeIngredients(list: components['schemas']['Ingredient'][] | null | undefined): DomainIngredient[] { if (!Array.isArray(list)) return [] - return list.map((i) => decodeIngredient(i)).filter((x): x is DomainIngredient => !!x) + return list.map((i) => decodeIngredient(i)) } -export function decodeShoppingListItem(i: components['schemas']['ShoppingListItem'] | null | undefined): ShoppingListItem | null { - if (!i) return null +export function decodeShoppingListItem(i: components['schemas']['ShoppingListItem'] | null | undefined): ShoppingListItem { + if (!i) throw new Error('Invalid shopping list item payload') return { ...i, createdDate: toDate(i.createdDate), } } -export function decodeShoppingListItems(list: components['schemas']['ShoppingListItem'][] | null | undefined): ShoppingListItem[] { +export function decodeShoppingListItems(list: components['schemas']['ShoppingListItem'][] | null | undefined): ShoppingListItemWithRefs[] { if (!Array.isArray(list)) return [] - return list.map((i) => decodeShoppingListItem(i)).filter((x): x is ShoppingListItem => !!x) + // Build a new array with item clones to allow optional refs to be attached later + return list.map((raw) => ({ ...decodeShoppingListItem(raw) })) } -export function decodeShoppingList(v: components['schemas']['ShoppingList'] | null | undefined): ShoppingList | null { - if (!v) return null +export function decodeShoppingList(v: components['schemas']['ShoppingList'] | null | undefined): ShoppingList { + if (!v) throw new Error('Invalid shopping list payload') const { items: rawItems, ...rest } = v const items = Array.isArray(rawItems) ? decodeShoppingListItems(rawItems) : undefined return { -- 2.45.2 From e7bf843c98e449d93297e1fbe371f0085b5fda25 Mon Sep 17 00:00:00 2001 From: jableader Date: Tue, 21 Oct 2025 19:23:26 +1100 Subject: [PATCH 03/11] update the spec doc with this decoder-contract change and run a quick ts-prune/dependency pass next. --- code-removal-and-consolodation-spec.md | 9 +++++ depcheck.current.json | 1 + ts-prune.current.txt | 54 ++++++++++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 depcheck.current.json create mode 100644 ts-prune.current.txt diff --git a/code-removal-and-consolodation-spec.md b/code-removal-and-consolodation-spec.md index 1303f77..dd042b3 100644 --- a/code-removal-and-consolodation-spec.md +++ b/code-removal-and-consolodation-spec.md @@ -40,6 +40,12 @@ Status update (2025-10-21) - Resolved typecheck errors after domain ref opt-in changes: updated ShoppingListItem.vue to remove person ref usage and guard optional ingredient access; TS + vue-tsc + tests pass. - Verified end-to-end: lint PASS, typecheck PASS, vue-tsc PASS, tests PASS (no regressions). - Reduced nullability in public SDK APIs where safe: getRecipe/getMeal/markMealConsumed/getCurrentShoppingList now return non-null and throw on errors; updated call sites accordingly. + - Domain decoders now return non-null and throw on invalid input (decodeRecipe/decodeMeal/decodeMealRecipe/decodeIngredient/decodeShoppingListItem/decodeShoppingList); list decoders return arrays. + - Lint/typecheck/vue-tsc/tests: all PASS after decoder contract tightening. + +Latest analysis artifacts (2025-10-21) +- ts-prune (current): saved to ts-prune.current.txt; notable false-positives include dateformats.ago and units functions used inside SFCs. +- depcheck (current): saved to depcheck.current.json; flags core-js and several dev deps as unused. These are likely required by Vue CLI/babel/coverage tooling; defer removal pending deeper validation. Scope - In: TS/Vue app code, tests, configs, scripts; Python utilities if present. @@ -70,6 +76,7 @@ Ordered checklist (actionable) 2) Dead code inventory - [ ] ts-prune: list unused exports; verify via rg searches. + - [x] Refreshed ts-prune; review and mark SFC-used exports to avoid accidental removals. - [ ] Find unreferenced files: rg -l "export default|export const|export function" | while read f; do rg -q "(from|import).*$f" -g "!$f" . || echo "$f"; done @@ -138,6 +145,7 @@ Acceptance 8) Dependency cleanup - [ ] Remove unused npm deps (depcheck) and scripts. + - [x] Refreshed depcheck results saved; plan conservative removals only after confirming toolchain needs. - [ ] Prefer stdlib/small helpers over heavy libs where equal. - [ ] npm prune && clean install; verify build. @@ -189,6 +197,7 @@ Next actions (clear, actionable) 4) Shrink public API surface - [x] Use ts-prune results to remove unused exports in domain and sdk - [ ] Second pass: validate remaining ts-prune hints against .vue usage; prune safely + - [ ] Consider reducing parseRecipe nullability (throw on parse failures) if UI updated accordingly 5) Test suite consolidation - [x] De-duplicate tests with .js and .ts counterparts (e.g., prefer TypeScript) 6) Dependency cleanup diff --git a/depcheck.current.json b/depcheck.current.json new file mode 100644 index 0000000..99b311e --- /dev/null +++ b/depcheck.current.json @@ -0,0 +1 @@ +{"dependencies":["core-js"],"devDependencies":["@babel/core","@babel/eslint-parser","@vitest/coverage-v8","@vue/cli-plugin-eslint","@vue/cli-plugin-typescript","node-fetch","undici"],"missing":{"vue-eslint-parser":["/home/jables/source/doof/munch-ease-frontend/package.json"],"vite":["/home/jables/source/doof/munch-ease-frontend/tsconfig.json"]},"using":{"@vue/cli-plugin-babel":["/home/jables/source/doof/munch-ease-frontend/babel.config.js"],"@vue/cli-service":["/home/jables/source/doof/munch-ease-frontend/babel.config.js","/home/jables/source/doof/munch-ease-frontend/package.json","/home/jables/source/doof/munch-ease-frontend/vue.config.js"],"husky":["/home/jables/source/doof/munch-ease-frontend/package.json"],"openapi-typescript":["/home/jables/source/doof/munch-ease-frontend/package.json"],"prettier":["/home/jables/source/doof/munch-ease-frontend/package.json"],"typescript":["/home/jables/source/doof/munch-ease-frontend/package.json","/home/jables/source/doof/munch-ease-frontend/tests/test-setup.js","/home/jables/source/doof/munch-ease-frontend/src/main.ts","/home/jables/source/doof/munch-ease-frontend/src/shims-vue.d.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/useAlert.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/useAuth.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/usePagination.ts","/home/jables/source/doof/munch-ease-frontend/src/components/AlertToast.vue","/home/jables/source/doof/munch-ease-frontend/src/components/LoginPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/EditRecipePage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/DatePicker.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/EditMealPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealCard.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealPlanPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/PersonList.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/IngredientLine.vue"],"vitest":["/home/jables/source/doof/munch-ease-frontend/package.json","/home/jables/source/doof/munch-ease-frontend/vitest.config.js","/home/jables/source/doof/munch-ease-frontend/tests/mealMapper.test.js","/home/jables/source/doof/munch-ease-frontend/tests/meals.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/meals.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/parse.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/parse.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/persons.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/persons.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/recipes.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/recipes.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shopping.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shopping.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shoppingListMapper.test.js","/home/jables/source/doof/munch-ease-frontend/tests/test-setup.js","/home/jables/source/doof/munch-ease-frontend/tests/units.test.js","/home/jables/source/doof/munch-ease-frontend/tests/useAlert.test.ts"],"vue-tsc":["/home/jables/source/doof/munch-ease-frontend/package.json"],"@types/node":["/home/jables/source/doof/munch-ease-frontend/package.json","/home/jables/source/doof/munch-ease-frontend/tsconfig.json","/home/jables/source/doof/munch-ease-frontend/vitest.config.js","/home/jables/source/doof/munch-ease-frontend/tests/mealMapper.test.js","/home/jables/source/doof/munch-ease-frontend/tests/meals.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/meals.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/parse.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/parse.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/persons.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/persons.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/recipes.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/recipes.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shopping.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shopping.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shoppingListMapper.test.js","/home/jables/source/doof/munch-ease-frontend/tests/test-setup.js","/home/jables/source/doof/munch-ease-frontend/tests/units.test.js","/home/jables/source/doof/munch-ease-frontend/tests/useAlert.test.ts"],"vue-eslint-parser":["/home/jables/source/doof/munch-ease-frontend/package.json"],"@typescript-eslint/eslint-plugin":["/home/jables/source/doof/munch-ease-frontend/package.json"],"eslint-plugin-vue":["/home/jables/source/doof/munch-ease-frontend/package.json"],"eslint":["/home/jables/source/doof/munch-ease-frontend/package.json"],"@typescript-eslint/parser":["/home/jables/source/doof/munch-ease-frontend/package.json"],"lint-staged":["/home/jables/source/doof/munch-ease-frontend/package.json"],"vite":["/home/jables/source/doof/munch-ease-frontend/tsconfig.json"],"msw":["/home/jables/source/doof/munch-ease-frontend/tests/test-setup.js"],"vue":["/home/jables/source/doof/munch-ease-frontend/src/main.ts","/home/jables/source/doof/munch-ease-frontend/src/shims-vue.d.ts","/home/jables/source/doof/munch-ease-frontend/src/router/helpers.ts","/home/jables/source/doof/munch-ease-frontend/src/router/index.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/useAlert.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/useAuth.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/usePagination.ts","/home/jables/source/doof/munch-ease-frontend/src/components/AlertToast.vue","/home/jables/source/doof/munch-ease-frontend/src/components/LoginPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/EditRecipePage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipesPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/DatePicker.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/EditMealPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealCard.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealPlanPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/PersonList.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/IngredientLine.vue"],"vue-router":["/home/jables/source/doof/munch-ease-frontend/src/router/helpers.ts","/home/jables/source/doof/munch-ease-frontend/src/router/index.ts","/home/jables/source/doof/munch-ease-frontend/src/components/LoginPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/EditRecipePage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipesPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/EditMealPage.vue"],"openapi-fetch":["/home/jables/source/doof/munch-ease-frontend/src/api/client.ts"]},"invalidFiles":{},"invalidDirs":{}} diff --git a/ts-prune.current.txt b/ts-prune.current.txt new file mode 100644 index 0000000..74e2869 --- /dev/null +++ b/ts-prune.current.txt @@ -0,0 +1,54 @@ +src/dateformats.ts:6 - ago +src/units.ts:104 - getConversionFactor (used in module) +src/units.ts:130 - calculateTotals +src/units.ts:2 - UnitKey (used in module) +src/units.ts:4 - equivalentUnits (used in module) +src/units.ts:127 - Quantity (used in module) +src/units.ts:128 - Total (used in module) +src/api/sdk.ts:58 - mapPurchasedShoppingList (used in module) +src/api/sdk.ts:96 - mapCurrentShoppingList (used in module) +src/api/sdk.ts:140 - listRecipes +src/api/sdk.ts:153 - getRecipe +src/api/sdk.ts:161 - saveRecipe +src/api/sdk.ts:167 - deleteRecipe +src/api/sdk.ts:172 - parseRecipe +src/api/sdk.ts:178 - parseIngredients +src/api/sdk.ts:186 - parseProduct +src/api/sdk.ts:197 - listPersons (used in module) +src/api/sdk.ts:210 - getPersonsInHome +src/api/sdk.ts:214 - searchPersons +src/api/sdk.ts:219 - getUpcomingMeals +src/api/sdk.ts:231 - getMeal +src/api/sdk.ts:239 - saveMeal +src/api/sdk.ts:255 - markMealConsumed +src/api/sdk.ts:265 - deleteMeal +src/api/sdk.ts:303 - PurchaseExisting (used in module) +src/api/sdk.ts:304 - PurchaseRefs (used in module) +src/composables/useAlert.ts:27 - useAlert +src/composables/useAlert.ts:4 - AlertMessage (used in module) +src/composables/useAuth.ts:8 - loadUser (used in module) +src/composables/useAuth.ts:16 - login (used in module) +src/composables/useAuth.ts:21 - useAuth +src/composables/usePagination.ts:7 - usePagination +src/composables/usePagination.ts:4 - PageParams (used in module) +src/composables/usePagination.ts:5 - PageFetcher (used in module) +src/composables/useShopping.ts:8 - groupsToItems (used in module) +src/composables/useShopping.ts:12 - uniqueMeals (used in module) +src/composables/useShopping.ts:24 - itemsToGroups (used in module) +src/composables/useShopping.ts:54 - useShopping +src/composables/useShopping.ts:4 - GroupByProduct (used in module) +src/composables/useShopping.ts:5 - GroupByName (used in module) +src/composables/useShopping.ts:6 - Group (used in module) +src/domain/decoders.ts:54 - decodeMealRecipe (used in module) +src/domain/decoders.ts:73 - decodeShoppingListItem (used in module) +src/domain/decoders.ts:99 - toMealInput +src/domain/types.ts:4 - Replace (used in module) +src/domain/types.ts:5 - WithDates (used in module) +src/domain/types.ts:8 - Lookup (used in module) +src/domain/types.ts:10 - WithRefs (used in module) +src/domain/types.ts:18 - RecipeInput +src/domain/types.ts:20 - MealRecipeOut (used in module) +src/domain/types.ts:49 - ShoppingListWithRefs +src/router/helpers.ts:12 - parseRouteId +src/router/helpers.ts:24 - parseQueryString +src/router/index.ts:14 - createAppRouter -- 2.45.2 From 6472e507c7bd5e1866a053a1da93b906c82562a2 Mon Sep 17 00:00:00 2001 From: jableader Date: Tue, 21 Oct 2025 19:40:03 +1100 Subject: [PATCH 04/11] Removed corejs --- package-lock.json | 23 +++-------------------- package.json | 3 --- src/api/sdk.ts | 9 ++++----- tests/test-setup.js | 4 ++-- tsconfig.json | 2 +- 5 files changed, 10 insertions(+), 31 deletions(-) diff --git a/package-lock.json b/package-lock.json index fb755f0..683f58a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,6 @@ "name": "doof", "version": "0.1.0", "dependencies": { - "core-js": "^3.8.3", "vue": "^3.5.12", "vue-router": "^4.4.5" }, @@ -28,12 +27,10 @@ "husky": "^8.0.0", "lint-staged": "^13.3.0", "msw": "^2.5.2", - "node-fetch": "^2.6.9", "openapi-fetch": "^0.9.5", "openapi-typescript": "^7.4.2", "prettier": "^3.3.3", "typescript": "~5.5.4", - "undici": "^6.19.8", "vitest": "^1.6.0", "vue-tsc": "^2.0.29" } @@ -6296,6 +6293,7 @@ "version": "3.35.0", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.35.0.tgz", "integrity": "sha512-ntakECeqg81KqMueeGJ79Q5ZgQNR+6eaE8sxGCx62zMbAIj65q+uYvatToew3m6eAGdU4gNZwpZ34NMe4GYswg==", + "dev": true, "hasInstallScript": true, "funding": { "type": "opencollective", @@ -14092,16 +14090,6 @@ "dev": true, "license": "MIT" }, - "node_modules/undici": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.22.0.tgz", - "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, "node_modules/undici-types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", @@ -19968,7 +19956,8 @@ "core-js": { "version": "3.35.0", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.35.0.tgz", - "integrity": "sha512-ntakECeqg81KqMueeGJ79Q5ZgQNR+6eaE8sxGCx62zMbAIj65q+uYvatToew3m6eAGdU4gNZwpZ34NMe4GYswg==" + "integrity": "sha512-ntakECeqg81KqMueeGJ79Q5ZgQNR+6eaE8sxGCx62zMbAIj65q+uYvatToew3m6eAGdU4gNZwpZ34NMe4GYswg==", + "dev": true }, "core-js-compat": { "version": "3.35.0", @@ -25517,12 +25506,6 @@ "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", "dev": true }, - "undici": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.22.0.tgz", - "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==", - "dev": true - }, "undici-types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", diff --git a/package.json b/package.json index 1a40eec..d9b29ba 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,6 @@ "codegen:check": "node scripts/codegen-check.js" }, "dependencies": { - "core-js": "^3.8.3", "vue": "^3.5.12", "vue-router": "^4.4.5" }, @@ -38,12 +37,10 @@ "husky": "^8.0.0", "lint-staged": "^13.3.0", "msw": "^2.5.2", - "node-fetch": "^2.6.9", "openapi-fetch": "^0.9.5", "openapi-typescript": "^7.4.2", "prettier": "^3.3.3", "typescript": "~5.5.4", - "undici": "^6.19.8", "vitest": "^1.6.0", "vue-tsc": "^2.0.29" }, diff --git a/src/api/sdk.ts b/src/api/sdk.ts index e84261a..ca1c644 100644 --- a/src/api/sdk.ts +++ b/src/api/sdk.ts @@ -146,8 +146,7 @@ export async function listRecipes(params?: { q?: string | null; cursor?: string } const { data, error, response } = await api.GET('/api/v1/recipes', { params: { query } }) if (!response.ok) throw httpError(response, error) - const mapped = fromOpenApiPage(data ?? null, (r) => decodeRecipe(r)) - return { ...mapped, items: mapped.items.filter((r): r is Recipe => !!r) } + return fromOpenApiPage(data ?? null, (r) => decodeRecipe(r)) } export async function getRecipe(id: number | string): Promise { @@ -194,7 +193,7 @@ export async function parseProduct( } // Persons -export async function listPersons(params?: { q?: string | null; cursor?: string | null; limit?: number }): Promise> { +async function listPersons(params?: { q?: string | null; cursor?: string | null; limit?: number }): Promise> { const query: Record = {} if (params) { if (params.q !== undefined) query.q = params.q @@ -300,8 +299,8 @@ export async function getCurrentShoppingList(): Promise return mapped } -export type PurchaseExisting = { type: 'existing'; id: number; personId: number; ingredientId?: number | null } -export type PurchaseRefs = { type: 'refs'; personId: number; ingredientId?: number | null; recipeId?: number | null; mealId?: number | null } +type PurchaseExisting = { type: 'existing'; id: number; personId: number; ingredientId?: number | null } +type PurchaseRefs = { type: 'refs'; personId: number; ingredientId?: number | null; recipeId?: number | null; mealId?: number | null } export type PurchaseRequest = PurchaseExisting | PurchaseRefs export async function purchaseShoppingList( diff --git a/tests/test-setup.js b/tests/test-setup.js index a9b8a2d..2d200e5 100644 --- a/tests/test-setup.js +++ b/tests/test-setup.js @@ -2,8 +2,8 @@ import { afterAll, afterEach, beforeAll } from 'vitest' import { setupServer } from 'msw/node' import { http, HttpResponse } from 'msw' -// Ensure global fetch is available in Node tests -// Use Node 18+ global fetch (undici). Do not override so MSW can intercept. +// Ensure global fetch is available in Node tests (Node 18+ provides global fetch) +// Do not override so MSW can intercept. // Some CI envs inject corporate roots causing TLS issues; disable cert checks in tests only process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0' diff --git a/tsconfig.json b/tsconfig.json index e111768..0adf0ca 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,7 @@ "allowJs": false, "checkJs": false, "skipLibCheck": true, - "types": ["node", "vite/client"], + "types": ["node"], "baseUrl": ".", "paths": { "@/*": ["src/*"] -- 2.45.2 From 6e5d4d20b84d526402c010ad3de7be29034c041b Mon Sep 17 00:00:00 2001 From: jableader Date: Tue, 21 Oct 2025 19:40:12 +1100 Subject: [PATCH 05/11] Ran codegen --- src/api/types.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/api/types.ts b/src/api/types.ts index 9f4eb31..b49e475 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -506,9 +506,10 @@ export interface components { prevCursor?: string | null; /** * Total - * @description Optional total count + * @description Total count + * @default 0 */ - total?: number | null; + total: number; }; /** Page[Recipe] */ Page_Recipe_: { @@ -520,9 +521,10 @@ export interface components { prevCursor?: string | null; /** * Total - * @description Optional total count + * @description Total count + * @default 0 */ - total?: number | null; + total: number; }; /** Person */ Person: { @@ -575,8 +577,6 @@ export interface components { imgSmall: string; /** Imglarge */ imgLarge: string; - /** Rawdata */ - rawData?: Record | null; }; /** ProductUrl */ ProductUrl: { @@ -626,7 +626,7 @@ export interface components { */ dateCreated?: string; /** Createdbyid */ - createdById: number | null; + createdById: number; createdBy?: components["schemas"]["Person"] | null; /** Datehidden */ dateHidden?: string | null; @@ -659,7 +659,7 @@ export interface components { */ dateCreated?: string; /** Createdbyid */ - createdById: number | null; + createdById: number; createdBy?: components["schemas"]["Person"] | null; /** Datehidden */ dateHidden?: string | null; -- 2.45.2 From aebfc50e17e30fca0bf584825a1748939c97ac63 Mon Sep 17 00:00:00 2001 From: jableader Date: Tue, 21 Oct 2025 20:01:26 +1100 Subject: [PATCH 06/11] Hide internal-only helpers/types: decoders.decodeMealRecipe/decodeShoppingListItem made module-private; units.UnitKey/equivalentUnits/Quantity/Total are no longer exported. --- code-removal-and-consolodation-spec.md | 9 +++++++-- src/domain/decoders.ts | 4 ++-- src/units.ts | 8 ++++---- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/code-removal-and-consolodation-spec.md b/code-removal-and-consolodation-spec.md index dd042b3..afc1ee9 100644 --- a/code-removal-and-consolodation-spec.md +++ b/code-removal-and-consolodation-spec.md @@ -42,10 +42,12 @@ Status update (2025-10-21) - Reduced nullability in public SDK APIs where safe: getRecipe/getMeal/markMealConsumed/getCurrentShoppingList now return non-null and throw on errors; updated call sites accordingly. - Domain decoders now return non-null and throw on invalid input (decodeRecipe/decodeMeal/decodeMealRecipe/decodeIngredient/decodeShoppingListItem/decodeShoppingList); list decoders return arrays. - Lint/typecheck/vue-tsc/tests: all PASS after decoder contract tightening. + - Aggressive dependency cleanup: removed node-fetch and undici (unused in Node 18+), removed core-js (build and tests still PASS under current browserslist targets), and dropped Vite types from tsconfig. All checks and build PASS post-removal. Latest analysis artifacts (2025-10-21) - ts-prune (current): saved to ts-prune.current.txt; notable false-positives include dateformats.ago and units functions used inside SFCs. - depcheck (current): saved to depcheck.current.json; flags core-js and several dev deps as unused. These are likely required by Vue CLI/babel/coverage tooling; defer removal pending deeper validation. + - Follow-up result: Verified removal of core-js, node-fetch, undici did not impact tests/typecheck/build. Retained Vue CLI/Babel/coverage deps. Scope - In: TS/Vue app code, tests, configs, scripts; Python utilities if present. @@ -121,6 +123,8 @@ Acceptance - [ ] Remove unused overloads/params; prefer narrower interfaces. - [ ] Update re-exports; fix imports accordingly. - [x] Reduce unnecessary null/undefined on public SDK returns (getRecipe/getMeal/markMealConsumed/getCurrentShoppingList). + - [x] Narrowed visibility of internal helpers/types (listPersons made internal; PurchaseExisting/PurchaseRefs internal, union type exported). + - [x] Hide internal-only helpers/types: decoders.decodeMealRecipe/decodeShoppingListItem made module-private; units.UnitKey/equivalentUnits/Quantity/Total are no longer exported. Acceptance - [ ] ts-prune emits fewer/no unused export warnings. @@ -201,6 +205,7 @@ Next actions (clear, actionable) 5) Test suite consolidation - [x] De-duplicate tests with .js and .ts counterparts (e.g., prefer TypeScript) 6) Dependency cleanup - - [ ] Remove unused npm deps/scripts per depcheck; npm prune; verify build (defer core-js and Vue CLI toolchain deps) + - [x] Remove unused npm deps (depcheck) and scripts (removed core-js, node-fetch, undici). Verified tests/typecheck/build PASS. 7) Final verification - - [ ] Re-run cloc/tests/build; record deltas vs. baseline; sanity test user flows \ No newline at end of file + - [ ] Re-run cloc/tests/build; record deltas vs. baseline; sanity test user flows + - [x] Interim verification after dep cleanup: tests/typecheck/vue-tsc/lint/build PASS \ No newline at end of file diff --git a/src/domain/decoders.ts b/src/domain/decoders.ts index 31afcdd..a3ac419 100644 --- a/src/domain/decoders.ts +++ b/src/domain/decoders.ts @@ -51,7 +51,7 @@ export function decodeMeal(m: MealOut | null | undefined): Meal { } } -export function decodeMealRecipe(mr: components['schemas']['MealRecipe-Output'] | null | undefined): MealRecipe { +function decodeMealRecipe(mr: components['schemas']['MealRecipe-Output'] | null | undefined): MealRecipe { if (!mr) throw new Error('Invalid meal recipe payload') return { ...mr, @@ -70,7 +70,7 @@ export function decodeIngredients(list: components['schemas']['Ingredient'][] | return list.map((i) => decodeIngredient(i)) } -export function decodeShoppingListItem(i: components['schemas']['ShoppingListItem'] | null | undefined): ShoppingListItem { +function decodeShoppingListItem(i: components['schemas']['ShoppingListItem'] | null | undefined): ShoppingListItem { if (!i) throw new Error('Invalid shopping list item payload') return { ...i, diff --git a/src/units.ts b/src/units.ts index c7edf67..144c2d0 100644 --- a/src/units.ts +++ b/src/units.ts @@ -1,7 +1,7 @@ const UNIT_KEYS_ARRAY: readonly ['kg', 'litres', 'items'] = ['kg', 'litres', 'items'] -export type UnitKey = typeof UNIT_KEYS_ARRAY[number] +type UnitKey = typeof UNIT_KEYS_ARRAY[number] -export const equivalentUnits: Record> = { +const equivalentUnits: Record> = { kg: { kgs: 1, kilograms: 1, @@ -124,8 +124,8 @@ export function getConversionFactor(unit: string): { unit: UnitKey | string; fac return null } -export type Quantity = { quantity: number; unit: string } -export type Total = { unit: string; quantity: number } +type Quantity = { quantity: number; unit: string } +type Total = { unit: string; quantity: number } export function calculateTotals(quantityList: Quantity[]): Total[] { const totals: Record = {} -- 2.45.2 From 303be1d593e3264a79c508cee4546a493845fd63 Mon Sep 17 00:00:00 2001 From: jableader Date: Sat, 25 Oct 2025 12:51:11 +1100 Subject: [PATCH 07/11] Pruned packages --- code-removal-and-consolodation-spec.md | 2 +- package-lock.json | 64 -------------------------- package.json | 2 - 3 files changed, 1 insertion(+), 67 deletions(-) diff --git a/code-removal-and-consolodation-spec.md b/code-removal-and-consolodation-spec.md index afc1ee9..720dfd0 100644 --- a/code-removal-and-consolodation-spec.md +++ b/code-removal-and-consolodation-spec.md @@ -205,7 +205,7 @@ Next actions (clear, actionable) 5) Test suite consolidation - [x] De-duplicate tests with .js and .ts counterparts (e.g., prefer TypeScript) 6) Dependency cleanup - - [x] Remove unused npm deps (depcheck) and scripts (removed core-js, node-fetch, undici). Verified tests/typecheck/build PASS. + - [x] Remove unused npm deps (depcheck) and scripts (removed core-js, node-fetch, undici, @babel/eslint-parser). Verified tests/typecheck/build PASS. 7) Final verification - [ ] Re-run cloc/tests/build; record deltas vs. baseline; sanity test user flows - [x] Interim verification after dep cleanup: tests/typecheck/vue-tsc/lint/build PASS \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 683f58a..344b38e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,8 +12,6 @@ "vue-router": "^4.4.5" }, "devDependencies": { - "@babel/core": "^7.12.16", - "@babel/eslint-parser": "^7.12.16", "@types/node": "^20.19.22", "@typescript-eslint/eslint-plugin": "^7.18.0", "@typescript-eslint/parser": "^7.18.0", @@ -125,24 +123,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/eslint-parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz", - "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==", - "dev": true, - "dependencies": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0", - "eslint": "^7.5.0 || ^8.0.0" - } - }, "node_modules/@babel/generator": { "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", @@ -2642,15 +2622,6 @@ "node": ">=18" } }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "dependencies": { - "eslint-scope": "5.1.1" - } - }, "node_modules/@node-ipc/js-queue": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", @@ -7395,15 +7366,6 @@ "node": ">=8.0.0" } }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-webpack-plugin": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", @@ -15683,17 +15645,6 @@ "semver": "^6.3.1" } }, - "@babel/eslint-parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz", - "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==", - "dev": true, - "requires": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" - } - }, "@babel/generator": { "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", @@ -17280,15 +17231,6 @@ "strict-event-emitter": "^0.5.1" } }, - "@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "requires": { - "eslint-scope": "5.1.1" - } - }, "@node-ipc/js-queue": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", @@ -20935,12 +20877,6 @@ "estraverse": "^4.1.1" } }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, "eslint-webpack-plugin": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", diff --git a/package.json b/package.json index d9b29ba..0d6396d 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,6 @@ "vue-router": "^4.4.5" }, "devDependencies": { - "@babel/core": "^7.12.16", - "@babel/eslint-parser": "^7.12.16", "@types/node": "^20.19.22", "@typescript-eslint/eslint-plugin": "^7.18.0", "@typescript-eslint/parser": "^7.18.0", -- 2.45.2 From 98cd5e4f60efa5a605a13f0eeab6d6efa6a3cf4f Mon Sep 17 00:00:00 2001 From: jableader Date: Sat, 25 Oct 2025 13:00:11 +1100 Subject: [PATCH 08/11] complete --- build-size.final.txt | 1 + cloc.final.txt | 18 + code-removal-and-consolodation-spec.md | 21 +- coverage/clover.xml | 594 +++++++++--------- coverage/coverage-final.json | 18 +- coverage/index.html | 62 +- coverage/munch-ease-frontend/index.html | 2 +- .../scripts/codegen-check.js.html | 2 +- .../munch-ease-frontend/scripts/index.html | 2 +- coverage/munch-ease-frontend/src/App.vue.html | 2 +- .../munch-ease-frontend/src/api/auth.ts.html | 2 +- .../src/api/client.ts.html | 2 +- .../munch-ease-frontend/src/api/index.html | 30 +- .../munch-ease-frontend/src/api/sdk.ts.html | 108 +++- .../src/components/ActionItem.vue.html | 2 +- .../src/components/AlertToast.vue.html | 2 +- .../src/components/LoginPage.vue.html | 2 +- .../src/components/index.html | 2 +- .../CompactParsedIngredient.vue.html | 2 +- .../EditableIngredientsPanel.vue.html | 2 +- .../ingredients/IngredientLine.vue.html | 2 +- .../src/components/ingredients/index.html | 2 +- .../src/components/meals/DatePicker.vue.html | 2 +- .../components/meals/EditMealPage.vue.html | 29 +- .../src/components/meals/MealCard.vue.html | 42 +- .../components/meals/MealPlanPage.vue.html | 2 +- .../src/components/meals/PersonList.vue.html | 2 +- .../src/components/meals/index.html | 14 +- .../recipes/EditRecipePage.vue.html | 4 +- .../components/recipes/RecipeCard.vue.html | 2 +- .../recipes/RecipeSearchBox.vue.html | 2 +- .../components/recipes/RecipesPage.vue.html | 2 +- .../src/components/recipes/index.html | 2 +- .../shopping/CurrentShoppingListPage.vue.html | 2 +- .../shopping/MealSelectionList.vue.html | 2 +- .../shopping/MyShoppingPage.vue.html | 14 +- .../PurchasedShoppingListPage.vue.html | 2 +- .../shopping/ShoppingListItem.vue.html | 45 +- .../src/components/shopping/index.html | 14 +- .../src/composables/index.html | 2 +- .../src/composables/useAlert.ts.html | 2 +- .../src/composables/useAuth.ts.html | 2 +- .../src/composables/usePagination.ts.html | 2 +- .../src/composables/useShopping.ts.html | 4 +- .../src/dateformats.ts.html | 2 +- .../src/domain/decoders.ts.html | 80 +-- .../munch-ease-frontend/src/domain/index.html | 38 +- .../src/domain/pagination.ts.html | 2 +- coverage/munch-ease-frontend/src/index.html | 2 +- coverage/munch-ease-frontend/src/main.ts.html | 2 +- .../src/router/helpers.ts.html | 2 +- .../munch-ease-frontend/src/router/index.html | 2 +- .../src/router/index.ts.html | 2 +- .../munch-ease-frontend/src/units.ts.html | 10 +- .../munch-ease-frontend/vue.config.js.html | 2 +- src/components/meals/MealCard.vue | 18 +- src/env.d.ts | 17 +- ts-prune.current.txt | 38 +- 58 files changed, 651 insertions(+), 640 deletions(-) create mode 100644 build-size.final.txt create mode 100644 cloc.final.txt diff --git a/build-size.final.txt b/build-size.final.txt new file mode 100644 index 0000000..4e03d74 --- /dev/null +++ b/build-size.final.txt @@ -0,0 +1 @@ +1.6M dist diff --git a/cloc.final.txt b/cloc.final.txt new file mode 100644 index 0000000..c7b269d --- /dev/null +++ b/cloc.final.txt @@ -0,0 +1,18 @@ +github.com/AlDanial/cloc v 2.06 T=0.09 s (1076.5 files/s, 362450.1 lines/s) +------------------------------------------------------------------------------- +Language files blank comment code +------------------------------------------------------------------------------- +JSON 11 0 0 26727 +Vuejs Component 21 342 68 2551 +TypeScript 20 138 375 2293 +JavaScript 18 41 19 358 +Markdown 3 77 0 295 +Text 3 0 0 137 +SVG 19 3 5 122 +YAML 1 10 0 35 +Bourne Shell 2 8 0 32 +HTML 1 0 1 19 +INI 1 2 0 10 +------------------------------------------------------------------------------- +SUM: 100 621 468 32579 +------------------------------------------------------------------------------- diff --git a/code-removal-and-consolodation-spec.md b/code-removal-and-consolodation-spec.md index 720dfd0..e5cf40d 100644 --- a/code-removal-and-consolodation-spec.md +++ b/code-removal-and-consolodation-spec.md @@ -4,6 +4,8 @@ Owner: Engineering Document: code-removal-and-consolodation-spec.md Revision: 2.0 Date: 2025-10-20 +Revision: 2.1 +Date: 2025-10-25 Purpose - Reduce lines of code (LOC) in this TS/Vue project (and any Python utilities) without changing behavior. @@ -49,6 +51,12 @@ Latest analysis artifacts (2025-10-21) - depcheck (current): saved to depcheck.current.json; flags core-js and several dev deps as unused. These are likely required by Vue CLI/babel/coverage tooling; defer removal pending deeper validation. - Follow-up result: Verified removal of core-js, node-fetch, undici did not impact tests/typecheck/build. Retained Vue CLI/Babel/coverage deps. +Final verification snapshots (2025-10-25) +- cloc.final.txt (exclude node_modules, dist, coverage): Files 100, Code 32,579; Vue SFC code 2,551; TS code 2,293. +- Build size (Vue CLI): dist total ~1.6M; key bundles: chunk-vendors ~111KB (gz 40.9KB), app ~9.5KB (gz ~3.9KB). +- Tests + coverage: 14 files, 27 tests, all PASS. Coverage stable on domain/sdk/units; SFCs not covered (unchanged behavior). +- ts-prune refreshed (ts-prune.current.txt). Continue to treat SFC-only usages as false positives. + Scope - In: TS/Vue app code, tests, configs, scripts; Python utilities if present. - Out: New features, architectural rewrites. @@ -165,9 +173,9 @@ Acceptance - [ ] Docs consistent; onboarding simpler. 10) Final verification -- [ ] Re-run cloc; save cloc.final.txt and LOC delta. -- [ ] Re-run tests with coverage; compare to baseline. -- [ ] Re-run build; record bundle size delta. + - [x] Re-run cloc; saved cloc.final.txt and noted summary. + - [x] Re-run tests with coverage; all PASS; coverage consistent with previous runs. + - [x] Re-run build; build size recorded in build-size.final.txt (dist ~1.6M). - [ ] Sanity test main user flows locally. Acceptance @@ -208,4 +216,9 @@ Next actions (clear, actionable) - [x] Remove unused npm deps (depcheck) and scripts (removed core-js, node-fetch, undici, @babel/eslint-parser). Verified tests/typecheck/build PASS. 7) Final verification - [ ] Re-run cloc/tests/build; record deltas vs. baseline; sanity test user flows - - [x] Interim verification after dep cleanup: tests/typecheck/vue-tsc/lint/build PASS \ No newline at end of file + - [x] Interim verification after dep cleanup: tests/typecheck/vue-tsc/lint/build PASS + +Additional targeted opportunities (2025-10-25) +- Simplify env typings: removed Vite-specific triple-slash reference and duplicate ImportMeta declarations; kept a minimal optional ImportMetaEnv in `src/env.d.ts`. All checks PASS. +- Component type audit: migrated `MealCard.vue` to domain `Meal` type with null guards. Remaining spots use purposeful `Pick<>` types; can leave as-is unless standardizing is preferred. +- ts-prune: refreshed; remaining flags are either used by SFC templates or part of public SDK surface. No further safe removals identified without deeper UI refactors. \ No newline at end of file diff --git a/coverage/clover.xml b/coverage/clover.xml index a983a84..e3b0c2e 100644 --- a/coverage/clover.xml +++ b/coverage/clover.xml @@ -1,7 +1,7 @@ - - - + + + @@ -331,7 +331,7 @@ - + @@ -389,7 +389,7 @@ - + @@ -441,14 +441,14 @@ - - - - - - - - + + + + + + + + @@ -459,34 +459,34 @@ - + - - - + + + - - - + + + - - - + + + - - - - - - - - - - - + + + + + + + + + + + @@ -496,239 +496,253 @@ - - - + + + - + - - - - - - - - + + + + + + + + - + - - - - - + + + + + - - - - - - - + + + + + + + - - - - - + + + + + - - - - - - + + + + + + - + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - + + + + - + - - + + - - + + - - - - - - - - + + + + + + + + - + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - + + + + + + + + + + + + + + + + @@ -1320,7 +1334,7 @@ - + @@ -1436,7 +1450,7 @@ - + @@ -1823,12 +1837,9 @@ - - - - + @@ -1919,14 +1930,6 @@ - - - - - - - - @@ -2848,7 +2851,7 @@ - + @@ -3294,7 +3297,7 @@ - + @@ -3383,8 +3386,6 @@ - - @@ -3457,7 +3458,7 @@ - + @@ -3677,6 +3678,9 @@ + + + @@ -3939,9 +3943,9 @@ - + - + @@ -3976,75 +3980,75 @@ - - - - - - - - - - + + + + + + + + + + - - - - + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + @@ -4058,10 +4062,6 @@ - - - - diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json index 856e621..b0a884f 100644 --- a/coverage/coverage-final.json +++ b/coverage/coverage-final.json @@ -3,10 +3,10 @@ ,"/home/jables/source/doof/munch-ease-frontend/src/App.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/App.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":7}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":27}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":20}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":26}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":35}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":31}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":9}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":17}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":22}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":11}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":27}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":20}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":26}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":36}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":31}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":9}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":19}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":22}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":11}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":27}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":20}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":26}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":36}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":31}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":9}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":18}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":22}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":11}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":9}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":8}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":24}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":19}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":8}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":0}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":17}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":11}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":0}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":14}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":52}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":0}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":69}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":9}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":0}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":7}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":6}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":52}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":38}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":37}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":21}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":17}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":19}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":1}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":0}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":53}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":6}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":18}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":10}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":11}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":9}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":13}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":0}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":16}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":32}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":24}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":12}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":13}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":18}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":9}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":14}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":25}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":1}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":0}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":9}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":10}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":1}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":0}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":47}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":8}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":24}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":17}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":21}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":21}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":24}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":1}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":0}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":43}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":25}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":28}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":15}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":1}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":0}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":11}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":20}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":15}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":1}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":98,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":98,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":98,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":98,"column":8}},"line":1}},"f":{"0":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/dateformats.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/dateformats.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":52}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":31}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":54}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":1}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":41}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":24}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":45}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":36}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":69}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":81}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":89}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":97}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":34}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":669},"end":{"line":15,"column":1}},"locations":[{"start":{"line":1,"column":669},"end":{"line":15,"column":1}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":669},"end":{"line":15,"column":1}},"loc":{"start":{"line":1,"column":669},"end":{"line":15,"column":1}},"line":1}},"f":{"0":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/main.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/main.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":31}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":27}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":42}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":40}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":64}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":51}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":26}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":15}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":17}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":323},"end":{"line":11,"column":17}},"locations":[{"start":{"line":1,"column":323},"end":{"line":11,"column":17}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":323},"end":{"line":11,"column":17}},"loc":{"start":{"line":1,"column":323},"end":{"line":11,"column":17}},"line":1}},"f":{"0":0}} -,"/home/jables/source/doof/munch-ease-frontend/src/units.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/units.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":85}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":52}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":73}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":7}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":11}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":17}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":16}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":0}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":12}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":15}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":16}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":0}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":16}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":17}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":19}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":20}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":4}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":11}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":9}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":13}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":13}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":13}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":22}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":21}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":0}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":20}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":26}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":27}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":0}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":17}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":18}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":0}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":17}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":23}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":24}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":0}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":17}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":22}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":23}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":0}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":16}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":18}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":19}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":0}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":16}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":19}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":20}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":0}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":18}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":21}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":22}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":0}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":16}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":19}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":4}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":10}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":12}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":13}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":11}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":13}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":14}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":27}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":24}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":25}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":23}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":24}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":21}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":23}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":24}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":22}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":23}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":23}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":24}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":25}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":27}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":25}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":26}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":28}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":27}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":30}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":31}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":33}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":34}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":35}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":36}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":4}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":1}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":0}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":67}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":53}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":33}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":1}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":0}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":52}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":39}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":39}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":34}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":3}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":13}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":1}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":0}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":102}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":49}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":0}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":46}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":65}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":0}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":36}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":17}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":52}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":69}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":15}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":3}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":0}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":46}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":22}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":62}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":74}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":15}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":3}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":0}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":13}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":1}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":0}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":57}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":54}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":0}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":68}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":43}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":40}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":93}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":34}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":38}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":67}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":3}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":83}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":1}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":16,"92":16,"93":16,"94":1,"95":7,"96":7,"97":11,"98":11,"99":11,"100":0,"101":0,"102":1,"103":1,"104":9,"105":7,"106":7,"107":9,"108":7,"109":7,"110":7,"111":7,"112":7,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":4,"133":4,"134":4,"135":4,"136":4,"137":1,"138":1},"branchMap":{"0":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":0},"end":{"line":94,"column":1}},"locations":[{"start":{"line":92,"column":0},"end":{"line":94,"column":1}}]},"1":{"type":"branch","line":96,"loc":{"start":{"line":96,"column":0},"end":{"line":102,"column":1}},"locations":[{"start":{"line":96,"column":0},"end":{"line":102,"column":1}}]},"2":{"type":"branch","line":97,"loc":{"start":{"line":97,"column":38},"end":{"line":100,"column":3}},"locations":[{"start":{"line":97,"column":38},"end":{"line":100,"column":3}}]},"3":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":23},"end":{"line":99,"column":34}},"locations":[{"start":{"line":99,"column":23},"end":{"line":99,"column":34}}]},"4":{"type":"branch","line":100,"loc":{"start":{"line":100,"column":2},"end":{"line":102,"column":1}},"locations":[{"start":{"line":100,"column":2},"end":{"line":102,"column":1}}]},"5":{"type":"branch","line":104,"loc":{"start":{"line":104,"column":7},"end":{"line":125,"column":1}},"locations":[{"start":{"line":104,"column":7},"end":{"line":125,"column":1}}]},"6":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":23},"end":{"line":105,"column":49}},"locations":[{"start":{"line":105,"column":23},"end":{"line":105,"column":49}}]},"7":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":48},"end":{"line":108,"column":35}},"locations":[{"start":{"line":105,"column":48},"end":{"line":108,"column":35}}]},"8":{"type":"branch","line":108,"loc":{"start":{"line":108,"column":28},"end":{"line":108,"column":65}},"locations":[{"start":{"line":108,"column":28},"end":{"line":108,"column":65}}]},"9":{"type":"branch","line":108,"loc":{"start":{"line":108,"column":64},"end":{"line":115,"column":3}},"locations":[{"start":{"line":108,"column":64},"end":{"line":115,"column":3}}]},"10":{"type":"branch","line":113,"loc":{"start":{"line":113,"column":68},"end":{"line":115,"column":3}},"locations":[{"start":{"line":113,"column":68},"end":{"line":115,"column":3}}]},"11":{"type":"branch","line":115,"loc":{"start":{"line":115,"column":2},"end":{"line":125,"column":1}},"locations":[{"start":{"line":115,"column":2},"end":{"line":125,"column":1}}]},"12":{"type":"branch","line":130,"loc":{"start":{"line":130,"column":7},"end":{"line":139,"column":1}},"locations":[{"start":{"line":130,"column":7},"end":{"line":139,"column":1}}]},"13":{"type":"branch","line":132,"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":3}},"locations":[{"start":{"line":132,"column":39},"end":{"line":137,"column":3}}]},"14":{"type":"branch","line":133,"loc":{"start":{"line":133,"column":54},"end":{"line":133,"column":93}},"locations":[{"start":{"line":133,"column":54},"end":{"line":133,"column":93}}]},"15":{"type":"branch","line":136,"loc":{"start":{"line":136,"column":31},"end":{"line":136,"column":41}},"locations":[{"start":{"line":136,"column":31},"end":{"line":136,"column":41}}]},"16":{"type":"branch","line":138,"loc":{"start":{"line":138,"column":33},"end":{"line":138,"column":82}},"locations":[{"start":{"line":138,"column":33},"end":{"line":138,"column":82}}]},"17":{"type":"branch","line":138,"loc":{"start":{"line":138,"column":73},"end":{"line":138,"column":80}},"locations":[{"start":{"line":138,"column":73},"end":{"line":138,"column":80}}]}},"b":{"0":[16],"1":[7],"2":[11],"3":[7],"4":[0],"5":[9],"6":[2],"7":[7],"8":[0],"9":[7],"10":[0],"11":[0],"12":[1],"13":[4],"14":[0],"15":[2],"16":[2],"17":[0]},"fnMap":{"0":{"name":"isUnitKey","decl":{"start":{"line":92,"column":0},"end":{"line":94,"column":1}},"loc":{"start":{"line":92,"column":0},"end":{"line":94,"column":1}},"line":92},"1":{"name":"getBaseUnit","decl":{"start":{"line":96,"column":0},"end":{"line":102,"column":1}},"loc":{"start":{"line":96,"column":0},"end":{"line":102,"column":1}},"line":96},"2":{"name":"getConversionFactor","decl":{"start":{"line":104,"column":7},"end":{"line":125,"column":1}},"loc":{"start":{"line":104,"column":7},"end":{"line":125,"column":1}},"line":104},"3":{"name":"calculateTotals","decl":{"start":{"line":130,"column":7},"end":{"line":139,"column":1}},"loc":{"start":{"line":130,"column":7},"end":{"line":139,"column":1}},"line":130}},"f":{"0":16,"1":7,"2":9,"3":1}} +,"/home/jables/source/doof/munch-ease-frontend/src/units.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/units.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":85}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":45}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":66}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":7}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":11}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":17}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":16}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":0}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":12}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":15}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":16}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":0}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":16}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":17}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":19}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":20}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":4}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":11}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":9}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":13}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":13}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":13}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":22}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":21}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":0}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":20}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":26}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":27}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":0}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":17}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":18}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":0}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":17}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":23}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":24}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":0}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":17}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":22}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":23}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":0}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":16}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":18}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":19}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":0}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":16}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":19}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":20}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":0}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":18}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":21}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":22}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":0}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":16}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":19}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":4}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":10}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":12}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":13}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":11}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":13}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":14}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":27}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":24}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":25}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":23}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":24}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":21}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":23}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":24}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":22}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":23}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":23}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":24}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":25}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":27}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":25}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":26}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":28}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":27}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":30}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":31}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":33}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":34}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":35}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":36}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":4}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":1}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":0}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":67}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":53}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":33}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":1}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":0}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":52}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":39}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":39}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":34}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":3}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":13}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":1}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":0}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":102}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":49}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":0}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":46}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":65}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":0}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":36}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":17}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":52}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":69}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":15}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":3}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":0}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":46}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":22}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":62}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":74}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":15}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":3}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":0}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":13}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":1}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":0}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":50}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":47}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":0}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":68}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":43}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":40}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":93}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":34}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":38}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":67}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":3}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":83}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":1}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":16,"92":16,"93":16,"94":1,"95":7,"96":7,"97":11,"98":11,"99":11,"100":0,"101":0,"102":1,"103":1,"104":9,"105":7,"106":7,"107":9,"108":7,"109":7,"110":7,"111":7,"112":7,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":4,"133":4,"134":4,"135":4,"136":4,"137":1,"138":1},"branchMap":{"0":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":0},"end":{"line":94,"column":1}},"locations":[{"start":{"line":92,"column":0},"end":{"line":94,"column":1}}]},"1":{"type":"branch","line":96,"loc":{"start":{"line":96,"column":0},"end":{"line":102,"column":1}},"locations":[{"start":{"line":96,"column":0},"end":{"line":102,"column":1}}]},"2":{"type":"branch","line":97,"loc":{"start":{"line":97,"column":38},"end":{"line":100,"column":3}},"locations":[{"start":{"line":97,"column":38},"end":{"line":100,"column":3}}]},"3":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":23},"end":{"line":99,"column":34}},"locations":[{"start":{"line":99,"column":23},"end":{"line":99,"column":34}}]},"4":{"type":"branch","line":100,"loc":{"start":{"line":100,"column":2},"end":{"line":102,"column":1}},"locations":[{"start":{"line":100,"column":2},"end":{"line":102,"column":1}}]},"5":{"type":"branch","line":104,"loc":{"start":{"line":104,"column":7},"end":{"line":125,"column":1}},"locations":[{"start":{"line":104,"column":7},"end":{"line":125,"column":1}}]},"6":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":23},"end":{"line":105,"column":49}},"locations":[{"start":{"line":105,"column":23},"end":{"line":105,"column":49}}]},"7":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":48},"end":{"line":108,"column":35}},"locations":[{"start":{"line":105,"column":48},"end":{"line":108,"column":35}}]},"8":{"type":"branch","line":108,"loc":{"start":{"line":108,"column":28},"end":{"line":108,"column":65}},"locations":[{"start":{"line":108,"column":28},"end":{"line":108,"column":65}}]},"9":{"type":"branch","line":108,"loc":{"start":{"line":108,"column":64},"end":{"line":115,"column":3}},"locations":[{"start":{"line":108,"column":64},"end":{"line":115,"column":3}}]},"10":{"type":"branch","line":113,"loc":{"start":{"line":113,"column":68},"end":{"line":115,"column":3}},"locations":[{"start":{"line":113,"column":68},"end":{"line":115,"column":3}}]},"11":{"type":"branch","line":115,"loc":{"start":{"line":115,"column":2},"end":{"line":125,"column":1}},"locations":[{"start":{"line":115,"column":2},"end":{"line":125,"column":1}}]},"12":{"type":"branch","line":130,"loc":{"start":{"line":130,"column":7},"end":{"line":139,"column":1}},"locations":[{"start":{"line":130,"column":7},"end":{"line":139,"column":1}}]},"13":{"type":"branch","line":132,"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":3}},"locations":[{"start":{"line":132,"column":39},"end":{"line":137,"column":3}}]},"14":{"type":"branch","line":133,"loc":{"start":{"line":133,"column":54},"end":{"line":133,"column":93}},"locations":[{"start":{"line":133,"column":54},"end":{"line":133,"column":93}}]},"15":{"type":"branch","line":136,"loc":{"start":{"line":136,"column":31},"end":{"line":136,"column":41}},"locations":[{"start":{"line":136,"column":31},"end":{"line":136,"column":41}}]},"16":{"type":"branch","line":138,"loc":{"start":{"line":138,"column":33},"end":{"line":138,"column":82}},"locations":[{"start":{"line":138,"column":33},"end":{"line":138,"column":82}}]},"17":{"type":"branch","line":138,"loc":{"start":{"line":138,"column":73},"end":{"line":138,"column":80}},"locations":[{"start":{"line":138,"column":73},"end":{"line":138,"column":80}}]}},"b":{"0":[16],"1":[7],"2":[11],"3":[7],"4":[0],"5":[9],"6":[2],"7":[7],"8":[0],"9":[7],"10":[0],"11":[0],"12":[1],"13":[4],"14":[0],"15":[2],"16":[2],"17":[0]},"fnMap":{"0":{"name":"isUnitKey","decl":{"start":{"line":92,"column":0},"end":{"line":94,"column":1}},"loc":{"start":{"line":92,"column":0},"end":{"line":94,"column":1}},"line":92},"1":{"name":"getBaseUnit","decl":{"start":{"line":96,"column":0},"end":{"line":102,"column":1}},"loc":{"start":{"line":96,"column":0},"end":{"line":102,"column":1}},"line":96},"2":{"name":"getConversionFactor","decl":{"start":{"line":104,"column":7},"end":{"line":125,"column":1}},"loc":{"start":{"line":104,"column":7},"end":{"line":125,"column":1}},"line":104},"3":{"name":"calculateTotals","decl":{"start":{"line":130,"column":7},"end":{"line":139,"column":1}},"loc":{"start":{"line":130,"column":7},"end":{"line":139,"column":1}},"line":130}},"f":{"0":16,"1":7,"2":9,"3":1}} ,"/home/jables/source/doof/munch-ease-frontend/src/api/auth.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/api/auth.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":34}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":44}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":36}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":61}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":35}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":7}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":94}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":37}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":33}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":15}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":21}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":3}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":19}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":1}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":0}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":64}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":74}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":25}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":25}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":11}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":38}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":129}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":5}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":3}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":31}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":66}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":19}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":30,"column":-104}},"locations":[{"start":{"line":1,"column":0},"end":{"line":30,"column":-104}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":30,"column":-104}},"loc":{"start":{"line":1,"column":0},"end":{"line":30,"column":-104}},"line":1}},"f":{"0":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/api/client.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/api/client.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":40}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":36}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":37}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":128}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":117}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":82}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":85}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":81}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":40}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":10}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":60}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":36}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":29}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":14}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":6}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":4}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":20,"15":20,"16":20,"17":20,"18":20,"19":1},"branchMap":{"0":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":106},"end":{"line":5,"column":128}},"locations":[{"start":{"line":5,"column":106},"end":{"line":5,"column":128}}]},"1":{"type":"branch","line":6,"loc":{"start":{"line":6,"column":74},"end":{"line":6,"column":117}},"locations":[{"start":{"line":6,"column":74},"end":{"line":6,"column":117}}]},"2":{"type":"branch","line":10,"loc":{"start":{"line":10,"column":33},"end":{"line":10,"column":81}},"locations":[{"start":{"line":10,"column":33},"end":{"line":10,"column":81}}]},"3":{"type":"branch","line":14,"loc":{"start":{"line":14,"column":9},"end":{"line":19,"column":4}},"locations":[{"start":{"line":14,"column":9},"end":{"line":19,"column":4}}]}},"b":{"0":[0],"1":[0],"2":[0],"3":[20]},"fnMap":{"0":{"name":"fetch","decl":{"start":{"line":14,"column":9},"end":{"line":19,"column":4}},"loc":{"start":{"line":14,"column":9},"end":{"line":19,"column":4}},"line":14}},"f":{"0":20}} -,"/home/jables/source/doof/munch-ease-frontend/src/api/sdk.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/api/sdk.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":34}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":45}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":164}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":13}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":9}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":7}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":13}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":15}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":27}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":25}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":27}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":18}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":23}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":64}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":63}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":42}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":56}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":79}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":1}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":0}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":82}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":61}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":24}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":60}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":26}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":9}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":35}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":29}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":55}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":43}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":47}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":43}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":36}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":131}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":71}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":5}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":107}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":53}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":5}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":115}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":59}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":5}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":121}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":60}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":5}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":65}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":3}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":1}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":0}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":147}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":23}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":0}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":40}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":44}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":52}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":26}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":0}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":62}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":68}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":80}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":0}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":69}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":16}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":44}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":15}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":94}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":31}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":40}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":56}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":44}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":48}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":56}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":7}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":41}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":5}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":3}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":0}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":10}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":52}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":40}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":44}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":26}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":3}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":1}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":0}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":141}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":23}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":0}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":45}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":41}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":41}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":0}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":52}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":40}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":44}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":54}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":0}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":80}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":62}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":68}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":0}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":66}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":30}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":80}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":3}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":0}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":42}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":68}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":64}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":64}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":52}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":40}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":44}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":54}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":3}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":0}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":36}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":52}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":40}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":44}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":54}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":3}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":58}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":56}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":56}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":0}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":15}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":1}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":0}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":130}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":43}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":15}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":50}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":65}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":68}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":3}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":91}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":52}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":70}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":75}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":1}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":0}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":78}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":129}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":52}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":27}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":1}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":0}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":105}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":123}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":52}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":27}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":1}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":0}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":72}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":150}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":52}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":1}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":0}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":72}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":130}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":52}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":27}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":1}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":0}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":80}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":88}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":46}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":4}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":52}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":38}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":1}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":0}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":35}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":73}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":13}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":53}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":101}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":58}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":64}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":25}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":1}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":0}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":10}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":155}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":43}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":15}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":50}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":65}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":68}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":3}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":91}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":52}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":75}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":112}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":1}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":0}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":90}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":22}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":1}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":0}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":99}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":33}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":1}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":0}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":8}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":79}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":77}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":74}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":4}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":52}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":46}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":13}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":30}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":34}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":92}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":1}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":0}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":74}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":123}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":52}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":25}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":1}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":0}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":97}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":59}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":14}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":80}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":53}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":17}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":6}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":54}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":27}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":10}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":85}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":54}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":27}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":3}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":1}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":0}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":87}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":88}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":74}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":4}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":52}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":25}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":1}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":0}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":74}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":75}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":74}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":4}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":52}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":1}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":0}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":11}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":66}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":132}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":52}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":38}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":1}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":0}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":111}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":95}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":16}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":39}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":4}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":52}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":38}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":1}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":0}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":60}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":126}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":52}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":47}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":29}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":1}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":0}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":48}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":77}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":52}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":37}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":1}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":0}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":111}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":141}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":0}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":43}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":59}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":66}},"294":{"start":{"line":295,"column":0},"end":{"line":295,"column":86}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":114}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":89}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":25}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":80}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":9}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":17}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":31}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":47}},"303":{"start":{"line":304,"column":0},"end":{"line":304,"column":39}},"304":{"start":{"line":305,"column":0},"end":{"line":305,"column":35}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":9}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":3}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":0}},"308":{"start":{"line":309,"column":0},"end":{"line":309,"column":37}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":0}},"310":{"start":{"line":311,"column":0},"end":{"line":311,"column":55}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":11}},"312":{"start":{"line":313,"column":0},"end":{"line":313,"column":18}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":22}},"314":{"start":{"line":315,"column":0},"end":{"line":315,"column":10}},"315":{"start":{"line":316,"column":0},"end":{"line":316,"column":3}},"316":{"start":{"line":317,"column":0},"end":{"line":317,"column":72}},"317":{"start":{"line":318,"column":0},"end":{"line":318,"column":9}},"318":{"start":{"line":319,"column":0},"end":{"line":319,"column":39}},"319":{"start":{"line":320,"column":0},"end":{"line":320,"column":4}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":52}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":47}},"322":{"start":{"line":323,"column":0},"end":{"line":323,"column":29}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":1}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":0}},"325":{"start":{"line":326,"column":0},"end":{"line":326,"column":75}},"326":{"start":{"line":327,"column":0},"end":{"line":327,"column":83}},"327":{"start":{"line":328,"column":0},"end":{"line":328,"column":37}},"328":{"start":{"line":329,"column":0},"end":{"line":329,"column":39}},"329":{"start":{"line":330,"column":0},"end":{"line":330,"column":4}},"330":{"start":{"line":331,"column":0},"end":{"line":331,"column":52}},"331":{"start":{"line":332,"column":0},"end":{"line":332,"column":1}},"332":{"start":{"line":333,"column":0},"end":{"line":333,"column":0}},"333":{"start":{"line":334,"column":0},"end":{"line":334,"column":77}},"334":{"start":{"line":335,"column":0},"end":{"line":335,"column":92}},"335":{"start":{"line":336,"column":0},"end":{"line":336,"column":74}},"336":{"start":{"line":337,"column":0},"end":{"line":337,"column":4}},"337":{"start":{"line":338,"column":0},"end":{"line":338,"column":52}},"338":{"start":{"line":339,"column":0},"end":{"line":339,"column":1}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":6,"16":6,"17":6,"18":6,"19":6,"20":1,"21":1,"22":1,"23":1,"24":1,"25":9,"26":9,"27":9,"28":9,"29":9,"30":9,"31":2,"32":2,"33":2,"34":2,"35":2,"36":2,"37":2,"38":2,"39":2,"40":2,"41":2,"42":2,"43":2,"44":2,"45":2,"46":2,"47":2,"48":2,"49":2,"50":2,"51":9,"52":1,"53":1,"54":3,"55":3,"56":3,"57":3,"58":3,"59":3,"60":3,"61":3,"62":3,"63":3,"64":3,"65":3,"66":3,"67":3,"68":3,"69":3,"70":3,"71":3,"72":3,"73":3,"74":3,"75":3,"76":3,"77":3,"78":3,"79":3,"80":3,"81":3,"82":3,"83":3,"84":3,"85":3,"86":3,"87":3,"88":1,"89":1,"90":2,"91":2,"92":2,"93":2,"94":2,"95":2,"96":2,"97":2,"98":2,"99":2,"100":2,"101":2,"102":2,"103":2,"104":2,"105":2,"106":2,"107":1,"108":1,"109":2,"110":2,"111":2,"112":2,"113":2,"114":2,"115":2,"116":2,"117":2,"118":2,"119":2,"120":2,"121":2,"122":2,"123":2,"124":2,"125":2,"126":2,"127":2,"128":2,"129":2,"130":2,"131":2,"132":1,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":1,"146":2,"147":2,"148":2,"149":1,"150":1,"151":1,"152":0,"153":0,"154":0,"155":0,"156":0,"157":1,"158":0,"159":0,"160":0,"161":0,"162":1,"163":2,"164":2,"165":2,"166":1,"167":1,"168":1,"169":2,"170":2,"171":2,"172":2,"173":2,"174":2,"175":2,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":3,"189":3,"190":3,"191":1,"192":1,"193":1,"194":1,"195":3,"196":3,"197":3,"198":3,"199":3,"200":1,"201":2,"202":2,"203":2,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":2,"211":2,"212":2,"213":2,"214":2,"215":2,"216":2,"217":2,"218":2,"219":2,"220":2,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":1,"259":1,"260":0,"261":0,"262":0,"263":0,"264":0,"265":1,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":2,"292":2,"293":2,"294":2,"295":2,"296":2,"297":2,"298":2,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":2,"307":2,"308":2,"309":2,"310":2,"311":2,"312":2,"313":2,"314":2,"315":2,"316":2,"317":2,"318":2,"319":2,"320":2,"321":1,"322":2,"323":2,"324":1,"325":1,"326":1,"327":1,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"338":1},"branchMap":{"0":{"type":"branch","line":16,"loc":{"start":{"line":16,"column":0},"end":{"line":20,"column":1}},"locations":[{"start":{"line":16,"column":0},"end":{"line":20,"column":1}}]},"1":{"type":"branch","line":17,"loc":{"start":{"line":17,"column":30},"end":{"line":17,"column":42}},"locations":[{"start":{"line":17,"column":30},"end":{"line":17,"column":42}}]},"2":{"type":"branch","line":18,"loc":{"start":{"line":18,"column":55},"end":{"line":19,"column":76}},"locations":[{"start":{"line":18,"column":55},"end":{"line":19,"column":76}}]},"3":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":0},"end":{"line":52,"column":1}},"locations":[{"start":{"line":26,"column":0},"end":{"line":52,"column":1}}]},"4":{"type":"branch","line":30,"loc":{"start":{"line":30,"column":29},"end":{"line":30,"column":35}},"locations":[{"start":{"line":30,"column":29},"end":{"line":30,"column":35}}]},"5":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":28},"end":{"line":51,"column":3}},"locations":[{"start":{"line":31,"column":28},"end":{"line":51,"column":3}}]},"6":{"type":"branch","line":32,"loc":{"start":{"line":32,"column":30},"end":{"line":32,"column":55}},"locations":[{"start":{"line":32,"column":30},"end":{"line":32,"column":55}}]},"7":{"type":"branch","line":33,"loc":{"start":{"line":33,"column":24},"end":{"line":33,"column":43}},"locations":[{"start":{"line":33,"column":24},"end":{"line":33,"column":43}}]},"8":{"type":"branch","line":34,"loc":{"start":{"line":34,"column":26},"end":{"line":34,"column":47}},"locations":[{"start":{"line":34,"column":26},"end":{"line":34,"column":47}}]},"9":{"type":"branch","line":35,"loc":{"start":{"line":35,"column":24},"end":{"line":35,"column":43}},"locations":[{"start":{"line":35,"column":24},"end":{"line":35,"column":43}}]},"10":{"type":"branch","line":54,"loc":{"start":{"line":54,"column":7},"end":{"line":88,"column":1}},"locations":[{"start":{"line":54,"column":7},"end":{"line":88,"column":1}}]},"11":{"type":"branch","line":55,"loc":{"start":{"line":55,"column":12},"end":{"line":55,"column":23}},"locations":[{"start":{"line":55,"column":12},"end":{"line":55,"column":23}}]},"12":{"type":"branch","line":70,"loc":{"start":{"line":70,"column":88},"end":{"line":70,"column":94}},"locations":[{"start":{"line":70,"column":88},"end":{"line":70,"column":94}}]},"13":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":12},"end":{"line":73,"column":56}},"locations":[{"start":{"line":73,"column":12},"end":{"line":73,"column":56}}]},"14":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":12},"end":{"line":74,"column":44}},"locations":[{"start":{"line":74,"column":12},"end":{"line":74,"column":44}}]},"15":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":12},"end":{"line":75,"column":48}},"locations":[{"start":{"line":75,"column":12},"end":{"line":75,"column":48}}]},"16":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":8},"end":{"line":83,"column":52}},"locations":[{"start":{"line":83,"column":8},"end":{"line":83,"column":52}}]},"17":{"type":"branch","line":84,"loc":{"start":{"line":84,"column":8},"end":{"line":84,"column":40}},"locations":[{"start":{"line":84,"column":8},"end":{"line":84,"column":40}}]},"18":{"type":"branch","line":85,"loc":{"start":{"line":85,"column":8},"end":{"line":85,"column":44}},"locations":[{"start":{"line":85,"column":8},"end":{"line":85,"column":44}}]},"19":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":7},"end":{"line":132,"column":1}},"locations":[{"start":{"line":90,"column":7},"end":{"line":132,"column":1}}]},"20":{"type":"branch","line":91,"loc":{"start":{"line":91,"column":12},"end":{"line":91,"column":23}},"locations":[{"start":{"line":91,"column":12},"end":{"line":91,"column":23}}]},"21":{"type":"branch","line":107,"loc":{"start":{"line":107,"column":29},"end":{"line":109,"column":3}},"locations":[{"start":{"line":107,"column":29},"end":{"line":109,"column":3}}]},"22":{"type":"branch","line":112,"loc":{"start":{"line":112,"column":46},"end":{"line":112,"column":66}},"locations":[{"start":{"line":112,"column":46},"end":{"line":112,"column":66}}]},"23":{"type":"branch","line":113,"loc":{"start":{"line":113,"column":44},"end":{"line":113,"column":62}},"locations":[{"start":{"line":113,"column":44},"end":{"line":113,"column":62}}]},"24":{"type":"branch","line":114,"loc":{"start":{"line":114,"column":44},"end":{"line":114,"column":62}},"locations":[{"start":{"line":114,"column":44},"end":{"line":114,"column":62}}]},"25":{"type":"branch","line":115,"loc":{"start":{"line":115,"column":8},"end":{"line":115,"column":52}},"locations":[{"start":{"line":115,"column":8},"end":{"line":115,"column":52}}]},"26":{"type":"branch","line":116,"loc":{"start":{"line":116,"column":8},"end":{"line":116,"column":40}},"locations":[{"start":{"line":116,"column":8},"end":{"line":116,"column":40}}]},"27":{"type":"branch","line":117,"loc":{"start":{"line":117,"column":8},"end":{"line":117,"column":44}},"locations":[{"start":{"line":117,"column":8},"end":{"line":117,"column":44}}]},"28":{"type":"branch","line":118,"loc":{"start":{"line":118,"column":8},"end":{"line":118,"column":54}},"locations":[{"start":{"line":118,"column":8},"end":{"line":118,"column":54}}]},"29":{"type":"branch","line":122,"loc":{"start":{"line":122,"column":8},"end":{"line":122,"column":52}},"locations":[{"start":{"line":122,"column":8},"end":{"line":122,"column":52}}]},"30":{"type":"branch","line":123,"loc":{"start":{"line":123,"column":8},"end":{"line":123,"column":40}},"locations":[{"start":{"line":123,"column":8},"end":{"line":123,"column":40}}]},"31":{"type":"branch","line":124,"loc":{"start":{"line":124,"column":8},"end":{"line":124,"column":44}},"locations":[{"start":{"line":124,"column":8},"end":{"line":124,"column":44}}]},"32":{"type":"branch","line":125,"loc":{"start":{"line":125,"column":8},"end":{"line":125,"column":54}},"locations":[{"start":{"line":125,"column":8},"end":{"line":125,"column":54}}]},"33":{"type":"branch","line":127,"loc":{"start":{"line":127,"column":24},"end":{"line":127,"column":50}},"locations":[{"start":{"line":127,"column":24},"end":{"line":127,"column":50}}]},"34":{"type":"branch","line":128,"loc":{"start":{"line":128,"column":24},"end":{"line":128,"column":48}},"locations":[{"start":{"line":128,"column":24},"end":{"line":128,"column":48}}]},"35":{"type":"branch","line":129,"loc":{"start":{"line":129,"column":24},"end":{"line":129,"column":48}},"locations":[{"start":{"line":129,"column":24},"end":{"line":129,"column":48}}]},"36":{"type":"branch","line":147,"loc":{"start":{"line":147,"column":0},"end":{"line":151,"column":1}},"locations":[{"start":{"line":147,"column":0},"end":{"line":151,"column":1}}]},"37":{"type":"branch","line":149,"loc":{"start":{"line":149,"column":20},"end":{"line":151,"column":1}},"locations":[{"start":{"line":149,"column":20},"end":{"line":151,"column":1}}]},"38":{"type":"branch","line":164,"loc":{"start":{"line":164,"column":0},"end":{"line":168,"column":1}},"locations":[{"start":{"line":164,"column":0},"end":{"line":168,"column":1}}]},"39":{"type":"branch","line":166,"loc":{"start":{"line":166,"column":20},"end":{"line":168,"column":1}},"locations":[{"start":{"line":166,"column":20},"end":{"line":168,"column":1}}]},"40":{"type":"branch","line":170,"loc":{"start":{"line":170,"column":0},"end":{"line":176,"column":1}},"locations":[{"start":{"line":170,"column":0},"end":{"line":176,"column":1}}]},"41":{"type":"branch","line":174,"loc":{"start":{"line":174,"column":20},"end":{"line":175,"column":37}},"locations":[{"start":{"line":174,"column":20},"end":{"line":175,"column":37}}]},"42":{"type":"branch","line":175,"loc":{"start":{"line":175,"column":27},"end":{"line":175,"column":37}},"locations":[{"start":{"line":175,"column":27},"end":{"line":175,"column":37}}]},"43":{"type":"branch","line":178,"loc":{"start":{"line":178,"column":0},"end":{"line":186,"column":1}},"locations":[{"start":{"line":178,"column":0},"end":{"line":186,"column":1}}]},"44":{"type":"branch","line":184,"loc":{"start":{"line":184,"column":24},"end":{"line":184,"column":64}},"locations":[{"start":{"line":184,"column":24},"end":{"line":184,"column":64}}]},"45":{"type":"branch","line":185,"loc":{"start":{"line":185,"column":13},"end":{"line":185,"column":25}},"locations":[{"start":{"line":185,"column":13},"end":{"line":185,"column":25}}]},"46":{"type":"branch","line":189,"loc":{"start":{"line":189,"column":0},"end":{"line":200,"column":1}},"locations":[{"start":{"line":189,"column":0},"end":{"line":200,"column":1}}]},"47":{"type":"branch","line":191,"loc":{"start":{"line":191,"column":14},"end":{"line":195,"column":3}},"locations":[{"start":{"line":191,"column":14},"end":{"line":195,"column":3}}]},"48":{"type":"branch","line":193,"loc":{"start":{"line":193,"column":37},"end":{"line":193,"column":65}},"locations":[{"start":{"line":193,"column":37},"end":{"line":193,"column":65}}]},"49":{"type":"branch","line":194,"loc":{"start":{"line":194,"column":42},"end":{"line":194,"column":68}},"locations":[{"start":{"line":194,"column":42},"end":{"line":194,"column":68}}]},"50":{"type":"branch","line":197,"loc":{"start":{"line":197,"column":20},"end":{"line":197,"column":52}},"locations":[{"start":{"line":197,"column":20},"end":{"line":197,"column":52}}]},"51":{"type":"branch","line":197,"loc":{"start":{"line":197,"column":51},"end":{"line":198,"column":62}},"locations":[{"start":{"line":197,"column":51},"end":{"line":198,"column":62}}]},"52":{"type":"branch","line":198,"loc":{"start":{"line":198,"column":57},"end":{"line":198,"column":75}},"locations":[{"start":{"line":198,"column":57},"end":{"line":198,"column":75}}]},"53":{"type":"branch","line":199,"loc":{"start":{"line":199,"column":103},"end":{"line":199,"column":111}},"locations":[{"start":{"line":199,"column":103},"end":{"line":199,"column":111}}]},"54":{"type":"branch","line":202,"loc":{"start":{"line":202,"column":0},"end":{"line":204,"column":1}},"locations":[{"start":{"line":202,"column":0},"end":{"line":204,"column":1}}]},"55":{"type":"branch","line":206,"loc":{"start":{"line":206,"column":0},"end":{"line":208,"column":1}},"locations":[{"start":{"line":206,"column":0},"end":{"line":208,"column":1}}]},"56":{"type":"branch","line":211,"loc":{"start":{"line":211,"column":0},"end":{"line":221,"column":1}},"locations":[{"start":{"line":211,"column":0},"end":{"line":221,"column":1}}]},"57":{"type":"branch","line":215,"loc":{"start":{"line":215,"column":20},"end":{"line":216,"column":44}},"locations":[{"start":{"line":215,"column":20},"end":{"line":216,"column":44}}]},"58":{"type":"branch","line":216,"loc":{"start":{"line":216,"column":37},"end":{"line":216,"column":46}},"locations":[{"start":{"line":216,"column":37},"end":{"line":216,"column":46}}]},"59":{"type":"branch","line":218,"loc":{"start":{"line":218,"column":9},"end":{"line":218,"column":29}},"locations":[{"start":{"line":218,"column":9},"end":{"line":218,"column":29}}]},"60":{"type":"branch","line":219,"loc":{"start":{"line":219,"column":12},"end":{"line":219,"column":33}},"locations":[{"start":{"line":219,"column":12},"end":{"line":219,"column":33}}]},"61":{"type":"branch","line":220,"loc":{"start":{"line":220,"column":10},"end":{"line":220,"column":91}},"locations":[{"start":{"line":220,"column":10},"end":{"line":220,"column":91}}]},"62":{"type":"branch","line":220,"loc":{"start":{"line":220,"column":47},"end":{"line":220,"column":58}},"locations":[{"start":{"line":220,"column":47},"end":{"line":220,"column":58}}]},"63":{"type":"branch","line":220,"loc":{"start":{"line":220,"column":83},"end":{"line":220,"column":91}},"locations":[{"start":{"line":220,"column":83},"end":{"line":220,"column":91}}]},"64":{"type":"branch","line":223,"loc":{"start":{"line":223,"column":0},"end":{"line":227,"column":1}},"locations":[{"start":{"line":223,"column":0},"end":{"line":227,"column":1}}]},"65":{"type":"branch","line":225,"loc":{"start":{"line":225,"column":20},"end":{"line":225,"column":52}},"locations":[{"start":{"line":225,"column":20},"end":{"line":225,"column":52}}]},"66":{"type":"branch","line":245,"loc":{"start":{"line":245,"column":0},"end":{"line":251,"column":1}},"locations":[{"start":{"line":245,"column":0},"end":{"line":251,"column":1}}]},"67":{"type":"branch","line":249,"loc":{"start":{"line":249,"column":20},"end":{"line":249,"column":52}},"locations":[{"start":{"line":249,"column":20},"end":{"line":249,"column":52}}]},"68":{"type":"branch","line":276,"loc":{"start":{"line":276,"column":0},"end":{"line":281,"column":1}},"locations":[{"start":{"line":276,"column":0},"end":{"line":281,"column":1}}]},"69":{"type":"branch","line":278,"loc":{"start":{"line":278,"column":20},"end":{"line":278,"column":52}},"locations":[{"start":{"line":278,"column":20},"end":{"line":278,"column":52}}]},"70":{"type":"branch","line":280,"loc":{"start":{"line":280,"column":17},"end":{"line":280,"column":29}},"locations":[{"start":{"line":280,"column":17},"end":{"line":280,"column":29}}]},"71":{"type":"branch","line":283,"loc":{"start":{"line":283,"column":0},"end":{"line":287,"column":1}},"locations":[{"start":{"line":283,"column":0},"end":{"line":287,"column":1}}]},"72":{"type":"branch","line":285,"loc":{"start":{"line":285,"column":20},"end":{"line":285,"column":52}},"locations":[{"start":{"line":285,"column":20},"end":{"line":285,"column":52}}]},"73":{"type":"branch","line":292,"loc":{"start":{"line":292,"column":0},"end":{"line":324,"column":1}},"locations":[{"start":{"line":292,"column":0},"end":{"line":324,"column":1}}]},"74":{"type":"branch","line":295,"loc":{"start":{"line":295,"column":75},"end":{"line":295,"column":86}},"locations":[{"start":{"line":295,"column":75},"end":{"line":295,"column":86}}]},"75":{"type":"branch","line":309,"loc":{"start":{"line":309,"column":26},"end":{"line":309,"column":37}},"locations":[{"start":{"line":309,"column":26},"end":{"line":309,"column":37}}]},"76":{"type":"branch","line":321,"loc":{"start":{"line":321,"column":20},"end":{"line":323,"column":25}},"locations":[{"start":{"line":321,"column":20},"end":{"line":323,"column":25}}]},"77":{"type":"branch","line":323,"loc":{"start":{"line":323,"column":17},"end":{"line":323,"column":29}},"locations":[{"start":{"line":323,"column":17},"end":{"line":323,"column":29}}]},"78":{"type":"branch","line":297,"loc":{"start":{"line":297,"column":83},"end":{"line":306,"column":9}},"locations":[{"start":{"line":297,"column":83},"end":{"line":306,"column":9}}]},"79":{"type":"branch","line":299,"loc":{"start":{"line":299,"column":79},"end":{"line":306,"column":9}},"locations":[{"start":{"line":299,"column":79},"end":{"line":306,"column":9}}]},"80":{"type":"branch","line":326,"loc":{"start":{"line":326,"column":0},"end":{"line":332,"column":1}},"locations":[{"start":{"line":326,"column":0},"end":{"line":332,"column":1}}]},"81":{"type":"branch","line":331,"loc":{"start":{"line":331,"column":20},"end":{"line":331,"column":52}},"locations":[{"start":{"line":331,"column":20},"end":{"line":331,"column":52}}]},"82":{"type":"branch","line":334,"loc":{"start":{"line":334,"column":0},"end":{"line":339,"column":1}},"locations":[{"start":{"line":334,"column":0},"end":{"line":339,"column":1}}]},"83":{"type":"branch","line":338,"loc":{"start":{"line":338,"column":20},"end":{"line":338,"column":52}},"locations":[{"start":{"line":338,"column":20},"end":{"line":338,"column":52}}]}},"b":{"0":[6],"1":[0],"2":[0],"3":[9],"4":[0],"5":[2],"6":[0],"7":[0],"8":[0],"9":[0],"10":[3],"11":[0],"12":[0],"13":[1],"14":[1],"15":[1],"16":[1],"17":[1],"18":[1],"19":[2],"20":[0],"21":[1],"22":[0],"23":[1],"24":[1],"25":[1],"26":[1],"27":[1],"28":[1],"29":[1],"30":[1],"31":[1],"32":[1],"33":[0],"34":[0],"35":[0],"36":[2],"37":[1],"38":[2],"39":[1],"40":[2],"41":[1],"42":[0],"43":[1],"44":[0],"45":[0],"46":[3],"47":[1],"48":[0],"49":[0],"50":[1],"51":[2],"52":[0],"53":[2],"54":[2],"55":[1],"56":[2],"57":[1],"58":[0],"59":[2],"60":[2],"61":[1],"62":[0],"63":[0],"64":[1],"65":[0],"66":[1],"67":[0],"68":[1],"69":[0],"70":[0],"71":[1],"72":[0],"73":[2],"74":[0],"75":[0],"76":[1],"77":[0],"78":[2],"79":[0],"80":[1],"81":[0],"82":[1],"83":[0]},"fnMap":{"0":{"name":"httpError","decl":{"start":{"line":16,"column":0},"end":{"line":20,"column":1}},"loc":{"start":{"line":16,"column":0},"end":{"line":20,"column":1}},"line":16},"1":{"name":"attachItemRefs","decl":{"start":{"line":26,"column":0},"end":{"line":52,"column":1}},"loc":{"start":{"line":26,"column":0},"end":{"line":52,"column":1}},"line":26},"2":{"name":"mapPurchasedShoppingList","decl":{"start":{"line":54,"column":7},"end":{"line":88,"column":1}},"loc":{"start":{"line":54,"column":7},"end":{"line":88,"column":1}},"line":54},"3":{"name":"mapCurrentShoppingList","decl":{"start":{"line":90,"column":7},"end":{"line":132,"column":1}},"loc":{"start":{"line":90,"column":7},"end":{"line":132,"column":1}},"line":90},"4":{"name":"listRecipes","decl":{"start":{"line":134,"column":0},"end":{"line":145,"column":1}},"loc":{"start":{"line":134,"column":0},"end":{"line":145,"column":1}},"line":134},"5":{"name":"getRecipe","decl":{"start":{"line":147,"column":0},"end":{"line":151,"column":1}},"loc":{"start":{"line":147,"column":0},"end":{"line":151,"column":1}},"line":147},"6":{"name":"saveRecipe","decl":{"start":{"line":153,"column":0},"end":{"line":157,"column":1}},"loc":{"start":{"line":153,"column":0},"end":{"line":157,"column":1}},"line":153},"7":{"name":"deleteRecipe","decl":{"start":{"line":159,"column":0},"end":{"line":162,"column":1}},"loc":{"start":{"line":159,"column":0},"end":{"line":162,"column":1}},"line":159},"8":{"name":"parseRecipe","decl":{"start":{"line":164,"column":0},"end":{"line":168,"column":1}},"loc":{"start":{"line":164,"column":0},"end":{"line":168,"column":1}},"line":164},"9":{"name":"parseIngredients","decl":{"start":{"line":170,"column":0},"end":{"line":176,"column":1}},"loc":{"start":{"line":170,"column":0},"end":{"line":176,"column":1}},"line":170},"10":{"name":"parseProduct","decl":{"start":{"line":178,"column":0},"end":{"line":186,"column":1}},"loc":{"start":{"line":178,"column":0},"end":{"line":186,"column":1}},"line":178},"11":{"name":"listPersons","decl":{"start":{"line":189,"column":0},"end":{"line":200,"column":1}},"loc":{"start":{"line":189,"column":0},"end":{"line":200,"column":1}},"line":189},"12":{"name":"getPersonsInHome","decl":{"start":{"line":202,"column":0},"end":{"line":204,"column":1}},"loc":{"start":{"line":202,"column":0},"end":{"line":204,"column":1}},"line":202},"13":{"name":"searchPersons","decl":{"start":{"line":206,"column":0},"end":{"line":208,"column":1}},"loc":{"start":{"line":206,"column":0},"end":{"line":208,"column":1}},"line":206},"14":{"name":"getUpcomingMeals","decl":{"start":{"line":211,"column":0},"end":{"line":221,"column":1}},"loc":{"start":{"line":211,"column":0},"end":{"line":221,"column":1}},"line":211},"15":{"name":"getMeal","decl":{"start":{"line":223,"column":0},"end":{"line":227,"column":1}},"loc":{"start":{"line":223,"column":0},"end":{"line":227,"column":1}},"line":223},"16":{"name":"saveMeal","decl":{"start":{"line":229,"column":0},"end":{"line":243,"column":1}},"loc":{"start":{"line":229,"column":0},"end":{"line":243,"column":1}},"line":229},"17":{"name":"markMealConsumed","decl":{"start":{"line":245,"column":0},"end":{"line":251,"column":1}},"loc":{"start":{"line":245,"column":0},"end":{"line":251,"column":1}},"line":245},"18":{"name":"deleteMeal","decl":{"start":{"line":253,"column":0},"end":{"line":258,"column":1}},"loc":{"start":{"line":253,"column":0},"end":{"line":258,"column":1}},"line":253},"19":{"name":"getMyShoppingList","decl":{"start":{"line":261,"column":0},"end":{"line":265,"column":1}},"loc":{"start":{"line":261,"column":0},"end":{"line":265,"column":1}},"line":261},"20":{"name":"saveMyShoppingList","decl":{"start":{"line":267,"column":0},"end":{"line":274,"column":1}},"loc":{"start":{"line":267,"column":0},"end":{"line":274,"column":1}},"line":267},"21":{"name":"getShoppingList","decl":{"start":{"line":276,"column":0},"end":{"line":281,"column":1}},"loc":{"start":{"line":276,"column":0},"end":{"line":281,"column":1}},"line":276},"22":{"name":"getCurrentShoppingList","decl":{"start":{"line":283,"column":0},"end":{"line":287,"column":1}},"loc":{"start":{"line":283,"column":0},"end":{"line":287,"column":1}},"line":283},"23":{"name":"purchaseShoppingList","decl":{"start":{"line":292,"column":0},"end":{"line":324,"column":1}},"loc":{"start":{"line":292,"column":0},"end":{"line":324,"column":1}},"line":292},"24":{"name":"requestMeal","decl":{"start":{"line":326,"column":0},"end":{"line":332,"column":1}},"loc":{"start":{"line":326,"column":0},"end":{"line":332,"column":1}},"line":326},"25":{"name":"unrequestMeal","decl":{"start":{"line":334,"column":0},"end":{"line":339,"column":1}},"loc":{"start":{"line":334,"column":0},"end":{"line":339,"column":1}},"line":334}},"f":{"0":6,"1":9,"2":3,"3":2,"4":0,"5":2,"6":0,"7":0,"8":2,"9":2,"10":1,"11":3,"12":2,"13":1,"14":2,"15":1,"16":0,"17":1,"18":0,"19":0,"20":0,"21":1,"22":1,"23":2,"24":1,"25":1}} +,"/home/jables/source/doof/munch-ease-frontend/src/api/sdk.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/api/sdk.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":34}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":45}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":164}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":13}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":9}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":7}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":13}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":15}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":27}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":25}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":27}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":18}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":23}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":64}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":63}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":42}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":56}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":79}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":1}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":0}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":82}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":61}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":24}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":60}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":26}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":9}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":35}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":29}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":55}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":43}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":47}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":43}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":36}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":66}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":63}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":46}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":5}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":54}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":51}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":40}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":5}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":58}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":55}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":42}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":5}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":61}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":58}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":40}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":5}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":65}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":3}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":1}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":0}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":147}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":23}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":0}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":40}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":44}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":52}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":26}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":0}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":62}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":68}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":80}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":0}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":69}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":16}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":44}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":15}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":94}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":31}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":40}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":56}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":44}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":48}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":73}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":7}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":41}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":5}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":3}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":0}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":10}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":52}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":40}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":44}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":26}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":84}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":69}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":3}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":1}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":0}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":141}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":23}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":0}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":45}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":41}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":41}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":0}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":52}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":40}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":44}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":54}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":0}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":80}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":62}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":68}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":0}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":66}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":30}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":80}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":3}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":0}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":42}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":68}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":64}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":64}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":52}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":40}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":44}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":54}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":3}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":0}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":36}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":52}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":40}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":44}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":54}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":3}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":58}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":56}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":56}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":0}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":15}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":1}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":0}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":130}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":43}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":15}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":50}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":65}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":68}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":3}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":91}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":52}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":62}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":1}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":0}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":71}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":129}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":52}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":35}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":50}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":15}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":1}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":0}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":105}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":123}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":52}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":27}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":1}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":0}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":72}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":150}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":52}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":1}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":0}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":72}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":130}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":52}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":27}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":1}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":0}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":80}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":88}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":46}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":4}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":52}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":38}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":1}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":0}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":35}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":73}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":13}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":53}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":101}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":58}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":64}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":25}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":1}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":0}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":10}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":148}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":43}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":15}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":50}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":65}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":68}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":3}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":91}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":52}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":75}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":112}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":1}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":0}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":90}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":22}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":1}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":0}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":99}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":33}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":1}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":0}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":8}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":79}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":77}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":74}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":4}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":52}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":46}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":13}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":30}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":34}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":92}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":1}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":0}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":67}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":123}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":52}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":33}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":48}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":15}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":1}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":0}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":97}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":59}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":14}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":80}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":53}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":17}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":6}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":54}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":27}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":10}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":85}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":54}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":27}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":3}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":1}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":0}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":80}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":88}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":74}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":4}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":52}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":33}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":48}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":15}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":1}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":0}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":74}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":75}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":74}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":4}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":52}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":1}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":0}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":11}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":66}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":132}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":52}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":38}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":1}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":0}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":111}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":95}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":16}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":39}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":4}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":52}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":38}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":1}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":0}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":123}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":126}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":52}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":47}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":29}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":1}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":0}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":81}},"294":{"start":{"line":295,"column":0},"end":{"line":295,"column":77}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":52}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":45}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":69}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":15}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":1}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":0}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":104}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":134}},"303":{"start":{"line":304,"column":0},"end":{"line":304,"column":61}},"304":{"start":{"line":305,"column":0},"end":{"line":305,"column":0}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":43}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":38}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":66}},"308":{"start":{"line":309,"column":0},"end":{"line":309,"column":86}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":114}},"310":{"start":{"line":311,"column":0},"end":{"line":311,"column":89}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":25}},"312":{"start":{"line":313,"column":0},"end":{"line":313,"column":80}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":9}},"314":{"start":{"line":315,"column":0},"end":{"line":315,"column":17}},"315":{"start":{"line":316,"column":0},"end":{"line":316,"column":31}},"316":{"start":{"line":317,"column":0},"end":{"line":317,"column":47}},"317":{"start":{"line":318,"column":0},"end":{"line":318,"column":39}},"318":{"start":{"line":319,"column":0},"end":{"line":319,"column":35}},"319":{"start":{"line":320,"column":0},"end":{"line":320,"column":9}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":3}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":0}},"322":{"start":{"line":323,"column":0},"end":{"line":323,"column":37}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":0}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":55}},"325":{"start":{"line":326,"column":0},"end":{"line":326,"column":11}},"326":{"start":{"line":327,"column":0},"end":{"line":327,"column":18}},"327":{"start":{"line":328,"column":0},"end":{"line":328,"column":22}},"328":{"start":{"line":329,"column":0},"end":{"line":329,"column":10}},"329":{"start":{"line":330,"column":0},"end":{"line":330,"column":3}},"330":{"start":{"line":331,"column":0},"end":{"line":331,"column":72}},"331":{"start":{"line":332,"column":0},"end":{"line":332,"column":9}},"332":{"start":{"line":333,"column":0},"end":{"line":333,"column":39}},"333":{"start":{"line":334,"column":0},"end":{"line":334,"column":4}},"334":{"start":{"line":335,"column":0},"end":{"line":335,"column":52}},"335":{"start":{"line":336,"column":0},"end":{"line":336,"column":47}},"336":{"start":{"line":337,"column":0},"end":{"line":337,"column":29}},"337":{"start":{"line":338,"column":0},"end":{"line":338,"column":1}},"338":{"start":{"line":339,"column":0},"end":{"line":339,"column":0}},"339":{"start":{"line":340,"column":0},"end":{"line":340,"column":75}},"340":{"start":{"line":341,"column":0},"end":{"line":341,"column":83}},"341":{"start":{"line":342,"column":0},"end":{"line":342,"column":37}},"342":{"start":{"line":343,"column":0},"end":{"line":343,"column":39}},"343":{"start":{"line":344,"column":0},"end":{"line":344,"column":4}},"344":{"start":{"line":345,"column":0},"end":{"line":345,"column":52}},"345":{"start":{"line":346,"column":0},"end":{"line":346,"column":1}},"346":{"start":{"line":347,"column":0},"end":{"line":347,"column":0}},"347":{"start":{"line":348,"column":0},"end":{"line":348,"column":77}},"348":{"start":{"line":349,"column":0},"end":{"line":349,"column":92}},"349":{"start":{"line":350,"column":0},"end":{"line":350,"column":74}},"350":{"start":{"line":351,"column":0},"end":{"line":351,"column":4}},"351":{"start":{"line":352,"column":0},"end":{"line":352,"column":52}},"352":{"start":{"line":353,"column":0},"end":{"line":353,"column":1}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":6,"16":6,"17":6,"18":6,"19":6,"20":1,"21":1,"22":1,"23":1,"24":1,"25":9,"26":9,"27":9,"28":9,"29":9,"30":9,"31":2,"32":2,"33":2,"34":2,"35":2,"36":2,"37":2,"38":2,"39":2,"40":2,"41":2,"42":2,"43":2,"44":2,"45":2,"46":2,"47":2,"48":2,"49":2,"50":2,"51":2,"52":2,"53":2,"54":2,"55":9,"56":1,"57":1,"58":3,"59":3,"60":3,"61":3,"62":3,"63":3,"64":3,"65":3,"66":3,"67":3,"68":3,"69":3,"70":3,"71":3,"72":3,"73":3,"74":3,"75":3,"76":3,"77":3,"78":3,"79":3,"80":3,"81":3,"82":3,"83":3,"84":3,"85":3,"86":3,"87":3,"88":3,"89":3,"90":3,"91":3,"92":3,"93":3,"94":1,"95":1,"96":2,"97":2,"98":2,"99":2,"100":2,"101":2,"102":2,"103":2,"104":2,"105":2,"106":2,"107":2,"108":2,"109":2,"110":2,"111":2,"112":2,"113":1,"114":1,"115":2,"116":2,"117":2,"118":2,"119":2,"120":2,"121":2,"122":2,"123":2,"124":2,"125":2,"126":2,"127":2,"128":2,"129":2,"130":2,"131":2,"132":2,"133":2,"134":2,"135":2,"136":2,"137":2,"138":1,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":1,"151":2,"152":2,"153":2,"154":1,"155":1,"156":1,"157":1,"158":1,"159":0,"160":0,"161":0,"162":0,"163":0,"164":1,"165":0,"166":0,"167":0,"168":0,"169":1,"170":2,"171":2,"172":2,"173":1,"174":1,"175":1,"176":2,"177":2,"178":2,"179":2,"180":2,"181":2,"182":2,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":3,"196":3,"197":3,"198":1,"199":1,"200":1,"201":1,"202":3,"203":3,"204":3,"205":3,"206":3,"207":1,"208":2,"209":2,"210":2,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":2,"218":2,"219":2,"220":2,"221":2,"222":2,"223":2,"224":2,"225":2,"226":2,"227":2,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1,"235":1,"236":1,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":1,"270":1,"271":0,"272":0,"273":0,"274":0,"275":0,"276":1,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":2,"306":2,"307":2,"308":2,"309":2,"310":2,"311":2,"312":2,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":2,"321":2,"322":2,"323":2,"324":2,"325":2,"326":2,"327":2,"328":2,"329":2,"330":2,"331":2,"332":2,"333":2,"334":2,"335":1,"336":2,"337":2,"338":1,"339":1,"340":1,"341":1,"342":1,"343":1,"344":1,"345":1,"346":1,"347":1,"348":1,"349":1,"350":1,"351":1,"352":1},"branchMap":{"0":{"type":"branch","line":16,"loc":{"start":{"line":16,"column":0},"end":{"line":20,"column":1}},"locations":[{"start":{"line":16,"column":0},"end":{"line":20,"column":1}}]},"1":{"type":"branch","line":17,"loc":{"start":{"line":17,"column":30},"end":{"line":17,"column":42}},"locations":[{"start":{"line":17,"column":30},"end":{"line":17,"column":42}}]},"2":{"type":"branch","line":18,"loc":{"start":{"line":18,"column":55},"end":{"line":19,"column":76}},"locations":[{"start":{"line":18,"column":55},"end":{"line":19,"column":76}}]},"3":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":0},"end":{"line":56,"column":1}},"locations":[{"start":{"line":26,"column":0},"end":{"line":56,"column":1}}]},"4":{"type":"branch","line":30,"loc":{"start":{"line":30,"column":29},"end":{"line":30,"column":35}},"locations":[{"start":{"line":30,"column":29},"end":{"line":30,"column":35}}]},"5":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":28},"end":{"line":55,"column":3}},"locations":[{"start":{"line":31,"column":28},"end":{"line":55,"column":3}}]},"6":{"type":"branch","line":32,"loc":{"start":{"line":32,"column":30},"end":{"line":32,"column":55}},"locations":[{"start":{"line":32,"column":30},"end":{"line":32,"column":55}}]},"7":{"type":"branch","line":33,"loc":{"start":{"line":33,"column":24},"end":{"line":33,"column":43}},"locations":[{"start":{"line":33,"column":24},"end":{"line":33,"column":43}}]},"8":{"type":"branch","line":34,"loc":{"start":{"line":34,"column":26},"end":{"line":34,"column":47}},"locations":[{"start":{"line":34,"column":26},"end":{"line":34,"column":47}}]},"9":{"type":"branch","line":35,"loc":{"start":{"line":35,"column":24},"end":{"line":35,"column":43}},"locations":[{"start":{"line":35,"column":24},"end":{"line":35,"column":43}}]},"10":{"type":"branch","line":58,"loc":{"start":{"line":58,"column":7},"end":{"line":94,"column":1}},"locations":[{"start":{"line":58,"column":7},"end":{"line":94,"column":1}}]},"11":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":12},"end":{"line":59,"column":23}},"locations":[{"start":{"line":59,"column":12},"end":{"line":59,"column":23}}]},"12":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":88},"end":{"line":74,"column":94}},"locations":[{"start":{"line":74,"column":88},"end":{"line":74,"column":94}}]},"13":{"type":"branch","line":77,"loc":{"start":{"line":77,"column":12},"end":{"line":77,"column":56}},"locations":[{"start":{"line":77,"column":12},"end":{"line":77,"column":56}}]},"14":{"type":"branch","line":78,"loc":{"start":{"line":78,"column":12},"end":{"line":78,"column":44}},"locations":[{"start":{"line":78,"column":12},"end":{"line":78,"column":44}}]},"15":{"type":"branch","line":79,"loc":{"start":{"line":79,"column":12},"end":{"line":79,"column":48}},"locations":[{"start":{"line":79,"column":12},"end":{"line":79,"column":48}}]},"16":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":8},"end":{"line":87,"column":52}},"locations":[{"start":{"line":87,"column":8},"end":{"line":87,"column":52}}]},"17":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":8},"end":{"line":88,"column":40}},"locations":[{"start":{"line":88,"column":8},"end":{"line":88,"column":40}}]},"18":{"type":"branch","line":89,"loc":{"start":{"line":89,"column":8},"end":{"line":89,"column":44}},"locations":[{"start":{"line":89,"column":8},"end":{"line":89,"column":44}}]},"19":{"type":"branch","line":96,"loc":{"start":{"line":96,"column":7},"end":{"line":138,"column":1}},"locations":[{"start":{"line":96,"column":7},"end":{"line":138,"column":1}}]},"20":{"type":"branch","line":97,"loc":{"start":{"line":97,"column":12},"end":{"line":97,"column":23}},"locations":[{"start":{"line":97,"column":12},"end":{"line":97,"column":23}}]},"21":{"type":"branch","line":113,"loc":{"start":{"line":113,"column":29},"end":{"line":115,"column":3}},"locations":[{"start":{"line":113,"column":29},"end":{"line":115,"column":3}}]},"22":{"type":"branch","line":118,"loc":{"start":{"line":118,"column":46},"end":{"line":118,"column":66}},"locations":[{"start":{"line":118,"column":46},"end":{"line":118,"column":66}}]},"23":{"type":"branch","line":119,"loc":{"start":{"line":119,"column":44},"end":{"line":119,"column":62}},"locations":[{"start":{"line":119,"column":44},"end":{"line":119,"column":62}}]},"24":{"type":"branch","line":120,"loc":{"start":{"line":120,"column":44},"end":{"line":120,"column":62}},"locations":[{"start":{"line":120,"column":44},"end":{"line":120,"column":62}}]},"25":{"type":"branch","line":121,"loc":{"start":{"line":121,"column":8},"end":{"line":121,"column":52}},"locations":[{"start":{"line":121,"column":8},"end":{"line":121,"column":52}}]},"26":{"type":"branch","line":122,"loc":{"start":{"line":122,"column":8},"end":{"line":122,"column":40}},"locations":[{"start":{"line":122,"column":8},"end":{"line":122,"column":40}}]},"27":{"type":"branch","line":123,"loc":{"start":{"line":123,"column":8},"end":{"line":123,"column":44}},"locations":[{"start":{"line":123,"column":8},"end":{"line":123,"column":44}}]},"28":{"type":"branch","line":124,"loc":{"start":{"line":124,"column":8},"end":{"line":124,"column":54}},"locations":[{"start":{"line":124,"column":8},"end":{"line":124,"column":54}}]},"29":{"type":"branch","line":128,"loc":{"start":{"line":128,"column":8},"end":{"line":128,"column":52}},"locations":[{"start":{"line":128,"column":8},"end":{"line":128,"column":52}}]},"30":{"type":"branch","line":129,"loc":{"start":{"line":129,"column":8},"end":{"line":129,"column":40}},"locations":[{"start":{"line":129,"column":8},"end":{"line":129,"column":40}}]},"31":{"type":"branch","line":130,"loc":{"start":{"line":130,"column":8},"end":{"line":130,"column":44}},"locations":[{"start":{"line":130,"column":8},"end":{"line":130,"column":44}}]},"32":{"type":"branch","line":131,"loc":{"start":{"line":131,"column":8},"end":{"line":131,"column":54}},"locations":[{"start":{"line":131,"column":8},"end":{"line":131,"column":54}}]},"33":{"type":"branch","line":133,"loc":{"start":{"line":133,"column":24},"end":{"line":133,"column":50}},"locations":[{"start":{"line":133,"column":24},"end":{"line":133,"column":50}}]},"34":{"type":"branch","line":134,"loc":{"start":{"line":134,"column":24},"end":{"line":134,"column":48}},"locations":[{"start":{"line":134,"column":24},"end":{"line":134,"column":48}}]},"35":{"type":"branch","line":135,"loc":{"start":{"line":135,"column":24},"end":{"line":135,"column":48}},"locations":[{"start":{"line":135,"column":24},"end":{"line":135,"column":48}}]},"36":{"type":"branch","line":152,"loc":{"start":{"line":152,"column":0},"end":{"line":158,"column":1}},"locations":[{"start":{"line":152,"column":0},"end":{"line":158,"column":1}}]},"37":{"type":"branch","line":154,"loc":{"start":{"line":154,"column":20},"end":{"line":158,"column":1}},"locations":[{"start":{"line":154,"column":20},"end":{"line":158,"column":1}}]},"38":{"type":"branch","line":156,"loc":{"start":{"line":156,"column":15},"end":{"line":156,"column":50}},"locations":[{"start":{"line":156,"column":15},"end":{"line":156,"column":50}}]},"39":{"type":"branch","line":171,"loc":{"start":{"line":171,"column":0},"end":{"line":175,"column":1}},"locations":[{"start":{"line":171,"column":0},"end":{"line":175,"column":1}}]},"40":{"type":"branch","line":173,"loc":{"start":{"line":173,"column":20},"end":{"line":175,"column":1}},"locations":[{"start":{"line":173,"column":20},"end":{"line":175,"column":1}}]},"41":{"type":"branch","line":177,"loc":{"start":{"line":177,"column":0},"end":{"line":183,"column":1}},"locations":[{"start":{"line":177,"column":0},"end":{"line":183,"column":1}}]},"42":{"type":"branch","line":181,"loc":{"start":{"line":181,"column":20},"end":{"line":182,"column":37}},"locations":[{"start":{"line":181,"column":20},"end":{"line":182,"column":37}}]},"43":{"type":"branch","line":182,"loc":{"start":{"line":182,"column":27},"end":{"line":182,"column":37}},"locations":[{"start":{"line":182,"column":27},"end":{"line":182,"column":37}}]},"44":{"type":"branch","line":185,"loc":{"start":{"line":185,"column":0},"end":{"line":193,"column":1}},"locations":[{"start":{"line":185,"column":0},"end":{"line":193,"column":1}}]},"45":{"type":"branch","line":191,"loc":{"start":{"line":191,"column":24},"end":{"line":191,"column":64}},"locations":[{"start":{"line":191,"column":24},"end":{"line":191,"column":64}}]},"46":{"type":"branch","line":192,"loc":{"start":{"line":192,"column":13},"end":{"line":192,"column":25}},"locations":[{"start":{"line":192,"column":13},"end":{"line":192,"column":25}}]},"47":{"type":"branch","line":196,"loc":{"start":{"line":196,"column":0},"end":{"line":207,"column":1}},"locations":[{"start":{"line":196,"column":0},"end":{"line":207,"column":1}}]},"48":{"type":"branch","line":198,"loc":{"start":{"line":198,"column":14},"end":{"line":202,"column":3}},"locations":[{"start":{"line":198,"column":14},"end":{"line":202,"column":3}}]},"49":{"type":"branch","line":200,"loc":{"start":{"line":200,"column":37},"end":{"line":200,"column":65}},"locations":[{"start":{"line":200,"column":37},"end":{"line":200,"column":65}}]},"50":{"type":"branch","line":201,"loc":{"start":{"line":201,"column":42},"end":{"line":201,"column":68}},"locations":[{"start":{"line":201,"column":42},"end":{"line":201,"column":68}}]},"51":{"type":"branch","line":204,"loc":{"start":{"line":204,"column":20},"end":{"line":204,"column":52}},"locations":[{"start":{"line":204,"column":20},"end":{"line":204,"column":52}}]},"52":{"type":"branch","line":204,"loc":{"start":{"line":204,"column":51},"end":{"line":205,"column":62}},"locations":[{"start":{"line":204,"column":51},"end":{"line":205,"column":62}}]},"53":{"type":"branch","line":205,"loc":{"start":{"line":205,"column":57},"end":{"line":205,"column":75}},"locations":[{"start":{"line":205,"column":57},"end":{"line":205,"column":75}}]},"54":{"type":"branch","line":206,"loc":{"start":{"line":206,"column":103},"end":{"line":206,"column":111}},"locations":[{"start":{"line":206,"column":103},"end":{"line":206,"column":111}}]},"55":{"type":"branch","line":209,"loc":{"start":{"line":209,"column":0},"end":{"line":211,"column":1}},"locations":[{"start":{"line":209,"column":0},"end":{"line":211,"column":1}}]},"56":{"type":"branch","line":213,"loc":{"start":{"line":213,"column":0},"end":{"line":215,"column":1}},"locations":[{"start":{"line":213,"column":0},"end":{"line":215,"column":1}}]},"57":{"type":"branch","line":218,"loc":{"start":{"line":218,"column":0},"end":{"line":228,"column":1}},"locations":[{"start":{"line":218,"column":0},"end":{"line":228,"column":1}}]},"58":{"type":"branch","line":222,"loc":{"start":{"line":222,"column":20},"end":{"line":223,"column":44}},"locations":[{"start":{"line":222,"column":20},"end":{"line":223,"column":44}}]},"59":{"type":"branch","line":223,"loc":{"start":{"line":223,"column":37},"end":{"line":223,"column":46}},"locations":[{"start":{"line":223,"column":37},"end":{"line":223,"column":46}}]},"60":{"type":"branch","line":225,"loc":{"start":{"line":225,"column":9},"end":{"line":225,"column":29}},"locations":[{"start":{"line":225,"column":9},"end":{"line":225,"column":29}}]},"61":{"type":"branch","line":226,"loc":{"start":{"line":226,"column":12},"end":{"line":226,"column":33}},"locations":[{"start":{"line":226,"column":12},"end":{"line":226,"column":33}}]},"62":{"type":"branch","line":227,"loc":{"start":{"line":227,"column":10},"end":{"line":227,"column":91}},"locations":[{"start":{"line":227,"column":10},"end":{"line":227,"column":91}}]},"63":{"type":"branch","line":227,"loc":{"start":{"line":227,"column":47},"end":{"line":227,"column":58}},"locations":[{"start":{"line":227,"column":47},"end":{"line":227,"column":58}}]},"64":{"type":"branch","line":227,"loc":{"start":{"line":227,"column":83},"end":{"line":227,"column":91}},"locations":[{"start":{"line":227,"column":83},"end":{"line":227,"column":91}}]},"65":{"type":"branch","line":230,"loc":{"start":{"line":230,"column":0},"end":{"line":236,"column":1}},"locations":[{"start":{"line":230,"column":0},"end":{"line":236,"column":1}}]},"66":{"type":"branch","line":232,"loc":{"start":{"line":232,"column":20},"end":{"line":232,"column":52}},"locations":[{"start":{"line":232,"column":20},"end":{"line":232,"column":52}}]},"67":{"type":"branch","line":234,"loc":{"start":{"line":234,"column":15},"end":{"line":234,"column":48}},"locations":[{"start":{"line":234,"column":15},"end":{"line":234,"column":48}}]},"68":{"type":"branch","line":254,"loc":{"start":{"line":254,"column":0},"end":{"line":262,"column":1}},"locations":[{"start":{"line":254,"column":0},"end":{"line":262,"column":1}}]},"69":{"type":"branch","line":258,"loc":{"start":{"line":258,"column":20},"end":{"line":258,"column":52}},"locations":[{"start":{"line":258,"column":20},"end":{"line":258,"column":52}}]},"70":{"type":"branch","line":260,"loc":{"start":{"line":260,"column":15},"end":{"line":260,"column":48}},"locations":[{"start":{"line":260,"column":15},"end":{"line":260,"column":48}}]},"71":{"type":"branch","line":287,"loc":{"start":{"line":287,"column":0},"end":{"line":292,"column":1}},"locations":[{"start":{"line":287,"column":0},"end":{"line":292,"column":1}}]},"72":{"type":"branch","line":289,"loc":{"start":{"line":289,"column":20},"end":{"line":289,"column":52}},"locations":[{"start":{"line":289,"column":20},"end":{"line":289,"column":52}}]},"73":{"type":"branch","line":291,"loc":{"start":{"line":291,"column":17},"end":{"line":291,"column":29}},"locations":[{"start":{"line":291,"column":17},"end":{"line":291,"column":29}}]},"74":{"type":"branch","line":294,"loc":{"start":{"line":294,"column":0},"end":{"line":300,"column":1}},"locations":[{"start":{"line":294,"column":0},"end":{"line":300,"column":1}}]},"75":{"type":"branch","line":296,"loc":{"start":{"line":296,"column":20},"end":{"line":296,"column":52}},"locations":[{"start":{"line":296,"column":20},"end":{"line":296,"column":52}}]},"76":{"type":"branch","line":298,"loc":{"start":{"line":298,"column":15},"end":{"line":298,"column":69}},"locations":[{"start":{"line":298,"column":15},"end":{"line":298,"column":69}}]},"77":{"type":"branch","line":306,"loc":{"start":{"line":306,"column":0},"end":{"line":338,"column":1}},"locations":[{"start":{"line":306,"column":0},"end":{"line":338,"column":1}}]},"78":{"type":"branch","line":309,"loc":{"start":{"line":309,"column":75},"end":{"line":309,"column":86}},"locations":[{"start":{"line":309,"column":75},"end":{"line":309,"column":86}}]},"79":{"type":"branch","line":323,"loc":{"start":{"line":323,"column":26},"end":{"line":323,"column":37}},"locations":[{"start":{"line":323,"column":26},"end":{"line":323,"column":37}}]},"80":{"type":"branch","line":335,"loc":{"start":{"line":335,"column":20},"end":{"line":337,"column":25}},"locations":[{"start":{"line":335,"column":20},"end":{"line":337,"column":25}}]},"81":{"type":"branch","line":337,"loc":{"start":{"line":337,"column":17},"end":{"line":337,"column":29}},"locations":[{"start":{"line":337,"column":17},"end":{"line":337,"column":29}}]},"82":{"type":"branch","line":311,"loc":{"start":{"line":311,"column":83},"end":{"line":320,"column":9}},"locations":[{"start":{"line":311,"column":83},"end":{"line":320,"column":9}}]},"83":{"type":"branch","line":313,"loc":{"start":{"line":313,"column":79},"end":{"line":320,"column":9}},"locations":[{"start":{"line":313,"column":79},"end":{"line":320,"column":9}}]},"84":{"type":"branch","line":340,"loc":{"start":{"line":340,"column":0},"end":{"line":346,"column":1}},"locations":[{"start":{"line":340,"column":0},"end":{"line":346,"column":1}}]},"85":{"type":"branch","line":345,"loc":{"start":{"line":345,"column":20},"end":{"line":345,"column":52}},"locations":[{"start":{"line":345,"column":20},"end":{"line":345,"column":52}}]},"86":{"type":"branch","line":348,"loc":{"start":{"line":348,"column":0},"end":{"line":353,"column":1}},"locations":[{"start":{"line":348,"column":0},"end":{"line":353,"column":1}}]},"87":{"type":"branch","line":352,"loc":{"start":{"line":352,"column":20},"end":{"line":352,"column":52}},"locations":[{"start":{"line":352,"column":20},"end":{"line":352,"column":52}}]}},"b":{"0":[6],"1":[0],"2":[0],"3":[9],"4":[0],"5":[2],"6":[0],"7":[0],"8":[0],"9":[0],"10":[3],"11":[0],"12":[0],"13":[1],"14":[1],"15":[1],"16":[1],"17":[1],"18":[1],"19":[2],"20":[0],"21":[1],"22":[0],"23":[1],"24":[1],"25":[1],"26":[1],"27":[1],"28":[1],"29":[1],"30":[1],"31":[1],"32":[1],"33":[0],"34":[0],"35":[0],"36":[2],"37":[1],"38":[0],"39":[2],"40":[1],"41":[2],"42":[1],"43":[0],"44":[1],"45":[0],"46":[0],"47":[3],"48":[1],"49":[0],"50":[0],"51":[1],"52":[2],"53":[0],"54":[2],"55":[2],"56":[1],"57":[2],"58":[1],"59":[0],"60":[2],"61":[2],"62":[1],"63":[0],"64":[0],"65":[1],"66":[0],"67":[0],"68":[1],"69":[0],"70":[0],"71":[1],"72":[0],"73":[0],"74":[1],"75":[0],"76":[0],"77":[2],"78":[0],"79":[0],"80":[1],"81":[0],"82":[2],"83":[0],"84":[1],"85":[0],"86":[1],"87":[0]},"fnMap":{"0":{"name":"httpError","decl":{"start":{"line":16,"column":0},"end":{"line":20,"column":1}},"loc":{"start":{"line":16,"column":0},"end":{"line":20,"column":1}},"line":16},"1":{"name":"attachItemRefs","decl":{"start":{"line":26,"column":0},"end":{"line":56,"column":1}},"loc":{"start":{"line":26,"column":0},"end":{"line":56,"column":1}},"line":26},"2":{"name":"mapPurchasedShoppingList","decl":{"start":{"line":58,"column":7},"end":{"line":94,"column":1}},"loc":{"start":{"line":58,"column":7},"end":{"line":94,"column":1}},"line":58},"3":{"name":"mapCurrentShoppingList","decl":{"start":{"line":96,"column":7},"end":{"line":138,"column":1}},"loc":{"start":{"line":96,"column":7},"end":{"line":138,"column":1}},"line":96},"4":{"name":"listRecipes","decl":{"start":{"line":140,"column":0},"end":{"line":150,"column":1}},"loc":{"start":{"line":140,"column":0},"end":{"line":150,"column":1}},"line":140},"5":{"name":"getRecipe","decl":{"start":{"line":152,"column":0},"end":{"line":158,"column":1}},"loc":{"start":{"line":152,"column":0},"end":{"line":158,"column":1}},"line":152},"6":{"name":"saveRecipe","decl":{"start":{"line":160,"column":0},"end":{"line":164,"column":1}},"loc":{"start":{"line":160,"column":0},"end":{"line":164,"column":1}},"line":160},"7":{"name":"deleteRecipe","decl":{"start":{"line":166,"column":0},"end":{"line":169,"column":1}},"loc":{"start":{"line":166,"column":0},"end":{"line":169,"column":1}},"line":166},"8":{"name":"parseRecipe","decl":{"start":{"line":171,"column":0},"end":{"line":175,"column":1}},"loc":{"start":{"line":171,"column":0},"end":{"line":175,"column":1}},"line":171},"9":{"name":"parseIngredients","decl":{"start":{"line":177,"column":0},"end":{"line":183,"column":1}},"loc":{"start":{"line":177,"column":0},"end":{"line":183,"column":1}},"line":177},"10":{"name":"parseProduct","decl":{"start":{"line":185,"column":0},"end":{"line":193,"column":1}},"loc":{"start":{"line":185,"column":0},"end":{"line":193,"column":1}},"line":185},"11":{"name":"listPersons","decl":{"start":{"line":196,"column":0},"end":{"line":207,"column":1}},"loc":{"start":{"line":196,"column":0},"end":{"line":207,"column":1}},"line":196},"12":{"name":"getPersonsInHome","decl":{"start":{"line":209,"column":0},"end":{"line":211,"column":1}},"loc":{"start":{"line":209,"column":0},"end":{"line":211,"column":1}},"line":209},"13":{"name":"searchPersons","decl":{"start":{"line":213,"column":0},"end":{"line":215,"column":1}},"loc":{"start":{"line":213,"column":0},"end":{"line":215,"column":1}},"line":213},"14":{"name":"getUpcomingMeals","decl":{"start":{"line":218,"column":0},"end":{"line":228,"column":1}},"loc":{"start":{"line":218,"column":0},"end":{"line":228,"column":1}},"line":218},"15":{"name":"getMeal","decl":{"start":{"line":230,"column":0},"end":{"line":236,"column":1}},"loc":{"start":{"line":230,"column":0},"end":{"line":236,"column":1}},"line":230},"16":{"name":"saveMeal","decl":{"start":{"line":238,"column":0},"end":{"line":252,"column":1}},"loc":{"start":{"line":238,"column":0},"end":{"line":252,"column":1}},"line":238},"17":{"name":"markMealConsumed","decl":{"start":{"line":254,"column":0},"end":{"line":262,"column":1}},"loc":{"start":{"line":254,"column":0},"end":{"line":262,"column":1}},"line":254},"18":{"name":"deleteMeal","decl":{"start":{"line":264,"column":0},"end":{"line":269,"column":1}},"loc":{"start":{"line":264,"column":0},"end":{"line":269,"column":1}},"line":264},"19":{"name":"getMyShoppingList","decl":{"start":{"line":272,"column":0},"end":{"line":276,"column":1}},"loc":{"start":{"line":272,"column":0},"end":{"line":276,"column":1}},"line":272},"20":{"name":"saveMyShoppingList","decl":{"start":{"line":278,"column":0},"end":{"line":285,"column":1}},"loc":{"start":{"line":278,"column":0},"end":{"line":285,"column":1}},"line":278},"21":{"name":"getShoppingList","decl":{"start":{"line":287,"column":0},"end":{"line":292,"column":1}},"loc":{"start":{"line":287,"column":0},"end":{"line":292,"column":1}},"line":287},"22":{"name":"getCurrentShoppingList","decl":{"start":{"line":294,"column":0},"end":{"line":300,"column":1}},"loc":{"start":{"line":294,"column":0},"end":{"line":300,"column":1}},"line":294},"23":{"name":"purchaseShoppingList","decl":{"start":{"line":306,"column":0},"end":{"line":338,"column":1}},"loc":{"start":{"line":306,"column":0},"end":{"line":338,"column":1}},"line":306},"24":{"name":"requestMeal","decl":{"start":{"line":340,"column":0},"end":{"line":346,"column":1}},"loc":{"start":{"line":340,"column":0},"end":{"line":346,"column":1}},"line":340},"25":{"name":"unrequestMeal","decl":{"start":{"line":348,"column":0},"end":{"line":353,"column":1}},"loc":{"start":{"line":348,"column":0},"end":{"line":353,"column":1}},"line":348}},"f":{"0":6,"1":9,"2":3,"3":2,"4":0,"5":2,"6":0,"7":0,"8":2,"9":2,"10":1,"11":3,"12":2,"13":1,"14":2,"15":1,"16":0,"17":1,"18":0,"19":0,"20":0,"21":1,"22":1,"23":2,"24":1,"25":1}} ,"/home/jables/source/doof/munch-ease-frontend/src/components/ActionItem.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/ActionItem.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":20}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":30}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":26}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":10}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":20}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":20}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":7}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":8}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":8}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":11}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":0}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":14}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":35}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":13}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":42}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":42}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":2}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":9}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":0}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":14}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":5}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":14}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":15}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":1}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":0}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":7}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":24}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":25}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":21}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":16}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":22}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":14}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":18}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":1}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":0}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":13}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":25}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":1}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":40,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":40,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":40,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":40,"column":8}},"line":1}},"f":{"0":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/components/AlertToast.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/AlertToast.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":6}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":28}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":20}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":3}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":8}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":17}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":17}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":5}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":35}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":26}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":21}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":11}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":25}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":21}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":10}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":10}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":8}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":11}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":0}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":14}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":37}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":49}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":0}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":20}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":80}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":84}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":78}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":1}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":0}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":58}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":0}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":49}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":60}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":60}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":54}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":99}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":0}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":20}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":9}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":1}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":0}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":6}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":27}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":11}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":37}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":3}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":1}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":9}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":0}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":14}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":52}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":108}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":0}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":8}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":18}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":14}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":13}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":16}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":22}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":15}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":21}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":15}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":42}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":19}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":1}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":0}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":12}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":13}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":14}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":20}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":0}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":25}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":20}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":1}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":0}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":14}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":28}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":1}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":0}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":16}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":28}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":1}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":0}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":13}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":28}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":1}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":90,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":90,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":90,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":90,"column":8}},"line":1}},"f":{"0":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/components/LoginPage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/LoginPage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":21}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":23}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":29}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":9}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":42}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":33}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":7}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":15}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":23}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":33}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":34}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":9}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":27}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":17}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":11}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":9}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":8}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":11}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":0}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":24}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":36}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":38}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":44}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":46}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":44}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":0}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":27}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":43}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":2}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":0}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":26}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":33}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":0}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":23}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":39}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":28}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":2}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":0}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":48}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":52}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":24}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":31}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":10}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":3}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":23}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":1}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":9}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":0}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":14}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":37}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":4}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":24}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":13}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":1}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":0}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":69}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":0}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":15}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":16}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":18}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":26}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":1}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":0}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":49}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":0}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":8}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":15}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":16}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":21}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":15}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":19}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":0}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":51}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":16}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":26}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":22}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":0}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":68}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":42}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":1}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":0}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":56}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":0}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":26}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":28}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":15}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":1}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":0}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":26}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":28}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":15}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":1}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":0}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":26}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":28}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":15}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":1}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":0}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":26}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":28}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":15}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":1}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":104,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":104,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":104,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":104,"column":8}},"line":1}},"f":{"0":0}} @@ -14,24 +14,24 @@ ,"/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":11}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":20}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":29}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":5}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":10}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":20}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":12}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":20}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":13}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":11}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":22}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":28}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":5}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":27}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":12}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":24}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":14}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":20}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":13}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":19}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":12}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":22}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":23}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":14}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":20}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":13}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":13}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":8}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":9}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":41}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":25}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":7}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":28}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":37}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":28}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":38}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":51}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":50}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":14}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":14}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":57}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":16}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":26}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":26}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":13}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":19}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":14}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":20}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":64}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":14}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":11}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":9}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":8}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":11}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":0}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":14}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":25}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":58}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":49}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":67}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":76}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":76}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":71}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":71}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":0}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":27}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":47}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":46}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":2}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":87}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":0}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":44}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":0}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":56}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":62}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":70}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":1}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":0}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":51}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":55}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":61}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":1}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":0}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":26}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":32}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":35}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":1}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":9}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":0}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":14}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":7}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":13}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":14}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":1}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":0}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":4}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":13}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":1}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":0}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":4}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":19}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":1}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":0}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":10}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":16}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":22}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":33}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":14}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":1}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":0}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":13}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":25}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":21}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":15}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":1}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":0}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":18}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":10}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":12}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":20}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":1}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":126,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":126,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":126,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":126,"column":8}},"line":1}},"f":{"0":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/IngredientLine.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/IngredientLine.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":31}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":7}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":12}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":32}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":41}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":39}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":32}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":7}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":12}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":30}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":29}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":34}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":40}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":40}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":33}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":7}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":8}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":30}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":40}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":60}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":8}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":8}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":11}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":24}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":32}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":67}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":48}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":0}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":55}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":26}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":73}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":72}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":4}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":0}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":64}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":69}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":0}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":6}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":25}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":22}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":52}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":58}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":4}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":16}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":1}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":0}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":29}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":54}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":69}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":3}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":1}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":0}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":30}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":81}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":68}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":3}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":1}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":9}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":0}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":14}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":7}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":12}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":20}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":32}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":30}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":14}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":17}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":1}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":0}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":21}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":14}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":20}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":1}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":76,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":76,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":76,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":76,"column":8}},"line":1}},"f":{"0":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/components/meals/DatePicker.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/meals/DatePicker.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":27}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":10}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":28}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":17}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":33}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":36}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":36}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":5}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":8}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":27}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":34}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":5}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":10}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":11}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":38}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":22}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":38}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":9}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":30}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":13}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":11}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":10}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":8}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":11}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":0}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":24}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":42}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":0}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":44}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":70}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":0}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":40}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":99}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":50}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":1}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":44}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":56}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":33}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":0}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":6}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":19}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":16}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":56}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":3}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":1}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":0}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":37}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":26}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":27}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":32}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":29}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":34}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":18}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":3}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":15}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":2}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":0}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":33}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":38}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":30}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":29}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":1}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":9}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":0}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":14}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":14}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":21}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":1}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":0}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":20}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":14}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":15}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":25}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":21}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":18}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":16}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":1}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":0}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":23}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":21}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":12}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":14}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":15}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":25}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":25}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":43}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":16}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":1}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":0}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":26}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":24}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":12}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":13}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":1}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":0}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":26}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":15}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":18}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":32}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":1}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":0}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":32}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":25}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":1}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":0}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":37}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":22}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":1}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":111,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":111,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":111,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":111,"column":8}},"line":1}},"f":{"0":0}} -,"/home/jables/source/doof/munch-ease-frontend/src/components/meals/EditMealPage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/meals/EditMealPage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":25}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":18}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":48}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":35}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":8}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":32}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":17}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":20}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":30}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":58}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":52}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":10}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":11}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":20}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":34}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":62}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":56}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":16}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":20}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":32}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":60}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":54}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":10}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":19}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":12}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":10}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":25}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":22}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":37}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":11}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":44}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":61}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":9}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":14}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":36}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":32}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":11}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":35}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":57}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":16}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":0}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":32}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":20}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":45}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":29}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":23}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":15}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":46}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":16}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":0}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":18}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":29}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":46}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":51}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":13}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":18}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":36}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":78}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":13}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":18}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":28}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":42}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":15}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":20}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":19}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":33}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":47}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":13}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":18}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":28}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":28}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":15}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":21}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":16}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":0}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":49}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":16}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":17}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":66}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":36}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":40}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":15}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":68}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":19}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":17}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":16}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":13}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":11}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":18}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":52}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":12}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":26}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":59}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":12}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":10}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":29}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":45}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":33}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":44}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":31}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":37}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":48}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":49}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":8}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":10}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":0}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":32}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":10}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":13}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":32}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":53}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":8}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":8}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":11}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":0}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":24}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":45}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":48}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":56}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":47}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":40}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":49}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":47}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":74}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":0}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":35}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":0}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":70}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":60}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":41}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":82}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":41}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":80}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":96}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":71}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":0}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":82}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":23}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":48}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":25}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":5}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":1}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":0}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":24}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":26}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":38}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":0}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":50}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":0}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":29}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":11}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":30}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":23}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":23}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":16}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":25}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":14}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":18}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":16}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":2}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":0}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":27}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":44}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":22}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":40}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":21}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":39}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":9}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":12}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":40}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":19}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":31}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":35}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":33}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":9}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":5}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":2}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":0}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":33}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":29}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":1}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":0}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":47}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":8}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":16}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":140}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":9}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":7}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":67}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":5}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":1}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":0}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":26}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":193}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":1}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":0}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":51}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":81}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":1}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":0}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":78}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":100}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":1}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":0}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":56}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":61}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":1}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":0}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":53}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":44}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":1}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":0}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":62}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":40}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":40}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":18}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":0}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":22}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":53}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":57}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":0}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":40}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":59}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":9}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":5}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":0}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":89}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":1}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":0}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":62}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":56}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":23}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":12}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":77}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":5}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":1}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":0}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":53}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":75}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":50}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":64}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":30}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":29}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":5}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":24}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":16}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":1}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":0}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":51}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":52}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":49}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":27}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":16}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":17}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":66}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":9}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":6}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":1}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":0}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":29}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":51}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":33}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":34}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":41}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":97}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":14}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":5}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":0}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":15}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":37}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":59}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":22}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":6}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":1}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":9}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":0}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":14}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":10}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":15}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":16}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":1}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":0}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":15}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":21}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":21}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":1}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":0}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":17}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":14}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":24}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":1}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":0}},"294":{"start":{"line":295,"column":0},"end":{"line":295,"column":17}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":26}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":23}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":1}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":0}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":12}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":21}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":1}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":0}},"303":{"start":{"line":304,"column":0},"end":{"line":304,"column":4}},"304":{"start":{"line":305,"column":0},"end":{"line":305,"column":26}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":14}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":15}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":1}},"308":{"start":{"line":309,"column":0},"end":{"line":309,"column":0}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":4}},"310":{"start":{"line":311,"column":0},"end":{"line":311,"column":26}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":1}},"312":{"start":{"line":313,"column":0},"end":{"line":313,"column":0}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":19}},"314":{"start":{"line":315,"column":0},"end":{"line":315,"column":18}},"315":{"start":{"line":316,"column":0},"end":{"line":316,"column":35}},"316":{"start":{"line":317,"column":0},"end":{"line":317,"column":24}},"317":{"start":{"line":318,"column":0},"end":{"line":318,"column":1}},"318":{"start":{"line":319,"column":0},"end":{"line":319,"column":0}},"319":{"start":{"line":320,"column":0},"end":{"line":320,"column":15}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":18}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":35}},"322":{"start":{"line":323,"column":0},"end":{"line":323,"column":24}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":1}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":0}},"325":{"start":{"line":326,"column":0},"end":{"line":326,"column":21}},"326":{"start":{"line":327,"column":0},"end":{"line":327,"column":12}},"327":{"start":{"line":328,"column":0},"end":{"line":328,"column":14}},"328":{"start":{"line":329,"column":0},"end":{"line":329,"column":22}},"329":{"start":{"line":330,"column":0},"end":{"line":330,"column":1}},"330":{"start":{"line":331,"column":0},"end":{"line":331,"column":0}},"331":{"start":{"line":332,"column":0},"end":{"line":332,"column":28}},"332":{"start":{"line":333,"column":0},"end":{"line":333,"column":21}},"333":{"start":{"line":334,"column":0},"end":{"line":334,"column":1}},"334":{"start":{"line":335,"column":0},"end":{"line":335,"column":0}},"335":{"start":{"line":336,"column":0},"end":{"line":336,"column":28}},"336":{"start":{"line":337,"column":0},"end":{"line":337,"column":14}},"337":{"start":{"line":338,"column":0},"end":{"line":338,"column":1}},"338":{"start":{"line":339,"column":0},"end":{"line":339,"column":0}},"339":{"start":{"line":340,"column":0},"end":{"line":340,"column":14}},"340":{"start":{"line":341,"column":0},"end":{"line":341,"column":12}},"341":{"start":{"line":342,"column":0},"end":{"line":342,"column":1}},"342":{"start":{"line":343,"column":0},"end":{"line":343,"column":0}},"343":{"start":{"line":344,"column":0},"end":{"line":344,"column":11}},"344":{"start":{"line":345,"column":0},"end":{"line":345,"column":26}},"345":{"start":{"line":346,"column":0},"end":{"line":346,"column":22}},"346":{"start":{"line":347,"column":0},"end":{"line":347,"column":1}},"347":{"start":{"line":348,"column":0},"end":{"line":348,"column":0}},"348":{"start":{"line":349,"column":0},"end":{"line":349,"column":17}},"349":{"start":{"line":350,"column":0},"end":{"line":350,"column":15}},"350":{"start":{"line":351,"column":0},"end":{"line":351,"column":17}},"351":{"start":{"line":352,"column":0},"end":{"line":352,"column":34}},"352":{"start":{"line":353,"column":0},"end":{"line":353,"column":23}},"353":{"start":{"line":354,"column":0},"end":{"line":354,"column":21}},"354":{"start":{"line":355,"column":0},"end":{"line":355,"column":23}},"355":{"start":{"line":356,"column":0},"end":{"line":356,"column":1}},"356":{"start":{"line":357,"column":0},"end":{"line":357,"column":0}},"357":{"start":{"line":358,"column":0},"end":{"line":358,"column":14}},"358":{"start":{"line":359,"column":0},"end":{"line":359,"column":21}},"359":{"start":{"line":360,"column":0},"end":{"line":360,"column":17}},"360":{"start":{"line":361,"column":0},"end":{"line":361,"column":20}},"361":{"start":{"line":362,"column":0},"end":{"line":362,"column":23}},"362":{"start":{"line":363,"column":0},"end":{"line":363,"column":19}},"363":{"start":{"line":364,"column":0},"end":{"line":364,"column":1}},"364":{"start":{"line":365,"column":0},"end":{"line":365,"column":0}},"365":{"start":{"line":366,"column":0},"end":{"line":366,"column":20}},"366":{"start":{"line":367,"column":0},"end":{"line":367,"column":45}},"367":{"start":{"line":368,"column":0},"end":{"line":368,"column":22}},"368":{"start":{"line":369,"column":0},"end":{"line":369,"column":1}},"369":{"start":{"line":370,"column":0},"end":{"line":370,"column":0}},"370":{"start":{"line":371,"column":0},"end":{"line":371,"column":27}},"371":{"start":{"line":372,"column":0},"end":{"line":372,"column":18}},"372":{"start":{"line":373,"column":0},"end":{"line":373,"column":1}},"373":{"start":{"line":374,"column":0},"end":{"line":374,"column":0}},"374":{"start":{"line":375,"column":0},"end":{"line":375,"column":33}},"375":{"start":{"line":376,"column":0},"end":{"line":376,"column":20}},"376":{"start":{"line":377,"column":0},"end":{"line":377,"column":27}},"377":{"start":{"line":378,"column":0},"end":{"line":378,"column":19}},"378":{"start":{"line":379,"column":0},"end":{"line":379,"column":23}},"379":{"start":{"line":380,"column":0},"end":{"line":380,"column":1}},"380":{"start":{"line":381,"column":0},"end":{"line":381,"column":0}},"381":{"start":{"line":382,"column":0},"end":{"line":382,"column":39}},"382":{"start":{"line":383,"column":0},"end":{"line":383,"column":27}},"383":{"start":{"line":384,"column":0},"end":{"line":384,"column":1}},"384":{"start":{"line":385,"column":0},"end":{"line":385,"column":0}},"385":{"start":{"line":386,"column":0},"end":{"line":386,"column":41}},"386":{"start":{"line":387,"column":0},"end":{"line":387,"column":22}},"387":{"start":{"line":388,"column":0},"end":{"line":388,"column":1}},"388":{"start":{"line":389,"column":0},"end":{"line":389,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":389,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":389,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":389,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":389,"column":8}},"line":1}},"f":{"0":0}} -,"/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealCard.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealCard.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":25}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":28}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":8}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":47}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":9}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":7}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":15}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":11}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":43}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":22}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":7}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":64}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":13}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":54}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":8}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":7}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":9}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":11}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":51}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":26}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":7}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":72}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":13}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":58}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":8}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":32}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":44}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":8}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":8}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":11}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":0}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":24}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":30}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":35}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":42}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":46}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":34}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":13}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":28}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":17}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":21}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":24}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":33}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":28}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":1}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":0}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":43}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":0}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":64}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":18}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":25}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":15}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":25}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":20}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":12}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":17}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":3}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":1}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":0}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":38}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":24}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":11}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":15}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":11}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":20}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":11}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":40}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":12}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":69}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":3}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":1}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":0}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":27}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":26}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":96}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":8}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":1}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":0}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":32}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":107}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":1}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":0}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":34}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":42}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":50}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":70}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":64}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":0}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":85}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":75}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":26}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":2}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":9}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":0}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":15}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":98,"column":15}},"locations":[{"start":{"line":1,"column":0},"end":{"line":98,"column":15}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":98,"column":15}},"loc":{"start":{"line":1,"column":0},"end":{"line":98,"column":15}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/meals/EditMealPage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/meals/EditMealPage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":25}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":18}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":48}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":35}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":8}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":32}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":17}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":20}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":30}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":58}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":52}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":10}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":11}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":20}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":34}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":62}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":56}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":16}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":20}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":32}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":60}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":54}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":10}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":19}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":12}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":10}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":25}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":22}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":37}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":11}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":44}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":61}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":9}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":14}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":36}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":32}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":11}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":35}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":57}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":16}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":0}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":32}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":20}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":45}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":29}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":23}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":15}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":46}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":16}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":0}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":18}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":29}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":46}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":51}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":13}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":18}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":36}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":78}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":13}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":18}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":28}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":42}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":15}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":20}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":19}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":33}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":47}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":13}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":18}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":28}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":28}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":15}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":21}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":16}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":0}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":49}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":16}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":17}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":66}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":36}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":40}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":15}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":68}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":19}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":17}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":16}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":13}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":11}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":18}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":52}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":12}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":26}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":59}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":12}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":10}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":29}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":45}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":33}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":44}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":31}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":37}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":48}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":49}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":8}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":10}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":0}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":32}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":10}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":13}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":32}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":53}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":8}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":8}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":11}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":0}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":24}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":45}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":48}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":56}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":47}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":40}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":49}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":47}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":74}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":0}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":35}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":0}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":70}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":60}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":41}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":82}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":41}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":80}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":96}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":71}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":0}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":82}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":23}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":48}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":25}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":5}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":1}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":0}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":24}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":26}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":38}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":0}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":50}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":0}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":29}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":11}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":30}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":23}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":23}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":16}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":25}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":14}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":18}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":16}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":2}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":0}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":27}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":42}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":20}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":36}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":31}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":10}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":40}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":19}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":31}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":35}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":33}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":9}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":5}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":2}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":0}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":33}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":29}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":1}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":0}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":47}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":8}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":16}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":140}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":9}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":7}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":67}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":5}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":1}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":0}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":26}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":193}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":1}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":0}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":51}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":81}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":1}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":0}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":78}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":100}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":1}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":0}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":56}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":61}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":1}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":0}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":53}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":44}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":1}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":0}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":62}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":40}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":38}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":0}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":22}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":53}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":57}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":0}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":40}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":59}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":9}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":5}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":0}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":89}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":1}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":0}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":62}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":56}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":23}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":12}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":77}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":5}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":1}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":0}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":53}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":75}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":50}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":64}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":30}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":29}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":5}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":24}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":16}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":1}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":0}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":51}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":52}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":49}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":27}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":16}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":17}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":66}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":9}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":6}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":1}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":0}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":29}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":51}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":33}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":34}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":41}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":97}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":14}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":5}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":0}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":15}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":37}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":59}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":22}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":6}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":1}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":9}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":0}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":14}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":10}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":15}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":16}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":1}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":0}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":15}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":21}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":21}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":1}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":0}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":17}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":14}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":24}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":1}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":0}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":17}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":26}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":23}},"294":{"start":{"line":295,"column":0},"end":{"line":295,"column":1}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":0}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":12}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":21}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":1}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":0}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":4}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":26}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":14}},"303":{"start":{"line":304,"column":0},"end":{"line":304,"column":15}},"304":{"start":{"line":305,"column":0},"end":{"line":305,"column":1}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":0}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":4}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":26}},"308":{"start":{"line":309,"column":0},"end":{"line":309,"column":1}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":0}},"310":{"start":{"line":311,"column":0},"end":{"line":311,"column":19}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":18}},"312":{"start":{"line":313,"column":0},"end":{"line":313,"column":35}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":24}},"314":{"start":{"line":315,"column":0},"end":{"line":315,"column":1}},"315":{"start":{"line":316,"column":0},"end":{"line":316,"column":0}},"316":{"start":{"line":317,"column":0},"end":{"line":317,"column":15}},"317":{"start":{"line":318,"column":0},"end":{"line":318,"column":18}},"318":{"start":{"line":319,"column":0},"end":{"line":319,"column":35}},"319":{"start":{"line":320,"column":0},"end":{"line":320,"column":24}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":1}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":0}},"322":{"start":{"line":323,"column":0},"end":{"line":323,"column":21}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":12}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":14}},"325":{"start":{"line":326,"column":0},"end":{"line":326,"column":22}},"326":{"start":{"line":327,"column":0},"end":{"line":327,"column":1}},"327":{"start":{"line":328,"column":0},"end":{"line":328,"column":0}},"328":{"start":{"line":329,"column":0},"end":{"line":329,"column":28}},"329":{"start":{"line":330,"column":0},"end":{"line":330,"column":21}},"330":{"start":{"line":331,"column":0},"end":{"line":331,"column":1}},"331":{"start":{"line":332,"column":0},"end":{"line":332,"column":0}},"332":{"start":{"line":333,"column":0},"end":{"line":333,"column":28}},"333":{"start":{"line":334,"column":0},"end":{"line":334,"column":14}},"334":{"start":{"line":335,"column":0},"end":{"line":335,"column":1}},"335":{"start":{"line":336,"column":0},"end":{"line":336,"column":0}},"336":{"start":{"line":337,"column":0},"end":{"line":337,"column":14}},"337":{"start":{"line":338,"column":0},"end":{"line":338,"column":12}},"338":{"start":{"line":339,"column":0},"end":{"line":339,"column":1}},"339":{"start":{"line":340,"column":0},"end":{"line":340,"column":0}},"340":{"start":{"line":341,"column":0},"end":{"line":341,"column":11}},"341":{"start":{"line":342,"column":0},"end":{"line":342,"column":26}},"342":{"start":{"line":343,"column":0},"end":{"line":343,"column":22}},"343":{"start":{"line":344,"column":0},"end":{"line":344,"column":1}},"344":{"start":{"line":345,"column":0},"end":{"line":345,"column":0}},"345":{"start":{"line":346,"column":0},"end":{"line":346,"column":17}},"346":{"start":{"line":347,"column":0},"end":{"line":347,"column":15}},"347":{"start":{"line":348,"column":0},"end":{"line":348,"column":17}},"348":{"start":{"line":349,"column":0},"end":{"line":349,"column":34}},"349":{"start":{"line":350,"column":0},"end":{"line":350,"column":23}},"350":{"start":{"line":351,"column":0},"end":{"line":351,"column":21}},"351":{"start":{"line":352,"column":0},"end":{"line":352,"column":23}},"352":{"start":{"line":353,"column":0},"end":{"line":353,"column":1}},"353":{"start":{"line":354,"column":0},"end":{"line":354,"column":0}},"354":{"start":{"line":355,"column":0},"end":{"line":355,"column":14}},"355":{"start":{"line":356,"column":0},"end":{"line":356,"column":21}},"356":{"start":{"line":357,"column":0},"end":{"line":357,"column":17}},"357":{"start":{"line":358,"column":0},"end":{"line":358,"column":20}},"358":{"start":{"line":359,"column":0},"end":{"line":359,"column":23}},"359":{"start":{"line":360,"column":0},"end":{"line":360,"column":19}},"360":{"start":{"line":361,"column":0},"end":{"line":361,"column":1}},"361":{"start":{"line":362,"column":0},"end":{"line":362,"column":0}},"362":{"start":{"line":363,"column":0},"end":{"line":363,"column":20}},"363":{"start":{"line":364,"column":0},"end":{"line":364,"column":45}},"364":{"start":{"line":365,"column":0},"end":{"line":365,"column":22}},"365":{"start":{"line":366,"column":0},"end":{"line":366,"column":1}},"366":{"start":{"line":367,"column":0},"end":{"line":367,"column":0}},"367":{"start":{"line":368,"column":0},"end":{"line":368,"column":27}},"368":{"start":{"line":369,"column":0},"end":{"line":369,"column":18}},"369":{"start":{"line":370,"column":0},"end":{"line":370,"column":1}},"370":{"start":{"line":371,"column":0},"end":{"line":371,"column":0}},"371":{"start":{"line":372,"column":0},"end":{"line":372,"column":33}},"372":{"start":{"line":373,"column":0},"end":{"line":373,"column":20}},"373":{"start":{"line":374,"column":0},"end":{"line":374,"column":27}},"374":{"start":{"line":375,"column":0},"end":{"line":375,"column":19}},"375":{"start":{"line":376,"column":0},"end":{"line":376,"column":23}},"376":{"start":{"line":377,"column":0},"end":{"line":377,"column":1}},"377":{"start":{"line":378,"column":0},"end":{"line":378,"column":0}},"378":{"start":{"line":379,"column":0},"end":{"line":379,"column":39}},"379":{"start":{"line":380,"column":0},"end":{"line":380,"column":27}},"380":{"start":{"line":381,"column":0},"end":{"line":381,"column":1}},"381":{"start":{"line":382,"column":0},"end":{"line":382,"column":0}},"382":{"start":{"line":383,"column":0},"end":{"line":383,"column":41}},"383":{"start":{"line":384,"column":0},"end":{"line":384,"column":22}},"384":{"start":{"line":385,"column":0},"end":{"line":385,"column":1}},"385":{"start":{"line":386,"column":0},"end":{"line":386,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":386,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":386,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":386,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":386,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealCard.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealCard.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":25}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":28}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":8}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":47}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":9}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":7}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":15}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":11}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":43}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":22}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":7}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":64}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":13}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":54}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":8}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":7}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":9}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":11}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":51}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":26}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":7}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":72}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":13}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":58}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":8}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":32}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":44}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":8}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":8}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":11}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":0}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":24}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":30}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":35}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":42}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":0}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":43}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":0}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":64}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":18}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":25}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":15}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":25}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":20}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":12}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":17}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":3}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":1}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":0}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":38}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":24}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":11}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":15}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":11}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":20}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":11}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":40}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":12}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":69}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":3}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":1}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":0}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":27}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":26}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":96}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":8}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":1}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":0}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":32}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":107}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":1}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":0}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":34}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":42}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":50}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":29}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":33}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":70}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":46}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":64}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":0}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":85}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":75}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":26}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":2}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":9}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":0}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":15}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":90,"column":15}},"locations":[{"start":{"line":1,"column":0},"end":{"line":90,"column":15}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":90,"column":15}},"loc":{"start":{"line":1,"column":0},"end":{"line":90,"column":15}},"line":1}},"f":{"0":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealPlanPage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealPlanPage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":7}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":7}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":25}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":24}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":5}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":9}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":29}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":7}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":34}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":15}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":32}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":68}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":9}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":69}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":17}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":0}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":11}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":37}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":25}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":9}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":14}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":24}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":30}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":47}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":35}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":13}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":23}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":26}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":15}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":61}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":14}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":14}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":28}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":41}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":23}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":15}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":13}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":11}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":9}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":30}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":31}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":10}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":16}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":23}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":23}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":47}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":6}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":8}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":11}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":0}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":14}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":40}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":52}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":54}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":74}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":84}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":80}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":78}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":0}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":23}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":15}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":0}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":21}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":28}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":0}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":21}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":30}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":0}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":27}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":48}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":2}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":0}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":37}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":33}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":41}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":73}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":27}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":1}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":0}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":31}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":33}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":47}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":73}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":1}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":9}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":0}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":14}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":4}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":24}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":1}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":0}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":15}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":13}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":1}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":0}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":17}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":18}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":25}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":15}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":32}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":17}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":12}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":1}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":0}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":21}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":13}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":14}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":1}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":0}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":18}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":21}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":13}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":25}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":21}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":16}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":1}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":0}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":12}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":12}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":13}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":1}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":0}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":13}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":17}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":25}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":1}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":0}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":19}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":25}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":1}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":0}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":15}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":17}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":24}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":14}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":14}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":18}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":19}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":22}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":1}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":143,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":143,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":143,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":143,"column":8}},"line":1}},"f":{"0":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/components/meals/PersonList.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/meals/PersonList.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":28}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":9}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":30}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":22}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":5}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":13}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":43}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":37}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":7}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":25}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":15}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":11}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":10}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":13}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":30}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":40}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":38}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":7}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":9}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":15}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":12}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":14}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":29}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":28}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":32}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":43}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":38}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":7}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":9}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":53}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":28}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":31}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":7}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":11}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":41}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":26}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":9}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":17}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":44}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":42}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":11}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":29}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":19}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":13}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":11}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":11}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":9}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":11}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":0}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":24}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":32}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":41}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":44}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":86}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":26}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":41}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":44}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":4}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":0}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":33}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":26}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":39}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":0}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":33}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":58}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":57}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":0}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":38}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":35}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":11}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":28}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":10}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":3}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":37}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":79}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":54}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":71}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":1}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":0}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":37}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":50}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":35}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":3}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":16}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":25}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":28}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":32}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":10}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":3}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":54}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":30}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":3}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":23}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":26}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":30}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":1}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":0}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":39}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":31}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":1}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":0}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":11}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":31}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":29}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":2}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":0}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":38}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":11}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":14}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":31}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":3}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":2}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":0}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":61}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":22}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":51}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":43}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":44}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":45}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":3}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":2}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":9}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":0}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":14}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":14}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":24}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":21}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":19}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":13}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":12}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":1}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":0}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":35}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":16}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":19}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":15}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":13}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":12}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":1}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":0}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":49}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":16}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":24}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":14}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":15}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":20}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":21}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":21}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":19}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":1}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":0}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":61}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":80}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":22}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":18}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":21}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":31}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":1}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":0}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":31}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":29}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":29}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":23}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":15}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":15}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":21}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":9}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":12}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":10}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":11}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":1}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":0}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":13}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":31}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":1}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":0}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":19}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":18}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":22}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":15}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":26}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":1}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":0}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":18}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":21}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":26}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":25}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":43}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":24}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":13}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":12}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":19}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":21}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":16}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":1}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":0}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":21}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":15}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":18}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":18}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":19}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":1}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":204,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":204,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":204,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":204,"column":8}},"line":1}},"f":{"0":0}} -,"/home/jables/source/doof/munch-ease-frontend/src/components/recipes/EditRecipePage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/recipes/EditRecipePage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":7}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":31}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":12}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":22}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":27}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":19}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":36}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":12}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":33}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":13}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":15}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":41}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":27}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":15}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":10}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":0}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":29}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":29}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":10}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":0}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":40}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":10}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":28}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":31}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":30}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":8}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":10}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":14}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":31}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":29}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":21}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":9}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":11}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":59}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":12}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":31}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":21}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":7}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":30}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":46}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":11}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":26}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":33}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":41}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":25}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":31}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":37}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":48}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":8}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":0}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":11}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":15}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":26}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":28}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":31}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":9}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":16}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":17}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":15}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":28}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":29}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":9}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":45}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":17}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":12}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":10}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":8}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":11}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":0}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":24}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":53}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":48}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":49}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":51}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":112}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":92}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":85}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":0}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":27}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":60}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":2}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":0}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":26}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":24}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":38}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":0}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":59}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":31}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":45}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":0}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":38}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":44}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":31}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":26}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":12}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":145}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":5}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":3}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":13}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":2}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":0}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":22}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":67}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":17}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":1}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":0}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":32}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":49}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":31}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":33}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":20}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":30}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":10}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":26}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":43}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":20}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":27}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":10}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":23}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":3}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":1}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":0}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":84}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":27}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":45}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":106}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":1}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":0}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":51}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":27}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":45}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":87}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":1}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":0}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":29}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":86}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":31}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":98}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":39}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":10}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":3}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":112}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":1}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":0}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":30}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":18}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":11}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":26}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":20}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":13}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":20}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":18}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":14}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":28}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":21}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":3}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":1}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":0}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":26}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":27}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":45}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":165}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":67}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":1}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":0}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":31}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":64}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":29}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":42}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":27}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":3}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":1}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":0}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":17}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":17}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":2}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":0}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":58}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":6}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":24}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":15}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":43}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":17}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":25}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":21}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":5}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":3}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":1}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":0}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":76}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":54}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":10}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":13}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":17}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":17}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":21}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":33}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":37}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":41}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":41}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":31}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":35}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":23}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":37}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":33}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":3}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":1}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":9}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":0}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":14}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":7}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":12}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":32}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":19}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":1}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":0}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":19}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":13}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":1}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":0}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":18}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":19}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":19}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":16}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":25}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":1}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":0}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":19}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":14}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":20}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":20}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":1}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":0}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":14}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":17}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":24}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":1}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":239,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":239,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":239,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":239,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/recipes/EditRecipePage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/recipes/EditRecipePage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":7}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":31}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":12}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":22}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":27}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":19}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":36}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":12}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":33}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":13}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":15}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":41}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":27}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":15}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":10}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":0}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":29}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":29}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":10}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":0}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":40}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":10}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":28}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":31}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":30}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":8}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":10}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":14}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":31}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":29}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":21}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":9}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":11}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":59}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":12}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":31}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":21}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":7}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":30}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":46}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":11}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":26}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":33}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":41}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":25}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":31}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":37}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":48}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":8}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":0}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":11}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":15}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":26}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":28}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":31}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":9}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":16}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":17}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":15}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":28}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":29}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":9}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":45}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":17}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":12}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":10}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":8}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":11}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":0}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":24}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":53}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":48}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":49}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":51}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":112}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":92}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":85}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":0}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":27}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":60}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":2}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":0}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":26}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":24}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":38}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":0}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":59}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":31}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":45}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":0}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":38}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":44}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":31}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":26}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":12}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":145}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":5}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":3}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":13}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":2}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":0}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":22}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":67}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":17}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":1}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":0}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":32}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":49}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":31}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":33}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":20}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":29}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":10}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":26}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":43}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":20}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":27}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":10}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":23}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":3}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":1}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":0}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":84}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":27}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":45}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":106}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":1}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":0}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":51}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":27}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":45}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":87}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":1}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":0}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":29}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":86}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":31}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":98}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":39}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":10}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":3}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":112}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":1}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":0}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":30}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":18}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":11}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":26}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":20}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":13}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":20}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":18}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":14}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":28}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":21}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":3}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":1}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":0}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":26}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":27}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":45}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":165}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":67}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":1}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":0}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":31}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":64}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":29}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":42}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":27}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":3}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":1}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":0}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":17}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":17}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":2}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":0}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":58}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":6}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":24}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":15}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":43}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":17}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":25}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":21}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":5}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":3}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":1}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":0}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":76}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":54}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":10}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":13}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":17}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":17}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":21}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":33}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":37}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":41}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":41}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":31}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":35}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":23}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":37}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":33}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":3}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":1}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":9}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":0}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":14}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":7}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":12}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":32}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":19}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":1}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":0}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":19}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":13}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":1}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":0}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":18}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":19}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":19}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":16}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":25}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":1}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":0}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":19}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":14}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":20}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":20}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":1}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":0}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":14}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":17}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":24}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":1}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":239,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":239,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":239,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":239,"column":8}},"line":1}},"f":{"0":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipeCard.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipeCard.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":27}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":7}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":10}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":58}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":49}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":7}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":10}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":14}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":26}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":7}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":8}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":27}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":23}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":8}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":8}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":11}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":0}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":24}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":47}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":66}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":0}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":41}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":75}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":9}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":0}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":14}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":14}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":16}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":22}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":33}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":19}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":19}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":12}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":1}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":0}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":16}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":17}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":20}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":1}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":0}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":8}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":17}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":13}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":14}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":20}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":1}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":0}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":14}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":10}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":15}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":1}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":53,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":53,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":53,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":53,"column":8}},"line":1}},"f":{"0":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":6}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":29}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":26}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":3}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":10}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":26}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":17}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":36}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":27}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":23}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":5}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":7}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":28}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":22}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":5}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":38}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":11}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":35}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":26}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":24}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":43}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":9}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":42}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":13}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":11}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":41}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":23}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":9}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":17}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":29}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":35}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":41}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":11}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":16}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":19}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":17}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":29}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":35}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":41}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":11}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":16}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":19}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":13}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":17}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":9}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":14}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":21}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":7}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":24}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":11}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":9}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":8}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":11}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":0}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":24}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":59}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":39}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":44}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":49}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":59}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":41}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":0}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":69}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":33}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":2}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":70}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":0}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":59}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":26}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":48}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":4}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":0}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":26}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":19}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":150}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":21}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":42}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":12}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":50}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":30}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":30}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":32}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":5}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":4}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":14}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":1}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":97}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":0}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":59}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":0}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":59}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":0}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":6}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":13}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":15}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":18}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":24}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":46}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":12}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":5}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":44}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":35}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":40}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":16}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":7}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":11}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":3}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":1}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":0}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":25}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":7}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":39}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":11}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":73}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":11}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":103}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":25}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":3}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":1}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":0}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":27}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":31}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":7}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":24}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":11}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":107}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":25}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":3}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":1}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":0}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":27}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":31}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":7}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":24}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":11}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":111}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":25}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":3}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":1}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":0}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":46}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":65}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":1}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":0}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":43}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":31}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":23}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":20}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":1}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":0}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":18}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":23}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":9}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":1}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":0}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":23}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":51}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":9}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":1}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":0}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":23}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":42}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":2}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":9}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":0}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":14}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":20}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":21}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":1}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":0}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":26}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":26}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":15}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":25}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":21}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":18}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":16}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":1}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":0}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":30}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":21}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":12}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":14}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":15}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":25}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":25}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":43}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":16}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":0}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":24}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":12}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":13}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":19}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":21}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":1}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":0}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":33}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":15}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":18}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":32}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":1}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":0}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":44}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":22}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":1}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":0}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":39}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":25}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":1}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":0}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":37}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":16}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":33}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":11}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":1}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":0}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":41}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":13}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":1}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":0}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":37}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":15}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":14}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":1}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":227,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":227,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":227,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":227,"column":8}},"line":1}},"f":{"0":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipesPage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipesPage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":7}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":22}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":42}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":37}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":6}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":16}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":28}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":24}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":26}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":6}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":8}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":11}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":24}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":38}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":52}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":51}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":44}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":0}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":80}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":0}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":26}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":48}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":33}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":1}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":0}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":24}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":29}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":1}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":9}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":31,"column":9}},"locations":[{"start":{"line":1,"column":0},"end":{"line":31,"column":9}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":31,"column":9}},"loc":{"start":{"line":1,"column":0},"end":{"line":31,"column":9}},"line":1}},"f":{"0":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":29}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":25}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":22}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":28}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":27}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":33}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":37}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":4}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":33}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":7}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":44}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":28}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":24}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":46}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":34}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":5}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":62}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":9}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":7}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":49}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":31}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":8}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":0}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":32}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":52}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":11}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":31}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":36}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":5}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":24}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":13}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":11}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":12}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":35}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":5}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":24}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":13}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":0}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":64}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":30}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":26}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":32}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":31}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":37}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":41}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":8}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":0}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":30}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":37}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":11}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":45}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":31}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":9}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":65}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":13}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":11}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":10}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":8}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":0}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":6}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":26}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":18}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":3}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":6}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":8}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":0}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":147}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":6}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":26}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":26}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":3}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":36}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":64}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":8}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":14}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":41}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":8}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":0}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":30}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":33}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":35}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":13}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":15}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":0}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":37}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":37}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":17}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":15}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":0}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":37}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":34}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":14}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":15}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":10}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":8}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":11}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":0}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":24}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":50}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":38}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":49}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":55}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":44}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":54}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":43}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":55}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":53}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":0}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":82}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":86}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":75}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":0}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":26}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":38}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":119}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":0}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":23}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":15}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":21}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":28}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":0}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":41}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":86}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":37}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":33}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":32}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":0}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":45}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":37}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":70}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":88}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":14}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":1}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":0}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":103}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":99}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":94}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":39}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":85}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":60}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":39}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":37}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":4}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":29}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":33}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":130}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":2}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":129}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":0}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":27}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":56}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":53}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":1}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":0}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":51}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":28}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":18}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":1}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":0}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":53}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":30}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":18}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":1}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":0}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":28}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":57}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":16}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":63}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":10}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":3}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":21}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":18}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":1}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":0}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":32}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":59}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":34}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":64}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":10}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":3}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":21}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":41}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":1}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":0}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":36}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":69}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":45}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":38}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":1}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":0}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":34}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":57}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":1}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":0}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":33}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":62}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":53}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":35}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":1}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":0}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":35}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":67}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":46}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":15}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":1}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":0}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":23}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":9}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":0}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":14}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":21}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":13}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":1}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":0}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":24}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":24}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":0}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":26}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":23}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":21}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":1}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":0}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":35}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":18}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":26}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":1}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":0}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":33}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":28}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":21}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":1}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":0}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":17}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":18}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":12}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":10}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":11}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":15}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":28}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":29}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":1}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":0}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":19}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":12}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":19}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":21}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":1}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":0}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":15}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":61}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":16}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":1}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":0}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":22}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":10}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":15}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":25}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":23}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":28}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":18}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":1}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":0}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":12}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":13}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":14}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":1}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":0}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":9}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":15}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":1}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":275,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":275,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":275,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":275,"column":8}},"line":1}},"f":{"0":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MealSelectionList.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MealSelectionList.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":6}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":7}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":27}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":20}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":5}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":78}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":83}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":12}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":23}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":34}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":30}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":34}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":7}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":12}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":30}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":38}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":7}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":44}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":14}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":9}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":7}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":11}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":24}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":42}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":0}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":116}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":107}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":0}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":97}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":26}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":47}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":49}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":4}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":28}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":34}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":19}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":11}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":17}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":11}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":17}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":11}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":17}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":12}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":17}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":3}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":1}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":0}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":0}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":43}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":22}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":28}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":86}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":1}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":0}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":39}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":63}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":21}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":36}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":39}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":43}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":22}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":7}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":5}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":3}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":0}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":61}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":30}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":53}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":34}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":40}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":40}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":5}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":3}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":13}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":1}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":0}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":45}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":31}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":28}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":21}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":10}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":162}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":3}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":1}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":0}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":41}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":29}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":62}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":36}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":55}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":19}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":49}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":36}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":1}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":0}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":39}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":52}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":1}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":9}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":0}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":14}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":4}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":13}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":1}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":0}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":4}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":24}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":24}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":25}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":23}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":21}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":16}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":19}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":21}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":1}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":0}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":71}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":24}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":16}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":1}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":0}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":7}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":24}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":23}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":54}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":45}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":32}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":23}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":12}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":22}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":18}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":17}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":1}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":0}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":40}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":28}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":30}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":1}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":0}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":41}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":22}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":1}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":0}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":56}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":13}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":14}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":15}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":20}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":1}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":0}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":49}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":7}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":16}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":26}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":22}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":20}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":20}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":1}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":163,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":163,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":163,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":163,"column":8}},"line":1}},"f":{"0":0}} -,"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":7}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":29}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":43}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":24}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":18}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":31}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":32}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":29}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":35}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":46}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":29}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":6}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":8}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":6}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":19}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":40}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":32}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":45}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":44}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":31}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":64}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":69}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":50}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":84}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":54}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":19}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":18}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":19}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":22}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":34}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":30}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":46}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":51}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":25}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":61}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":7}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":11}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":0}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":24}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":40}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":38}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":47}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":55}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":48}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":92}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":0}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":26}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":30}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":63}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":0}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":63}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":41}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":0}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":49}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":103}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":59}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":1}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":0}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":26}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":23}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":95}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":25}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":3}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":1}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":0}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":51}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":71}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":1}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":0}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":81}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":108}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":1}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":0}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":51}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":43}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":71}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":1}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":0}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":27}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":28}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":47}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":18}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":28}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":2}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":9}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":0}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":22}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":90,"column":22}},"locations":[{"start":{"line":1,"column":0},"end":{"line":90,"column":22}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":90,"column":22}},"loc":{"start":{"line":1,"column":0},"end":{"line":90,"column":22}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":7}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":29}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":43}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":24}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":18}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":31}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":32}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":29}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":35}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":46}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":29}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":6}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":8}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":6}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":19}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":40}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":32}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":45}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":44}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":31}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":64}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":69}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":50}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":84}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":54}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":19}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":18}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":19}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":22}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":34}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":30}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":46}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":51}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":25}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":61}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":7}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":11}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":0}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":24}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":40}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":38}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":47}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":55}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":48}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":92}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":0}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":26}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":30}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":63}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":0}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":41}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":0}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":49}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":103}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":59}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":1}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":0}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":26}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":23}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":95}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":25}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":3}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":1}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":0}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":51}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":71}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":1}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":0}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":81}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":108}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":1}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":0}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":51}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":43}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":71}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":1}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":0}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":27}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":28}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":47}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":28}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":2}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":9}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":0}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":22}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":88,"column":22}},"locations":[{"start":{"line":1,"column":0},"end":{"line":88,"column":22}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":88,"column":22}},"loc":{"start":{"line":1,"column":0},"end":{"line":88,"column":22}},"line":1}},"f":{"0":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":89}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":39}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":27}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":24}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":30}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":28}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":6}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":8}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":0}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":33}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":7}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":35}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":27}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":5}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":66}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":9}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":7}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":11}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":0}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":24}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":50}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":37}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":35}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":55}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":47}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":54}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":42}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":55}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":57}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":0}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":24}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":64}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":84}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":82}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":75}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":0}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":27}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":42}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":20}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":50}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":3}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":2}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":0}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":33}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":62}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":53}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":35}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":1}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":9}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":0}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":14}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":24}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":24}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":0}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":25}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":23}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":21}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":1}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":0}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":21}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":13}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":1}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":67,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":67,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":67,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":67,"column":8}},"line":1}},"f":{"0":0}} -,"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":129}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":8}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":21}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":27}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":5}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":33}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":25}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":16}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":12}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":98}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":55}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":56}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":118}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":15}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":15}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":61}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":24}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":11}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":40}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":83}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":17}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":15}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":39}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":40}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":56}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":16}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":11}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":8}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":34}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":23}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":7}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":31}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":13}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":45}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":26}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":9}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":42}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":37}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":98}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":36}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":17}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":42}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":97}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":65}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":32}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":28}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":15}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":62}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":40}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":73}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":34}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":32}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":33}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":18}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":20}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":28}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":17}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":40}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":44}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":62}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":40}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":73}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":34}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":32}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":33}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":18}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":20}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":28}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":17}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":15}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":10}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":37}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":53}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":13}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":46}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":26}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":9}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":42}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":37}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":98}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":36}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":17}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":42}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":97}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":65}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":32}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":28}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":15}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":68}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":40}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":73}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":34}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":32}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":33}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":18}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":20}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":28}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":17}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":40}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":44}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":61}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":39}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":73}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":34}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":32}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":33}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":18}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":20}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":28}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":17}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":15}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":10}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":10}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":8}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":11}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":0}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":24}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":30}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":35}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":41}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":54}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":0}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":61}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":0}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":87}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":33}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":55}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":71}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":3}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":20}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":2}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":0}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":46}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":18}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":66}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":41}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":52}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":7}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":3}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":1}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":0}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":109}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":0}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":109}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":0}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":38}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":100}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":46}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":63}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":90}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":73}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":10}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":2}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":0}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":45}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":22}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":18}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":1}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":0}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":43}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":36}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":47}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":43}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":28}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":1}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":9}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":0}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":14}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":85}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":0}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":21}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":21}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":16}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":33}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":22}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":15}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":1}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":0}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":16}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":17}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":18}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":20}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":1}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":0}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":18}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":15}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":19}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":1}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":0}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":9}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":12}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":1}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":0}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":15}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":14}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":21}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":24}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":20}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":21}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":22}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":0}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":21}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":22}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":21}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":15}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":20}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":16}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":1}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":0}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":21}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":26}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":1}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":0}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":23}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":34}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":1}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":219,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":219,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":219,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":219,"column":8}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue": {"path":"/home/jables/source/doof/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":129}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":8}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":21}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":27}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":5}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":33}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":25}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":16}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":12}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":98}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":55}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":56}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":118}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":15}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":15}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":61}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":24}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":11}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":40}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":83}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":17}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":15}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":39}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":40}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":56}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":16}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":11}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":8}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":34}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":23}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":7}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":31}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":13}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":45}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":26}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":9}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":42}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":98}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":75}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":94}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":17}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":63}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":97}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":65}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":32}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":28}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":15}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":62}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":40}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":73}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":34}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":32}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":33}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":18}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":20}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":28}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":17}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":61}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":44}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":62}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":40}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":73}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":34}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":32}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":33}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":18}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":20}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":28}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":17}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":15}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":10}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":37}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":53}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":13}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":46}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":26}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":9}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":42}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":98}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":75}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":94}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":17}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":63}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":97}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":65}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":32}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":28}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":15}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":68}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":40}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":73}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":34}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":32}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":33}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":18}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":20}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":28}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":17}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":61}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":44}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":61}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":39}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":73}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":34}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":32}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":33}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":18}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":20}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":28}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":17}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":15}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":10}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":10}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":8}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":11}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":0}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":24}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":30}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":35}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":41}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":54}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":0}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":61}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":0}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":87}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":33}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":55}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":71}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":3}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":20}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":2}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":0}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":46}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":18}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":49}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":42}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":23}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":57}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":44}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":55}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":9}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":3}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":1}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":0}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":109}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":0}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":109}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":0}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":38}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":100}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":46}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":63}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":90}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":73}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":10}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":2}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":0}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":45}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":22}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":18}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":1}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":0}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":43}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":36}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":47}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":43}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":28}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":1}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":9}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":0}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":14}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":85}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":0}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":21}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":21}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":16}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":33}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":22}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":15}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":1}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":0}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":16}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":17}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":18}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":20}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":1}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":0}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":18}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":15}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":19}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":1}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":0}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":9}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":12}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":1}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":0}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":15}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":14}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":21}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":24}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":20}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":21}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":22}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":0}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":21}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":22}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":21}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":15}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":20}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":16}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":1}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":0}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":21}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":26}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":1}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":0}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":23}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":34}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":1}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":8}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":222,"column":8}},"locations":[{"start":{"line":1,"column":0},"end":{"line":222,"column":8}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":222,"column":8}},"loc":{"start":{"line":1,"column":0},"end":{"line":222,"column":8}},"line":1}},"f":{"0":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/composables/useAlert.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/composables/useAlert.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":25}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":0}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":45}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":81}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":45}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":66}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":58}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":0}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":38}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":49}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":1}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":0}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":18}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":22}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":1}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":0}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":41}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":40}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":28}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":32}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":11}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":20}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":8}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":1}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":0}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":28}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":54}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":1}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":2,"10":2,"11":2,"12":1,"13":2,"14":2,"15":2,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":2,"28":2},"branchMap":{"0":{"type":"branch","line":10,"loc":{"start":{"line":10,"column":0},"end":{"line":12,"column":1}},"locations":[{"start":{"line":10,"column":0},"end":{"line":12,"column":1}}]},"1":{"type":"branch","line":14,"loc":{"start":{"line":14,"column":0},"end":{"line":16,"column":1}},"locations":[{"start":{"line":14,"column":0},"end":{"line":16,"column":1}}]},"2":{"type":"branch","line":18,"loc":{"start":{"line":18,"column":0},"end":{"line":25,"column":1}},"locations":[{"start":{"line":18,"column":0},"end":{"line":25,"column":1}}]},"3":{"type":"branch","line":19,"loc":{"start":{"line":19,"column":17},"end":{"line":19,"column":40}},"locations":[{"start":{"line":19,"column":17},"end":{"line":19,"column":40}}]},"4":{"type":"branch","line":20,"loc":{"start":{"line":20,"column":22},"end":{"line":20,"column":28}},"locations":[{"start":{"line":20,"column":22},"end":{"line":20,"column":28}}]},"5":{"type":"branch","line":21,"loc":{"start":{"line":21,"column":25},"end":{"line":24,"column":5}},"locations":[{"start":{"line":21,"column":25},"end":{"line":24,"column":5}}]},"6":{"type":"branch","line":27,"loc":{"start":{"line":27,"column":7},"end":{"line":29,"column":1}},"locations":[{"start":{"line":27,"column":7},"end":{"line":29,"column":1}}]}},"b":{"0":[2],"1":[2],"2":[1],"3":[0],"4":[0],"5":[1],"6":[2]},"fnMap":{"0":{"name":"show","decl":{"start":{"line":10,"column":0},"end":{"line":12,"column":1}},"loc":{"start":{"line":10,"column":0},"end":{"line":12,"column":1}},"line":10},"1":{"name":"clear","decl":{"start":{"line":14,"column":0},"end":{"line":16,"column":1}},"loc":{"start":{"line":14,"column":0},"end":{"line":16,"column":1}},"line":14},"2":{"name":"scheduleAutoDismiss","decl":{"start":{"line":18,"column":0},"end":{"line":25,"column":1}},"loc":{"start":{"line":18,"column":0},"end":{"line":25,"column":1}},"line":18},"3":{"name":"useAlert","decl":{"start":{"line":27,"column":7},"end":{"line":29,"column":1}},"loc":{"start":{"line":27,"column":7},"end":{"line":29,"column":1}},"line":27}},"f":{"0":2,"1":2,"2":1,"3":2}} ,"/home/jables/source/doof/munch-ease-frontend/src/composables/useAuth.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/composables/useAuth.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":25}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":77}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":44}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":37}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":23}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":34}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":21}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":39}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":22}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":3}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":19}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":1}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":47}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":39}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":19}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":1}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":0}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":27}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":34}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":535},"end":{"line":23,"column":1}},"locations":[{"start":{"line":1,"column":535},"end":{"line":23,"column":1}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":535},"end":{"line":23,"column":1}},"loc":{"start":{"line":1,"column":535},"end":{"line":23,"column":1}},"line":1}},"f":{"0":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/composables/usePagination.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/composables/usePagination.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":64}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":47}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":93}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":69}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":33}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":28}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":33}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":4}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":17}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":26}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":26}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":27}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":23}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":21}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":50}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":31}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":31}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":19}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":3}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":47}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":30}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":3}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":43}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":59}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":59}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":60}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":51}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":48}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":0}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":36}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":44}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":0}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":42}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":34}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":34}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":34}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":36}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":3}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":0}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":52}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":24}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":22}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":91}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":45}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":31}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":9}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":44}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":51}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":68}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":42}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":26}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":17}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":21}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":22}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":23}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":23}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":24}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":15}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":27}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":5}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":3}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":0}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":56}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":23}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":24}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":22}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":9}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":34}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":32}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":15}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":7}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":63}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":42}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":26}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":17}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":21}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":22}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":23}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":23}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":24}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":15}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":27}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":5}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":3}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":0}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":29}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":36}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":3}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":0}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":29}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":36}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":3}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":0}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":20}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":20}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":21}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":21}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":22}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":25}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":22}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":29}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":3}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":0}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":86}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":3038},"end":{"line":107,"column":1}},"locations":[{"start":{"line":1,"column":3038},"end":{"line":107,"column":1}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":3038},"end":{"line":107,"column":1}},"loc":{"start":{"line":1,"column":3038},"end":{"line":107,"column":1}},"line":1}},"f":{"0":0}} -,"/home/jables/source/doof/munch-ease-frontend/src/composables/useShopping.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/composables/useShopping.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":77}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":113}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":103}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":48}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":76}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":54}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":1}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":84}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":102}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":111}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":20}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":27}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":16}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":6}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":6}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":3}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":35}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":1}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":87}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":79}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":61}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":41}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":35}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":71}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":19}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":73}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":26}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":43}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":32}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":9}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":7}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":40}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":12}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":46}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":43}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":19}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":45}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":23}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":15}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":32}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":9}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":7}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":40}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":5}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":3}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":93}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":1}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":0}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":31}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":96}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":92}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":10}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":55}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":41}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":51}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":33}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":37}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":45}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":47}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":25}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":15}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":14}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":47}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":95}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":52}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":109}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":9}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":16}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":23}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":31}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":49}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":41}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":37}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":9}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":8}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":37}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":44}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":6}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":3}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":3224},"end":{"line":85,"column":1}},"locations":[{"start":{"line":1,"column":3224},"end":{"line":85,"column":1}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":3224},"end":{"line":85,"column":1}},"loc":{"start":{"line":1,"column":3224},"end":{"line":85,"column":1}},"line":1}},"f":{"0":0}} -,"/home/jables/source/doof/munch-ease-frontend/src/domain/decoders.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/domain/decoders.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":150}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":45}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":78}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":56}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":60}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":1}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":81}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":40}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":46}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":33}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":37}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":28}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":38}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":39}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":65}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":26}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":37}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":33}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":43}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":3}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":12}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":1}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":78}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":21}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":10}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":9}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":39}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":37}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":3}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":1}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":0}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":79}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":37}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":73}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":1}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":0}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":72}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":21}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":43}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":83}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":8}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":2}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":10}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":9}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":43}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":41}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":41}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":12}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":25}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":33}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":29}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":47}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":3}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":1}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":0}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":120}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":22}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":10}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":10}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":55}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":3}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":1}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":0}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":118}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":21}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":54}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":17}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":1}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":0}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":119}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":37}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":87}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":1}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":0}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":130}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":21}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":10}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":9}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":39}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":3}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":1}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":0}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":131}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":37}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":93}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":1}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":0}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":118}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":21}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":40}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":87}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":10}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":12}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":39}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":32}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":3}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":1}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":0}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":89}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":52}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":10}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":16}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":100}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":77}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":77}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":22}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":26}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":30}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":39}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":23}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":27}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":27}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":19}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":8}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":44}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":3}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":1}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":44,"5":44,"6":44,"7":1,"8":1,"9":1,"10":16,"11":16,"12":16,"13":16,"14":7,"15":7,"16":7,"17":7,"18":7,"19":7,"20":7,"21":7,"22":7,"23":7,"24":1,"25":1,"26":4,"27":4,"28":4,"29":4,"30":4,"31":4,"32":4,"33":1,"34":1,"35":0,"36":0,"37":0,"38":1,"39":1,"40":9,"41":9,"42":2,"43":7,"44":9,"45":9,"46":9,"47":9,"48":9,"49":9,"50":9,"51":9,"52":9,"53":9,"54":9,"55":9,"56":9,"57":1,"58":1,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":1,"66":1,"67":3,"68":3,"69":3,"70":3,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":3,"79":3,"80":3,"81":3,"82":3,"83":3,"84":1,"85":1,"86":12,"87":12,"88":12,"89":1,"90":1,"91":4,"92":4,"93":4,"94":4,"95":4,"96":4,"97":4,"98":4,"99":4,"100":1,"101":1,"102":1,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0},"branchMap":{"0":{"type":"branch","line":4,"loc":{"start":{"line":4,"column":7},"end":{"line":7,"column":1}},"locations":[{"start":{"line":4,"column":7},"end":{"line":7,"column":1}}]},"1":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":16},"end":{"line":5,"column":45}},"locations":[{"start":{"line":5,"column":16},"end":{"line":5,"column":45}}]},"2":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":45},"end":{"line":5,"column":56}},"locations":[{"start":{"line":5,"column":45},"end":{"line":5,"column":56}}]},"3":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":52},"end":{"line":6,"column":55}},"locations":[{"start":{"line":5,"column":52},"end":{"line":6,"column":55}}]},"4":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":52},"end":{"line":6,"column":37}},"locations":[{"start":{"line":5,"column":52},"end":{"line":6,"column":37}}]},"5":{"type":"branch","line":6,"loc":{"start":{"line":6,"column":26},"end":{"line":6,"column":55}},"locations":[{"start":{"line":6,"column":26},"end":{"line":6,"column":55}}]},"6":{"type":"branch","line":6,"loc":{"start":{"line":6,"column":51},"end":{"line":6,"column":60}},"locations":[{"start":{"line":6,"column":51},"end":{"line":6,"column":60}}]},"7":{"type":"branch","line":10,"loc":{"start":{"line":10,"column":7},"end":{"line":24,"column":1}},"locations":[{"start":{"line":10,"column":7},"end":{"line":24,"column":1}}]},"8":{"type":"branch","line":14,"loc":{"start":{"line":14,"column":12},"end":{"line":14,"column":28}},"locations":[{"start":{"line":14,"column":12},"end":{"line":14,"column":28}}]},"9":{"type":"branch","line":14,"loc":{"start":{"line":14,"column":19},"end":{"line":24,"column":1}},"locations":[{"start":{"line":14,"column":19},"end":{"line":24,"column":1}}]},"10":{"type":"branch","line":17,"loc":{"start":{"line":17,"column":57},"end":{"line":17,"column":65}},"locations":[{"start":{"line":17,"column":57},"end":{"line":17,"column":65}}]},"11":{"type":"branch","line":19,"loc":{"start":{"line":19,"column":29},"end":{"line":19,"column":37}},"locations":[{"start":{"line":19,"column":29},"end":{"line":19,"column":37}}]},"12":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":7},"end":{"line":33,"column":1}},"locations":[{"start":{"line":26,"column":7},"end":{"line":33,"column":1}}]},"13":{"type":"branch","line":27,"loc":{"start":{"line":27,"column":10},"end":{"line":27,"column":21}},"locations":[{"start":{"line":27,"column":10},"end":{"line":27,"column":21}}]},"14":{"type":"branch","line":40,"loc":{"start":{"line":40,"column":7},"end":{"line":57,"column":1}},"locations":[{"start":{"line":40,"column":7},"end":{"line":57,"column":1}}]},"15":{"type":"branch","line":41,"loc":{"start":{"line":41,"column":10},"end":{"line":41,"column":21}},"locations":[{"start":{"line":41,"column":10},"end":{"line":41,"column":21}}]},"16":{"type":"branch","line":42,"loc":{"start":{"line":42,"column":41},"end":{"line":43,"column":83}},"locations":[{"start":{"line":42,"column":41},"end":{"line":43,"column":83}}]},"17":{"type":"branch","line":43,"loc":{"start":{"line":43,"column":82},"end":{"line":44,"column":8}},"locations":[{"start":{"line":43,"column":82},"end":{"line":44,"column":8}}]},"18":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":13},"end":{"line":52,"column":25}},"locations":[{"start":{"line":52,"column":13},"end":{"line":52,"column":25}}]},"19":{"type":"branch","line":53,"loc":{"start":{"line":53,"column":17},"end":{"line":53,"column":33}},"locations":[{"start":{"line":53,"column":17},"end":{"line":53,"column":33}}]},"20":{"type":"branch","line":54,"loc":{"start":{"line":54,"column":15},"end":{"line":54,"column":29}},"locations":[{"start":{"line":54,"column":15},"end":{"line":54,"column":29}}]},"21":{"type":"branch","line":55,"loc":{"start":{"line":55,"column":24},"end":{"line":55,"column":47}},"locations":[{"start":{"line":55,"column":24},"end":{"line":55,"column":47}}]},"22":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":7},"end":{"line":71,"column":1}},"locations":[{"start":{"line":67,"column":7},"end":{"line":71,"column":1}}]},"23":{"type":"branch","line":68,"loc":{"start":{"line":68,"column":10},"end":{"line":68,"column":21}},"locations":[{"start":{"line":68,"column":10},"end":{"line":68,"column":21}}]},"24":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":7},"end":{"line":76,"column":1}},"locations":[{"start":{"line":73,"column":7},"end":{"line":76,"column":1}}]},"25":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":28},"end":{"line":74,"column":37}},"locations":[{"start":{"line":74,"column":28},"end":{"line":74,"column":37}}]},"26":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":18},"end":{"line":75,"column":44}},"locations":[{"start":{"line":75,"column":18},"end":{"line":75,"column":44}}]},"27":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":53},"end":{"line":75,"column":86}},"locations":[{"start":{"line":75,"column":53},"end":{"line":75,"column":86}}]},"28":{"type":"branch","line":78,"loc":{"start":{"line":78,"column":7},"end":{"line":84,"column":1}},"locations":[{"start":{"line":78,"column":7},"end":{"line":84,"column":1}}]},"29":{"type":"branch","line":79,"loc":{"start":{"line":79,"column":10},"end":{"line":79,"column":21}},"locations":[{"start":{"line":79,"column":10},"end":{"line":79,"column":21}}]},"30":{"type":"branch","line":86,"loc":{"start":{"line":86,"column":7},"end":{"line":89,"column":1}},"locations":[{"start":{"line":86,"column":7},"end":{"line":89,"column":1}}]},"31":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":28},"end":{"line":87,"column":37}},"locations":[{"start":{"line":87,"column":28},"end":{"line":87,"column":37}}]},"32":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":18},"end":{"line":88,"column":50}},"locations":[{"start":{"line":88,"column":18},"end":{"line":88,"column":50}}]},"33":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":59},"end":{"line":88,"column":92}},"locations":[{"start":{"line":88,"column":59},"end":{"line":88,"column":92}}]},"34":{"type":"branch","line":91,"loc":{"start":{"line":91,"column":7},"end":{"line":100,"column":1}},"locations":[{"start":{"line":91,"column":7},"end":{"line":100,"column":1}}]},"35":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":21}},"locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":21}}]},"36":{"type":"branch","line":94,"loc":{"start":{"line":94,"column":38},"end":{"line":94,"column":78}},"locations":[{"start":{"line":94,"column":38},"end":{"line":94,"column":78}}]},"37":{"type":"branch","line":94,"loc":{"start":{"line":94,"column":74},"end":{"line":94,"column":87}},"locations":[{"start":{"line":94,"column":74},"end":{"line":94,"column":87}}]},"38":{"type":"branch","line":98,"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":28}},"locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":28}}]},"39":{"type":"branch","line":98,"loc":{"start":{"line":98,"column":24},"end":{"line":98,"column":32}},"locations":[{"start":{"line":98,"column":24},"end":{"line":98,"column":32}}]}},"b":{"0":[44],"1":[43],"2":[29],"3":[26],"4":[15],"5":[14],"6":[1],"7":[16],"8":[9],"9":[7],"10":[0],"11":[0],"12":[4],"13":[0],"14":[9],"15":[0],"16":[2],"17":[7],"18":[7],"19":[7],"20":[7],"21":[7],"22":[3],"23":[0],"24":[1],"25":[0],"26":[1],"27":[1],"28":[3],"29":[0],"30":[12],"31":[0],"32":[3],"33":[3],"34":[4],"35":[0],"36":[3],"37":[1],"38":[3],"39":[1]},"fnMap":{"0":{"name":"toDate","decl":{"start":{"line":4,"column":7},"end":{"line":7,"column":1}},"loc":{"start":{"line":4,"column":7},"end":{"line":7,"column":1}},"line":4},"1":{"name":"decodeLookup","decl":{"start":{"line":10,"column":7},"end":{"line":24,"column":1}},"loc":{"start":{"line":10,"column":7},"end":{"line":24,"column":1}},"line":10},"2":{"name":"decodeRecipe","decl":{"start":{"line":26,"column":7},"end":{"line":33,"column":1}},"loc":{"start":{"line":26,"column":7},"end":{"line":33,"column":1}},"line":26},"3":{"name":"decodeRecipes","decl":{"start":{"line":35,"column":7},"end":{"line":38,"column":1}},"loc":{"start":{"line":35,"column":7},"end":{"line":38,"column":1}},"line":35},"4":{"name":"decodeMeal","decl":{"start":{"line":40,"column":7},"end":{"line":57,"column":1}},"loc":{"start":{"line":40,"column":7},"end":{"line":57,"column":1}},"line":40},"5":{"name":"decodeMealRecipe","decl":{"start":{"line":59,"column":7},"end":{"line":65,"column":1}},"loc":{"start":{"line":59,"column":7},"end":{"line":65,"column":1}},"line":59},"6":{"name":"decodeIngredient","decl":{"start":{"line":67,"column":7},"end":{"line":71,"column":1}},"loc":{"start":{"line":67,"column":7},"end":{"line":71,"column":1}},"line":67},"7":{"name":"decodeIngredients","decl":{"start":{"line":73,"column":7},"end":{"line":76,"column":1}},"loc":{"start":{"line":73,"column":7},"end":{"line":76,"column":1}},"line":73},"8":{"name":"decodeShoppingListItem","decl":{"start":{"line":78,"column":7},"end":{"line":84,"column":1}},"loc":{"start":{"line":78,"column":7},"end":{"line":84,"column":1}},"line":78},"9":{"name":"decodeShoppingListItems","decl":{"start":{"line":86,"column":7},"end":{"line":89,"column":1}},"loc":{"start":{"line":86,"column":7},"end":{"line":89,"column":1}},"line":86},"10":{"name":"decodeShoppingList","decl":{"start":{"line":91,"column":7},"end":{"line":100,"column":1}},"loc":{"start":{"line":91,"column":7},"end":{"line":100,"column":1}},"line":91},"11":{"name":"toMealInput","decl":{"start":{"line":103,"column":7},"end":{"line":120,"column":1}},"loc":{"start":{"line":103,"column":7},"end":{"line":120,"column":1}},"line":103}},"f":{"0":44,"1":16,"2":4,"3":0,"4":9,"5":0,"6":3,"7":1,"8":3,"9":12,"10":4,"11":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/composables/useShopping.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/composables/useShopping.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":77}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":113}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":103}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":48}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":76}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":54}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":1}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":84}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":102}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":111}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":20}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":27}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":16}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":6}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":6}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":3}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":35}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":1}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":87}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":79}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":61}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":41}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":35}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":71}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":19}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":73}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":26}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":43}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":32}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":9}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":7}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":40}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":12}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":46}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":43}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":19}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":45}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":23}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":15}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":32}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":9}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":7}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":40}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":5}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":3}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":93}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":1}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":0}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":31}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":96}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":92}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":10}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":55}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":41}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":51}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":33}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":37}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":45}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":47}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":25}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":15}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":14}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":47}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":75}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":52}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":109}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":9}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":16}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":23}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":31}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":49}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":41}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":37}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":9}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":8}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":37}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":44}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":6}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":3}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":3204},"end":{"line":85,"column":1}},"locations":[{"start":{"line":1,"column":3204},"end":{"line":85,"column":1}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":3204},"end":{"line":85,"column":1}},"loc":{"start":{"line":1,"column":3204},"end":{"line":85,"column":1}},"line":1}},"f":{"0":0}} +,"/home/jables/source/doof/munch-ease-frontend/src/domain/decoders.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/domain/decoders.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":176}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":45}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":78}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":56}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":60}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":1}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":81}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":40}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":46}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":26}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":37}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":28}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":38}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":39}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":65}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":26}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":37}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":33}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":30}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":3}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":12}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":1}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":71}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":51}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":10}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":9}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":39}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":37}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":3}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":1}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":0}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":65}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":49}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":42}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":49}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":8}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":2}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":10}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":9}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":43}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":41}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":41}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":12}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":25}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":33}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":29}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":47}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":3}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":1}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":0}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":106}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":57}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":10}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":10}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":55}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":3}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":1}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":0}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":111}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":55}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":54}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":17}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":1}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":0}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":119}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":37}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":45}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":1}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":0}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":116}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":63}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":10}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":9}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":39}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":3}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":1}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":0}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":139}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":37}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":83}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":64}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":1}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":0}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":111}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":58}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":40}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":87}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":10}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":12}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":39}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":32}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":3}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":1}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":0}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":89}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":52}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":10}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":16}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":100}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":77}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":77}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":22}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":26}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":30}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":39}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":23}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":27}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":27}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":19}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":8}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":44}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":3}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":1}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":44,"5":44,"6":44,"7":1,"8":1,"9":1,"10":16,"11":16,"12":16,"13":16,"14":7,"15":7,"16":7,"17":7,"18":7,"19":7,"20":7,"21":7,"22":7,"23":7,"24":1,"25":1,"26":4,"27":4,"28":4,"29":4,"30":4,"31":4,"32":4,"33":1,"34":1,"35":9,"36":9,"37":2,"38":7,"39":9,"40":9,"41":9,"42":9,"43":9,"44":9,"45":9,"46":9,"47":9,"48":9,"49":9,"50":9,"51":9,"52":1,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":1,"62":3,"63":3,"64":3,"65":3,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":3,"73":3,"74":3,"75":3,"76":3,"77":3,"78":3,"79":1,"80":1,"81":12,"82":12,"83":12,"84":12,"85":1,"86":1,"87":4,"88":4,"89":4,"90":4,"91":4,"92":4,"93":4,"94":4,"95":4,"96":1,"97":1,"98":1,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0},"branchMap":{"0":{"type":"branch","line":4,"loc":{"start":{"line":4,"column":7},"end":{"line":7,"column":1}},"locations":[{"start":{"line":4,"column":7},"end":{"line":7,"column":1}}]},"1":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":16},"end":{"line":5,"column":45}},"locations":[{"start":{"line":5,"column":16},"end":{"line":5,"column":45}}]},"2":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":45},"end":{"line":5,"column":56}},"locations":[{"start":{"line":5,"column":45},"end":{"line":5,"column":56}}]},"3":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":52},"end":{"line":6,"column":55}},"locations":[{"start":{"line":5,"column":52},"end":{"line":6,"column":55}}]},"4":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":52},"end":{"line":6,"column":37}},"locations":[{"start":{"line":5,"column":52},"end":{"line":6,"column":37}}]},"5":{"type":"branch","line":6,"loc":{"start":{"line":6,"column":26},"end":{"line":6,"column":55}},"locations":[{"start":{"line":6,"column":26},"end":{"line":6,"column":55}}]},"6":{"type":"branch","line":6,"loc":{"start":{"line":6,"column":51},"end":{"line":6,"column":60}},"locations":[{"start":{"line":6,"column":51},"end":{"line":6,"column":60}}]},"7":{"type":"branch","line":10,"loc":{"start":{"line":10,"column":7},"end":{"line":24,"column":1}},"locations":[{"start":{"line":10,"column":7},"end":{"line":24,"column":1}}]},"8":{"type":"branch","line":14,"loc":{"start":{"line":14,"column":12},"end":{"line":14,"column":28}},"locations":[{"start":{"line":14,"column":12},"end":{"line":14,"column":28}}]},"9":{"type":"branch","line":14,"loc":{"start":{"line":14,"column":19},"end":{"line":24,"column":1}},"locations":[{"start":{"line":14,"column":19},"end":{"line":24,"column":1}}]},"10":{"type":"branch","line":17,"loc":{"start":{"line":17,"column":57},"end":{"line":17,"column":65}},"locations":[{"start":{"line":17,"column":57},"end":{"line":17,"column":65}}]},"11":{"type":"branch","line":19,"loc":{"start":{"line":19,"column":29},"end":{"line":19,"column":37}},"locations":[{"start":{"line":19,"column":29},"end":{"line":19,"column":37}}]},"12":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":7},"end":{"line":33,"column":1}},"locations":[{"start":{"line":26,"column":7},"end":{"line":33,"column":1}}]},"13":{"type":"branch","line":27,"loc":{"start":{"line":27,"column":10},"end":{"line":27,"column":51}},"locations":[{"start":{"line":27,"column":10},"end":{"line":27,"column":51}}]},"14":{"type":"branch","line":35,"loc":{"start":{"line":35,"column":7},"end":{"line":52,"column":1}},"locations":[{"start":{"line":35,"column":7},"end":{"line":52,"column":1}}]},"15":{"type":"branch","line":36,"loc":{"start":{"line":36,"column":10},"end":{"line":36,"column":49}},"locations":[{"start":{"line":36,"column":10},"end":{"line":36,"column":49}}]},"16":{"type":"branch","line":37,"loc":{"start":{"line":37,"column":41},"end":{"line":38,"column":49}},"locations":[{"start":{"line":37,"column":41},"end":{"line":38,"column":49}}]},"17":{"type":"branch","line":38,"loc":{"start":{"line":38,"column":48},"end":{"line":39,"column":8}},"locations":[{"start":{"line":38,"column":48},"end":{"line":39,"column":8}}]},"18":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":13},"end":{"line":47,"column":25}},"locations":[{"start":{"line":47,"column":13},"end":{"line":47,"column":25}}]},"19":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":17},"end":{"line":48,"column":33}},"locations":[{"start":{"line":48,"column":17},"end":{"line":48,"column":33}}]},"20":{"type":"branch","line":49,"loc":{"start":{"line":49,"column":15},"end":{"line":49,"column":29}},"locations":[{"start":{"line":49,"column":15},"end":{"line":49,"column":29}}]},"21":{"type":"branch","line":50,"loc":{"start":{"line":50,"column":24},"end":{"line":50,"column":47}},"locations":[{"start":{"line":50,"column":24},"end":{"line":50,"column":47}}]},"22":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":7},"end":{"line":66,"column":1}},"locations":[{"start":{"line":62,"column":7},"end":{"line":66,"column":1}}]},"23":{"type":"branch","line":63,"loc":{"start":{"line":63,"column":10},"end":{"line":63,"column":55}},"locations":[{"start":{"line":63,"column":10},"end":{"line":63,"column":55}}]},"24":{"type":"branch","line":68,"loc":{"start":{"line":68,"column":7},"end":{"line":71,"column":1}},"locations":[{"start":{"line":68,"column":7},"end":{"line":71,"column":1}}]},"25":{"type":"branch","line":69,"loc":{"start":{"line":69,"column":28},"end":{"line":69,"column":37}},"locations":[{"start":{"line":69,"column":28},"end":{"line":69,"column":37}}]},"26":{"type":"branch","line":70,"loc":{"start":{"line":70,"column":18},"end":{"line":70,"column":44}},"locations":[{"start":{"line":70,"column":18},"end":{"line":70,"column":44}}]},"27":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":0},"end":{"line":79,"column":1}},"locations":[{"start":{"line":73,"column":0},"end":{"line":79,"column":1}}]},"28":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":10},"end":{"line":74,"column":63}},"locations":[{"start":{"line":74,"column":10},"end":{"line":74,"column":63}}]},"29":{"type":"branch","line":81,"loc":{"start":{"line":81,"column":7},"end":{"line":85,"column":1}},"locations":[{"start":{"line":81,"column":7},"end":{"line":85,"column":1}}]},"30":{"type":"branch","line":82,"loc":{"start":{"line":82,"column":28},"end":{"line":82,"column":37}},"locations":[{"start":{"line":82,"column":28},"end":{"line":82,"column":37}}]},"31":{"type":"branch","line":84,"loc":{"start":{"line":84,"column":18},"end":{"line":84,"column":63}},"locations":[{"start":{"line":84,"column":18},"end":{"line":84,"column":63}}]},"32":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":7},"end":{"line":96,"column":1}},"locations":[{"start":{"line":87,"column":7},"end":{"line":96,"column":1}}]},"33":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":10},"end":{"line":88,"column":58}},"locations":[{"start":{"line":88,"column":10},"end":{"line":88,"column":58}}]},"34":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":38},"end":{"line":90,"column":78}},"locations":[{"start":{"line":90,"column":38},"end":{"line":90,"column":78}}]},"35":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":74},"end":{"line":90,"column":87}},"locations":[{"start":{"line":90,"column":74},"end":{"line":90,"column":87}}]},"36":{"type":"branch","line":94,"loc":{"start":{"line":94,"column":8},"end":{"line":94,"column":28}},"locations":[{"start":{"line":94,"column":8},"end":{"line":94,"column":28}}]},"37":{"type":"branch","line":94,"loc":{"start":{"line":94,"column":24},"end":{"line":94,"column":32}},"locations":[{"start":{"line":94,"column":24},"end":{"line":94,"column":32}}]}},"b":{"0":[44],"1":[43],"2":[29],"3":[26],"4":[15],"5":[14],"6":[1],"7":[16],"8":[9],"9":[7],"10":[0],"11":[0],"12":[4],"13":[0],"14":[9],"15":[0],"16":[2],"17":[7],"18":[7],"19":[7],"20":[7],"21":[7],"22":[3],"23":[0],"24":[1],"25":[0],"26":[1],"27":[3],"28":[0],"29":[12],"30":[0],"31":[3],"32":[4],"33":[0],"34":[3],"35":[1],"36":[3],"37":[1]},"fnMap":{"0":{"name":"toDate","decl":{"start":{"line":4,"column":7},"end":{"line":7,"column":1}},"loc":{"start":{"line":4,"column":7},"end":{"line":7,"column":1}},"line":4},"1":{"name":"decodeLookup","decl":{"start":{"line":10,"column":7},"end":{"line":24,"column":1}},"loc":{"start":{"line":10,"column":7},"end":{"line":24,"column":1}},"line":10},"2":{"name":"decodeRecipe","decl":{"start":{"line":26,"column":7},"end":{"line":33,"column":1}},"loc":{"start":{"line":26,"column":7},"end":{"line":33,"column":1}},"line":26},"3":{"name":"decodeMeal","decl":{"start":{"line":35,"column":7},"end":{"line":52,"column":1}},"loc":{"start":{"line":35,"column":7},"end":{"line":52,"column":1}},"line":35},"4":{"name":"decodeMealRecipe","decl":{"start":{"line":54,"column":0},"end":{"line":60,"column":1}},"loc":{"start":{"line":54,"column":0},"end":{"line":60,"column":1}},"line":54},"5":{"name":"decodeIngredient","decl":{"start":{"line":62,"column":7},"end":{"line":66,"column":1}},"loc":{"start":{"line":62,"column":7},"end":{"line":66,"column":1}},"line":62},"6":{"name":"decodeIngredients","decl":{"start":{"line":68,"column":7},"end":{"line":71,"column":1}},"loc":{"start":{"line":68,"column":7},"end":{"line":71,"column":1}},"line":68},"7":{"name":"decodeShoppingListItem","decl":{"start":{"line":73,"column":0},"end":{"line":79,"column":1}},"loc":{"start":{"line":73,"column":0},"end":{"line":79,"column":1}},"line":73},"8":{"name":"decodeShoppingListItems","decl":{"start":{"line":81,"column":7},"end":{"line":85,"column":1}},"loc":{"start":{"line":81,"column":7},"end":{"line":85,"column":1}},"line":81},"9":{"name":"decodeShoppingList","decl":{"start":{"line":87,"column":7},"end":{"line":96,"column":1}},"loc":{"start":{"line":87,"column":7},"end":{"line":96,"column":1}},"line":87},"10":{"name":"toMealInput","decl":{"start":{"line":99,"column":7},"end":{"line":116,"column":1}},"loc":{"start":{"line":99,"column":7},"end":{"line":116,"column":1}},"line":99}},"f":{"0":44,"1":16,"2":4,"3":9,"4":0,"5":3,"6":1,"7":3,"8":12,"9":4,"10":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/domain/pagination.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/domain/pagination.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":103}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":0}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":113}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":123}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":33}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":10}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":53}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":34}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":34}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":30}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":3}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":1}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":2,"6":2,"7":2,"8":2,"9":2,"10":2,"11":2,"12":2},"branchMap":{"0":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":7},"end":{"line":13,"column":1}},"locations":[{"start":{"line":5,"column":7},"end":{"line":13,"column":1}}]},"1":{"type":"branch","line":6,"loc":{"start":{"line":6,"column":13},"end":{"line":6,"column":33}},"locations":[{"start":{"line":6,"column":13},"end":{"line":6,"column":33}}]},"2":{"type":"branch","line":8,"loc":{"start":{"line":8,"column":17},"end":{"line":8,"column":30}},"locations":[{"start":{"line":8,"column":17},"end":{"line":8,"column":30}}]},"3":{"type":"branch","line":8,"loc":{"start":{"line":8,"column":34},"end":{"line":8,"column":51}},"locations":[{"start":{"line":8,"column":34},"end":{"line":8,"column":51}}]}},"b":{"0":[2],"1":[0],"2":[0],"3":[2]},"fnMap":{"0":{"name":"fromOpenApiPage","decl":{"start":{"line":5,"column":7},"end":{"line":13,"column":1}},"loc":{"start":{"line":5,"column":7},"end":{"line":13,"column":1}},"line":5}},"f":{"0":2}} ,"/home/jables/source/doof/munch-ease-frontend/src/router/helpers.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/router/helpers.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":3}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":44}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":78}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":3}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":52}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":3}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":69}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":46}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":3}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":83}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":25}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":53}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":23}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":30}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":40}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":1}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":0}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":3}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":40}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":65}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":3}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":104}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":23}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":42}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":863},"end":{"line":27,"column":1}},"locations":[{"start":{"line":1,"column":863},"end":{"line":27,"column":1}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":863},"end":{"line":27,"column":1}},"loc":{"start":{"line":1,"column":863},"end":{"line":27,"column":1}},"line":1}},"f":{"0":0}} ,"/home/jables/source/doof/munch-ease-frontend/src/router/index.ts": {"path":"/home/jables/source/doof/munch-ease-frontend/src/router/index.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":71}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":48}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":31}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":60}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":72}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":72}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":79}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":101}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":97}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":72}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":78}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":0}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":91}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":36}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":50}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":60}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":99}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":5}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":24}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":23}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":32}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":35}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":6}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":5}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":32}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":31}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":41}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":35}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":6}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":5}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":28}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":28}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":43}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":18}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":35}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":6}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":96}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":5}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":27}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":25}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":32}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":35}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":6}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":5}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":27}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":26}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":32}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":18}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":35}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":6}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":100}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":5}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":25}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":24}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":30}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":18}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":35}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":6}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":3}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":0}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":31}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":36}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":11}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":4}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":0}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":35}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":42}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":9}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":41}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":27}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":17}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":18}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":5}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":62}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":4}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":0}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":15}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":79,"column":-140}},"locations":[{"start":{"line":1,"column":0},"end":{"line":79,"column":-140}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":79,"column":-140}},"loc":{"start":{"line":1,"column":0},"end":{"line":79,"column":-140}},"line":1}},"f":{"0":0}} diff --git a/coverage/index.html b/coverage/index.html index b5811b0..269c80f 100644 --- a/coverage/index.html +++ b/coverage/index.html @@ -23,30 +23,30 @@
- 13.79% + 14.11% Statements - 558/4046 + 571/4046
- 53.72% + 52.1% Branches - 101/188 + 99/190
- 48.1% + 48.71% Functions - 38/79 + 38/78
- 13.79% + 14.11% Lines - 558/4046 + 571/4046
@@ -125,17 +125,17 @@ munch-ease-frontend/src/api - -
+ +
- 76.34% - 297/389 - 57.3% - 51/89 + 77.41% + 312/403 + 54.83% + 51/93 71.42% 20/28 - 76.34% - 297/389 + 77.41% + 312/403 @@ -174,13 +174,13 @@
0% - 0/945 + 0/934 0% 0/5 0% 0/5 0% - 0/945 + 0/934 @@ -204,13 +204,13 @@
0% - 0/814 + 0/815 0% 0/5 0% 0/5 0% - 0/814 + 0/815 @@ -230,17 +230,17 @@ munch-ease-frontend/src/domain - -
+ +
- 80.45% - 107/133 - 75% - 33/44 - 76.92% - 10/13 - 80.45% - 107/133 + 81.39% + 105/129 + 73.8% + 31/42 + 83.33% + 10/12 + 81.39% + 105/129 @@ -266,7 +266,7 @@ - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/index.html b/coverage/munch-ease-frontend/index.html deleted file mode 100644 index 6f7bc0a..0000000 --- a/coverage/munch-ease-frontend/index.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend - - - - - - - - - -
-
-

All files munch-ease-frontend

-
- -
- 0% - Statements - 0/6 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/6 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
vue.config.js -
-
0%0/60%0/10%0/10%0/6
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/scripts/codegen-check.js.html b/coverage/munch-ease-frontend/scripts/codegen-check.js.html deleted file mode 100644 index 8b3accc..0000000 --- a/coverage/munch-ease-frontend/scripts/codegen-check.js.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/scripts/codegen-check.js - - - - - - - - - -
-
-

All files / munch-ease-frontend/scripts codegen-check.js

-
- -
- 0% - Statements - 0/32 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/32 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
#!/usr/bin/env node
-/**
- * Warn if backend openapi.json is newer than generated src/api/types.ts
- */
-const { statSync, existsSync } = require('fs')
-const { resolve } = require('path')
-
-const backendSpec = resolve(__dirname, '..', '..', 'munch-ease-backend', 'openapi.json')
-const generated = resolve(__dirname, '..', 'src', 'api', 'types.ts')
-
-if (!existsSync(backendSpec)) {
-  console.log('codegen-check: Skipping (backend openapi.json not found).')
-  process.exit(0)
-}
-if (!existsSync(generated)) {
-  console.log('codegen-check: src/api/types.ts not found. Run: npm run codegen')
-  process.exit(1)
-}
-
-try {
-  const specMtime = statSync(backendSpec).mtimeMs
-  const genMtime = statSync(generated).mtimeMs
-  if (specMtime > genMtime) {
-    console.log('codegen-check: OpenAPI spec is newer than generated types. Consider running: npm run codegen')
-    process.exit(2)
-  } else {
-    console.log('codegen-check: OK (generated types up to date).')
-  }
-} catch (e) {
-  console.error('codegen-check: Error reading timestamps:', e.message)
-  process.exit(3)
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/scripts/index.html b/coverage/munch-ease-frontend/scripts/index.html deleted file mode 100644 index 7fedee4..0000000 --- a/coverage/munch-ease-frontend/scripts/index.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/scripts - - - - - - - - - -
-
-

All files munch-ease-frontend/scripts

-
- -
- 0% - Statements - 0/32 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/32 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
codegen-check.js -
-
0%0/320%0/10%0/10%0/32
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/App.vue.html b/coverage/munch-ease-frontend/src/App.vue.html deleted file mode 100644 index 37a0459..0000000 --- a/coverage/munch-ease-frontend/src/App.vue.html +++ /dev/null @@ -1,379 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/App.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src App.vue

-
- -
- 0% - Statements - 0/98 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/98 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <div>
-    <ul class="nav">
-      <li class="nav-item">
-        <router-link
-          class="nav-link"
-          :to="{ name: 'recipes' }"
-          active-class="active"
-        >
-          Recipes
-        </router-link>
-      </li>
-      <li class="nav-item">
-        <router-link
-          class="nav-link"
-          :to="{ name: 'mealplan' }"
-          active-class="active"
-        >
-          Meal Plan
-        </router-link>
-      </li>
-      <li class="nav-item">
-        <router-link
-          class="nav-link"
-          :to="{ name: 'shopping' }"
-          active-class="active"
-        >
-          Shopping
-        </router-link>
-      </li>
-    </ul>
-  </div>
-  <div class="viewport">
-    <router-view />
-  </div>
-
-  <alert-toast />
-</template>
-
-<script setup>
-import AlertToast from './components/AlertToast.vue'
-
-// components in <script setup> are auto-registered by import + usage
-</script>
-
-<style>
-#app {
-  font-family: Avenir, Helvetica, Arial, sans-serif;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  text-align: center;
-  color: #2c3e50;
-  margin-top: 60px;
-}
-
-/* Make nav bar links buttons across top of screen */
-.nav {
-  position: fixed;
-  left: 0;
-  right: 0;
-  top: 0;
-  z-index: 1;
-
-  display: flex;
-  justify-content: space-around;
-  list-style-type: none;
-  margin: 0;
-  padding: 0;
-  position: fixed;
-  top: 0;
-  width: 100%;
-  background-color: #333;
-}
-
-.nav li {
-  flex: 1;
-}
-
-/* Style the links inside the navigation bar */
-.nav a {
-  display: inline-block;
-  color: #f2f2f2;
-  text-align: center;
-  padding: 14px 16px;
-  text-decoration: none;
-}
-
-/* Have active route use different color */
-.nav li:has(> a.active) {
-  background-color: #4caf50;
-  color: white;
-}
-
-.viewport {
-  max-width: 1200px;
-  margin: auto;
-}
-</style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/api/auth.ts.html b/coverage/munch-ease-frontend/src/api/auth.ts.html deleted file mode 100644 index c974963..0000000 --- a/coverage/munch-ease-frontend/src/api/auth.ts.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/api/auth.ts - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/api auth.ts

-
- -
- 0% - Statements - 0/30 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/30 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import { api } from '@/api/client'
-import type { Person } from '@/domain/types'
-
-let cachedUser: Person | null = null
-
-export async function currentUser(): Promise<Person | null> {
-  if (cachedUser) return cachedUser
-  try {
-    const res = await api.POST('/api/v1/auth/refresh', { params: { cookie: { user_id: 0 } } })
-    if (!res.response.ok) return null
-    cachedUser = res.data ?? null
-  } catch (_) {
-    cachedUser = null
-  }
-  return cachedUser
-}
-
-export async function login(username: string): Promise<Person> {
-  const res = await api.POST('/api/v1/auth/login', { body: { username } })
-  if (!res.response.ok) {
-    const err = res.error
-    throw (
-      (err instanceof Error && err) ||
-      (typeof err === 'string' ? new Error(err) : new Error(`${res.response.status} ${res.response.statusText || 'HTTP error'}`))
-    )
-  }
-  cachedUser = res.data ?? null
-  if (!cachedUser) throw new Error('Login failed: empty response')
-  return cachedUser
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/api/client.ts.html b/coverage/munch-ease-frontend/src/api/client.ts.html deleted file mode 100644 index 2c26f4a..0000000 --- a/coverage/munch-ease-frontend/src/api/client.ts.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/api/client.ts - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/api client.ts

-
- -
- 100% - Statements - 20/20 -
- - -
- 25% - Branches - 1/4 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 20/20 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -211x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -20x -20x -20x -20x -20x -1x - 
import createClient from 'openapi-fetch'
-import type { paths } from './types'
- 
-// Vue CLI uses process.env.VUE_APP_*
-const vueCliBase: string | undefined = typeof process !== 'undefined' ? (process.env?.VUE_APP_API_BASE ?? undefined) : undefined
-const isTest = typeof process !== 'undefined' && (process.env?.VITEST === 'true' || process.env?.NODE_ENV === 'test')
-// Prefer absolute http URL in tests to avoid TLS issues and ease MSW interception
-// Use host-only base URL; always pass full "/api/v1/..." paths to the client methods
-const defaultBase = ''
-const baseUrl: string = isTest ? 'http://localhost' : (vueCliBase || defaultBase)
- 
-export const api = createClient<paths>({
-  baseUrl,
-  fetch: (input: RequestInfo | URL, init?: RequestInit) => {
-    return globalThis.fetch(input, {
-      credentials: 'include',
-      ...init,
-    })
-  },
-})
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/api/index.html b/coverage/munch-ease-frontend/src/api/index.html deleted file mode 100644 index d0060fb..0000000 --- a/coverage/munch-ease-frontend/src/api/index.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/api - - - - - - - - - -
-
-

All files munch-ease-frontend/src/api

-
- -
- 77.41% - Statements - 312/403 -
- - -
- 54.83% - Branches - 51/93 -
- - -
- 71.42% - Functions - 20/28 -
- - -
- 77.41% - Lines - 312/403 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
auth.ts -
-
0%0/300%0/10%0/10%0/30
client.ts -
-
100%20/2025%1/4100%1/1100%20/20
sdk.ts -
-
82.71%292/35356.81%50/8873.07%19/2682.71%292/353
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/api/sdk.ts.html b/coverage/munch-ease-frontend/src/api/sdk.ts.html deleted file mode 100644 index ce21fda..0000000 --- a/coverage/munch-ease-frontend/src/api/sdk.ts.html +++ /dev/null @@ -1,1144 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/api/sdk.ts - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/api sdk.ts

-
- -
- 82.71% - Statements - 292/353 -
- - -
- 56.81% - Branches - 50/88 -
- - -
- 73.07% - Functions - 19/26 -
- - -
- 82.71% - Lines - 292/353 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -3541x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -6x -6x -6x -6x -6x -1x -1x -1x -1x -1x -9x -9x -9x -9x -9x -9x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -9x -1x -1x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -3x -1x -1x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -1x -1x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -1x -  -  -  -  -  -  -  -  -  -  -  -1x -2x -2x -2x -1x -1x -1x -1x -1x -  -  -  -  -  -1x -  -  -  -  -1x -2x -2x -2x -1x -1x -1x -2x -2x -2x -2x -2x -2x -2x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -3x -3x -3x -1x -1x -1x -1x -3x -3x -3x -3x -3x -1x -2x -2x -2x -1x -1x -1x -1x -1x -1x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -1x -1x -1x -1x -1x -1x -1x -1x -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -  -  -  -  -  -  -1x -1x -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -2x -2x -2x -2x -2x -2x -2x -2x -  -  -  -  -  -  -  -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -1x -2x -2x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x - 
import { api } from '@/api/client'
-import type { components } from '@/api/types'
-import { toDate, decodeMeal, decodeRecipe, decodeIngredients, decodeShoppingList, decodeShoppingListItems, decodeIngredient, decodeLookup } from '@/domain/decoders'
-import type {
-  Recipe,
-  Meal,
-  Ingredient,
-  ShoppingList,
-  ShoppingListItemWithRefs,
-  CurrentShoppingListDTO,
-  PurchasedShoppingListDTO,
-  ShoppingLookups,
-} from '@/domain/types'
-import { fromOpenApiPage, type Page } from '@/domain/pagination'
- 
-function httpError(response: Response, error: unknown): Error {
-  if (error instanceof Error) return error
-  if (typeof error === 'string') return new Error(error)
-  return new Error(`${response.status} ${response.statusText || 'HTTP error'}`)
-}
- 
-// decodeLookup moved to domain/decoders to be reused across SDK and other modules
- 
-// Shopping list mapped view types now come from domain/types
- 
-function attachItemRefs(
-  items: Array<ShoppingListItemWithRefs> | null | undefined,
-  lookups: ShoppingLookups
-): void {
-  if (!Array.isArray(items)) return
-  for (const item of items) {
-    const ingredientId = item.ingredientId ?? undefined
-    const mealId = item.mealId ?? undefined
-    const recipeId = item.recipeId ?? undefined
-    const listId = item.listId ?? undefined
-    const created = item.createdDate
- 
-    if (ingredientId !== undefined && lookups.ingredientsLookup) {
-      const v = lookups.ingredientsLookup[String(ingredientId)]
-      if (v !== undefined) item.ingredient = v
-    }
-    if (mealId !== undefined && lookups.mealsLookup) {
-      const v = lookups.mealsLookup[String(mealId)]
-      if (v !== undefined) item.meal = v
-    }
-    if (recipeId !== undefined && lookups.recipesLookup) {
-      const v = lookups.recipesLookup[String(recipeId)]
-      if (v !== undefined) item.recipe = v
-    }
-    if (listId !== undefined && lookups.shoppingListLookup) {
-      const v = lookups.shoppingListLookup[String(listId)]
-      if (v !== undefined) item.list = v
-    }
-    if (created !== undefined) item.createdDate = toDate(created)
-  }
-}
- 
-export function mapPurchasedShoppingList(dto: components['schemas']['PurchasedShoppingList'] | null | undefined): PurchasedShoppingListDTO | null {
-  if (!dto) return null
- 
-  const mealsLookupRaw = dto.mealsLookup
-  const recipesLookupRaw = dto.recipesLookup
-  const ingredientsLookupRaw = dto.ingredientsLookup
-  const listRaw = dto.list
- 
-  const mealsLookup = decodeLookup(mealsLookupRaw, decodeMeal)
-  const recipesLookup = decodeLookup(recipesLookupRaw, decodeRecipe)
-  const ingredientsLookup = decodeLookup(ingredientsLookupRaw, decodeIngredient)
- 
-  let list: import('@/domain/types').ShoppingListWithRefs | undefined
-  if (listRaw) {
-    const base = decodeShoppingList(listRaw)
-    if (base) {
-      const items = Array.isArray(listRaw.items) ? decodeShoppingListItems(listRaw.items) : []
-      list = { ...base, items }
-      const lookups: ShoppingLookups = {
-        ...(ingredientsLookup && { ingredientsLookup }),
-        ...(mealsLookup && { mealsLookup }),
-        ...(recipesLookup && { recipesLookup }),
-        ...(list && { shoppingListLookup: { [String(list.id)]: list } }),
-      }
-      attachItemRefs(list.items, lookups)
-    }
-  }
- 
-  return {
-    ...(ingredientsLookup && { ingredientsLookup }),
-    ...(mealsLookup && { mealsLookup }),
-    ...(recipesLookup && { recipesLookup }),
-    ...(list && { list }),
-    // include shoppingListLookup when list exists for consistency with lookups type
-    ...(list && { shoppingListLookup: { [String(list.id)]: list } }),
-  }
-}
- 
-export function mapCurrentShoppingList(dto: components['schemas']['CurrentShoppingList'] | null | undefined): CurrentShoppingListDTO | null {
-  if (!dto) return null
- 
-  const outstandingRaw = dto.outstandingItems
-  const requestedRaw = dto.requestedMeals
-  const purchasedRaw = dto.purchasedItems
- 
-  const ingredientsLookupRaw = dto.ingredientsLookup
-  const mealsLookupRaw = dto.mealsLookup
-  const recipesLookupRaw = dto.recipesLookup
-  const shoppingListLookupRaw = dto.shoppingListLookup
- 
-  const ingredientsLookup = decodeLookup(ingredientsLookupRaw, decodeIngredient)
-  const mealsLookup = decodeLookup(mealsLookupRaw, decodeMeal)
-  const recipesLookup = decodeLookup(recipesLookupRaw, decodeRecipe)
- 
-  let shoppingListLookup: Record<string, ShoppingList> | undefined
-  if (shoppingListLookupRaw) {
-    shoppingListLookup = decodeLookup(shoppingListLookupRaw, decodeShoppingList)
-  }
- 
-  const dtoOut: CurrentShoppingListDTO = {
-    outstandingItems: decodeShoppingListItems(outstandingRaw ?? []),
-    requestedMeals: decodeShoppingListItems(requestedRaw ?? []),
-    purchasedItems: decodeShoppingListItems(purchasedRaw ?? []),
-    ...(ingredientsLookup && { ingredientsLookup }),
-    ...(mealsLookup && { mealsLookup }),
-    ...(recipesLookup && { recipesLookup }),
-    ...(shoppingListLookup && { shoppingListLookup }),
-  }
- 
-  const lookups: ShoppingLookups = {
-    ...(ingredientsLookup && { ingredientsLookup }),
-    ...(mealsLookup && { mealsLookup }),
-    ...(recipesLookup && { recipesLookup }),
-    ...(shoppingListLookup && { shoppingListLookup }),
-  }
-  attachItemRefs(dtoOut.outstandingItems ?? null, lookups)
-  attachItemRefs(dtoOut.requestedMeals ?? null, lookups)
-  attachItemRefs(dtoOut.purchasedItems ?? null, lookups)
- 
-  return dtoOut
-}
- 
-export async function listRecipes(params?: { q?: string | null; cursor?: string | null; limit?: number }): Promise<Page<Recipe>> {
-  const query: Record<string, unknown> = {}
-  if (params) {
-    if (params.q !== undefined) query.q = params.q
-    if (params.cursor !== undefined) query.cursor = params.cursor
-    if (typeof params.limit === 'number') query.limit = params.limit
-  }
-  const { data, error, response } = await api.GET('/api/v1/recipes', { params: { query } })
-  if (!response.ok) throw httpError(response, error)
-  return fromOpenApiPage(data ?? null, (r) => decodeRecipe(r))
-}
- 
-export async function getRecipe(id: number | string): Promise<Recipe> {
-  const { data, error, response } = await api.GET('/api/v1/recipes/{recipe_id}', { params: { path: { recipe_id: Number(id) } } })
-  if (!response.ok) throw httpError(response, error)
-  const mapped = decodeRecipe(data)
-  if (!mapped) throw new Error('Recipe not found')
-  return mapped
-}
- 
-export async function saveRecipe(recipe: components['schemas']['Recipe-Input']): Promise<Recipe | null> {
-  const { data, error, response } = await api.POST('/api/v1/recipes', { body: recipe, params: { cookie: { user_id: 0 } } })
-  if (!response.ok) throw httpError(response, error)
-  return decodeRecipe(data)
-}
- 
-export async function deleteRecipe(id: number | string): Promise<void> {
-  const { error, response } = await api.DELETE('/api/v1/recipes/{recipe_id}', { params: { path: { recipe_id: Number(id) }, cookie: { user_id: 0 } } })
-  if (!response.ok) throw httpError(response, error)
-}
- 
-export async function parseRecipe(url: string): Promise<Recipe | null> {
-  const { data, error, response } = await api.GET('/api/v1/recipes/parse', { params: { query: { url }, cookie: { user_id: 0 } } })
-  if (!response.ok) throw httpError(response, error)
-  return decodeRecipe(data)
-}
- 
-export async function parseIngredients(lines: string[]): Promise<Ingredient[]> {
-  const { data, error, response } = await api.GET('/api/v1/recipes/ingredients/parse', {
-    params: { query: { ingredients: lines } },
-  })
-  if (!response.ok) throw httpError(response, error)
-  return decodeIngredients(data ?? [])
-}
- 
-export async function parseProduct(
-  ingredient: Pick<components['schemas']['Ingredient'], 'name' | 'line'>,
-  url: string
-): Promise<components['schemas']['Product'] | null> {
-  const body: components['schemas']['ProductUrl'] = { url, tags: [ingredient.name, ingredient.line] }
-  const res = await api.POST('/api/v1/products', { body })
-  if (!res.response.ok) throw httpError(res.response, res.error)
-  return res.data ?? null
-}
- 
-// Persons
-async function listPersons(params?: { q?: string | null; cursor?: string | null; limit?: number }): Promise<Page<components['schemas']['Person']>> {
-  const query: Record<string, unknown> = {}
-  if (params) {
-    if (params.q !== undefined) query.q = params.q
-    if (params.cursor !== undefined) query.cursor = params.cursor
-    if (typeof params.limit === 'number') query.limit = params.limit
-  }
-  const { data, error, response } = await api.GET('/api/v1/persons', { params: { query } })
-  if (!response.ok) throw httpError(response, error)
-  const normalized = Array.isArray(data) ? { items: data } : (data ?? null)
-  return fromOpenApiPage<components['schemas']['Person'], components['schemas']['Person']>(normalized, (p) => p)
-}
- 
-export async function getPersonsInHome(): Promise<Page<components['schemas']['Person']>> {
-  return listPersons()
-}
- 
-export async function searchPersons(name: string): Promise<Page<components['schemas']['Person']>> {
-  return listPersons({ q: name })
-}
- 
-// Meals
-export async function getUpcomingMeals(from: Date, to: Date): Promise<Meal[]> {
-  const { data, error, response } = await api.GET('/api/v1/meals/upcoming', {
-    params: { query: { from: from.toISOString(), to: to.toISOString() } },
-  })
-  if (!response.ok) throw httpError(response, error)
-  const list = Array.isArray(data) ? data : []
-  return list
-    .map((m) => decodeMeal(m))
-    .filter((m): m is Meal => !!m)
-    .sort((a, b) => ((a.suggestedDate?.getTime() ?? 0) - (b.suggestedDate?.getTime() ?? 0)))
-}
- 
-export async function getMeal(id: number | string): Promise<Meal> {
-  const { data, error, response } = await api.GET('/api/v1/meals/{meal_id}', { params: { path: { meal_id: Number(id) } } })
-  if (!response.ok) throw httpError(response, error)
-  const mapped = decodeMeal(data)
-  if (!mapped) throw new Error('Meal not found')
-  return mapped
-}
- 
-export async function saveMeal(meal: components['schemas']['Meal-Input']): Promise<Meal | null> {
-  const hasId = typeof meal.id === 'number' && meal.id >= 0
-  if (hasId) {
-    const { data, error, response } = await api.PUT('/api/v1/meals/{meal_id}', {
-      params: { path: { meal_id: Number(meal.id) } },
-      body: meal,
-    })
-    if (!response.ok) throw httpError(response, error)
-    return decodeMeal(data)
-  } else {
-    const { data, error, response } = await api.POST('/api/v1/meals', { body: meal })
-    if (!response.ok) throw httpError(response, error)
-    return decodeMeal(data)
-  }
-}
- 
-export async function markMealConsumed(mealId: number | string): Promise<Meal> {
-  const { data, error, response } = await api.POST('/api/v1/meals/{meal_id}/consumed', {
-    params: { path: { meal_id: Number(mealId) }, cookie: { user_id: 0 } },
-  })
-  if (!response.ok) throw httpError(response, error)
-  const mapped = decodeMeal(data)
-  if (!mapped) throw new Error('Meal not found')
-  return mapped
-}
- 
-export async function deleteMeal(mealId: number | string): Promise<void> {
-  const { error, response } = await api.DELETE('/api/v1/meals/{meal_id}', {
-    params: { path: { meal_id: Number(mealId) }, cookie: { user_id: 0 } },
-  })
-  if (!response.ok) throw httpError(response, error)
-}
- 
-// Shopping
-export async function getMyShoppingList(): Promise<Ingredient[]> {
-  const { data, error, response } = await api.GET('/api/v1/shopping/current/me/ingredients', { params: { cookie: { user_id: 0 } } })
-  if (!response.ok) throw httpError(response, error)
-  return decodeIngredients(data ?? [])
-}
- 
-export async function saveMyShoppingList(items: components['schemas']['Ingredient'][]): Promise<Ingredient[]> {
-  const { data, error, response } = await api.POST('/api/v1/shopping/current/me/ingredients', {
-    body: items,
-    params: { cookie: { user_id: 0 } },
-  })
-  if (!response.ok) throw httpError(response, error)
-  return decodeIngredients(data ?? [])
-}
- 
-export async function getShoppingList(id: number | string): Promise<import('@/domain/types').ShoppingListWithRefs | null> {
-  const { data, error, response } = await api.GET('/api/v1/shopping/{list_id}', { params: { path: { list_id: Number(id) } } })
-  if (!response.ok) throw httpError(response, error)
-  const mapped = mapPurchasedShoppingList(data)
-  return mapped?.list ?? null
-}
- 
-export async function getCurrentShoppingList(): Promise<CurrentShoppingListDTO> {
-  const { data, error, response } = await api.GET('/api/v1/shopping/current')
-  if (!response.ok) throw httpError(response, error)
-  const mapped = mapCurrentShoppingList(data)
-  if (!mapped) throw new Error('Failed to map current shopping list')
-  return mapped
-}
- 
-type PurchaseExisting = { type: 'existing'; id: number; personId: number; ingredientId?: number | null }
-type PurchaseRefs = { type: 'refs'; personId: number; ingredientId?: number | null; recipeId?: number | null; mealId?: number | null }
-export type PurchaseRequest = PurchaseExisting | PurchaseRefs
- 
-export async function purchaseShoppingList(
-  completedRequests: PurchaseRequest[]
-): Promise<import('@/domain/types').ShoppingListWithRefs | null> {
-  if (!Array.isArray(completedRequests) || completedRequests.length === 0) return null
-  // Map incoming requests: if id provided and >= 0, use it; otherwise send identifiers for ingredient/recipe/meal
-  const items: components['schemas']['ShoppingListItem'][] = completedRequests.map((i) =>
-    i.type === 'existing'
-      ? { id: i.id, personId: i.personId, ingredientId: i.ingredientId ?? null }
-      : {
-          id: -1,
-          personId: i.personId,
-          ingredientId: i.ingredientId ?? null,
-          recipeId: i.recipeId ?? null,
-          mealId: i.mealId ?? null,
-        }
-  )
- 
-  if (items.length === 0) return null
- 
-  const body: components['schemas']['ShoppingList'] = {
-    id: -1,
-    storeName: '',
-    purchasedById: -1,
-    items,
-  }
-  const { data, error, response } = await api.POST('/api/v1/shopping', {
-    body,
-    params: { cookie: { user_id: 0 } },
-  })
-  if (!response.ok) throw httpError(response, error)
-  const mapped = mapPurchasedShoppingList(data)
-  return mapped?.list ?? null
-}
- 
-export async function requestMeal(mealId: number | string): Promise<void> {
-  const { error, response } = await api.POST('/api/v1/shopping/current/meals/me', {
-    body: { mealId: Number(mealId) },
-    params: { cookie: { user_id: 0 } },
-  })
-  if (!response.ok) throw httpError(response, error)
-}
- 
-export async function unrequestMeal(mealId: number | string): Promise<void> {
-  const { error, response } = await api.DELETE('/api/v1/shopping/current/meals/{meal_id}', {
-    params: { path: { meal_id: Number(mealId) }, cookie: { user_id: 0 } },
-  })
-  if (!response.ok) throw httpError(response, error)
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/ActionItem.vue.html b/coverage/munch-ease-frontend/src/components/ActionItem.vue.html deleted file mode 100644 index 06e5a53..0000000 --- a/coverage/munch-ease-frontend/src/components/ActionItem.vue.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/ActionItem.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components ActionItem.vue

-
- -
- 0% - Statements - 0/40 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/40 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <div class="card">
-    <a @click="emit('click')">
-      <h2>{{ title }}</h2>
-      <img
-        :src="image"
-        :alt="title"
-      >
-    </a>
-  </div>
-</template>
-
-<script setup>
-const emit = defineEmits(['click'])
-defineProps({
-  title: { type: String, required: true },
-  image: { type: String, required: true },
-})
-</script>
-
-<style scoped>
-img {
-  width: 100%;
-  height: auto;
-}
-
-.card {
-  display: inline-block;
-  border: 1px solid #ccc;
-  border-radius: 5px;
-  padding: 10px;
-  margin-bottom: 10px;
-  width: 20em;
-  margin: 1em 1ex;
-}
-
-.card:hover {
-  background-color: #ccc;
-}
-</style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/AlertToast.vue.html b/coverage/munch-ease-frontend/src/components/AlertToast.vue.html deleted file mode 100644 index b56aaa9..0000000 --- a/coverage/munch-ease-frontend/src/components/AlertToast.vue.html +++ /dev/null @@ -1,355 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/AlertToast.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components AlertToast.vue

-
- -
- 0% - Statements - 0/90 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/90 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <div
-    v-if="showAlert"
-    :class="['alert', type]"
-    @click="dismiss"
-  >
-    <img
-      v-if="icon"
-      :src="icon"
-      alt="Notification icon"
-    >
-    <div class="message-container">
-      <h4 class="heading">
-        {{ heading }}
-      </h4>
-      <p class="message">
-        {{ message }}
-      </p>
-    </div>
-  </div>
-</template>
-
-<script setup>
-import { computed, watch } from 'vue'
-import { useAlert } from '@/composables/useAlert'
-
-const alertIcons = {
-  error: new URL('@/assets/notification-error.svg', import.meta.url).toString(),
-  success: new URL('@/assets/notification-success.svg', import.meta.url).toString(),
-  info: new URL('@/assets/notification-info.svg', import.meta.url).toString(),
-}
-
-const { current, clear, scheduleAutoDismiss } = useAlert()
-
-const showAlert = computed(() => !!current.value)
-const heading = computed(() => current.value?.heading ?? '')
-const message = computed(() => current.value?.message ?? '')
-const type = computed(() => current.value?.type ?? '')
-const icon = computed(() => (type.value && alertIcons[type.value] ? alertIcons[type.value] : null))
-
-function dismiss() {
-  clear()
-}
-
-watch(
-  () => current.value?._ts,
-  (ts) => {
-    if (ts) scheduleAutoDismiss(5000)
-  }
-)
-</script>
-
-<style scoped>
-/* Display as a toast, in the bottom right corner */
-/* Place the icon to the left for the full height, then have the heading and message stacked to the right */
-
-.alert {
-  position: fixed;
-  bottom: 1em;
-  right: 1em;
-  display: flex;
-  align-items: center;
-  padding: 1em;
-  border-radius: 5px;
-  color: white;
-  box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
-  text-align: left;
-}
-
-.alert img {
-  width: 2em;
-  height: 2em;
-  margin-right: 1em;
-
-  /* Invert svg colors */
-  filter: invert(1);
-}
-
-.alert.error {
-  background-color: #f44336;
-}
-
-.alert.success {
-  background-color: #4caf50;
-}
-
-.alert.info {
-  background-color: #2196f3;
-}
-</style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/LoginPage.vue.html b/coverage/munch-ease-frontend/src/components/LoginPage.vue.html deleted file mode 100644 index 67cc388..0000000 --- a/coverage/munch-ease-frontend/src/components/LoginPage.vue.html +++ /dev/null @@ -1,397 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/LoginPage.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components LoginPage.vue

-
- -
- 0% - Statements - 0/104 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/104 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <div class="login">
-    <h1>Login Page</h1>
-    <ul class="button-group">
-      <li
-        v-for="(person, index) in persons"
-        :key="person.id ?? index"
-      >
-        <button
-          type="button"
-          class="btn btn-primary"
-          @click="onLogin(person)"
-        >
-          {{ person.name }}
-        </button>
-      </li>
-    </ul>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { ref, onMounted } from 'vue'
-import { useRouter } from 'vue-router'
-import { getPersonsInHome } from '@/api/sdk'
-import { login as loginApi } from '@/api/auth'
-import type { Person } from '@/domain/types'
-
-const props = defineProps({
-  redirect: { type: String, default: '/' },
-})
-
-const router = useRouter()
-const persons = ref<Person[]>([])
-
-onMounted(async () => {
-  const page = await getPersonsInHome()
-  persons.value = page.items
-})
-
-async function onLogin(selectedPerson: Person) {
-  const person = await loginApi(selectedPerson.name)
-  if (person?.id >= 0) {
-    router.push(props.redirect)
-    return
-  }
-  alert('Login failed')
-}
-</script>
-
-<style scoped>
-/* Remove the default list styling */
-ul {
-  list-style-type: none;
-  padding: 0;
-}
-
-/* Center the buttons in the middle of the page, and let them wrap */
-
-.button-group {
-  display: flex;
-  flex-wrap: wrap;
-  justify-content: center;
-}
-
-/* Display each button as a large round circle */
-
-button {
-  width: 100px;
-  height: 100px;
-  border-radius: 50%;
-  margin: 10px;
-  font-size: 1.5em;
-
-  /* Center the text in the middle of the button */
-  display: flex;
-  justify-content: center;
-  align-items: center;
-
-  /* Add a shadow to make the buttons look like they are floating */
-  box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
-}
-
-/* Some nice flat nuetral shades for the user buttons */
-
-li:nth-child(1) > button {
-  background-color: #3939ff;
-  color: white;
-}
-
-li:nth-child(2) > button {
-  background-color: #156a14;
-  color: white;
-}
-
-li:nth-child(3) > button {
-  background-color: #325293;
-  color: white;
-}
-
-li:nth-child(4) > button {
-  background-color: #9a1f1f;
-  color: white;
-}
-</style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/index.html b/coverage/munch-ease-frontend/src/components/index.html deleted file mode 100644 index c89443e..0000000 --- a/coverage/munch-ease-frontend/src/components/index.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components - - - - - - - - - -
-
-

All files munch-ease-frontend/src/components

-
- -
- 0% - Statements - 0/234 -
- - -
- 0% - Branches - 0/3 -
- - -
- 0% - Functions - 0/3 -
- - -
- 0% - Lines - 0/234 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
ActionItem.vue -
-
0%0/400%0/10%0/10%0/40
AlertToast.vue -
-
0%0/900%0/10%0/10%0/90
LoginPage.vue -
-
0%0/1040%0/10%0/10%0/104
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue.html b/coverage/munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue.html deleted file mode 100644 index be429c3..0000000 --- a/coverage/munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue.html +++ /dev/null @@ -1,469 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components/ingredients CompactParsedIngredient.vue

-
- -
- 0% - Statements - 0/128 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/128 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <div class="compact-parse-results">
-    <p class="parse-element teaser-image">
-      <img :src="ingredient.product?.imgSmall ?? missingProduct">
-    </p>
-    <p class="ingredient-details">
-      <span
-        class="parse-element quantity"
-        :class="{ missing: !ingredient?.quantity }"
-      >{{
-        ingredient?.quantity || 'qty'
-      }}</span>
-      <span
-        class="parse-element unit"
-        :class="{ missing: !ingredient?.unit }"
-      >{{
-        ingredient?.unit || 'unit'
-      }}</span>
-      <span class="parse-element helper">of</span>
-      <span
-        class="parse-element name"
-        :class="{ missing: !ingredient?.name }"
-      >{{
-        ingredient?.name || 'name'
-      }}</span>:&nbsp;
-      <span
-        class="parse-element product-name"
-        :class="{ missing: !ingredient?.product }"
-      >
-        <a
-          v-if="ingredient?.product?.link"
-          :href="ingredient?.product?.link"
-          target="”_blank”"
-        >
-          ( {{ ingredient?.product?.name }}
-          <img
-            :src="externalLink"
-            style="
-              width: 1em;
-              height: 1em;
-              vertical-align: middle;
-              margin-left: 0.5em;
-              margin-bottom: 0.2em;
-            "
-          >
-          )
-        </a>
-        <a
-          v-else-if="ingredient?.name"
-          :href="searchlink"
-          target="_blank"
-        > (search?) </a>
-        <a v-else> (product) </a>
-      </span>
-    </p>
-  </div>
-</template>
-
-<script setup>
-import { computed } from 'vue'
-const missingProduct = new URL('@/assets/missing-product.svg', import.meta.url).toString()
-const externalLink = new URL('@/assets/external-link.svg', import.meta.url).toString()
-
-const props = defineProps({
-  ingredient: { type: Object, required: true },
-})
-
-const searchlink = computed(() =>
-  props.ingredient?.name
-    ? 'https://www.woolworths.com.au/shop/search/products?searchTerm=' +
-      encodeURIComponent(props.ingredient.name)
-    : ''
-)
-</script>
-
-<style scoped>
-.compact-parse-results {
-  flex: left;
-  display: flex;
-  justify-content: left;
-  text-align: left;
-}
-
-.parse-element {
-  margin: auto 0;
-  margin-right: 1em;
-  border-bottom: solid 1px #ccc;
-  font-weight: bold;
-}
-
-.parse-element.missing {
-  color: red;
-  border: solid red 1px;
-}
-
-.parse-element.teaser-image,
-.parse-element.helper {
-  border: none;
-  font-weight: normal;
-}
-
-.parse-element.teaser-image img {
-  padding: 0;
-  border: none;
-  width: 2em;
-  height: 2em;
-}
-
-.ingredient-details {
-  flex: 1;
-}
-
-.quantity {
-  color: blue;
-}
-
-.unit {
-  color: green;
-}
-
-.name {
-  color: black;
-}
-
-.product-name {
-  color: purple;
-}
-</style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue.html b/coverage/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue.html deleted file mode 100644 index 0af54e0..0000000 --- a/coverage/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue.html +++ /dev/null @@ -1,463 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components/ingredients EditableIngredientsPanel.vue

-
- -
- 0% - Statements - 0/126 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/126 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <div :class="{ editing: editing }">
-    <button
-      v-if="editing"
-      @click="emit('on-add')"
-    >
-      <img
-        class="icon"
-        :src="addCart"
-      > <br>
-      Add Ingredient
-    </button>
-    <button
-      v-if="!editOnly"
-      @click="toggleEditing"
-    >
-      <span v-if="editing">
-        <img
-          class="icon"
-          :src="editOff"
-        > <br>
-        Done Editing
-      </span>
-      <span v-else>
-        <img
-          class="icon"
-          :src="editOn"
-        > <br>
-        Edit My List
-      </span>
-    </button>
-    <ul>
-      <li
-        v-for="ingredient in ingredients"
-        :key="ingredient"
-      >
-        <div v-if="editing">
-          <p class="ingredient-line">
-            <ingredient-line
-              :ingredient="ingredient"
-              @update-ingredient="updateIngredient"
-              @update-product-link="updateProduct"
-            />
-          </p>
-          <button @click="emit('on-delete', ingredient)">
-            <img
-              class="icon"
-              :src="trash"
-            >
-          </button>
-        </div>
-        <div v-else>
-          <compact-parsed-ingredient :ingredient="ingredient" />
-        </div>
-      </li>
-    </ul>
-  </div>
-</template>
-
-<script setup>
-import { ref } from 'vue'
-import { parseProduct, parseIngredients } from '@/api/sdk'
-import IngredientLine from './IngredientLine.vue'
-import CompactParsedIngredient from './CompactParsedIngredient.vue'
-const addCart = new URL('@/assets/add-cart.svg', import.meta.url).toString()
-const editOff = new URL('@/assets/edit-off.svg', import.meta.url).toString()
-const editOn = new URL('@/assets/edit.svg', import.meta.url).toString()
-const trash = new URL('@/assets/trash.svg', import.meta.url).toString()
-
-const props = defineProps({
-  ingredients: { type: Array, required: true },
-  editOnly: { type: Boolean, default: false },
-})
-const emit = defineEmits(['on-add', 'on-delete', 'on-update-ingredient', 'on-editing'])
-
-const editing = ref(props.editOnly ?? false)
-
-async function updateProduct(ingredient, product_link) {
-  const product = await parseProduct(ingredient, product_link)
-  emit('on-update-ingredient', ingredient, { ...ingredient, product })
-}
-
-async function updateIngredient(ingredient, line) {
-  const newIngredients = await parseIngredients([line])
-  emit('on-update-ingredient', ingredient, newIngredients[0])
-}
-
-function toggleEditing() {
-  editing.value = !editing.value
-  emit('on-editing', editing.value)
-}
-</script>
-
-<style scoped>
-.icon {
-  width: 2em;
-  height: 2em;
-}
-
-ul {
-  padding: 0;
-}
-
-li {
-  list-style: none;
-}
-
-li > div {
-  display: flex;
-  flex-direction: row;
-  justify-content: space-between;
-  width: 100%;
-}
-
-.editing li {
-  border: 1px solid #ccc;
-  border-radius: 5px;
-  padding: 5px;
-}
-
-.ingredient-line {
-  flex: 1;
-  margin: 0;
-  margin-right: 1em;
-}
-</style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/ingredients/IngredientLine.vue.html b/coverage/munch-ease-frontend/src/components/ingredients/IngredientLine.vue.html deleted file mode 100644 index f067863..0000000 --- a/coverage/munch-ease-frontend/src/components/ingredients/IngredientLine.vue.html +++ /dev/null @@ -1,313 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/ingredients/IngredientLine.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components/ingredients IngredientLine.vue

-
- -
- 0% - Statements - 0/76 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/76 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <div class="ingredient-item">
-    <p>
-      <input
-        v-model="ingredientText"
-        placeholder="Enter an ingredient"
-        @keyup.enter="updateIngredient"
-        @blur="updateIngredient"
-      >
-      <input
-        v-if="ingredient.line"
-        v-model="productLink"
-        class="product-link-input"
-        placeholder="Enter product link"
-        @keyup.enter="updateProductLink"
-        @blur="updateProductLink"
-      >
-    </p>
-    <p v-if="ingredient.line">
-      <!-- Single line parse results -->
-      <compact-parsed-ingredient :ingredient="ingredient" />
-    </p>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { ref, watch } from 'vue'
-import CompactParsedIngredient from './CompactParsedIngredient.vue'
-import type { Ingredient } from '@/domain/types'
-
-const props = defineProps<{ ingredient: Ingredient }>()
-const emit = defineEmits<{
-  (e: 'update-ingredient', ingredient: Ingredient, newLine: string): void
-  (e: 'update-product-link', ingredient: Ingredient, link: string): void
-}>()
-
-const ingredientText = ref<string>(props.ingredient?.line ?? '')
-const productLink = ref<string>(props.ingredient.product?.link ?? '')
-
-watch(
-  () => props.ingredient,
-  (newIngredient) => {
-    ingredientText.value = newIngredient?.line ?? ''
-    productLink.value = newIngredient?.product?.link ?? ''
-  },
-  { deep: true }
-)
-
-function updateIngredient() {
-  if (ingredientText.value != props.ingredient.line) {
-    emit('update-ingredient', props.ingredient, ingredientText.value)
-  }
-}
-
-function updateProductLink() {
-  if (productLink.value && productLink.value != props.ingredient.product?.link) {
-    emit('update-product-link', props.ingredient, productLink.value)
-  }
-}
-</script>
-
-<style scoped>
-input {
-  border: 0;
-  font-size: larger;
-  border-bottom: 1px solid #ccc;
-  border-left: 1px solid #ccc;
-  width: 100%;
-  padding: 0.5vh;
-}
-
-.product-link-input {
-  color: #777;
-  margin-top: 0.5vh;
-}
-</style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/ingredients/index.html b/coverage/munch-ease-frontend/src/components/ingredients/index.html deleted file mode 100644 index 02a7c7a..0000000 --- a/coverage/munch-ease-frontend/src/components/ingredients/index.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/ingredients - - - - - - - - - -
-
-

All files munch-ease-frontend/src/components/ingredients

-
- -
- 0% - Statements - 0/330 -
- - -
- 0% - Branches - 0/3 -
- - -
- 0% - Functions - 0/3 -
- - -
- 0% - Lines - 0/330 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
CompactParsedIngredient.vue -
-
0%0/1280%0/10%0/10%0/128
EditableIngredientsPanel.vue -
-
0%0/1260%0/10%0/10%0/126
IngredientLine.vue -
-
0%0/760%0/10%0/10%0/76
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/meals/DatePicker.vue.html b/coverage/munch-ease-frontend/src/components/meals/DatePicker.vue.html deleted file mode 100644 index 00fd2ca..0000000 --- a/coverage/munch-ease-frontend/src/components/meals/DatePicker.vue.html +++ /dev/null @@ -1,418 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/meals/DatePicker.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components/meals DatePicker.vue

-
- -
- 0% - Statements - 0/111 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/111 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <div class="date-picker">
-    <input
-      v-model="selectedDate"
-      type="text"
-      placeholder="Select a date"
-      @focus="showDatePicker = true"
-      @blur="showDatePicker = false"
-    >
-    <div
-      v-if="showDatePicker"
-      class="date-picker-dropdown"
-    >
-      <ul>
-        <li
-          v-for="(day, index) in days"
-          :key="index"
-          @mousedown="selectDate(day)"
-        >
-          {{ formatDay(day) }}
-        </li>
-      </ul>
-    </div>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { ref, computed, watch } from 'vue'
-
-const props = defineProps<{ date?: Date }>()
-const emit = defineEmits<{ (e: 'date-selected', date: Date): void }>()
-
-function formatDay(date: Date): string {
-  const options: Intl.DateTimeFormatOptions = { weekday: 'long', day: 'numeric', month: 'numeric' }
-  return date.toLocaleDateString('en-AU', options)
-}
-
-const initialDate = props.date ?? new Date()
-const selectedDate = ref<string>(formatDay(initialDate))
-const showDatePicker = ref(false)
-
-watch(
-  () => props.date,
-  (newDate) => {
-    if (newDate) selectedDate.value = formatDay(newDate)
-  }
-)
-
-const days = computed<Date[]>(() => {
-  const today = new Date()
-  const result: Date[] = []
-  for (let i = 0; i < 15; i++) {
-    const d = new Date(today)
-    d.setDate(today.getDate() + i)
-    result.push(d)
-  }
-  return result
-})
-
-function selectDate(date: Date) {
-  selectedDate.value = formatDay(date)
-  showDatePicker.value = false
-  emit('date-selected', date)
-}
-</script>
-
-<style scoped>
-.date-picker {
-  position: relative;
-}
-
-.date-picker input {
-  width: 100%;
-  padding: 8px;
-  border: 1px solid #ccc;
-  border-radius: 4px;
-  font-size: 16px;
-  outline: none;
-}
-
-.date-picker-dropdown {
-  position: absolute;
-  top: 100%;
-  width: 100%;
-  margin: auto;
-  background-color: #fff;
-  border: 1px solid #ccc;
-  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
-  z-index: 1000;
-}
-
-.date-picker-dropdown ul {
-  list-style-type: none;
-  margin: 0;
-  padding: 0;
-}
-
-.date-picker-dropdown li {
-  padding: 8px;
-  cursor: pointer;
-  border-bottom: 1px solid #ccc;
-}
-
-.date-picker-dropdown li:hover {
-  background-color: #eee;
-}
-
-.date-picker-dropdown li:last-child {
-  border-bottom: none;
-}
-</style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/meals/EditMealPage.vue.html b/coverage/munch-ease-frontend/src/components/meals/EditMealPage.vue.html deleted file mode 100644 index 90cfada..0000000 --- a/coverage/munch-ease-frontend/src/components/meals/EditMealPage.vue.html +++ /dev/null @@ -1,1243 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/meals/EditMealPage.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components/meals EditMealPage.vue

-
- -
- 0% - Statements - 0/386 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/386 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <div class="container">
-    <div class="fields">
-      <date-picker
-        :date="meal.suggestedDate ?? new Date()"
-        @date-selected="selectDate"
-      />
-      <div class="persons-list">
-        Cooked by
-        <person-list
-          :people="meal.chefs"
-          @remove-person="(p) => removePerson('chefs', p)"
-          @add-person="(p) => addPerson('chefs', p)"
-        />
-        for
-        <person-list
-          :people="meal.consumers"
-          @remove-person="(p) => removePerson('consumers', p)"
-          @add-person="(p) => addPerson('consumers', p)"
-        />, with
-        <person-list
-          :people="meal.cleanup"
-          @remove-person="(p) => removePerson('cleanup', p)"
-          @add-person="(p) => addPerson('cleanup', p)"
-        />
-        on cleanup.
-      </div>
-    </div>
-    <div class="recipes">
-      <h2>Recipes</h2>
-      <ul v-if="meal.recipes.length">
-        <li
-          v-for="mealRecipe in meal.recipes"
-          :key="mealRecipe.recipe?.id ?? mealRecipe.recipeId"
-        >
-          <div
-            v-if="mealRecipe.recipe"
-            class="saved-recipe"
-          >
-            <p class="recipe-card">
-              <recipe-card :recipe="mealRecipe.recipe" />
-            </p>
-
-            <p class="servings">
-              <input
-                v-model="mealRecipe.servings"
-                type="number"
-                min="1"
-              >
-              <small><em>servings</em></small>
-            </p>
-
-            <input
-              type="checkbox"
-              class="show-ingredient-checkbox"
-              :checked="showIngredient(mealRecipe)"
-            >
-            <label
-              for="show-ingredients"
-              @click="showIngredient(mealRecipe, !showIngredient(mealRecipe))"
-            >
-              <img
-                class="icon"
-                :src="showIngredientsIcon"
-              >
-            </label>
-            <button
-              class="icon-button"
-              @click="removeRecipe(mealRecipe)"
-            >
-              <img
-                class="icon"
-                :src="trash"
-              >
-            </button>
-          </div>
-
-          <div v-if="showIngredient(mealRecipe)">
-            <ul>
-              <li
-                v-for="ingredient in scaleIngredients(mealRecipe)"
-                :key="ingredient.id"
-                class="saved-ingredient"
-              >
-                <CompactParsedIngredient :ingredient="ingredient" />
-              </li>
-            </ul>
-          </div>
-        </li>
-      </ul>
-      <div v-else>
-        <p>Add some recipes using the search box</p>
-      </div>
-      <div class="fields">
-        <recipe-search-box @select-recipe="selectRecipe" />
-      </div>
-    </div>
-    <div class="ingredients">
-      <h2>Sides & Additional Ingredients</h2>
-      <editable-ingredients-panel
-        :ingredients="meal.extraIngredients"
-        @on-add="addIngredient"
-        @on-delete="deleteIngredient"
-        @on-update-ingredient="updateIngredient"
-        @on-editing="onEditAdditionalIngredients"
-      />
-    </div>
-
-    <button @click="onSaveMeal">
-      Save
-    </button>
-    <p v-if="meal.purchaseDate">
-      <em>Purchased {{ ago(meal.purchaseDate) }}</em>
-    </p>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { reactive, onBeforeMount } from 'vue'
-import { useRoute, useRouter } from 'vue-router'
-import { getMeal, saveMeal, getRecipe } from '@/api/sdk'
-import { toMealInput } from '@/domain/decoders'
-import { currentUser } from '@/api/auth'
-import { useAlert } from '@/composables/useAlert'
-import { parseRouteId } from '@/router/helpers'
-import type { Person, Ingredient, Meal, MealRecipe } from '@/domain/types'
-
-import { ago } from '@/dateformats'
-
-import RecipeSearchBox from '@/components/recipes/RecipeSearchBox.vue'
-import RecipeCard from '@/components/recipes/RecipeCard.vue'
-import DatePicker from './DatePicker.vue'
-import EditableIngredientsPanel from '../ingredients/EditableIngredientsPanel.vue'
-import PersonList from './PersonList.vue'
-import CompactParsedIngredient from '../ingredients/CompactParsedIngredient.vue'
-const showIngredientsIcon = new URL('@/assets/show-ingredients.svg', import.meta.url).toString()
-const trash = new URL('@/assets/trash.svg', import.meta.url).toString()
-
-function addPersonIfNotExists(list: Person[], person: Person | null | undefined) {
-    if (!person) return
-    if (!list.find((p) => p.id === person.id)) {
-        list.push(person)
-    }
-}
-
-const route = useRoute()
-const router = useRouter()
-const { show: showAlert } = useAlert()
-
-type PeopleKey = 'chefs' | 'consumers' | 'cleanup'
-
-const meal = reactive<Meal>({
-    id: -1,
-    suggestedDate: new Date(),
-    consumedDate: null,
-    purchaseDate: null,
-    recipes: [],
-    extraIngredients: [],
-    chefs: [],
-    consumers: [],
-    cleanup: [],
-})
-
-onBeforeMount(async () => {
-  const id = parseRouteId(route.params.id)
-  if (id !== null) {
-    const loaded = await getMeal(id)
-    Object.assign(meal, loaded)
-  } else {
-        const self = await currentUser()
-        if (self) {
-            meal.chefs = [self]
-            meal.consumers = [self]
-            meal.cleanup = [self]
-        }
-    }
-})
-
-function selectDate(date: Date) {
-    meal.suggestedDate = date
-}
-
-function removeRecipe(mealRecipe: MealRecipe) {
-    if (
-        confirm(
-            `Are you sure you want to remove ${mealRecipe.servings} servings of ${mealRecipe.recipe?.name ?? 'this recipe'} from this meal?`
-        )
-    ) {
-        meal.recipes = meal.recipes.filter((r) => r !== mealRecipe)
-    }
-}
-
-function addIngredient() {
-    meal.extraIngredients = [{ id: -1, name: '', line: '', unit: 'Items', quantity: 0, preparation: '', productId: null, recipeId: null, mealId: null, product: null }, ...meal.extraIngredients]
-}
-
-function deleteIngredient(ingredient: Ingredient) {
-    meal.extraIngredients = meal.extraIngredients.filter((i) => i !== ingredient)
-}
-
-function updateIngredient(ingredient: Ingredient, newIngredient: Ingredient) {
-    meal.extraIngredients = meal.extraIngredients.map((i) => (i === ingredient ? newIngredient : i))
-}
-
-function removePerson(list: PeopleKey, person: Person) {
-    meal[list] = meal[list].filter((p) => p.id !== person.id)
-}
-
-function addPerson(list: PeopleKey, person: Person) {
-    addPersonIfNotExists(meal[list], person)
-}
-
-async function selectRecipe(recipe: { id: number | string }) {
-    // Refetch to get additional details
-  const r = await getRecipe(recipe.id)
-
-    if (r.createdBy) {
-        addPersonIfNotExists(meal.chefs, r.createdBy)
-        addPersonIfNotExists(meal.consumers, r.createdBy)
-
-        if (meal.cleanup.length === 0) {
-            addPersonIfNotExists(meal.cleanup, r.createdBy)
-        }
-    }
-
-    meal.recipes.push({ recipe: r, recipeId: r.id, mealId: meal.id, servings: r.serves })
-}
-
-async function onEditAdditionalIngredients(editing: boolean) {
-    if (editing && meal.extraIngredients.length === 0) {
-        addIngredient()
-    } else {
-        meal.extraIngredients = meal.extraIngredients.filter((i) => !!i.line)
-    }
-}
-
-const showMap = reactive<Record<string, boolean>>({})
-function showIngredient(mealRecipe: MealRecipe, value?: boolean): boolean {
-    const index = meal.recipes.indexOf(mealRecipe)
-    const key = `${mealRecipe.recipe?.id ?? 'unknown'}-${index}`
-    if (value === undefined) {
-        return !!showMap[key]
-    }
-    showMap[key] = value
-    return value
-}
-
-function scaleIngredients(mealRecipe: MealRecipe) {
-    const ing = mealRecipe.recipe?.ingredients ?? []
-    const serves = mealRecipe.recipe?.serves ?? 1
-    return ing.map((i) => {
-        return {
-            ...i,
-            quantity: (i.quantity * mealRecipe.servings) / serves,
-        }
-    })
-}
-
-async function onSaveMeal() {
-    const saved = await saveMeal(toMealInput(meal))
-    if (saved && saved.id >= 0) {
-        Object.assign(meal, saved)
-        router.push(`/meals/${saved.id}`)
-        showAlert({ heading: 'Meal saved', message: 'Meal saved successfully', type: 'success' })
-        return
-    }
-
-    showAlert({
-        heading: 'Error saving meal',
-        message: 'An error occurred while saving the meal',
-        type: 'error',
-    })
-}
-</script>
-
-<style scoped>
-img.icon {
-    width: 2em;
-    height: 2em;
-}
-
-.persons-list {
-    text-align: left;
-    padding: 1ex 2em;
-}
-
-.persons-list p {
-    margin: 0;
-    padding-bottom: 1em;
-}
-
-.person-list li {
-    display: inline-block;
-    padding-right: 1em;
-}
-
-.container {
-    margin: 1em auto;
-}
-
-ul {
-    list-style-type: none;
-    margin: 0;
-    padding: 0;
-}
-
-li {
-    padding-bottom: 0.5vh;
-}
-
-.saved-ingredient {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-}
-
-.saved-recipe {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-}
-
-.saved-ingredient p {
-    flex: 1;
-    margin: 0;
-    margin-right: 1em;
-}
-
-.saved-recipe button:hover {
-    background: #eee;
-}
-
-.saved-recipe .recipe-card {
-    margin: 0;
-}
-
-.recipe-card {
-    flex: 1;
-}
-
-.servings {
-    display: inline-block;
-    margin-right: 1em;
-}
-
-.servings input {
-    width: 3em;
-    border: none;
-    border-bottom: 1px solid #000;
-    text-align: center;
-    font-size: large;
-    font-style: italic;
-}
-
-.icon-button {
-    background: none;
-    border: none;
-    cursor: pointer;
-    border-radius: 1em;
-    padding: 0.5em;
-}
-
-.icon-button:hover {
-    /* Invert the colors of the trash icon */
-    filter: invert(1);
-}
-
-.show-ingredient-checkbox {
-    display: none;
-}
-
-.show-ingredient-checkbox+label {
-    cursor: pointer;
-    background-color: #fff;
-    padding: 0.5em;
-    border-radius: 1em;
-}
-
-.show-ingredient-checkbox+label:hover {
-    background-color: #eee;
-}
-
-.show-ingredient-checkbox:checked+label {
-    filter: invert(1);
-}
-</style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/meals/MealCard.vue.html b/coverage/munch-ease-frontend/src/components/meals/MealCard.vue.html deleted file mode 100644 index eecfc03..0000000 --- a/coverage/munch-ease-frontend/src/components/meals/MealCard.vue.html +++ /dev/null @@ -1,355 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/meals/MealCard.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components/meals MealCard.vue

-
- -
- 0% - Statements - 0/90 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/90 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <div class="meal-card">
-    <h3>{{ mealTitle }}</h3>
-    <h4>
-      {{ dayOfWeek }} <small>{{ date }}</small>
-    </h4>
-
-    <p>
-      Cooked by
-      <span
-        v-for="(chef, index) in meal.chefs"
-        :key="chef.id"
-      >
-        {{ chef.name }}{{ englishSeperator(index, meal.chefs) }}
-      </span>
-      <span v-if="!meal.chefs.length">somebody?</span>
-    </p>
-    <p>
-      For
-      <span
-        v-for="(consumer, index) in meal.consumers"
-        :key="consumer.id"
-      >
-        {{ consumer.name }}{{ englishSeperator(index, meal.consumers) }}
-      </span>
-      <span v-if="!meal.consumers.length">somebody?</span>
-    </p>
-    <p v-if="meal.purchaseDate">
-      Purchased {{ ago(meal.purchaseDate) }}
-    </p>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { computed } from 'vue'
-import { ago } from '@/dateformats'
-import type { Meal } from '@/domain/types'
-
-const props = defineProps<{ meal: Meal }>()
-
-function englishSeperator(index: number, list: Array<unknown>) {
-  switch (index) {
-    case list.length - 1:
-      return ''
-    case list.length - 2:
-      return ' and '
-    default:
-      return ', '
-  }
-}
-
-function englishList(list: string[]) {
-  switch (list.length) {
-    case 0:
-      return ''
-    case 1:
-      return list[0]
-    case 2:
-      return `${list[0]} and ${list[1]}`
-    default:
-      return `${list.slice(0, -1).join(', ')}, and ${list.slice(-1)}`
-  }
-}
-
-const date = computed(() =>
-  props.meal.suggestedDate
-    ? props.meal.suggestedDate.toLocaleDateString('en-au', { month: 'numeric', day: 'numeric' })
-    : ''
-)
-
-const dayOfWeek = computed(() =>
-  props.meal.suggestedDate ? props.meal.suggestedDate.toLocaleDateString('en-au', { weekday: 'long' }) : ''
-)
-
-const mealTitle = computed(() => {
-  const recipes = props.meal.recipes ?? []
-  const extras = props.meal.extraIngredients ?? []
-  const recipeNames = recipes
-    .map((mr) => mr.recipe?.name)
-    .filter((n): n is string => typeof n === 'string' && n.length > 0)
-  const recipesText = englishList(recipeNames)
-  const ingredientsText = englishList(extras.map((i) => i.name))
-
-  if (recipesText && ingredientsText) return `${recipesText} with ${ingredientsText}`
-  if (recipesText || ingredientsText) return recipesText || ingredientsText
-  return 'Nothing planned'
-})
-</script>
-
-<style></style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/meals/MealPlanPage.vue.html b/coverage/munch-ease-frontend/src/components/meals/MealPlanPage.vue.html deleted file mode 100644 index 60daa2c..0000000 --- a/coverage/munch-ease-frontend/src/components/meals/MealPlanPage.vue.html +++ /dev/null @@ -1,514 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/meals/MealPlanPage.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components/meals MealPlanPage.vue

-
- -
- 0% - Statements - 0/143 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/143 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <div>
-    <ul
-      v-if="meals.length"
-      class="meals-list"
-    >
-      <li
-        v-for="meal in meals"
-        :key="meal.id"
-      >
-        <meal-card :meal="meal" />
-        <button
-          class="toggle-actions"
-          @click="selectedMeal = meal == selectedMeal ? null : meal"
-        >
-          <img :src="meal == selectedMeal ? chevronDown : chevronUp">
-        </button>
-
-        <ul
-          v-if="selectedMeal == meal"
-          class="actions"
-        >
-          <li>
-            <router-link
-              class="nav-link"
-              :to="`/meals/${selectedMeal.id}`"
-              active-class="active"
-            >
-              Edit Meal
-            </router-link>
-          </li>
-          <li><a @click="markConsumed">Mark Consumed</a></li>
-          <li>
-            <a
-              class="button"
-              @click="deleteSelectedMeal"
-            >Remove</a>
-          </li>
-        </ul>
-      </li>
-    </ul>
-    <div v-if="!meals.length">
-      <em>No meals planned</em>
-    </div>
-    <action-item
-      title="Plan Meal"
-      :image="planMeal"
-      @click="() => $router.push('/meals/add')"
-    />
-  </div>
-</template>
-
-<script setup>
-import { ref, onBeforeMount } from 'vue'
-import ActionItem from '@/components/ActionItem.vue'
-import MealCard from '@/components/meals/MealCard.vue'
-import { getUpcomingMeals, markMealConsumed, deleteMeal } from '@/api/sdk'
-const chevronDown = new URL('@/assets/chevron-down.svg', import.meta.url).toString()
-const chevronUp = new URL('@/assets/chevron-up.svg', import.meta.url).toString()
-const planMeal = new URL('@/assets/plan-meal.svg', import.meta.url).toString()
-
-const from = new Date()
-from.setTime(0)
-
-const to = new Date()
-to.setDate(to.getDate() + 7)
-
-const meals = ref([])
-const selectedMeal = ref(null)
-
-onBeforeMount(async () => {
-  meals.value = await getUpcomingMeals(from, to)
-})
-
-async function deleteSelectedMeal() {
-  if (!selectedMeal.value) return
-  await deleteMeal(selectedMeal.value.id)
-  meals.value = meals.value.filter((m) => m.id !== selectedMeal.value.id)
-  selectedMeal.value = null
-}
-
-async function markConsumed() {
-  if (!selectedMeal.value) return
-  await markMealConsumed(selectedMeal.value.id)
-  meals.value = meals.value.filter((m) => m.id !== selectedMeal.value.id)
-}
-</script>
-
-<style scoped>
-li {
-  list-style-type: none;
-}
-
-ul.meals-list {
-  padding: 0;
-}
-
-.toggle-actions {
-  cursor: pointer;
-  background-color: #fff;
-  border: none;
-  border-bottom: solid 1px #ccc;
-  padding: 0 2em;
-  margin: 0;
-}
-
-.toggle-actions img {
-  width: 2em;
-  height: 2em;
-}
-
-.meals-list > li {
-  margin-bottom: 1em;
-  padding: 0;
-  border: 1px solid #ccc;
-  border-radius: 5px;
-  padding: 10px;
-}
-
-ul.actions {
-  margin: 0;
-  padding: 0;
-}
-
-.actions li {
-  display: block;
-  border: 1px solid #ccc;
-}
-
-.actions li:hover {
-  background-color: #ccc;
-}
-
-.actions li a {
-  display: block;
-  text-decoration: none;
-  color: #000;
-  width: 100%;
-  cursor: pointer;
-  padding-top: 2ex;
-  padding-bottom: 2ex;
-}
-</style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/meals/PersonList.vue.html b/coverage/munch-ease-frontend/src/components/meals/PersonList.vue.html deleted file mode 100644 index 07ff4e2..0000000 --- a/coverage/munch-ease-frontend/src/components/meals/PersonList.vue.html +++ /dev/null @@ -1,697 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/meals/PersonList.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components/meals PersonList.vue

-
- -
- 0% - Statements - 0/204 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/204 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <span class="person-list">
-    <span
-      v-for="person in people"
-      :key="person.id"
-    >
-      <button
-        class="person-circle remove-person"
-        @click="removePerson(person)"
-      >
-        {{ person.name }}
-      </button>
-    </span>
-    <span>
-      <button
-        v-if="!isAddingPerson"
-        class="person-circle add-person"
-        @click="isAddingPerson = true"
-      >
-        +
-      </button>
-      <input
-        v-else
-        ref="searchNameInput"
-        v-model="searchName"
-        @keyup.enter="addPerson"
-        @keyup.esc="isAddingPerson = false"
-        @blur="isAddingPerson = false"
-      >
-      <ul
-        v-if="isAddingPerson && searchResults.length"
-        ref="persondroplist"
-        class="person-droplist"
-      >
-        <li
-          v-for="person in searchResults"
-          :key="person.id"
-        >
-          <button
-            class="person-circle add-person"
-            @mousedown="addPerson(person)"
-          >
-            {{ person.name }}
-          </button>
-        </li>
-      </ul>
-    </span>
-  </span>
-</template>
-
-<script setup lang="ts">
-import { ref, watch } from 'vue'
-import { searchPersons } from '@/api/sdk'
-import type { Person } from '@/domain/types'
-const props = withDefaults(defineProps<{ people?: Person[] }>(), { people: () => [] })
-const emit = defineEmits<{
-  (e: 'add-person', person: Person): void
-  (e: 'remove-person', person: Person): void
-}>()
-
-const isAddingPerson = ref(false)
-const searchName = ref('')
-const searchResults = ref<Person[]>([])
-
-// Template refs for DOM elements
-const searchNameInput = ref<HTMLInputElement | null>(null)
-const persondroplist = ref<HTMLUListElement | null>(null)
-
-async function updateSearchResults() {
-  const q = searchName.value.trim()
-  if (!q) {
-    searchResults.value = []
-    return
-  }
-  const page = await searchPersons(q)
-  const results: Person[] = page.items.map((p) => ({ id: p.id, name: p.name }))
-  const idSet = new Set(props.people.map((p) => p.id))
-  searchResults.value = results.filter((p: Person) => !idSet.has(p.id))
-}
-
-function addPerson(person?: Person) {
-  if (!person && searchResults.value.length > 0) {
-    person = searchResults.value[0]
-  }
-  if (!person) {
-    searchName.value = ''
-    searchResults.value = []
-    isAddingPerson.value = false
-    return
-  }
-  if (!props.people.find((p) => p.id === person.id)) {
-    emit('add-person', person)
-  }
-  searchName.value = ''
-  searchResults.value = []
-  isAddingPerson.value = false
-}
-
-function removePerson(person: Person) {
-  emit('remove-person', person)
-}
-
-// Watchers
-watch(searchName, async () => {
-  await updateSearchResults()
-})
-
-watch(searchNameInput, async (el) => {
-  if (el) {
-    el.focus()
-    await updateSearchResults()
-  }
-})
-
-watch([persondroplist, searchNameInput], ([drop, input]) => {
-  if (drop && input) {
-    const inputRect = input.getBoundingClientRect()
-    drop.style.left = `${inputRect.left}px`
-    drop.style.top = `${inputRect.bottom}px`
-    drop.style.width = `${inputRect.width}px`
-  }
-})
-</script>
-
-<style scoped>
-.person-list {
-  display: inline-block;
-  text-align: center;
-  min-height: 50px;
-  padding: 0;
-  margin: 0;
-}
-
-/* Remove all the button styling */
-.person-circle {
-  background: none;
-  border: none;
-  padding: 0;
-  margin: 0;
-}
-
-/* Show the initials of the person in a circle */
-.person-circle {
-  display: inline-block;
-  width: 50px;
-  height: 50px;
-  line-height: 50px;
-  text-align: center;
-  border-radius: 50%;
-  background: #eee;
-}
-
-/* On hover, prompt the user to click to remove the person */
-/* change opacity of circle, and use css to add a large cross over the circle */
-.remove-person:hover {
-  cursor: pointer;
-  position: relative;
-  background-color: lightcoral;
-}
-
-/* Add a cross to the circle */
-.remove-person:hover::before,
-.remove-person:hover::after {
-  pointer-events: none;
-  content: 'X';
-  color: white;
-  position: absolute;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  right: 0;
-}
-
-.add-person {
-  background-color: lightgreen;
-}
-
-.add-person:hover {
-  cursor: pointer;
-  font-weight: bolder;
-  color: white;
-  background-color: green;
-}
-
-.person-droplist {
-  position: absolute;
-  background-color: white;
-  border: 1px solid #ccc;
-  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
-  list-style-type: none;
-  padding: 0;
-  margin: 0;
-  max-height: 40vh;
-  overflow-y: scroll;
-  z-index: 1000;
-}
-
-.person-droplist li {
-  padding: 8px;
-  cursor: pointer;
-  display: inline;
-  padding: 1ex 1em;
-}
-</style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/meals/index.html b/coverage/munch-ease-frontend/src/components/meals/index.html deleted file mode 100644 index f9c3138..0000000 --- a/coverage/munch-ease-frontend/src/components/meals/index.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/meals - - - - - - - - - -
-
-

All files munch-ease-frontend/src/components/meals

-
- -
- 0% - Statements - 0/934 -
- - -
- 0% - Branches - 0/5 -
- - -
- 0% - Functions - 0/5 -
- - -
- 0% - Lines - 0/934 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
DatePicker.vue -
-
0%0/1110%0/10%0/10%0/111
EditMealPage.vue -
-
0%0/3860%0/10%0/10%0/386
MealCard.vue -
-
0%0/900%0/10%0/10%0/90
MealPlanPage.vue -
-
0%0/1430%0/10%0/10%0/143
PersonList.vue -
-
0%0/2040%0/10%0/10%0/204
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/recipes/EditRecipePage.vue.html b/coverage/munch-ease-frontend/src/components/recipes/EditRecipePage.vue.html deleted file mode 100644 index cda3ed0..0000000 --- a/coverage/munch-ease-frontend/src/components/recipes/EditRecipePage.vue.html +++ /dev/null @@ -1,802 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/recipes/EditRecipePage.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components/recipes EditRecipePage.vue

-
- -
- 0% - Statements - 0/239 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/239 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <div>
-    <div v-if="!id && !recipe">
-      <input
-        v-model="link"
-        class="recipe-link"
-        type="text"
-        placeholder="Link to Recipe"
-      > <br>
-      <button @click="parseLink">
-        Parse
-      </button>
-      <button @click="createFromScratch">
-        Create from Scratch
-      </button>
-    </div>
-
-    <div v-if="parse_failed">
-      <p>Recipe not found</p>
-    </div>
-
-    <div v-if="!parse_failed && recipe">
-      <div
-        v-if="image_styling"
-        class="image-container"
-        :style="image_styling"
-      />
-      <h1>
-        <input
-          v-model="recipe.name"
-          class="recipe-name"
-          type="text"
-        >
-      </h1>
-      <label for="recipe-serves">Number of serves: </label>
-      <input
-        v-model="recipe.serves"
-        type="number"
-      >
-      <h3 class="recipe-link">
-        <a :href="recipe.link">View Recipe</a>
-      </h3>
-      <h2>Ingredients</h2>
-      <editable-ingredients-panel
-        :ingredients="recipe.ingredients"
-        :edit-only="true"
-        @on-add="addIngredient"
-        @on-delete="deleteIngredient"
-        @on-update-ingredient="updateIngredient"
-      />
-
-      <div>
-        <button
-          v-if="recipe.id"
-          class="delete-btn"
-          @click="deleteRecipe"
-        >
-          Delete
-        </button>
-        <button
-          class="submit-btn"
-          @click="saveRecipe"
-        >
-          {{ recipe.id ? 'Save' : 'Create' }}
-        </button>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { ref, computed, onMounted, watch } from 'vue'
-import { useRouter, useRoute } from 'vue-router'
-import { useAlert } from '@/composables/useAlert'
-import { parseQueryString } from '@/router/helpers'
-import { getRecipe, parseRecipe, saveRecipe as saveRecipeApi, deleteRecipe as deleteRecipeApi } from '@/api/sdk'
-import EditableIngredientsPanel from '@/components/ingredients/EditableIngredientsPanel.vue'
-import type { Recipe as DomainRecipe, Ingredient, RecipeInput } from '@/domain/types'
-
-const props = defineProps({
-  id: { type: String, required: false, default: undefined },
-})
-
-const router = useRouter()
-const route = useRoute()
-const { show: showAlert } = useAlert()
-
-const link = ref<string>(parseQueryString(route.query.url))
-const parse_failed = ref(false)
-const recipe = ref<DomainRecipe | null>(null)
-
-const image_styling = computed(() => {
-  const urls = recipe.value?.imageUrls ?? []
-  if (urls.length && urls[0]) {
-    const image = urls[0]!
-    return {
-      background: `linear-gradient(to bottom, rgba(255, 255, 255, 0.8) 0%, rgba(255, 255, 255, 0) 100%), url('${image}') center/cover no-repeat`,
-    }
-  }
-  return null
-})
-
-function parseLink() {
-  router.push({ path: '/recipes/add', query: { url: link.value } })
-  refreshRecipe()
-}
-
-async function refreshRecipe() {
-  const id = props.id ? parseInt(props.id) : null
-  if (id !== null && id >= 0) {
-    const r = await getRecipe(id)
-    recipe.value = r
-    link.value = r.link ?? ''
-    return
-  } else if (link.value) {
-    const r = await parseRecipe(link.value)
-    recipe.value = r
-    parse_failed.value = !r
-  } else {
-    recipe.value = null
-  }
-}
-
-async function updateIngredient(ingredient: Ingredient, newIngredient: Ingredient) {
-  if (!recipe.value) return
-  const list = recipe.value.ingredients ?? []
-  recipe.value = { ...recipe.value, ingredients: list.map((i) => (i === ingredient ? newIngredient : i)) }
-}
-
-function deleteIngredient(ingredient: Ingredient) {
-  if (!recipe.value) return
-  const list = recipe.value.ingredients ?? []
-  recipe.value = { ...recipe.value, ingredients: list.filter((i) => i !== ingredient) }
-}
-
-async function saveRecipe() {
-  const saved = recipe.value ? await saveRecipeApi(toRecipeInput(recipe.value)) : null
-  if (saved && saved.id >= 0) {
-    showAlert({ heading: 'Recipe saved', message: 'Your recipe has been saved', type: 'success' })
-    router.push(`/recipes/${saved.id}`)
-    return
-  }
-  showAlert({ heading: 'Error saving recipe', message: 'There was an error saving your recipe', type: 'error' })
-}
-
-function createFromScratch() {
-  recipe.value = {
-    id: -1,
-    name: 'My new recipe',
-    createdById: -1,
-    link: '',
-    ingredients: [],
-    imageUrls: [],
-    serves: 1,
-    dateCreated: new Date(),
-    dateHidden: null,
-  }
-}
-
-function addIngredient() {
-  if (!recipe.value) return
-  const list = recipe.value.ingredients ?? []
-  const draft: Ingredient = { id: -1, name: '', line: '', unit: 'Items', quantity: 0, preparation: '', productId: null, recipeId: null, mealId: null, product: null }
-  recipe.value = { ...recipe.value, ingredients: [draft, ...list] }
-}
-
-async function deleteRecipe() {
-  if (confirm('Are you sure you want to delete this recipe?')) {
-    if (!recipe.value) return
-    await deleteRecipeApi(recipe.value.id)
-    router.push('/recipes')
-  }
-}
-
-onMounted(() => {
-  refreshRecipe()
-})
-
-// Keep recipe in sync if link query changes while on page
-watch(
-  () => route.query.url,
-  (newUrl) => {
-    const parsed = parseQueryString(newUrl)
-    if (parsed) {
-      link.value = parsed
-      refreshRecipe()
-    }
-  }
-)
-
-// expose functions for template binding names (automatic in <script setup>)
-function toRecipeInput(r: DomainRecipe): RecipeInput {
-  return {
-    id: r.id,
-    name: r.name,
-    link: r.link,
-    serves: r.serves,
-    imageUrls: r.imageUrls ?? [],
-    ingredients: r.ingredients ?? [],
-  basedOnRecipe: r.basedOnRecipe ?? null,
-  // let backend set created/hidden dates
-    createdById: r.createdById,
-    createdBy: r.createdBy ?? null,
-  // dateHidden omitted
-    hiddenById: r.hiddenById ?? null,
-    hiddenBy: r.hiddenBy ?? null,
-  }
-}
-</script>
-
-<style scoped>
-input {
-  border: 0;
-  border-bottom: 1px solid #ccc;
-  font-size: large;
-}
-
-input.recipe-link {
-  width: 80%;
-}
-
-.image-container {
-  max-height: 20vh;
-  min-height: 20vh;
-  display: flex;
-  flex-direction: column;
-}
-
-input.recipe-name {
-  width: 100%;
-  font-weight: bold;
-  font-size: larger;
-}
-
-.recipe-link {
-  color: #0000ee;
-  text-decoration: none;
-}
-</style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/recipes/RecipeCard.vue.html b/coverage/munch-ease-frontend/src/components/recipes/RecipeCard.vue.html deleted file mode 100644 index 87b2829..0000000 --- a/coverage/munch-ease-frontend/src/components/recipes/RecipeCard.vue.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/recipes/RecipeCard.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components/recipes RecipeCard.vue

-
- -
- 0% - Statements - 0/53 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/53 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <div class="recipe-card">
-    <p>
-      <img
-        v-if="recipe.imageUrls && recipe.imageUrls.length"
-        :src="recipe.imageUrls[0] || fallbackEgg"
-      >
-      <img
-        v-else
-        :src="fallbackEgg"
-      >
-    </p>
-    <p class="recipe-name">
-      {{ recipe.name }}
-    </p>
-  </div>
-</template>
-
-<script setup lang="ts">
-import type { RecipeOut } from '@/domain/types'
-type RecipeCardItem = Pick<RecipeOut, 'id' | 'name' | 'imageUrls'>
-
-defineProps<{ recipe: RecipeCardItem }>()
-const fallbackEgg = new URL('@/assets/egg.svg', import.meta.url).toString()
-</script>
-
-<style scoped>
-.recipe-card {
-  display: flex;
-  flex-direction: row;
-  justify-content: space-between;
-  text-align: left;
-  max-height: 10em;
-  margin: 0;
-}
-
-.recipe-card p {
-  margin: auto 0;
-  margin-right: 1em;
-}
-
-li img {
-  display: block;
-  width: 3em;
-  height: 3em;
-  object-fit: cover;
-}
-
-.recipe-name {
-  flex: 1;
-  margin: auto;
-}
-</style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue.html b/coverage/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue.html deleted file mode 100644 index b2e66b5..0000000 --- a/coverage/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue.html +++ /dev/null @@ -1,766 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components/recipes RecipeSearchBox.vue

-
- -
- 0% - Statements - 0/227 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/227 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <div
-    class="recipe-search-box"
-    @focusout="onFocusOut"
-  >
-    <input
-      v-model="searchTerm"
-      type="text"
-      :placeholder="placeholderText"
-      @keyup.enter="search"
-      @keyup.esc="clear"
-      @focusin="search"
-    >
-    <ul
-      v-if="dropdownVisible"
-      class="dropdown"
-    >
-      <template v-if="recipes.length">
-        <li
-          v-for="recipe in recipes"
-          :key="recipe.id"
-          class="recipe"
-          @mousedown="selectRecipe(recipe)"
-        >
-          <recipe-card :recipe="recipe" />
-        </li>
-        <li
-          v-if="prevCursor || nextCursor"
-          class="pager"
-        >
-          <button
-            class="pager-btn"
-            :disabled="!prevCursor"
-            @mousedown.prevent="loadPrev"
-          >
-            Prev
-          </button>
-          <button
-            class="pager-btn"
-            :disabled="!nextCursor"
-            @mousedown.prevent="loadNext"
-          >
-            Next
-          </button>
-        </li>
-      </template>
-      <li
-        v-else
-        class="empty"
-      >
-        No recipes found
-      </li>
-    </ul>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { ref, watch, onBeforeUnmount, computed } from 'vue'
-import { listRecipes } from '@/api/sdk'
-import type { Recipe } from '@/domain/types'
-import { useAlert } from '@/composables/useAlert'
-import { usePagination } from '@/composables/usePagination'
-import RecipeCard from './RecipeCard.vue'
-
-const props = withDefaults(defineProps<{ placeholder?: string }>(), {
-  placeholder: 'Add a recipe...',
-})
-const placeholderText: string = props.placeholder ?? 'Add a recipe...'
-
-type RecipeItem = Pick<Recipe, 'id' | 'name' | 'imageUrls'>
-const emit = defineEmits<{
-  (e: 'select-recipe', recipe: RecipeItem): void
-}>()
-
-const searchTerm = ref('')
-const pageSize = 10
-const { items: recipes, next: nextCursor, prev: prevCursor, load, loadNext: loadNextPage, loadPrev: loadPrevPage, reset } = usePagination<RecipeItem>(
-  async (params) => {
-    const page = await listRecipes(params)
-    return {
-      items: (page.items ?? []).map(toRecipeItem),
-      next: page.next ?? null,
-      prev: page.prev ?? null,
-      total: page.total ?? null,
-    }
-  },
-  { pageSize }
-)
-const dropdownVisible = computed(() => recipes.value.length > 0 || (searchTerm.value.length > 0))
-
-const { show: showAlert, scheduleAutoDismiss } = useAlert()
-
-let debounceId: ReturnType<typeof setTimeout> | null = null
-
-watch(
-  searchTerm,
-  (newVal) => {
-    if (!newVal) {
-      recipes.value = []
-      if (debounceId) clearTimeout(debounceId)
-      return
-    }
-    if (debounceId) clearTimeout(debounceId)
-    debounceId = setTimeout(() => {
-      if (newVal === searchTerm.value) {
-        search()
-      }
-    }, 200)
-  }
-)
-
-async function search() {
-  try {
-    await load({ q: searchTerm.value })
-  } catch {
-    // swallow errors and clear suggestions on failures, also notify user
-    reset()
-    showAlert({ type: 'error', heading: 'Recipe search failed', message: 'Please try again shortly.' })
-    scheduleAutoDismiss()
-  }
-}
-
-async function loadNext() {
-  if (!nextCursor.value) return
-  try {
-    await loadNextPage()
-  } catch {
-    showAlert({ type: 'error', heading: 'Unable to load more', message: 'Could not fetch the next page.' })
-    scheduleAutoDismiss()
-  }
-}
-
-async function loadPrev() {
-  if (!prevCursor.value) return
-  try {
-    await loadPrevPage()
-  } catch {
-    showAlert({ type: 'error', heading: 'Unable to load more', message: 'Could not fetch the previous page.' })
-    scheduleAutoDismiss()
-  }
-}
-
-function toRecipeItem(r: Recipe): RecipeItem {
-  return { id: r.id, name: r.name, imageUrls: r.imageUrls ?? [] }
-}
-
-function selectRecipe(recipe: RecipeItem) {
-  emit('select-recipe', recipe)
-  searchTerm.value = ''
-  recipes.value = []
-}
-
-function clear() {
-  searchTerm.value = ''
-  reset()
-}
-
-function onFocusOut() {
-  // keep results while focused; on blur, clear all
-  reset()
-}
-
-onBeforeUnmount(() => {
-  if (debounceId) clearTimeout(debounceId)
-})
-</script>
-
-<style scoped>
-.recipe-search-box {
-  position: relative;
-}
-
-.recipe-search-box input {
-  width: calc(100% - 2em);
-  padding: 8px;
-  border: 1px solid #ccc;
-  border-radius: 4px;
-  font-size: 16px;
-  outline: none;
-}
-
-.recipe-search-box .dropdown {
-  position: absolute;
-  top: 100%;
-  width: 100%;
-  margin: auto;
-  background-color: #fff;
-  border: 1px solid #ccc;
-  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
-  z-index: 1000;
-
-  list-style-type: none;
-  margin: 0;
-  padding: 0;
-  max-height: 40vh;
-  overflow-y: scroll;
-}
-
-.recipe-search-box .dropdown li {
-  padding: 8px;
-  cursor: pointer;
-  border-bottom: 1px solid #ccc;
-}
-
-.recipe-search-box .dropdown li:last-child {
-  border-bottom: none;
-}
-
-.recipe-search-box .dropdown li:hover {
-  background-color: #eee;
-}
-
-.recipe-search-box .dropdown .pager {
-  display: flex;
-  justify-content: space-between;
-  gap: 8px;
-}
-
-.recipe-search-box .dropdown .pager-btn {
-  width: 48%;
-}
-
-.recipe-search-box .dropdown .empty {
-  padding: 8px;
-  color: #666;
-}
-</style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/recipes/RecipesPage.vue.html b/coverage/munch-ease-frontend/src/components/recipes/RecipesPage.vue.html deleted file mode 100644 index 622fcaf..0000000 --- a/coverage/munch-ease-frontend/src/components/recipes/RecipesPage.vue.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/recipes/RecipesPage.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components/recipes RecipesPage.vue

-
- -
- 0% - Statements - 0/31 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/31 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <div>
-    <recipe-search-box
-      placeholder="Search for a recipe..."
-      @select-recipe="onSelectRecipe"
-    />
-    <action-item
-      title="Add new Recipe"
-      :image="addRecipe"
-      @click="onAddRecipe"
-    />
-  </div>
-</template>
-<script setup lang="ts">
-import { useRouter } from 'vue-router'
-import ActionItem from '@/components/ActionItem.vue'
-import RecipeSearchBox from './RecipeSearchBox.vue'
-import type { Recipe } from '@/domain/types'
-
-const addRecipe = new URL('@/assets/add-recipe.svg', import.meta.url).toString()
-
-const router = useRouter()
-
-function onSelectRecipe(r: Pick<Recipe, 'id'>) {
-  router.push(`/recipes/${r.id}`)
-}
-
-function onAddRecipe() {
-  router.push('/recipes/add')
-}
-</script>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/recipes/index.html b/coverage/munch-ease-frontend/src/components/recipes/index.html deleted file mode 100644 index 83c5bd2..0000000 --- a/coverage/munch-ease-frontend/src/components/recipes/index.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/recipes - - - - - - - - - -
-
-

All files munch-ease-frontend/src/components/recipes

-
- -
- 0% - Statements - 0/550 -
- - -
- 0% - Branches - 0/4 -
- - -
- 0% - Functions - 0/4 -
- - -
- 0% - Lines - 0/550 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
EditRecipePage.vue -
-
0%0/2390%0/10%0/10%0/239
RecipeCard.vue -
-
0%0/530%0/10%0/10%0/53
RecipeSearchBox.vue -
-
0%0/2270%0/10%0/10%0/227
RecipesPage.vue -
-
0%0/310%0/10%0/10%0/31
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue.html b/coverage/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue.html deleted file mode 100644 index d7ad0cf..0000000 --- a/coverage/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue.html +++ /dev/null @@ -1,910 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components/shopping CurrentShoppingListPage.vue

-
- -
- 0% - Statements - 0/275 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/275 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <h3>Full shopping list</h3>
-
-  <h4>Included Meals</h4>
-  <meal-selection-list
-    :checked="includedMeals"
-    :meals="availableMeals"
-    @meal-selected="mealSelected"
-    @meal-unselected="mealUnselected"
-  />
-
-  <ul class="full-shopping-list">
-    <li
-      v-for="group in outstandingItemGroups"
-      :key="groupKey(group)"
-      class="selectable"
-      :class="{ selected: isSelected(group) }"
-      @click="toggleSelect(group)"
-    >
-      <shopping-list-item :shopping-list-item-group="group" />
-    </li>
-  </ul>
-
-  <div v-if="outstandingItemGroups.length === 0">
-    <p>No items to purchase</p>
-  </div>
-
-  <div class="purchased-slider">
-    <span v-if="purchasedItemGroups.length === 0" />
-    <button
-      v-else-if="showPurchased"
-      @click="showPurchased = false"
-    >
-      ⏶ Hide Purchased ⏶
-    </button>
-    <button
-      v-else
-      @click="showPurchased = true"
-    >
-      ⏷ Show Purchased ⏷
-    </button>
-
-    <div v-if="showPurchased && purchasedItemGroups.length > 0">
-      <h4>Purchased Meals</h4>
-      <meal-selection-list
-        :checked="includedMeals"
-        :meals="purchasedMeals"
-        @meal-selected="mealSelected"
-        @meal-unselected="mealUnselected"
-      />
-
-      <h4>Purchased Items</h4>
-      <ul class="full-shopping-list">
-        <li
-          v-for="item in purchasedItemGroups"
-          :key="groupKey(item)"
-        >
-          <shopping-list-item :shopping-list-item-group="item" />
-        </li>
-      </ul>
-    </div>
-  </div>
-
-  <div
-    v-if="selected.length"
-    class="spacer"
-  >
-&nbsp;
-  </div>
-
-  <!-- Display 'Stocked', 'Purchased' and 'Cancel' buttons in a vertical stack fixed to the bottom of the screen when any elements are selected -->
-  <div
-    v-if="selected.length"
-    class="footer-buttons"
-  >
-    <p v-if="selected.length === 1">
-      Mark '{{ selected[0] ? groupLabel(selected[0]) : '' }}' as
-    </p>
-    <p v-else>
-      Mark {{ selected.length }} items as
-    </p>
-
-    <div class="button-group">
-      <button @click="markFound">
-        <img :src="houseCheck"><br>
-        Found
-      </button>
-
-      <button @click="markPurchased">
-        <img :src="shoppingCart"><br>
-        Purchased
-      </button>
-
-      <button @click="selected = []">
-        <img :src="closeIcon"><br>
-        Cancel
-      </button>
-    </div>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { ref, computed, onBeforeMount } from 'vue'
-import { useRouter } from 'vue-router'
-import { useAlert } from '@/composables/useAlert'
-import { useShopping } from '@/composables/useShopping'
-import { getUpcomingMeals } from '@/api/sdk'
-import { type Group } from '@/composables/useShopping'
-type UIMeal = import('@/domain/types').Meal
-import MealSelectionList from './MealSelectionList.vue'
-import ShoppingListItem from './ShoppingListItem.vue'
-
-const houseCheck = new URL('@/assets/house-check.svg', import.meta.url).toString()
-const shoppingCart = new URL('@/assets/shopping-cart.svg', import.meta.url).toString()
-const closeIcon = new URL('@/assets/close.svg', import.meta.url).toString()
-
-const router = useRouter()
-const { show: showAlert } = useAlert()
-const { getCurrentShoppingList, requestMeal, unrequestMeal, purchaseFromGroups, groupsFrom, mealsFrom } = useShopping()
-
-const from = new Date()
-from.setTime(0)
-const to = new Date()
-to.setDate(to.getDate() + 7)
-
-type Meal = import('@/domain/types').Meal
-const shoppingList = ref<import('@/domain/types').CurrentShoppingListDTO | null>(null)
-const upcomingMeals = ref<Meal[]>([])
-const selected = ref<Group[]>([])
-const showPurchased = ref(false)
-
-const groupsMatch = (a: Group, b: Group) => {
-  if (a.type !== b.type) return false
-  if (a.type === 'name' && b.type === 'name') return a.name === b.name
-  if (a.type === 'product' && b.type === 'product') return a.product.id === b.product.id
-  return false
-}
-
-const outstandingItemGroups = computed<Group[]>(() => groupsFrom(shoppingList.value?.outstandingItems))
-const purchasedItemGroups = computed<Group[]>(() => groupsFrom(shoppingList.value?.purchasedItems))
-const purchasedMeals = computed<UIMeal[]>(() => mealsFrom(shoppingList.value?.purchasedItems))
-const availableMeals = computed(() => {
-  const lookup: Record<string | number, Meal> = shoppingList.value?.mealsLookup ?? {}
-  const meals: Record<string | number, Meal> = { ...lookup }
-  upcomingMeals.value?.forEach((m) => {
-    if (!meals[m.id]) meals[m.id] = m
-  })
-  return Object.values(meals)
-  .filter((m) => !m.purchaseDate)
-    .sort((a, b) => ((a.suggestedDate && a.suggestedDate.getTime()) || 0) - ((b.suggestedDate && b.suggestedDate.getTime()) || 0))
-})
-const includedMeals = computed(() => (shoppingList.value?.requestedMeals ?? []).map((i) => i.meal).filter((m): m is Meal => !!m))
-
-async function loadData() {
-  upcomingMeals.value = await getUpcomingMeals(from, to)
-  shoppingList.value = await getCurrentShoppingList()
-}
-
-async function mealSelected(meal: { id: number }) {
-  await requestMeal(meal.id)
-  await loadData()
-}
-
-async function mealUnselected(meal: { id: number }) {
-  await unrequestMeal(meal.id)
-  await loadData()
-}
-
-async function markFound() {
-  const result = await purchaseFromGroups(selected.value)
-  if (!result) {
-    showAlert({ type: 'error', message: 'No items selected.' })
-    return
-  }
-  selected.value = []
-  await loadData()
-}
-
-async function markPurchased() {
-  const shopping = await purchaseFromGroups(selected.value)
-  if (!shopping || !shopping.id) {
-    showAlert({ type: 'error', message: 'Failed to purchase.' })
-    return
-  }
-  selected.value = []
-  router.push(`/shopping/${shopping.id}`)
-}
-
-function toggleSelect(item: Group) {
-  const index = selected.value.findIndex((i) => groupsMatch(i, item))
-  if (index === -1) selected.value.push(item)
-  else selected.value.splice(index, 1)
-}
-
-function isSelected(item: Group) {
-  return selected.value.some((i) => groupsMatch(i, item))
-}
-
-function groupKey(group: Group) {
-  if (group.type === 'product') return `p-${group.product.id}`
-  if (group.type === 'name') return `n-${group.name}`
-  return Math.random().toString(36)
-}
-
-function groupLabel(group: Group) {
-  if (group.type === 'product') return group.product.name ?? 'item'
-  if (group.type === 'name') return group.name
-  return 'item'
-}
-
-onBeforeMount(loadData)
-</script>
-
-<style scoped>
-.full-shopping-list {
-  padding: 0;
-}
-
-.full-shopping-list li {
-  list-style-type: none;
-
-  outline: 1px solid #ccc;
-  border-radius: 0.5em;
-  margin-bottom: 1em;
-}
-
-.full-shopping-list li.selectable {
-  cursor: pointer;
-  outline: 1px solid #ccc;
-}
-
-.full-shopping-list li.selected {
-  background-color: #f0f0f0;
-  outline-width: 3px;
-}
-
-.footer-buttons {
-  position: fixed;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  padding: 1ex;
-  background-color: #f0f0f0;
-  border-top: 1px solid #ccc;
-}
-
-.footer-buttons p {
-  margin: 0;
-  text-align: left;
-  font-style: italic;
-}
-
-.button-group {
-  /* Display as vertical fixed to the bottom of the screen */
-  display: flex;
-}
-
-.button-group button {
-  flex: 1;
-  padding: 1em;
-  border: 1px solid #ccc;
-  border-radius: 0.5em;
-  background-color: #f0f0f0;
-  cursor: pointer;
-}
-
-button img {
-  width: 2em;
-  height: 2em;
-}
-
-.spacer {
-  height: 12em;
-}
-</style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/shopping/MealSelectionList.vue.html b/coverage/munch-ease-frontend/src/components/shopping/MealSelectionList.vue.html deleted file mode 100644 index 5d2336b..0000000 --- a/coverage/munch-ease-frontend/src/components/shopping/MealSelectionList.vue.html +++ /dev/null @@ -1,574 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/shopping/MealSelectionList.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components/shopping MealSelectionList.vue

-
- -
- 0% - Statements - 0/163 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/163 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <ul>
-    <li
-      v-for="meal in meals"
-      :key="meal.id"
-    >
-      <!-- Have a checkbox and card for each meal, show the image and name -->
-      <!-- Emit meal-selected event on checked and meal-unselected on unchecked -->
-      <input
-        :id="String(meal.id)"
-        type="checkbox"
-        :checked="isChecked(meal)"
-        :disabled="!!disabled"
-        @change="mealCheckChanged"
-      >
-      <label
-        :for="String(meal.id)"
-        :style="getImageStyling(meal)"
-      >
-        {{ formatDate(meal.suggestedDate) }}
-      </label>
-    </li>
-  </ul>
-</template>
-
-<script setup lang="ts">
-import type { Meal } from '@/domain/types'
-
-// MealSelectionList only needs minimal fields from Meal; recipes and extraIngredients are optional for image lookup
-type MealDisplay = Pick<Meal, 'id' | 'suggestedDate'> & Partial<Pick<Meal, 'recipes' | 'extraIngredients'>>
-
-const props = defineProps<{ meals: MealDisplay[]; checked: MealDisplay[]; disabled?: boolean }>()
-const emit = defineEmits<{
-  (e: 'meal-selected', meal: MealDisplay): void
-  (e: 'meal-unselected', meal: MealDisplay): void
-}>()
-
-const nth = (d: number) => {
-  if (d > 3 && d < 21) return 'th'
-  switch (d % 10) {
-    case 1:
-      return 'st'
-    case 2:
-      return 'nd'
-    case 3:
-      return 'rd'
-    default:
-      return 'th'
-  }
-}
-
-
-const formatDate = (date: Date | null) => {
-  if (!date) return ''
-  const day = date.getDate()
-  return `${date.toLocaleDateString('en-AU', { weekday: 'short' })} ${day}${nth(day)}`
-}
-
-const getUrl = (meal: MealDisplay) => {
-  // First non empty value in meal.recipes[*].recipe image URLs
-  if (meal.recipes) {
-    for (const mr of meal.recipes) {
-      const imgs = mr.recipe?.imageUrls
-      if (imgs && imgs.length && imgs[0]) {
-        return imgs[0]
-      }
-    }
-  }
-
-  // First meal.extraIngredients with a product with an image
-  if (meal.extraIngredients) {
-    for (const ingredient of meal.extraIngredients) {
-      const p = ingredient.product
-      if (p?.imgLarge) return p.imgLarge
-      if (p?.imgSmall) return p.imgSmall
-    }
-  }
-  return null
-}
-
-function getImageStyling(meal: MealDisplay) {
-  const imageUrl = getUrl(meal)
-  if (!imageUrl) return null
-  const opacity = 0.7
-  return {
-    background: `linear-gradient(to bottom, rgba(255, 255, 255, ${opacity}) 0%, rgba(255, 255, 255, ${opacity}) 100%), url('${imageUrl}') center/cover no-repeat`,
-  }
-}
-
-function mealCheckChanged(event: Event) {
-  const target = event.target
-  if (!target || !(target instanceof HTMLInputElement)) return
-  const mealId = parseInt(target.id)
-  const meal = props.meals.find((m) => m.id === mealId)
-  if (!meal) return
-  if (target.checked) emit('meal-selected', meal)
-  else emit('meal-unselected', meal)
-}
-
-function isChecked(meal: MealDisplay) {
-  return props.checked.some((m) => m.id === meal.id)
-}
-</script>
-
-<style scoped>
-ul {
-  padding: 0;
-}
-
-li {
-  display: inline-block;
-  list-style-type: none;
-  border: 1px solid #ccc;
-  border-radius: 0.5em;
-  margin-bottom: 1em;
-  padding: none;
-  overflow: hidden;
-  text-align: center;
-}
-
-/* Hide the default checkbox formatting, and format the card instead */
-input[type='checkbox'] {
-  display: none;
-}
-
-label {
-  display: inline-block;
-  padding: 0.1vh 0.3em;
-  /* Help the visibility of the text over the image */
-  background-color: rgba(255, 255, 255, 0.9);
-  border: 3px solid transparent;
-  border-radius: 0.5em;
-  margin: 0;
-  font-weight: normal;
-  cursor: pointer;
-  color: #3d5447;
-}
-
-input[type='checkbox']:checked + label {
-  border: 3px solid #3d5447;
-  text-shadow: #ccc 0 0 0.1em;
-}
-
-input[type='checkbox']:disabled + label {
-  cursor: not-allowed;
-}
-
-/* Show the image as the background image of the card */
-.meal-image {
-  width: 100%;
-  height: 100%;
-  object-fit: cover;
-}
-
-/* Position the text in the center of the card */
-label {
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  font-size: larger;
-  font-weight: bold;
-}
-</style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue.html b/coverage/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue.html deleted file mode 100644 index 919ef24..0000000 --- a/coverage/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue.html +++ /dev/null @@ -1,349 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/shopping/MyShoppingPage.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components/shopping MyShoppingPage.vue

-
- -
- 0% - Statements - 0/88 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/88 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <div>
-    <h1>My Shopping List</h1>
-    <router-link :to="`/shopping/current`">
-      Full Shopping List
-    </router-link>
-    <editable-ingredients-panel
-      :ingredients="ingredients"
-      @on-add="addIngredient"
-      @on-delete="deleteIngredient"
-      @on-update-ingredient="updateIngredient"
-      @on-editing="onEditing"
-    />
-  </div>
-
-  <!--
-        # Functions
-        * Add a random item to next shop
-        * Add meals to next shop
-            * Show cards for the next 7 meals
-            * Slider / drawer for more meals
-            * Check meal to add
-            * Update shopping list automatically as meals change
-            * Visual indicator for meals that are already in the list
-            * Visual indicator for purchased meals
-        * Aggregate items from meals and random items into a single list of products
-        * For each product, need to have visibility of
-            * Name 
-            * Link
-            * Image
-            * Quantity
-            * Source meal / person
-            * Date added / for
-        * Need to be able to mark list as done
-            * Keeps history - track purchased meals
-            * Clears list
-
-        * History view of purchased lists (seperate page ofc)
-    -->
-</template>
-
-<script setup lang="ts">
-import { ref, onBeforeMount } from 'vue'
-import { useRouter } from 'vue-router'
-import { useAuth } from '@/composables/useAuth'
-import { useShopping } from '@/composables/useShopping'
-import type { Ingredient } from '@/domain/types'
-import EditableIngredientsPanel from '@/components/ingredients/EditableIngredientsPanel.vue'
-
-const router = useRouter()
-const { loadUser } = useAuth()
-const { getMyShoppingList, saveMyShoppingList } = useShopping()
-
-const ingredients = ref<Ingredient[]>([])
-
-async function updateShoppingList(save = false) {
-  const newIngredients = save ? await saveMyShoppingList(ingredients.value) : await getMyShoppingList()
-  ingredients.value = newIngredients.map((i) => ({ ...i }))
-}
-
-function addIngredient() {
-  ingredients.value = [
-    { id: -1, name: '', line: '', quantity: 1, unit: 'Items', preparation: '', product: null },
-    ...ingredients.value,
-  ]
-}
-
-function deleteIngredient(ingredient: Ingredient) {
-  ingredients.value = ingredients.value.filter((i) => i !== ingredient)
-}
-
-function updateIngredient(oldIngredient: Ingredient, newIngredient: Ingredient) {
-  ingredients.value = ingredients.value.map((source) => (source === oldIngredient ? newIngredient : source))
-}
-
-async function onEditing(isStartingEdit: boolean) {
-  await updateShoppingList(!isStartingEdit)
-  if (isStartingEdit && ingredients.value.length === 0) addIngredient()
-}
-
-onBeforeMount(async () => {
-  const u = await loadUser()
-  if (!u) return router.push({ name: 'login' })
-  await updateShoppingList()
-})
-</script>
-
-<style scoped></style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue.html b/coverage/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue.html deleted file mode 100644 index 971567d..0000000 --- a/coverage/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue.html +++ /dev/null @@ -1,286 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components/shopping PurchasedShoppingListPage.vue

-
- -
- 0% - Statements - 0/67 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/67 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <h3>Purchased {{ shoppingList?.createdDate ? ago(shoppingList.createdDate) : '' }}</h3>
-
-  <div v-if="includedMeals.length > 0">
-    <h4>Included Meals</h4>
-    <meal-selection-list
-      :checked="includedMeals"
-      :meals="includedMeals"
-      :disabled="true"
-    />
-  </div>
-
-  <ul class="full-shopping-list">
-    <li
-      v-for="item in listByProduct"
-      :key="groupKey(item)"
-    >
-      <shopping-list-item-comp :shopping-list-item-group="item" />
-    </li>
-  </ul>
-</template>
-
-<script setup lang="ts">
-import { ref, computed, onBeforeMount } from 'vue'
-import { useRoute } from 'vue-router'
-import { ago } from '@/dateformats'
-import { useShopping } from '@/composables/useShopping'
-import { parseRouteId } from '@/router/helpers'
-import type { Group } from '@/composables/useShopping'
-import type { Meal } from '@/domain/types'
-import MealSelectionList from './MealSelectionList.vue'
-import ShoppingListItemComp from './ShoppingListItem.vue'
-
-const route = useRoute()
-const { getShoppingList, groupsFrom, mealsFrom } = useShopping()
-const shoppingList = ref<import('@/domain/types').ShoppingListWithRefs | null>(null)
-
-const includedMeals = computed<Meal[]>(() => mealsFrom(shoppingList.value?.items))
-const listByProduct = computed(() => groupsFrom(shoppingList.value?.items))
-
-onBeforeMount(async () => {
-  const id = parseRouteId(route.params.id)
-  if (id !== null) {
-    shoppingList.value = await getShoppingList(id)
-  }
-})
-
-function groupKey(group: Group) {
-  if (group.type === 'product') return `p-${group.product.id}`
-  if (group.type === 'name') return `n-${group.name}`
-  return Math.random().toString(36)
-}
-</script>
-
-<style scoped>
-.full-shopping-list li {
-  list-style-type: none;
-
-  border: 1px solid #ccc;
-  border-radius: 0.5em;
-  margin-bottom: 1em;
-}
-
-.full-shopping-list {
-  padding: 0;
-}
-</style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue.html b/coverage/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue.html deleted file mode 100644 index 9ad069d..0000000 --- a/coverage/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue.html +++ /dev/null @@ -1,751 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/shopping/ShoppingListItem.vue - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/components/shopping ShoppingListItem.vue

-
- -
- 0% - Statements - 0/222 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/222 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
<template>
-  <!-- Show a card of the product with the total, taking up the available space and have an expanding section to view sources -->
-  <div class="shopping-list-item">
-    <img
-      :src="imageSrc"
-      class="product-image"
-    >
-    <div class="product-details">
-      <h3 class="header">
-        <strong>
-          <a
-            v-if="shoppingListItemGroup.type === 'product' && shoppingListItemGroup.product?.link"
-            :href="shoppingListItemGroup.product?.link"
-          >{{ shoppingListItemGroup.product?.name }}</a>
-          <span v-else>{{ shoppingListItemGroup.type === 'name' ? shoppingListItemGroup.name : '' }}</span> </strong>,
-        <small>
-          <span
-            v-for="(total, index) in remainingRequiredTotals"
-            :key="index"
-          >
-            <span v-if="index">, </span>
-            <span>{{ formatQuantity(total.quantity) }}&nbsp;{{ total.unit }}</span>
-          </span>
-          <span
-            v-if="purchased.length > 0"
-            class="found-marker partial"
-          >✓ {{ getFriendlyDate(lastPurchased) }}</span>
-        </small>
-      </h3>
-      <p
-        v-if="required.length > 0"
-        class="sources"
-      >
-        <strong>Need: </strong>
-        <span
-          v-for="(source, index) in required"
-          :key="source.id"
-        >
-          <span v-if="index">, and </span>
-          <!-- Generic ingredient-only display when no recipe/meal context; person ref removed -->
-          <span v-if="!source.recipe && !source.meal && source.ingredient">
-            {{ formatQuantity(source.ingredient.quantity) }}&nbsp;{{ source.ingredient.unit }}
-          </span>
-          <span v-else-if="source.recipe && source.ingredient">
-            {{ formatQuantity(source.ingredient.quantity) }}&nbsp;{{ source.ingredient.unit }} in
-            <router-link :to="`/recipes/${source.recipe.id}/`">{{
-              source.recipe.name
-            }}</router-link>
-            for
-            <router-link :to="`/meals/${source.meal?.id}/`">{{
-              source.meal?.suggestedDate
-                ? source.meal.suggestedDate.toLocaleDateString('en-AU', {
-                  weekday: 'long',
-                  month: 'long',
-                  day: 'numeric',
-                })
-                : ''
-            }}</router-link>
-          </span>
-          <span v-else-if="source.meal && source.ingredient">
-            {{ source.ingredient.line }} for
-            <router-link :to="`/meals/${source.meal?.id}/`">{{
-              source.meal?.suggestedDate
-                ? source.meal.suggestedDate.toLocaleDateString('en-AU', {
-                  weekday: 'long',
-                  month: 'long',
-                  day: 'numeric',
-                })
-                : ''
-            }}</router-link>
-          </span>
-        </span>
-      </p>
-      <p v-if="purchased.length > 0">
-        <strong>Already found or purchased: </strong>
-        <span
-          v-for="(source, index) in purchased"
-          :key="source.id"
-        >
-          <span v-if="index">, and </span>
-          <!-- Generic ingredient-only display when no recipe/meal context; person ref removed -->
-          <span v-if="!source.recipe && !source.meal && source.ingredient">
-            {{ formatQuantity(source.ingredient.quantity) }}&nbsp;{{ source.ingredient.unit }}
-          </span>
-          <span v-else-if="source.recipe && source.ingredient">
-            {{ formatQuantity(source.ingredient.quantity) }}&nbsp;{{ source.ingredient.unit }} in
-            <router-link :to="`/recipes/${source.recipe.id}/`">{{
-              source.recipe.name
-            }}</router-link>
-            for
-            <router-link :to="`/meals/${source.meal?.id ?? ''}/`">{{
-              source.meal?.suggestedDate
-                ? source.meal.suggestedDate.toLocaleDateString('en-AU', {
-                  weekday: 'long',
-                  month: 'long',
-                  day: 'numeric',
-                })
-                : ''
-            }}</router-link>
-          </span>
-          <span v-else-if="source.meal && source.ingredient">
-            {{ source.ingredient.line }} for
-            <router-link :to="`/meals/${source.meal.id}/`">{{
-              source.meal.suggestedDate
-                ? source.meal.suggestedDate.toLocaleDateString('en-AU', {
-                  weekday: 'long',
-                  month: 'long',
-                  day: 'numeric',
-                })
-                : ''
-            }}</router-link>
-          </span>
-        </span>
-      </p>
-    </div>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { computed } from 'vue'
-import { ago } from '@/dateformats'
-import { calculateTotals } from '@/units'
-import type { Group } from '@/composables/useShopping'
-
-const props = defineProps<{ shoppingListItemGroup: Group }>()
-
-const fallbackImg = new URL('@/assets/missing-product.svg', import.meta.url).toString()
-const imageSrc = computed(() => {
-  if (props.shoppingListItemGroup.type === 'product') {
-    return props.shoppingListItemGroup.product?.imgSmall ?? fallbackImg
-  }
-  return fallbackImg
-})
-
-const remainingRequiredTotals = computed(() =>
-  calculateTotals(
-    props.shoppingListItemGroup.shoppingListItems
-      .filter((item) => !!item.ingredient)
-      .map((item) => ({
-        // item.ingredient is defined due to filter above
-        quantity: item.ingredient!.quantity,
-        unit: String(item.ingredient!.unit || 'items'),
-      }))
-  )
-)
-
-const required = computed(() => props.shoppingListItemGroup.shoppingListItems.filter((item) => !item.listId))
-
-const purchased = computed(() => props.shoppingListItemGroup.shoppingListItems.filter((item) => item.listId))
-
-const lastPurchased = computed(() => {
-  const purchasedItems = props.shoppingListItemGroup.shoppingListItems.filter((item) => item.listId)
-  if (purchasedItems.length === 0) return null
-  return purchasedItems.reduce<Date | null>((latest, item) => {
-    const itemDate: Date | null = (item?.meal?.suggestedDate ?? item?.createdDate) || null
-    return !latest || (itemDate && itemDate > latest) ? itemDate : latest
-  }, null)
-})
-
-function getFriendlyDate(date: Date | null) {
-  if (!date) return ''
-  return ago(date)
-}
-
-function formatQuantity(quantity: number) {
-  const log10 = Math.log10(quantity)
-  if (log10 < 0) return quantity.toPrecision(2)
-  if (log10 < 1) return quantity.toFixed(1)
-  return quantity.toFixed(0)
-}
-</script>
-
-<style scoped>
-/* Show the product image to the left, then the product name and size to the right */
-
-.shopping-list-item {
-  position: relative;
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  padding: 1em;
-}
-
-.product-image {
-  max-width: 5em;
-  max-height: 4em;
-  margin-right: 1em;
-}
-
-.product-details {
-  flex-grow: 1;
-  text-align: left;
-}
-
-.header {
-  margin: 0;
-}
-
-.found-marker {
-  margin: 1ex;
-  padding-top: 0.6ex;
-  padding-bottom: 0.5ex;
-  padding-left: 1em;
-  padding-right: 1em;
-  border-radius: 25px;
-
-  text-align: center;
-  white-space: nowrap;
-  font-size: smaller;
-  color: white;
-  font-weight: bold;
-  z-index: 1000;
-}
-
-.found-marker.found {
-  background-color: green;
-}
-
-.found-marker.partial {
-  background-color: darkgoldenrod;
-}
-</style>
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/components/shopping/index.html b/coverage/munch-ease-frontend/src/components/shopping/index.html deleted file mode 100644 index 860305a..0000000 --- a/coverage/munch-ease-frontend/src/components/shopping/index.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/components/shopping - - - - - - - - - -
-
-

All files munch-ease-frontend/src/components/shopping

-
- -
- 0% - Statements - 0/815 -
- - -
- 0% - Branches - 0/5 -
- - -
- 0% - Functions - 0/5 -
- - -
- 0% - Lines - 0/815 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
CurrentShoppingListPage.vue -
-
0%0/2750%0/10%0/10%0/275
MealSelectionList.vue -
-
0%0/1630%0/10%0/10%0/163
MyShoppingPage.vue -
-
0%0/880%0/10%0/10%0/88
PurchasedShoppingListPage.vue -
-
0%0/670%0/10%0/10%0/67
ShoppingListItem.vue -
-
0%0/2220%0/10%0/10%0/222
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/composables/index.html b/coverage/munch-ease-frontend/src/composables/index.html deleted file mode 100644 index 3312b6f..0000000 --- a/coverage/munch-ease-frontend/src/composables/index.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/composables - - - - - - - - - -
-
-

All files munch-ease-frontend/src/composables

-
- -
- 11.88% - Statements - 29/244 -
- - -
- 50% - Branches - 5/10 -
- - -
- 57.14% - Functions - 4/7 -
- - -
- 11.88% - Lines - 29/244 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
useAlert.ts -
-
100%29/2971.42%5/7100%4/4100%29/29
useAuth.ts -
-
0%0/230%0/10%0/10%0/23
usePagination.ts -
-
0%0/1070%0/10%0/10%0/107
useShopping.ts -
-
0%0/850%0/10%0/10%0/85
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/composables/useAlert.ts.html b/coverage/munch-ease-frontend/src/composables/useAlert.ts.html deleted file mode 100644 index c6a94da..0000000 --- a/coverage/munch-ease-frontend/src/composables/useAlert.ts.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/composables/useAlert.ts - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/composables useAlert.ts

-
- -
- 100% - Statements - 29/29 -
- - -
- 71.42% - Branches - 5/7 -
- - -
- 100% - Functions - 4/4 -
- - -
- 100% - Lines - 29/29 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -301x -1x -1x -1x -1x -1x -1x -1x -1x -2x -2x -2x -1x -2x -2x -2x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -2x -2x - 
import { ref } from 'vue'
- 
-type AlertType = 'success' | 'error' | 'info'
-export type AlertMessage = { heading?: string; message: string; type: AlertType }
- 
-// Singleton reactive alert state for the app
-const current = ref<(AlertMessage & { _ts: number }) | null>(null)
-let timeoutId: ReturnType<typeof setTimeout> | null = null
- 
-function show(message: AlertMessage) {
-  current.value = { ...message, _ts: Date.now() }
-}
- 
-function clear() {
-  current.value = null
-}
- 
-function scheduleAutoDismiss(ms = 5000) {
-  if (timeoutId) clearTimeout(timeoutId)
-  if (!current.value) return
-  timeoutId = setTimeout(() => {
-    clear()
-    timeoutId = null
-  }, ms)
-}
- 
-export function useAlert() {
-  return { current, show, clear, scheduleAutoDismiss }
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/composables/useAuth.ts.html b/coverage/munch-ease-frontend/src/composables/useAuth.ts.html deleted file mode 100644 index 321e566..0000000 --- a/coverage/munch-ease-frontend/src/composables/useAuth.ts.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/composables/useAuth.ts - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/composables useAuth.ts

-
- -
- 0% - Statements - 0/23 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/23 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import { ref } from 'vue'
-import { currentUser as apiCurrentUser, login as apiLogin } from '@/api/auth'
-import type { Person } from '@/domain/types'
-
-const user = ref<Person | null>(null)
-let initialized = false
-
-export async function loadUser() {
-  if (!initialized) {
-    user.value = await apiCurrentUser()
-    initialized = true
-  }
-  return user.value
-}
-
-export async function login(username: string) {
-  user.value = await apiLogin(username)
-  return user.value
-}
-
-export function useAuth() {
-  return { user, loadUser, login }
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/composables/usePagination.ts.html b/coverage/munch-ease-frontend/src/composables/usePagination.ts.html deleted file mode 100644 index f659d3d..0000000 --- a/coverage/munch-ease-frontend/src/composables/usePagination.ts.html +++ /dev/null @@ -1,406 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/composables/usePagination.ts - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/composables usePagination.ts

-
- -
- 0% - Statements - 0/107 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/107 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import { ref, shallowRef, type Ref, type ShallowRef } from 'vue'
-import type { Page } from '@/domain/pagination'
-
-export type PageParams = { cursor?: string | null; limit?: number } & Record<string, unknown>
-export type PageFetcher<T> = (params: PageParams) => Promise<Page<T>>
-
-export function usePagination<T>(
-  fetchPage: PageFetcher<T>,
-  options?: { pageSize?: number }
-): {
-  items: Ref<T[]>
-  next: Ref<string | null>
-  prev: Ref<string | null>
-  total: Ref<number | null>
-  loading: Ref<boolean>
-  error: Ref<unknown>
-  load: (baseParams?: PageParams) => Promise<void>
-  loadNext: () => Promise<void>
-  loadPrev: () => Promise<void>
-  reset: () => void
-} {
-  function makeItemsRef<U>(): ShallowRef<U[]> {
-    return shallowRef<U[]>([])
-  }
-  const items: Ref<T[]> = makeItemsRef<T>()
-  const next: Ref<string | null> = ref<string | null>(null)
-  const prev: Ref<string | null> = ref<string | null>(null)
-  const total: Ref<number | null> = ref<number | null>(null)
-  const loading: Ref<boolean> = ref<boolean>(false)
-  const error: Ref<unknown> = ref<unknown>(null)
-
-  const pageSize = options?.pageSize
-  const lastBaseParams = ref<PageParams>({})
-
-  function assignFromPage(page: Page<T>) {
-    items.value = page.items ?? []
-    next.value = page.next ?? null
-    prev.value = page.prev ?? null
-    total.value = page.total ?? null
-  }
-
-  async function load(baseParams: PageParams = {}) {
-    loading.value = true
-    error.value = null
-    // keep base params without cursor; limit comes from options unless explicitly provided
-    const { limit: _l, ...rest } = baseParams
-    lastBaseParams.value = rest
-    try {
-      const params: PageParams = { ...rest }
-      if (typeof _l === 'number') params.limit = _l
-      else if (typeof pageSize === 'number') params.limit = pageSize
-      const page = await fetchPage(params)
-      assignFromPage(page)
-    } catch (e) {
-      error.value = e
-      items.value = []
-      next.value = null
-      prev.value = null
-      total.value = null
-    } finally {
-      loading.value = false
-    }
-  }
-
-  async function loadWithCursor(cursor: string | null) {
-    if (!cursor) return
-    loading.value = true
-    error.value = null
-    try {
-      const params: PageParams = {
-        ...lastBaseParams.value,
-        cursor,
-      }
-      if (typeof pageSize === 'number') params.limit = pageSize
-      const page = await fetchPage(params)
-      assignFromPage(page)
-    } catch (e) {
-      error.value = e
-      items.value = []
-      next.value = null
-      prev.value = null
-      total.value = null
-    } finally {
-      loading.value = false
-    }
-  }
-
-  async function loadNext() {
-    await loadWithCursor(next.value)
-  }
-
-  async function loadPrev() {
-    await loadWithCursor(prev.value)
-  }
-
-  function reset() {
-    items.value = []
-    next.value = null
-    prev.value = null
-    total.value = null
-    loading.value = false
-    error.value = null
-    lastBaseParams.value = {}
-  }
-
-  return { items, next, prev, total, loading, error, load, loadNext, loadPrev, reset }
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/composables/useShopping.ts.html b/coverage/munch-ease-frontend/src/composables/useShopping.ts.html deleted file mode 100644 index 3d78e49..0000000 --- a/coverage/munch-ease-frontend/src/composables/useShopping.ts.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/composables/useShopping.ts - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/composables useShopping.ts

-
- -
- 0% - Statements - 0/85 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/85 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import * as sdk from '@/api/sdk'
-import type { ShoppingListItemWithRefs, Product, Meal } from '@/domain/types'
-
-export type GroupByProduct = { type: 'product'; product: Product; shoppingListItems: ShoppingListItemWithRefs[] }
-export type GroupByName = { type: 'name'; name: string; shoppingListItems: ShoppingListItemWithRefs[] }
-export type Group = GroupByProduct | GroupByName
-
-export function groupsToItems(groups: Group[]): ShoppingListItemWithRefs[] {
-  return groups.map((g) => g.shoppingListItems).flat()
-}
-
-export function uniqueMeals(shoppingListItems: ShoppingListItemWithRefs[]): Meal[] {
-  const mealsWithDuplicates = shoppingListItems.map((item) => item.meal).filter((m): m is Meal => !!m)
-  const mealsLookup: Record<string | number, Meal> = mealsWithDuplicates.reduce<Record<string | number, Meal>>(
-    (acc, meal) => {
-      acc[meal.id] ??= meal
-      return acc
-    },
-    {}
-  )
-  return Object.values(mealsLookup)
-}
-
-export function itemsToGroups(shoppingListItems: ShoppingListItemWithRefs[]): Group[] {
-  const ingredients_by_product_id: Record<string | number, GroupByProduct> = {}
-  const ingredients_by_name: Record<string, GroupByName> = {}
-  for (const item of shoppingListItems) {
-    if (item.ingredient?.product) {
-      let group = ingredients_by_product_id[item.ingredient.product.id]
-      if (!group) {
-        group = ingredients_by_product_id[item.ingredient.product.id] = {
-          type: 'product',
-          product: item.ingredient.product,
-          shoppingListItems: [],
-        }
-      }
-      group.shoppingListItems.push(item)
-    } else {
-      const name = item.ingredient?.name ?? ''
-      let group = ingredients_by_name[name]
-      if (!group) {
-        group = ingredients_by_name[name] = {
-          type: 'name',
-          name,
-          shoppingListItems: [],
-        }
-      }
-      group.shoppingListItems.push(item)
-    }
-  }
-  return [...Object.values(ingredients_by_product_id), ...Object.values(ingredients_by_name)]
-}
-
-export function useShopping() {
-  const groupsFrom = (items?: ShoppingListItemWithRefs[]): Group[] => itemsToGroups(items ?? [])
-  const mealsFrom = (items?: ShoppingListItemWithRefs[]): Meal[] => uniqueMeals(items ?? [])
-  return {
-    getCurrentShoppingList: sdk.getCurrentShoppingList,
-    getShoppingList: sdk.getShoppingList,
-    purchaseShoppingList: sdk.purchaseShoppingList,
-    requestMeal: sdk.requestMeal,
-    unrequestMeal: sdk.unrequestMeal,
-    getMyShoppingList: sdk.getMyShoppingList,
-    saveMyShoppingList: sdk.saveMyShoppingList,
-    // View-model helpers
-    groupsFrom,
-    mealsFrom,
-    async purchaseFromGroups(groups: Group[]) {
-      const items = groupsToItems(groups).map((i): sdk.PurchaseRequest => {
-        if (typeof i.id === 'number' && i.id >= 0) {
-          return { type: 'existing', id: i.id, personId: i.personId, ingredientId: i.ingredient?.id ?? null }
-        }
-        return {
-          type: 'refs',
-          personId: i.personId,
-          ingredientId: i.ingredient?.id ?? null,
-          recipeId: i.recipe?.id ?? null,
-          mealId: i.meal?.id ?? null,
-        }
-      })
-      if (!items?.length) return null
-      return sdk.purchaseShoppingList(items)
-    },
-  }
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/dateformats.ts.html b/coverage/munch-ease-frontend/src/dateformats.ts.html deleted file mode 100644 index 3772de7..0000000 --- a/coverage/munch-ease-frontend/src/dateformats.ts.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/dateformats.ts - - - - - - - - - -
-
-

All files / munch-ease-frontend/src dateformats.ts

-
- -
- 0% - Statements - 0/15 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/15 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
function plural(num: number, unit: string): string {
-  const whole = Math.floor(num)
-  return whole + ' ' + unit + (whole === 1 ? '' : 's')
-}
-
-export function ago(date: Date): string {
-  const now = new Date()
-  const diff = now.getTime() - date.getTime()
-  if (diff < 1000) return 'just now'
-  if (diff < 60 * 1000) return plural(diff / 1000, 'second') + ' ago'
-  if (diff < 60 * 60 * 1000) return plural(diff / (60 * 1000), 'minute') + ' ago'
-  if (diff < 24 * 60 * 60 * 1000) return plural(diff / (60 * 60 * 1000), 'hour') + ' ago'
-  if (diff < 7 * 24 * 60 * 60 * 1000) return plural(diff / (24 * 60 * 60 * 1000), 'day') + ' ago'
-  return date.toLocaleDateString()
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/domain/decoders.ts.html b/coverage/munch-ease-frontend/src/domain/decoders.ts.html deleted file mode 100644 index 89b8600..0000000 --- a/coverage/munch-ease-frontend/src/domain/decoders.ts.html +++ /dev/null @@ -1,433 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/domain/decoders.ts - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/domain decoders.ts

-
- -
- 79.31% - Statements - 92/116 -
- - -
- 76.31% - Branches - 29/38 -
- - -
- 81.81% - Functions - 9/11 -
- - -
- 79.31% - Lines - 92/116 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -1171x -1x -1x -1x -44x -44x -44x -1x -1x -1x -16x -16x -16x -16x -7x -7x -7x -7x -7x -7x -7x -7x -7x -7x -1x -1x -4x -4x -4x -4x -4x -4x -4x -1x -1x -9x -9x -2x -7x -9x -9x -9x -9x -9x -9x -9x -9x -9x -9x -9x -9x -9x -1x -  -  -  -  -  -  -  -1x -1x -3x -3x -3x -3x -1x -1x -1x -1x -1x -1x -3x -3x -3x -3x -3x -3x -3x -1x -1x -12x -12x -12x -12x -1x -1x -4x -4x -4x -4x -4x -4x -4x -4x -4x -1x -1x -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import type { RecipeOut, Recipe, MealOut, Meal, MealRecipe, Ingredient as DomainIngredient, ShoppingList, ShoppingListItem, ShoppingListItemWithRefs, MealInput } from './types'
-import type { components } from '@/api/types'
- 
-export function toDate(value: string | Date | null | undefined): Date | null {
-  if (value === null || value === undefined) return null
-  return typeof value === 'string' ? new Date(value) : value
-}
- 
-// Small helper to decode optional lookup maps without repeating loops everywhere
-export function decodeLookup<TIn, TOut>(
-  raw: Record<string, TIn> | null | undefined,
-  decode: (v: TIn) => TOut
-): Record<string, TOut> | undefined {
-  if (!raw) return undefined
-  const out: Record<string, TOut> = {}
-  for (const key of Object.keys(raw)) {
-    if (!Object.prototype.hasOwnProperty.call(raw, key)) continue
-    const maybe = raw[key]
-    if (maybe === undefined) continue
-    const decoded = decode(maybe)
-    out[String(key)] = decoded
-  }
-  return out
-}
- 
-export function decodeRecipe(r: RecipeOut | null | undefined): Recipe {
-  if (!r) throw new Error('Invalid recipe payload')
-  return {
-    ...r,
-    dateCreated: toDate(r.dateCreated),
-    dateHidden: toDate(r.dateHidden),
-  }
-}
- 
-export function decodeMeal(m: MealOut | null | undefined): Meal {
-  if (!m) throw new Error('Invalid meal payload')
-  const recipes = Array.isArray(m.recipes)
-    ? m.recipes.map((mr) => decodeMealRecipe(mr))
-    : []
-  
-  return {
-    ...m,
-    suggestedDate: toDate(m.suggestedDate),
-    purchaseDate: toDate(m.purchaseDate),
-    consumedDate: toDate(m.consumedDate),
-    recipes,
-    chefs: m.chefs ?? [],
-    consumers: m.consumers ?? [],
-    cleanup: m.cleanup ?? [],
-    extraIngredients: m.extraIngredients ?? [],
-  }
-}
- 
-function decodeMealRecipe(mr: components['schemas']['MealRecipe-Output'] | null | undefined): MealRecipe {
-  if (!mr) throw new Error('Invalid meal recipe payload')
-  return {
-    ...mr,
-    recipe: mr.recipe ? decodeRecipe(mr.recipe) : null,
-  }
-}
- 
-export function decodeIngredient(i: components['schemas']['Ingredient'] | null | undefined): DomainIngredient {
-  if (!i) throw new Error('Invalid ingredient payload')
-  // API guarantees quantity is a number; pass through
-  return { ...i }
-}
- 
-export function decodeIngredients(list: components['schemas']['Ingredient'][] | null | undefined): DomainIngredient[] {
-  if (!Array.isArray(list)) return []
-  return list.map((i) => decodeIngredient(i))
-}
- 
-function decodeShoppingListItem(i: components['schemas']['ShoppingListItem'] | null | undefined): ShoppingListItem {
-  if (!i) throw new Error('Invalid shopping list item payload')
-  return {
-    ...i,
-    createdDate: toDate(i.createdDate),
-  }
-}
- 
-export function decodeShoppingListItems(list: components['schemas']['ShoppingListItem'][] | null | undefined): ShoppingListItemWithRefs[] {
-  if (!Array.isArray(list)) return []
-  // Build a new array with item clones to allow optional refs to be attached later
-  return list.map((raw) => ({ ...decodeShoppingListItem(raw) }))
-}
- 
-export function decodeShoppingList(v: components['schemas']['ShoppingList'] | null | undefined): ShoppingList {
-  if (!v) throw new Error('Invalid shopping list payload')
-  const { items: rawItems, ...rest } = v
-  const items = Array.isArray(rawItems) ? decodeShoppingListItems(rawItems) : undefined
-  return {
-    ...rest,
-    createdDate: toDate(v.createdDate),
-    ...(items ? { items } : {}),
-  }
-}
- 
-// Helper to convert domain Meal to MealInput, keeping Date→string conversion in boundary
-export function toMealInput(meal: Meal): MealInput {
-  return {
-    id: meal.id,
-    suggestedDate: meal.suggestedDate ? meal.suggestedDate.toISOString() : new Date().toISOString(),
-    consumedDate: meal.consumedDate ? meal.consumedDate.toISOString() : null,
-    purchaseDate: meal.purchaseDate ? meal.purchaseDate.toISOString() : null,
-    chefs: meal.chefs,
-    cleanup: meal.cleanup,
-    consumers: meal.consumers,
-    recipes: meal.recipes.map((r) => ({
-      mealId: r.mealId,
-      recipeId: r.recipeId,
-      servings: r.servings,
-      recipe: null,
-    })),
-    extraIngredients: meal.extraIngredients,
-  }
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/domain/index.html b/coverage/munch-ease-frontend/src/domain/index.html deleted file mode 100644 index eb276c3..0000000 --- a/coverage/munch-ease-frontend/src/domain/index.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/domain - - - - - - - - - -
-
-

All files munch-ease-frontend/src/domain

-
- -
- 81.39% - Statements - 105/129 -
- - -
- 73.8% - Branches - 31/42 -
- - -
- 83.33% - Functions - 10/12 -
- - -
- 81.39% - Lines - 105/129 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
decoders.ts -
-
79.31%92/11676.31%29/3881.81%9/1179.31%92/116
pagination.ts -
-
100%13/1350%2/4100%1/1100%13/13
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/domain/pagination.ts.html b/coverage/munch-ease-frontend/src/domain/pagination.ts.html deleted file mode 100644 index 7455e5a..0000000 --- a/coverage/munch-ease-frontend/src/domain/pagination.ts.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/domain/pagination.ts - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/domain pagination.ts

-
- -
- 100% - Statements - 13/13 -
- - -
- 50% - Branches - 2/4 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 13/13 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -141x -1x -1x -1x -1x -2x -2x -2x -2x -2x -2x -2x -2x - 
export type Page<T> = { items: T[]; next?: string | null; prev?: string | null; total?: number | null }
- 
-type PageLike<T> = { items?: T[]; nextCursor?: string | null; prevCursor?: string | null; total?: number | null }
- 
-export function fromOpenApiPage<TIn, TOut>(page: PageLike<TIn> | null | undefined, mapItem: (i: TIn) => TOut): Page<TOut> {
-  if (!page) return { items: [] }
-  return {
-    items: (page.items ?? []).map((i) => mapItem(i)),
-    next: page.nextCursor ?? null,
-    prev: page.prevCursor ?? null,
-    total: page.total ?? null,
-  }
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/index.html b/coverage/munch-ease-frontend/src/index.html deleted file mode 100644 index 741143d..0000000 --- a/coverage/munch-ease-frontend/src/index.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src - - - - - - - - - -
-
-

All files munch-ease-frontend/src

-
- -
- 47.52% - Statements - 125/263 -
- - -
- 57.14% - Branches - 12/21 -
- - -
- 57.14% - Functions - 4/7 -
- - -
- 47.52% - Lines - 125/263 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
App.vue -
-
0%0/980%0/10%0/10%0/98
dateformats.ts -
-
0%0/150%0/10%0/10%0/15
main.ts -
-
0%0/110%0/10%0/10%0/11
units.ts -
-
89.92%125/13966.66%12/18100%4/489.92%125/139
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/main.ts.html b/coverage/munch-ease-frontend/src/main.ts.html deleted file mode 100644 index df49008..0000000 --- a/coverage/munch-ease-frontend/src/main.ts.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/main.ts - - - - - - - - - -
-
-

All files / munch-ease-frontend/src main.ts

-
- -
- 0% - Statements - 0/11 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/11 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12  -  -  -  -  -  -  -  -  -  -  - 
import { createApp } from 'vue'
-import App from './App.vue'
-import { createAppRouter } from '@/router'
-import { currentUser } from '@/api/auth'
-
-// Create the router with an auth callback to check current user
-const router = createAppRouter(() => currentUser())
-
-const app = createApp(App)
-app.use(router)
-app.mount('#app')
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/router/helpers.ts.html b/coverage/munch-ease-frontend/src/router/helpers.ts.html deleted file mode 100644 index 4cc50f3..0000000 --- a/coverage/munch-ease-frontend/src/router/helpers.ts.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/router/helpers.ts - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/router helpers.ts

-
- -
- 0% - Statements - 0/27 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/27 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
/**
- * Route parameter and query parsing helpers
- * Centralizes route param type handling to avoid runtime checks in components
- */
-
-import type { LocationQueryValue } from 'vue-router'
-
-/**
- * Parse a route param (string | string[] | undefined) to a number ID
- * Returns null if param is missing or invalid
- */
-export function parseRouteId(param: string | string[] | undefined): number | null {
-  if (!param) return null
-  const str = Array.isArray(param) ? param[0] : param
-  if (!str) return null
-  const id = parseInt(str, 10)
-  return isNaN(id) || id < 0 ? null : id
-}
-
-/**
- * Parse a route query param to a string
- * Returns empty string if param is missing, null, or is an array
- */
-export function parseQueryString(param: LocationQueryValue | LocationQueryValue[] | undefined): string {
-  if (!param) return ''
-  return Array.isArray(param) ? '' : param
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/router/index.html b/coverage/munch-ease-frontend/src/router/index.html deleted file mode 100644 index a5d79af..0000000 --- a/coverage/munch-ease-frontend/src/router/index.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/router - - - - - - - - - -
-
-

All files munch-ease-frontend/src/router

-
- -
- 0% - Statements - 0/106 -
- - -
- 0% - Branches - 0/2 -
- - -
- 0% - Functions - 0/2 -
- - -
- 0% - Lines - 0/106 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
helpers.ts -
-
0%0/270%0/10%0/10%0/27
index.ts -
-
0%0/790%0/10%0/10%0/79
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/router/index.ts.html b/coverage/munch-ease-frontend/src/router/index.ts.html deleted file mode 100644 index 4be7ba1..0000000 --- a/coverage/munch-ease-frontend/src/router/index.ts.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/router/index.ts - - - - - - - - - -
-
-

All files / munch-ease-frontend/src/router index.ts

-
- -
- 0% - Statements - 0/79 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/79 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import { createRouter, createWebHashHistory, Router } from 'vue-router'
-import type { RouteRecordRaw } from 'vue-router'
-
-// Lazy-loaded route components
-const LoginPage = () => import('@/components/LoginPage.vue')
-const RecipesPage = () => import('@/components/recipes/RecipesPage.vue')
-const MealPlanPage = () => import('@/components/meals/MealPlanPage.vue')
-const MyShoppingPage = () => import('@/components/shopping/MyShoppingPage.vue')
-const PurchasedShoppingListPage = () => import('@/components/shopping/PurchasedShoppingListPage.vue')
-const CurrentShoppingListPage = () => import('@/components/shopping/CurrentShoppingListPage.vue')
-const EditMealPage = () => import('@/components/meals/EditMealPage.vue')
-const EditRecipePage = () => import('@/components/recipes/EditRecipePage.vue')
-
-export function createAppRouter(getCurrentUser: () => Promise<unknown> | unknown): Router {
-  const routes: RouteRecordRaw[] = [
-    { path: '/', redirect: { name: 'mealplan' } },
-    { path: '/login', name: 'login', component: LoginPage },
-    { path: '/mealplan', name: 'mealplan', component: MealPlanPage, meta: { requiresAuth: true } },
-    {
-      path: '/shopping',
-      name: 'shopping',
-      component: MyShoppingPage,
-      meta: { requiresAuth: true },
-    },
-    {
-      path: '/shopping/current',
-      name: 'shopping-current',
-      component: CurrentShoppingListPage,
-      meta: { requiresAuth: true },
-    },
-    {
-      path: '/shopping/:id',
-      name: 'shopping-list',
-      component: PurchasedShoppingListPage,
-      props: true,
-      meta: { requiresAuth: true },
-    },
-    { path: '/recipes', name: 'recipes', component: RecipesPage, meta: { requiresAuth: true } },
-    {
-      path: '/recipes/add',
-      name: 'recipe-add',
-      component: EditRecipePage,
-      meta: { requiresAuth: true },
-    },
-    {
-      path: '/recipes/:id',
-      name: 'recipe-edit',
-      component: EditRecipePage,
-      props: true,
-      meta: { requiresAuth: true },
-    },
-    { path: '/meals/add', name: 'meal-add', component: EditMealPage, meta: { requiresAuth: true } },
-    {
-      path: '/meals/:id',
-      name: 'meal-edit',
-      component: EditMealPage,
-      props: true,
-      meta: { requiresAuth: true },
-    },
-  ]
-
-  const router = createRouter({
-    history: createWebHashHistory(),
-    routes,
-  })
-
-  router.beforeEach(async (to) => {
-    if (!to.meta.requiresAuth) return true
-    try {
-      const user = await getCurrentUser()
-      if (user) return true
-    } catch (_) {
-      /* ignore */
-    }
-    return { name: 'login', query: { redirect: to.fullPath } }
-  })
-
-  return router
-}
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/src/units.ts.html b/coverage/munch-ease-frontend/src/units.ts.html deleted file mode 100644 index aab9142..0000000 --- a/coverage/munch-ease-frontend/src/units.ts.html +++ /dev/null @@ -1,502 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/src/units.ts - - - - - - - - - -
-
-

All files / munch-ease-frontend/src units.ts

-
- -
- 89.92% - Statements - 125/139 -
- - -
- 66.66% - Branches - 12/18 -
- - -
- 100% - Functions - 4/4 -
- - -
- 89.92% - Lines - 125/139 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -1401x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -16x -16x -16x -1x -7x -7x -11x -11x -11x -  -  -1x -1x -9x -7x -7x -9x -7x -7x -7x -7x -7x -  -  -  -  -  -  -  -  -  -  -  -  -1x -1x -1x -1x -1x -1x -1x -4x -4x -4x -4x -4x -1x -1x - 
const UNIT_KEYS_ARRAY: readonly ['kg', 'litres', 'items'] = ['kg', 'litres', 'items']
-type UnitKey = typeof UNIT_KEYS_ARRAY[number]
- 
-const equivalentUnits: Record<UnitKey, Record<string, number>> = {
-  kg: {
-    kgs: 1,
-    kilograms: 1,
-    kilogram: 1,
- 
-    g: 1000,
-    gram: 1000,
-    grams: 1000,
- 
-    lb: 2.20462,
-    lbs: 2.20462,
-    pound: 2.20462,
-    pounds: 2.20462,
-  },
-  litres: {
-    l: 1,
-    liter: 1,
-    litre: 1,
- 
-    ml: 1000,
-    milliliters: 1000,
-    milliliter: 1000,
- 
-    'fl oz': 33.814,
-    'fluid ounce': 33.814,
-    'fluid ounces': 33.814,
- 
-    cup: 4.22675,
-    cups: 4.22675,
- 
-    tbsp: 67.628,
-    tablespoon: 67.628,
-    tablespoons: 67.628,
- 
-    tsp: 202.884,
-    teaspoon: 202.884,
-    teaspoons: 202.884,
- 
-    pt: 2.11338,
-    pint: 2.11338,
-    pints: 2.11338,
- 
-    qt: 1.05669,
-    quart: 1.05669,
-    quarts: 1.05669,
- 
-    gal: 0.264172,
-    gallon: 0.264172,
-    gallons: 0.264172,
- 
-    oz: 35.1951,
-    ounce: 35.1951,
-  },
-  items: {
-    item: 1,
-    items: 1,
-    pcs: 1,
-    piece: 1,
-    pieces: 1,
-    florets: 8, // Broccoli
-    head: 1, // Broccoli
-    heads: 1, // Broccoli
-    slice: 10, // Bread
-    slices: 10, // Bread
-    loaf: 1, // Bread
-    loaves: 1, // Bread
-    cloves: 8, // Garlic
-    bulb: 1, // Garlic
-    bulbs: 1, // Garlic
-    stalk: 1, // Celery
-    stalks: 1, // Celery
-    bunch: 1, // Cilantro
-    bunches: 1, // Cilantro
-    sprig: 1, // Cilantro
-    sprigs: 1, // Cilantro
-    cans: 1, // Canned goods
-    can: 1, // Canned goods
-    pack: 1, // Packaged goods
-    packs: 1, // Packaged goods
-    package: 1, // Packaged goods
-    packages: 1, // Packaged goods
-    container: 1, // Packaged goods
-    containers: 1, // Packaged goods
-  },
-}
- 
-const UNIT_KEYS_SET: ReadonlySet<string> = new Set(UNIT_KEYS_ARRAY)
-function isUnitKey(value: string): value is UnitKey {
-  return UNIT_KEYS_SET.has(value)
-}
- 
-function getBaseUnit(unit: string): UnitKey | null {
-  for (const type of UNIT_KEYS_ARRAY) {
-    const group = equivalentUnits[type]
-    if (unit in group) return type
-  }
-  return null
-}
- 
-export function getConversionFactor(unit: string): { unit: UnitKey | string; factor: number } | null {
-  if (isUnitKey(unit)) return { unit, factor: 1 }
- 
-  const unitLower = String(unit).toLowerCase()
-  if (isUnitKey(unitLower)) return { unit: unitLower, factor: 1 }
- 
-  const baseUnit = getBaseUnit(unit)
-  if (baseUnit) {
-    const factor = equivalentUnits[baseUnit]?.[unit]
-    if (typeof factor === 'number') return { unit: baseUnit, factor }
-    return null
-  }
-
-  const baseUnitLower = getBaseUnit(unitLower)
-  if (baseUnitLower) {
-    const factor = equivalentUnits[baseUnitLower]?.[unitLower]
-    if (typeof factor === 'number') return { unit: baseUnitLower, factor }
-    return null
-  }
-
-  return null
-}
- 
-type Quantity = { quantity: number; unit: string }
-type Total = { unit: string; quantity: number }
- 
-export function calculateTotals(quantityList: Quantity[]): Total[] {
-  const totals: Record<string, number> = {}
-  for (const quantity of quantityList) {
-    const baseUnit = getConversionFactor(quantity.unit) ?? { unit: quantity.unit, factor: 1 }
-    const factor = baseUnit.factor
-    const unit = String(baseUnit.unit)
-    totals[unit] = (totals[unit] ?? 0) + quantity.quantity / factor
-  }
-  return Object.keys(totals).map((unit) => ({ unit, quantity: totals[unit] ?? 0 }))
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/munch-ease-frontend/vue.config.js.html b/coverage/munch-ease-frontend/vue.config.js.html deleted file mode 100644 index 5ad4745..0000000 --- a/coverage/munch-ease-frontend/vue.config.js.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - Code coverage report for munch-ease-frontend/vue.config.js - - - - - - - - - -
-
-

All files / munch-ease-frontend vue.config.js

-
- -
- 0% - Statements - 0/6 -
- - -
- 0% - Branches - 0/1 -
- - -
- 0% - Functions - 0/1 -
- - -
- 0% - Lines - 0/6 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7  -  -  -  -  -  - 
/* eslint-disable @typescript-eslint/no-var-requires */
-const { defineConfig } = require('@vue/cli-service')
-/* eslint-enable @typescript-eslint/no-var-requires */
-module.exports = defineConfig({
-  transpileDependencies: true,
-})
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/prettify.css b/coverage/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/coverage/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/coverage/prettify.js b/coverage/prettify.js deleted file mode 100644 index b322523..0000000 --- a/coverage/prettify.js +++ /dev/null @@ -1,2 +0,0 @@ -/* eslint-disable */ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/coverage/sort-arrow-sprite.png b/coverage/sort-arrow-sprite.png deleted file mode 100644 index 6ed68316eb3f65dec9063332d2f69bf3093bbfab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qh}Z>jv*C{$p!i!8j}?a+@3A= zIAGwzjijN=FBi!|L1t?LM;Q;gkwn>2cAy-KV{dn nf0J1DIvEHQu*n~6U}x}qyky7vi4|9XhBJ7&`njxgN@xNA8m%nc diff --git a/coverage/sorter.js b/coverage/sorter.js deleted file mode 100644 index 4ed70ae..0000000 --- a/coverage/sorter.js +++ /dev/null @@ -1,210 +0,0 @@ -/* eslint-disable */ -var addSorting = (function() { - 'use strict'; - var cols, - currentSort = { - index: 0, - desc: false - }; - - // returns the summary table element - function getTable() { - return document.querySelector('.coverage-summary'); - } - // returns the thead element of the summary table - function getTableHeader() { - return getTable().querySelector('thead tr'); - } - // returns the tbody element of the summary table - function getTableBody() { - return getTable().querySelector('tbody'); - } - // returns the th element for nth column - function getNthColumn(n) { - return getTableHeader().querySelectorAll('th')[n]; - } - - function onFilterInput() { - const searchValue = document.getElementById('fileSearch').value; - const rows = document.getElementsByTagName('tbody')[0].children; - - // Try to create a RegExp from the searchValue. If it fails (invalid regex), - // it will be treated as a plain text search - let searchRegex; - try { - searchRegex = new RegExp(searchValue, 'i'); // 'i' for case-insensitive - } catch (error) { - searchRegex = null; - } - - for (let i = 0; i < rows.length; i++) { - const row = rows[i]; - let isMatch = false; - - if (searchRegex) { - // If a valid regex was created, use it for matching - isMatch = searchRegex.test(row.textContent); - } else { - // Otherwise, fall back to the original plain text search - isMatch = row.textContent - .toLowerCase() - .includes(searchValue.toLowerCase()); - } - - row.style.display = isMatch ? '' : 'none'; - } - } - - // loads the search box - function addSearchBox() { - var template = document.getElementById('filterTemplate'); - var templateClone = template.content.cloneNode(true); - templateClone.getElementById('fileSearch').oninput = onFilterInput; - template.parentElement.appendChild(templateClone); - } - - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; - - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = - colNode.innerHTML + ''; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function(a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function(a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc - ? ' sorted-desc' - : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function() { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i = 0; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function() { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(); - addSearchBox(); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/depcheck.baseline.json b/depcheck.baseline.json deleted file mode 100644 index 36066b3..0000000 --- a/depcheck.baseline.json +++ /dev/null @@ -1 +0,0 @@ -{"dependencies":["core-js"],"devDependencies":["@babel/core","@babel/eslint-parser","@vue/cli-plugin-eslint","@vue/cli-plugin-typescript","node-fetch","undici"],"missing":{"vue-eslint-parser":["/home/jables/source/doof/munch-ease-frontend/package.json"],"vite":["/home/jables/source/doof/munch-ease-frontend/tsconfig.json"]},"using":{"@vue/cli-plugin-babel":["/home/jables/source/doof/munch-ease-frontend/babel.config.js"],"@vue/cli-service":["/home/jables/source/doof/munch-ease-frontend/babel.config.js","/home/jables/source/doof/munch-ease-frontend/package.json","/home/jables/source/doof/munch-ease-frontend/vue.config.js"],"husky":["/home/jables/source/doof/munch-ease-frontend/package.json"],"openapi-typescript":["/home/jables/source/doof/munch-ease-frontend/package.json"],"prettier":["/home/jables/source/doof/munch-ease-frontend/package.json"],"typescript":["/home/jables/source/doof/munch-ease-frontend/package.json","/home/jables/source/doof/munch-ease-frontend/tests/test-setup.js","/home/jables/source/doof/munch-ease-frontend/src/main.ts","/home/jables/source/doof/munch-ease-frontend/src/shims-vue.d.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/useAlert.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/useAuth.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/usePagination.ts","/home/jables/source/doof/munch-ease-frontend/src/components/AlertToast.vue","/home/jables/source/doof/munch-ease-frontend/src/components/LoginPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/EditRecipePage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/DatePicker.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/EditMealPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealCard.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealPlanPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/PersonList.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/IngredientLine.vue"],"vitest":["/home/jables/source/doof/munch-ease-frontend/package.json","/home/jables/source/doof/munch-ease-frontend/vitest.config.js","/home/jables/source/doof/munch-ease-frontend/tests/mealMapper.test.js","/home/jables/source/doof/munch-ease-frontend/tests/meals.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/meals.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/parse.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/parse.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/persons.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/persons.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/recipes.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/recipes.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shopping.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shopping.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shoppingListMapper.test.js","/home/jables/source/doof/munch-ease-frontend/tests/test-setup.js","/home/jables/source/doof/munch-ease-frontend/tests/units.test.js","/home/jables/source/doof/munch-ease-frontend/tests/useAlert.test.js","/home/jables/source/doof/munch-ease-frontend/tests/useAlert.test.ts"],"vue-tsc":["/home/jables/source/doof/munch-ease-frontend/package.json"],"@types/node":["/home/jables/source/doof/munch-ease-frontend/package.json","/home/jables/source/doof/munch-ease-frontend/tsconfig.json","/home/jables/source/doof/munch-ease-frontend/vitest.config.js","/home/jables/source/doof/munch-ease-frontend/tests/mealMapper.test.js","/home/jables/source/doof/munch-ease-frontend/tests/meals.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/meals.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/parse.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/parse.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/persons.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/persons.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/recipes.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/recipes.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shopping.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shopping.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shoppingListMapper.test.js","/home/jables/source/doof/munch-ease-frontend/tests/test-setup.js","/home/jables/source/doof/munch-ease-frontend/tests/units.test.js","/home/jables/source/doof/munch-ease-frontend/tests/useAlert.test.js","/home/jables/source/doof/munch-ease-frontend/tests/useAlert.test.ts"],"vue-eslint-parser":["/home/jables/source/doof/munch-ease-frontend/package.json"],"@typescript-eslint/eslint-plugin":["/home/jables/source/doof/munch-ease-frontend/package.json"],"eslint-plugin-vue":["/home/jables/source/doof/munch-ease-frontend/package.json"],"eslint":["/home/jables/source/doof/munch-ease-frontend/package.json"],"@typescript-eslint/parser":["/home/jables/source/doof/munch-ease-frontend/package.json"],"lint-staged":["/home/jables/source/doof/munch-ease-frontend/package.json"],"vite":["/home/jables/source/doof/munch-ease-frontend/tsconfig.json"],"msw":["/home/jables/source/doof/munch-ease-frontend/tests/test-setup.js"],"vue":["/home/jables/source/doof/munch-ease-frontend/src/main.ts","/home/jables/source/doof/munch-ease-frontend/src/shims-vue.d.ts","/home/jables/source/doof/munch-ease-frontend/src/router/helpers.ts","/home/jables/source/doof/munch-ease-frontend/src/router/index.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/useAlert.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/useAuth.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/usePagination.ts","/home/jables/source/doof/munch-ease-frontend/src/components/AlertToast.vue","/home/jables/source/doof/munch-ease-frontend/src/components/LoginPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/EditRecipePage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipesPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/DatePicker.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/EditMealPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealCard.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealPlanPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/PersonList.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/IngredientLine.vue"],"vue-router":["/home/jables/source/doof/munch-ease-frontend/src/router/helpers.ts","/home/jables/source/doof/munch-ease-frontend/src/router/index.ts","/home/jables/source/doof/munch-ease-frontend/src/components/LoginPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/EditRecipePage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipesPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/EditMealPage.vue"],"openapi-fetch":["/home/jables/source/doof/munch-ease-frontend/src/api/client.ts"]},"invalidFiles":{},"invalidDirs":{}} diff --git a/depcheck.current.json b/depcheck.current.json deleted file mode 100644 index 99b311e..0000000 --- a/depcheck.current.json +++ /dev/null @@ -1 +0,0 @@ -{"dependencies":["core-js"],"devDependencies":["@babel/core","@babel/eslint-parser","@vitest/coverage-v8","@vue/cli-plugin-eslint","@vue/cli-plugin-typescript","node-fetch","undici"],"missing":{"vue-eslint-parser":["/home/jables/source/doof/munch-ease-frontend/package.json"],"vite":["/home/jables/source/doof/munch-ease-frontend/tsconfig.json"]},"using":{"@vue/cli-plugin-babel":["/home/jables/source/doof/munch-ease-frontend/babel.config.js"],"@vue/cli-service":["/home/jables/source/doof/munch-ease-frontend/babel.config.js","/home/jables/source/doof/munch-ease-frontend/package.json","/home/jables/source/doof/munch-ease-frontend/vue.config.js"],"husky":["/home/jables/source/doof/munch-ease-frontend/package.json"],"openapi-typescript":["/home/jables/source/doof/munch-ease-frontend/package.json"],"prettier":["/home/jables/source/doof/munch-ease-frontend/package.json"],"typescript":["/home/jables/source/doof/munch-ease-frontend/package.json","/home/jables/source/doof/munch-ease-frontend/tests/test-setup.js","/home/jables/source/doof/munch-ease-frontend/src/main.ts","/home/jables/source/doof/munch-ease-frontend/src/shims-vue.d.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/useAlert.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/useAuth.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/usePagination.ts","/home/jables/source/doof/munch-ease-frontend/src/components/AlertToast.vue","/home/jables/source/doof/munch-ease-frontend/src/components/LoginPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/EditRecipePage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/DatePicker.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/EditMealPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealCard.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealPlanPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/PersonList.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/IngredientLine.vue"],"vitest":["/home/jables/source/doof/munch-ease-frontend/package.json","/home/jables/source/doof/munch-ease-frontend/vitest.config.js","/home/jables/source/doof/munch-ease-frontend/tests/mealMapper.test.js","/home/jables/source/doof/munch-ease-frontend/tests/meals.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/meals.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/parse.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/parse.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/persons.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/persons.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/recipes.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/recipes.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shopping.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shopping.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shoppingListMapper.test.js","/home/jables/source/doof/munch-ease-frontend/tests/test-setup.js","/home/jables/source/doof/munch-ease-frontend/tests/units.test.js","/home/jables/source/doof/munch-ease-frontend/tests/useAlert.test.ts"],"vue-tsc":["/home/jables/source/doof/munch-ease-frontend/package.json"],"@types/node":["/home/jables/source/doof/munch-ease-frontend/package.json","/home/jables/source/doof/munch-ease-frontend/tsconfig.json","/home/jables/source/doof/munch-ease-frontend/vitest.config.js","/home/jables/source/doof/munch-ease-frontend/tests/mealMapper.test.js","/home/jables/source/doof/munch-ease-frontend/tests/meals.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/meals.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/parse.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/parse.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/persons.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/persons.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/recipes.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/recipes.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shopping.api.errors.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shopping.api.test.js","/home/jables/source/doof/munch-ease-frontend/tests/shoppingListMapper.test.js","/home/jables/source/doof/munch-ease-frontend/tests/test-setup.js","/home/jables/source/doof/munch-ease-frontend/tests/units.test.js","/home/jables/source/doof/munch-ease-frontend/tests/useAlert.test.ts"],"vue-eslint-parser":["/home/jables/source/doof/munch-ease-frontend/package.json"],"@typescript-eslint/eslint-plugin":["/home/jables/source/doof/munch-ease-frontend/package.json"],"eslint-plugin-vue":["/home/jables/source/doof/munch-ease-frontend/package.json"],"eslint":["/home/jables/source/doof/munch-ease-frontend/package.json"],"@typescript-eslint/parser":["/home/jables/source/doof/munch-ease-frontend/package.json"],"lint-staged":["/home/jables/source/doof/munch-ease-frontend/package.json"],"vite":["/home/jables/source/doof/munch-ease-frontend/tsconfig.json"],"msw":["/home/jables/source/doof/munch-ease-frontend/tests/test-setup.js"],"vue":["/home/jables/source/doof/munch-ease-frontend/src/main.ts","/home/jables/source/doof/munch-ease-frontend/src/shims-vue.d.ts","/home/jables/source/doof/munch-ease-frontend/src/router/helpers.ts","/home/jables/source/doof/munch-ease-frontend/src/router/index.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/useAlert.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/useAuth.ts","/home/jables/source/doof/munch-ease-frontend/src/composables/usePagination.ts","/home/jables/source/doof/munch-ease-frontend/src/components/AlertToast.vue","/home/jables/source/doof/munch-ease-frontend/src/components/LoginPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/ShoppingListItem.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/EditRecipePage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipeSearchBox.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipesPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/DatePicker.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/EditMealPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealCard.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/MealPlanPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/PersonList.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/CompactParsedIngredient.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/EditableIngredientsPanel.vue","/home/jables/source/doof/munch-ease-frontend/src/components/ingredients/IngredientLine.vue"],"vue-router":["/home/jables/source/doof/munch-ease-frontend/src/router/helpers.ts","/home/jables/source/doof/munch-ease-frontend/src/router/index.ts","/home/jables/source/doof/munch-ease-frontend/src/components/LoginPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/CurrentShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/MyShoppingPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/shopping/PurchasedShoppingListPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/EditRecipePage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/recipes/RecipesPage.vue","/home/jables/source/doof/munch-ease-frontend/src/components/meals/EditMealPage.vue"],"openapi-fetch":["/home/jables/source/doof/munch-ease-frontend/src/api/client.ts"]},"invalidFiles":{},"invalidDirs":{}} diff --git a/ts-prune.baseline.txt b/ts-prune.baseline.txt deleted file mode 100644 index a88cce8..0000000 --- a/ts-prune.baseline.txt +++ /dev/null @@ -1,60 +0,0 @@ -src/dateformats.ts:6 - ago -src/units.ts:104 - getConversionFactor (used in module) -src/units.ts:130 - calculateTotals -src/units.ts:2 - UnitKey (used in module) -src/units.ts:4 - equivalentUnits (used in module) -src/units.ts:127 - Quantity (used in module) -src/units.ts:128 - Total (used in module) -src/api/sdk.ts:54 - mapPurchasedShoppingList (used in module) -src/api/sdk.ts:90 - mapCurrentShoppingList (used in module) -src/api/sdk.ts:134 - listRecipes -src/api/sdk.ts:147 - getRecipe -src/api/sdk.ts:153 - saveRecipe -src/api/sdk.ts:159 - deleteRecipe -src/api/sdk.ts:164 - parseRecipe -src/api/sdk.ts:170 - parseIngredients -src/api/sdk.ts:178 - parseProduct -src/api/sdk.ts:189 - listPersons (used in module) -src/api/sdk.ts:202 - getPersonsInHome -src/api/sdk.ts:206 - searchPersons -src/api/types.ts:337 - webhooks -src/api/types.ts:771 - $defs -src/api/types.ts:772 - operations (used in module) -src/composables/useAlert.ts:27 - useAlert -src/composables/useAlert.ts:4 - AlertMessage (used in module) -src/composables/useAuth.ts:8 - loadUser (used in module) -src/composables/useAuth.ts:16 - login (used in module) -src/composables/useAuth.ts:21 - useAuth -src/composables/useMeals.ts:4 - getUpcomingMeals (used in module) -src/composables/useMeals.ts:8 - getMeal (used in module) -src/composables/useMeals.ts:12 - saveMeal (used in module) -src/composables/useMeals.ts:16 - markMealConsumed (used in module) -src/composables/useMeals.ts:20 - deleteMeal (used in module) -src/composables/useMeals.ts:25 - toMealInput (used in module) -src/composables/useMeals.ts:44 - useMeals -src/composables/usePagination.ts:7 - usePagination -src/composables/usePagination.ts:4 - PageParams (used in module) -src/composables/usePagination.ts:5 - PageFetcher (used in module) -src/composables/useShopping.ts:8 - groupsToItems (used in module) -src/composables/useShopping.ts:12 - uniqueMeals (used in module) -src/composables/useShopping.ts:24 - itemsToGroups (used in module) -src/composables/useShopping.ts:54 - useShopping -src/composables/useShopping.ts:4 - GroupByProduct (used in module) -src/composables/useShopping.ts:5 - GroupByName (used in module) -src/composables/useShopping.ts:6 - Group (used in module) -src/domain/decoders.ts:35 - decodeRecipes -src/domain/decoders.ts:59 - decodeMealRecipe (used in module) -src/domain/decoders.ts:78 - decodeShoppingListItem (used in module) -src/domain/decoders.ts:103 - toMealInput -src/domain/types.ts:4 - Replace (used in module) -src/domain/types.ts:5 - WithDates (used in module) -src/domain/types.ts:8 - Maybe -src/domain/types.ts:9 - NonNull -src/domain/types.ts:10 - Lookup (used in module) -src/domain/types.ts:11 - WithRefs (used in module) -src/domain/types.ts:19 - RecipeInput -src/domain/types.ts:21 - MealRecipeOut (used in module) -src/domain/types.ts:50 - ShoppingListWithRefs -src/router/helpers.ts:12 - parseRouteId -src/router/helpers.ts:24 - parseQueryString -src/router/index.ts:14 - createAppRouter diff --git a/ts-prune.current.txt b/ts-prune.current.txt deleted file mode 100644 index 3cb9692..0000000 --- a/ts-prune.current.txt +++ /dev/null @@ -1,48 +0,0 @@ -src/dateformats.ts:6 - ago -src/units.ts:104 - getConversionFactor (used in module) -src/units.ts:130 - calculateTotals -src/api/sdk.ts:58 - mapPurchasedShoppingList (used in module) -src/api/sdk.ts:96 - mapCurrentShoppingList (used in module) -src/api/sdk.ts:140 - listRecipes -src/api/sdk.ts:152 - getRecipe -src/api/sdk.ts:160 - saveRecipe -src/api/sdk.ts:166 - deleteRecipe -src/api/sdk.ts:171 - parseRecipe -src/api/sdk.ts:177 - parseIngredients -src/api/sdk.ts:185 - parseProduct -src/api/sdk.ts:209 - getPersonsInHome -src/api/sdk.ts:213 - searchPersons -src/api/sdk.ts:218 - getUpcomingMeals -src/api/sdk.ts:230 - getMeal -src/api/sdk.ts:238 - saveMeal -src/api/sdk.ts:254 - markMealConsumed -src/api/sdk.ts:264 - deleteMeal -src/api/types.ts:337 - webhooks -src/api/types.ts:771 - $defs -src/api/types.ts:772 - operations (used in module) -src/composables/useAlert.ts:27 - useAlert -src/composables/useAlert.ts:4 - AlertMessage (used in module) -src/composables/useAuth.ts:8 - loadUser (used in module) -src/composables/useAuth.ts:16 - login (used in module) -src/composables/useAuth.ts:21 - useAuth -src/composables/usePagination.ts:7 - usePagination -src/composables/usePagination.ts:4 - PageParams (used in module) -src/composables/usePagination.ts:5 - PageFetcher (used in module) -src/composables/useShopping.ts:8 - groupsToItems (used in module) -src/composables/useShopping.ts:12 - uniqueMeals (used in module) -src/composables/useShopping.ts:24 - itemsToGroups (used in module) -src/composables/useShopping.ts:54 - useShopping -src/composables/useShopping.ts:4 - GroupByProduct (used in module) -src/composables/useShopping.ts:5 - GroupByName (used in module) -src/composables/useShopping.ts:6 - Group (used in module) -src/domain/decoders.ts:99 - toMealInput -src/domain/types.ts:4 - Replace (used in module) -src/domain/types.ts:5 - WithDates (used in module) -src/domain/types.ts:8 - Lookup (used in module) -src/domain/types.ts:10 - WithRefs (used in module) -src/domain/types.ts:18 - RecipeInput -src/domain/types.ts:20 - MealRecipeOut (used in module) -src/domain/types.ts:49 - ShoppingListWithRefs -src/router/helpers.ts:12 - parseRouteId -src/router/helpers.ts:24 - parseQueryString -src/router/index.ts:14 - createAppRouter -- 2.45.2 From a3d9fcac53b13212ee06239a7c63bdddee33e82f Mon Sep 17 00:00:00 2001 From: jableader Date: Sat, 25 Oct 2025 13:07:11 +1100 Subject: [PATCH 10/11] Tools removal --- code-removal-and-consolodation-spec.md | 14 +++++++++++++- package.json | 4 ++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/code-removal-and-consolodation-spec.md b/code-removal-and-consolodation-spec.md index e5cf40d..ac5871c 100644 --- a/code-removal-and-consolodation-spec.md +++ b/code-removal-and-consolodation-spec.md @@ -221,4 +221,16 @@ Next actions (clear, actionable) Additional targeted opportunities (2025-10-25) - Simplify env typings: removed Vite-specific triple-slash reference and duplicate ImportMeta declarations; kept a minimal optional ImportMetaEnv in `src/env.d.ts`. All checks PASS. - Component type audit: migrated `MealCard.vue` to domain `Meal` type with null guards. Remaining spots use purposeful `Pick<>` types; can leave as-is unless standardizing is preferred. -- ts-prune: refreshed; remaining flags are either used by SFC templates or part of public SDK surface. No further safe removals identified without deeper UI refactors. \ No newline at end of file +- ts-prune: refreshed; remaining flags are either used by SFC templates or part of public SDK surface. No further safe removals identified without deeper UI refactors. + +Cleanup (completed) +- Removed intermediate artifacts committed for this consolidation pass: + - cloc.baseline.txt, cloc.final.txt + - build-size.final.txt + - ts-prune.baseline.txt, ts-prune.current.txt + - depcheck.baseline.json, depcheck.current.json + - coverage/ directory +- Removed coverage script and plugin from package.json: + - scripts: deleted `test:coverage` + - devDependencies: removed `@vitest/coverage-v8` +- All quality gates remain PASS after cleanup. \ No newline at end of file diff --git a/package.json b/package.json index 0d6396d..c330366 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "prepare": "husky install", "test": "vitest run", "test:watch": "vitest", - "test:coverage": "vitest run --coverage", + "typecheck": "tsc -p tsconfig.json --noEmit", "typecheck:vue": "vue-tsc --noEmit", "codegen:api": "openapi-typescript ../munch-ease-backend/openapi.json -o src/api/types.ts", @@ -25,7 +25,7 @@ "@types/node": "^20.19.22", "@typescript-eslint/eslint-plugin": "^7.18.0", "@typescript-eslint/parser": "^7.18.0", - "@vitest/coverage-v8": "^1.6.0", + "@vue/cli-plugin-babel": "~5.0.0", "@vue/cli-plugin-eslint": "~5.0.0", "@vue/cli-plugin-typescript": "~5.0.0", -- 2.45.2 From f60eae0c0009574fa163f2f33de41b132698e008 Mon Sep 17 00:00:00 2001 From: jableader Date: Sat, 25 Oct 2025 13:18:01 +1100 Subject: [PATCH 11/11] Removed completed spec --- code-removal-and-consolodation-spec.md | 236 ------------------------- 1 file changed, 236 deletions(-) delete mode 100644 code-removal-and-consolodation-spec.md diff --git a/code-removal-and-consolodation-spec.md b/code-removal-and-consolodation-spec.md deleted file mode 100644 index ac5871c..0000000 --- a/code-removal-and-consolodation-spec.md +++ /dev/null @@ -1,236 +0,0 @@ -# Code Removal and Consolidation (LOC Reduction) - -Owner: Engineering -Document: code-removal-and-consolodation-spec.md -Revision: 2.0 -Date: 2025-10-20 -Revision: 2.1 -Date: 2025-10-25 - -Purpose -- Reduce lines of code (LOC) in this TS/Vue project (and any Python utilities) without changing behavior. -- Remove dead/duplicate code, collapse pass-through layers, and slim public APIs. - -Success metrics -- [ ] LOC reduced by 10–30% (cloc baseline vs. final). -- [ ] Test coverage ≥ baseline; typecheck/lint clean. -- [ ] Bundle size stable or lower. -- [ ] No regressions in main user flows. - -Current status (2025-10-20) -- Interim verification: typecheck and tests passing locally. -- Consolidations completed in this pass (see checklist 4): - - Shopping request types centralized in sdk. - - UIShoppingListItem removed; grouping works on domain items with refs. - - Meals composable removed; toMealInput moved to decoders; components now import sdk directly. - - decodeLookup moved to decoders and reused. -- Baseline metrics captured (cloc, coverage, build size): - - cloc saved: cloc.baseline.txt - - coverage saved (v8): coverage/ (see summary in terminal output) - - build size: dist size ~1.6M - - ts-prune saved: ts-prune.baseline.txt - - depcheck saved: depcheck.baseline.json - -Status update (2025-10-21) -- Ran ts-prune and depcheck again to guide safe removals. -- Notes: - - ts-prune doesn’t analyze .vue SFC imports, so exports used only by SFCs (e.g., dateformats.ago) appear unused; avoid removing those. - - Completed a safe API shrink: removed unused exports in domain (Maybe, NonNull) and decoders (decodeRecipes) without changing behavior. - - Removed an unused ref in MyShoppingPage.vue. - - depcheck flags core-js as unused; given Vue CLI/babel preset may rely on it for polyfills, defer removal for now. - - depcheck shows some devDependencies as unused but they are required by the Vue CLI toolchain; defer removal. - - Resolved typecheck errors after domain ref opt-in changes: updated ShoppingListItem.vue to remove person ref usage and guard optional ingredient access; TS + vue-tsc + tests pass. - - Verified end-to-end: lint PASS, typecheck PASS, vue-tsc PASS, tests PASS (no regressions). - - Reduced nullability in public SDK APIs where safe: getRecipe/getMeal/markMealConsumed/getCurrentShoppingList now return non-null and throw on errors; updated call sites accordingly. - - Domain decoders now return non-null and throw on invalid input (decodeRecipe/decodeMeal/decodeMealRecipe/decodeIngredient/decodeShoppingListItem/decodeShoppingList); list decoders return arrays. - - Lint/typecheck/vue-tsc/tests: all PASS after decoder contract tightening. - - Aggressive dependency cleanup: removed node-fetch and undici (unused in Node 18+), removed core-js (build and tests still PASS under current browserslist targets), and dropped Vite types from tsconfig. All checks and build PASS post-removal. - -Latest analysis artifacts (2025-10-21) -- ts-prune (current): saved to ts-prune.current.txt; notable false-positives include dateformats.ago and units functions used inside SFCs. -- depcheck (current): saved to depcheck.current.json; flags core-js and several dev deps as unused. These are likely required by Vue CLI/babel/coverage tooling; defer removal pending deeper validation. - - Follow-up result: Verified removal of core-js, node-fetch, undici did not impact tests/typecheck/build. Retained Vue CLI/Babel/coverage deps. - -Final verification snapshots (2025-10-25) -- cloc.final.txt (exclude node_modules, dist, coverage): Files 100, Code 32,579; Vue SFC code 2,551; TS code 2,293. -- Build size (Vue CLI): dist total ~1.6M; key bundles: chunk-vendors ~111KB (gz 40.9KB), app ~9.5KB (gz ~3.9KB). -- Tests + coverage: 14 files, 27 tests, all PASS. Coverage stable on domain/sdk/units; SFCs not covered (unchanged behavior). -- ts-prune refreshed (ts-prune.current.txt). Continue to treat SFC-only usages as false positives. - -Scope -- In: TS/Vue app code, tests, configs, scripts; Python utilities if present. -- Out: New features, architectural rewrites. - -Baseline and tooling (TS/Vue/Python) -- Commands: - - JS/TS LOC: npx cloc . | tee cloc.baseline.txt - - Lint/typecheck: npm run lint && npm run typecheck - - Coverage: npm test -- --coverage - - Unused TS exports: npx ts-prune - - Unused deps: npx depcheck - - Search: rg (ripgrep) - - Bundle size (Vite): npm run build && du -h dist - - Python (if present): vulture . and coverage run -m pytest - -Acceptance -- [ ] Baselines saved (LOC, coverage, bundle size). -- [ ] CI green on main before starting. - -Ordered checklist (actionable) - -1) Baseline snapshot -- [x] Run cloc; store cloc.baseline.txt. -- [x] Run tests with coverage; store coverage report. (added dev dep @vitest/coverage-v8) -- [x] Run npm run build; record dist size. -- [x] Run ts-prune and depcheck; save outputs. - -2) Dead code inventory -- [ ] ts-prune: list unused exports; verify via rg searches. - - [x] Refreshed ts-prune; review and mark SFC-used exports to avoid accidental removals. -- [ ] Find unreferenced files: - rg -l "export default|export const|export function" | - while read f; do rg -q "(from|import).*$f" -g "!$f" . || echo "$f"; done -- [ ] depcheck: identify unused deps/scripts. -- [ ] Python (optional): vulture . for unused code. - -3) Delete proven dead code -- [ ] Remove files/symbols with zero references. -- [ ] Delete tests/mocks for removed code. -- [ ] Fix imports; run lint, typecheck, tests, build. - -Acceptance -- [ ] LOC decreased; CI green. - -4) Consolidate duplicated types and logic (repo targets) -- Shopping requests - - [x] Export PurchaseExisting/PurchaseRefs (or a single request builder) from src/api/sdk.ts. - - [x] Reuse in src/composables/useShopping.ts; delete local duplicates. - - [x] Added PurchaseRequest union in SDK to simplify signatures and centralize request typing. -- UIShoppingListItem mapping - - [x] Make itemsToGroups/uniqueMeals accept ShoppingListItemWithRefs. - - [x] Remove UIShoppingListItem and mapItemToUI; update callers. -- Meals composable - - [x] Delete src/composables/useMeals.ts OR keep only toMealInput. - - [x] Move toMealInput to src/domain/decoders.ts if file removed. - - [x] Update components to import sdk directly for API calls. -- Common decoder - - [x] Move decodeLookup() to src/domain/decoders.ts; import in sdk.ts. -- Component-local types - - [ ] Replace ad-hoc component types (e.g., MealCard.vue) with domain types. - - [x] Align ShoppingListItem.vue template/computed logic with domain changes (optional ingredient refs; removed person ref). -- Unused refs - - [x] Remove unused reactive refs/vars (e.g., stray person ref in shopping pages if unused). - -Acceptance -- [ ] Single source for purchase request types/builders. -- [ ] One fewer UI-only item shape in shopping flow. -- [ ] Meals API calls go through sdk; no pass-through wrappers. - -5) Shrink public API surface -- [x] Export only used symbols from domain and sdk modules. -- [ ] Remove unused overloads/params; prefer narrower interfaces. -- [ ] Update re-exports; fix imports accordingly. - - [x] Reduce unnecessary null/undefined on public SDK returns (getRecipe/getMeal/markMealConsumed/getCurrentShoppingList). - - [x] Narrowed visibility of internal helpers/types (listPersons made internal; PurchaseExisting/PurchaseRefs internal, union type exported). - - [x] Hide internal-only helpers/types: decoders.decodeMealRecipe/decodeShoppingListItem made module-private; units.UnitKey/equivalentUnits/Quantity/Total are no longer exported. - -Acceptance -- [ ] ts-prune emits fewer/no unused export warnings. - -6) Simplify control flow and inline pass-throughs -- [x] Inline trivial wrappers where applicable (meals composable removed; components call sdk directly). - - [ ] Prefer guard clauses over nested branches in remaining hotspots (audit pending). -- [ ] Remove speculative extension points not used. -- [ ] Replace small class-style modules with plain functions where LOC decreases. - -Acceptance -- [ ] Complexity lower in touched files; tests unchanged. - -7) Test suite consolidation -- [x] Remove duplicate tests (e.g., .js vs .ts duplicates), fixtures for deleted code. - - Removed tests/useAlert.test.js (duplicate of tests/useAlert.test.ts). -- [ ] Ensure assertions are meaningful; avoid testing implementation details. -- [ ] Keep or improve branch coverage on critical paths. - -Acceptance -- [ ] Coverage ≥ baseline; runtime stable or faster. - -8) Dependency cleanup -- [ ] Remove unused npm deps (depcheck) and scripts. - - [x] Refreshed depcheck results saved; plan conservative removals only after confirming toolchain needs. -- [ ] Prefer stdlib/small helpers over heavy libs where equal. -- [ ] npm prune && clean install; verify build. - -Acceptance -- [ ] Smaller dependency graph; no new vulns; CI green. - -9) Docs and examples -- [ ] Update README/ARCHITECTURE and code comments to reflect removals. -- [ ] Document canonical modules replacing duplicates. -- [ ] Add migration notes in CHANGELOG if applicable. - -Acceptance -- [ ] Docs consistent; onboarding simpler. - -10) Final verification - - [x] Re-run cloc; saved cloc.final.txt and noted summary. - - [x] Re-run tests with coverage; all PASS; coverage consistent with previous runs. - - [x] Re-run build; build size recorded in build-size.final.txt (dist ~1.6M). -- [ ] Sanity test main user flows locally. - -Acceptance -- [ ] All metrics at or better than baseline; no regressions. - -Quick command reference -- LOC: npx cloc . -- Typecheck: npm run typecheck -- Lint: npm run lint -- Tests + coverage: npm test -- --coverage -- Unused TS exports: npx ts-prune -- Unused deps: npx depcheck -- Search: rg -n "" -- Build + size: npm run build && du -h dist - -Exit criteria -- [ ] Target LOC reduction met with stable quality metrics. -- [ ] Duplicates removed; canonical modules in place. -- [ ] No pending deprecations awaiting removal. - -Next actions (clear, actionable) -1) Capture baselines - - [x] Run cloc and save cloc.baseline.txt - - [x] Run tests with coverage and save report summary - - [x] Build app and note dist size - - [x] Run ts-prune and depcheck; save outputs -2) Component type audit - - [ ] Replace any ad-hoc component types with domain types (scan components/*) -3) Unused refs/vars cleanup - - [x] Scan shopping/meals components for unused refs/variables; remove -4) Shrink public API surface - - [x] Use ts-prune results to remove unused exports in domain and sdk - - [ ] Second pass: validate remaining ts-prune hints against .vue usage; prune safely - - [ ] Consider reducing parseRecipe nullability (throw on parse failures) if UI updated accordingly -5) Test suite consolidation - - [x] De-duplicate tests with .js and .ts counterparts (e.g., prefer TypeScript) -6) Dependency cleanup - - [x] Remove unused npm deps (depcheck) and scripts (removed core-js, node-fetch, undici, @babel/eslint-parser). Verified tests/typecheck/build PASS. -7) Final verification - - [ ] Re-run cloc/tests/build; record deltas vs. baseline; sanity test user flows - - [x] Interim verification after dep cleanup: tests/typecheck/vue-tsc/lint/build PASS - -Additional targeted opportunities (2025-10-25) -- Simplify env typings: removed Vite-specific triple-slash reference and duplicate ImportMeta declarations; kept a minimal optional ImportMetaEnv in `src/env.d.ts`. All checks PASS. -- Component type audit: migrated `MealCard.vue` to domain `Meal` type with null guards. Remaining spots use purposeful `Pick<>` types; can leave as-is unless standardizing is preferred. -- ts-prune: refreshed; remaining flags are either used by SFC templates or part of public SDK surface. No further safe removals identified without deeper UI refactors. - -Cleanup (completed) -- Removed intermediate artifacts committed for this consolidation pass: - - cloc.baseline.txt, cloc.final.txt - - build-size.final.txt - - ts-prune.baseline.txt, ts-prune.current.txt - - depcheck.baseline.json, depcheck.current.json - - coverage/ directory -- Removed coverage script and plugin from package.json: - - scripts: deleted `test:coverage` - - devDependencies: removed `@vitest/coverage-v8` -- All quality gates remain PASS after cleanup. \ No newline at end of file -- 2.45.2