feat: založení základní stránky příjem/výdej + import a statistiky
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
openapi: 3.0.4
|
||||
info:
|
||||
title: Food Tracer API
|
||||
version: 1.0.0
|
||||
servers:
|
||||
- url: /api
|
||||
paths:
|
||||
# Obecné (/api)
|
||||
/login:
|
||||
$ref: "./paths/login.yml"
|
||||
/config:
|
||||
$ref: "./paths/config/config.yml"
|
||||
|
||||
# Jídla (/api/meals)
|
||||
/meals/day:
|
||||
$ref: "./paths/meals/day.yml"
|
||||
/meals/range:
|
||||
$ref: "./paths/meals/range.yml"
|
||||
/meals/add:
|
||||
$ref: "./paths/meals/add.yml"
|
||||
/meals/update:
|
||||
$ref: "./paths/meals/update.yml"
|
||||
/meals/delete:
|
||||
$ref: "./paths/meals/delete.yml"
|
||||
|
||||
# Statistiky (/api/stats)
|
||||
/stats/summary:
|
||||
$ref: "./paths/stats/summary.yml"
|
||||
|
||||
# Přehled dne (/api/day)
|
||||
/day:
|
||||
$ref: "./paths/day/overview.yml"
|
||||
|
||||
# Pohyb (/api/activities)
|
||||
/activities/add:
|
||||
$ref: "./paths/activities/add.yml"
|
||||
/activities/update:
|
||||
$ref: "./paths/activities/update.yml"
|
||||
/activities/delete:
|
||||
$ref: "./paths/activities/delete.yml"
|
||||
|
||||
# Šablony tréninků (/api/workouts)
|
||||
/workouts:
|
||||
$ref: "./paths/workouts/list.yml"
|
||||
/workouts/save:
|
||||
$ref: "./paths/workouts/save.yml"
|
||||
/workouts/delete:
|
||||
$ref: "./paths/workouts/delete.yml"
|
||||
/workouts/apply:
|
||||
$ref: "./paths/workouts/apply.yml"
|
||||
|
||||
# Kalorie (/api/calories)
|
||||
/calories/search:
|
||||
$ref: "./paths/calories/search.yml"
|
||||
|
||||
# Nastavení (/api/settings)
|
||||
/settings:
|
||||
$ref: "./paths/settings/settings.yml"
|
||||
/settings/basal:
|
||||
$ref: "./paths/settings/basal.yml"
|
||||
|
||||
# Importy (/api/import)
|
||||
/import/luncher:
|
||||
$ref: "./paths/import/luncher.yml"
|
||||
|
||||
components:
|
||||
schemas:
|
||||
$ref: "./schemas/_index.yml"
|
||||
securitySchemes:
|
||||
bearerAuth:
|
||||
type: http
|
||||
scheme: bearer
|
||||
bearerFormat: JWT
|
||||
security:
|
||||
- bearerAuth: []
|
||||
@@ -0,0 +1 @@
|
||||
export * from './gen';
|
||||
@@ -0,0 +1,14 @@
|
||||
import { defaultPlugins } from '@hey-api/openapi-ts';
|
||||
|
||||
export default {
|
||||
input: 'api.yml',
|
||||
output: 'gen',
|
||||
plugins: [
|
||||
...defaultPlugins,
|
||||
'@hey-api/client-fetch',
|
||||
{
|
||||
enums: 'javascript',
|
||||
name: '@hey-api/typescript',
|
||||
},
|
||||
],
|
||||
};
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "@food-tracer/types",
|
||||
"version": "1.0.0",
|
||||
"license": "MIT",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"openapi-ts": "openapi-ts"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@hey-api/client-fetch": "^0.8.2",
|
||||
"@hey-api/openapi-ts": "^0.64.7",
|
||||
"typescript": "^5.9.3"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
post:
|
||||
operationId: addActivity
|
||||
summary: Přidá pohybovou aktivitu do zvoleného dne.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/ActivityInput"
|
||||
responses:
|
||||
"200":
|
||||
description: Aktualizovaný přehled dne
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/DayOverview"
|
||||
"400":
|
||||
description: Neplatná data
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
@@ -0,0 +1,29 @@
|
||||
post:
|
||||
operationId: deleteActivity
|
||||
summary: Smaže aktivitu.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: [id, date]
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
date:
|
||||
type: string
|
||||
format: date
|
||||
responses:
|
||||
"200":
|
||||
description: Aktualizovaný přehled dne
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/DayOverview"
|
||||
"400":
|
||||
description: Neplatná data
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
"404":
|
||||
description: Záznam neexistuje
|
||||
@@ -0,0 +1,28 @@
|
||||
post:
|
||||
operationId: updateActivity
|
||||
summary: Upraví existující aktivitu.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
allOf:
|
||||
- type: object
|
||||
required: [id]
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
- $ref: "../../schemas/_index.yml#/ActivityInput"
|
||||
responses:
|
||||
"200":
|
||||
description: Aktualizovaný přehled dne
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/DayOverview"
|
||||
"400":
|
||||
description: Neplatná data
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
"404":
|
||||
description: Záznam neexistuje
|
||||
@@ -0,0 +1,23 @@
|
||||
get:
|
||||
operationId: searchCalories
|
||||
summary: |
|
||||
Najde návrhy energetické hodnoty pro název jídla — z vlastní knihovny
|
||||
dřívějších zadání a od externího poskytovatele.
|
||||
parameters:
|
||||
- in: query
|
||||
name: q
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
description: Název jídla, ke kterému se hledá energetická hodnota
|
||||
responses:
|
||||
"200":
|
||||
description: Nalezené návrhy
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/CalorieSearchResult"
|
||||
"400":
|
||||
description: Nebyl předán hledaný název
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
@@ -0,0 +1,11 @@
|
||||
get:
|
||||
operationId: getConfig
|
||||
summary: Vrátí veřejnou runtime konfiguraci klienta.
|
||||
security: []
|
||||
responses:
|
||||
"200":
|
||||
description: Runtime konfigurace
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/Config"
|
||||
@@ -0,0 +1,22 @@
|
||||
get:
|
||||
operationId: getDayOverview
|
||||
summary: Vrátí kompletní přehled dne — jídlo, pohyb a energetickou bilanci.
|
||||
parameters:
|
||||
- in: query
|
||||
name: date
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
format: date
|
||||
description: Datum ve formátu YYYY-MM-DD. Výchozí je dnešek.
|
||||
responses:
|
||||
"200":
|
||||
description: Přehled dne
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/DayOverview"
|
||||
"400":
|
||||
description: Neplatné datum
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
@@ -0,0 +1,22 @@
|
||||
post:
|
||||
operationId: importLuncher
|
||||
summary: |
|
||||
Naimportuje měsíční přehled vyexportovaný z Luncheru (XLSX, CSV nebo JSON).
|
||||
Řádky se založí do dnů, ke kterým patří, ve výchozím stavu jako oběd.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/ImportRequest"
|
||||
responses:
|
||||
"200":
|
||||
description: Výsledek importu, nebo jeho náhled při dryRun
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/ImportResult"
|
||||
"400":
|
||||
description: Nepodporovaný formát nebo poškozený soubor
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
@@ -0,0 +1,22 @@
|
||||
post:
|
||||
operationId: login
|
||||
summary: Přihlásí uživatele a vrátí JWT token.
|
||||
security: []
|
||||
requestBody:
|
||||
required: false
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
login:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: JWT token přihlášeného uživatele
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: string
|
||||
"500":
|
||||
description: Nebyl předán login
|
||||
@@ -0,0 +1,20 @@
|
||||
post:
|
||||
operationId: addMeal
|
||||
summary: Přidá jídlo do zvoleného dne.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/MealInput"
|
||||
responses:
|
||||
"200":
|
||||
description: Aktualizovaný přehled dne
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/DayRecord"
|
||||
"400":
|
||||
description: Neplatná data
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
@@ -0,0 +1,22 @@
|
||||
get:
|
||||
operationId: getDay
|
||||
summary: Vrátí jídla přihlášeného uživatele za jeden den.
|
||||
parameters:
|
||||
- in: query
|
||||
name: date
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
format: date
|
||||
description: Datum ve formátu YYYY-MM-DD. Výchozí je dnešek.
|
||||
responses:
|
||||
"200":
|
||||
description: Přehled jídel daného dne
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/DayRecord"
|
||||
"400":
|
||||
description: Neplatné datum
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
@@ -0,0 +1,31 @@
|
||||
post:
|
||||
operationId: deleteMeal
|
||||
summary: Smaže záznam o jídle.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: [id, date]
|
||||
properties:
|
||||
id:
|
||||
description: Identifikátor mazaného záznamu
|
||||
type: string
|
||||
date:
|
||||
description: Datum záznamu (YYYY-MM-DD)
|
||||
type: string
|
||||
format: date
|
||||
responses:
|
||||
"200":
|
||||
description: Aktualizovaný přehled dne
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/DayRecord"
|
||||
"400":
|
||||
description: Neplatná data
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
"404":
|
||||
description: Záznam neexistuje
|
||||
@@ -0,0 +1,31 @@
|
||||
get:
|
||||
operationId: getRange
|
||||
summary: Vrátí jídla přihlášeného uživatele za rozsah dnů.
|
||||
parameters:
|
||||
- in: query
|
||||
name: from
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
format: date
|
||||
description: První den rozsahu (včetně), YYYY-MM-DD
|
||||
- in: query
|
||||
name: to
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
format: date
|
||||
description: Poslední den rozsahu (včetně), YYYY-MM-DD
|
||||
responses:
|
||||
"200":
|
||||
description: Dny s alespoň jedním záznamem, vzestupně dle data
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
$ref: "../../schemas/_index.yml#/DayRecord"
|
||||
"400":
|
||||
description: Neplatný rozsah
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
@@ -0,0 +1,29 @@
|
||||
post:
|
||||
operationId: updateMeal
|
||||
summary: Upraví existující záznam o jídle.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
allOf:
|
||||
- type: object
|
||||
required: [id]
|
||||
properties:
|
||||
id:
|
||||
description: Identifikátor upravovaného záznamu
|
||||
type: string
|
||||
- $ref: "../../schemas/_index.yml#/MealInput"
|
||||
responses:
|
||||
"200":
|
||||
description: Aktualizovaný přehled dne
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/DayRecord"
|
||||
"400":
|
||||
description: Neplatná data
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
"404":
|
||||
description: Záznam neexistuje
|
||||
@@ -0,0 +1,25 @@
|
||||
post:
|
||||
operationId: saveBasalCalories
|
||||
summary: Uloží klidový výdej (bazální metabolismus) přihlášeného uživatele.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
basalCalories:
|
||||
description: Klidový výdej v kcal za den. Null nebo 0 ho odstraní.
|
||||
type: integer
|
||||
nullable: true
|
||||
responses:
|
||||
"200":
|
||||
description: Aktualizované nastavení
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/UserSettings"
|
||||
"400":
|
||||
description: Neplatná data
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
@@ -0,0 +1,41 @@
|
||||
get:
|
||||
operationId: getSettings
|
||||
summary: Vrátí nastavení přihlášeného uživatele.
|
||||
responses:
|
||||
"200":
|
||||
description: Nastavení uživatele
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/UserSettings"
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
post:
|
||||
operationId: saveSourceRate
|
||||
summary: Uloží nebo smaže cenu za 100 g u jednoho zdroje.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: [source]
|
||||
properties:
|
||||
source:
|
||||
description: Název zdroje (podniku)
|
||||
type: string
|
||||
pricePer100g:
|
||||
description: Cena za 100 g v haléřích. Null nebo 0 sazbu odstraní.
|
||||
type: integer
|
||||
nullable: true
|
||||
responses:
|
||||
"200":
|
||||
description: Aktualizované nastavení
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/UserSettings"
|
||||
"400":
|
||||
description: Neplatná data
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
@@ -0,0 +1,29 @@
|
||||
get:
|
||||
operationId: getFoodStats
|
||||
summary: Vrátí statistiky útraty a jídel za zvolené období.
|
||||
parameters:
|
||||
- in: query
|
||||
name: from
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
format: date
|
||||
description: První den období (včetně), YYYY-MM-DD
|
||||
- in: query
|
||||
name: to
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
format: date
|
||||
description: Poslední den období (včetně), YYYY-MM-DD
|
||||
responses:
|
||||
"200":
|
||||
description: Statistiky za období
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/FoodStats"
|
||||
"400":
|
||||
description: Neplatný rozsah
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
@@ -0,0 +1,31 @@
|
||||
post:
|
||||
operationId: applyWorkoutTemplate
|
||||
summary: Založí do zvoleného dne všechny položky šablony tréninku.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: [id, date]
|
||||
properties:
|
||||
id:
|
||||
description: Identifikátor šablony
|
||||
type: string
|
||||
date:
|
||||
description: Den, do kterého se položky založí
|
||||
type: string
|
||||
format: date
|
||||
responses:
|
||||
"200":
|
||||
description: Aktualizovaný přehled dne
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "../../schemas/_index.yml#/DayOverview"
|
||||
"400":
|
||||
description: Neplatná data
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
"404":
|
||||
description: Šablona neexistuje
|
||||
@@ -0,0 +1,26 @@
|
||||
post:
|
||||
operationId: deleteWorkoutTemplate
|
||||
summary: Smaže šablonu tréninku.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: [id]
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: Aktualizovaný seznam šablon
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
$ref: "../../schemas/_index.yml#/WorkoutTemplate"
|
||||
"400":
|
||||
description: Neplatná data
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
@@ -0,0 +1,14 @@
|
||||
get:
|
||||
operationId: getWorkoutTemplates
|
||||
summary: Vrátí šablony tréninků přihlášeného uživatele.
|
||||
responses:
|
||||
"200":
|
||||
description: Šablony seřazené podle názvu
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
$ref: "../../schemas/_index.yml#/WorkoutTemplate"
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
@@ -0,0 +1,33 @@
|
||||
post:
|
||||
operationId: saveWorkoutTemplate
|
||||
summary: Založí novou šablonu tréninku, nebo upraví existující.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: [name, items]
|
||||
properties:
|
||||
id:
|
||||
description: Identifikátor upravované šablony. Bez něj se založí nová.
|
||||
type: string
|
||||
name:
|
||||
type: string
|
||||
items:
|
||||
type: array
|
||||
items:
|
||||
$ref: "../../schemas/_index.yml#/WorkoutTemplateItem"
|
||||
responses:
|
||||
"200":
|
||||
description: Aktualizovaný seznam šablon
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
$ref: "../../schemas/_index.yml#/WorkoutTemplate"
|
||||
"400":
|
||||
description: Neplatná data
|
||||
"401":
|
||||
description: Neautentizovaný uživatel
|
||||
@@ -0,0 +1,664 @@
|
||||
MealType:
|
||||
description: |
|
||||
Typ jídla (chod v rámci dne). Importy z Luncheru se zakládají jako OBED,
|
||||
pokud se při importu neurčí jinak.
|
||||
type: string
|
||||
enum:
|
||||
- SNIDANE
|
||||
- DOPOLEDNI_SVACINA
|
||||
- OBED
|
||||
- ODPOLEDNI_SVACINA
|
||||
- VECERE
|
||||
- JINE
|
||||
|
||||
MealEntry:
|
||||
description: Jeden snědený pokrm v konkrétní den
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- id
|
||||
- date
|
||||
- mealType
|
||||
- name
|
||||
- createdAt
|
||||
properties:
|
||||
id:
|
||||
description: Identifikátor záznamu (UUID)
|
||||
type: string
|
||||
date:
|
||||
description: Datum konzumace ve formátu YYYY-MM-DD
|
||||
type: string
|
||||
format: date
|
||||
mealType:
|
||||
$ref: "#/MealType"
|
||||
name:
|
||||
description: Název jídla
|
||||
type: string
|
||||
source:
|
||||
description: Zdroj jídla (podnik, obchod, "doma", ...)
|
||||
type: string
|
||||
price:
|
||||
description: Cena v haléřích. Celé číslo, aby nevznikaly chyby zaokrouhlením.
|
||||
type: integer
|
||||
calories:
|
||||
description: |
|
||||
Energetická hodnota v kcal. Pokud je vyplněná gramáž i caloriesPer100g,
|
||||
dopočte se z nich; jinak platí ručně zadaná hodnota.
|
||||
type: integer
|
||||
weight:
|
||||
description: |
|
||||
Gramáž porce v gramech. U podniků, které účtují podle váhy (TechTower),
|
||||
se dopočítá z ceny a pricePer100g, ale dá se přepsat.
|
||||
type: integer
|
||||
pricePer100g:
|
||||
description: Cena za 100 g v haléřích. Slouží k dopočtu gramáže z ceny.
|
||||
type: integer
|
||||
caloriesPer100g:
|
||||
description: Energetická hodnota na 100 g v kcal. Slouží k dopočtu kalorií z gramáže.
|
||||
type: integer
|
||||
note:
|
||||
description: Poznámka uživatele k jídlu
|
||||
type: string
|
||||
importSource:
|
||||
description: Odkud byl záznam naimportován (např. "luncher"). U ručně přidaných chybí.
|
||||
type: string
|
||||
importKey:
|
||||
description: |
|
||||
Klíč pro rozpoznání duplicit při opakovaném importu stejného období.
|
||||
Odvozuje se z data, typu, názvu jídla a částky importovaného řádku.
|
||||
type: string
|
||||
createdAt:
|
||||
description: Čas vzniku záznamu
|
||||
type: string
|
||||
format: date-time
|
||||
updatedAt:
|
||||
description: Čas poslední úpravy záznamu
|
||||
type: string
|
||||
format: date-time
|
||||
|
||||
MealInput:
|
||||
description: Data pro založení nebo úpravu záznamu o jídle
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- date
|
||||
- mealType
|
||||
- name
|
||||
properties:
|
||||
date:
|
||||
description: Datum konzumace ve formátu YYYY-MM-DD
|
||||
type: string
|
||||
format: date
|
||||
mealType:
|
||||
$ref: "#/MealType"
|
||||
name:
|
||||
description: Název jídla
|
||||
type: string
|
||||
source:
|
||||
description: Zdroj jídla (podnik, obchod, "doma", ...)
|
||||
type: string
|
||||
price:
|
||||
description: Cena v haléřích
|
||||
type: integer
|
||||
nullable: true
|
||||
calories:
|
||||
description: |
|
||||
Energetická hodnota v kcal. Ignoruje se, pokud jde dopočíst
|
||||
z gramáže a caloriesPer100g.
|
||||
type: integer
|
||||
nullable: true
|
||||
weight:
|
||||
description: Gramáž porce v gramech. Nevyplněná se dopočte z ceny a pricePer100g.
|
||||
type: integer
|
||||
nullable: true
|
||||
pricePer100g:
|
||||
description: Cena za 100 g v haléřích
|
||||
type: integer
|
||||
nullable: true
|
||||
caloriesPer100g:
|
||||
description: Energetická hodnota na 100 g v kcal
|
||||
type: integer
|
||||
nullable: true
|
||||
note:
|
||||
description: Poznámka uživatele k jídlu
|
||||
type: string
|
||||
nullable: true
|
||||
|
||||
DayRecord:
|
||||
description: Přehled jídel jednoho dne včetně součtů
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- date
|
||||
- entries
|
||||
- totalPrice
|
||||
- totalCalories
|
||||
properties:
|
||||
date:
|
||||
description: Datum ve formátu YYYY-MM-DD
|
||||
type: string
|
||||
format: date
|
||||
entries:
|
||||
description: Jídla daného dne seřazená dle typu (snídaně → večeře)
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/MealEntry"
|
||||
totalPrice:
|
||||
description: Součet cen všech jídel dne v haléřích
|
||||
type: integer
|
||||
totalCalories:
|
||||
description: Součet kalorií jídel dne v kcal (jídla bez kalorií se nezapočítávají)
|
||||
type: integer
|
||||
|
||||
PeriodTotal:
|
||||
description: Součty za jedno období (den, měsíc nebo rok)
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- period
|
||||
- price
|
||||
- calories
|
||||
- count
|
||||
properties:
|
||||
period:
|
||||
description: Označení období — YYYY-MM-DD (den), YYYY-MM (měsíc) nebo YYYY (rok)
|
||||
type: string
|
||||
price:
|
||||
description: Utracená částka v haléřích
|
||||
type: integer
|
||||
calories:
|
||||
description: Součet kalorií v kcal
|
||||
type: integer
|
||||
count:
|
||||
description: Počet záznamů o jídle
|
||||
type: integer
|
||||
|
||||
GroupTotal:
|
||||
description: Součty za jednu skupinu (typ jídla nebo zdroj)
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- key
|
||||
- price
|
||||
- calories
|
||||
- count
|
||||
properties:
|
||||
key:
|
||||
description: Klíč skupiny (hodnota MealType, nebo název zdroje)
|
||||
type: string
|
||||
price:
|
||||
description: Utracená částka v haléřích
|
||||
type: integer
|
||||
calories:
|
||||
description: Součet kalorií v kcal
|
||||
type: integer
|
||||
count:
|
||||
description: Počet záznamů o jídle
|
||||
type: integer
|
||||
|
||||
FoodStats:
|
||||
description: Statistiky útraty a jídel za zvolené období
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- from
|
||||
- to
|
||||
- totalPrice
|
||||
- totalCalories
|
||||
- entryCount
|
||||
- dayCount
|
||||
- byDay
|
||||
- byMonth
|
||||
- byYear
|
||||
- byMealType
|
||||
- bySource
|
||||
properties:
|
||||
from:
|
||||
description: Začátek období (YYYY-MM-DD, včetně)
|
||||
type: string
|
||||
format: date
|
||||
to:
|
||||
description: Konec období (YYYY-MM-DD, včetně)
|
||||
type: string
|
||||
format: date
|
||||
totalPrice:
|
||||
description: Celková útrata za období v haléřích
|
||||
type: integer
|
||||
totalCalories:
|
||||
description: Celkový součet kalorií za období v kcal
|
||||
type: integer
|
||||
entryCount:
|
||||
description: Počet záznamů o jídle v období
|
||||
type: integer
|
||||
dayCount:
|
||||
description: Počet dní, ve kterých je alespoň jeden záznam
|
||||
type: integer
|
||||
byDay:
|
||||
description: Součty po dnech, vzestupně dle data
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/PeriodTotal"
|
||||
byMonth:
|
||||
description: Součty po měsících, vzestupně
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/PeriodTotal"
|
||||
byYear:
|
||||
description: Součty po letech, vzestupně
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/PeriodTotal"
|
||||
byMealType:
|
||||
description: Součty dle typu jídla, sestupně dle útraty
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/GroupTotal"
|
||||
bySource:
|
||||
description: Součty dle zdroje jídla, sestupně dle útraty
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/GroupTotal"
|
||||
|
||||
ImportRequest:
|
||||
description: Požadavek na import přehledu z Luncheru
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- fileName
|
||||
- content
|
||||
properties:
|
||||
fileName:
|
||||
description: Původní název souboru — určuje formát (.xlsx, .csv, .json)
|
||||
type: string
|
||||
content:
|
||||
description: Obsah souboru zakódovaný v Base64
|
||||
type: string
|
||||
defaultMealType:
|
||||
description: |
|
||||
Typ jídla, pod kterým se importované řádky založí.
|
||||
Luncher řeší výběr obědů, takže výchozí hodnota je OBED.
|
||||
allOf:
|
||||
- $ref: "#/MealType"
|
||||
dryRun:
|
||||
description: |
|
||||
Pokud je true, import se pouze vyhodnotí a vrátí náhled, ale nic se neuloží.
|
||||
type: boolean
|
||||
|
||||
ImportResult:
|
||||
description: Výsledek (nebo náhled) importu přehledu z Luncheru
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- dryRun
|
||||
- format
|
||||
- rowCount
|
||||
- imported
|
||||
- skipped
|
||||
- days
|
||||
- totalPrice
|
||||
- entries
|
||||
- warnings
|
||||
properties:
|
||||
dryRun:
|
||||
description: True, pokud šlo pouze o náhled a data se neuložila
|
||||
type: boolean
|
||||
format:
|
||||
description: Rozpoznaný formát vstupního souboru
|
||||
type: string
|
||||
enum: [xlsx, csv, json]
|
||||
rowCount:
|
||||
description: Počet řádků nalezených v souboru
|
||||
type: integer
|
||||
imported:
|
||||
description: Počet záznamů, které import založil (u náhledu by založil)
|
||||
type: integer
|
||||
skipped:
|
||||
description: Počet přeskočených řádků, protože už z dřívějšího importu existují
|
||||
type: integer
|
||||
days:
|
||||
description: Dny (YYYY-MM-DD), kterých se import dotkl, vzestupně
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
format: date
|
||||
totalPrice:
|
||||
description: Součet cen importovaných záznamů v haléřích
|
||||
type: integer
|
||||
entries:
|
||||
description: Záznamy, které import založil (u náhledu založí)
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/MealEntry"
|
||||
warnings:
|
||||
description: Upozornění na řádky, které se nepodařilo zpracovat
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
|
||||
Config:
|
||||
description: Veřejná runtime konfigurace pro klienta
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- sentry
|
||||
properties:
|
||||
sentry:
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- dsn
|
||||
- environment
|
||||
properties:
|
||||
dsn:
|
||||
type: string
|
||||
nullable: true
|
||||
environment:
|
||||
type: string
|
||||
|
||||
CalorieSuggestion:
|
||||
description: Návrh energetické hodnoty pro jídlo
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- name
|
||||
- caloriesPer100g
|
||||
- origin
|
||||
properties:
|
||||
name:
|
||||
description: Název nalezené potraviny
|
||||
type: string
|
||||
caloriesPer100g:
|
||||
description: Energetická hodnota na 100 g v kcal
|
||||
type: integer
|
||||
origin:
|
||||
description: |
|
||||
Odkud návrh pochází — "library" je dřívější vlastní zadání uživatele,
|
||||
ostatní hodnoty označují externího poskytovatele.
|
||||
type: string
|
||||
brand:
|
||||
description: Značka nebo výrobce, pokud je známý
|
||||
type: string
|
||||
|
||||
CalorieSearchResult:
|
||||
description: Výsledek hledání energetické hodnoty pro název jídla
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- query
|
||||
- providerAvailable
|
||||
- suggestions
|
||||
- externalSearchUrl
|
||||
properties:
|
||||
query:
|
||||
description: Hledaný název
|
||||
type: string
|
||||
providerAvailable:
|
||||
description: |
|
||||
False, pokud je externí poskytovatel nedostupný. Návrhy z vlastní
|
||||
knihovny se vrací i tak — hledání kvůli tomu neselže.
|
||||
type: boolean
|
||||
providerName:
|
||||
description: Název externího poskytovatele, který návrhy dodal
|
||||
type: string
|
||||
suggestions:
|
||||
description: Nalezené návrhy, nejdřív z vlastní knihovny
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/CalorieSuggestion"
|
||||
externalSearchUrl:
|
||||
description: |
|
||||
Odkaz na tabulku potravin na KalorickéTabulky.cz. Otevírá se uživateli
|
||||
v novém panelu — hodnoty se odtud nestahují automaticky. Předvyplnit
|
||||
hledání nejde, jejich vyhledávání běží v JavaScriptu a parametry v URL
|
||||
ignoruje, proto klient název jídla kopíruje do schránky.
|
||||
type: string
|
||||
|
||||
SourceRate:
|
||||
description: Cena za 100 g u jednoho zdroje jídla
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- source
|
||||
- pricePer100g
|
||||
properties:
|
||||
source:
|
||||
description: Název zdroje (podniku), např. "TechTower"
|
||||
type: string
|
||||
pricePer100g:
|
||||
description: Cena za 100 g v haléřích
|
||||
type: integer
|
||||
|
||||
UserSettings:
|
||||
description: Uživatelské nastavení aplikace
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- sourceRates
|
||||
properties:
|
||||
sourceRates:
|
||||
description: |
|
||||
Ceny za 100 g u podniků, které účtují podle váhy. Slouží jako výchozí
|
||||
hodnota při zadávání jídla; u konkrétního jídla jde sazbu přepsat.
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/SourceRate"
|
||||
basalCalories:
|
||||
description: |
|
||||
Klidový výdej (bazální metabolismus) v kcal za den. Bez něj se bilance dne
|
||||
počítá jen jako jídlo proti pohybu a nejde o skutečný deficit.
|
||||
type: integer
|
||||
|
||||
ActivityUnit:
|
||||
description: Jednotka, ve které se aktivita měří
|
||||
type: string
|
||||
enum:
|
||||
- KROKY
|
||||
- MINUTY
|
||||
- KM
|
||||
- OPAKOVANI
|
||||
|
||||
ActivityEntry:
|
||||
description: Jedna pohybová aktivita v konkrétní den
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- id
|
||||
- date
|
||||
- name
|
||||
- unit
|
||||
- quantity
|
||||
- createdAt
|
||||
properties:
|
||||
id:
|
||||
description: Identifikátor záznamu (UUID)
|
||||
type: string
|
||||
date:
|
||||
description: Datum aktivity ve formátu YYYY-MM-DD
|
||||
type: string
|
||||
format: date
|
||||
name:
|
||||
description: Název aktivity (Chůze, Kliky, Běh, ...)
|
||||
type: string
|
||||
unit:
|
||||
$ref: "#/ActivityUnit"
|
||||
quantity:
|
||||
description: Množství v dané jednotce — počet kroků, minut, kilometrů nebo opakování
|
||||
type: integer
|
||||
caloriesPer100Units:
|
||||
description: |
|
||||
Spálené kcal na 100 jednotek. Pro kroky vychází kolem 4 (tj. 400 kcal
|
||||
za 10 000 kroků), u minut běhu kolem 1000. Sto jednotek se používá kvůli
|
||||
celým číslům — stejná konvence jako u energie jídla na 100 g.
|
||||
type: integer
|
||||
calories:
|
||||
description: |
|
||||
Spálené kcal. Pokud je vyplněné caloriesPer100Units, dopočte se z množství;
|
||||
jinak platí ručně zadaná hodnota.
|
||||
type: integer
|
||||
note:
|
||||
description: Poznámka uživatele k aktivitě
|
||||
type: string
|
||||
templateId:
|
||||
description: Identifikátor šablony, ze které aktivita vznikla
|
||||
type: string
|
||||
createdAt:
|
||||
description: Čas vzniku záznamu
|
||||
type: string
|
||||
format: date-time
|
||||
updatedAt:
|
||||
description: Čas poslední úpravy záznamu
|
||||
type: string
|
||||
format: date-time
|
||||
|
||||
ActivityInput:
|
||||
description: Data pro založení nebo úpravu aktivity
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- date
|
||||
- name
|
||||
- unit
|
||||
- quantity
|
||||
properties:
|
||||
date:
|
||||
type: string
|
||||
format: date
|
||||
name:
|
||||
type: string
|
||||
unit:
|
||||
$ref: "#/ActivityUnit"
|
||||
quantity:
|
||||
description: Množství v dané jednotce
|
||||
type: integer
|
||||
caloriesPer100Units:
|
||||
description: Spálené kcal na 100 jednotek
|
||||
type: integer
|
||||
nullable: true
|
||||
calories:
|
||||
description: Spálené kcal. Ignoruje se, pokud jde dopočíst z množství.
|
||||
type: integer
|
||||
nullable: true
|
||||
note:
|
||||
type: string
|
||||
nullable: true
|
||||
|
||||
ActivityDay:
|
||||
description: Přehled pohybu jednoho dne včetně součtu
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- date
|
||||
- entries
|
||||
- totalCalories
|
||||
properties:
|
||||
date:
|
||||
type: string
|
||||
format: date
|
||||
entries:
|
||||
description: Aktivity daného dne, nejstarší první
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/ActivityEntry"
|
||||
totalCalories:
|
||||
description: Součet spálených kcal za den
|
||||
type: integer
|
||||
|
||||
WorkoutTemplateItem:
|
||||
description: Jedna položka šablony tréninku
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- name
|
||||
- unit
|
||||
- quantity
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
unit:
|
||||
$ref: "#/ActivityUnit"
|
||||
quantity:
|
||||
type: integer
|
||||
caloriesPer100Units:
|
||||
type: integer
|
||||
|
||||
WorkoutTemplate:
|
||||
description: |
|
||||
Předpřipravený trénink. Použitím se jeho položky založí do zvoleného dne,
|
||||
takže opakovaný trénink není potřeba zadávat cvik po cviku znovu.
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- id
|
||||
- name
|
||||
- items
|
||||
- estimatedCalories
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
name:
|
||||
description: Název šablony, např. "Workout day 1"
|
||||
type: string
|
||||
items:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/WorkoutTemplateItem"
|
||||
estimatedCalories:
|
||||
description: Odhad spálených kcal za celou šablonu
|
||||
type: integer
|
||||
|
||||
EnergyBalance:
|
||||
description: Energetická bilance dne — kolik přišlo jídlem a kolik se vydalo
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- intake
|
||||
- activityBurn
|
||||
- basal
|
||||
- totalBurn
|
||||
- balance
|
||||
- hasBasal
|
||||
properties:
|
||||
intake:
|
||||
description: Přijaté kcal z jídla
|
||||
type: integer
|
||||
activityBurn:
|
||||
description: Spálené kcal pohybem
|
||||
type: integer
|
||||
basal:
|
||||
description: |
|
||||
Klidový výdej (bazální metabolismus) v kcal za den z nastavení.
|
||||
Nula, pokud si ho uživatel nenastavil.
|
||||
type: integer
|
||||
totalBurn:
|
||||
description: Celkový výdej, tedy klidový výdej plus pohyb
|
||||
type: integer
|
||||
balance:
|
||||
description: |
|
||||
Rozdíl příjmu a výdeje v kcal. Záporná hodnota znamená deficit,
|
||||
kladná přebytek.
|
||||
type: integer
|
||||
hasBasal:
|
||||
description: |
|
||||
False, pokud uživatel nemá nastavený klidový výdej. Bilance pak
|
||||
porovnává jen jídlo proti pohybu a není to skutečný deficit.
|
||||
type: boolean
|
||||
|
||||
DayOverview:
|
||||
description: Kompletní přehled dne — jídlo, pohyb a jejich bilance
|
||||
type: object
|
||||
additionalProperties: false
|
||||
required:
|
||||
- date
|
||||
- meals
|
||||
- activities
|
||||
- energy
|
||||
properties:
|
||||
date:
|
||||
type: string
|
||||
format: date
|
||||
meals:
|
||||
$ref: "#/DayRecord"
|
||||
activities:
|
||||
$ref: "#/ActivityDay"
|
||||
energy:
|
||||
$ref: "#/EnergyBalance"
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2022",
|
||||
"module": "ESNext",
|
||||
"moduleResolution": "bundler",
|
||||
"strict": true,
|
||||
"skipLibCheck": true,
|
||||
"esModuleInterop": true,
|
||||
"noEmit": true
|
||||
},
|
||||
"include": ["*.ts", "gen/**/*"]
|
||||
}
|
||||
+309
@@ -0,0 +1,309 @@
|
||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@hey-api/client-fetch@^0.8.2":
|
||||
version "0.8.4"
|
||||
resolved "https://registry.yarnpkg.com/@hey-api/client-fetch/-/client-fetch-0.8.4.tgz#2dc2d368b4dd2137789f46adcae68ccd04ea2adb"
|
||||
integrity sha512-SWtUjVEFIUdiJGR2NiuF0njsSrSdTe7WHWkp3BLH3DEl2bRhiflOnBo29NSDdrY90hjtTQiTQkBxUgGOF29Xzg==
|
||||
|
||||
"@hey-api/json-schema-ref-parser@1.0.3":
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@hey-api/json-schema-ref-parser/-/json-schema-ref-parser-1.0.3.tgz#d20ed12edcbe679540af2647fb28ed61b7fbca7e"
|
||||
integrity sha512-jgyNFPUReGpdB0ihWv6m+Q3dcawtXx4t6cvi0NS4xxblulcCfEjThP5xVwShFiTRScckIQ/GsuZv20arRTIDkg==
|
||||
dependencies:
|
||||
"@jsdevtools/ono" "^7.1.3"
|
||||
"@types/json-schema" "^7.0.15"
|
||||
js-yaml "^4.1.0"
|
||||
|
||||
"@hey-api/openapi-ts@^0.64.7":
|
||||
version "0.64.15"
|
||||
resolved "https://registry.yarnpkg.com/@hey-api/openapi-ts/-/openapi-ts-0.64.15.tgz#655e8ee4039f9f190244e72595bcfee0adf43ad6"
|
||||
integrity sha512-bXpi9z3YEPVt9bVqlFA3hHmgDzfM8ID5kjnXR7t6PFxlmqo8CH8Y8aCNP7rMk1q7MXk42y2CXC2ehbU9cthCyw==
|
||||
dependencies:
|
||||
"@hey-api/json-schema-ref-parser" "1.0.3"
|
||||
c12 "2.0.1"
|
||||
commander "13.0.0"
|
||||
handlebars "4.7.8"
|
||||
|
||||
"@jsdevtools/ono@^7.1.3":
|
||||
version "7.1.3"
|
||||
resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796"
|
||||
integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==
|
||||
|
||||
"@types/json-schema@^7.0.15":
|
||||
version "7.0.15"
|
||||
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
|
||||
integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
|
||||
|
||||
acorn@^8.16.0:
|
||||
version "8.18.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.18.0.tgz#4faf01b2d6d326bfeed97aea1f52220b5f4c1940"
|
||||
integrity sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==
|
||||
|
||||
argparse@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
|
||||
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
|
||||
|
||||
c12@2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/c12/-/c12-2.0.1.tgz#5702d280b31a08abba39833494c9b1202f0f5aec"
|
||||
integrity sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==
|
||||
dependencies:
|
||||
chokidar "^4.0.1"
|
||||
confbox "^0.1.7"
|
||||
defu "^6.1.4"
|
||||
dotenv "^16.4.5"
|
||||
giget "^1.2.3"
|
||||
jiti "^2.3.0"
|
||||
mlly "^1.7.1"
|
||||
ohash "^1.1.4"
|
||||
pathe "^1.1.2"
|
||||
perfect-debounce "^1.0.0"
|
||||
pkg-types "^1.2.0"
|
||||
rc9 "^2.1.2"
|
||||
|
||||
chokidar@^4.0.1:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30"
|
||||
integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==
|
||||
dependencies:
|
||||
readdirp "^4.0.1"
|
||||
|
||||
chownr@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
|
||||
integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
|
||||
|
||||
citty@^0.1.6:
|
||||
version "0.1.6"
|
||||
resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.6.tgz#0f7904da1ed4625e1a9ea7e0fa780981aab7c5e4"
|
||||
integrity sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==
|
||||
dependencies:
|
||||
consola "^3.2.3"
|
||||
|
||||
commander@13.0.0:
|
||||
version "13.0.0"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-13.0.0.tgz#1b161f60ee3ceb8074583a0f95359a4f8701845c"
|
||||
integrity sha512-oPYleIY8wmTVzkvQq10AEok6YcTC4sRUBl8F9gVuwchGVUCTbl/vhLTaQqutuuySYOsu8YTgV+OxKc/8Yvx+mQ==
|
||||
|
||||
confbox@^0.1.7, confbox@^0.1.8:
|
||||
version "0.1.8"
|
||||
resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06"
|
||||
integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==
|
||||
|
||||
consola@^3.2.3, consola@^3.4.0:
|
||||
version "3.4.2"
|
||||
resolved "https://registry.yarnpkg.com/consola/-/consola-3.4.2.tgz#5af110145397bb67afdab77013fdc34cae590ea7"
|
||||
integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==
|
||||
|
||||
defu@^6.1.4:
|
||||
version "6.1.7"
|
||||
resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.7.tgz#72543567c8e9f97ff13ce402b6dbe09ac5ae4d23"
|
||||
integrity sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==
|
||||
|
||||
destr@^2.0.3:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.5.tgz#7d112ff1b925fb8d2079fac5bdb4a90973b51fdb"
|
||||
integrity sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==
|
||||
|
||||
dotenv@^16.4.5:
|
||||
version "16.6.1"
|
||||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020"
|
||||
integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==
|
||||
|
||||
fs-minipass@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
|
||||
integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
|
||||
dependencies:
|
||||
minipass "^3.0.0"
|
||||
|
||||
giget@^1.2.3:
|
||||
version "1.2.5"
|
||||
resolved "https://registry.yarnpkg.com/giget/-/giget-1.2.5.tgz#0bd4909356a0da75cc1f2b33538f93adec0d202f"
|
||||
integrity sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug==
|
||||
dependencies:
|
||||
citty "^0.1.6"
|
||||
consola "^3.4.0"
|
||||
defu "^6.1.4"
|
||||
node-fetch-native "^1.6.6"
|
||||
nypm "^0.5.4"
|
||||
pathe "^2.0.3"
|
||||
tar "^6.2.1"
|
||||
|
||||
handlebars@4.7.8:
|
||||
version "4.7.8"
|
||||
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9"
|
||||
integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==
|
||||
dependencies:
|
||||
minimist "^1.2.5"
|
||||
neo-async "^2.6.2"
|
||||
source-map "^0.6.1"
|
||||
wordwrap "^1.0.0"
|
||||
optionalDependencies:
|
||||
uglify-js "^3.1.4"
|
||||
|
||||
jiti@^2.3.0:
|
||||
version "2.7.0"
|
||||
resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.7.0.tgz#974228f2f4ca2bc21885a1797b45fea68e950c64"
|
||||
integrity sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==
|
||||
|
||||
js-yaml@^4.1.0:
|
||||
version "4.3.2"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.3.2.tgz#8e44fb14a2643c59726bb15787b5f1512cb3d3fb"
|
||||
integrity sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==
|
||||
dependencies:
|
||||
argparse "^2.0.1"
|
||||
|
||||
minimist@^1.2.5:
|
||||
version "1.2.8"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
|
||||
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
|
||||
|
||||
minipass@^3.0.0:
|
||||
version "3.3.6"
|
||||
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
|
||||
integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
|
||||
dependencies:
|
||||
yallist "^4.0.0"
|
||||
|
||||
minipass@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
|
||||
integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
|
||||
|
||||
minizlib@^2.1.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
|
||||
integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
|
||||
dependencies:
|
||||
minipass "^3.0.0"
|
||||
yallist "^4.0.0"
|
||||
|
||||
mkdirp@^1.0.3:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
|
||||
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
|
||||
|
||||
mlly@^1.7.1, mlly@^1.7.4:
|
||||
version "1.8.2"
|
||||
resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.8.2.tgz#e7f7919a82d13b174405613117249a3f449d78bb"
|
||||
integrity sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==
|
||||
dependencies:
|
||||
acorn "^8.16.0"
|
||||
pathe "^2.0.3"
|
||||
pkg-types "^1.3.1"
|
||||
ufo "^1.6.3"
|
||||
|
||||
neo-async@^2.6.2:
|
||||
version "2.6.2"
|
||||
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
|
||||
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
|
||||
|
||||
node-fetch-native@^1.6.6:
|
||||
version "1.6.7"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.7.tgz#9d09ca63066cc48423211ed4caf5d70075d76a71"
|
||||
integrity sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==
|
||||
|
||||
nypm@^0.5.4:
|
||||
version "0.5.4"
|
||||
resolved "https://registry.yarnpkg.com/nypm/-/nypm-0.5.4.tgz#a5ab0d8d37f96342328479f88ef58699f29b3051"
|
||||
integrity sha512-X0SNNrZiGU8/e/zAB7sCTtdxWTMSIO73q+xuKgglm2Yvzwlo8UoC5FNySQFCvl84uPaeADkqHUZUkWy4aH4xOA==
|
||||
dependencies:
|
||||
citty "^0.1.6"
|
||||
consola "^3.4.0"
|
||||
pathe "^2.0.3"
|
||||
pkg-types "^1.3.1"
|
||||
tinyexec "^0.3.2"
|
||||
ufo "^1.5.4"
|
||||
|
||||
ohash@^1.1.4:
|
||||
version "1.1.6"
|
||||
resolved "https://registry.yarnpkg.com/ohash/-/ohash-1.1.6.tgz#9ff7b0271d7076290794537d68ec2b40a60d133e"
|
||||
integrity sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg==
|
||||
|
||||
pathe@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec"
|
||||
integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==
|
||||
|
||||
pathe@^2.0.1, pathe@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716"
|
||||
integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==
|
||||
|
||||
perfect-debounce@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a"
|
||||
integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==
|
||||
|
||||
pkg-types@^1.2.0, pkg-types@^1.3.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.3.1.tgz#bd7cc70881192777eef5326c19deb46e890917df"
|
||||
integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==
|
||||
dependencies:
|
||||
confbox "^0.1.8"
|
||||
mlly "^1.7.4"
|
||||
pathe "^2.0.1"
|
||||
|
||||
rc9@^2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/rc9/-/rc9-2.1.2.tgz#6282ff638a50caa0a91a31d76af4a0b9cbd1080d"
|
||||
integrity sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==
|
||||
dependencies:
|
||||
defu "^6.1.4"
|
||||
destr "^2.0.3"
|
||||
|
||||
readdirp@^4.0.1:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d"
|
||||
integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==
|
||||
|
||||
source-map@^0.6.1:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
||||
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
||||
|
||||
tar@^6.2.1:
|
||||
version "6.2.1"
|
||||
resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a"
|
||||
integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==
|
||||
dependencies:
|
||||
chownr "^2.0.0"
|
||||
fs-minipass "^2.0.0"
|
||||
minipass "^5.0.0"
|
||||
minizlib "^2.1.1"
|
||||
mkdirp "^1.0.3"
|
||||
yallist "^4.0.0"
|
||||
|
||||
tinyexec@^0.3.2:
|
||||
version "0.3.2"
|
||||
resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2"
|
||||
integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==
|
||||
|
||||
typescript@^5.9.3:
|
||||
version "5.9.3"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f"
|
||||
integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==
|
||||
|
||||
ufo@^1.5.4, ufo@^1.6.3:
|
||||
version "1.6.4"
|
||||
resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.4.tgz#7a8fb875fcc6382d2c7d0b3692738b0500a92467"
|
||||
integrity sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==
|
||||
|
||||
uglify-js@^3.1.4:
|
||||
version "3.19.3"
|
||||
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f"
|
||||
integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==
|
||||
|
||||
wordwrap@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
|
||||
integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==
|
||||
|
||||
yallist@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
|
||||
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
|
||||
Reference in New Issue
Block a user