[ { "path": ".dockerignore", "sha256": "05e792a87ca350e1cc48174dda1ea1126ee13a5f8fe9d549d2b033382071e7a9", "byteCount": 68, "lineCount": 8, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": ".env.example", "sha256": "997fd4cabe96dd692f1dde691a3ea157e86d97c577dfa7198690a91169278bad", "byteCount": 454, "lineCount": 10, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": ".gitignore", "sha256": "eb13e93639d4c770f0a28ba670e9f4a922bc20ff1e734bdbe916740b0ae13d74", "byteCount": 81, "lineCount": 9, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "BACKEND_INTEGRATION.md", "sha256": "158eb879fee9577edfe4b5c995515b3cdd355afbe8c2da032ef94806342acda7", "byteCount": 15976, "lineCount": 407, "language": "Plain text", "imports": [ "import axios from \"axios\";" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "DATABASE_SCHEMA.md", "sha256": "3ed816173486b37243d1ed66b0d8aeaa4ecb1dd286fbc76d3afeace639eb5292", "byteCount": 15731, "lineCount": 319, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "Dockerfile", "sha256": "b8a66b84a1ddbdfe82ee72e99cd157b8e017daf43b57f28c2942f2d2603896ff", "byteCount": 334, "lineCount": 15, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "README.md", "sha256": "0da2647eea50431bef6d86fc1dd848d152b7be83efd118bd974f3b96e854479f", "byteCount": 13231, "lineCount": 134, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/.dockerignore", "sha256": "af2b4e4ac92bbf09917306ecd5889749f9767550f60caa067a722a2f3832506c", "byteCount": 59, "lineCount": 7, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/.prettierrc", "sha256": "30d23aaa5811720602dec802795cbc172c65bc56eb8c683fc5b12c10dcb05563", "byteCount": 56, "lineCount": 5, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/Dockerfile", "sha256": "1dde4bb4a1064657518fb9d48bd7fbb4d97dd635e70198285b750b93648eaf01", "byteCount": 903, "lineCount": 41, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/README.md", "sha256": "5e87b28bd419d1c83f2f44de2e150d0260da361547fc53d60016d0b64153101d", "byteCount": 5126, "lineCount": 99, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/eslint.config.mjs", "sha256": "e94fea27c5d744a435cba627eb7097993c14a66a21f478c3729781bcdf4c8fba", "byteCount": 934, "lineCount": 36, "language": "Plain text", "imports": [ "import eslint from '@eslint/js';", "import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';", "import globals from 'globals';", "import tseslint from 'typescript-eslint';" ], "exports": [ "export default tseslint.config(" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/nest-cli.json", "sha256": "84dc81177a0db2270bd71242b910f07982c56eec68285694c9cbffc3911912ba", "byteCount": 179, "lineCount": 9, "language": "JSON", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [ "$schema", "collection", "sourceRoot", "compilerOptions", "deleteOutDir" ], "readSucceeded": true, "readError": null }, { "path": "backend/package.json", "sha256": "8b14580b286dc09e3f0865efced27d9bcf7b5aa1eae6e7c57a27d0432c95270b", "byteCount": 2619, "lineCount": 91, "language": "JSON", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [ "name", "version", "description", "author", "private", "license", "scripts", "build", "format", "start", "startdev:", "startdebug:", "startprod:", "lint", "test" ], "readSucceeded": true, "readError": null }, { "path": "backend/prisma/migrations/20260526145407_init/migration.sql", "sha256": "aa8b760653d23b2c2ad189f2fd472965ff5832338dac68ed935da2712e58ff6e", "byteCount": 9223, "lineCount": 261, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/prisma/migrations/20260526160916_add_ui_texts_and_scientific_terms/migration.sql", "sha256": "8a6e5902dfa6a8c87180c567b522a6e6fe23ba7aaed1247051eda19dbc5b2561", "byteCount": 421, "lineCount": 18, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/prisma/migrations/migration_lock.toml", "sha256": "74a9137885ce73d3ff088d79d658f8066e05e680fb51c0800a290c91c0c01d48", "byteCount": 128, "lineCount": 3, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/prisma/schema.prisma", "sha256": "a92c30cab66c0ca46b4b922d25e2c931f02a88a9e161699952d8ae245b1b4ae1", "byteCount": 9322, "lineCount": 243, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [ "@default", "@map", "@relation", "@index", "@id", "@unique" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/prisma/seed.ts", "sha256": "160ea6723dab5f10d735fe399c1a2aa1640f61513523f7067091b47fe045de75", "byteCount": 10150, "lineCount": 232, "language": "TypeScript", "imports": [ "import { PrismaClient } from '@prisma/client';", "import * as fs from 'fs';", "import * as path from 'path';", "import * as ts from 'typescript';", "import * as vm from 'vm';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/app.controller.spec.ts", "sha256": "43750c632fc7f5997ddd690d4c3989443ab29ebd8866ee1fec6f3885834f8054", "byteCount": 639, "lineCount": 23, "language": "TypeScript", "imports": [ "import { Test, TestingModule } from '@nestjs/testing';", "import { AppController } from './app.controller';", "import { AppService } from './app.service';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "AppController", "root", "should return " ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/app.controller.ts", "sha256": "3469c5aa62e1ba5b183d9bb9d40193e91aa761fc5734d332650b0bd49c346266", "byteCount": 286, "lineCount": 13, "language": "TypeScript", "imports": [ "import { Controller, Get } from '@nestjs/common';", "import { AppService } from './app.service';" ], "exports": [ "export class AppController {" ], "topLevelSymbols": [ "AppController" ], "frameworkDecorators": [ "@Controller", "@Get" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/app.module.ts", "sha256": "51c23094ed88846ef86f7d8e101e8863c4225de61aee9ac01372f36a16e5b876", "byteCount": 1399, "lineCount": 48, "language": "TypeScript", "imports": [ "import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';", "import { PrismaModule } from './prisma/prisma.module';", "import { ProductsModule } from './products/products.module';", "import { UsersModule } from './users/users.module';", "import { RedisModule } from './redis/redis.module';", "import { AuthModule } from './auth/auth.module';", "import { PetsModule } from './pets/pets.module';", "import { OrdersModule } from './orders/orders.module';", "import { SettingsModule } from './settings/settings.module';", "import { ThrottlerModule, ThrottlerGuard } from '@nestjs/throttler';", "import { APP_GUARD } from '@nestjs/core';", "import { MetricsController } from './common/metrics.controller';" ], "exports": [ "export class AppModule implements NestModule {" ], "topLevelSymbols": [ "AppModule" ], "frameworkDecorators": [ "@Module" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/app.service.ts", "sha256": "5d4242d50092a353e5ab1f06663a89dbc714c7d9d70072ea03c83c5b14750f05", "byteCount": 150, "lineCount": 9, "language": "TypeScript", "imports": [ "import { Injectable } from '@nestjs/common';" ], "exports": [ "export class AppService {" ], "topLevelSymbols": [ "AppService" ], "frameworkDecorators": [ "@Injectable" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/auth/auth.controller.spec.ts", "sha256": "92c30cdac367bb8c17424dbeab672ded0c6f301d31fc81b8589379bbfbc1f71a", "byteCount": 1564, "lineCount": 48, "language": "TypeScript", "imports": [ "import { Test, TestingModule } from '@nestjs/testing';", "import { AuthController } from './auth.controller';", "import { AuthService } from './auth.service';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "AuthController", "should be defined", "should call sendOtp on service", "should call verifyOtp on service" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/auth/auth.controller.ts", "sha256": "dc26a41ecfcfdf7ee9fd6ed8dd03e30c2fe6024f92351295a56eb46e48e578fb", "byteCount": 3050, "lineCount": 95, "language": "TypeScript", "imports": [ "import { Controller, Post, Body, HttpCode, HttpStatus } from '@nestjs/common';", "import { AuthService } from './auth.service';", "import { SendOtpDto } from './dto/send-otp.dto';", "import { VerifyOtpDto } from './dto/verify-otp.dto';", "import { ApiTags, ApiOperation, ApiResponse, ApiOkResponse, ApiBadRequestResponse } from '@nestjs/swagger';" ], "exports": [ "export class AuthController {" ], "topLevelSymbols": [ "AuthController" ], "frameworkDecorators": [ "@ApiTags", "@Controller", "@ApiResponse", "@Post", "@HttpCode", "@ApiOperation", "@ApiOkResponse", "@ApiBadRequestResponse", "@Body" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/auth/auth.module.ts", "sha256": "e1ccf4f9a5b1de18210d49bb65868c36dcfd6a216d4c2c9e4d9e2dd490d571a1", "byteCount": 681, "lineCount": 23, "language": "TypeScript", "imports": [ "import { Module } from '@nestjs/common';", "import { JwtModule } from '@nestjs/jwt';", "import { PassportModule } from '@nestjs/passport';", "import { AuthService } from './auth.service';", "import { AuthController } from './auth.controller';", "import { JwtStrategy } from './jwt.strategy';", "import { UsersModule } from '../users/users.module';" ], "exports": [ "export class AuthModule {}" ], "topLevelSymbols": [ "AuthModule" ], "frameworkDecorators": [ "@Module" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/auth/auth.service.spec.ts", "sha256": "177b09fdfe0f747ee1ae7df98c86fa4b644aaf8c66b33f89e0328e534fa67e01", "byteCount": 3765, "lineCount": 110, "language": "TypeScript", "imports": [ "import { Test, TestingModule } from '@nestjs/testing';", "import { AuthService } from './auth.service';", "import { PrismaService } from '../prisma/prisma.service';", "import { JwtService } from '@nestjs/jwt';", "import { RedisService } from '../redis/redis.service';", "import { BadRequestException } from '@nestjs/common';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "AuthService", "should be defined", "sendOtp", "should generate a 5 digit OTP and save it in Redis", "verifyOtp", "should throw BadRequestException if OTP is expired/not found", "should throw BadRequestException if OTP is incorrect", "should delete OTP, find or create user and sign JWT", "should create new user if user does not exist" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/auth/auth.service.ts", "sha256": "b72a2c20bbc1c0f8b4e2223c0b161747cdd8b1214fb8fe1e8a3a78223fe42bab", "byteCount": 2024, "lineCount": 67, "language": "TypeScript", "imports": [ "import { Injectable, BadRequestException } from '@nestjs/common';", "import { JwtService } from '@nestjs/jwt';", "import { PrismaService } from '../prisma/prisma.service';", "import { RedisService } from '../redis/redis.service';", "import { SendOtpDto } from './dto/send-otp.dto';", "import { VerifyOtpDto } from './dto/verify-otp.dto';" ], "exports": [ "export class AuthService {" ], "topLevelSymbols": [ "AuthService" ], "frameworkDecorators": [ "@Injectable" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/auth/dto/send-otp.dto.ts", "sha256": "df509a1e3c9fc8846ce920192a43cf38ef76db7953d07d187d477bdfe44ec157", "byteCount": 384, "lineCount": 11, "language": "TypeScript", "imports": [ "import { ApiProperty } from '@nestjs/swagger';", "import { IsNotEmpty, IsString, Matches } from 'class-validator';" ], "exports": [ "export class SendOtpDto {" ], "topLevelSymbols": [ "SendOtpDto" ], "frameworkDecorators": [ "@ApiProperty", "@IsNotEmpty", "@IsString", "@Matches" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/auth/dto/verify-otp.dto.ts", "sha256": "4115fc64ad8a38f2c5ae933af99a611aacd02b0a8b4e2859f5d2804126850acd", "byteCount": 610, "lineCount": 17, "language": "TypeScript", "imports": [ "import { ApiProperty } from '@nestjs/swagger';", "import { IsNotEmpty, IsString, Length, Matches } from 'class-validator';" ], "exports": [ "export class VerifyOtpDto {" ], "topLevelSymbols": [ "VerifyOtpDto" ], "frameworkDecorators": [ "@ApiProperty", "@IsNotEmpty", "@IsString", "@Matches", "@Length" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/auth/jwt-auth.guard.ts", "sha256": "e654c3250653cb79863bc5d2ed6d89e3ab5e04f3b4945bab04fafedbaea04509", "byteCount": 413, "lineCount": 13, "language": "TypeScript", "imports": [ "import { Injectable, UnauthorizedException } from '@nestjs/common';", "import { AuthGuard } from '@nestjs/passport';" ], "exports": [ "export class JwtAuthGuard extends AuthGuard('jwt') {" ], "topLevelSymbols": [ "JwtAuthGuard" ], "frameworkDecorators": [ "@Injectable" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/auth/jwt.strategy.ts", "sha256": "2fd8214610a59f1bb4fdb517946e8c1d2402b6dc88a1bd62b22719734cf969ed", "byteCount": 787, "lineCount": 24, "language": "TypeScript", "imports": [ "import { ExtractJwt, Strategy } from 'passport-jwt';", "import { PassportStrategy } from '@nestjs/passport';", "import { Injectable, UnauthorizedException } from '@nestjs/common';", "import { UsersService } from '../users/users.service';" ], "exports": [ "export class JwtStrategy extends PassportStrategy(Strategy) {" ], "topLevelSymbols": [ "JwtStrategy" ], "frameworkDecorators": [ "@Injectable" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/common/filters/http-exception.filter.ts", "sha256": "ef8428b791bc2f4b6c1e1110f910b1cfd5d1728db572423e7859cebc1dc5559d", "byteCount": 833, "lineCount": 20, "language": "TypeScript", "imports": [ "import { ExceptionFilter, Catch, ArgumentsHost, HttpException } from '@nestjs/common';", "import { Response } from 'express';" ], "exports": [ "export class HttpExceptionFilter implements ExceptionFilter {" ], "topLevelSymbols": [ "HttpExceptionFilter" ], "frameworkDecorators": [ "@Catch" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/common/metrics.controller.ts", "sha256": "3ed5cb3298ef3030c097703556b68fe5c4ce0a406f7f6a43b51e883a6ae3a51c", "byteCount": 2170, "lineCount": 68, "language": "TypeScript", "imports": [ "import { Controller, Get, Res } from '@nestjs/common';", "import { ApiExcludeController } from '@nestjs/swagger';", "import { PrismaService } from '../../src/prisma/prisma.service';", "import { Response } from 'express';" ], "exports": [ "export class MetricsController {" ], "topLevelSymbols": [ "MetricsController" ], "frameworkDecorators": [ "@ApiExcludeController", "@Controller", "@Get", "@Res" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/main.ts", "sha256": "6f6f86698f76639b26ad9a38fd6f572fe884f270cd70adf69342e4f99906a43f", "byteCount": 1222, "lineCount": 42, "language": "TypeScript", "imports": [ "import { NestFactory } from '@nestjs/core';", "import { AppModule } from './app.module';", "import { ValidationPipe } from '@nestjs/common';", "import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';", "import { HttpExceptionFilter } from './common/filters/http-exception.filter';", "import helmet from 'helmet';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/orders/dto/create-order.dto.ts", "sha256": "82a19cb52f0a2346fc906f46e5b05564e54b287f1b0e12da0f3e12221671c5d7", "byteCount": 822, "lineCount": 29, "language": "TypeScript", "imports": [ "import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';", "import { IsNotEmpty, IsArray, ValidateNested, IsNumber, IsOptional, IsString } from 'class-validator';", "import { Type } from 'class-transformer';" ], "exports": [ "export class CreateOrderDto {" ], "topLevelSymbols": [ "CreateOrderDto" ], "frameworkDecorators": [ "@ApiProperty", "@IsNotEmpty", "@IsString", "@IsNumber", "@ApiPropertyOptional", "@IsOptional", "@IsArray", "@ValidateNested", "@Type" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/orders/orders.controller.spec.ts", "sha256": "a8990002863f2f6bfd99af91e9c6f4a67e9457fbef9caf2a07e7af2c9fce3b85", "byteCount": 1961, "lineCount": 57, "language": "TypeScript", "imports": [ "import { Test, TestingModule } from '@nestjs/testing';", "import { OrdersController } from './orders.controller';", "import { OrdersService } from './orders.service';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "OrdersController", "should be defined", "should create order", "should list orders of user", "should find one order" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/orders/orders.controller.ts", "sha256": "dc251b61af61a8c6e80aba15dbbbe27d5940e78081c369536c721ddde569a09d", "byteCount": 4001, "lineCount": 122, "language": "TypeScript", "imports": [ "import { Controller, Get, Post, Body, Param, UseGuards, Req, HttpStatus } from '@nestjs/common';", "import { OrdersService } from './orders.service';", "import { CreateOrderDto } from './dto/create-order.dto';", "import { JwtAuthGuard } from '../auth/jwt-auth.guard';", "import { ApiTags, ApiBearerAuth, ApiOperation, ApiResponse, ApiOkResponse, ApiCreatedResponse, ApiBadRequestResponse, ApiNotFoundResponse } from '@nestjs/swagger';" ], "exports": [ "export class OrdersController {" ], "topLevelSymbols": [ "OrdersController" ], "frameworkDecorators": [ "@ApiTags", "@ApiBearerAuth", "@UseGuards", "@Controller", "@ApiResponse", "@Post", "@ApiOperation", "@ApiCreatedResponse", "@ApiBadRequestResponse", "@Req", "@Body", "@Get", "@ApiOkResponse", "@ApiNotFoundResponse", "@Param" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/orders/orders.module.ts", "sha256": "e36df12f5dc4cc036872c3b98f01c4060d24f526c399d6c7ec193ee7220bcba3", "byteCount": 264, "lineCount": 10, "language": "TypeScript", "imports": [ "import { Module } from '@nestjs/common';", "import { OrdersService } from './orders.service';", "import { OrdersController } from './orders.controller';" ], "exports": [ "export class OrdersModule {}" ], "topLevelSymbols": [ "OrdersModule" ], "frameworkDecorators": [ "@Module" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/orders/orders.service.spec.ts", "sha256": "8fb10c94adc23816814ce5d8b92c08c898a6c8eadea36ee932f91b7bd79bc9a4", "byteCount": 3470, "lineCount": 104, "language": "TypeScript", "imports": [ "import { Test, TestingModule } from '@nestjs/testing';", "import { OrdersService } from './orders.service';", "import { PrismaService } from '../prisma/prisma.service';", "import { NotFoundException, BadRequestException } from '@nestjs/common';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "OrdersService", "should be defined", "create", "should throw NotFoundException if product does not exist", "should throw BadRequestException if items are empty", "should successfully create order and sum amounts", "findAllByUser", "should find all orders of a user", "findOne", "should throw NotFoundException if order does not exist", "should return order if found" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/orders/orders.service.ts", "sha256": "50a9f0ef8b15214a9e6422ba514b9c0e81ffcbdb170210870f75cc6013d83d66", "byteCount": 1898, "lineCount": 70, "language": "TypeScript", "imports": [ "import { Injectable, NotFoundException, BadRequestException } from '@nestjs/common';", "import { PrismaService } from '../prisma/prisma.service';", "import { CreateOrderDto } from './dto/create-order.dto';" ], "exports": [ "export class OrdersService {" ], "topLevelSymbols": [ "OrdersService" ], "frameworkDecorators": [ "@Injectable" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/pets/dto/create-pet.dto.ts", "sha256": "842a23c6ce7d596dcac91a0a5849422b584a7eacdcc12d28faa70f600973c976", "byteCount": 1277, "lineCount": 45, "language": "TypeScript", "imports": [ "import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';", "import { IsNotEmpty, IsString, IsOptional, IsNumber, IsBoolean, IsDateString } from 'class-validator';" ], "exports": [ "export class CreatePetDto {" ], "topLevelSymbols": [ "CreatePetDto" ], "frameworkDecorators": [ "@ApiProperty", "@IsNotEmpty", "@IsString", "@ApiPropertyOptional", "@IsOptional", "@IsNumber", "@IsDateString", "@IsBoolean" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/pets/dto/update-pet.dto.ts", "sha256": "9215ef8d3ba4d104629e18ece5e38d8b22d5b12fa8d7b032b885923a2d00c42f", "byteCount": 160, "lineCount": 5, "language": "TypeScript", "imports": [ "import { PartialType } from '@nestjs/swagger';", "import { CreatePetDto } from './create-pet.dto';" ], "exports": [ "export class UpdatePetDto extends PartialType(CreatePetDto) {}" ], "topLevelSymbols": [ "UpdatePetDto" ], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/pets/pets.controller.spec.ts", "sha256": "3bc537a47fa3bb87b9cc1916a849013b9fd94905b89b4155fe95cad5ca09b7cb", "byteCount": 2602, "lineCount": 74, "language": "TypeScript", "imports": [ "import { Test, TestingModule } from '@nestjs/testing';", "import { PetsController } from './pets.controller';", "import { PetsService } from './pets.service';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "PetsController", "should be defined", "should create pet", "should findAll pets", "should findOne pet", "should update pet", "should remove pet" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/pets/pets.controller.ts", "sha256": "f89faaeb9ead2a83b5f802577cabb39a107833429852bfeead3d06e1cc2777a8", "byteCount": 5567, "lineCount": 180, "language": "TypeScript", "imports": [ "import { Controller, Get, Post, Body, Patch, Param, Delete, UseGuards, Req, HttpStatus } from '@nestjs/common';", "import { PetsService } from './pets.service';", "import { CreatePetDto } from './dto/create-pet.dto';", "import { UpdatePetDto } from './dto/update-pet.dto';", "import { JwtAuthGuard } from '../auth/jwt-auth.guard';", "import { ApiTags, ApiBearerAuth, ApiOperation, ApiResponse, ApiOkResponse, ApiCreatedResponse, ApiBadRequestResponse, ApiNotFoundResponse } from '@nestjs/swagger';" ], "exports": [ "export class PetsController {" ], "topLevelSymbols": [ "PetsController" ], "frameworkDecorators": [ "@ApiTags", "@ApiBearerAuth", "@UseGuards", "@Controller", "@ApiResponse", "@Post", "@ApiOperation", "@ApiCreatedResponse", "@ApiBadRequestResponse", "@Req", "@Body", "@Get", "@ApiOkResponse", "@ApiNotFoundResponse", "@Param" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/pets/pets.module.ts", "sha256": "32c9118ec8ee3f83bbaebea3247ad10e6c0b257dd0ec4ae80de8fbe135cdb9e5", "byteCount": 250, "lineCount": 10, "language": "TypeScript", "imports": [ "import { Module } from '@nestjs/common';", "import { PetsService } from './pets.service';", "import { PetsController } from './pets.controller';" ], "exports": [ "export class PetsModule {}" ], "topLevelSymbols": [ "PetsModule" ], "frameworkDecorators": [ "@Module" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/pets/pets.service.spec.ts", "sha256": "9b927330f92c4791b59152601254d48f0aa0b9d92e4f1786775cf699fd278dfe", "byteCount": 3042, "lineCount": 94, "language": "TypeScript", "imports": [ "import { Test, TestingModule } from '@nestjs/testing';", "import { PetsService } from './pets.service';", "import { PrismaService } from '../prisma/prisma.service';", "import { NotFoundException } from '@nestjs/common';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "PetsService", "should be defined", "should create pet", "should find all pets by user", "findOne", "should throw NotFoundException if pet not found", "should return pet if found", "should update pet", "should remove pet" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/pets/pets.service.ts", "sha256": "00af95136a389248d667c4e981dbb5a12c43425054007e7b3a7ebc074d2ea07f", "byteCount": 1745, "lineCount": 62, "language": "TypeScript", "imports": [ "import { Injectable, NotFoundException } from '@nestjs/common';", "import { PrismaService } from '../prisma/prisma.service';", "import { CreatePetDto } from './dto/create-pet.dto';", "import { UpdatePetDto } from './dto/update-pet.dto';" ], "exports": [ "export class PetsService {" ], "topLevelSymbols": [ "PetsService" ], "frameworkDecorators": [ "@Injectable" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/prisma/prisma.module.ts", "sha256": "14d19dcd7848e4d134cd9eaa205818d5e0302123a5fc5ea2440d358a39f2fd25", "byteCount": 219, "lineCount": 10, "language": "TypeScript", "imports": [ "import { Global, Module } from '@nestjs/common';", "import { PrismaService } from './prisma.service';" ], "exports": [ "export class PrismaModule {}" ], "topLevelSymbols": [ "PrismaModule" ], "frameworkDecorators": [ "@Global", "@Module" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/prisma/prisma.service.ts", "sha256": "58334e95599a754096851809483901a14e85a9e4d190655f74be6171ce1388b7", "byteCount": 363, "lineCount": 14, "language": "TypeScript", "imports": [ "import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';", "import { PrismaClient } from '@prisma/client';" ], "exports": [ "export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {" ], "topLevelSymbols": [ "PrismaService" ], "frameworkDecorators": [ "@Injectable" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/products/dto/get-products.dto.ts", "sha256": "39c1ee94138e1d5c0f6aaeadfbc653a2f200a64825a0d868db937f40abb14d89", "byteCount": 574, "lineCount": 20, "language": "TypeScript", "imports": [ "import { ApiPropertyOptional } from '@nestjs/swagger';", "import { IsOptional, IsString, IsEnum } from 'class-validator';" ], "exports": [ "export class GetProductsDto {" ], "topLevelSymbols": [ "GetProductsDto" ], "frameworkDecorators": [ "@ApiPropertyOptional", "@IsOptional", "@IsString", "@IsEnum" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/products/products.controller.spec.ts", "sha256": "058f4dd9afddc070fe22d5de3ab70e85fef19fdcb9c92d2cc73a90ddc3fa493b", "byteCount": 1905, "lineCount": 57, "language": "TypeScript", "imports": [ "import { Test, TestingModule } from '@nestjs/testing';", "import { ProductsController } from './products.controller';", "import { ProductsService } from './products.service';", "import { NotFoundException } from '@nestjs/common';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "ProductsController", "should be defined", "should list products", "findOne", "should throw NotFoundException if product not found", "should return product details if found" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/products/products.controller.ts", "sha256": "2f5f9f97e5cfc3a4679b237e373781832ba243a9a622f64c9d5ddc6ad16b744e", "byteCount": 4161, "lineCount": 106, "language": "TypeScript", "imports": [ "import { Controller, Get, Query, Param, NotFoundException, HttpStatus } from '@nestjs/common';", "import { ProductsService } from './products.service';", "import { GetProductsDto } from './dto/get-products.dto';", "import { ApiTags, ApiOperation, ApiResponse, ApiOkResponse, ApiNotFoundResponse } from '@nestjs/swagger';" ], "exports": [ "export class ProductsController {" ], "topLevelSymbols": [ "ProductsController" ], "frameworkDecorators": [ "@ApiTags", "@Controller", "@ApiResponse", "@Get", "@ApiOperation", "@ApiOkResponse", "@Query", "@ApiNotFoundResponse", "@Param" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/products/products.module.ts", "sha256": "01e51354c6922d10d7fab9dd79973901219d8a8ce06aaa5ff14cae5241796f41", "byteCount": 278, "lineCount": 10, "language": "TypeScript", "imports": [ "import { Module } from '@nestjs/common';", "import { ProductsService } from './products.service';", "import { ProductsController } from './products.controller';" ], "exports": [ "export class ProductsModule {}" ], "topLevelSymbols": [ "ProductsModule" ], "frameworkDecorators": [ "@Module" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/products/products.service.spec.ts", "sha256": "316e5eadae7ab595acf34b1621353a17fdc0ed0de0a5afb546e689604f949189", "byteCount": 2190, "lineCount": 76, "language": "TypeScript", "imports": [ "import { Test, TestingModule } from '@nestjs/testing';", "import { ProductsService } from './products.service';", "import { PrismaService } from '../prisma/prisma.service';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "ProductsService", "should be defined", "findAll", "should query products with correct filters", "findOne", "should find product by id" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/products/products.service.ts", "sha256": "3bb43f3f8b22a8bd18fcfccf18bef45591d9564ad8e01276638c892ceea1f023", "byteCount": 1180, "lineCount": 50, "language": "TypeScript", "imports": [ "import { Injectable } from '@nestjs/common';", "import { PrismaService } from '../prisma/prisma.service';", "import { GetProductsDto } from './dto/get-products.dto';" ], "exports": [ "export class ProductsService {" ], "topLevelSymbols": [ "ProductsService" ], "frameworkDecorators": [ "@Injectable" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/redis/redis.module.ts", "sha256": "d2ad5482ca33266c13666b8d6249d90dcd62527e472cb12d98c4e3ebae8fcac8", "byteCount": 214, "lineCount": 10, "language": "TypeScript", "imports": [ "import { Module, Global } from '@nestjs/common';", "import { RedisService } from './redis.service';" ], "exports": [ "export class RedisModule {}" ], "topLevelSymbols": [ "RedisModule" ], "frameworkDecorators": [ "@Global", "@Module" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/redis/redis.service.spec.ts", "sha256": "c6782b6b177f0d73aba0501d86634f12ba1f6ddcbdb995aaf0e70a34f194e583", "byteCount": 1581, "lineCount": 57, "language": "TypeScript", "imports": [ "import { Test, TestingModule } from '@nestjs/testing';", "import { RedisService } from './redis.service';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "RedisService", "should be defined", "should call set with or without ttl", "should call get", "should call del" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/redis/redis.service.ts", "sha256": "a8f03151af8caa570f0c6ad62e726aea257012e811bad80405826c3aafac8bb7", "byteCount": 865, "lineCount": 35, "language": "TypeScript", "imports": [ "import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common';", "import Redis from 'ioredis';" ], "exports": [ "export class RedisService implements OnModuleInit, OnModuleDestroy {" ], "topLevelSymbols": [ "RedisService" ], "frameworkDecorators": [ "@Injectable" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/settings/settings.controller.spec.ts", "sha256": "2e7ddf051244941e3c6be2486a6279f8a1bfddf59876c4dea4d0a0915eb40fc4", "byteCount": 2375, "lineCount": 68, "language": "TypeScript", "imports": [ "import { Test, TestingModule } from '@nestjs/testing';", "import { SettingsController } from './settings.controller';", "import { SettingsService } from './settings.service';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "SettingsController", "should be defined", "should getUiTexts", "should updateUiText", "should getScientificTerms", "should upsertScientificTerm", "should deleteScientificTerm" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/settings/settings.controller.ts", "sha256": "9847018dda0c55aabc2299bef26b069a1962853d6dc4133d425c32dd05dd386d", "byteCount": 4207, "lineCount": 111, "language": "TypeScript", "imports": [ "import { Controller, Get, Patch, Put, Delete, Body, Param, UseGuards, HttpStatus } from '@nestjs/common';", "import { SettingsService } from './settings.service';", "import { JwtAuthGuard } from '../auth/jwt-auth.guard';", "import { ApiTags, ApiOperation, ApiBearerAuth, ApiResponse, ApiOkResponse, ApiUnauthorizedResponse } from '@nestjs/swagger';" ], "exports": [ "export class SettingsController {" ], "topLevelSymbols": [ "SettingsController" ], "frameworkDecorators": [ "@ApiTags", "@Controller", "@Get", "@ApiOperation", "@ApiOkResponse", "@UseGuards", "@ApiBearerAuth", "@Patch", "@ApiUnauthorizedResponse", "@Param", "@Body", "@Put", "@Delete" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/settings/settings.module.ts", "sha256": "07af4ac2bbc8ae7ffb62ae1850c91df2672afbe5e58da93388b9aba0d691eae9", "byteCount": 394, "lineCount": 13, "language": "TypeScript", "imports": [ "import { Module } from '@nestjs/common';", "import { SettingsService } from './settings.service';", "import { SettingsController } from './settings.controller';", "import { PrismaModule } from '../prisma/prisma.module';" ], "exports": [ "export class SettingsModule {}" ], "topLevelSymbols": [ "SettingsModule" ], "frameworkDecorators": [ "@Module" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/settings/settings.service.spec.ts", "sha256": "b5b8cdc91d26a561b7493885265e1d75a8c86f79cb0778e0f602b9d83c54b55d", "byteCount": 2814, "lineCount": 87, "language": "TypeScript", "imports": [ "import { Test, TestingModule } from '@nestjs/testing';", "import { SettingsService } from './settings.service';", "import { PrismaService } from '../prisma/prisma.service';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "SettingsService", "should be defined", "should getUiTexts", "should updateUiText", "should getScientificTerms", "should upsertScientificTerm", "should deleteScientificTerm" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/settings/settings.service.ts", "sha256": "278619cac4d4ae3b85a8b3075840a5265ac2732f40e4c3161e9dd16a818761b5", "byteCount": 1115, "lineCount": 47, "language": "TypeScript", "imports": [ "import { Injectable } from '@nestjs/common';", "import { PrismaService } from '../prisma/prisma.service';" ], "exports": [ "export class SettingsService {" ], "topLevelSymbols": [ "SettingsService" ], "frameworkDecorators": [ "@Injectable" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/users/dto/address.dto.ts", "sha256": "caaf6a055df72439795c85eba8e9a78fedf0e70b4f593d4b337aaae8440af6da", "byteCount": 1142, "lineCount": 45, "language": "TypeScript", "imports": [ "import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';", "import { IsString, IsNotEmpty, IsOptional, IsBoolean } from 'class-validator';" ], "exports": [ "export class AddressDto {" ], "topLevelSymbols": [ "AddressDto" ], "frameworkDecorators": [ "@ApiProperty", "@IsString", "@IsNotEmpty", "@ApiPropertyOptional", "@IsOptional", "@IsBoolean" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/users/dto/update-profile.dto.ts", "sha256": "2a4d80862f02cfa37a3f9f8d9d9d1191c2fe611e1eea6f21cc954a77f7add959", "byteCount": 714, "lineCount": 25, "language": "TypeScript", "imports": [ "import { ApiPropertyOptional } from '@nestjs/swagger';", "import { IsOptional, IsString, IsEmail } from 'class-validator';" ], "exports": [ "export class UpdateProfileDto {" ], "topLevelSymbols": [ "UpdateProfileDto" ], "frameworkDecorators": [ "@ApiPropertyOptional", "@IsOptional", "@IsString", "@IsEmail" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/users/users.controller.spec.ts", "sha256": "6b9bb6e51fc866950d36e0b8d5cdd8e2ed546b7cb20351be008161534aa83748", "byteCount": 3385, "lineCount": 99, "language": "TypeScript", "imports": [ "import { Test, TestingModule } from '@nestjs/testing';", "import { UsersController } from './users.controller';", "import { UsersService } from './users.service';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "UsersController", "should be defined", "should getProfile", "should updateProfile", "should addAddress", "should updateAddress", "should deleteAddress", "should setDefaultAddress" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/users/users.controller.ts", "sha256": "d5a6cc93a94e871c4485ef084e277bc3476740c65502a764f90a575fac3a30f6", "byteCount": 5842, "lineCount": 173, "language": "TypeScript", "imports": [ "import { Controller, Get, Patch, Post, Delete, Body, Param, UseGuards, Req, HttpStatus } from '@nestjs/common';", "import { UsersService } from './users.service';", "import { JwtAuthGuard } from '../auth/jwt-auth.guard';", "import { ApiTags, ApiBearerAuth, ApiOperation, ApiResponse, ApiOkResponse, ApiCreatedResponse, ApiBadRequestResponse } from '@nestjs/swagger';", "import { UpdateProfileDto } from './dto/update-profile.dto';", "import { AddressDto } from './dto/address.dto';" ], "exports": [ "export class UsersController {" ], "topLevelSymbols": [ "UsersController" ], "frameworkDecorators": [ "@ApiTags", "@ApiBearerAuth", "@Controller", "@ApiResponse", "@UseGuards", "@Get", "@ApiOperation", "@ApiOkResponse", "@Req", "@Patch", "@ApiBadRequestResponse", "@Body", "@Post", "@ApiCreatedResponse", "@Param" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/users/users.module.ts", "sha256": "e99dd0daf64179291ef9b1ffc969574be6920ae813c789845209632463c92f42", "byteCount": 285, "lineCount": 11, "language": "TypeScript", "imports": [ "import { Module } from '@nestjs/common';", "import { UsersService } from './users.service';", "import { UsersController } from './users.controller';" ], "exports": [ "export class UsersModule {}" ], "topLevelSymbols": [ "UsersModule" ], "frameworkDecorators": [ "@Module" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/users/users.service.spec.ts", "sha256": "9bde2dd4fdfbb0f3864baee7782d1cf5429f2fa371e07a336d0cf5b6a225cbd7", "byteCount": 3496, "lineCount": 102, "language": "TypeScript", "imports": [ "import { Test, TestingModule } from '@nestjs/testing';", "import { UsersService } from './users.service';", "import { PrismaService } from '../prisma/prisma.service';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "UsersService", "should be defined", "should call prisma findUnique in findById", "should call prisma update in update", "should addAddress", "should updateAddress", "should deleteAddress", "should setDefaultAddress" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/src/users/users.service.ts", "sha256": "1532d70fd00b84469c6805836806f4fa1bce05a3399813f101c92371387cf967", "byteCount": 2816, "lineCount": 112, "language": "TypeScript", "imports": [ "import { Injectable } from '@nestjs/common';", "import { PrismaService } from '../prisma/prisma.service';" ], "exports": [ "export class UsersService {" ], "topLevelSymbols": [ "UsersService" ], "frameworkDecorators": [ "@Injectable" ], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/test/app.e2e-spec.ts", "sha256": "191eb3068fadbce18c31e6ffa02ed6ed0cfd133573f23ef361d9ea413539f7e1", "byteCount": 754, "lineCount": 30, "language": "TypeScript", "imports": [ "import { Test, TestingModule } from '@nestjs/testing';", "import { INestApplication } from '@nestjs/common';", "import request from 'supertest';", "import { App } from 'supertest/types';", "import { AppModule } from './../src/app.module';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "AppController (e2e)", "/ (GET)" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "backend/test/jest-e2e.json", "sha256": "e5964a7412493afd594979b94374dd8e5fd87e96d23a514163bdb72198fda0ba", "byteCount": 192, "lineCount": 10, "language": "JSON", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [ "moduleFileExtensions", "rootDir", "testEnvironment", "testRegex", "transform", "^.+\\\\.(t|j)s$" ], "readSucceeded": true, "readError": null }, { "path": "backend/tsconfig.build.json", "sha256": "ef5be6c06c3ac6c3eca6c81885a12d03e33059086b4b275cf39f6e9359965378", "byteCount": 101, "lineCount": 5, "language": "JSON", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [ "extends", "exclude" ], "readSucceeded": true, "readError": null }, { "path": "backend/tsconfig.json", "sha256": "9f14a66ca5ada4e5f20a0c5d4a1a1d1d631aeb03a5940c737b73893c897a8dad", "byteCount": 699, "lineCount": 26, "language": "JSON", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [ "compilerOptions", "module", "moduleResolution", "resolvePackageJsonExports", "esModuleInterop", "isolatedModules", "declaration", "removeComments", "emitDecoratorMetadata", "experimentalDecorators", "allowSyntheticDefaultImports", "target", "sourceMap", "outDir", "baseUrl" ], "readSucceeded": true, "readError": null }, { "path": "docker-compose.yml", "sha256": "a57d52b4063ef4eb731e163947db6d3c9fb4aa7133dcb40c1ee408e351ed715d", "byteCount": 1569, "lineCount": 76, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "index.html", "sha256": "a8fb6003bf328dabab868cc7e6c1189869285287a5674d9892bddcdfd3491533", "byteCount": 811, "lineCount": 24, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "metadata.json", "sha256": "6effb47a4ad0cd327ac85c3e3f1d667a1fca9cd36699ae907344fa6a030d8dd8", "byteCount": 342, "lineCount": 9, "language": "JSON", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [ "name", "description", "requestFramePermissions", "majorCapabilities" ], "readSucceeded": true, "readError": null }, { "path": "nginx.conf", "sha256": "e73f55d23eb74db056c552a3c9f51ceb6ed208bd5de3e8eb07a46f1e904b9f44", "byteCount": 992, "lineCount": 30, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "package.json", "sha256": "6573f481f79a240af1721a5878969c40a7f60d0c5498cab30dd427af97759445", "byteCount": 1266, "lineCount": 48, "language": "JSON", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [ "name", "private", "version", "type", "scripts", "dev", "build", "preview", "clean", "lint", "test", "testwatch:", "dependencies", "@google/genai", "@tailwindcss/vite" ], "readSucceeded": true, "readError": null }, { "path": "prometheus.yml", "sha256": "c31cef7110f4965128e7dc355a77cd7f537a6383c8f62936a2d8c6ea5582898d", "byteCount": 172, "lineCount": 9, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "public/locales/fa/common.json", "sha256": "8378edcaef506b34c6e243b58456fccfa657d912860ac3efc7c91de2350585c1", "byteCount": 1238, "lineCount": 21, "language": "JSON", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [ "api", "errors", "400", "401", "403", "404", "500", "insufficient_balance", "breed_mismatch", "invalid_coupon", "order_failed", "messages", "loading", "saving", "success_update" ], "readSucceeded": true, "readError": null }, { "path": "public/manifest.json", "sha256": "87501de359a0c2f7a3a591fb4a0815a42b48357e9948a87406636685108fae7e", "byteCount": 614, "lineCount": 22, "language": "JSON", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [ "name", "short_name", "description", "start_url", "display", "background_color", "theme_color", "icons", "src", "sizes", "type" ], "readSucceeded": true, "readError": null }, { "path": "public/sw.js", "sha256": "7827cc0749b78767bbb7218fafbbc48ed42dae16dae671ebba10f45d30a12295", "byteCount": 500, "lineCount": 24, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/App.tsx", "sha256": "5a6b490104821f21f6000c514001e5a455007ebcec4cf6ac545313f251fd0d9e", "byteCount": 21677, "lineCount": 431, "language": "TypeScript", "imports": [ "import { useState, useEffect, lazy, Suspense } from \"react\";", "import Header from \"./components/Header\";", "import Hero from \"./components/Hero\";", "import Footer from \"./components/Footer\";", "import { Toaster } from \"sonner\";", "import { Product } from \"./data/products\";", "import { useCartStore } from \"./store/cartStore\";", "import { usePetStore } from \"./store/usePetStore\";", "import { useUserStore } from \"./store/userStore\";", "import { useSettingsStore } from \"./store/settingsStore\";", "import { NetworkBanner } from './components/NetworkBanner';", "import { ErrorBoundary } from './components/ErrorBoundary';", "import { NotFoundPage } from './components/ErrorPages';", "import { toast } from \"sonner\";", "import labImage from \"./assets/images/regenerated_image_1779109861747.png\";" ], "exports": [ "export default function App() {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/AddressModal.tsx", "sha256": "314720a29226a08bafb8f746cff2fb6fbad6a85b3156f67e13ce77d9ce0231c4", "byteCount": 14652, "lineCount": 290, "language": "TypeScript", "imports": [ "import React, { useState, useEffect } from \"react\";", "import { motion, AnimatePresence } from \"motion/react\";", "import { X, MapPin, User, Phone, Hash, Save, Check } from \"lucide-react\";", "import { toPersian, cn } from \"../lib/utils\";", "import { Address } from \"../store/userStore\";", "import { toast } from \"sonner\";" ], "exports": [ "export default function AddressModal({ isOpen, onClose, onSave, editingAddress }: AddressModalProps) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/ArchivePage.tsx", "sha256": "a2a6c4131513cd9918e8ff5ded7f2542e15f9a04e5504803e665e6c9b8364237", "byteCount": 21575, "lineCount": 424, "language": "TypeScript", "imports": [ "import React, { useState, useMemo, useEffect } from \"react\";", "import { Product, PetType } from \"../data/products\";", "import { usePetStore } from \"../store/usePetStore\";", "import { productService } from \"../services/productService\";", "import { motion, AnimatePresence } from \"motion/react\";", "import { ProductCardSkeleton } from \"./Skeleton\";", "import { toast } from \"sonner\";", "import { useCartStore } from \"../store/cartStore\";", "import SafeImage from \"./SafeImage\";" ], "exports": [ "export default function ArchivePage({" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/AuthModal.tsx", "sha256": "986be0c94060790ea5694cd9f756db4c196bc4896146d21e35e080ca837b5b21", "byteCount": 17655, "lineCount": 387, "language": "TypeScript", "imports": [ "import React, { useState, useEffect, useRef } from \"react\";", "import { motion, AnimatePresence } from \"motion/react\";", "import { X, User, Building2, Heart, ShieldCheck, Phone, Key, LogIn, ArrowRight, RefreshCw } from \"lucide-react\";", "import { useUserStore, UserRole } from \"../store/userStore\";", "import { authService } from \"../services/authService\";", "import { toast } from \"sonner\";", "import { toPersian } from \"../lib/utils\";" ], "exports": [ "export default function AuthModal({ isOpen, onClose }: AuthModalProps) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/B2BPortal.tsx", "sha256": "5fde2d75add37f0a64dccc1bd916d78ecf3ec3bf8fdffda2176e9e677ce2ae0e", "byteCount": 8985, "lineCount": 192, "language": "TypeScript", "imports": [ "import React, { useState, useEffect } from \"react\";", "import { Product } from \"../data/products\";", "import { useCartStore } from \"../store/cartStore\";", "import { productService } from \"../services/productService\";", "import { motion, AnimatePresence } from \"motion/react\";", "import SafeImage from \"./SafeImage\";" ], "exports": [ "export default function B2BPortal({ onClose }: { onClose: () => void }) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/BlogPage.tsx", "sha256": "7d0ae2089eca5af4c221d7d18be199a6037f628023c3964a6df957d7a541932e", "byteCount": 20444, "lineCount": 342, "language": "TypeScript", "imports": [ "import React from \"react\";", "import { motion } from \"motion/react\";", "import { ChevronRight, Calendar, User, ArrowLeft, Sparkles, BookOpen } from \"lucide-react\";", "import { Product } from \"../data/products\";", "import { productService } from \"../services/productService\";" ], "exports": [ "export default function BlogPage({ onBack, onProductClick }: { onBack: () => void, onProductClick: (p: Product) => void }) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/CartDrawer.tsx", "sha256": "faecc40e3f7c0bdfe1bacf4ba67451b9515a3837471b6e4f6554c62a155d4cdf", "byteCount": 17956, "lineCount": 310, "language": "TypeScript", "imports": [ "import React, { useState, useEffect } from \"react\";", "import { X, Trash2, Plus, Minus, ShoppingBag, ShieldCheck, ArrowLeft, Ticket, Sparkles, CheckCircle2 } from \"lucide-react\";", "import { motion, AnimatePresence } from \"motion/react\";", "import { toPersian, cn } from \"../lib/utils\";", "import { useCartStore } from \"../store/cartStore\";", "import { Product } from \"../data/products\";", "import { productService } from \"../services/productService\";", "import SafeImage from \"./SafeImage\";", "import { toast } from \"sonner\";" ], "exports": [ "export default function CartDrawer({ isOpen, onClose, onCheckout, onShopNavigate }: {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/CheckoutPage.tsx", "sha256": "1d9470816ddd4d8dd539beba7a7d31641154ba763ff51ebdfc2804d31c4c2a5e", "byteCount": 21057, "lineCount": 381, "language": "TypeScript", "imports": [ "import React, { useState, useEffect } from \"react\";", "import { motion } from \"motion/react\";", "import { toPersian, cn } from \"../lib/utils\";", "import { useCartStore } from \"../store/cartStore\";", "import { usePetStore } from \"../store/usePetStore\";", "import { useUserStore } from \"../store/userStore\";", "import { Product } from \"../data/products\";", "import { productService } from \"../services/productService\";", "import { toast } from \"sonner\";" ], "exports": [ "export default function CheckoutPage({ onBack, onComplete }: { onBack: () => void; onComplete: (orderId: string) => void }) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/DeleteConfirmModal.tsx", "sha256": "7907927ed2d4bb1aeac9e675d77feda6b6b060a031fc7c7df01d7bca35121298", "byteCount": 2393, "lineCount": 62, "language": "TypeScript", "imports": [ "import React from \"react\";", "import { motion, AnimatePresence } from \"motion/react\";", "import { Trash2, AlertTriangle, X } from \"lucide-react\";" ], "exports": [ "export default function DeleteConfirmModal({ isOpen, onClose, onConfirm, title, message }: DeleteConfirmModalProps) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/ErrorBoundary.tsx", "sha256": "a90fda767490f58218d82a0e3a48ecece06235248b84406220acd86b7112c740", "byteCount": 2687, "lineCount": 72, "language": "TypeScript", "imports": [ "import * as React from 'react';", "import { Component, ErrorInfo, ReactNode } from 'react';", "import { AlertTriangle, RefreshCcw } from 'lucide-react';" ], "exports": [ "export class ErrorBoundary extends React.Component {" ], "topLevelSymbols": [ "ErrorBoundary" ], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/ErrorPages.tsx", "sha256": "ec77817519a13c04467fe2d492dc6444d06ecf052afca9ff589fd5f3e9fe4c7f", "byteCount": 2773, "lineCount": 60, "language": "TypeScript", "imports": [ "import React from 'react';", "import { FileQuestion, AlertCircle, Home, RefreshCw } from 'lucide-react';" ], "exports": [ "export const NotFoundPage = ({ onGoHome }: { onGoHome: () => void }) => {", "export const ServerErrorPage = ({ onRetry }: { onRetry: () => void }) => {" ], "topLevelSymbols": [ "NotFoundPage", "ServerErrorPage" ], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/FeaturedProducts.tsx", "sha256": "df25d1ae82b4592cb1228f33ce9b152ab1f5c150c375eedc4816303c8f76eb13", "byteCount": 7516, "lineCount": 148, "language": "TypeScript", "imports": [ "import { useState, useEffect, useMemo } from \"react\";", "import { Product } from \"../data/products\";", "import { usePetStore } from \"../store/usePetStore\";", "import { productService } from \"../services/productService\";", "import { motion, AnimatePresence } from \"motion/react\";", "import { Eye, ShoppingCart, ShieldCheck, Heart, AlertCircle, Sparkles } from \"lucide-react\";", "import SafeImage from \"./SafeImage\";", "import { ProductCardSkeleton } from \"./Skeleton\";" ], "exports": [ "export default function FeaturedProducts({ onProductClick, onShopNavigate }: { onProductClick: (p: Product) => void, onShopNavigate: () => void }) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/Footer.tsx", "sha256": "120f21891ec195b502927386334d72237c1f80c04d48df725686fb9637af1c22", "byteCount": 8311, "lineCount": 128, "language": "TypeScript", "imports": [ "import React from \"react\";", "import { Phone, Mail, MapPin, Instagram, Youtube, Linkedin, ShieldCheck, Globe } from \"lucide-react\";" ], "exports": [ "export default function Footer({ onNavigate, onShopNavigate, onB2BOpen }: {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/Header.tsx", "sha256": "40ac019ff77dae5aee81e888af89081c4e8193a6ff3c4f1b1481012bdfad6b01", "byteCount": 19286, "lineCount": 364, "language": "TypeScript", "imports": [ "import React, { useState, useRef, useEffect } from \"react\";", "import { Search, ChevronDown, Menu, X, Pill, ShieldCheck, HeartPulse, Sparkles, ShoppingBag, User, PlusCircle, Check, Building2, LogIn, Wallet, LogOut, MapPin, FileHeart, Dog, Cat } from \"lucide-react\";", "import { motion, AnimatePresence } from \"motion/react\";", "import { useCartStore } from \"../store/cartStore\";", "import { usePetStore } from \"../store/usePetStore\";", "import { useUserStore } from \"../store/userStore\";", "import { toast } from \"sonner\";", "import HeaderButton from \"./HeaderButton\";", "import AuthModal from \"./AuthModal\";", "import { cn } from \"../lib/utils\";" ], "exports": [ "export default function Header({" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/HeaderButton.tsx", "sha256": "e7e508be65aeba6771625dd43de4e84fe889c17f97a1d30a918f852b460dd8b2", "byteCount": 1839, "lineCount": 53, "language": "TypeScript", "imports": [ "import React from \"react\";", "import { motion } from \"motion/react\";", "import { toPersian } from \"../lib/utils\";" ], "exports": [ "export default function HeaderButton({" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/Hero.tsx", "sha256": "df02dbfa6f1b9c74440bac4c7695b80e8f608d2d00025d540332d2a7149c3b28", "byteCount": 9932, "lineCount": 196, "language": "TypeScript", "imports": [ "import { motion, useMotionValue, useTransform, animate } from \"motion/react\";", "import { ChevronLeft } from \"lucide-react\";", "import { useEffect, useState } from \"react\";", "import { toPersian } from \"../lib/utils\";", "import { useSettingsStore } from \"../store/settingsStore\";" ], "exports": [ "export default function Hero({ onProfileClick, onShopNavigate }: { onProfileClick?: () => void, onShopNavigate?: () => void }) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "\\n" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/IngredientWiki.tsx", "sha256": "9112b3ad9779255ea50df40787e5a62875cc711d838aa5fb5f4ff9cd383d12ea", "byteCount": 10104, "lineCount": 178, "language": "TypeScript", "imports": [ "import { useMemo, useState, useEffect } from \"react\";", "import { INGREDIENTS_WIKI, Product } from \"../data/products\";", "import { motion } from \"motion/react\";", "import { FlaskConical, CheckCircle2, ChevronRight, ChevronLeft, Beaker } from \"lucide-react\";", "import { useSettingsStore } from \"../store/settingsStore\";", "import { productService } from \"../services/productService\";" ], "exports": [ "export default function IngredientWiki({ onProductClick, onBack }: { onProductClick: (p: Product) => void, onBack?: () => void }) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/LoginModal.tsx", "sha256": "a717089effda26a988fd522a14479f171cccaeedd07100c51cb8faf1f6300bfe", "byteCount": 12362, "lineCount": 288, "language": "TypeScript", "imports": [ "import React, { useState, useEffect, useRef } from \"react\";", "import { motion, AnimatePresence } from \"motion/react\";", "import { X, ShieldCheck, Phone, Key, LogIn, ArrowRight, RefreshCw } from \"lucide-react\";", "import { authService } from \"../services/authService\";", "import { useUserStore } from \"../store/userStore\";", "import { toast } from \"sonner\";", "import { toPersian } from \"../lib/utils\";" ], "exports": [ "export default function LoginModal({ isOpen, onClose, onLogin, petName, isAdvisorContext }: LoginModalProps) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/NetworkBanner.tsx", "sha256": "13abbc38af102705fe15e533304223836ed6064a0c06e5dd217693cc36668874", "byteCount": 2318, "lineCount": 68, "language": "TypeScript", "imports": [ "import React, { useState, useEffect } from 'react';", "import { useNetworkStatus } from '../hooks/useNetworkStatus';", "import { WifiOff, Wifi, X } from 'lucide-react';", "import { motion, AnimatePresence } from 'motion/react';" ], "exports": [ "export const NetworkBanner = () => {" ], "topLevelSymbols": [ "NetworkBanner" ], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/OrderDetailsModal.tsx", "sha256": "f317fb006ed49f3f859d77f76991de618df7e277f98bd8d4a0622be3c26b4e80", "byteCount": 13314, "lineCount": 265, "language": "TypeScript", "imports": [ "import React from \"react\";", "import { motion, AnimatePresence } from \"motion/react\";", "import { toPersian, cn } from \"../lib/utils\";", "import SafeImage from \"./SafeImage\";" ], "exports": [ "export default function OrderDetailsModal({ isOpen, onClose, order }: OrderDetailsModalProps) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/OrderSuccess.tsx", "sha256": "0e1ee36d1658063758499b117c6bb6f13632ac80d8dc838c9dc84bf6e23cc1b6", "byteCount": 5706, "lineCount": 110, "language": "TypeScript", "imports": [ "import React, { useEffect, useState } from \"react\";", "import { motion } from \"motion/react\";", "import { useCartStore } from \"../store/cartStore\";", "import { usePetStore } from \"../store/usePetStore\";" ], "exports": [ "export default function OrderSuccess({ orderId, onNavigate }: { orderId: string; onNavigate: (v: any) => void }) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/OrderTracking.tsx", "sha256": "32f28b0f1fd4b46b8f871f2b9918db6e2b06f7468d83b990bd21ce5187bd4c43", "byteCount": 9341, "lineCount": 168, "language": "TypeScript", "imports": [ "import React, { useState } from \"react\";", "import { motion } from \"motion/react\";", "import { useCartStore } from \"../store/cartStore\";" ], "exports": [ "export default function OrderTracking({ onNavigate, onBack }: { onNavigate: (v: any) => void, onBack?: () => void }) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/PetProfile.tsx", "sha256": "d805ad77e12771ce2846392b74a1585c451a2581720af938bcaa39fbb2dc7af8", "byteCount": 66705, "lineCount": 1193, "language": "TypeScript", "imports": [ "import React, { useState, useMemo, useEffect } from \"react\";", "import { Product, PetType } from \"../data/products\";", "import { productService } from \"../services/productService\";", "import { motion, AnimatePresence } from \"motion/react\";", "import { PetProfileSkeleton } from \"./Skeleton\";", "import { usePetStore, PetProfile as GlobalPetProfile, Reminder, HealthLog, PetConsumption } from \"../store/usePetStore\";", "import { useCartStore } from \"../store/cartStore\";", "import SafeImage from \"./SafeImage\";", "import { toast } from \"sonner\";", "import { toPersian, cn } from \"../lib/utils\";" ], "exports": [ "export default function PetProfile({ onProductClick, onBack, initialView, advisorNeed }: {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "T", "T" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/ProductPage.tsx", "sha256": "e230769b1c71419eecae57d491256e3f2d2c360dbc2245d9a009139cc2649179", "byteCount": 33351, "lineCount": 599, "language": "TypeScript", "imports": [ "import { useState, useMemo } from \"react\";", "import { motion, AnimatePresence } from \"motion/react\";", "import { toPersian, cn } from \"../lib/utils\";", "import { Product } from \"../data/products\";", "import { productService } from \"../services/productService\";", "import { SCIENTIFIC_TERMS } from \"../data/scientificTerms\";", "import { useSettingsStore } from \"../store/settingsStore\";", "import { create } from \"zustand\";", "import { useCartStore } from \"../store/cartStore\";", "import { usePetStore } from \"../store/usePetStore\";", "import { toast } from \"sonner\";", "import Tooltip from \"./Tooltip\";", "import SafeImage from \"./SafeImage\";" ], "exports": [ "export default function ProductPage({ product, onBack, onProductClick, onWikiNavigate, onShopNavigate }: {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/SafeImage.tsx", "sha256": "81f495bd2b062276d4838601183715aabcefe1616300e01094f089dcc1442dbf", "byteCount": 2623, "lineCount": 74, "language": "TypeScript", "imports": [ "import React from \"react\";", "import { ImageOff, Sparkles } from \"lucide-react\";", "import { cn } from \"../lib/utils\";" ], "exports": [ "export default function SafeImage({" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/SearchResultsPage.tsx", "sha256": "9f33179f6ae1fbf9514a11c6177ce7c826d6f3adc5601e33d7ab9536ac0356c2", "byteCount": 8048, "lineCount": 138, "language": "TypeScript", "imports": [ "import React, { useMemo, useState, useEffect } from \"react\";", "import { Search, ShoppingBag, ChevronLeft, ArrowRight, Activity, Sparkles, HeartPulse, Stethoscope, ShieldCheck, Heart, AlertCircle } from \"lucide-react\";", "import { usePetStore } from \"../store/usePetStore\";", "import { motion } from \"motion/react\";", "import { Product } from \"../data/products\";", "import { productService } from \"../services/productService\";" ], "exports": [ "export default function SearchResultsPage({ query, onProductClick, onBack }: { query: string; onProductClick: (p: Product) => void; onBack: () => void }) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/Skeleton.tsx", "sha256": "fc19633c914e81c7eef71a70082bd495cf20acfe7700ea7099d6da0b012449f4", "byteCount": 3155, "lineCount": 86, "language": "TypeScript", "imports": [ "import React from 'react';" ], "exports": [ "export const Skeleton = ({ className }: SkeletonProps) => {", "export const ProductCardSkeleton = () => {", "export const PetProfileSkeleton = () => {", "export const OrderRowSkeleton = () => {" ], "topLevelSymbols": [ "Skeleton", "ProductCardSkeleton", "PetProfileSkeleton", "OrderRowSkeleton" ], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/SmartAdvisor.tsx", "sha256": "13e9aac5ae214bf4e2849d1db032d978287e766fd01335d1795d31828e9caaa0", "byteCount": 15860, "lineCount": 297, "language": "TypeScript", "imports": [ "import React, { useState } from \"react\";", "import { motion, AnimatePresence } from \"motion/react\";", "import { useSettingsStore } from \"../store/settingsStore\";", "import { toPersian, cn } from \"../lib/utils\";" ], "exports": [ "export default function SmartAdvisor({ onComplete }: SmartAdvisorProps) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/Tooltip.tsx", "sha256": "562319624a2a6d8877e8bd68c31304b01049882a2a4e85c67216b5a74f9aef10", "byteCount": 2561, "lineCount": 62, "language": "TypeScript", "imports": [ "import React, { useState } from 'react';", "import { motion, AnimatePresence } from 'motion/react';", "import { Info, ExternalLink } from 'lucide-react';", "import { SCIENTIFIC_TERMS } from '../data/scientificTerms';", "import { useSettingsStore } from '../store/settingsStore';" ], "exports": [ "export default function Tooltip({ termKey, children, onWikiNavigate }: TooltipProps) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/TopUpModal.tsx", "sha256": "09c967e8d366ae9969f0c2e2beffb893072aa8818c3b3586ad1f9ba646f8fef4", "byteCount": 7049, "lineCount": 154, "language": "TypeScript", "imports": [ "import React, { useState } from \"react\";", "import { motion, AnimatePresence } from \"motion/react\";", "import { X, CreditCard, Sparkles, CheckCircle2, TrendingUp, DollarSign } from \"lucide-react\";", "import { toPersian, cn } from \"../lib/utils\";", "import { toast } from \"sonner\";" ], "exports": [ "export default function TopUpModal({ isOpen, onClose, onConfirm }: TopUpModalProps) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/UserDashboard.tsx", "sha256": "9478a4057c97f362b186d81bfcdda2e8815c3118cfa07f49c38b79474a41e04b", "byteCount": 37598, "lineCount": 646, "language": "TypeScript", "imports": [ "import React, { useState } from \"react\";", "import { motion, AnimatePresence } from \"motion/react\";", "import { User, ShoppingBag, Wallet, MapPin, LogOut, ChevronRight, Package, Calendar, UserCircle, ShoppingCart, Trash2, Edit2, Phone, Hash, CheckCircle2, ArrowUpCircle, ArrowDownCircle, Info, Clock, CheckCircle, Heart, Sparkles } from \"lucide-react\";", "import { OrderRowSkeleton } from \"./Skeleton\";", "import { useUserStore, Address } from \"../store/userStore\";", "import { useCartStore } from \"../store/cartStore\";", "import { toPersian, cn } from \"../lib/utils\";", "import { toast } from \"sonner\";", "import OrderDetailsModal from \"./OrderDetailsModal\";", "import AddressModal from \"./AddressModal\";", "import DeleteConfirmModal from \"./DeleteConfirmModal\";", "import TopUpModal from \"./TopUpModal\";" ], "exports": [ "export default function UserDashboard({ onBack, onNavigate }: { onBack: () => void, onNavigate: (v: any) => void }) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/VetGallery.tsx", "sha256": "2dfbead4e5eb98a56bdff1c3a66c513254c00a3332a9271a34df481f4f47d744", "byteCount": 7427, "lineCount": 148, "language": "TypeScript", "imports": [ "import React, { useState } from \"react\";", "import { Play, PlayCircle, Star, ShieldCheck, X } from \"lucide-react\";", "import { motion, AnimatePresence } from \"motion/react\";" ], "exports": [ "export default function VetGallery({ onNavigate }: { onNavigate?: (v: any) => void }) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/VideosPage.tsx", "sha256": "9912b04a03bb2891557a19c39b04a88b254af6375a072fbcab479524c056a49b", "byteCount": 9112, "lineCount": 186, "language": "TypeScript", "imports": [ "import React, { useState } from \"react\";", "import { motion, AnimatePresence } from \"motion/react\";", "import { ChevronRight, PlayCircle, Star, ShieldCheck, X, Search, Clock, User } from \"lucide-react\";" ], "exports": [ "export default function VideosPage({ onBack }: { onBack: () => void }) {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/__tests__/CartDrawer.test.tsx", "sha256": "fc4f95ab29d719bb152687cebf8feec8273e05caca29726ca8cdfcbf9ef91912", "byteCount": 3131, "lineCount": 102, "language": "TypeScript", "imports": [ "import { describe, it, expect, vi, beforeEach } from 'vitest';", "import { render, screen, fireEvent } from '@testing-library/react';", "import React from 'react';", "import CartDrawer from '../CartDrawer';", "import { useCartStore } from '../../store/cartStore';", "import { productService } from '../../services/productService';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "CartDrawer", "renders empty cart state when no items in cart", "renders cart items and total when items are present", "triggers updateQuantity when plus/minus buttons are clicked" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/__tests__/FeaturedProducts.test.tsx", "sha256": "e411316d9a5b8b0b6c7720ebd04c85075b01c38323d217badf165840f1bb100d", "byteCount": 2945, "lineCount": 82, "language": "TypeScript", "imports": [ "import { describe, it, expect, vi, beforeEach } from 'vitest';", "import { render, screen, fireEvent, waitFor } from '@testing-library/react';", "import React from 'react';", "import FeaturedProducts from '../FeaturedProducts';", "import { productService } from '../../services/productService';", "import { usePetStore } from '../../store/usePetStore';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "FeaturedProducts", "renders loading skeletons initially", "renders products once loaded", "calls onProductClick when product card is clicked", "calls onShopNavigate when navigation link is clicked" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/__tests__/Footer.test.tsx", "sha256": "57dd04273765b65b4e906552e74e6d5c4d420e9d06498d8093c4abf0ed2b3c3f", "byteCount": 1679, "lineCount": 44, "language": "TypeScript", "imports": [ "import { describe, it, expect, vi } from 'vitest';", "import { render, screen, fireEvent } from '@testing-library/react';", "import React from 'react';", "import Footer from '../Footer';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "Footer", "renders footer brand text and standard layout elements", "triggers onNavigate and onShopNavigate when quick links are clicked" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/__tests__/Header.test.tsx", "sha256": "5c6f361116a37b8556bb01829708e0c1490fe59e12c30b5bdda9d20cabefdde8", "byteCount": 3156, "lineCount": 111, "language": "TypeScript", "imports": [ "import { describe, it, expect, vi, beforeEach } from 'vitest';", "import { render, screen, fireEvent } from '@testing-library/react';", "import React from 'react';", "import Header from '../Header';", "import { useCartStore } from '../../store/cartStore';", "import { usePetStore } from '../../store/usePetStore';", "import { useUserStore } from '../../store/userStore';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "Header", "renders brand name and login button when guest", "renders user first name and pet selection when logged in", "calls onCartOpen when click on cart button" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/__tests__/Hero.test.tsx", "sha256": "7609965c99249fb454871c286a10237c4eb9996264a68c6d25b8057477320cf5", "byteCount": 1679, "lineCount": 44, "language": "TypeScript", "imports": [ "import { describe, it, expect, vi, beforeEach } from 'vitest';", "import { render, screen, fireEvent } from '@testing-library/react';", "import React from 'react';", "import Hero from '../Hero';", "import { useSettingsStore } from '../../store/settingsStore';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "Hero", "renders title and description from settingsStore", "calls onShopNavigate when " ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/components/__tests__/Tooltip.test.tsx", "sha256": "6a25742e1d4737fdb8d7a75a1e927fb3308203bdac4dfbe540f6f988def7ee9b", "byteCount": 1536, "lineCount": 51, "language": "TypeScript", "imports": [ "import { describe, it, expect, vi } from 'vitest';", "import { render, screen, fireEvent } from '@testing-library/react';", "import React from 'react';", "import Tooltip from '../Tooltip';", "import { useSettingsStore } from '../../store/settingsStore';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "Tooltip", "should render children correctly", "should display tooltip definition on hover" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/data/products.ts", "sha256": "06775f65c485d1dbd56b0f0406fc910c94f1747c1c56422aac077caeb5c02b56", "byteCount": 31112, "lineCount": 514, "language": "TypeScript", "imports": [], "exports": [ "export interface Specialist {", "export type PetType = \"سگ\" | \"گربه\" | \"هر دو\";", "export interface IngredientInfo {", "export interface DosageResult {", "export interface FAQ {", "export interface Product {", "export const INGREDIENTS_WIKI: IngredientInfo[] = [", "export const PRODUCTS: Product[] = [" ], "topLevelSymbols": [ "Specialist", "PetType", "IngredientInfo", "DosageResult", "FAQ", "Product", "INGREDIENTS_WIKI", "PRODUCTS" ], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/data/scientificTerms.ts", "sha256": "a826894be746caa0233e6362c33fdf04a386bb4779d924b37868256b5f04394f", "byteCount": 2182, "lineCount": 44, "language": "TypeScript", "imports": [], "exports": [ "export interface ScientificTerm {", "export const SCIENTIFIC_TERMS: Record = {" ], "topLevelSymbols": [ "ScientificTerm", "SCIENTIFIC_TERMS" ], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/hooks/useNetworkStatus.ts", "sha256": "97a1eb7b50abc7f05c6d430db307fd1739fac0732faf250986ed76e52099de78", "byteCount": 574, "lineCount": 21, "language": "TypeScript", "imports": [ "import { useState, useEffect } from 'react';" ], "exports": [ "export function useNetworkStatus() {" ], "topLevelSymbols": [ "useNetworkStatus" ], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/index.css", "sha256": "4379a2e1316cb65fcce8b6a32e2282232b9a5f3d503e5fe1901d0405340721d3", "byteCount": 1887, "lineCount": 75, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/lib/utils.ts", "sha256": "21a3949a05abd11a117ab450826d09eddde87058b80cb2f43a28158c3da3e6fc", "byteCount": 323, "lineCount": 9, "language": "TypeScript", "imports": [], "exports": [ "export const toPersian = (n: number | string | undefined | null) => {", "export function cn(...classes: (string | boolean | undefined)[]) {" ], "topLevelSymbols": [ "toPersian", "cn" ], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/main.tsx", "sha256": "8b129211a1e36a01a0c294633d8463c9a661a78fe04c3f26f45ca2fdabdedff0", "byteCount": 241, "lineCount": 11, "language": "TypeScript", "imports": [ "import {StrictMode} from 'react';", "import {createRoot} from 'react-dom/client';", "import App from './App.tsx';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/services/api.ts", "sha256": "da0a9cc677949951c83dc2a846072dc14744bcd84c06d68d74c7e9b52d08264b", "byteCount": 506, "lineCount": 24, "language": "TypeScript", "imports": [ "import axios from 'axios';" ], "exports": [ "export default api;" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/services/authService.ts", "sha256": "da9897908b19513fb41a5b09fd641fae7675091f5887641737c15fa6109e8bd1", "byteCount": 2877, "lineCount": 103, "language": "TypeScript", "imports": [ "import api from './api';" ], "exports": [ "export interface User {", "export interface AuthResponse {", "export class AuthService {", "export const authService = AuthService.getInstance();" ], "topLevelSymbols": [ "User", "AuthResponse", "AuthService", "authService" ], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/services/orderService.ts", "sha256": "bafd959741e791ed278a0d6c74ae3e110f90222ed65a93565527faf64739edd1", "byteCount": 2148, "lineCount": 80, "language": "TypeScript", "imports": [ "import api from './api';", "import { CartItem } from '../store/cartStore';" ], "exports": [ "export interface OrderItem {", "export interface Order {", "export class OrderService {", "export const orderService = OrderService.getInstance();" ], "topLevelSymbols": [ "OrderItem", "Order", "OrderService", "orderService" ], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/services/productService.ts", "sha256": "cf3077a9e8f8786fb37a9f5da74400552a68df2fed0cd75c171cea25e354ceb0", "byteCount": 3890, "lineCount": 107, "language": "TypeScript", "imports": [ "import api from './api';", "import { PRODUCTS, Product, PetType } from \"../data/products\";" ], "exports": [ "export class ProductService {", "export const productService = ProductService.getInstance();" ], "topLevelSymbols": [ "ProductService", "productService" ], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/store/__tests__/cartStore.test.ts", "sha256": "6e8809d62f3d49ffca5146a831391e68633858dfbbae926aad1d810271d54a9a", "byteCount": 4170, "lineCount": 143, "language": "TypeScript", "imports": [ "import { describe, it, expect, beforeEach, vi } from 'vitest';", "import { useCartStore } from '../cartStore';", "import { orderService } from '../../services/orderService';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "cartStore", "should add item to cart", "should increment quantity if item already in cart", "should remove item from cart", "should update quantity", "should remove item if update quantity is <= 0", "should apply discount coupon", "should calculate subtotal, discount and total", "should create order successfully via orderService" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/store/__tests__/settingsStore.test.ts", "sha256": "19d9585ceb5ab219d6c475614da324711d4e40ccf476b486ba5772d8311b00f7", "byteCount": 2011, "lineCount": 63, "language": "TypeScript", "imports": [ "import { describe, it, expect, beforeEach, vi } from 'vitest';", "import { useSettingsStore } from '../settingsStore';", "import api from '../../services/api';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "settingsStore", "should return fallback if key is not found", "should return value if key is found", "should fetch settings successfully and map array to object" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/store/__tests__/userStore.test.ts", "sha256": "728192566ff3da8a284af6b17e370b15bb4103da7f7404140daf52ade2d7a566", "byteCount": 3690, "lineCount": 134, "language": "TypeScript", "imports": [ "import { describe, it, expect, beforeEach, vi } from 'vitest';", "import { useUserStore } from '../userStore';", "import { authService } from '../../services/authService';", "import api from '../../services/api';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [ "userStore", "should logout correctly", "should fetch profile successfully", "should update profile correctly", "should add address and call fetchProfile" ], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/store/cartStore.ts", "sha256": "dd327a89159929614f81c1103d40a739c5e753b95f9b1bb2a823e0e2346b8e12", "byteCount": 5694, "lineCount": 167, "language": "TypeScript", "imports": [ "import { create } from \"zustand\";", "import { persist } from \"zustand/middleware\";", "import { Product } from \"../data/products\";", "import { orderService } from \"../services/orderService\";" ], "exports": [ "export interface CartItem {", "export const useCartStore = create()(" ], "topLevelSymbols": [ "CartItem", "useCartStore" ], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/store/settingsStore.ts", "sha256": "624187b749ef26e05633e0f6f5b26e1d6509d9d7b23d1ea9c807bcb4167917f3", "byteCount": 1644, "lineCount": 60, "language": "TypeScript", "imports": [ "import { create } from \"zustand\";", "import api from \"../services/api\";" ], "exports": [ "export interface ScientificTerm {", "export const useSettingsStore = create()((set, get) => ({" ], "topLevelSymbols": [ "ScientificTerm", "useSettingsStore" ], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/store/usePetStore.ts", "sha256": "d44296271fb8f1bfd3f3d628c347df02b433d8abdeed835b8e1218b0f8ecb509", "byteCount": 7771, "lineCount": 215, "language": "TypeScript", "imports": [ "import { create } from \"zustand\";", "import { persist } from \"zustand/middleware\";" ], "exports": [ "export interface Reminder {", "export interface HealthLog {", "export interface PetConsumption {", "export interface PetProfile {", "export const usePetStore = create()(" ], "topLevelSymbols": [ "Reminder", "HealthLog", "PetConsumption", "PetProfile", "usePetStore" ], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/store/userStore.ts", "sha256": "d58219ae73e58ba5bc7498173c9a2787d1d2a55798e38833e652c5c361a60799", "byteCount": 7447, "lineCount": 220, "language": "TypeScript", "imports": [ "import { create } from \"zustand\";", "import { persist } from \"zustand/middleware\";", "import { authService } from \"../services/authService\";", "import api from \"../services/api\";", "import { useCartStore } from \"./cartStore\";", "import { usePetStore } from \"./usePetStore\";" ], "exports": [ "export type UserRole = \"User_Guest\" | \"User_PetOwner\" | \"User_Partner\";", "export interface Address {", "export interface Transaction {", "export const useUserStore = create()(" ], "topLevelSymbols": [ "UserRole", "Address", "Transaction", "useUserStore" ], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/test/setup.ts", "sha256": "9d7cdb55306fa51fd1b8badbec660b2f2e1d7d78531be1e5807f15491e93d9ef", "byteCount": 1607, "lineCount": 68, "language": "TypeScript", "imports": [ "import { vi } from 'vitest';" ], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "src/vite-env.d.ts", "sha256": "424faf9241dd699dda995b367ed36665732da1e6ec1f33b2fd40394488ecac92", "byteCount": 39, "lineCount": 2, "language": "TypeScript", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "swagger.yml", "sha256": "800b2e02103b50a12f3ca294af2b526c32635cabe0b65f41fdb07c7c6ec1ff6b", "byteCount": 3713, "lineCount": 137, "language": "Plain text", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null }, { "path": "tsconfig.json", "sha256": "a9d48a003eb8b17b0d5765de18a9ff32fa9d3c54ce92ac98e5784f39c2e59584", "byteCount": 631, "lineCount": 29, "language": "JSON", "imports": [], "exports": [], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [ "compilerOptions", "target", "experimentalDecorators", "useDefineForClassFields", "module", "lib", "skipLibCheck", "moduleResolution", "isolatedModules", "moduleDetection", "allowJs", "jsx", "paths", "@/*", "allowImportingTsExtensions" ], "readSucceeded": true, "readError": null }, { "path": "vite.config.ts", "sha256": "245a8a2c544f56a4c4a59be6e3afc77d74dd51311e0f8ca3fe0fcfb1959f979f", "byteCount": 1288, "lineCount": 44, "language": "TypeScript", "imports": [ "import tailwindcss from '@tailwindcss/vite';", "import react from '@vitejs/plugin-react';", "import path from 'path';", "import {defineConfig, loadEnv} from 'vite';" ], "exports": [ "export default defineConfig(({mode}) => {" ], "topLevelSymbols": [], "frameworkDecorators": [], "testSuiteNames": [], "configurationKeys": [], "readSucceeded": true, "readError": null } ]