@l4yercak3/cli 1.3.1 → 2.0.0-alpha.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 (357) hide show
  1. package/README.md +10 -220
  2. package/dist/api/client.d.ts +12 -0
  3. package/dist/api/client.d.ts.map +1 -0
  4. package/dist/api/client.js +37 -0
  5. package/dist/api/client.js.map +1 -0
  6. package/dist/api/platform.d.ts +161 -0
  7. package/dist/api/platform.d.ts.map +1 -0
  8. package/dist/api/platform.js +70 -0
  9. package/dist/api/platform.js.map +1 -0
  10. package/dist/bin/sevenlayers.d.ts +3 -0
  11. package/dist/bin/sevenlayers.d.ts.map +1 -0
  12. package/dist/bin/sevenlayers.js +198 -0
  13. package/dist/bin/sevenlayers.js.map +1 -0
  14. package/dist/commands/agent/catalog.d.ts +5 -0
  15. package/dist/commands/agent/catalog.d.ts.map +1 -0
  16. package/dist/commands/agent/catalog.js +142 -0
  17. package/dist/commands/agent/catalog.js.map +1 -0
  18. package/dist/commands/agent/drift.d.ts +5 -0
  19. package/dist/commands/agent/drift.d.ts.map +1 -0
  20. package/dist/commands/agent/drift.js +113 -0
  21. package/dist/commands/agent/drift.js.map +1 -0
  22. package/dist/commands/agent/init.d.ts +5 -0
  23. package/dist/commands/agent/init.d.ts.map +1 -0
  24. package/dist/commands/agent/init.js +75 -0
  25. package/dist/commands/agent/init.js.map +1 -0
  26. package/dist/commands/agent/permissions.d.ts +5 -0
  27. package/dist/commands/agent/permissions.d.ts.map +1 -0
  28. package/dist/commands/agent/permissions.js +88 -0
  29. package/dist/commands/agent/permissions.js.map +1 -0
  30. package/dist/commands/agent/runner.d.ts +14 -0
  31. package/dist/commands/agent/runner.d.ts.map +1 -0
  32. package/dist/commands/agent/runner.js +59 -0
  33. package/dist/commands/agent/runner.js.map +1 -0
  34. package/dist/commands/agent/shared.d.ts +13 -0
  35. package/dist/commands/agent/shared.d.ts.map +1 -0
  36. package/dist/commands/agent/shared.js +31 -0
  37. package/dist/commands/agent/shared.js.map +1 -0
  38. package/dist/commands/agent/template.d.ts +5 -0
  39. package/dist/commands/agent/template.d.ts.map +1 -0
  40. package/dist/commands/agent/template.js +104 -0
  41. package/dist/commands/agent/template.js.map +1 -0
  42. package/dist/commands/app/connect.d.ts +7 -0
  43. package/dist/commands/app/connect.d.ts.map +1 -0
  44. package/dist/commands/app/connect.js +12 -0
  45. package/dist/commands/app/connect.js.map +1 -0
  46. package/dist/commands/app/init.d.ts +7 -0
  47. package/dist/commands/app/init.d.ts.map +1 -0
  48. package/dist/commands/app/init.js +12 -0
  49. package/dist/commands/app/init.js.map +1 -0
  50. package/dist/commands/app/link.d.ts +3 -0
  51. package/dist/commands/app/link.d.ts.map +1 -0
  52. package/dist/commands/app/link.js +92 -0
  53. package/dist/commands/app/link.js.map +1 -0
  54. package/dist/commands/app/pages.d.ts +15 -0
  55. package/dist/commands/app/pages.d.ts.map +1 -0
  56. package/dist/commands/app/pages.js +180 -0
  57. package/dist/commands/app/pages.js.map +1 -0
  58. package/dist/commands/app/register.d.ts +3 -0
  59. package/dist/commands/app/register.d.ts.map +1 -0
  60. package/dist/commands/app/register.js +120 -0
  61. package/dist/commands/app/register.js.map +1 -0
  62. package/dist/commands/app/remote.d.ts +14 -0
  63. package/dist/commands/app/remote.d.ts.map +1 -0
  64. package/dist/commands/app/remote.js +44 -0
  65. package/dist/commands/app/remote.js.map +1 -0
  66. package/dist/commands/app/setup.d.ts +3 -0
  67. package/dist/commands/app/setup.d.ts.map +1 -0
  68. package/dist/commands/app/setup.js +299 -0
  69. package/dist/commands/app/setup.js.map +1 -0
  70. package/dist/commands/app/shared.d.ts +9 -0
  71. package/dist/commands/app/shared.d.ts.map +1 -0
  72. package/dist/commands/app/shared.js +122 -0
  73. package/dist/commands/app/shared.js.map +1 -0
  74. package/dist/commands/app/sync.d.ts +7 -0
  75. package/dist/commands/app/sync.d.ts.map +1 -0
  76. package/dist/commands/app/sync.js +107 -0
  77. package/dist/commands/app/sync.js.map +1 -0
  78. package/dist/commands/booking/check.d.ts +3 -0
  79. package/dist/commands/booking/check.d.ts.map +1 -0
  80. package/dist/commands/booking/check.js +68 -0
  81. package/dist/commands/booking/check.js.map +1 -0
  82. package/dist/commands/booking/setup.d.ts +3 -0
  83. package/dist/commands/booking/setup.d.ts.map +1 -0
  84. package/dist/commands/booking/setup.js +95 -0
  85. package/dist/commands/booking/setup.js.map +1 -0
  86. package/dist/commands/booking/shared.d.ts +31 -0
  87. package/dist/commands/booking/shared.d.ts.map +1 -0
  88. package/dist/commands/booking/shared.js +112 -0
  89. package/dist/commands/booking/shared.js.map +1 -0
  90. package/dist/commands/booking/smoke.d.ts +3 -0
  91. package/dist/commands/booking/smoke.d.ts.map +1 -0
  92. package/dist/commands/booking/smoke.js +101 -0
  93. package/dist/commands/booking/smoke.js.map +1 -0
  94. package/dist/commands/cms/bind.d.ts +3 -0
  95. package/dist/commands/cms/bind.d.ts.map +1 -0
  96. package/dist/commands/cms/bind.js +212 -0
  97. package/dist/commands/cms/bind.js.map +1 -0
  98. package/dist/commands/cms/content.d.ts +40 -0
  99. package/dist/commands/cms/content.d.ts.map +1 -0
  100. package/dist/commands/cms/content.js +169 -0
  101. package/dist/commands/cms/content.js.map +1 -0
  102. package/dist/commands/cms/doctor.d.ts +3 -0
  103. package/dist/commands/cms/doctor.d.ts.map +1 -0
  104. package/dist/commands/cms/doctor.js +69 -0
  105. package/dist/commands/cms/doctor.js.map +1 -0
  106. package/dist/commands/cms/migrate.d.ts +3 -0
  107. package/dist/commands/cms/migrate.d.ts.map +1 -0
  108. package/dist/commands/cms/migrate.js +78 -0
  109. package/dist/commands/cms/migrate.js.map +1 -0
  110. package/dist/commands/cms/registry.d.ts +3 -0
  111. package/dist/commands/cms/registry.d.ts.map +1 -0
  112. package/dist/commands/cms/registry.js +161 -0
  113. package/dist/commands/cms/registry.js.map +1 -0
  114. package/dist/commands/cms/seed.d.ts +3 -0
  115. package/dist/commands/cms/seed.d.ts.map +1 -0
  116. package/dist/commands/cms/seed.js +102 -0
  117. package/dist/commands/cms/seed.js.map +1 -0
  118. package/dist/commands/cms/shared.d.ts +22 -0
  119. package/dist/commands/cms/shared.d.ts.map +1 -0
  120. package/dist/commands/cms/shared.js +82 -0
  121. package/dist/commands/cms/shared.js.map +1 -0
  122. package/dist/commands/doctor/target.d.ts +3 -0
  123. package/dist/commands/doctor/target.d.ts.map +1 -0
  124. package/dist/commands/doctor/target.js +46 -0
  125. package/dist/commands/doctor/target.js.map +1 -0
  126. package/dist/commands/env/list.d.ts +3 -0
  127. package/dist/commands/env/list.d.ts.map +1 -0
  128. package/dist/commands/env/list.js +28 -0
  129. package/dist/commands/env/list.js.map +1 -0
  130. package/dist/commands/env/set.d.ts +3 -0
  131. package/dist/commands/env/set.d.ts.map +1 -0
  132. package/dist/commands/env/set.js +36 -0
  133. package/dist/commands/env/set.js.map +1 -0
  134. package/dist/commands/env/use.d.ts +3 -0
  135. package/dist/commands/env/use.d.ts.map +1 -0
  136. package/dist/commands/env/use.js +15 -0
  137. package/dist/commands/env/use.js.map +1 -0
  138. package/dist/commands/legacy/connect.d.ts +3 -0
  139. package/dist/commands/legacy/connect.d.ts.map +1 -0
  140. package/dist/commands/legacy/connect.js +8 -0
  141. package/dist/commands/legacy/connect.js.map +1 -0
  142. package/dist/commands/legacy/pages.d.ts +3 -0
  143. package/dist/commands/legacy/pages.d.ts.map +1 -0
  144. package/dist/commands/legacy/pages.js +16 -0
  145. package/dist/commands/legacy/pages.js.map +1 -0
  146. package/dist/commands/legacy/spread.d.ts +3 -0
  147. package/dist/commands/legacy/spread.d.ts.map +1 -0
  148. package/dist/commands/legacy/spread.js +8 -0
  149. package/dist/commands/legacy/spread.js.map +1 -0
  150. package/dist/commands/legacy/sync.d.ts +3 -0
  151. package/dist/commands/legacy/sync.d.ts.map +1 -0
  152. package/dist/commands/legacy/sync.js +8 -0
  153. package/dist/commands/legacy/sync.js.map +1 -0
  154. package/dist/config/env-diff.d.ts +10 -0
  155. package/dist/config/env-diff.d.ts.map +1 -0
  156. package/dist/config/env-diff.js +24 -0
  157. package/dist/config/env-diff.js.map +1 -0
  158. package/dist/config/env-parser.d.ts +20 -0
  159. package/dist/config/env-parser.d.ts.map +1 -0
  160. package/dist/config/env-parser.js +70 -0
  161. package/dist/config/env-parser.js.map +1 -0
  162. package/dist/config/env-writer.d.ts +22 -0
  163. package/dist/config/env-writer.d.ts.map +1 -0
  164. package/dist/config/env-writer.js +172 -0
  165. package/dist/config/env-writer.js.map +1 -0
  166. package/dist/config/profile-store.d.ts +29 -0
  167. package/dist/config/profile-store.d.ts.map +1 -0
  168. package/dist/config/profile-store.js +257 -0
  169. package/dist/config/profile-store.js.map +1 -0
  170. package/dist/core/args.d.ts +11 -0
  171. package/dist/core/args.d.ts.map +1 -0
  172. package/dist/core/args.js +106 -0
  173. package/dist/core/args.js.map +1 -0
  174. package/dist/core/colors.d.ts +6 -0
  175. package/dist/core/colors.d.ts.map +1 -0
  176. package/dist/core/colors.js +29 -0
  177. package/dist/core/colors.js.map +1 -0
  178. package/dist/safety/target-guard.d.ts +16 -0
  179. package/dist/safety/target-guard.d.ts.map +1 -0
  180. package/dist/safety/target-guard.js +55 -0
  181. package/dist/safety/target-guard.js.map +1 -0
  182. package/dist/testing/booking-smoke.d.ts +17 -0
  183. package/dist/testing/booking-smoke.d.ts.map +1 -0
  184. package/dist/testing/booking-smoke.js +43 -0
  185. package/dist/testing/booking-smoke.js.map +1 -0
  186. package/dist/tests/agent-commands.test.d.ts +2 -0
  187. package/dist/tests/agent-commands.test.d.ts.map +1 -0
  188. package/dist/tests/agent-commands.test.js +180 -0
  189. package/dist/tests/agent-commands.test.js.map +1 -0
  190. package/dist/tests/agent-governance.test.d.ts +2 -0
  191. package/dist/tests/agent-governance.test.d.ts.map +1 -0
  192. package/dist/tests/agent-governance.test.js +233 -0
  193. package/dist/tests/agent-governance.test.js.map +1 -0
  194. package/dist/tests/app-commands.test.d.ts +2 -0
  195. package/dist/tests/app-commands.test.d.ts.map +1 -0
  196. package/dist/tests/app-commands.test.js +462 -0
  197. package/dist/tests/app-commands.test.js.map +1 -0
  198. package/dist/tests/booking-commands.test.d.ts +2 -0
  199. package/dist/tests/booking-commands.test.d.ts.map +1 -0
  200. package/dist/tests/booking-commands.test.js +204 -0
  201. package/dist/tests/booking-commands.test.js.map +1 -0
  202. package/dist/tests/booking-smoke.test.d.ts +2 -0
  203. package/dist/tests/booking-smoke.test.d.ts.map +1 -0
  204. package/dist/tests/booking-smoke.test.js +183 -0
  205. package/dist/tests/booking-smoke.test.js.map +1 -0
  206. package/dist/tests/cms-commands.test.d.ts +2 -0
  207. package/dist/tests/cms-commands.test.d.ts.map +1 -0
  208. package/dist/tests/cms-commands.test.js +254 -0
  209. package/dist/tests/cms-commands.test.js.map +1 -0
  210. package/dist/tests/cms-ops.test.d.ts +2 -0
  211. package/dist/tests/cms-ops.test.d.ts.map +1 -0
  212. package/dist/tests/cms-ops.test.js +125 -0
  213. package/dist/tests/cms-ops.test.js.map +1 -0
  214. package/dist/tests/env-writer.test.d.ts +2 -0
  215. package/dist/tests/env-writer.test.d.ts.map +1 -0
  216. package/dist/tests/env-writer.test.js +90 -0
  217. package/dist/tests/env-writer.test.js.map +1 -0
  218. package/dist/tests/profile-store.test.d.ts +2 -0
  219. package/dist/tests/profile-store.test.d.ts.map +1 -0
  220. package/dist/tests/profile-store.test.js +88 -0
  221. package/dist/tests/profile-store.test.js.map +1 -0
  222. package/dist/tests/target-guard.test.d.ts +2 -0
  223. package/dist/tests/target-guard.test.d.ts.map +1 -0
  224. package/dist/tests/target-guard.test.js +132 -0
  225. package/dist/tests/target-guard.test.js.map +1 -0
  226. package/dist/ui/logo.d.ts +2 -0
  227. package/dist/ui/logo.d.ts.map +1 -0
  228. package/dist/ui/logo.js +22 -0
  229. package/dist/ui/logo.js.map +1 -0
  230. package/package.json +17 -53
  231. package/.claude/settings.local.json +0 -36
  232. package/.cursor/rules.md +0 -203
  233. package/.eslintrc.js +0 -31
  234. package/CLAUDE.md +0 -100
  235. package/bin/cli.js +0 -116
  236. package/docs/ADDING_FRAMEWORK_DETECTORS.md +0 -391
  237. package/docs/ADDING_NEW_PROJECT_TYPE.md +0 -156
  238. package/docs/ARCHITECTURE_RELATIONSHIPS.md +0 -411
  239. package/docs/CLI_AUTHENTICATION.md +0 -214
  240. package/docs/CLI_PAGE_DETECTION_REQUIREMENTS.md +0 -519
  241. package/docs/CRM-PIPELINES-SEQUENCES-SPEC.md +0 -429
  242. package/docs/DETECTOR_ARCHITECTURE.md +0 -326
  243. package/docs/DEVELOPMENT.md +0 -194
  244. package/docs/IMPLEMENTATION_PHASES.md +0 -468
  245. package/docs/INTEGRATION_PATHS_ARCHITECTURE.md +0 -1543
  246. package/docs/OAUTH_CLARIFICATION.md +0 -258
  247. package/docs/OAUTH_SETUP_GUIDE_TEMPLATE.md +0 -211
  248. package/docs/PHASE_0_PROGRESS.md +0 -120
  249. package/docs/PHASE_1_COMPLETE.md +0 -366
  250. package/docs/PHASE_SUMMARY.md +0 -149
  251. package/docs/PLAN.md +0 -511
  252. package/docs/README.md +0 -56
  253. package/docs/STRIPE_INTEGRATION.md +0 -447
  254. package/docs/SUMMARY.md +0 -230
  255. package/docs/UPDATED_PLAN.md +0 -447
  256. package/docs/mcp_server/MCP_EXTENSION_GUIDE.md +0 -1313
  257. package/docs/mcp_server/MCP_SERVER_ARCHITECTURE.md +0 -1481
  258. package/docs/mcp_server/applicationOntology.ts +0 -817
  259. package/docs/mcp_server/cliApplications.ts +0 -639
  260. package/docs/mcp_server/crmOntology.ts +0 -1063
  261. package/docs/mcp_server/eventOntology.ts +0 -1183
  262. package/docs/mcp_server/formsOntology.ts +0 -1401
  263. package/docs/mcp_server/ontologySchemas.ts +0 -185
  264. package/docs/mcp_server/schema.ts +0 -250
  265. package/docs/microsass_production_machine/CLI_API_REFERENCE.md +0 -1197
  266. package/docs/microsass_production_machine/CLI_PRODUCT_VISION.md +0 -676
  267. package/docs/microsass_production_machine/CLI_REQUIREMENTS.md +0 -606
  268. package/docs/microsass_production_machine/CONNECTED_APPLICATIONS_SPEC.md +0 -390
  269. package/docs/microsass_production_machine/IMPLEMENTATION_ROADMAP.md +0 -725
  270. package/docs/microsass_production_machine/OBJECT_MAPPINGS.md +0 -808
  271. package/docs/microsass_production_machine/REFERENCE_IMPLEMENTATION.md +0 -532
  272. package/src/api/backend-client.js +0 -449
  273. package/src/commands/api-keys.js +0 -119
  274. package/src/commands/connect.js +0 -243
  275. package/src/commands/login.js +0 -332
  276. package/src/commands/logout.js +0 -30
  277. package/src/commands/mcp-server.js +0 -85
  278. package/src/commands/mcp-setup.js +0 -686
  279. package/src/commands/pages.js +0 -317
  280. package/src/commands/scaffold.js +0 -409
  281. package/src/commands/spread.js +0 -861
  282. package/src/commands/status.js +0 -62
  283. package/src/commands/sync.js +0 -169
  284. package/src/commands/upgrade.js +0 -48
  285. package/src/config/config-manager.js +0 -206
  286. package/src/detectors/api-client-detector.js +0 -85
  287. package/src/detectors/base-detector.js +0 -77
  288. package/src/detectors/database-detector.js +0 -245
  289. package/src/detectors/expo-detector.js +0 -166
  290. package/src/detectors/github-detector.js +0 -74
  291. package/src/detectors/index.js +0 -106
  292. package/src/detectors/mapping-suggestor.js +0 -119
  293. package/src/detectors/model-detector.js +0 -318
  294. package/src/detectors/nextjs-detector.js +0 -139
  295. package/src/detectors/oauth-detector.js +0 -122
  296. package/src/detectors/page-detector.js +0 -480
  297. package/src/detectors/registry.js +0 -121
  298. package/src/generators/api-client-generator.js +0 -223
  299. package/src/generators/api-only/client.js +0 -683
  300. package/src/generators/api-only/index.js +0 -96
  301. package/src/generators/api-only/types.js +0 -618
  302. package/src/generators/api-only/webhooks.js +0 -377
  303. package/src/generators/env-generator.js +0 -191
  304. package/src/generators/expo-auth-generator.js +0 -1009
  305. package/src/generators/gitignore-generator.js +0 -92
  306. package/src/generators/index.js +0 -166
  307. package/src/generators/manifest-generator.js +0 -154
  308. package/src/generators/mcp-guide-generator.js +0 -256
  309. package/src/generators/nextauth-generator.js +0 -247
  310. package/src/generators/oauth-guide-generator.js +0 -277
  311. package/src/generators/quickstart/components/index.js +0 -1699
  312. package/src/generators/quickstart/components-mobile/index.js +0 -1440
  313. package/src/generators/quickstart/database/convex.js +0 -1257
  314. package/src/generators/quickstart/database/index.js +0 -34
  315. package/src/generators/quickstart/database/supabase.js +0 -1132
  316. package/src/generators/quickstart/hooks/index.js +0 -1065
  317. package/src/generators/quickstart/index.js +0 -191
  318. package/src/generators/quickstart/pages/index.js +0 -1466
  319. package/src/generators/quickstart/screens/index.js +0 -1498
  320. package/src/logo.js +0 -116
  321. package/src/mcp/auth.js +0 -127
  322. package/src/mcp/registry/domains/applications.js +0 -516
  323. package/src/mcp/registry/domains/benefits.js +0 -798
  324. package/src/mcp/registry/domains/codegen.js +0 -894
  325. package/src/mcp/registry/domains/core.js +0 -324
  326. package/src/mcp/registry/domains/crm.js +0 -591
  327. package/src/mcp/registry/domains/events.js +0 -649
  328. package/src/mcp/registry/domains/forms.js +0 -696
  329. package/src/mcp/registry/index.js +0 -164
  330. package/src/mcp/server.js +0 -116
  331. package/src/utils/file-utils.js +0 -117
  332. package/src/utils/init-helpers.js +0 -243
  333. package/src/utils/prompt-utils.js +0 -195
  334. package/templates/CLAUDE.md +0 -86
  335. package/tests/api-client-detector.test.js +0 -214
  336. package/tests/api-client-generator.test.js +0 -176
  337. package/tests/backend-client.test.js +0 -640
  338. package/tests/base-detector.test.js +0 -101
  339. package/tests/commands/login.test.js +0 -143
  340. package/tests/commands/logout.test.js +0 -84
  341. package/tests/commands/status.test.js +0 -167
  342. package/tests/config-manager.test.js +0 -321
  343. package/tests/database-detector.test.js +0 -221
  344. package/tests/detector-index.test.js +0 -209
  345. package/tests/detector-registry.test.js +0 -93
  346. package/tests/env-generator.test.js +0 -278
  347. package/tests/expo-detector.test.js +0 -263
  348. package/tests/file-utils.test.js +0 -194
  349. package/tests/generators-index.test.js +0 -454
  350. package/tests/github-detector.test.js +0 -145
  351. package/tests/gitignore-generator.test.js +0 -109
  352. package/tests/logo.test.js +0 -96
  353. package/tests/nextauth-generator.test.js +0 -255
  354. package/tests/nextjs-detector.test.js +0 -235
  355. package/tests/oauth-detector.test.js +0 -264
  356. package/tests/oauth-guide-generator.test.js +0 -273
  357. package/tests/page-detector.test.js +0 -371
@@ -1,96 +0,0 @@
1
- /**
2
- * Tests for Logo Module
3
- */
4
-
5
- const figlet = require('figlet');
6
-
7
- jest.mock('chalk', () => {
8
- const mockChalk = (text) => text;
9
- mockChalk.hex = () => mockChalk;
10
- return mockChalk;
11
- });
12
-
13
- jest.mock('figlet', () => ({
14
- textSync: jest.fn().mockReturnValue('MOCK LOGO\nLINE 2\nLINE 3'),
15
- }));
16
-
17
- // Spy on console.log
18
- const originalConsoleLog = console.log;
19
- let consoleOutput = [];
20
-
21
- beforeEach(() => {
22
- consoleOutput = [];
23
- console.log = jest.fn((...args) => {
24
- consoleOutput.push(args.join(' '));
25
- });
26
- });
27
-
28
- afterEach(() => {
29
- console.log = originalConsoleLog;
30
- });
31
-
32
- const { showLogo, rainbow } = require('../src/logo');
33
-
34
- describe('Logo Module', () => {
35
- describe('rainbow export', () => {
36
- it('exports rainbow color array', () => {
37
- expect(Array.isArray(rainbow)).toBe(true);
38
- expect(rainbow.length).toBeGreaterThan(0);
39
- });
40
-
41
- it('contains valid hex colors', () => {
42
- rainbow.forEach((color) => {
43
- expect(color).toMatch(/^#[0-9A-Fa-f]{6}$/);
44
- });
45
- });
46
- });
47
-
48
- describe('showLogo', () => {
49
- it('calls figlet.textSync with L4YERCAK3', () => {
50
- showLogo(false);
51
-
52
- expect(figlet.textSync).toHaveBeenCalledWith(
53
- 'L4YERCAK3',
54
- expect.objectContaining({
55
- font: '3D-ASCII',
56
- })
57
- );
58
- });
59
-
60
- it('prints logo lines to console', () => {
61
- showLogo(false);
62
-
63
- // Should have printed the mocked logo lines
64
- expect(consoleOutput.some((line) => line.includes('MOCK LOGO'))).toBe(true);
65
- });
66
-
67
- it('shows building metaphor by default', () => {
68
- showLogo();
69
-
70
- // Should print building metaphor lines
71
- const output = consoleOutput.join('\n');
72
- expect(output.length).toBeGreaterThan(100);
73
- });
74
-
75
- it('hides building metaphor when showBuilding is false', () => {
76
- showLogo(false);
77
-
78
- // Output should be shorter without building
79
- const outputWithoutBuilding = consoleOutput.length;
80
-
81
- consoleOutput = [];
82
- showLogo(true);
83
-
84
- const outputWithBuilding = consoleOutput.length;
85
-
86
- expect(outputWithBuilding).toBeGreaterThan(outputWithoutBuilding);
87
- });
88
-
89
- it('prints spacing after logo', () => {
90
- showLogo(false);
91
-
92
- // Last output should be empty (spacing)
93
- expect(consoleOutput[consoleOutput.length - 1]).toBe('');
94
- });
95
- });
96
- });
@@ -1,255 +0,0 @@
1
- /**
2
- * Tests for NextAuth Generator
3
- */
4
-
5
- const fs = require('fs');
6
- const path = require('path');
7
-
8
- jest.mock('fs');
9
- jest.mock('../src/utils/file-utils', () => ({
10
- checkFileOverwrite: jest.fn().mockResolvedValue('write'),
11
- writeFileWithBackup: jest.fn((filePath, content, action) => {
12
- if (action === 'skip') return null;
13
- return filePath;
14
- }),
15
- ensureDir: jest.fn(),
16
- }));
17
-
18
- const NextAuthGenerator = require('../src/generators/nextauth-generator');
19
- const { checkFileOverwrite, writeFileWithBackup, ensureDir } = require('../src/utils/file-utils');
20
-
21
- describe('NextAuthGenerator', () => {
22
- const mockProjectPath = '/test/project';
23
-
24
- beforeEach(() => {
25
- jest.clearAllMocks();
26
- fs.existsSync.mockReturnValue(false);
27
- fs.mkdirSync.mockReturnValue(undefined);
28
- fs.writeFileSync.mockReturnValue(undefined);
29
- checkFileOverwrite.mockResolvedValue('write');
30
- });
31
-
32
- describe('generate', () => {
33
- it('creates route.js in app/api/auth/[...nextauth] for App Router', async () => {
34
- const options = {
35
- projectPath: mockProjectPath,
36
- backendUrl: 'https://backend.test.com',
37
- oauthProviders: ['google'],
38
- routerType: 'app',
39
- isTypeScript: false,
40
- };
41
-
42
- const result = await NextAuthGenerator.generate(options);
43
-
44
- expect(result).toBe(
45
- path.join(mockProjectPath, 'app', 'api', 'auth', '[...nextauth]', 'route.js')
46
- );
47
- expect(ensureDir).toHaveBeenCalledWith(
48
- path.join(mockProjectPath, 'app', 'api', 'auth')
49
- );
50
- expect(ensureDir).toHaveBeenCalledWith(
51
- path.join(mockProjectPath, 'app', 'api', 'auth', '[...nextauth]')
52
- );
53
- });
54
-
55
- it('creates [...nextauth].ts in pages/api/auth for Pages Router', async () => {
56
- const options = {
57
- projectPath: mockProjectPath,
58
- backendUrl: 'https://backend.test.com',
59
- oauthProviders: ['google'],
60
- routerType: 'pages',
61
- isTypeScript: true,
62
- };
63
-
64
- const result = await NextAuthGenerator.generate(options);
65
-
66
- expect(result).toBe(
67
- path.join(mockProjectPath, 'pages', 'api', 'auth', '[...nextauth].ts')
68
- );
69
- });
70
-
71
- it('returns null when user skips overwrite', async () => {
72
- checkFileOverwrite.mockResolvedValue('skip');
73
-
74
- const options = {
75
- projectPath: mockProjectPath,
76
- backendUrl: 'https://backend.test.com',
77
- oauthProviders: ['google'],
78
- routerType: 'app',
79
- isTypeScript: false,
80
- };
81
-
82
- const result = await NextAuthGenerator.generate(options);
83
-
84
- expect(result).toBeNull();
85
- });
86
-
87
- it('does not create [...nextauth] dir for Pages Router', async () => {
88
- const options = {
89
- projectPath: mockProjectPath,
90
- backendUrl: 'https://backend.test.com',
91
- oauthProviders: ['google'],
92
- routerType: 'pages',
93
- isTypeScript: false,
94
- };
95
-
96
- await NextAuthGenerator.generate(options);
97
-
98
- // Should only create pages/api/auth, not [...nextauth] dir
99
- const ensureDirCalls = ensureDir.mock.calls.map((c) => c[0]);
100
- expect(ensureDirCalls).not.toContain(
101
- path.join(mockProjectPath, 'pages', 'api', 'auth', '[...nextauth]')
102
- );
103
- });
104
- });
105
-
106
- describe('generateCode', () => {
107
- describe('Google provider', () => {
108
- it('includes Google provider import and config', () => {
109
- const code = NextAuthGenerator.generateCode({
110
- oauthProviders: ['google'],
111
- routerType: 'app',
112
- isTypeScript: false,
113
- });
114
-
115
- expect(code).toContain("import GoogleProvider from 'next-auth/providers/google'");
116
- expect(code).toContain('GoogleProvider({');
117
- expect(code).toContain('process.env.GOOGLE_CLIENT_ID');
118
- expect(code).toContain('process.env.GOOGLE_CLIENT_SECRET');
119
- });
120
- });
121
-
122
- describe('Microsoft provider', () => {
123
- it('includes Azure AD provider import and config', () => {
124
- const code = NextAuthGenerator.generateCode({
125
- oauthProviders: ['microsoft'],
126
- routerType: 'app',
127
- isTypeScript: false,
128
- });
129
-
130
- expect(code).toContain("import AzureADProvider from 'next-auth/providers/azure-ad'");
131
- expect(code).toContain('AzureADProvider({');
132
- expect(code).toContain('process.env.AZURE_CLIENT_ID');
133
- expect(code).toContain('process.env.AZURE_CLIENT_SECRET');
134
- expect(code).toContain('process.env.AZURE_TENANT_ID');
135
- });
136
- });
137
-
138
- describe('GitHub provider', () => {
139
- it('includes GitHub provider import and config', () => {
140
- const code = NextAuthGenerator.generateCode({
141
- oauthProviders: ['github'],
142
- routerType: 'app',
143
- isTypeScript: false,
144
- });
145
-
146
- expect(code).toContain("import GitHubProvider from 'next-auth/providers/github'");
147
- expect(code).toContain('GitHubProvider({');
148
- expect(code).toContain('process.env.GITHUB_CLIENT_ID');
149
- expect(code).toContain('process.env.GITHUB_CLIENT_SECRET');
150
- });
151
- });
152
-
153
- describe('multiple providers', () => {
154
- it('includes all selected providers', () => {
155
- const code = NextAuthGenerator.generateCode({
156
- oauthProviders: ['google', 'microsoft', 'github'],
157
- routerType: 'app',
158
- isTypeScript: false,
159
- });
160
-
161
- expect(code).toContain('GoogleProvider');
162
- expect(code).toContain('AzureADProvider');
163
- expect(code).toContain('GitHubProvider');
164
- });
165
- });
166
-
167
- describe('App Router format', () => {
168
- it('uses route handler exports', () => {
169
- const code = NextAuthGenerator.generateCode({
170
- oauthProviders: ['google'],
171
- routerType: 'app',
172
- isTypeScript: false,
173
- });
174
-
175
- expect(code).toContain('export { handler as GET, handler as POST }');
176
- expect(code).toContain('const handler = NextAuth(authOptions)');
177
- expect(code).toContain("import type { NextAuthOptions } from 'next-auth'");
178
- });
179
- });
180
-
181
- describe('Pages Router format', () => {
182
- it('uses default export', () => {
183
- const code = NextAuthGenerator.generateCode({
184
- oauthProviders: ['google'],
185
- routerType: 'pages',
186
- isTypeScript: false,
187
- });
188
-
189
- expect(code).toContain('export default NextAuth({');
190
- expect(code).not.toContain('export { handler as GET');
191
- });
192
- });
193
-
194
- describe('TypeScript support', () => {
195
- it('adds non-null assertions for TypeScript', () => {
196
- const code = NextAuthGenerator.generateCode({
197
- oauthProviders: ['google'],
198
- routerType: 'app',
199
- isTypeScript: true,
200
- });
201
-
202
- expect(code).toContain('process.env.GOOGLE_CLIENT_ID!');
203
- expect(code).toContain('process.env.GOOGLE_CLIENT_SECRET!');
204
- });
205
-
206
- it('omits non-null assertions for JavaScript', () => {
207
- const code = NextAuthGenerator.generateCode({
208
- oauthProviders: ['google'],
209
- routerType: 'app',
210
- isTypeScript: false,
211
- });
212
-
213
- expect(code).not.toContain('GOOGLE_CLIENT_ID!');
214
- expect(code).not.toContain('GOOGLE_CLIENT_SECRET!');
215
- });
216
- });
217
-
218
- describe('callbacks', () => {
219
- it('includes signIn callback with backend sync', () => {
220
- const code = NextAuthGenerator.generateCode({
221
- oauthProviders: ['google'],
222
- routerType: 'app',
223
- isTypeScript: false,
224
- });
225
-
226
- expect(code).toContain('async signIn({ user, account, profile })');
227
- expect(code).toContain('/api/v1/auth/sync-user');
228
- expect(code).toContain('NEXT_PUBLIC_L4YERCAK3_BACKEND_URL');
229
- expect(code).toContain('L4YERCAK3_API_KEY');
230
- });
231
-
232
- it('includes session callback', () => {
233
- const code = NextAuthGenerator.generateCode({
234
- oauthProviders: ['google'],
235
- routerType: 'app',
236
- isTypeScript: false,
237
- });
238
-
239
- expect(code).toContain('async session({ session, user');
240
- expect(code).toContain('session.user.id');
241
- expect(code).toContain('session.user.organizationId');
242
- });
243
- });
244
-
245
- it('includes custom signin page', () => {
246
- const code = NextAuthGenerator.generateCode({
247
- oauthProviders: ['google'],
248
- routerType: 'app',
249
- isTypeScript: false,
250
- });
251
-
252
- expect(code).toContain("signIn: '/auth/signin'");
253
- });
254
- });
255
- });
@@ -1,235 +0,0 @@
1
- /**
2
- * Tests for Next.js Detector
3
- */
4
-
5
- const fs = require('fs');
6
- const path = require('path');
7
-
8
- jest.mock('fs');
9
-
10
- const NextJsDetector = require('../src/detectors/nextjs-detector');
11
-
12
- describe('NextJsDetector', () => {
13
- const mockProjectPath = '/test/project';
14
-
15
- beforeEach(() => {
16
- jest.clearAllMocks();
17
- });
18
-
19
- describe('properties', () => {
20
- it('has correct name', () => {
21
- expect(NextJsDetector.name).toBe('nextjs');
22
- });
23
-
24
- it('has high priority', () => {
25
- expect(NextJsDetector.priority).toBe(100);
26
- });
27
- });
28
-
29
- describe('detect', () => {
30
- it('returns not detected when no package.json exists', () => {
31
- fs.existsSync.mockReturnValue(false);
32
-
33
- const result = NextJsDetector.detect(mockProjectPath);
34
-
35
- // When package.json doesn't exist, returns raw results object
36
- expect(result.isNextJs).toBe(false);
37
- expect(result.version).toBeNull();
38
- });
39
-
40
- it('returns not detected when Next.js is not in dependencies', () => {
41
- fs.existsSync.mockReturnValue(true);
42
- fs.readFileSync.mockReturnValue(JSON.stringify({
43
- dependencies: {
44
- react: '^18.0.0',
45
- },
46
- }));
47
-
48
- const result = NextJsDetector.detect(mockProjectPath);
49
-
50
- expect(result).toEqual({
51
- detected: false,
52
- confidence: 0,
53
- metadata: {},
54
- });
55
- });
56
-
57
- it('detects Next.js project with version', () => {
58
- fs.existsSync.mockImplementation((p) => {
59
- if (p === path.join(mockProjectPath, 'package.json')) return true;
60
- return false;
61
- });
62
- fs.readFileSync.mockReturnValue(JSON.stringify({
63
- dependencies: {
64
- next: '^14.0.0',
65
- react: '^18.0.0',
66
- },
67
- }));
68
-
69
- const result = NextJsDetector.detect(mockProjectPath);
70
-
71
- expect(result.detected).toBe(true);
72
- expect(result.confidence).toBe(0.95);
73
- expect(result.metadata.version).toBe('^14.0.0');
74
- });
75
-
76
- it('detects TypeScript from dependencies', () => {
77
- fs.existsSync.mockImplementation((p) => {
78
- if (p === path.join(mockProjectPath, 'package.json')) return true;
79
- return false;
80
- });
81
- fs.readFileSync.mockReturnValue(JSON.stringify({
82
- dependencies: {
83
- next: '^14.0.0',
84
- },
85
- devDependencies: {
86
- typescript: '^5.0.0',
87
- },
88
- }));
89
-
90
- const result = NextJsDetector.detect(mockProjectPath);
91
-
92
- expect(result.metadata.hasTypeScript).toBe(true);
93
- });
94
-
95
- it('detects TypeScript from tsconfig.json', () => {
96
- fs.existsSync.mockImplementation((p) => {
97
- if (p === path.join(mockProjectPath, 'package.json')) return true;
98
- if (p === path.join(mockProjectPath, 'tsconfig.json')) return true;
99
- return false;
100
- });
101
- fs.readFileSync.mockReturnValue(JSON.stringify({
102
- dependencies: {
103
- next: '^14.0.0',
104
- },
105
- }));
106
-
107
- const result = NextJsDetector.detect(mockProjectPath);
108
-
109
- expect(result.metadata.hasTypeScript).toBe(true);
110
- });
111
-
112
- it('detects App Router from app directory', () => {
113
- fs.existsSync.mockImplementation((p) => {
114
- if (p === path.join(mockProjectPath, 'package.json')) return true;
115
- if (p === path.join(mockProjectPath, 'app')) return true;
116
- return false;
117
- });
118
- fs.readFileSync.mockReturnValue(JSON.stringify({
119
- dependencies: {
120
- next: '^14.0.0',
121
- },
122
- }));
123
-
124
- const result = NextJsDetector.detect(mockProjectPath);
125
-
126
- expect(result.metadata.routerType).toBe('app');
127
- });
128
-
129
- it('detects App Router from src/app directory', () => {
130
- fs.existsSync.mockImplementation((p) => {
131
- if (p === path.join(mockProjectPath, 'package.json')) return true;
132
- if (p === path.join(mockProjectPath, 'src', 'app')) return true;
133
- return false;
134
- });
135
- fs.readFileSync.mockReturnValue(JSON.stringify({
136
- dependencies: {
137
- next: '^14.0.0',
138
- },
139
- }));
140
-
141
- const result = NextJsDetector.detect(mockProjectPath);
142
-
143
- expect(result.metadata.routerType).toBe('app');
144
- });
145
-
146
- it('detects Pages Router from pages directory', () => {
147
- fs.existsSync.mockImplementation((p) => {
148
- if (p === path.join(mockProjectPath, 'package.json')) return true;
149
- if (p === path.join(mockProjectPath, 'pages')) return true;
150
- return false;
151
- });
152
- fs.readFileSync.mockReturnValue(JSON.stringify({
153
- dependencies: {
154
- next: '^14.0.0',
155
- },
156
- }));
157
-
158
- const result = NextJsDetector.detect(mockProjectPath);
159
-
160
- expect(result.metadata.routerType).toBe('pages');
161
- });
162
-
163
- it('detects next.config.js', () => {
164
- fs.existsSync.mockImplementation((p) => {
165
- if (p === path.join(mockProjectPath, 'package.json')) return true;
166
- if (p === path.join(mockProjectPath, 'next.config.js')) return true;
167
- return false;
168
- });
169
- fs.readFileSync.mockReturnValue(JSON.stringify({
170
- dependencies: {
171
- next: '^14.0.0',
172
- },
173
- }));
174
-
175
- const result = NextJsDetector.detect(mockProjectPath);
176
-
177
- expect(result.metadata.config).toBe('next.config.js');
178
- });
179
-
180
- it('detects next.config.mjs', () => {
181
- fs.existsSync.mockImplementation((p) => {
182
- if (p === path.join(mockProjectPath, 'package.json')) return true;
183
- if (p === path.join(mockProjectPath, 'next.config.mjs')) return true;
184
- return false;
185
- });
186
- fs.readFileSync.mockReturnValue(JSON.stringify({
187
- dependencies: {
188
- next: '^14.0.0',
189
- },
190
- }));
191
-
192
- const result = NextJsDetector.detect(mockProjectPath);
193
-
194
- expect(result.metadata.config).toBe('next.config.mjs');
195
- });
196
-
197
- it('handles JSON parse errors gracefully', () => {
198
- fs.existsSync.mockReturnValue(true);
199
- fs.readFileSync.mockReturnValue('invalid json');
200
-
201
- const result = NextJsDetector.detect(mockProjectPath);
202
-
203
- expect(result).toEqual({
204
- detected: false,
205
- confidence: 0,
206
- metadata: {},
207
- });
208
- });
209
- });
210
-
211
- describe('getSupportedFeatures', () => {
212
- it('returns all features as supported', () => {
213
- const features = NextJsDetector.getSupportedFeatures();
214
-
215
- expect(features).toEqual({
216
- oauth: true,
217
- stripe: true,
218
- crm: true,
219
- projects: true,
220
- invoices: true,
221
- });
222
- });
223
- });
224
-
225
- describe('getAvailableGenerators', () => {
226
- it('returns list of available generators', () => {
227
- const generators = NextJsDetector.getAvailableGenerators();
228
-
229
- expect(generators).toContain('api-client');
230
- expect(generators).toContain('env');
231
- expect(generators).toContain('nextauth');
232
- expect(generators).toContain('oauth-guide');
233
- });
234
- });
235
- });