@idealyst/cli 1.2.0 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/add.js +233 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/index.js +13 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/info.js +193 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.js +155 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/constants.js +125 -0
- package/dist/constants.js.map +1 -0
- package/dist/generators/core/index.js +23 -0
- package/dist/generators/core/index.js.map +1 -0
- package/dist/generators/core/mobile.js +251 -0
- package/dist/generators/core/mobile.js.map +1 -0
- package/dist/generators/core/shared.js +474 -0
- package/dist/generators/core/shared.js.map +1 -0
- package/dist/generators/core/web.js +330 -0
- package/dist/generators/core/web.js.map +1 -0
- package/dist/generators/extensions/api.js +223 -0
- package/dist/generators/extensions/api.js.map +1 -0
- package/dist/generators/extensions/devcontainer.js +575 -0
- package/dist/generators/extensions/devcontainer.js.map +1 -0
- package/dist/generators/extensions/graphql.js +202 -0
- package/dist/generators/extensions/graphql.js.map +1 -0
- package/dist/generators/extensions/index.js +17 -0
- package/dist/generators/extensions/index.js.map +1 -0
- package/dist/generators/extensions/prisma.js +249 -0
- package/dist/generators/extensions/prisma.js.map +1 -0
- package/dist/generators/extensions/trpc.js +258 -0
- package/dist/generators/extensions/trpc.js.map +1 -0
- package/dist/generators/index.js +122 -4
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/reactNative.js +253 -0
- package/dist/generators/reactNative.js.map +1 -0
- package/dist/generators/workspace.js +303 -0
- package/dist/generators/workspace.js.map +1 -0
- package/dist/identifiers/android.js +75 -0
- package/dist/identifiers/android.js.map +1 -0
- package/dist/identifiers/index.js +35 -0
- package/dist/identifiers/index.js.map +1 -0
- package/dist/identifiers/ios.js +65 -0
- package/dist/identifiers/ios.js.map +1 -0
- package/dist/index.js +41 -319
- package/dist/index.js.map +1 -1
- package/dist/templates/copier.js +135 -0
- package/dist/templates/copier.js.map +1 -0
- package/dist/templates/index.js +23 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/merger.js +113 -0
- package/dist/templates/merger.js.map +1 -0
- package/dist/templates/processor.js +142 -0
- package/dist/templates/processor.js.map +1 -0
- package/dist/types/commands/add.d.ts +14 -0
- package/dist/types/commands/index.d.ts +6 -0
- package/dist/types/commands/info.d.ts +10 -0
- package/dist/types/commands/init.d.ts +19 -0
- package/dist/types/constants.d.ts +82 -0
- package/dist/types/generators/core/index.d.ts +6 -0
- package/dist/types/generators/core/mobile.d.ts +14 -0
- package/dist/types/generators/core/shared.d.ts +8 -0
- package/dist/types/generators/core/web.d.ts +8 -0
- package/dist/types/generators/extensions/api.d.ts +8 -0
- package/dist/types/generators/extensions/devcontainer.d.ts +15 -0
- package/dist/types/generators/extensions/graphql.d.ts +8 -0
- package/dist/types/generators/extensions/index.d.ts +8 -0
- package/dist/types/generators/extensions/prisma.d.ts +8 -0
- package/dist/types/generators/extensions/trpc.d.ts +9 -0
- package/dist/types/generators/index.d.ts +11 -3
- package/dist/types/generators/reactNative.d.ts +19 -0
- package/dist/types/generators/workspace.d.ts +8 -0
- package/dist/types/identifiers/android.d.ts +26 -0
- package/dist/types/identifiers/index.d.ts +26 -0
- package/dist/types/identifiers/ios.d.ts +21 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/templates/copier.d.ts +24 -0
- package/dist/types/templates/index.d.ts +6 -0
- package/dist/types/templates/merger.d.ts +43 -0
- package/dist/types/templates/processor.d.ts +39 -0
- package/dist/types/types.d.ts +184 -5
- package/dist/types/utils/filesystem.d.ts +56 -0
- package/dist/types/utils/index.d.ts +7 -0
- package/dist/types/utils/logger.d.ts +64 -0
- package/dist/types/utils/shell.d.ts +35 -0
- package/dist/types/utils/validation.d.ts +32 -0
- package/dist/types/wizard/index.d.ts +20 -0
- package/dist/types/wizard/steps/apiExtension.d.ts +5 -0
- package/dist/types/wizard/steps/appDisplayName.d.ts +5 -0
- package/dist/types/wizard/steps/devcontainerExtension.d.ts +5 -0
- package/dist/types/wizard/steps/graphqlExtension.d.ts +5 -0
- package/dist/types/wizard/steps/index.d.ts +12 -0
- package/dist/types/wizard/steps/orgDomain.d.ts +5 -0
- package/dist/types/wizard/steps/prismaExtension.d.ts +5 -0
- package/dist/types/wizard/steps/projectName.d.ts +5 -0
- package/dist/types/wizard/steps/summary.d.ts +5 -0
- package/dist/types/wizard/steps/trpcExtension.d.ts +5 -0
- package/dist/types/wizard/validators.d.ts +17 -0
- package/dist/types.js +74 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/filesystem.js +173 -0
- package/dist/utils/filesystem.js.map +1 -0
- package/dist/utils/index.js +24 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.js +106 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/shell.js +113 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/validation.js +196 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/wizard/index.js +177 -0
- package/dist/wizard/index.js.map +1 -0
- package/dist/wizard/steps/apiExtension.js +33 -0
- package/dist/wizard/steps/apiExtension.js.map +1 -0
- package/dist/wizard/steps/appDisplayName.js +53 -0
- package/dist/wizard/steps/appDisplayName.js.map +1 -0
- package/dist/wizard/steps/devcontainerExtension.js +131 -0
- package/dist/wizard/steps/devcontainerExtension.js.map +1 -0
- package/dist/wizard/steps/graphqlExtension.js +37 -0
- package/dist/wizard/steps/graphqlExtension.js.map +1 -0
- package/dist/wizard/steps/index.js +25 -0
- package/dist/wizard/steps/index.js.map +1 -0
- package/dist/wizard/steps/orgDomain.js +40 -0
- package/dist/wizard/steps/orgDomain.js.map +1 -0
- package/dist/wizard/steps/prismaExtension.js +33 -0
- package/dist/wizard/steps/prismaExtension.js.map +1 -0
- package/dist/wizard/steps/projectName.js +40 -0
- package/dist/wizard/steps/projectName.js.map +1 -0
- package/dist/wizard/steps/summary.js +119 -0
- package/dist/wizard/steps/summary.js.map +1 -0
- package/dist/wizard/steps/trpcExtension.js +37 -0
- package/dist/wizard/steps/trpcExtension.js.map +1 -0
- package/dist/wizard/validators.js +35 -0
- package/dist/wizard/validators.js.map +1 -0
- package/package.json +6 -19
- package/README.md +0 -110
- package/dist/generators/init.js +0 -268
- package/dist/generators/init.js.map +0 -1
- package/dist/generators/utils.js +0 -682
- package/dist/generators/utils.js.map +0 -1
- package/dist/scripts/configure-react-native-monorepo.js +0 -144
- package/dist/scripts/configure-react-native-monorepo.js.map +0 -1
- package/dist/template/.devcontainer/Dockerfile +0 -26
- package/dist/template/.devcontainer/devcontainer.json +0 -113
- package/dist/template/.devcontainer/docker-compose.yml +0 -59
- package/dist/template/.devcontainer/figma-mcp.sh +0 -32
- package/dist/template/.devcontainer/gitignore.template +0 -2
- package/dist/template/.devcontainer/setup.sh +0 -45
- package/dist/template/DOCKER.md +0 -0
- package/dist/template/Dockerfile +0 -111
- package/dist/template/README.md +0 -233
- package/dist/template/docker/nginx/prod.conf +0 -238
- package/dist/template/docker/nginx.conf +0 -131
- package/dist/template/docker/postgres/init.sql +0 -41
- package/dist/template/docker/prometheus/prometheus.yml +0 -52
- package/dist/template/docker-compose.prod.yml +0 -146
- package/dist/template/docker-compose.yml +0 -143
- package/dist/template/dockerignore.template +0 -151
- package/dist/template/env.example.template +0 -36
- package/dist/template/gitignore.template +0 -56
- package/dist/template/jest.config.js +0 -20
- package/dist/template/mcp.json.template +0 -8
- package/dist/template/package.json +0 -45
- package/dist/template/packages/api/README.md +0 -510
- package/dist/template/packages/api/__tests__/api.test.ts +0 -26
- package/dist/template/packages/api/env.example.template +0 -6
- package/dist/template/packages/api/gitignore.template +0 -35
- package/dist/template/packages/api/jest.config.js +0 -23
- package/dist/template/packages/api/jest.setup.js +0 -9
- package/dist/template/packages/api/package.json +0 -66
- package/dist/template/packages/api/src/context.ts +0 -52
- package/dist/template/packages/api/src/controllers/TestController.ts +0 -0
- package/dist/template/packages/api/src/graphql/builder.ts +0 -75
- package/dist/template/packages/api/src/graphql/generated.ts +0 -64
- package/dist/template/packages/api/src/graphql/index.ts +0 -75
- package/dist/template/packages/api/src/graphql/types/index.ts +0 -44
- package/dist/template/packages/api/src/graphql/types/test.ts +0 -245
- package/dist/template/packages/api/src/index.ts +0 -26
- package/dist/template/packages/api/src/lib/database.ts +0 -23
- package/dist/template/packages/api/src/router/index.ts +0 -163
- package/dist/template/packages/api/src/routers/test.ts +0 -161
- package/dist/template/packages/api/src/server.ts +0 -68
- package/dist/template/packages/api/src/trpc.ts +0 -28
- package/dist/template/packages/api/tsconfig.json +0 -44
- package/dist/template/packages/database/README.md +0 -162
- package/dist/template/packages/database/gitignore.template +0 -41
- package/dist/template/packages/database/package.json +0 -49
- package/dist/template/packages/database/prisma/seed.ts +0 -64
- package/dist/template/packages/database/schema.prisma +0 -107
- package/dist/template/packages/database/src/index.ts +0 -15
- package/dist/template/packages/database/src/validators.ts +0 -10
- package/dist/template/packages/database/tsconfig.json +0 -18
- package/dist/template/packages/mobile/README.md +0 -86
- package/dist/template/packages/mobile/__tests__/App.test.tsx +0 -156
- package/dist/template/packages/mobile/__tests__/components.test.tsx +0 -300
- package/dist/template/packages/mobile/app.json +0 -5
- package/dist/template/packages/mobile/babel.config.js +0 -10
- package/dist/template/packages/mobile/gitignore.template +0 -73
- package/dist/template/packages/mobile/index.js +0 -6
- package/dist/template/packages/mobile/jest.config.js +0 -21
- package/dist/template/packages/mobile/jest.setup.js +0 -12
- package/dist/template/packages/mobile/metro.config.js +0 -36
- package/dist/template/packages/mobile/package.json +0 -60
- package/dist/template/packages/mobile/src/App.tsx +0 -8
- package/dist/template/packages/mobile/src/utils/trpc.ts +0 -7
- package/dist/template/packages/mobile/tsconfig.json +0 -28
- package/dist/template/packages/shared/README.md +0 -135
- package/dist/template/packages/shared/__tests__/shared.test.ts +0 -51
- package/dist/template/packages/shared/gitignore.template +0 -35
- package/dist/template/packages/shared/jest.config.js +0 -22
- package/dist/template/packages/shared/package.json +0 -68
- package/dist/template/packages/shared/src/components/App.tsx +0 -57
- package/dist/template/packages/shared/src/components/HelloWorld.tsx +0 -531
- package/dist/template/packages/shared/src/components/index.ts +0 -1
- package/dist/template/packages/shared/src/graphql/client.ts +0 -34
- package/dist/template/packages/shared/src/index.ts +0 -22
- package/dist/template/packages/shared/src/navigation/AppRouter.tsx +0 -565
- package/dist/template/packages/shared/src/trpc/client.ts +0 -44
- package/dist/template/packages/shared/tsconfig.json +0 -22
- package/dist/template/packages/web/README.md +0 -131
- package/dist/template/packages/web/__tests__/App.test.tsx +0 -342
- package/dist/template/packages/web/__tests__/components.test.tsx +0 -564
- package/dist/template/packages/web/gitignore.template +0 -35
- package/dist/template/packages/web/index.html +0 -13
- package/dist/template/packages/web/jest.config.js +0 -27
- package/dist/template/packages/web/jest.setup.js +0 -24
- package/dist/template/packages/web/package.json +0 -69
- package/dist/template/packages/web/src/App.tsx +0 -14
- package/dist/template/packages/web/src/components/TestDemo.tsx +0 -164
- package/dist/template/packages/web/src/main.tsx +0 -25
- package/dist/template/packages/web/src/utils/trpc.ts +0 -7
- package/dist/template/packages/web/tsconfig.json +0 -26
- package/dist/template/packages/web/vite.config.ts +0 -98
- package/dist/template/setup.sh +0 -30
- package/dist/template/tsconfig.json +0 -22
- package/dist/template/yarnrc.yml.template +0 -4
- package/dist/types/generators/init.d.ts +0 -5
- package/dist/types/generators/utils.d.ts +0 -45
- package/dist/types/scripts/configure-react-native-monorepo.d.ts +0 -23
- package/template/.devcontainer/Dockerfile +0 -26
- package/template/.devcontainer/devcontainer.json +0 -113
- package/template/.devcontainer/docker-compose.yml +0 -59
- package/template/.devcontainer/figma-mcp.sh +0 -32
- package/template/.devcontainer/setup.sh +0 -45
- package/template/.dockerignore +0 -151
- package/template/.env.example +0 -36
- package/template/.env.production +0 -56
- package/template/DOCKER.md +0 -0
- package/template/Dockerfile +0 -111
- package/template/README.md +0 -233
- package/template/docker/nginx/prod.conf +0 -238
- package/template/docker/nginx.conf +0 -131
- package/template/docker/postgres/init.sql +0 -41
- package/template/docker/prometheus/prometheus.yml +0 -52
- package/template/docker-compose.prod.yml +0 -146
- package/template/docker-compose.yml +0 -143
- package/template/jest.config.js +0 -20
- package/template/package.json +0 -45
- package/template/packages/api/.env.example +0 -6
- package/template/packages/api/README.md +0 -510
- package/template/packages/api/__tests__/api.test.ts +0 -26
- package/template/packages/api/jest.config.js +0 -23
- package/template/packages/api/jest.setup.js +0 -9
- package/template/packages/api/package.json +0 -66
- package/template/packages/api/src/context.ts +0 -52
- package/template/packages/api/src/controllers/TestController.ts +0 -0
- package/template/packages/api/src/graphql/builder.ts +0 -75
- package/template/packages/api/src/graphql/generated.ts +0 -64
- package/template/packages/api/src/graphql/index.ts +0 -75
- package/template/packages/api/src/graphql/types/index.ts +0 -44
- package/template/packages/api/src/graphql/types/test.ts +0 -245
- package/template/packages/api/src/index.ts +0 -26
- package/template/packages/api/src/lib/database.ts +0 -23
- package/template/packages/api/src/router/index.ts +0 -163
- package/template/packages/api/src/routers/test.ts +0 -161
- package/template/packages/api/src/server.ts +0 -68
- package/template/packages/api/src/trpc.ts +0 -28
- package/template/packages/api/tsconfig.json +0 -44
- package/template/packages/database/README.md +0 -162
- package/template/packages/database/package.json +0 -49
- package/template/packages/database/prisma/seed.ts +0 -64
- package/template/packages/database/schema.prisma +0 -107
- package/template/packages/database/src/index.ts +0 -15
- package/template/packages/database/src/validators.ts +0 -10
- package/template/packages/database/tsconfig.json +0 -18
- package/template/packages/mobile/README.md +0 -86
- package/template/packages/mobile/__tests__/App.test.tsx +0 -156
- package/template/packages/mobile/__tests__/components.test.tsx +0 -300
- package/template/packages/mobile/app.json +0 -5
- package/template/packages/mobile/babel.config.js +0 -26
- package/template/packages/mobile/index.js +0 -8
- package/template/packages/mobile/jest.config.js +0 -21
- package/template/packages/mobile/jest.setup.js +0 -12
- package/template/packages/mobile/metro.config.js +0 -36
- package/template/packages/mobile/package.json +0 -60
- package/template/packages/mobile/src/App.tsx +0 -8
- package/template/packages/mobile/src/utils/trpc.ts +0 -7
- package/template/packages/mobile/tsconfig.json +0 -28
- package/template/packages/shared/README.md +0 -135
- package/template/packages/shared/__tests__/shared.test.ts +0 -51
- package/template/packages/shared/jest.config.js +0 -22
- package/template/packages/shared/package.json +0 -68
- package/template/packages/shared/src/components/App.tsx +0 -57
- package/template/packages/shared/src/components/HelloWorld.tsx +0 -531
- package/template/packages/shared/src/components/index.ts +0 -1
- package/template/packages/shared/src/graphql/client.ts +0 -34
- package/template/packages/shared/src/index.ts +0 -25
- package/template/packages/shared/src/navigation/AppRouter.tsx +0 -565
- package/template/packages/shared/src/trpc/client.ts +0 -44
- package/template/packages/shared/src/unistyles.ts +0 -50
- package/template/packages/shared/tsconfig.json +0 -22
- package/template/packages/web/README.md +0 -131
- package/template/packages/web/__tests__/App.test.tsx +0 -342
- package/template/packages/web/__tests__/components.test.tsx +0 -564
- package/template/packages/web/index.html +0 -13
- package/template/packages/web/jest.config.js +0 -27
- package/template/packages/web/jest.setup.js +0 -24
- package/template/packages/web/package.json +0 -69
- package/template/packages/web/src/App.tsx +0 -14
- package/template/packages/web/src/components/TestDemo.tsx +0 -164
- package/template/packages/web/src/main.tsx +0 -27
- package/template/packages/web/src/utils/trpc.ts +0 -7
- package/template/packages/web/tsconfig.json +0 -26
- package/template/packages/web/vite.config.ts +0 -114
- package/template/setup.sh +0 -30
- package/template/tsconfig.json +0 -22
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
# {{projectName}}
|
|
2
|
-
|
|
3
|
-
{{description}}
|
|
4
|
-
|
|
5
|
-
## Getting Started
|
|
6
|
-
|
|
7
|
-
This is a React web application built with the Idealyst Framework and Vite, with full-stack capabilities including database and API integration.
|
|
8
|
-
|
|
9
|
-
### Prerequisites
|
|
10
|
-
|
|
11
|
-
- Node.js 18+
|
|
12
|
-
- Yarn
|
|
13
|
-
|
|
14
|
-
### Installation
|
|
15
|
-
|
|
16
|
-
Install dependencies:
|
|
17
|
-
```bash
|
|
18
|
-
yarn install
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
### Database Setup
|
|
22
|
-
|
|
23
|
-
If your project includes a database, set it up:
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
# Navigate to the database package
|
|
27
|
-
cd packages/database
|
|
28
|
-
|
|
29
|
-
# Install dependencies
|
|
30
|
-
yarn install
|
|
31
|
-
|
|
32
|
-
# Generate Prisma client
|
|
33
|
-
yarn prisma:generate
|
|
34
|
-
|
|
35
|
-
# Run database migrations
|
|
36
|
-
yarn prisma:migrate
|
|
37
|
-
|
|
38
|
-
# Seed the database with sample data
|
|
39
|
-
yarn prisma:seed
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
### API Setup
|
|
43
|
-
|
|
44
|
-
If your project includes an API, start the API server:
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
# Navigate to the API package
|
|
48
|
-
cd packages/api
|
|
49
|
-
|
|
50
|
-
# Install dependencies
|
|
51
|
-
yarn install
|
|
52
|
-
|
|
53
|
-
# Start the API server (usually on port 3000)
|
|
54
|
-
yarn dev
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### Development
|
|
58
|
-
|
|
59
|
-
Start the web development server:
|
|
60
|
-
```bash
|
|
61
|
-
yarn dev
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
The app will be available at `http://localhost:3000`
|
|
65
|
-
|
|
66
|
-
If you have both database and API packages, make sure to start them first before starting the web app for full functionality.
|
|
67
|
-
|
|
68
|
-
### Building for Production
|
|
69
|
-
|
|
70
|
-
Build the app:
|
|
71
|
-
```bash
|
|
72
|
-
yarn build
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
Preview the production build:
|
|
76
|
-
```bash
|
|
77
|
-
yarn preview
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### Project Structure
|
|
81
|
-
|
|
82
|
-
```
|
|
83
|
-
{{projectName}}/
|
|
84
|
-
├── packages/
|
|
85
|
-
│ ├── database/ # Database schema and migrations (if included)
|
|
86
|
-
│ ├── api/ # tRPC API server (if included)
|
|
87
|
-
│ ├── shared/ # Shared components and utilities
|
|
88
|
-
│ └── web/ # React web application
|
|
89
|
-
├── src/
|
|
90
|
-
│ ├── App.tsx # Main app component
|
|
91
|
-
│ ├── main.tsx # App entry point
|
|
92
|
-
│ ├── components/ # React components
|
|
93
|
-
│ └── utils/ # Utility functions and tRPC client
|
|
94
|
-
├── index.html # HTML template
|
|
95
|
-
├── vite.config.ts # Vite configuration
|
|
96
|
-
└── tsconfig.json # TypeScript configuration
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### Features
|
|
100
|
-
|
|
101
|
-
- **Full-Stack Type Safety**: End-to-end TypeScript from database to frontend
|
|
102
|
-
- **tRPC Integration**: Type-safe API calls with automatic TypeScript inference
|
|
103
|
-
- **Database Integration**: Prisma ORM with SQLite for development
|
|
104
|
-
- **Idealyst Components**: Cross-platform UI components
|
|
105
|
-
- **Idealyst Navigation**: Consistent navigation system
|
|
106
|
-
- **Idealyst Theme**: Unified theming across platforms
|
|
107
|
-
- **React 19.1**: Latest React version
|
|
108
|
-
- **Vite**: Fast build tool and dev server
|
|
109
|
-
- **React Native Web**: Use React Native components on the web
|
|
110
|
-
|
|
111
|
-
### API Demo
|
|
112
|
-
|
|
113
|
-
If your project includes the API demo, you can access it at `/test-demo` to see:
|
|
114
|
-
- Real-time database queries
|
|
115
|
-
- CRUD operations (Create, Read, Update, Delete)
|
|
116
|
-
- Type-safe tRPC integration
|
|
117
|
-
- Form handling with validation
|
|
118
|
-
|
|
119
|
-
### Development
|
|
120
|
-
|
|
121
|
-
The app uses the Idealyst Framework for consistent UI and navigation that works across web and mobile platforms.
|
|
122
|
-
|
|
123
|
-
Edit `src/App.tsx` to start building your application.
|
|
124
|
-
|
|
125
|
-
### Learn More
|
|
126
|
-
|
|
127
|
-
- [Idealyst Framework Documentation](https://github.com/your-username/idealyst-framework)
|
|
128
|
-
- [tRPC Documentation](https://trpc.io/)
|
|
129
|
-
- [Prisma Documentation](https://prisma.io/)
|
|
130
|
-
- [React Documentation](https://react.dev/)
|
|
131
|
-
- [Vite Documentation](https://vitejs.dev/)
|
|
@@ -1,342 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { render, screen, fireEvent, waitFor } from '@testing-library/react';
|
|
3
|
-
import userEvent from '@testing-library/user-event';
|
|
4
|
-
import { MemoryRouter } from 'react-router-dom';
|
|
5
|
-
import App from '../src/App';
|
|
6
|
-
|
|
7
|
-
// Mock the NavigatorProvider to avoid complex setup
|
|
8
|
-
jest.mock('@idealyst/navigation', () => ({
|
|
9
|
-
NavigatorProvider: ({ children }: { children?: React.ReactNode }) => (
|
|
10
|
-
<div data-testid="navigator-provider">{children || 'Navigator Content'}</div>
|
|
11
|
-
),
|
|
12
|
-
}));
|
|
13
|
-
|
|
14
|
-
jest.mock('@idealyst/navigation/examples', () => ({
|
|
15
|
-
ExampleStackRouter: {},
|
|
16
|
-
}));
|
|
17
|
-
|
|
18
|
-
describe('App Component', () => {
|
|
19
|
-
it('renders without crashing', () => {
|
|
20
|
-
render(
|
|
21
|
-
<MemoryRouter>
|
|
22
|
-
<App />
|
|
23
|
-
</MemoryRouter>
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
expect(screen.getByTestId('navigator-provider')).toBeInTheDocument();
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('contains the App class', () => {
|
|
30
|
-
const { container } = render(
|
|
31
|
-
<MemoryRouter>
|
|
32
|
-
<App />
|
|
33
|
-
</MemoryRouter>
|
|
34
|
-
);
|
|
35
|
-
|
|
36
|
-
expect(container.querySelector('.App')).toBeInTheDocument();
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
it('renders NavigatorProvider with BrowserRouter', () => {
|
|
40
|
-
render(
|
|
41
|
-
<MemoryRouter>
|
|
42
|
-
<App />
|
|
43
|
-
</MemoryRouter>
|
|
44
|
-
);
|
|
45
|
-
|
|
46
|
-
const navigatorProvider = screen.getByTestId('navigator-provider');
|
|
47
|
-
expect(navigatorProvider).toBeInTheDocument();
|
|
48
|
-
expect(navigatorProvider).toHaveTextContent('Navigator Content');
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
describe('Sample React Component Tests', () => {
|
|
53
|
-
// Example functional component for testing
|
|
54
|
-
const Button = ({
|
|
55
|
-
children,
|
|
56
|
-
onClick,
|
|
57
|
-
disabled = false,
|
|
58
|
-
variant = 'primary'
|
|
59
|
-
}: {
|
|
60
|
-
children: React.ReactNode;
|
|
61
|
-
onClick: () => void;
|
|
62
|
-
disabled?: boolean;
|
|
63
|
-
variant?: 'primary' | 'secondary';
|
|
64
|
-
}) => (
|
|
65
|
-
<button
|
|
66
|
-
data-testid="custom-button"
|
|
67
|
-
onClick={onClick}
|
|
68
|
-
disabled={disabled}
|
|
69
|
-
className={`btn btn-${variant}`}
|
|
70
|
-
>
|
|
71
|
-
{children}
|
|
72
|
-
</button>
|
|
73
|
-
);
|
|
74
|
-
|
|
75
|
-
it('renders button with correct text', () => {
|
|
76
|
-
const mockClick = jest.fn();
|
|
77
|
-
render(<Button onClick={mockClick}>Click me</Button>);
|
|
78
|
-
|
|
79
|
-
const button = screen.getByTestId('custom-button');
|
|
80
|
-
expect(button).toBeInTheDocument();
|
|
81
|
-
expect(button).toHaveTextContent('Click me');
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
it('calls onClick when clicked', async () => {
|
|
85
|
-
const user = userEvent.setup();
|
|
86
|
-
const mockClick = jest.fn();
|
|
87
|
-
|
|
88
|
-
render(<Button onClick={mockClick}>Click me</Button>);
|
|
89
|
-
|
|
90
|
-
const button = screen.getByTestId('custom-button');
|
|
91
|
-
await user.click(button);
|
|
92
|
-
|
|
93
|
-
expect(mockClick).toHaveBeenCalledTimes(1);
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
it('is disabled when disabled prop is true', () => {
|
|
97
|
-
const mockClick = jest.fn();
|
|
98
|
-
render(
|
|
99
|
-
<Button onClick={mockClick} disabled>
|
|
100
|
-
Disabled Button
|
|
101
|
-
</Button>
|
|
102
|
-
);
|
|
103
|
-
|
|
104
|
-
const button = screen.getByTestId('custom-button');
|
|
105
|
-
expect(button).toBeDisabled();
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
it('applies correct CSS classes based on variant', () => {
|
|
109
|
-
const mockClick = jest.fn();
|
|
110
|
-
const { rerender } = render(
|
|
111
|
-
<Button onClick={mockClick} variant="primary">
|
|
112
|
-
Primary Button
|
|
113
|
-
</Button>
|
|
114
|
-
);
|
|
115
|
-
|
|
116
|
-
let button = screen.getByTestId('custom-button');
|
|
117
|
-
expect(button).toHaveClass('btn', 'btn-primary');
|
|
118
|
-
|
|
119
|
-
rerender(
|
|
120
|
-
<Button onClick={mockClick} variant="secondary">
|
|
121
|
-
Secondary Button
|
|
122
|
-
</Button>
|
|
123
|
-
);
|
|
124
|
-
|
|
125
|
-
button = screen.getByTestId('custom-button');
|
|
126
|
-
expect(button).toHaveClass('btn', 'btn-secondary');
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
describe('Component with State', () => {
|
|
131
|
-
const Counter = ({ initialCount = 0 }: { initialCount?: number }) => {
|
|
132
|
-
const [count, setCount] = React.useState(initialCount);
|
|
133
|
-
|
|
134
|
-
return (
|
|
135
|
-
<div data-testid="counter">
|
|
136
|
-
<span data-testid="count-display">Count: {count}</span>
|
|
137
|
-
<button
|
|
138
|
-
data-testid="increment-button"
|
|
139
|
-
onClick={() => setCount(c => c + 1)}
|
|
140
|
-
>
|
|
141
|
-
Increment
|
|
142
|
-
</button>
|
|
143
|
-
<button
|
|
144
|
-
data-testid="decrement-button"
|
|
145
|
-
onClick={() => setCount(c => c - 1)}
|
|
146
|
-
>
|
|
147
|
-
Decrement
|
|
148
|
-
</button>
|
|
149
|
-
<button
|
|
150
|
-
data-testid="reset-button"
|
|
151
|
-
onClick={() => setCount(initialCount)}
|
|
152
|
-
>
|
|
153
|
-
Reset
|
|
154
|
-
</button>
|
|
155
|
-
</div>
|
|
156
|
-
);
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
it('renders with initial count', () => {
|
|
160
|
-
render(<Counter initialCount={5} />);
|
|
161
|
-
|
|
162
|
-
expect(screen.getByTestId('count-display')).toHaveTextContent('Count: 5');
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
it('increments count when increment button is clicked', async () => {
|
|
166
|
-
const user = userEvent.setup();
|
|
167
|
-
render(<Counter />);
|
|
168
|
-
|
|
169
|
-
const incrementButton = screen.getByTestId('increment-button');
|
|
170
|
-
const countDisplay = screen.getByTestId('count-display');
|
|
171
|
-
|
|
172
|
-
expect(countDisplay).toHaveTextContent('Count: 0');
|
|
173
|
-
|
|
174
|
-
await user.click(incrementButton);
|
|
175
|
-
expect(countDisplay).toHaveTextContent('Count: 1');
|
|
176
|
-
|
|
177
|
-
await user.click(incrementButton);
|
|
178
|
-
expect(countDisplay).toHaveTextContent('Count: 2');
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
it('decrements count when decrement button is clicked', async () => {
|
|
182
|
-
const user = userEvent.setup();
|
|
183
|
-
render(<Counter initialCount={5} />);
|
|
184
|
-
|
|
185
|
-
const decrementButton = screen.getByTestId('decrement-button');
|
|
186
|
-
const countDisplay = screen.getByTestId('count-display');
|
|
187
|
-
|
|
188
|
-
expect(countDisplay).toHaveTextContent('Count: 5');
|
|
189
|
-
|
|
190
|
-
await user.click(decrementButton);
|
|
191
|
-
expect(countDisplay).toHaveTextContent('Count: 4');
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
it('resets count to initial value', async () => {
|
|
195
|
-
const user = userEvent.setup();
|
|
196
|
-
render(<Counter initialCount={10} />);
|
|
197
|
-
|
|
198
|
-
const incrementButton = screen.getByTestId('increment-button');
|
|
199
|
-
const resetButton = screen.getByTestId('reset-button');
|
|
200
|
-
const countDisplay = screen.getByTestId('count-display');
|
|
201
|
-
|
|
202
|
-
// Increment a few times
|
|
203
|
-
await user.click(incrementButton);
|
|
204
|
-
await user.click(incrementButton);
|
|
205
|
-
expect(countDisplay).toHaveTextContent('Count: 12');
|
|
206
|
-
|
|
207
|
-
// Reset
|
|
208
|
-
await user.click(resetButton);
|
|
209
|
-
expect(countDisplay).toHaveTextContent('Count: 10');
|
|
210
|
-
});
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
describe('Async Component Testing', () => {
|
|
214
|
-
const AsyncDataComponent = () => {
|
|
215
|
-
const [data, setData] = React.useState<string | null>(null);
|
|
216
|
-
const [loading, setLoading] = React.useState(false);
|
|
217
|
-
const [error, setError] = React.useState<string | null>(null);
|
|
218
|
-
|
|
219
|
-
const fetchData = async () => {
|
|
220
|
-
setLoading(true);
|
|
221
|
-
setError(null);
|
|
222
|
-
|
|
223
|
-
try {
|
|
224
|
-
// Simulate API call
|
|
225
|
-
await new Promise(resolve => setTimeout(resolve, 100));
|
|
226
|
-
setData('Fetched data successfully');
|
|
227
|
-
} catch (err) {
|
|
228
|
-
setError('Failed to fetch data');
|
|
229
|
-
} finally {
|
|
230
|
-
setLoading(false);
|
|
231
|
-
}
|
|
232
|
-
};
|
|
233
|
-
|
|
234
|
-
return (
|
|
235
|
-
<div data-testid="async-component">
|
|
236
|
-
<button data-testid="fetch-button" onClick={fetchData}>
|
|
237
|
-
Fetch Data
|
|
238
|
-
</button>
|
|
239
|
-
|
|
240
|
-
{loading && <div data-testid="loading">Loading...</div>}
|
|
241
|
-
{error && <div data-testid="error">{error}</div>}
|
|
242
|
-
{data && <div data-testid="data">{data}</div>}
|
|
243
|
-
</div>
|
|
244
|
-
);
|
|
245
|
-
};
|
|
246
|
-
|
|
247
|
-
it('fetches and displays data', async () => {
|
|
248
|
-
const user = userEvent.setup();
|
|
249
|
-
render(<AsyncDataComponent />);
|
|
250
|
-
|
|
251
|
-
const fetchButton = screen.getByTestId('fetch-button');
|
|
252
|
-
|
|
253
|
-
// Initially no data, loading, or error
|
|
254
|
-
expect(screen.queryByTestId('data')).not.toBeInTheDocument();
|
|
255
|
-
expect(screen.queryByTestId('loading')).not.toBeInTheDocument();
|
|
256
|
-
expect(screen.queryByTestId('error')).not.toBeInTheDocument();
|
|
257
|
-
|
|
258
|
-
// Click fetch button
|
|
259
|
-
await user.click(fetchButton);
|
|
260
|
-
|
|
261
|
-
// Loading should appear
|
|
262
|
-
expect(screen.getByTestId('loading')).toBeInTheDocument();
|
|
263
|
-
|
|
264
|
-
// Wait for data to load
|
|
265
|
-
await waitFor(() => {
|
|
266
|
-
expect(screen.getByTestId('data')).toBeInTheDocument();
|
|
267
|
-
});
|
|
268
|
-
|
|
269
|
-
expect(screen.getByTestId('data')).toHaveTextContent('Fetched data successfully');
|
|
270
|
-
expect(screen.queryByTestId('loading')).not.toBeInTheDocument();
|
|
271
|
-
});
|
|
272
|
-
});
|
|
273
|
-
|
|
274
|
-
describe('Form Component Testing', () => {
|
|
275
|
-
const ContactForm = ({ onSubmit }: { onSubmit: (data: { name: string; email: string }) => void }) => {
|
|
276
|
-
const [name, setName] = React.useState('');
|
|
277
|
-
const [email, setEmail] = React.useState('');
|
|
278
|
-
|
|
279
|
-
const handleSubmit = (e: React.FormEvent) => {
|
|
280
|
-
e.preventDefault();
|
|
281
|
-
onSubmit({ name, email });
|
|
282
|
-
};
|
|
283
|
-
|
|
284
|
-
return (
|
|
285
|
-
<form data-testid="contact-form" onSubmit={handleSubmit}>
|
|
286
|
-
<input
|
|
287
|
-
data-testid="name-input"
|
|
288
|
-
type="text"
|
|
289
|
-
placeholder="Name"
|
|
290
|
-
value={name}
|
|
291
|
-
onChange={(e) => setName(e.target.value)}
|
|
292
|
-
/>
|
|
293
|
-
<input
|
|
294
|
-
data-testid="email-input"
|
|
295
|
-
type="email"
|
|
296
|
-
placeholder="Email"
|
|
297
|
-
value={email}
|
|
298
|
-
onChange={(e) => setEmail(e.target.value)}
|
|
299
|
-
/>
|
|
300
|
-
<button data-testid="submit-button" type="submit">
|
|
301
|
-
Submit
|
|
302
|
-
</button>
|
|
303
|
-
</form>
|
|
304
|
-
);
|
|
305
|
-
};
|
|
306
|
-
|
|
307
|
-
it('submits form with correct data', async () => {
|
|
308
|
-
const user = userEvent.setup();
|
|
309
|
-
const mockSubmit = jest.fn();
|
|
310
|
-
|
|
311
|
-
render(<ContactForm onSubmit={mockSubmit} />);
|
|
312
|
-
|
|
313
|
-
const nameInput = screen.getByTestId('name-input');
|
|
314
|
-
const emailInput = screen.getByTestId('email-input');
|
|
315
|
-
const submitButton = screen.getByTestId('submit-button');
|
|
316
|
-
|
|
317
|
-
// Fill out form
|
|
318
|
-
await user.type(nameInput, 'John Doe');
|
|
319
|
-
await user.type(emailInput, 'john@example.com');
|
|
320
|
-
|
|
321
|
-
// Submit form
|
|
322
|
-
await user.click(submitButton);
|
|
323
|
-
|
|
324
|
-
expect(mockSubmit).toHaveBeenCalledWith({
|
|
325
|
-
name: 'John Doe',
|
|
326
|
-
email: 'john@example.com'
|
|
327
|
-
});
|
|
328
|
-
});
|
|
329
|
-
|
|
330
|
-
it('updates input values as user types', async () => {
|
|
331
|
-
const user = userEvent.setup();
|
|
332
|
-
const mockSubmit = jest.fn();
|
|
333
|
-
|
|
334
|
-
render(<ContactForm onSubmit={mockSubmit} />);
|
|
335
|
-
|
|
336
|
-
const nameInput = screen.getByTestId('name-input') as HTMLInputElement;
|
|
337
|
-
|
|
338
|
-
await user.type(nameInput, 'Test Name');
|
|
339
|
-
|
|
340
|
-
expect(nameInput.value).toBe('Test Name');
|
|
341
|
-
});
|
|
342
|
-
});
|