popeye-cli 1.6.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/README.md +240 -32
  2. package/cheatsheet.md +407 -0
  3. package/dist/cli/commands/db.d.ts +10 -0
  4. package/dist/cli/commands/db.d.ts.map +1 -0
  5. package/dist/cli/commands/db.js +240 -0
  6. package/dist/cli/commands/db.js.map +1 -0
  7. package/dist/cli/commands/doctor.d.ts +18 -0
  8. package/dist/cli/commands/doctor.d.ts.map +1 -0
  9. package/dist/cli/commands/doctor.js +255 -0
  10. package/dist/cli/commands/doctor.js.map +1 -0
  11. package/dist/cli/commands/index.d.ts +2 -0
  12. package/dist/cli/commands/index.d.ts.map +1 -1
  13. package/dist/cli/commands/index.js +2 -0
  14. package/dist/cli/commands/index.js.map +1 -1
  15. package/dist/cli/index.d.ts.map +1 -1
  16. package/dist/cli/index.js +3 -1
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cli/interactive.d.ts.map +1 -1
  19. package/dist/cli/interactive.js +96 -0
  20. package/dist/cli/interactive.js.map +1 -1
  21. package/dist/generators/admin-wizard.d.ts +25 -0
  22. package/dist/generators/admin-wizard.d.ts.map +1 -0
  23. package/dist/generators/admin-wizard.js +123 -0
  24. package/dist/generators/admin-wizard.js.map +1 -0
  25. package/dist/generators/all.d.ts.map +1 -1
  26. package/dist/generators/all.js +10 -3
  27. package/dist/generators/all.js.map +1 -1
  28. package/dist/generators/database.d.ts +58 -0
  29. package/dist/generators/database.d.ts.map +1 -0
  30. package/dist/generators/database.js +229 -0
  31. package/dist/generators/database.js.map +1 -0
  32. package/dist/generators/fullstack.d.ts.map +1 -1
  33. package/dist/generators/fullstack.js +23 -7
  34. package/dist/generators/fullstack.js.map +1 -1
  35. package/dist/generators/index.d.ts +2 -0
  36. package/dist/generators/index.d.ts.map +1 -1
  37. package/dist/generators/index.js +2 -0
  38. package/dist/generators/index.js.map +1 -1
  39. package/dist/generators/templates/admin-wizard-python.d.ts +32 -0
  40. package/dist/generators/templates/admin-wizard-python.d.ts.map +1 -0
  41. package/dist/generators/templates/admin-wizard-python.js +425 -0
  42. package/dist/generators/templates/admin-wizard-python.js.map +1 -0
  43. package/dist/generators/templates/admin-wizard-react.d.ts +48 -0
  44. package/dist/generators/templates/admin-wizard-react.d.ts.map +1 -0
  45. package/dist/generators/templates/admin-wizard-react.js +554 -0
  46. package/dist/generators/templates/admin-wizard-react.js.map +1 -0
  47. package/dist/generators/templates/database-docker.d.ts +23 -0
  48. package/dist/generators/templates/database-docker.d.ts.map +1 -0
  49. package/dist/generators/templates/database-docker.js +221 -0
  50. package/dist/generators/templates/database-docker.js.map +1 -0
  51. package/dist/generators/templates/database-python.d.ts +54 -0
  52. package/dist/generators/templates/database-python.d.ts.map +1 -0
  53. package/dist/generators/templates/database-python.js +723 -0
  54. package/dist/generators/templates/database-python.js.map +1 -0
  55. package/dist/generators/templates/database-typescript.d.ts +34 -0
  56. package/dist/generators/templates/database-typescript.d.ts.map +1 -0
  57. package/dist/generators/templates/database-typescript.js +232 -0
  58. package/dist/generators/templates/database-typescript.js.map +1 -0
  59. package/dist/generators/templates/fullstack.d.ts.map +1 -1
  60. package/dist/generators/templates/fullstack.js +29 -0
  61. package/dist/generators/templates/fullstack.js.map +1 -1
  62. package/dist/generators/templates/index.d.ts +5 -0
  63. package/dist/generators/templates/index.d.ts.map +1 -1
  64. package/dist/generators/templates/index.js +5 -0
  65. package/dist/generators/templates/index.js.map +1 -1
  66. package/dist/state/index.d.ts +10 -0
  67. package/dist/state/index.d.ts.map +1 -1
  68. package/dist/state/index.js +22 -0
  69. package/dist/state/index.js.map +1 -1
  70. package/dist/types/consensus.d.ts +3 -0
  71. package/dist/types/consensus.d.ts.map +1 -1
  72. package/dist/types/consensus.js +1 -0
  73. package/dist/types/consensus.js.map +1 -1
  74. package/dist/types/database-runtime.d.ts +86 -0
  75. package/dist/types/database-runtime.d.ts.map +1 -0
  76. package/dist/types/database-runtime.js +61 -0
  77. package/dist/types/database-runtime.js.map +1 -0
  78. package/dist/types/database.d.ts +85 -0
  79. package/dist/types/database.d.ts.map +1 -0
  80. package/dist/types/database.js +71 -0
  81. package/dist/types/database.js.map +1 -0
  82. package/dist/types/index.d.ts +3 -0
  83. package/dist/types/index.d.ts.map +1 -1
  84. package/dist/types/index.js +6 -0
  85. package/dist/types/index.js.map +1 -1
  86. package/dist/types/tester.d.ts +138 -0
  87. package/dist/types/tester.d.ts.map +1 -0
  88. package/dist/types/tester.js +110 -0
  89. package/dist/types/tester.js.map +1 -0
  90. package/dist/types/workflow.d.ts +166 -0
  91. package/dist/types/workflow.d.ts.map +1 -1
  92. package/dist/types/workflow.js +14 -0
  93. package/dist/types/workflow.js.map +1 -1
  94. package/dist/workflow/db-setup-runner.d.ts +63 -0
  95. package/dist/workflow/db-setup-runner.d.ts.map +1 -0
  96. package/dist/workflow/db-setup-runner.js +336 -0
  97. package/dist/workflow/db-setup-runner.js.map +1 -0
  98. package/dist/workflow/db-state-machine.d.ts +30 -0
  99. package/dist/workflow/db-state-machine.d.ts.map +1 -0
  100. package/dist/workflow/db-state-machine.js +51 -0
  101. package/dist/workflow/db-state-machine.js.map +1 -0
  102. package/dist/workflow/execution-mode.js +2 -2
  103. package/dist/workflow/execution-mode.js.map +1 -1
  104. package/dist/workflow/index.d.ts +3 -0
  105. package/dist/workflow/index.d.ts.map +1 -1
  106. package/dist/workflow/index.js +3 -0
  107. package/dist/workflow/index.js.map +1 -1
  108. package/dist/workflow/task-workflow.d.ts +5 -0
  109. package/dist/workflow/task-workflow.d.ts.map +1 -1
  110. package/dist/workflow/task-workflow.js +172 -6
  111. package/dist/workflow/task-workflow.js.map +1 -1
  112. package/dist/workflow/tester.d.ts +120 -0
  113. package/dist/workflow/tester.d.ts.map +1 -0
  114. package/dist/workflow/tester.js +589 -0
  115. package/dist/workflow/tester.js.map +1 -0
  116. package/dist/workflow/workflow-logger.d.ts +1 -1
  117. package/dist/workflow/workflow-logger.d.ts.map +1 -1
  118. package/dist/workflow/workflow-logger.js.map +1 -1
  119. package/package.json +1 -1
  120. package/src/cli/commands/db.ts +281 -0
  121. package/src/cli/commands/doctor.ts +273 -0
  122. package/src/cli/commands/index.ts +2 -0
  123. package/src/cli/index.ts +4 -0
  124. package/src/cli/interactive.ts +102 -0
  125. package/src/generators/admin-wizard.ts +146 -0
  126. package/src/generators/all.ts +10 -3
  127. package/src/generators/database.ts +286 -0
  128. package/src/generators/fullstack.ts +26 -9
  129. package/src/generators/index.ts +12 -0
  130. package/src/generators/templates/admin-wizard-python.ts +431 -0
  131. package/src/generators/templates/admin-wizard-react.ts +560 -0
  132. package/src/generators/templates/database-docker.ts +227 -0
  133. package/src/generators/templates/database-python.ts +734 -0
  134. package/src/generators/templates/database-typescript.ts +238 -0
  135. package/src/generators/templates/fullstack.ts +29 -0
  136. package/src/generators/templates/index.ts +5 -0
  137. package/src/state/index.ts +29 -0
  138. package/src/types/consensus.ts +3 -0
  139. package/src/types/database-runtime.ts +69 -0
  140. package/src/types/database.ts +84 -0
  141. package/src/types/index.ts +50 -0
  142. package/src/types/tester.ts +136 -0
  143. package/src/types/workflow.ts +31 -0
  144. package/src/workflow/db-setup-runner.ts +391 -0
  145. package/src/workflow/db-state-machine.ts +58 -0
  146. package/src/workflow/execution-mode.ts +2 -2
  147. package/src/workflow/index.ts +3 -0
  148. package/src/workflow/task-workflow.ts +227 -5
  149. package/src/workflow/tester.ts +723 -0
  150. package/src/workflow/workflow-logger.ts +2 -0
  151. package/tests/generators/admin-wizard-orchestrator.test.ts +64 -0
  152. package/tests/generators/admin-wizard-templates.test.ts +366 -0
  153. package/tests/generators/cross-phase-integration.test.ts +383 -0
  154. package/tests/generators/database.test.ts +456 -0
  155. package/tests/generators/fe-be-db-integration.test.ts +613 -0
  156. package/tests/types/database-runtime.test.ts +158 -0
  157. package/tests/types/database.test.ts +187 -0
  158. package/tests/types/tester.test.ts +174 -0
  159. package/tests/workflow/db-setup-runner.test.ts +211 -0
  160. package/tests/workflow/db-state-machine.test.ts +117 -0
  161. package/tests/workflow/tester.test.ts +401 -0
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Docker-related database template functions
3
+ * Generates PostgreSQL service configs and docker-compose files
4
+ */
5
+ /**
6
+ * Generate PostgreSQL service YAML block for docker-compose
7
+ */
8
+ export function generatePostgresServiceYaml(projectName) {
9
+ return ` postgres:
10
+ image: postgres:16-alpine
11
+ container_name: ${projectName}-postgres
12
+ restart: unless-stopped
13
+ environment:
14
+ - POSTGRES_USER=postgres
15
+ - POSTGRES_PASSWORD=postgres
16
+ - POSTGRES_DB=${projectName.replace(/-/g, '_')}_db
17
+ ports:
18
+ - "5432:5432"
19
+ volumes:
20
+ - postgres-data:/var/lib/postgresql/data
21
+ healthcheck:
22
+ test: ["CMD-SHELL", "pg_isready -U postgres"]
23
+ interval: 5s
24
+ timeout: 5s
25
+ retries: 5`;
26
+ }
27
+ /**
28
+ * Generate full docker-compose.yml for fullstack projects with PostgreSQL
29
+ * Preserves all 4 existing services (frontend, backend, frontend-dev, backend-dev)
30
+ * and adds postgres service with proper depends_on
31
+ */
32
+ export function generateDockerComposeWithDb(projectName) {
33
+ const dbName = projectName.replace(/-/g, '_') + '_db';
34
+ return `version: "3.8"
35
+
36
+ services:
37
+ frontend:
38
+ build:
39
+ context: ./apps/frontend
40
+ target: production
41
+ container_name: ${projectName}-frontend
42
+ restart: unless-stopped
43
+ ports:
44
+ - "3000:80"
45
+ depends_on:
46
+ - backend
47
+ environment:
48
+ - VITE_API_URL=http://backend:8000
49
+
50
+ backend:
51
+ build:
52
+ context: ./apps/backend
53
+ container_name: ${projectName}-backend
54
+ restart: unless-stopped
55
+ ports:
56
+ - "8000:8000"
57
+ env_file:
58
+ - ./apps/backend/.env
59
+ environment:
60
+ - DATABASE_URL=postgresql+asyncpg://postgres:postgres@postgres:5432/${dbName}
61
+ volumes:
62
+ - backend-data:/app/data
63
+ depends_on:
64
+ postgres:
65
+ condition: service_healthy
66
+
67
+ postgres:
68
+ image: postgres:16-alpine
69
+ container_name: ${projectName}-postgres
70
+ restart: unless-stopped
71
+ environment:
72
+ - POSTGRES_USER=postgres
73
+ - POSTGRES_PASSWORD=postgres
74
+ - POSTGRES_DB=${dbName}
75
+ ports:
76
+ - "5432:5432"
77
+ volumes:
78
+ - postgres-data:/var/lib/postgresql/data
79
+ healthcheck:
80
+ test: ["CMD-SHELL", "pg_isready -U postgres"]
81
+ interval: 5s
82
+ timeout: 5s
83
+ retries: 5
84
+
85
+ frontend-dev:
86
+ build:
87
+ context: ./apps/frontend
88
+ target: development
89
+ container_name: ${projectName}-frontend-dev
90
+ ports:
91
+ - "5173:5173"
92
+ volumes:
93
+ - ./apps/frontend/src:/app/src
94
+ environment:
95
+ - VITE_API_URL=http://backend:8000
96
+ depends_on:
97
+ - backend
98
+
99
+ backend-dev:
100
+ build:
101
+ context: ./apps/backend
102
+ container_name: ${projectName}-backend-dev
103
+ ports:
104
+ - "8000:8000"
105
+ volumes:
106
+ - ./apps/backend/src:/app/src
107
+ - ./apps/backend/tests:/app/tests
108
+ environment:
109
+ - DATABASE_URL=postgresql+asyncpg://postgres:postgres@postgres:5432/${dbName}
110
+ command: ["uvicorn", "src.backend.main:app", "--reload", "--host", "0.0.0.0", "--port", "8000"]
111
+ depends_on:
112
+ postgres:
113
+ condition: service_healthy
114
+
115
+ volumes:
116
+ backend-data:
117
+ postgres-data:
118
+ `;
119
+ }
120
+ /**
121
+ * Generate full docker-compose.yml for "all" projects (FE + BE + Website + Postgres)
122
+ */
123
+ export function generateAllDockerComposeWithDb(projectName) {
124
+ const dbName = projectName.replace(/-/g, '_') + '_db';
125
+ return `version: '3.8'
126
+
127
+ services:
128
+ frontend:
129
+ build:
130
+ context: apps/frontend
131
+ dockerfile: Dockerfile
132
+ ports:
133
+ - "3000:80"
134
+ depends_on:
135
+ - backend
136
+ environment:
137
+ - VITE_API_URL=http://backend:8000
138
+ networks:
139
+ - ${projectName}-network
140
+
141
+ backend:
142
+ build:
143
+ context: apps/backend
144
+ dockerfile: Dockerfile
145
+ ports:
146
+ - "8000:8000"
147
+ environment:
148
+ - DEBUG=false
149
+ - FRONTEND_URL=http://frontend:80
150
+ - WEBSITE_URL=http://website:3000
151
+ - DATABASE_URL=postgresql+asyncpg://postgres:postgres@postgres:5432/${dbName}
152
+ volumes:
153
+ - backend-data:/app/data
154
+ depends_on:
155
+ postgres:
156
+ condition: service_healthy
157
+ networks:
158
+ - ${projectName}-network
159
+
160
+ website:
161
+ build:
162
+ context: apps/website
163
+ dockerfile: Dockerfile
164
+ ports:
165
+ - "3001:3000"
166
+ environment:
167
+ - NODE_ENV=production
168
+ - NEXT_PUBLIC_APP_URL=http://localhost:3000
169
+ networks:
170
+ - ${projectName}-network
171
+
172
+ postgres:
173
+ image: postgres:16-alpine
174
+ container_name: ${projectName}-postgres
175
+ restart: unless-stopped
176
+ environment:
177
+ - POSTGRES_USER=postgres
178
+ - POSTGRES_PASSWORD=postgres
179
+ - POSTGRES_DB=${dbName}
180
+ ports:
181
+ - "5432:5432"
182
+ volumes:
183
+ - postgres-data:/var/lib/postgresql/data
184
+ healthcheck:
185
+ test: ["CMD-SHELL", "pg_isready -U postgres"]
186
+ interval: 5s
187
+ timeout: 5s
188
+ retries: 5
189
+ networks:
190
+ - ${projectName}-network
191
+
192
+ networks:
193
+ ${projectName}-network:
194
+ driver: bridge
195
+
196
+ volumes:
197
+ backend-data:
198
+ postgres-data:
199
+ `;
200
+ }
201
+ /**
202
+ * Generate .env.example content with database variables
203
+ */
204
+ export function generateDbEnvExample(projectName) {
205
+ const dbName = projectName.replace(/-/g, '_') + '_db';
206
+ return `DEBUG=true
207
+
208
+ # Database
209
+ DATABASE_URL=postgresql+asyncpg://postgres:postgres@localhost:5432/${dbName}
210
+ POSTGRES_USER=postgres
211
+ POSTGRES_PASSWORD=postgres
212
+ POSTGRES_DB=${dbName}
213
+
214
+ # Vector support
215
+ DB_VECTOR_REQUIRED=true
216
+
217
+ # Admin Wizard
218
+ ADMIN_SETUP_TOKEN=change-me-to-a-random-string
219
+ `;
220
+ }
221
+ //# sourceMappingURL=database-docker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-docker.js","sourceRoot":"","sources":["../../../src/generators/templates/database-docker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,WAAmB;IAC7D,OAAO;;sBAEa,WAAW;;;;;sBAKX,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;;;;;;;;;iBASnC,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,WAAmB;IAC7D,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAEtD,OAAO;;;;;;;sBAOa,WAAW;;;;;;;;;;;;sBAYX,WAAW;;;;;;;4EAO2C,MAAM;;;;;;;;;sBAS5D,WAAW;;;;;sBAKX,MAAM;;;;;;;;;;;;;;;sBAeN,WAAW;;;;;;;;;;;;;sBAaX,WAAW;;;;;;;4EAO2C,MAAM;;;;;;;;;CASjF,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,8BAA8B,CAAC,WAAmB;IAChE,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAEtD,OAAO;;;;;;;;;;;;;;UAcC,WAAW;;;;;;;;;;;;4EAYuD,MAAM;;;;;;;UAOxE,WAAW;;;;;;;;;;;;UAYX,WAAW;;;;sBAIC,WAAW;;;;;sBAKX,MAAM;;;;;;;;;;;UAWlB,WAAW;;;IAGjB,WAAW;;;;;;CAMd,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACtD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAEtD,OAAO;;;qEAG4D,MAAM;;;cAG7D,MAAM;;;;;;;CAOnB,CAAC;AACF,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Python backend database template functions
3
+ * Generates SQLAlchemy + Alembic + asyncpg + pgvector files
4
+ * Each function returns a string of the generated file content
5
+ */
6
+ /**
7
+ * Generate database connection module with AsyncEngine and session management
8
+ */
9
+ export declare function generateDbConnection(_packageName: string): string;
10
+ /**
11
+ * Generate database models with Base, TimestampMixin, and AppSettings
12
+ */
13
+ export declare function generateDbModels(_packageName: string): string;
14
+ /**
15
+ * Generate database package __init__.py with re-exports
16
+ */
17
+ export declare function generateDbInit(_packageName: string): string;
18
+ /**
19
+ * Generate database settings module using pydantic-settings
20
+ */
21
+ export declare function generateDbSettings(_packageName: string): string;
22
+ /**
23
+ * Generate alembic.ini configuration
24
+ */
25
+ export declare function generateAlembicIni(_packageName: string): string;
26
+ /**
27
+ * Generate Alembic async env.py
28
+ */
29
+ export declare function generateAlembicEnvPy(packageName: string): string;
30
+ /**
31
+ * Generate Alembic script.py.mako template
32
+ */
33
+ export declare function generateAlembicScriptMako(): string;
34
+ /**
35
+ * Generate initial migration: pgvector extension + app_settings table
36
+ */
37
+ export declare function generateInitialMigration(_packageName: string): string;
38
+ /**
39
+ * Generate pgvector helper utilities
40
+ */
41
+ export declare function generateDbVectorHelpers(_packageName: string): string;
42
+ /**
43
+ * Generate graceful startup hook
44
+ */
45
+ export declare function generateDbStartupHook(_packageName: string): string;
46
+ /**
47
+ * Generate database health check route
48
+ */
49
+ export declare function generateDbHealthRoute(_packageName: string): string;
50
+ /**
51
+ * Generate test DB fixtures (conftest_db.py)
52
+ */
53
+ export declare function generateDbConftest(packageName: string): string;
54
+ //# sourceMappingURL=database-python.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-python.d.ts","sourceRoot":"","sources":["../../../src/generators/templates/database-python.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAsFjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAsD7D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAmB3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAuC/D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAuC/D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA+EhE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CA2BlD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAoDrE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CA0FpE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CA8ClE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAqFlE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAqD9D"}