@payloadcms/figma 0.0.1-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 (305) hide show
  1. package/LICENSE.md +11 -0
  2. package/bin/cli.js +4 -0
  3. package/dist/api/control-plane.d.ts +124 -0
  4. package/dist/api/control-plane.d.ts.map +1 -0
  5. package/dist/api/control-plane.js +245 -0
  6. package/dist/api/control-plane.js.map +1 -0
  7. package/dist/api/control-plane.spec.d.ts +2 -0
  8. package/dist/api/control-plane.spec.d.ts.map +1 -0
  9. package/dist/api/control-plane.spec.js +296 -0
  10. package/dist/api/control-plane.spec.js.map +1 -0
  11. package/dist/api/figma-api.d.ts +31 -0
  12. package/dist/api/figma-api.d.ts.map +1 -0
  13. package/dist/api/figma-api.js +169 -0
  14. package/dist/api/figma-api.js.map +1 -0
  15. package/dist/api/figma-api.spec.d.ts +14 -0
  16. package/dist/api/figma-api.spec.d.ts.map +1 -0
  17. package/dist/api/figma-api.spec.js +201 -0
  18. package/dist/api/figma-api.spec.js.map +1 -0
  19. package/dist/auth/__tests__/fixtures.d.ts +26 -0
  20. package/dist/auth/__tests__/fixtures.d.ts.map +1 -0
  21. package/dist/auth/__tests__/fixtures.js +67 -0
  22. package/dist/auth/__tests__/fixtures.js.map +1 -0
  23. package/dist/auth/__tests__/mocks.d.ts +33 -0
  24. package/dist/auth/__tests__/mocks.d.ts.map +1 -0
  25. package/dist/auth/__tests__/mocks.js +63 -0
  26. package/dist/auth/__tests__/mocks.js.map +1 -0
  27. package/dist/auth/browser.d.ts +31 -0
  28. package/dist/auth/browser.d.ts.map +1 -0
  29. package/dist/auth/browser.js +41 -0
  30. package/dist/auth/browser.js.map +1 -0
  31. package/dist/auth/callback-server.d.ts +61 -0
  32. package/dist/auth/callback-server.d.ts.map +1 -0
  33. package/dist/auth/callback-server.js +168 -0
  34. package/dist/auth/callback-server.js.map +1 -0
  35. package/dist/auth/callback-server.spec.d.ts +2 -0
  36. package/dist/auth/callback-server.spec.d.ts.map +1 -0
  37. package/dist/auth/callback-server.spec.js +85 -0
  38. package/dist/auth/callback-server.spec.js.map +1 -0
  39. package/dist/auth/crypto-utils.d.ts +33 -0
  40. package/dist/auth/crypto-utils.d.ts.map +1 -0
  41. package/dist/auth/crypto-utils.js +96 -0
  42. package/dist/auth/crypto-utils.js.map +1 -0
  43. package/dist/auth/crypto-utils.spec.d.ts +2 -0
  44. package/dist/auth/crypto-utils.spec.d.ts.map +1 -0
  45. package/dist/auth/crypto-utils.spec.js +36 -0
  46. package/dist/auth/crypto-utils.spec.js.map +1 -0
  47. package/dist/auth/jwt-validator.d.ts +41 -0
  48. package/dist/auth/jwt-validator.d.ts.map +1 -0
  49. package/dist/auth/jwt-validator.js +113 -0
  50. package/dist/auth/jwt-validator.js.map +1 -0
  51. package/dist/auth/jwt-validator.spec.d.ts +10 -0
  52. package/dist/auth/jwt-validator.spec.d.ts.map +1 -0
  53. package/dist/auth/jwt-validator.spec.js +236 -0
  54. package/dist/auth/jwt-validator.spec.js.map +1 -0
  55. package/dist/auth/oauth-flow.d.ts +62 -0
  56. package/dist/auth/oauth-flow.d.ts.map +1 -0
  57. package/dist/auth/oauth-flow.js +172 -0
  58. package/dist/auth/oauth-flow.js.map +1 -0
  59. package/dist/auth/oauth-flow.spec.d.ts +2 -0
  60. package/dist/auth/oauth-flow.spec.d.ts.map +1 -0
  61. package/dist/auth/oauth-flow.spec.js +134 -0
  62. package/dist/auth/oauth-flow.spec.js.map +1 -0
  63. package/dist/auth/pages/error.html +85 -0
  64. package/dist/auth/pages/success.html +74 -0
  65. package/dist/auth/pkce.d.ts +51 -0
  66. package/dist/auth/pkce.d.ts.map +1 -0
  67. package/dist/auth/pkce.js +71 -0
  68. package/dist/auth/pkce.js.map +1 -0
  69. package/dist/auth/pkce.spec.d.ts +2 -0
  70. package/dist/auth/pkce.spec.d.ts.map +1 -0
  71. package/dist/auth/pkce.spec.js +32 -0
  72. package/dist/auth/pkce.spec.js.map +1 -0
  73. package/dist/auth/project-token.d.ts +47 -0
  74. package/dist/auth/project-token.d.ts.map +1 -0
  75. package/dist/auth/project-token.js +134 -0
  76. package/dist/auth/project-token.js.map +1 -0
  77. package/dist/auth/project-token.spec.d.ts +2 -0
  78. package/dist/auth/project-token.spec.d.ts.map +1 -0
  79. package/dist/auth/project-token.spec.js +332 -0
  80. package/dist/auth/project-token.spec.js.map +1 -0
  81. package/dist/auth/refresh.d.ts +35 -0
  82. package/dist/auth/refresh.d.ts.map +1 -0
  83. package/dist/auth/refresh.js +149 -0
  84. package/dist/auth/refresh.js.map +1 -0
  85. package/dist/auth/refresh.spec.d.ts +2 -0
  86. package/dist/auth/refresh.spec.d.ts.map +1 -0
  87. package/dist/auth/refresh.spec.js +105 -0
  88. package/dist/auth/refresh.spec.js.map +1 -0
  89. package/dist/auth/token-store.d.ts +110 -0
  90. package/dist/auth/token-store.d.ts.map +1 -0
  91. package/dist/auth/token-store.js +188 -0
  92. package/dist/auth/token-store.js.map +1 -0
  93. package/dist/auth/token-store.spec.d.ts +2 -0
  94. package/dist/auth/token-store.spec.d.ts.map +1 -0
  95. package/dist/auth/token-store.spec.js +276 -0
  96. package/dist/auth/token-store.spec.js.map +1 -0
  97. package/dist/auth/types.d.ts +197 -0
  98. package/dist/auth/types.d.ts.map +1 -0
  99. package/dist/auth/types.js +6 -0
  100. package/dist/auth/types.js.map +1 -0
  101. package/dist/cli.d.ts +5 -0
  102. package/dist/cli.d.ts.map +1 -0
  103. package/dist/cli.js +108 -0
  104. package/dist/cli.js.map +1 -0
  105. package/dist/commands/__tests__/test-utils.d.ts +28 -0
  106. package/dist/commands/__tests__/test-utils.d.ts.map +1 -0
  107. package/dist/commands/__tests__/test-utils.js +34 -0
  108. package/dist/commands/__tests__/test-utils.js.map +1 -0
  109. package/dist/commands/deploy.d.ts +16 -0
  110. package/dist/commands/deploy.d.ts.map +1 -0
  111. package/dist/commands/deploy.js +297 -0
  112. package/dist/commands/deploy.js.map +1 -0
  113. package/dist/commands/deploy.spec.d.ts +2 -0
  114. package/dist/commands/deploy.spec.d.ts.map +1 -0
  115. package/dist/commands/deploy.spec.js +18 -0
  116. package/dist/commands/deploy.spec.js.map +1 -0
  117. package/dist/commands/init.d.ts +30 -0
  118. package/dist/commands/init.d.ts.map +1 -0
  119. package/dist/commands/init.js +410 -0
  120. package/dist/commands/init.js.map +1 -0
  121. package/dist/commands/init.spec.d.ts +2 -0
  122. package/dist/commands/init.spec.d.ts.map +1 -0
  123. package/dist/commands/init.spec.js +283 -0
  124. package/dist/commands/init.spec.js.map +1 -0
  125. package/dist/commands/list-tokens.d.ts +16 -0
  126. package/dist/commands/list-tokens.d.ts.map +1 -0
  127. package/dist/commands/list-tokens.js +44 -0
  128. package/dist/commands/list-tokens.js.map +1 -0
  129. package/dist/commands/login.d.ts +17 -0
  130. package/dist/commands/login.d.ts.map +1 -0
  131. package/dist/commands/login.js +69 -0
  132. package/dist/commands/login.js.map +1 -0
  133. package/dist/commands/logout.d.ts +16 -0
  134. package/dist/commands/logout.d.ts.map +1 -0
  135. package/dist/commands/logout.js +43 -0
  136. package/dist/commands/logout.js.map +1 -0
  137. package/dist/config/oauth.d.ts +19 -0
  138. package/dist/config/oauth.d.ts.map +1 -0
  139. package/dist/config/oauth.js +43 -0
  140. package/dist/config/oauth.js.map +1 -0
  141. package/dist/constants.d.ts +27 -0
  142. package/dist/constants.d.ts.map +1 -0
  143. package/dist/constants.js +27 -0
  144. package/dist/constants.js.map +1 -0
  145. package/dist/index.d.ts +5 -0
  146. package/dist/index.d.ts.map +1 -0
  147. package/dist/index.js +6 -0
  148. package/dist/index.js.map +1 -0
  149. package/dist/plugin/adapter.d.ts +5 -0
  150. package/dist/plugin/adapter.d.ts.map +1 -0
  151. package/dist/plugin/adapter.js +139 -0
  152. package/dist/plugin/adapter.js.map +1 -0
  153. package/dist/plugin/build-config.d.ts +37 -0
  154. package/dist/plugin/build-config.d.ts.map +1 -0
  155. package/dist/plugin/build-config.js +25 -0
  156. package/dist/plugin/build-config.js.map +1 -0
  157. package/dist/plugin/build-config.spec.d.ts +2 -0
  158. package/dist/plugin/build-config.spec.d.ts.map +1 -0
  159. package/dist/plugin/build-config.spec.js +72 -0
  160. package/dist/plugin/build-config.spec.js.map +1 -0
  161. package/dist/types/config.d.ts +45 -0
  162. package/dist/types/config.d.ts.map +1 -0
  163. package/dist/types/config.js +9 -0
  164. package/dist/types/config.js.map +1 -0
  165. package/dist/types.d.ts +60 -0
  166. package/dist/types.d.ts.map +1 -0
  167. package/dist/types.js +3 -0
  168. package/dist/types.js.map +1 -0
  169. package/dist/utils/asset-collection.d.ts +30 -0
  170. package/dist/utils/asset-collection.d.ts.map +1 -0
  171. package/dist/utils/asset-collection.js +117 -0
  172. package/dist/utils/asset-collection.js.map +1 -0
  173. package/dist/utils/asset-collection.spec.d.ts +2 -0
  174. package/dist/utils/asset-collection.spec.d.ts.map +1 -0
  175. package/dist/utils/asset-collection.spec.js +155 -0
  176. package/dist/utils/asset-collection.spec.js.map +1 -0
  177. package/dist/utils/build-detection.d.ts +32 -0
  178. package/dist/utils/build-detection.d.ts.map +1 -0
  179. package/dist/utils/build-detection.js +55 -0
  180. package/dist/utils/build-detection.js.map +1 -0
  181. package/dist/utils/build-detection.spec.d.ts +2 -0
  182. package/dist/utils/build-detection.spec.d.ts.map +1 -0
  183. package/dist/utils/build-detection.spec.js +110 -0
  184. package/dist/utils/build-detection.spec.js.map +1 -0
  185. package/dist/utils/config.d.ts +33 -0
  186. package/dist/utils/config.d.ts.map +1 -0
  187. package/dist/utils/config.js +78 -0
  188. package/dist/utils/config.js.map +1 -0
  189. package/dist/utils/config.spec.d.ts +2 -0
  190. package/dist/utils/config.spec.d.ts.map +1 -0
  191. package/dist/utils/config.spec.js +167 -0
  192. package/dist/utils/config.spec.js.map +1 -0
  193. package/dist/utils/download-template.d.ts +15 -0
  194. package/dist/utils/download-template.d.ts.map +1 -0
  195. package/dist/utils/download-template.js +74 -0
  196. package/dist/utils/download-template.js.map +1 -0
  197. package/dist/utils/download-template.spec.d.ts +2 -0
  198. package/dist/utils/download-template.spec.d.ts.map +1 -0
  199. package/dist/utils/download-template.spec.js +76 -0
  200. package/dist/utils/download-template.spec.js.map +1 -0
  201. package/dist/utils/env-management.d.ts +16 -0
  202. package/dist/utils/env-management.d.ts.map +1 -0
  203. package/dist/utils/env-management.js +98 -0
  204. package/dist/utils/env-management.js.map +1 -0
  205. package/dist/utils/env-management.spec.d.ts +2 -0
  206. package/dist/utils/env-management.spec.d.ts.map +1 -0
  207. package/dist/utils/env-management.spec.js +123 -0
  208. package/dist/utils/env-management.spec.js.map +1 -0
  209. package/dist/utils/format.d.ts +23 -0
  210. package/dist/utils/format.d.ts.map +1 -0
  211. package/dist/utils/format.js +49 -0
  212. package/dist/utils/format.js.map +1 -0
  213. package/dist/utils/formatter.d.ts +11 -0
  214. package/dist/utils/formatter.d.ts.map +1 -0
  215. package/dist/utils/formatter.js +47 -0
  216. package/dist/utils/formatter.js.map +1 -0
  217. package/dist/utils/git.d.ts +15 -0
  218. package/dist/utils/git.d.ts.map +1 -0
  219. package/dist/utils/git.js +92 -0
  220. package/dist/utils/git.js.map +1 -0
  221. package/dist/utils/git.spec.d.ts +2 -0
  222. package/dist/utils/git.spec.d.ts.map +1 -0
  223. package/dist/utils/git.spec.js +99 -0
  224. package/dist/utils/git.spec.js.map +1 -0
  225. package/dist/utils/is-debug.d.ts +6 -0
  226. package/dist/utils/is-debug.d.ts.map +1 -0
  227. package/dist/utils/is-debug.js +8 -0
  228. package/dist/utils/is-debug.js.map +1 -0
  229. package/dist/utils/lambda-config.d.ts +7 -0
  230. package/dist/utils/lambda-config.d.ts.map +1 -0
  231. package/dist/utils/lambda-config.js +144 -0
  232. package/dist/utils/lambda-config.js.map +1 -0
  233. package/dist/utils/lambda-config.spec.d.ts +2 -0
  234. package/dist/utils/lambda-config.spec.d.ts.map +1 -0
  235. package/dist/utils/lambda-config.spec.js +141 -0
  236. package/dist/utils/lambda-config.spec.js.map +1 -0
  237. package/dist/utils/log.d.ts +6 -0
  238. package/dist/utils/log.d.ts.map +1 -0
  239. package/dist/utils/log.js +22 -0
  240. package/dist/utils/log.js.map +1 -0
  241. package/dist/utils/messages.d.ts +10 -0
  242. package/dist/utils/messages.d.ts.map +1 -0
  243. package/dist/utils/messages.js +96 -0
  244. package/dist/utils/messages.js.map +1 -0
  245. package/dist/utils/package-manager.d.ts +12 -0
  246. package/dist/utils/package-manager.d.ts.map +1 -0
  247. package/dist/utils/package-manager.js +37 -0
  248. package/dist/utils/package-manager.js.map +1 -0
  249. package/dist/utils/payload-config-ast.d.ts +30 -0
  250. package/dist/utils/payload-config-ast.d.ts.map +1 -0
  251. package/dist/utils/payload-config-ast.js +259 -0
  252. package/dist/utils/payload-config-ast.js.map +1 -0
  253. package/dist/utils/payload-config-ast.spec.d.ts +2 -0
  254. package/dist/utils/payload-config-ast.spec.d.ts.map +1 -0
  255. package/dist/utils/payload-config-ast.spec.js +303 -0
  256. package/dist/utils/payload-config-ast.spec.js.map +1 -0
  257. package/dist/utils/payload-config-finder.d.ts +9 -0
  258. package/dist/utils/payload-config-finder.d.ts.map +1 -0
  259. package/dist/utils/payload-config-finder.js +26 -0
  260. package/dist/utils/payload-config-finder.js.map +1 -0
  261. package/dist/utils/payload-config-modifier.d.ts +18 -0
  262. package/dist/utils/payload-config-modifier.d.ts.map +1 -0
  263. package/dist/utils/payload-config-modifier.int.spec.d.ts +2 -0
  264. package/dist/utils/payload-config-modifier.int.spec.d.ts.map +1 -0
  265. package/dist/utils/payload-config-modifier.int.spec.js +116 -0
  266. package/dist/utils/payload-config-modifier.int.spec.js.map +1 -0
  267. package/dist/utils/payload-config-modifier.js +232 -0
  268. package/dist/utils/payload-config-modifier.js.map +1 -0
  269. package/dist/utils/payload-config-modifier.spec.d.ts +2 -0
  270. package/dist/utils/payload-config-modifier.spec.d.ts.map +1 -0
  271. package/dist/utils/payload-config-modifier.spec.js +162 -0
  272. package/dist/utils/payload-config-modifier.spec.js.map +1 -0
  273. package/dist/utils/payload-package-check.d.ts +15 -0
  274. package/dist/utils/payload-package-check.d.ts.map +1 -0
  275. package/dist/utils/payload-package-check.js +116 -0
  276. package/dist/utils/payload-package-check.js.map +1 -0
  277. package/dist/utils/payload-package-check.spec.d.ts +2 -0
  278. package/dist/utils/payload-package-check.spec.d.ts.map +1 -0
  279. package/dist/utils/payload-package-check.spec.js +148 -0
  280. package/dist/utils/payload-package-check.spec.js.map +1 -0
  281. package/dist/utils/project.d.ts +58 -0
  282. package/dist/utils/project.d.ts.map +1 -0
  283. package/dist/utils/project.js +252 -0
  284. package/dist/utils/project.js.map +1 -0
  285. package/dist/utils/project.spec.d.ts +2 -0
  286. package/dist/utils/project.spec.d.ts.map +1 -0
  287. package/dist/utils/project.spec.js +222 -0
  288. package/dist/utils/project.spec.js.map +1 -0
  289. package/dist/utils/s3-upload.d.ts +43 -0
  290. package/dist/utils/s3-upload.d.ts.map +1 -0
  291. package/dist/utils/s3-upload.js +128 -0
  292. package/dist/utils/s3-upload.js.map +1 -0
  293. package/dist/utils/s3-upload.spec.d.ts +2 -0
  294. package/dist/utils/s3-upload.spec.d.ts.map +1 -0
  295. package/dist/utils/s3-upload.spec.js +140 -0
  296. package/dist/utils/s3-upload.spec.js.map +1 -0
  297. package/dist/utils/token-display.d.ts +14 -0
  298. package/dist/utils/token-display.d.ts.map +1 -0
  299. package/dist/utils/token-display.js +62 -0
  300. package/dist/utils/token-display.js.map +1 -0
  301. package/dist/utils/typescript-validator.d.ts +11 -0
  302. package/dist/utils/typescript-validator.d.ts.map +1 -0
  303. package/dist/utils/typescript-validator.js +58 -0
  304. package/dist/utils/typescript-validator.js.map +1 -0
  305. package/package.json +69 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/payload-config-modifier.spec.ts"],"sourcesContent":["import { beforeEach, describe, expect, it, vi } from 'vitest'\n\nimport { displayManualInstructions, ensurePayloadFigmaConfig } from './payload-config-modifier.js'\n\nvi.mock('./payload-config-finder.js')\nvi.mock('./payload-package-check.js')\nvi.mock('./payload-config-ast.js')\nvi.mock('./typescript-validator.js')\nvi.mock('./formatter.js')\n\ndescribe('payload-config-modifier', () => {\n beforeEach(() => {\n vi.clearAllMocks()\n })\n\n describe('ensurePayloadFigmaConfig', () => {\n it('should return error when config not found', async () => {\n const { findPayloadConfig } = await import('./payload-config-finder.js')\n vi.mocked(findPayloadConfig).mockResolvedValue(null)\n\n const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm')\n\n expect(result.success).toBe(false)\n expect(result.error).toContain('payload.config.ts not found')\n })\n\n it('should install package if missing', async () => {\n const { findPayloadConfig } = await import('./payload-config-finder.js')\n const { checkPackageInstalled, installPackage } = await import('./payload-package-check.js')\n\n vi.mocked(findPayloadConfig).mockResolvedValue('/test/project/payload.config.ts')\n vi.mocked(checkPackageInstalled).mockResolvedValue(false)\n vi.mocked(installPackage).mockResolvedValue()\n\n // Mock ts-morph to avoid file system operations\n const { Project } = await import('ts-morph')\n vi.spyOn(Project.prototype, 'addSourceFileAtPath').mockReturnValue({\n getFullText: vi.fn().mockReturnValue(''),\n } as any)\n\n const { detectRequiredChanges } = await import('./payload-config-ast.js')\n vi.mocked(detectRequiredChanges).mockReturnValue({\n hasAlias: false,\n hasOtherPayloadImports: false,\n needsImportChange: false,\n })\n\n const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm')\n\n expect(installPackage).toHaveBeenCalledWith('/test/project', '@payloadcms/figma', 'pnpm')\n expect(result.changes).toContain('Installed @payloadcms/figma')\n })\n\n it('should apply modifications when needed', async () => {\n const { findPayloadConfig } = await import('./payload-config-finder.js')\n const { checkPackageInstalled } = await import('./payload-package-check.js')\n const { applyModifications, detectRequiredChanges } = await import('./payload-config-ast.js')\n\n vi.mocked(findPayloadConfig).mockResolvedValue('/test/project/payload.config.ts')\n vi.mocked(checkPackageInstalled).mockResolvedValue(true)\n\n // Mock source file\n const mockSourceFile = {\n getFullText: vi.fn().mockReturnValue(''),\n save: vi.fn().mockResolvedValue(undefined),\n }\n\n const { Project } = await import('ts-morph')\n vi.spyOn(Project.prototype, 'addSourceFileAtPath').mockReturnValue(mockSourceFile as any)\n\n vi.mocked(detectRequiredChanges).mockReturnValue({\n dbProperty: {\n adapter: 'mongooseAdapter',\n importSource: '@payloadcms/db-mongodb',\n },\n hasAlias: false,\n hasOtherPayloadImports: false,\n needsImportChange: true,\n })\n\n vi.mocked(applyModifications).mockReturnValue({\n changes: ['Removed db property', 'Changed buildConfig import to @payloadcms/figma'],\n modified: true,\n })\n\n const { runTypeScriptCheck } = await import('./typescript-validator.js')\n vi.mocked(runTypeScriptCheck).mockResolvedValue({ errors: [], success: true })\n\n const { formatFile } = await import('./formatter.js')\n vi.mocked(formatFile).mockResolvedValue({ success: true })\n\n const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm')\n\n expect(result.success).toBe(true)\n expect(result.modified).toBe(true)\n expect(result.changes.length).toBeGreaterThan(0)\n expect(mockSourceFile.save).toHaveBeenCalled()\n })\n\n it('should return error when buildConfig has alias', async () => {\n const { findPayloadConfig } = await import('./payload-config-finder.js')\n const { checkPackageInstalled } = await import('./payload-package-check.js')\n const { detectRequiredChanges } = await import('./payload-config-ast.js')\n\n vi.mocked(findPayloadConfig).mockResolvedValue('/test/project/payload.config.ts')\n vi.mocked(checkPackageInstalled).mockResolvedValue(true)\n\n const mockSourceFile = {\n getFullText: vi.fn().mockReturnValue(''),\n }\n\n const { Project } = await import('ts-morph')\n vi.spyOn(Project.prototype, 'addSourceFileAtPath').mockReturnValue(mockSourceFile as any)\n\n vi.mocked(detectRequiredChanges).mockReturnValue({\n hasAlias: true,\n hasOtherPayloadImports: false,\n needsImportChange: true,\n })\n\n const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm')\n\n expect(result.success).toBe(false)\n expect(result.error).toContain('Config uses import alias')\n })\n\n it('should uninstall orphaned packages', async () => {\n const { findPayloadConfig } = await import('./payload-config-finder.js')\n const { checkPackageInstalled, uninstallPackage } = await import('./payload-package-check.js')\n const { applyModifications, detectRequiredChanges } = await import('./payload-config-ast.js')\n\n vi.mocked(findPayloadConfig).mockResolvedValue('/test/project/payload.config.ts')\n vi.mocked(checkPackageInstalled).mockResolvedValue(true)\n\n const mockSourceFile = {\n getFullText: vi.fn().mockReturnValue(''),\n save: vi.fn().mockResolvedValue(undefined),\n }\n\n const { Project } = await import('ts-morph')\n vi.spyOn(Project.prototype, 'addSourceFileAtPath').mockReturnValue(mockSourceFile as any)\n\n vi.mocked(detectRequiredChanges).mockReturnValue({\n dbProperty: {\n adapter: 'mongooseAdapter',\n importSource: '@payloadcms/db-mongodb',\n },\n editorProperty: {\n importSource: '@payloadcms/richtext-lexical',\n isDefault: true,\n },\n hasAlias: false,\n hasOtherPayloadImports: false,\n needsImportChange: false,\n })\n\n vi.mocked(applyModifications).mockReturnValue({\n changes: ['Removed db property', 'Removed default editor property'],\n modified: true,\n })\n\n vi.mocked(uninstallPackage).mockResolvedValue()\n\n const { runTypeScriptCheck } = await import('./typescript-validator.js')\n vi.mocked(runTypeScriptCheck).mockResolvedValue({ errors: [], success: true })\n\n const { formatFile } = await import('./formatter.js')\n vi.mocked(formatFile).mockResolvedValue({ success: true })\n\n const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm')\n\n expect(uninstallPackage).toHaveBeenCalledWith(\n '/test/project',\n '@payloadcms/db-mongodb',\n 'pnpm',\n )\n expect(uninstallPackage).toHaveBeenCalledWith(\n '/test/project',\n '@payloadcms/richtext-lexical',\n 'pnpm',\n )\n expect(result.changes).toContain('Uninstalled @payloadcms/db-mongodb')\n expect(result.changes).toContain('Uninstalled @payloadcms/richtext-lexical')\n })\n })\n\n describe('displayManualInstructions', () => {\n it('should format manual instructions correctly', () => {\n // This is a formatting function, just verify it doesn't throw\n expect(() => displayManualInstructions('Test reason')).not.toThrow()\n })\n })\n})\n"],"names":["beforeEach","describe","expect","it","vi","displayManualInstructions","ensurePayloadFigmaConfig","mock","clearAllMocks","findPayloadConfig","mocked","mockResolvedValue","result","success","toBe","error","toContain","checkPackageInstalled","installPackage","Project","spyOn","prototype","mockReturnValue","getFullText","fn","detectRequiredChanges","hasAlias","hasOtherPayloadImports","needsImportChange","toHaveBeenCalledWith","changes","applyModifications","mockSourceFile","save","undefined","dbProperty","adapter","importSource","modified","runTypeScriptCheck","errors","formatFile","length","toBeGreaterThan","toHaveBeenCalled","uninstallPackage","editorProperty","isDefault","not","toThrow"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { PackageManager } from './package-manager.js';
2
+ /**
3
+ * Check if a package is installed in dependencies (not devDependencies)
4
+ */
5
+ export declare function checkPackageInstalled(projectPath: string, packageName: string): Promise<boolean>;
6
+ /**
7
+ * Install a package as a production dependency
8
+ */
9
+ export declare function installPackage(projectPath: string, packageName: string, packageManager: PackageManager): Promise<void>;
10
+ /**
11
+ * Uninstall a package
12
+ * Does not throw on failure - orphaned package is better than broken config
13
+ */
14
+ export declare function uninstallPackage(projectPath: string, packageName: string, packageManager: PackageManager): Promise<void>;
15
+ //# sourceMappingURL=payload-package-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-package-check.d.ts","sourceRoot":"","sources":["../../src/utils/payload-package-check.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAK1D;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAqBlB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,IAAI,CAAC,CAqDf;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,IAAI,CAAC,CAgCf"}
@@ -0,0 +1,116 @@
1
+ import { spawn } from 'child_process';
2
+ import fs from 'fs/promises';
3
+ import path from 'path';
4
+ import { isDebug } from './is-debug.js';
5
+ import * as log from './log.js';
6
+ /**
7
+ * Check if a package is installed in dependencies (not devDependencies)
8
+ */ export async function checkPackageInstalled(projectPath, packageName) {
9
+ try {
10
+ const pkgJsonPath = path.join(projectPath, 'package.json');
11
+ if (isDebug()) {
12
+ log.debug(`Checking if ${packageName} is installed in: ${pkgJsonPath}`);
13
+ }
14
+ const pkgJsonContent = await fs.readFile(pkgJsonPath, 'utf-8');
15
+ const pkgJson = JSON.parse(pkgJsonContent);
16
+ const isInstalled = !!pkgJson.dependencies?.[packageName];
17
+ if (isDebug()) {
18
+ log.debug(`${packageName} is ${isInstalled ? 'installed' : 'not installed'}`);
19
+ }
20
+ return isInstalled;
21
+ } catch (error) {
22
+ if (isDebug()) {
23
+ log.debug(`Error checking package installation: ${error instanceof Error ? error.message : 'Unknown error'}`);
24
+ }
25
+ return false;
26
+ }
27
+ }
28
+ /**
29
+ * Install a package as a production dependency
30
+ */ export async function installPackage(projectPath, packageName, packageManager) {
31
+ return new Promise((resolve, reject)=>{
32
+ const command = packageManager;
33
+ const args = [
34
+ 'add',
35
+ packageName
36
+ ];
37
+ // npm uses 'install' instead of 'add'
38
+ if (packageManager === 'npm') {
39
+ args[0] = 'install';
40
+ }
41
+ if (isDebug()) {
42
+ log.debug(`Running: ${command} ${args.join(' ')} in ${projectPath}`);
43
+ }
44
+ let stderr = '';
45
+ const child = spawn(command, args, {
46
+ cwd: projectPath,
47
+ shell: true,
48
+ stdio: 'pipe'
49
+ });
50
+ // Capture stderr for debug logging
51
+ if (child.stderr) {
52
+ child.stderr.on('data', (data)=>{
53
+ stderr += data.toString();
54
+ });
55
+ }
56
+ child.on('error', (error)=>{
57
+ if (isDebug()) {
58
+ log.debug(`Spawn error for ${command}: ${error.message}`);
59
+ }
60
+ reject(new Error(`Failed to spawn ${command}: ${error.message}`));
61
+ });
62
+ child.on('close', (code)=>{
63
+ if (code === 0) {
64
+ if (isDebug()) {
65
+ log.debug(`Successfully installed ${packageName}`);
66
+ }
67
+ resolve();
68
+ } else {
69
+ if (isDebug()) {
70
+ log.debug(`Failed to install ${packageName} (exit code: ${code})`);
71
+ if (stderr) {
72
+ log.debug(`stderr: ${stderr}`);
73
+ }
74
+ }
75
+ reject(new Error(`Failed to install ${packageName}`));
76
+ }
77
+ });
78
+ });
79
+ }
80
+ /**
81
+ * Uninstall a package
82
+ * Does not throw on failure - orphaned package is better than broken config
83
+ */ export async function uninstallPackage(projectPath, packageName, packageManager) {
84
+ return new Promise((resolve)=>{
85
+ const command = packageManager;
86
+ const args = [
87
+ 'remove',
88
+ packageName
89
+ ];
90
+ // npm uses 'uninstall' instead of 'remove'
91
+ if (packageManager === 'npm') {
92
+ args[0] = 'uninstall';
93
+ }
94
+ if (isDebug()) {
95
+ log.debug(`Running: ${command} ${args.join(' ')} in ${projectPath}`);
96
+ }
97
+ const child = spawn(command, args, {
98
+ cwd: projectPath,
99
+ shell: true,
100
+ stdio: 'pipe'
101
+ });
102
+ child.on('close', (code)=>{
103
+ if (isDebug()) {
104
+ if (code === 0) {
105
+ log.debug(`Successfully uninstalled ${packageName}`);
106
+ } else {
107
+ log.debug(`Failed to uninstall ${packageName} (exit code: ${code}), continuing anyway`);
108
+ }
109
+ }
110
+ // Always resolve, even on error
111
+ resolve();
112
+ });
113
+ });
114
+ }
115
+
116
+ //# sourceMappingURL=payload-package-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/payload-package-check.ts"],"sourcesContent":["import { spawn } from 'child_process'\nimport fs from 'fs/promises'\nimport path from 'path'\n\nimport type { PackageManager } from './package-manager.js'\n\nimport { isDebug } from './is-debug.js'\nimport * as log from './log.js'\n\n/**\n * Check if a package is installed in dependencies (not devDependencies)\n */\nexport async function checkPackageInstalled(\n projectPath: string,\n packageName: string,\n): Promise<boolean> {\n try {\n const pkgJsonPath = path.join(projectPath, 'package.json')\n if (isDebug()) {\n log.debug(`Checking if ${packageName} is installed in: ${pkgJsonPath}`)\n }\n const pkgJsonContent = await fs.readFile(pkgJsonPath, 'utf-8')\n const pkgJson = JSON.parse(pkgJsonContent)\n const isInstalled = !!pkgJson.dependencies?.[packageName]\n if (isDebug()) {\n log.debug(`${packageName} is ${isInstalled ? 'installed' : 'not installed'}`)\n }\n return isInstalled\n } catch (error) {\n if (isDebug()) {\n log.debug(\n `Error checking package installation: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n return false\n }\n}\n\n/**\n * Install a package as a production dependency\n */\nexport async function installPackage(\n projectPath: string,\n packageName: string,\n packageManager: PackageManager,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const command = packageManager\n const args = ['add', packageName]\n\n // npm uses 'install' instead of 'add'\n if (packageManager === 'npm') {\n args[0] = 'install'\n }\n\n if (isDebug()) {\n log.debug(`Running: ${command} ${args.join(' ')} in ${projectPath}`)\n }\n\n let stderr = ''\n\n const child = spawn(command, args, {\n cwd: projectPath,\n shell: true,\n stdio: 'pipe',\n })\n\n // Capture stderr for debug logging\n if (child.stderr) {\n child.stderr.on('data', (data) => {\n stderr += data.toString()\n })\n }\n\n child.on('error', (error) => {\n if (isDebug()) {\n log.debug(`Spawn error for ${command}: ${error.message}`)\n }\n reject(new Error(`Failed to spawn ${command}: ${error.message}`))\n })\n\n child.on('close', (code) => {\n if (code === 0) {\n if (isDebug()) {\n log.debug(`Successfully installed ${packageName}`)\n }\n resolve()\n } else {\n if (isDebug()) {\n log.debug(`Failed to install ${packageName} (exit code: ${code})`)\n if (stderr) {\n log.debug(`stderr: ${stderr}`)\n }\n }\n reject(new Error(`Failed to install ${packageName}`))\n }\n })\n })\n}\n\n/**\n * Uninstall a package\n * Does not throw on failure - orphaned package is better than broken config\n */\nexport async function uninstallPackage(\n projectPath: string,\n packageName: string,\n packageManager: PackageManager,\n): Promise<void> {\n return new Promise((resolve) => {\n const command = packageManager\n const args = ['remove', packageName]\n\n // npm uses 'uninstall' instead of 'remove'\n if (packageManager === 'npm') {\n args[0] = 'uninstall'\n }\n\n if (isDebug()) {\n log.debug(`Running: ${command} ${args.join(' ')} in ${projectPath}`)\n }\n\n const child = spawn(command, args, {\n cwd: projectPath,\n shell: true,\n stdio: 'pipe',\n })\n\n child.on('close', (code) => {\n if (isDebug()) {\n if (code === 0) {\n log.debug(`Successfully uninstalled ${packageName}`)\n } else {\n log.debug(`Failed to uninstall ${packageName} (exit code: ${code}), continuing anyway`)\n }\n }\n // Always resolve, even on error\n resolve()\n })\n })\n}\n"],"names":["spawn","fs","path","isDebug","log","checkPackageInstalled","projectPath","packageName","pkgJsonPath","join","debug","pkgJsonContent","readFile","pkgJson","JSON","parse","isInstalled","dependencies","error","Error","message","installPackage","packageManager","Promise","resolve","reject","command","args","stderr","child","cwd","shell","stdio","on","data","toString","code","uninstallPackage"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=payload-package-check.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-package-check.spec.d.ts","sourceRoot":"","sources":["../../src/utils/payload-package-check.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,148 @@
1
+ import fs from 'fs/promises';
2
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
3
+ import { checkPackageInstalled, installPackage, uninstallPackage } from './payload-package-check.js';
4
+ vi.mock('fs/promises');
5
+ vi.mock('child_process', ()=>({
6
+ spawn: vi.fn()
7
+ }));
8
+ describe('payload-package-check', ()=>{
9
+ beforeEach(()=>{
10
+ vi.clearAllMocks();
11
+ });
12
+ describe('checkPackageInstalled', ()=>{
13
+ it('should return true when package is in dependencies', async ()=>{
14
+ const mockPackageJson = {
15
+ dependencies: {
16
+ '@payloadcms/figma': '1.0.0'
17
+ }
18
+ };
19
+ vi.mocked(fs.readFile).mockResolvedValue(JSON.stringify(mockPackageJson));
20
+ const result = await checkPackageInstalled('/test/project', '@payloadcms/figma');
21
+ expect(result).toBe(true);
22
+ });
23
+ it('should return false when package is in devDependencies', async ()=>{
24
+ const mockPackageJson = {
25
+ devDependencies: {
26
+ '@payloadcms/figma': '1.0.0'
27
+ }
28
+ };
29
+ vi.mocked(fs.readFile).mockResolvedValue(JSON.stringify(mockPackageJson));
30
+ const result = await checkPackageInstalled('/test/project', '@payloadcms/figma');
31
+ expect(result).toBe(false);
32
+ });
33
+ it('should return false when package is not installed', async ()=>{
34
+ const mockPackageJson = {
35
+ dependencies: {}
36
+ };
37
+ vi.mocked(fs.readFile).mockResolvedValue(JSON.stringify(mockPackageJson));
38
+ const result = await checkPackageInstalled('/test/project', '@payloadcms/figma');
39
+ expect(result).toBe(false);
40
+ });
41
+ it('should handle missing package.json', async ()=>{
42
+ vi.mocked(fs.readFile).mockRejectedValue(new Error('ENOENT'));
43
+ const result = await checkPackageInstalled('/test/project', '@payloadcms/figma');
44
+ expect(result).toBe(false);
45
+ });
46
+ });
47
+ describe('installPackage', ()=>{
48
+ it('should call pnpm add for pnpm package manager', async ()=>{
49
+ const { spawn } = await import('child_process');
50
+ const mockSpawn = vi.mocked(spawn);
51
+ mockSpawn.mockReturnValue({
52
+ on: vi.fn((event, callback)=>{
53
+ if (event === 'close') {
54
+ callback(0);
55
+ }
56
+ if (event === 'error') {
57
+ // Error handler registered but not called in success case
58
+ }
59
+ return {};
60
+ }),
61
+ stderr: {
62
+ on: vi.fn()
63
+ },
64
+ stdout: {
65
+ on: vi.fn()
66
+ }
67
+ });
68
+ await installPackage('/test/project', '@payloadcms/figma', 'pnpm');
69
+ expect(mockSpawn).toHaveBeenCalledWith('pnpm', [
70
+ 'add',
71
+ '@payloadcms/figma'
72
+ ], expect.objectContaining({
73
+ cwd: '/test/project'
74
+ }));
75
+ });
76
+ it('should throw error when installation fails', async ()=>{
77
+ const { spawn } = await import('child_process');
78
+ const mockSpawn = vi.mocked(spawn);
79
+ mockSpawn.mockReturnValue({
80
+ on: vi.fn((event, callback)=>{
81
+ if (event === 'close') {
82
+ callback(1);
83
+ }
84
+ if (event === 'error') {
85
+ // Error handler registered but not called in this test
86
+ }
87
+ return {};
88
+ }),
89
+ stderr: {
90
+ on: vi.fn()
91
+ },
92
+ stdout: {
93
+ on: vi.fn()
94
+ }
95
+ });
96
+ await expect(installPackage('/test/project', '@payloadcms/figma', 'pnpm')).rejects.toThrow('Failed to install @payloadcms/figma');
97
+ });
98
+ });
99
+ describe('uninstallPackage', ()=>{
100
+ it('should call pnpm remove for pnpm package manager', async ()=>{
101
+ const { spawn } = await import('child_process');
102
+ const mockSpawn = vi.mocked(spawn);
103
+ mockSpawn.mockReturnValue({
104
+ on: vi.fn((event, callback)=>{
105
+ if (event === 'close') {
106
+ callback(0);
107
+ }
108
+ return {};
109
+ }),
110
+ stderr: {
111
+ on: vi.fn()
112
+ },
113
+ stdout: {
114
+ on: vi.fn()
115
+ }
116
+ });
117
+ await uninstallPackage('/test/project', '@payloadcms/db-postgres', 'pnpm');
118
+ expect(mockSpawn).toHaveBeenCalledWith('pnpm', [
119
+ 'remove',
120
+ '@payloadcms/db-postgres'
121
+ ], expect.objectContaining({
122
+ cwd: '/test/project'
123
+ }));
124
+ });
125
+ it('should not throw error when uninstallation fails', async ()=>{
126
+ const { spawn } = await import('child_process');
127
+ const mockSpawn = vi.mocked(spawn);
128
+ mockSpawn.mockReturnValue({
129
+ on: vi.fn((event, callback)=>{
130
+ if (event === 'close') {
131
+ callback(1);
132
+ }
133
+ return {};
134
+ }),
135
+ stderr: {
136
+ on: vi.fn()
137
+ },
138
+ stdout: {
139
+ on: vi.fn()
140
+ }
141
+ });
142
+ // Should not throw - orphaned package is better than broken config
143
+ await expect(uninstallPackage('/test/project', '@payloadcms/db-postgres', 'pnpm')).resolves.not.toThrow();
144
+ });
145
+ });
146
+ });
147
+
148
+ //# sourceMappingURL=payload-package-check.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/payload-package-check.spec.ts"],"sourcesContent":["import fs from 'fs/promises'\nimport { beforeEach, describe, expect, it, vi } from 'vitest'\n\nimport type { PackageManager } from './package-manager.js'\n\nimport { checkPackageInstalled, installPackage, uninstallPackage } from './payload-package-check.js'\n\nvi.mock('fs/promises')\nvi.mock('child_process', () => ({\n spawn: vi.fn(),\n}))\n\ndescribe('payload-package-check', () => {\n beforeEach(() => {\n vi.clearAllMocks()\n })\n\n describe('checkPackageInstalled', () => {\n it('should return true when package is in dependencies', async () => {\n const mockPackageJson = {\n dependencies: {\n '@payloadcms/figma': '1.0.0',\n },\n }\n\n vi.mocked(fs.readFile).mockResolvedValue(JSON.stringify(mockPackageJson))\n\n const result = await checkPackageInstalled('/test/project', '@payloadcms/figma')\n\n expect(result).toBe(true)\n })\n\n it('should return false when package is in devDependencies', async () => {\n const mockPackageJson = {\n devDependencies: {\n '@payloadcms/figma': '1.0.0',\n },\n }\n\n vi.mocked(fs.readFile).mockResolvedValue(JSON.stringify(mockPackageJson))\n\n const result = await checkPackageInstalled('/test/project', '@payloadcms/figma')\n\n expect(result).toBe(false)\n })\n\n it('should return false when package is not installed', async () => {\n const mockPackageJson = {\n dependencies: {},\n }\n\n vi.mocked(fs.readFile).mockResolvedValue(JSON.stringify(mockPackageJson))\n\n const result = await checkPackageInstalled('/test/project', '@payloadcms/figma')\n\n expect(result).toBe(false)\n })\n\n it('should handle missing package.json', async () => {\n vi.mocked(fs.readFile).mockRejectedValue(new Error('ENOENT'))\n\n const result = await checkPackageInstalled('/test/project', '@payloadcms/figma')\n\n expect(result).toBe(false)\n })\n })\n\n describe('installPackage', () => {\n it('should call pnpm add for pnpm package manager', async () => {\n const { spawn } = await import('child_process')\n const mockSpawn = vi.mocked(spawn)\n\n mockSpawn.mockReturnValue({\n on: vi.fn((event, callback) => {\n if (event === 'close') {\n callback(0)\n }\n if (event === 'error') {\n // Error handler registered but not called in success case\n }\n return {} as any\n }),\n stderr: { on: vi.fn() },\n stdout: { on: vi.fn() },\n } as any)\n\n await installPackage('/test/project', '@payloadcms/figma', 'pnpm')\n\n expect(mockSpawn).toHaveBeenCalledWith(\n 'pnpm',\n ['add', '@payloadcms/figma'],\n expect.objectContaining({ cwd: '/test/project' }),\n )\n })\n\n it('should throw error when installation fails', async () => {\n const { spawn } = await import('child_process')\n const mockSpawn = vi.mocked(spawn)\n\n mockSpawn.mockReturnValue({\n on: vi.fn((event, callback) => {\n if (event === 'close') {\n callback(1)\n }\n if (event === 'error') {\n // Error handler registered but not called in this test\n }\n return {} as any\n }),\n stderr: { on: vi.fn() },\n stdout: { on: vi.fn() },\n } as any)\n\n await expect(installPackage('/test/project', '@payloadcms/figma', 'pnpm')).rejects.toThrow(\n 'Failed to install @payloadcms/figma',\n )\n })\n })\n\n describe('uninstallPackage', () => {\n it('should call pnpm remove for pnpm package manager', async () => {\n const { spawn } = await import('child_process')\n const mockSpawn = vi.mocked(spawn)\n\n mockSpawn.mockReturnValue({\n on: vi.fn((event, callback) => {\n if (event === 'close') {\n callback(0)\n }\n return {} as any\n }),\n stderr: { on: vi.fn() },\n stdout: { on: vi.fn() },\n } as any)\n\n await uninstallPackage('/test/project', '@payloadcms/db-postgres', 'pnpm')\n\n expect(mockSpawn).toHaveBeenCalledWith(\n 'pnpm',\n ['remove', '@payloadcms/db-postgres'],\n expect.objectContaining({ cwd: '/test/project' }),\n )\n })\n\n it('should not throw error when uninstallation fails', async () => {\n const { spawn } = await import('child_process')\n const mockSpawn = vi.mocked(spawn)\n\n mockSpawn.mockReturnValue({\n on: vi.fn((event, callback) => {\n if (event === 'close') {\n callback(1)\n }\n return {} as any\n }),\n stderr: { on: vi.fn() },\n stdout: { on: vi.fn() },\n } as any)\n\n // Should not throw - orphaned package is better than broken config\n await expect(\n uninstallPackage('/test/project', '@payloadcms/db-postgres', 'pnpm'),\n ).resolves.not.toThrow()\n })\n })\n})\n"],"names":["fs","beforeEach","describe","expect","it","vi","checkPackageInstalled","installPackage","uninstallPackage","mock","spawn","fn","clearAllMocks","mockPackageJson","dependencies","mocked","readFile","mockResolvedValue","JSON","stringify","result","toBe","devDependencies","mockRejectedValue","Error","mockSpawn","mockReturnValue","on","event","callback","stderr","stdout","toHaveBeenCalledWith","objectContaining","cwd","rejects","toThrow","resolves","not"],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Project detection and scaffolding utilities
3
+ */
4
+ import type { ProjectInfo } from '../types/config.js';
5
+ /**
6
+ * Detect if current directory has a Payload project
7
+ *
8
+ * @param projectPath - Path to check (defaults to cwd)
9
+ * @returns Project information
10
+ */
11
+ export declare function detectPayloadProject(projectPath?: string): Promise<ProjectInfo>;
12
+ /**
13
+ * Validate Payload version (must be 3.x)
14
+ *
15
+ * @param version - Version string from package.json
16
+ * @returns True if version is valid
17
+ */
18
+ export declare function validatePayloadVersion(version: string): boolean;
19
+ /**
20
+ * Scaffold a new Payload project from GitHub template
21
+ *
22
+ * @param projectPath - Path where to create the project
23
+ * @param projectName - Name for the project
24
+ */
25
+ export declare function scaffoldProject(projectPath: string, projectName: string): Promise<void>;
26
+ /**
27
+ * Initialize git repository after all setup is complete
28
+ *
29
+ * This should be called AFTER installDependencies so that lock files are included
30
+ *
31
+ * @param projectPath - Path to project directory
32
+ */
33
+ export declare function initializeGitRepo(projectPath: string): void;
34
+ /**
35
+ * Install dependencies using the detected package manager
36
+ *
37
+ * @param projectPath - Path to project
38
+ * @param packageManager - Package manager to use
39
+ * @returns Promise that resolves when installation completes
40
+ */
41
+ export declare function installDependencies(projectPath: string, packageManager?: 'npm' | 'pnpm' | 'yarn'): Promise<void>;
42
+ /**
43
+ * Check if required dependencies are installed
44
+ *
45
+ * @param projectPath - Path to project
46
+ * @returns True if all required dependencies exist
47
+ */
48
+ export declare function hasRequiredDependencies(projectPath: string): Promise<boolean>;
49
+ /**
50
+ * Check if current directory is a project directory
51
+ *
52
+ * A project directory has package.json OR figma.config.json
53
+ *
54
+ * @param projectPath - Path to check (defaults to cwd)
55
+ * @returns True if in project directory
56
+ */
57
+ export declare function isInProjectDirectory(projectPath?: string): Promise<boolean>;
58
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAQrD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,WAAW,CAAC,CAwCtB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAS/D;AAiED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C7F;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAE3D;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,cAAc,GAAE,KAAK,GAAG,MAAM,GAAG,MAAc,GAC9C,OAAO,CAAC,IAAI,CAAC,CAsCf;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAenF;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,GAAE,MAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CAkBhG"}