@kurly-growth/growthman 0.1.1 → 0.1.4

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 (301) hide show
  1. package/.next/BUILD_ID +1 -0
  2. package/.next/app-path-routes-manifest.json +12 -0
  3. package/.next/build/chunks/8e02f_b5d23412._.js +6758 -0
  4. package/.next/build/chunks/8e02f_b5d23412._.js.map +47 -0
  5. package/.next/build/chunks/[root-of-the-server]__310ad51a._.js +206 -0
  6. package/.next/build/chunks/[root-of-the-server]__310ad51a._.js.map +8 -0
  7. package/.next/build/chunks/[root-of-the-server]__8e2c0d87._.js +500 -0
  8. package/.next/build/chunks/[root-of-the-server]__8e2c0d87._.js.map +11 -0
  9. package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_5040861e._.js +13 -0
  10. package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_5040861e._.js.map +5 -0
  11. package/.next/build/chunks/[turbopack]_runtime.js +795 -0
  12. package/.next/build/chunks/[turbopack]_runtime.js.map +10 -0
  13. package/.next/build/package.json +1 -0
  14. package/.next/build/postcss.js +6 -0
  15. package/.next/build/postcss.js.map +5 -0
  16. package/.next/build-manifest.json +19 -0
  17. package/.next/diagnostics/build-diagnostics.json +6 -0
  18. package/.next/diagnostics/framework.json +1 -0
  19. package/.next/export-marker.json +6 -0
  20. package/.next/fallback-build-manifest.json +12 -0
  21. package/.next/images-manifest.json +66 -0
  22. package/.next/next-minimal-server.js.nft.json +1 -0
  23. package/.next/next-server.js.nft.json +1 -0
  24. package/.next/package.json +1 -0
  25. package/.next/prerender-manifest.json +114 -0
  26. package/.next/required-server-files.js +163 -0
  27. package/.next/required-server-files.json +163 -0
  28. package/.next/routes-manifest.json +109 -0
  29. package/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
  30. package/.next/server/app/_global-error/page/build-manifest.json +16 -0
  31. package/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
  32. package/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
  33. package/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
  34. package/.next/server/app/_global-error/page.js +11 -0
  35. package/.next/server/app/_global-error/page.js.map +5 -0
  36. package/.next/server/app/_global-error/page.js.nft.json +1 -0
  37. package/.next/server/app/_global-error/page_client-reference-manifest.js +2 -0
  38. package/.next/server/app/_global-error.html +2 -0
  39. package/.next/server/app/_global-error.meta +15 -0
  40. package/.next/server/app/_global-error.rsc +13 -0
  41. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
  42. package/.next/server/app/_global-error.segments/_full.segment.rsc +13 -0
  43. package/.next/server/app/_global-error.segments/_head.segment.rsc +6 -0
  44. package/.next/server/app/_global-error.segments/_index.segment.rsc +4 -0
  45. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  46. package/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
  47. package/.next/server/app/_not-found/page/build-manifest.json +16 -0
  48. package/.next/server/app/_not-found/page/next-font-manifest.json +11 -0
  49. package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
  50. package/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
  51. package/.next/server/app/_not-found/page.js +14 -0
  52. package/.next/server/app/_not-found/page.js.map +5 -0
  53. package/.next/server/app/_not-found/page.js.nft.json +1 -0
  54. package/.next/server/app/_not-found/page_client-reference-manifest.js +2 -0
  55. package/.next/server/app/_not-found.html +1 -0
  56. package/.next/server/app/_not-found.meta +16 -0
  57. package/.next/server/app/_not-found.rsc +15 -0
  58. package/.next/server/app/_not-found.segments/_full.segment.rsc +15 -0
  59. package/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
  60. package/.next/server/app/_not-found.segments/_index.segment.rsc +6 -0
  61. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
  62. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +4 -0
  63. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
  64. package/.next/server/app/api/endpoints/[id]/route/app-paths-manifest.json +3 -0
  65. package/.next/server/app/api/endpoints/[id]/route/build-manifest.json +11 -0
  66. package/.next/server/app/api/endpoints/[id]/route/server-reference-manifest.json +4 -0
  67. package/.next/server/app/api/endpoints/[id]/route.js +7 -0
  68. package/.next/server/app/api/endpoints/[id]/route.js.map +5 -0
  69. package/.next/server/app/api/endpoints/[id]/route.js.nft.json +1 -0
  70. package/.next/server/app/api/endpoints/[id]/route_client-reference-manifest.js +2 -0
  71. package/.next/server/app/api/endpoints/bulk/route/app-paths-manifest.json +3 -0
  72. package/.next/server/app/api/endpoints/bulk/route/build-manifest.json +11 -0
  73. package/.next/server/app/api/endpoints/bulk/route/server-reference-manifest.json +4 -0
  74. package/.next/server/app/api/endpoints/bulk/route.js +7 -0
  75. package/.next/server/app/api/endpoints/bulk/route.js.map +5 -0
  76. package/.next/server/app/api/endpoints/bulk/route.js.nft.json +1 -0
  77. package/.next/server/app/api/endpoints/bulk/route_client-reference-manifest.js +2 -0
  78. package/.next/server/app/api/endpoints/import/route/app-paths-manifest.json +3 -0
  79. package/.next/server/app/api/endpoints/import/route/build-manifest.json +11 -0
  80. package/.next/server/app/api/endpoints/import/route/server-reference-manifest.json +4 -0
  81. package/.next/server/app/api/endpoints/import/route.js +7 -0
  82. package/.next/server/app/api/endpoints/import/route.js.map +5 -0
  83. package/.next/server/app/api/endpoints/import/route.js.nft.json +1 -0
  84. package/.next/server/app/api/endpoints/import/route_client-reference-manifest.js +2 -0
  85. package/.next/server/app/api/endpoints/route/app-paths-manifest.json +3 -0
  86. package/.next/server/app/api/endpoints/route/build-manifest.json +11 -0
  87. package/.next/server/app/api/endpoints/route/server-reference-manifest.json +4 -0
  88. package/.next/server/app/api/endpoints/route.js +7 -0
  89. package/.next/server/app/api/endpoints/route.js.map +5 -0
  90. package/.next/server/app/api/endpoints/route.js.nft.json +1 -0
  91. package/.next/server/app/api/endpoints/route_client-reference-manifest.js +2 -0
  92. package/.next/server/app/api/endpoints/sync/route/app-paths-manifest.json +3 -0
  93. package/.next/server/app/api/endpoints/sync/route/build-manifest.json +11 -0
  94. package/.next/server/app/api/endpoints/sync/route/server-reference-manifest.json +4 -0
  95. package/.next/server/app/api/endpoints/sync/route.js +7 -0
  96. package/.next/server/app/api/endpoints/sync/route.js.map +5 -0
  97. package/.next/server/app/api/endpoints/sync/route.js.nft.json +1 -0
  98. package/.next/server/app/api/endpoints/sync/route_client-reference-manifest.js +2 -0
  99. package/.next/server/app/api/mock/[...slug]/route/app-paths-manifest.json +3 -0
  100. package/.next/server/app/api/mock/[...slug]/route/build-manifest.json +11 -0
  101. package/.next/server/app/api/mock/[...slug]/route/server-reference-manifest.json +4 -0
  102. package/.next/server/app/api/mock/[...slug]/route.js +8 -0
  103. package/.next/server/app/api/mock/[...slug]/route.js.map +5 -0
  104. package/.next/server/app/api/mock/[...slug]/route.js.nft.json +1 -0
  105. package/.next/server/app/api/mock/[...slug]/route_client-reference-manifest.js +2 -0
  106. package/.next/server/app/favicon.ico/route/app-paths-manifest.json +3 -0
  107. package/.next/server/app/favicon.ico/route/build-manifest.json +11 -0
  108. package/.next/server/app/favicon.ico/route.js +7 -0
  109. package/.next/server/app/favicon.ico/route.js.map +5 -0
  110. package/.next/server/app/favicon.ico/route.js.nft.json +1 -0
  111. package/.next/server/app/favicon.ico.meta +1 -0
  112. package/.next/server/app/index.html +1 -0
  113. package/.next/server/app/index.meta +14 -0
  114. package/.next/server/app/index.rsc +21 -0
  115. package/.next/server/app/index.segments/__PAGE__.segment.rsc +9 -0
  116. package/.next/server/app/index.segments/_full.segment.rsc +21 -0
  117. package/.next/server/app/index.segments/_head.segment.rsc +6 -0
  118. package/.next/server/app/index.segments/_index.segment.rsc +6 -0
  119. package/.next/server/app/index.segments/_tree.segment.rsc +4 -0
  120. package/.next/server/app/page/app-paths-manifest.json +3 -0
  121. package/.next/server/app/page/build-manifest.json +16 -0
  122. package/.next/server/app/page/next-font-manifest.json +11 -0
  123. package/.next/server/app/page/react-loadable-manifest.json +8 -0
  124. package/.next/server/app/page/server-reference-manifest.json +4 -0
  125. package/.next/server/app/page.js +16 -0
  126. package/.next/server/app/page.js.map +5 -0
  127. package/.next/server/app/page.js.nft.json +1 -0
  128. package/.next/server/app/page_client-reference-manifest.js +2 -0
  129. package/.next/server/app-paths-manifest.json +12 -0
  130. package/.next/server/chunks/4c6d9__next-internal_server_app_api_endpoints_[id]_route_actions_9be426d4.js +3 -0
  131. package/.next/server/chunks/4c6d9__next-internal_server_app_api_endpoints_[id]_route_actions_9be426d4.js.map +1 -0
  132. package/.next/server/chunks/4c6d9__next-internal_server_app_api_endpoints_bulk_route_actions_e28c0cd3.js +3 -0
  133. package/.next/server/chunks/4c6d9__next-internal_server_app_api_endpoints_bulk_route_actions_e28c0cd3.js.map +1 -0
  134. package/.next/server/chunks/4c6d9__next-internal_server_app_api_endpoints_import_route_actions_89a982f4.js +3 -0
  135. package/.next/server/chunks/4c6d9__next-internal_server_app_api_endpoints_import_route_actions_89a982f4.js.map +1 -0
  136. package/.next/server/chunks/4c6d9__next-internal_server_app_api_endpoints_route_actions_0c151162.js +3 -0
  137. package/.next/server/chunks/4c6d9__next-internal_server_app_api_endpoints_route_actions_0c151162.js.map +1 -0
  138. package/.next/server/chunks/4c6d9__next-internal_server_app_api_endpoints_sync_route_actions_3051349a.js +3 -0
  139. package/.next/server/chunks/4c6d9__next-internal_server_app_api_endpoints_sync_route_actions_3051349a.js.map +1 -0
  140. package/.next/server/chunks/4c6d9__next-internal_server_app_api_mock_[___slug]_route_actions_521def8c.js +3 -0
  141. package/.next/server/chunks/4c6d9__next-internal_server_app_api_mock_[___slug]_route_actions_521def8c.js.map +1 -0
  142. package/.next/server/chunks/8e02f_529f6098._.js +3 -0
  143. package/.next/server/chunks/8e02f_529f6098._.js.map +1 -0
  144. package/.next/server/chunks/8e02f_next_dist_esm_build_templates_app-route_2d5d7dcf.js +3 -0
  145. package/.next/server/chunks/8e02f_next_dist_esm_build_templates_app-route_2d5d7dcf.js.map +1 -0
  146. package/.next/server/chunks/[externals]__cf2ccb51._.js +3 -0
  147. package/.next/server/chunks/[externals]__cf2ccb51._.js.map +1 -0
  148. package/.next/server/chunks/[externals]_next_dist_8dbe5856._.js +3 -0
  149. package/.next/server/chunks/[externals]_next_dist_8dbe5856._.js.map +1 -0
  150. package/.next/server/chunks/[root-of-the-server]__05641340._.js +3 -0
  151. package/.next/server/chunks/[root-of-the-server]__05641340._.js.map +1 -0
  152. package/.next/server/chunks/[root-of-the-server]__40089159._.js +3 -0
  153. package/.next/server/chunks/[root-of-the-server]__40089159._.js.map +1 -0
  154. package/.next/server/chunks/[root-of-the-server]__84981507._.js +3 -0
  155. package/.next/server/chunks/[root-of-the-server]__84981507._.js.map +1 -0
  156. package/.next/server/chunks/[root-of-the-server]__88f1e82c._.js +21 -0
  157. package/.next/server/chunks/[root-of-the-server]__88f1e82c._.js.map +1 -0
  158. package/.next/server/chunks/[root-of-the-server]__9f34b8fa._.js +129 -0
  159. package/.next/server/chunks/[root-of-the-server]__9f34b8fa._.js.map +1 -0
  160. package/.next/server/chunks/[root-of-the-server]__a0785728._.js +3 -0
  161. package/.next/server/chunks/[root-of-the-server]__a0785728._.js.map +1 -0
  162. package/.next/server/chunks/[root-of-the-server]__c49c53b0._.js +3 -0
  163. package/.next/server/chunks/[root-of-the-server]__c49c53b0._.js.map +1 -0
  164. package/.next/server/chunks/[turbopack]_runtime.js +795 -0
  165. package/.next/server/chunks/[turbopack]_runtime.js.map +10 -0
  166. package/.next/server/chunks/ced06_growth-mock-server__next-internal_server_app_favicon_ico_route_actions_b931e89c.js +3 -0
  167. package/.next/server/chunks/ced06_growth-mock-server__next-internal_server_app_favicon_ico_route_actions_b931e89c.js.map +1 -0
  168. package/.next/server/chunks/ssr/3d860_Project_Web_growth-mock-server__next-internal_server_app_page_actions_a455ccb7.js +3 -0
  169. package/.next/server/chunks/ssr/3d860_Project_Web_growth-mock-server__next-internal_server_app_page_actions_a455ccb7.js.map +1 -0
  170. package/.next/server/chunks/ssr/4c6d9__next-internal_server_app__global-error_page_actions_386af4fb.js +3 -0
  171. package/.next/server/chunks/ssr/4c6d9__next-internal_server_app__global-error_page_actions_386af4fb.js.map +1 -0
  172. package/.next/server/chunks/ssr/8e02f_lucide-react_dist_esm_createLucideIcon_92babc87.js +3 -0
  173. package/.next/server/chunks/ssr/8e02f_lucide-react_dist_esm_createLucideIcon_92babc87.js.map +1 -0
  174. package/.next/server/chunks/ssr/8e02f_next_dist_5f7af8e7._.js +3 -0
  175. package/.next/server/chunks/ssr/8e02f_next_dist_5f7af8e7._.js.map +1 -0
  176. package/.next/server/chunks/ssr/8e02f_next_dist_8b7d79d3._.js +6 -0
  177. package/.next/server/chunks/ssr/8e02f_next_dist_8b7d79d3._.js.map +1 -0
  178. package/.next/server/chunks/ssr/8e02f_next_dist_a79dfbb1._.js +4 -0
  179. package/.next/server/chunks/ssr/8e02f_next_dist_a79dfbb1._.js.map +1 -0
  180. package/.next/server/chunks/ssr/8e02f_next_dist_client_components_b780ac2a._.js +3 -0
  181. package/.next/server/chunks/ssr/8e02f_next_dist_client_components_b780ac2a._.js.map +1 -0
  182. package/.next/server/chunks/ssr/8e02f_next_dist_client_components_builtin_forbidden_8e6242aa.js +3 -0
  183. package/.next/server/chunks/ssr/8e02f_next_dist_client_components_builtin_forbidden_8e6242aa.js.map +1 -0
  184. package/.next/server/chunks/ssr/8e02f_next_dist_client_components_builtin_global-error_fef7daa4.js +3 -0
  185. package/.next/server/chunks/ssr/8e02f_next_dist_client_components_builtin_global-error_fef7daa4.js.map +1 -0
  186. package/.next/server/chunks/ssr/8e02f_next_dist_client_components_builtin_unauthorized_d6f465ad.js +3 -0
  187. package/.next/server/chunks/ssr/8e02f_next_dist_client_components_builtin_unauthorized_d6f465ad.js.map +1 -0
  188. package/.next/server/chunks/ssr/8e02f_next_dist_esm_build_templates_app-page_aefc7b05.js +4 -0
  189. package/.next/server/chunks/ssr/8e02f_next_dist_esm_build_templates_app-page_aefc7b05.js.map +1 -0
  190. package/.next/server/chunks/ssr/Desktop_Project_Web_growth-mock-server_192f26a7._.js +3 -0
  191. package/.next/server/chunks/ssr/Desktop_Project_Web_growth-mock-server_192f26a7._.js.map +1 -0
  192. package/.next/server/chunks/ssr/Desktop_Project_Web_growth-mock-server_4d3bfee7._.js +4 -0
  193. package/.next/server/chunks/ssr/Desktop_Project_Web_growth-mock-server_4d3bfee7._.js.map +1 -0
  194. package/.next/server/chunks/ssr/Desktop_Project_Web_growth-mock-server_app_734cd624._.js +3 -0
  195. package/.next/server/chunks/ssr/Desktop_Project_Web_growth-mock-server_app_734cd624._.js.map +1 -0
  196. package/.next/server/chunks/ssr/Desktop_Project_Web_growth-mock-server_e3bf5efe._.js +7 -0
  197. package/.next/server/chunks/ssr/Desktop_Project_Web_growth-mock-server_e3bf5efe._.js.map +1 -0
  198. package/.next/server/chunks/ssr/[externals]_next_dist_server_app-render_work-async-storage_external_1f8eeae7.js +3 -0
  199. package/.next/server/chunks/ssr/[externals]_next_dist_server_app-render_work-async-storage_external_1f8eeae7.js.map +1 -0
  200. package/.next/server/chunks/ssr/[root-of-the-server]__04e2ab43._.js +10 -0
  201. package/.next/server/chunks/ssr/[root-of-the-server]__04e2ab43._.js.map +1 -0
  202. package/.next/server/chunks/ssr/[root-of-the-server]__0715ef20._.js +3 -0
  203. package/.next/server/chunks/ssr/[root-of-the-server]__0715ef20._.js.map +1 -0
  204. package/.next/server/chunks/ssr/[root-of-the-server]__0c263e23._.js +3 -0
  205. package/.next/server/chunks/ssr/[root-of-the-server]__0c263e23._.js.map +1 -0
  206. package/.next/server/chunks/ssr/[root-of-the-server]__5d3307e0._.js +3 -0
  207. package/.next/server/chunks/ssr/[root-of-the-server]__5d3307e0._.js.map +1 -0
  208. package/.next/server/chunks/ssr/[root-of-the-server]__6f5c427b._.js +4 -0
  209. package/.next/server/chunks/ssr/[root-of-the-server]__6f5c427b._.js.map +1 -0
  210. package/.next/server/chunks/ssr/[root-of-the-server]__a41353a2._.js +3 -0
  211. package/.next/server/chunks/ssr/[root-of-the-server]__a41353a2._.js.map +1 -0
  212. package/.next/server/chunks/ssr/[root-of-the-server]__c6e8de01._.js +3 -0
  213. package/.next/server/chunks/ssr/[root-of-the-server]__c6e8de01._.js.map +1 -0
  214. package/.next/server/chunks/ssr/[root-of-the-server]__c9e25af2._.js +3 -0
  215. package/.next/server/chunks/ssr/[root-of-the-server]__c9e25af2._.js.map +1 -0
  216. package/.next/server/chunks/ssr/[root-of-the-server]__caa92361._.js +3 -0
  217. package/.next/server/chunks/ssr/[root-of-the-server]__caa92361._.js.map +1 -0
  218. package/.next/server/chunks/ssr/[root-of-the-server]__d0f18aa0._.js +3 -0
  219. package/.next/server/chunks/ssr/[root-of-the-server]__d0f18aa0._.js.map +1 -0
  220. package/.next/server/chunks/ssr/[root-of-the-server]__e5032d8c._.js +3 -0
  221. package/.next/server/chunks/ssr/[root-of-the-server]__e5032d8c._.js.map +1 -0
  222. package/.next/server/chunks/ssr/[turbopack]_runtime.js +795 -0
  223. package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +10 -0
  224. package/.next/server/chunks/ssr/ced06_growth-mock-server__next-internal_server_app__not-found_page_actions_41a9defd.js +3 -0
  225. package/.next/server/chunks/ssr/ced06_growth-mock-server__next-internal_server_app__not-found_page_actions_41a9defd.js.map +1 -0
  226. package/.next/server/functions-config-manifest.json +4 -0
  227. package/.next/server/interception-route-rewrite-manifest.js +1 -0
  228. package/.next/server/middleware-build-manifest.js +20 -0
  229. package/.next/server/middleware-manifest.json +6 -0
  230. package/.next/server/next-font-manifest.js +1 -0
  231. package/.next/server/next-font-manifest.json +15 -0
  232. package/.next/server/pages/404.html +1 -0
  233. package/.next/server/pages/500.html +2 -0
  234. package/.next/server/pages-manifest.json +4 -0
  235. package/.next/server/server-reference-manifest.js +1 -0
  236. package/.next/server/server-reference-manifest.json +5 -0
  237. package/.next/static/17-ALhiWger7Ahids28qF/_buildManifest.js +11 -0
  238. package/.next/static/17-ALhiWger7Ahids28qF/_clientMiddlewareManifest.json +1 -0
  239. package/.next/static/17-ALhiWger7Ahids28qF/_ssgManifest.js +1 -0
  240. package/.next/static/chunks/31523f3a41fdf0b5.js +1 -0
  241. package/.next/static/chunks/3a3338ff069e0977.js +5 -0
  242. package/.next/static/chunks/68c20af4dfeb36d0.js +1 -0
  243. package/.next/static/chunks/77942ffae83b12ce.js +1 -0
  244. package/.next/static/chunks/81faf4667437d774.js +1 -0
  245. package/.next/static/chunks/8c554104dfee37e0.js +5 -0
  246. package/.next/static/chunks/a6dad97d9634a72d.js +1 -0
  247. package/.next/static/chunks/a6dad97d9634a72d.js.map +1 -0
  248. package/.next/static/chunks/ab3bc4985a0e98d2.css +3 -0
  249. package/.next/static/chunks/d71bf6d63636cd19.js +1 -0
  250. package/.next/static/chunks/f32c6649a0ca2698.js +1 -0
  251. package/.next/static/chunks/turbopack-7ea3b444f61e390f.js +4 -0
  252. package/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  253. package/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  254. package/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  255. package/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  256. package/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  257. package/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  258. package/.next/static/media/favicon.de6b30f1.ico +0 -0
  259. package/.next/trace +1 -0
  260. package/.next/trace-build +1 -0
  261. package/.next/turbopack +0 -0
  262. package/.next/types/routes.d.ts +78 -0
  263. package/.next/types/validator.ts +124 -0
  264. package/README.md +24 -1
  265. package/package.json +20 -13
  266. package/prisma/schema.prisma +1 -0
  267. package/.claude/settings.local.json +0 -10
  268. package/CLAUDE.md +0 -58
  269. package/app/api/endpoints/[id]/route.ts +0 -63
  270. package/app/api/endpoints/bulk/route.ts +0 -23
  271. package/app/api/endpoints/import/route.ts +0 -52
  272. package/app/api/endpoints/route.ts +0 -39
  273. package/app/api/endpoints/sync/route.ts +0 -80
  274. package/app/api/mock/[...slug]/route.ts +0 -82
  275. package/app/globals.css +0 -125
  276. package/app/layout.tsx +0 -36
  277. package/app/page.tsx +0 -184
  278. package/components/endpoint-edit-dialog.tsx +0 -181
  279. package/components/endpoint-table.tsx +0 -133
  280. package/components/openapi-upload-dialog.tsx +0 -196
  281. package/components/ui/button.tsx +0 -62
  282. package/components/ui/checkbox.tsx +0 -32
  283. package/components/ui/dialog.tsx +0 -143
  284. package/components/ui/input.tsx +0 -21
  285. package/components/ui/label.tsx +0 -24
  286. package/components/ui/sonner.tsx +0 -37
  287. package/components/ui/table.tsx +0 -116
  288. package/components/ui/textarea.tsx +0 -18
  289. package/components.json +0 -22
  290. package/eslint.config.mjs +0 -18
  291. package/lib/openapi-parser.ts +0 -270
  292. package/lib/prisma.ts +0 -9
  293. package/lib/utils.ts +0 -6
  294. package/lib/validation.ts +0 -19
  295. package/next.config.ts +0 -7
  296. package/pnpm-workspace.yaml +0 -4
  297. package/postcss.config.mjs +0 -7
  298. package/prisma/seed.ts +0 -29
  299. package/tsconfig.json +0 -34
  300. package/types/endpoint.ts +0 -10
  301. /package/{app/favicon.ico → .next/server/app/favicon.ico.body} +0 -0
@@ -1,143 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import * as DialogPrimitive from "@radix-ui/react-dialog"
5
- import { XIcon } from "lucide-react"
6
-
7
- import { cn } from "@/lib/utils"
8
-
9
- function Dialog({
10
- ...props
11
- }: React.ComponentProps<typeof DialogPrimitive.Root>) {
12
- return <DialogPrimitive.Root data-slot="dialog" {...props} />
13
- }
14
-
15
- function DialogTrigger({
16
- ...props
17
- }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {
18
- return <DialogPrimitive.Trigger data-slot="dialog-trigger" {...props} />
19
- }
20
-
21
- function DialogPortal({
22
- ...props
23
- }: React.ComponentProps<typeof DialogPrimitive.Portal>) {
24
- return <DialogPrimitive.Portal data-slot="dialog-portal" {...props} />
25
- }
26
-
27
- function DialogClose({
28
- ...props
29
- }: React.ComponentProps<typeof DialogPrimitive.Close>) {
30
- return <DialogPrimitive.Close data-slot="dialog-close" {...props} />
31
- }
32
-
33
- function DialogOverlay({
34
- className,
35
- ...props
36
- }: React.ComponentProps<typeof DialogPrimitive.Overlay>) {
37
- return (
38
- <DialogPrimitive.Overlay
39
- data-slot="dialog-overlay"
40
- className={cn(
41
- "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
42
- className
43
- )}
44
- {...props}
45
- />
46
- )
47
- }
48
-
49
- function DialogContent({
50
- className,
51
- children,
52
- showCloseButton = true,
53
- ...props
54
- }: React.ComponentProps<typeof DialogPrimitive.Content> & {
55
- showCloseButton?: boolean
56
- }) {
57
- return (
58
- <DialogPortal data-slot="dialog-portal">
59
- <DialogOverlay />
60
- <DialogPrimitive.Content
61
- data-slot="dialog-content"
62
- className={cn(
63
- "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none",
64
- className
65
- )}
66
- {...props}
67
- >
68
- {children}
69
- {showCloseButton && (
70
- <DialogPrimitive.Close
71
- data-slot="dialog-close"
72
- className="ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4"
73
- >
74
- <XIcon />
75
- <span className="sr-only">Close</span>
76
- </DialogPrimitive.Close>
77
- )}
78
- </DialogPrimitive.Content>
79
- </DialogPortal>
80
- )
81
- }
82
-
83
- function DialogHeader({ className, ...props }: React.ComponentProps<"div">) {
84
- return (
85
- <div
86
- data-slot="dialog-header"
87
- className={cn("flex flex-col gap-2 text-center sm:text-left", className)}
88
- {...props}
89
- />
90
- )
91
- }
92
-
93
- function DialogFooter({ className, ...props }: React.ComponentProps<"div">) {
94
- return (
95
- <div
96
- data-slot="dialog-footer"
97
- className={cn(
98
- "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
99
- className
100
- )}
101
- {...props}
102
- />
103
- )
104
- }
105
-
106
- function DialogTitle({
107
- className,
108
- ...props
109
- }: React.ComponentProps<typeof DialogPrimitive.Title>) {
110
- return (
111
- <DialogPrimitive.Title
112
- data-slot="dialog-title"
113
- className={cn("text-lg leading-none font-semibold", className)}
114
- {...props}
115
- />
116
- )
117
- }
118
-
119
- function DialogDescription({
120
- className,
121
- ...props
122
- }: React.ComponentProps<typeof DialogPrimitive.Description>) {
123
- return (
124
- <DialogPrimitive.Description
125
- data-slot="dialog-description"
126
- className={cn("text-muted-foreground text-sm", className)}
127
- {...props}
128
- />
129
- )
130
- }
131
-
132
- export {
133
- Dialog,
134
- DialogClose,
135
- DialogContent,
136
- DialogDescription,
137
- DialogFooter,
138
- DialogHeader,
139
- DialogOverlay,
140
- DialogPortal,
141
- DialogTitle,
142
- DialogTrigger,
143
- }
@@ -1,21 +0,0 @@
1
- import * as React from "react"
2
-
3
- import { cn } from "@/lib/utils"
4
-
5
- function Input({ className, type, ...props }: React.ComponentProps<"input">) {
6
- return (
7
- <input
8
- type={type}
9
- data-slot="input"
10
- className={cn(
11
- "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
12
- "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
13
- "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
14
- className
15
- )}
16
- {...props}
17
- />
18
- )
19
- }
20
-
21
- export { Input }
@@ -1,24 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import * as LabelPrimitive from "@radix-ui/react-label"
5
-
6
- import { cn } from "@/lib/utils"
7
-
8
- function Label({
9
- className,
10
- ...props
11
- }: React.ComponentProps<typeof LabelPrimitive.Root>) {
12
- return (
13
- <LabelPrimitive.Root
14
- data-slot="label"
15
- className={cn(
16
- "flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
17
- className
18
- )}
19
- {...props}
20
- />
21
- )
22
- }
23
-
24
- export { Label }
@@ -1,37 +0,0 @@
1
- "use client"
2
-
3
- import {
4
- CircleCheckIcon,
5
- InfoIcon,
6
- Loader2Icon,
7
- OctagonXIcon,
8
- TriangleAlertIcon,
9
- } from "lucide-react"
10
- import { Toaster as Sonner, type ToasterProps } from "sonner"
11
-
12
- const Toaster = ({ ...props }: ToasterProps) => {
13
- return (
14
- <Sonner
15
- theme="light"
16
- className="toaster group"
17
- icons={{
18
- success: <CircleCheckIcon className="size-4" />,
19
- info: <InfoIcon className="size-4" />,
20
- warning: <TriangleAlertIcon className="size-4" />,
21
- error: <OctagonXIcon className="size-4" />,
22
- loading: <Loader2Icon className="size-4 animate-spin" />,
23
- }}
24
- style={
25
- {
26
- "--normal-bg": "var(--popover)",
27
- "--normal-text": "var(--popover-foreground)",
28
- "--normal-border": "var(--border)",
29
- "--border-radius": "var(--radius)",
30
- } as React.CSSProperties
31
- }
32
- {...props}
33
- />
34
- )
35
- }
36
-
37
- export { Toaster }
@@ -1,116 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
-
5
- import { cn } from "@/lib/utils"
6
-
7
- function Table({ className, ...props }: React.ComponentProps<"table">) {
8
- return (
9
- <div
10
- data-slot="table-container"
11
- className="relative w-full overflow-x-auto"
12
- >
13
- <table
14
- data-slot="table"
15
- className={cn("w-full caption-bottom text-sm", className)}
16
- {...props}
17
- />
18
- </div>
19
- )
20
- }
21
-
22
- function TableHeader({ className, ...props }: React.ComponentProps<"thead">) {
23
- return (
24
- <thead
25
- data-slot="table-header"
26
- className={cn("[&_tr]:border-b", className)}
27
- {...props}
28
- />
29
- )
30
- }
31
-
32
- function TableBody({ className, ...props }: React.ComponentProps<"tbody">) {
33
- return (
34
- <tbody
35
- data-slot="table-body"
36
- className={cn("[&_tr:last-child]:border-0", className)}
37
- {...props}
38
- />
39
- )
40
- }
41
-
42
- function TableFooter({ className, ...props }: React.ComponentProps<"tfoot">) {
43
- return (
44
- <tfoot
45
- data-slot="table-footer"
46
- className={cn(
47
- "bg-muted/50 border-t font-medium [&>tr]:last:border-b-0",
48
- className
49
- )}
50
- {...props}
51
- />
52
- )
53
- }
54
-
55
- function TableRow({ className, ...props }: React.ComponentProps<"tr">) {
56
- return (
57
- <tr
58
- data-slot="table-row"
59
- className={cn(
60
- "hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",
61
- className
62
- )}
63
- {...props}
64
- />
65
- )
66
- }
67
-
68
- function TableHead({ className, ...props }: React.ComponentProps<"th">) {
69
- return (
70
- <th
71
- data-slot="table-head"
72
- className={cn(
73
- "text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
74
- className
75
- )}
76
- {...props}
77
- />
78
- )
79
- }
80
-
81
- function TableCell({ className, ...props }: React.ComponentProps<"td">) {
82
- return (
83
- <td
84
- data-slot="table-cell"
85
- className={cn(
86
- "p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
87
- className
88
- )}
89
- {...props}
90
- />
91
- )
92
- }
93
-
94
- function TableCaption({
95
- className,
96
- ...props
97
- }: React.ComponentProps<"caption">) {
98
- return (
99
- <caption
100
- data-slot="table-caption"
101
- className={cn("text-muted-foreground mt-4 text-sm", className)}
102
- {...props}
103
- />
104
- )
105
- }
106
-
107
- export {
108
- Table,
109
- TableHeader,
110
- TableBody,
111
- TableFooter,
112
- TableHead,
113
- TableRow,
114
- TableCell,
115
- TableCaption,
116
- }
@@ -1,18 +0,0 @@
1
- import * as React from "react"
2
-
3
- import { cn } from "@/lib/utils"
4
-
5
- function Textarea({ className, ...props }: React.ComponentProps<"textarea">) {
6
- return (
7
- <textarea
8
- data-slot="textarea"
9
- className={cn(
10
- "border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
11
- className
12
- )}
13
- {...props}
14
- />
15
- )
16
- }
17
-
18
- export { Textarea }
package/components.json DELETED
@@ -1,22 +0,0 @@
1
- {
2
- "$schema": "https://ui.shadcn.com/schema.json",
3
- "style": "new-york",
4
- "rsc": true,
5
- "tsx": true,
6
- "tailwind": {
7
- "config": "",
8
- "css": "app/globals.css",
9
- "baseColor": "neutral",
10
- "cssVariables": true,
11
- "prefix": ""
12
- },
13
- "iconLibrary": "lucide",
14
- "aliases": {
15
- "components": "@/components",
16
- "utils": "@/lib/utils",
17
- "ui": "@/components/ui",
18
- "lib": "@/lib",
19
- "hooks": "@/hooks"
20
- },
21
- "registries": {}
22
- }
package/eslint.config.mjs DELETED
@@ -1,18 +0,0 @@
1
- import { defineConfig, globalIgnores } from "eslint/config";
2
- import nextVitals from "eslint-config-next/core-web-vitals";
3
- import nextTs from "eslint-config-next/typescript";
4
-
5
- const eslintConfig = defineConfig([
6
- ...nextVitals,
7
- ...nextTs,
8
- // Override default ignores of eslint-config-next.
9
- globalIgnores([
10
- // Default ignores of eslint-config-next:
11
- ".next/**",
12
- "out/**",
13
- "build/**",
14
- "next-env.d.ts",
15
- ]),
16
- ]);
17
-
18
- export default eslintConfig;
@@ -1,270 +0,0 @@
1
- interface OpenAPISpec {
2
- paths?: Record<string, Record<string, OpenAPIOperation>>
3
- components?: {
4
- schemas?: Record<string, OpenAPISchema>
5
- }
6
- }
7
-
8
- interface OpenAPIOperation {
9
- summary?: string
10
- description?: string
11
- responses?: Record<string, OpenAPIResponse>
12
- requestBody?: {
13
- content?: Record<string, { schema?: OpenAPISchema; example?: unknown }>
14
- }
15
- }
16
-
17
- interface OpenAPIResponse {
18
- description?: string
19
- content?: Record<string, { schema?: OpenAPISchema; example?: unknown }>
20
- }
21
-
22
- interface OpenAPISchema {
23
- type?: string
24
- format?: string
25
- properties?: Record<string, OpenAPISchema>
26
- items?: OpenAPISchema
27
- example?: unknown
28
- default?: unknown
29
- enum?: unknown[]
30
- $ref?: string
31
- allOf?: OpenAPISchema[]
32
- oneOf?: OpenAPISchema[]
33
- anyOf?: OpenAPISchema[]
34
- nullable?: boolean
35
- required?: string[]
36
- additionalProperties?: boolean | OpenAPISchema
37
- }
38
-
39
- export interface ParsedEndpoint {
40
- path: string
41
- method: string
42
- description: string | null
43
- statusCode: number
44
- responseBody: unknown
45
- }
46
-
47
- function resolveRef(ref: string, spec: OpenAPISpec): OpenAPISchema | null {
48
- // $ref format: "#/components/schemas/SchemaName"
49
- const parts = ref.split('/')
50
- if (parts[0] !== '#' || parts[1] !== 'components' || parts[2] !== 'schemas') {
51
- return null
52
- }
53
- const schemaName = parts[3]
54
- return spec.components?.schemas?.[schemaName] || null
55
- }
56
-
57
- function generateMockValue(
58
- schema: OpenAPISchema,
59
- spec: OpenAPISpec,
60
- visited: Set<string> = new Set()
61
- ): unknown {
62
- // Handle $ref
63
- if (schema.$ref) {
64
- // Prevent circular references
65
- if (visited.has(schema.$ref)) {
66
- return {}
67
- }
68
- visited.add(schema.$ref)
69
- const resolved = resolveRef(schema.$ref, spec)
70
- if (resolved) {
71
- return generateMockValue(resolved, spec, visited)
72
- }
73
- return {}
74
- }
75
-
76
- // Handle allOf (merge schemas)
77
- if (schema.allOf && schema.allOf.length > 0) {
78
- const merged: Record<string, unknown> = {}
79
- for (const subSchema of schema.allOf) {
80
- const value = generateMockValue(subSchema, spec, visited)
81
- if (typeof value === 'object' && value !== null) {
82
- Object.assign(merged, value)
83
- }
84
- }
85
- return merged
86
- }
87
-
88
- // Handle oneOf/anyOf (use first option)
89
- if (schema.oneOf && schema.oneOf.length > 0) {
90
- return generateMockValue(schema.oneOf[0], spec, visited)
91
- }
92
- if (schema.anyOf && schema.anyOf.length > 0) {
93
- return generateMockValue(schema.anyOf[0], spec, visited)
94
- }
95
-
96
- // Use example or default if available
97
- if (schema.example !== undefined) return schema.example
98
- if (schema.default !== undefined) return schema.default
99
- if (schema.enum && schema.enum.length > 0) return schema.enum[0]
100
-
101
- // Generate based on type and format
102
- switch (schema.type) {
103
- case 'string':
104
- return generateStringValue(schema.format)
105
- case 'number':
106
- return generateNumberValue(schema.format)
107
- case 'integer':
108
- return generateIntegerValue(schema.format)
109
- case 'boolean':
110
- return true
111
- case 'array':
112
- if (schema.items) {
113
- return [generateMockValue(schema.items, spec, visited)]
114
- }
115
- return []
116
- case 'object':
117
- return generateObjectValue(schema, spec, visited)
118
- default:
119
- // If no type but has properties, treat as object
120
- if (schema.properties) {
121
- return generateObjectValue(schema, spec, visited)
122
- }
123
- return null
124
- }
125
- }
126
-
127
- function generateStringValue(format?: string): string {
128
- switch (format) {
129
- case 'date':
130
- return '2024-01-15'
131
- case 'date-time':
132
- return '2024-01-15T09:30:00Z'
133
- case 'time':
134
- return '09:30:00'
135
- case 'email':
136
- return 'user@example.com'
137
- case 'uri':
138
- case 'url':
139
- return 'https://example.com'
140
- case 'uuid':
141
- return '550e8400-e29b-41d4-a716-446655440000'
142
- case 'hostname':
143
- return 'example.com'
144
- case 'ipv4':
145
- return '192.168.1.1'
146
- case 'ipv6':
147
- return '2001:0db8:85a3:0000:0000:8a2e:0370:7334'
148
- case 'byte':
149
- return 'SGVsbG8gV29ybGQ='
150
- case 'binary':
151
- return '<binary>'
152
- case 'password':
153
- return '********'
154
- case 'phone':
155
- return '+1-555-555-5555'
156
- default:
157
- return 'string'
158
- }
159
- }
160
-
161
- function generateNumberValue(format?: string): number {
162
- switch (format) {
163
- case 'float':
164
- return 1.5
165
- case 'double':
166
- return 1.23456789
167
- default:
168
- return 0
169
- }
170
- }
171
-
172
- function generateIntegerValue(format?: string): number {
173
- switch (format) {
174
- case 'int32':
175
- return 123
176
- case 'int64':
177
- return 1234567890
178
- default:
179
- return 0
180
- }
181
- }
182
-
183
- function generateObjectValue(
184
- schema: OpenAPISchema,
185
- spec: OpenAPISpec,
186
- visited: Set<string>
187
- ): Record<string, unknown> {
188
- const obj: Record<string, unknown> = {}
189
-
190
- if (schema.properties) {
191
- for (const [key, propSchema] of Object.entries(schema.properties)) {
192
- obj[key] = generateMockValue(propSchema, spec, visited)
193
- }
194
- }
195
-
196
- return obj
197
- }
198
-
199
- export function parseOpenAPISpec(spec: OpenAPISpec): ParsedEndpoint[] {
200
- const endpoints: ParsedEndpoint[] = []
201
-
202
- if (!spec.paths) return endpoints
203
-
204
- for (const [path, methods] of Object.entries(spec.paths)) {
205
- for (const [method, operation] of Object.entries(methods)) {
206
- // Skip non-HTTP method properties like 'parameters'
207
- if (
208
- !['get', 'post', 'put', 'patch', 'delete', 'head', 'options'].includes(
209
- method.toLowerCase()
210
- )
211
- ) {
212
- continue
213
- }
214
-
215
- const description = operation.summary || operation.description || null
216
-
217
- // Find successful response (2xx)
218
- let statusCode = 200
219
- let responseBody: unknown = {}
220
-
221
- if (operation.responses) {
222
- // Sort response codes to prefer 200, then other 2xx
223
- const responseCodes = Object.keys(operation.responses).sort((a, b) => {
224
- if (a === '200') return -1
225
- if (b === '200') return 1
226
- return parseInt(a, 10) - parseInt(b, 10)
227
- })
228
-
229
- for (const code of responseCodes) {
230
- const codeNum = parseInt(code, 10)
231
- if (codeNum >= 200 && codeNum < 300) {
232
- statusCode = codeNum
233
- const response = operation.responses[code]
234
-
235
- if (response.content) {
236
- // Try application/json first, then any JSON-like content type
237
- const jsonContent =
238
- response.content['application/json'] ||
239
- response.content['application/hal+json'] ||
240
- response.content['application/vnd.api+json'] ||
241
- Object.values(response.content).find((c) => c.schema)
242
-
243
- if (jsonContent) {
244
- if (jsonContent.example) {
245
- responseBody = jsonContent.example
246
- } else if (jsonContent.schema) {
247
- responseBody = generateMockValue(jsonContent.schema, spec)
248
- }
249
- }
250
- }
251
- break
252
- }
253
- }
254
- }
255
-
256
- // Convert OpenAPI path params {id} to Express-style :id
257
- const normalizedPath = path.replace(/\{(\w+)\}/g, ':$1')
258
-
259
- endpoints.push({
260
- path: normalizedPath,
261
- method: method.toUpperCase(),
262
- description,
263
- statusCode,
264
- responseBody,
265
- })
266
- }
267
- }
268
-
269
- return endpoints
270
- }
package/lib/prisma.ts DELETED
@@ -1,9 +0,0 @@
1
- import { PrismaClient } from '@prisma/client'
2
-
3
- const globalForPrisma = globalThis as unknown as {
4
- prisma: PrismaClient | undefined
5
- }
6
-
7
- export const prisma = globalForPrisma.prisma ?? new PrismaClient()
8
-
9
- if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma
package/lib/utils.ts DELETED
@@ -1,6 +0,0 @@
1
- import { clsx, type ClassValue } from "clsx"
2
- import { twMerge } from "tailwind-merge"
3
-
4
- export function cn(...inputs: ClassValue[]) {
5
- return twMerge(clsx(inputs))
6
- }