@payloadcms/figma 0.0.1-alpha.1 → 0.0.1-alpha.11

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 (316) hide show
  1. package/dist/api/control-plane.d.ts.map +1 -1
  2. package/dist/api/control-plane.js +11 -16
  3. package/dist/api/control-plane.js.map +1 -1
  4. package/dist/api/figma-api.js +3 -3
  5. package/dist/api/figma-api.js.map +1 -1
  6. package/dist/auth/jwt-validator.js.map +1 -1
  7. package/dist/auth/oauth-flow.d.ts.map +1 -1
  8. package/dist/auth/oauth-flow.js +3 -6
  9. package/dist/auth/oauth-flow.js.map +1 -1
  10. package/dist/auth/project-token.d.ts.map +1 -1
  11. package/dist/auth/project-token.js +1 -4
  12. package/dist/auth/project-token.js.map +1 -1
  13. package/dist/auth/refresh.d.ts.map +1 -1
  14. package/dist/auth/refresh.js +19 -28
  15. package/dist/auth/refresh.js.map +1 -1
  16. package/dist/auth/types.d.ts +1 -1
  17. package/dist/auth/types.d.ts.map +1 -1
  18. package/dist/auth/types.js.map +1 -1
  19. package/dist/cli.js +1 -3
  20. package/dist/cli.js.map +1 -1
  21. package/dist/commands/deploy.d.ts.map +1 -1
  22. package/dist/commands/deploy.js +17 -10
  23. package/dist/commands/deploy.js.map +1 -1
  24. package/dist/commands/init.d.ts +4 -0
  25. package/dist/commands/init.d.ts.map +1 -1
  26. package/dist/commands/init.js +21 -85
  27. package/dist/commands/init.js.map +1 -1
  28. package/dist/commands/list-tokens.d.ts +1 -1
  29. package/dist/commands/list-tokens.d.ts.map +1 -1
  30. package/dist/commands/list-tokens.js +6 -5
  31. package/dist/commands/list-tokens.js.map +1 -1
  32. package/dist/commands/login.d.ts +2 -11
  33. package/dist/commands/login.d.ts.map +1 -1
  34. package/dist/commands/login.js +4 -7
  35. package/dist/commands/login.js.map +1 -1
  36. package/dist/commands/logout.d.ts +1 -1
  37. package/dist/commands/logout.js +1 -1
  38. package/dist/commands/logout.js.map +1 -1
  39. package/dist/db-adapter.d.ts +17 -0
  40. package/dist/db-adapter.d.ts.map +1 -0
  41. package/dist/db-adapter.js +757 -0
  42. package/dist/db-adapter.js.map +1 -0
  43. package/dist/endpoints/health.d.ts +3 -0
  44. package/dist/endpoints/health.d.ts.map +1 -0
  45. package/dist/endpoints/health.js +11 -0
  46. package/dist/endpoints/health.js.map +1 -0
  47. package/dist/exports/client.d.ts +3 -0
  48. package/dist/exports/client.d.ts.map +1 -0
  49. package/dist/exports/client.js +4 -0
  50. package/dist/exports/client.js.map +1 -0
  51. package/dist/oauth/components/LoginButton/index.d.ts +9 -0
  52. package/dist/oauth/components/LoginButton/index.d.ts.map +1 -0
  53. package/dist/oauth/components/LoginButton/index.js +52 -0
  54. package/dist/oauth/components/LoginButton/index.js.map +1 -0
  55. package/dist/oauth/components/LoginButton/index.scss +10 -0
  56. package/dist/oauth/components/LogoutButton/index.d.ts +7 -0
  57. package/dist/oauth/components/LogoutButton/index.d.ts.map +1 -0
  58. package/dist/oauth/components/LogoutButton/index.js +67 -0
  59. package/dist/oauth/components/LogoutButton/index.js.map +1 -0
  60. package/dist/oauth/components/LogoutButton/index.scss +10 -0
  61. package/dist/oauth/defaults.d.ts +10 -0
  62. package/dist/oauth/defaults.d.ts.map +1 -0
  63. package/dist/oauth/defaults.js +91 -0
  64. package/dist/oauth/defaults.js.map +1 -0
  65. package/dist/oauth/endpoints/getLoginEndpoint.d.ts +13 -0
  66. package/dist/oauth/endpoints/getLoginEndpoint.d.ts.map +1 -0
  67. package/dist/oauth/endpoints/getLoginEndpoint.js +237 -0
  68. package/dist/oauth/endpoints/getLoginEndpoint.js.map +1 -0
  69. package/dist/oauth/endpoints/getLogoutEndpoint.d.ts +12 -0
  70. package/dist/oauth/endpoints/getLogoutEndpoint.d.ts.map +1 -0
  71. package/dist/oauth/endpoints/getLogoutEndpoint.js +99 -0
  72. package/dist/oauth/endpoints/getLogoutEndpoint.js.map +1 -0
  73. package/dist/oauth/endpoints/getMetaEndpoint.d.ts +13 -0
  74. package/dist/oauth/endpoints/getMetaEndpoint.d.ts.map +1 -0
  75. package/dist/oauth/endpoints/getMetaEndpoint.js +25 -0
  76. package/dist/oauth/endpoints/getMetaEndpoint.js.map +1 -0
  77. package/dist/oauth/endpoints/getRedirectToLoginEndpoint.d.ts +13 -0
  78. package/dist/oauth/endpoints/getRedirectToLoginEndpoint.d.ts.map +1 -0
  79. package/dist/oauth/endpoints/getRedirectToLoginEndpoint.js +21 -0
  80. package/dist/oauth/endpoints/getRedirectToLoginEndpoint.js.map +1 -0
  81. package/dist/oauth/exports/client.d.ts +3 -0
  82. package/dist/oauth/exports/client.d.ts.map +1 -0
  83. package/dist/oauth/exports/client.js +4 -0
  84. package/dist/oauth/exports/client.js.map +1 -0
  85. package/dist/oauth/hooks/afterLogout.d.ts +8 -0
  86. package/dist/oauth/hooks/afterLogout.d.ts.map +1 -0
  87. package/dist/oauth/hooks/afterLogout.js +27 -0
  88. package/dist/oauth/hooks/afterLogout.js.map +1 -0
  89. package/dist/oauth/hooks/me.d.ts +5 -0
  90. package/dist/oauth/hooks/me.d.ts.map +1 -0
  91. package/dist/oauth/hooks/me.js +55 -0
  92. package/dist/oauth/hooks/me.js.map +1 -0
  93. package/dist/oauth/hooks/refresh.d.ts +8 -0
  94. package/dist/oauth/hooks/refresh.d.ts.map +1 -0
  95. package/dist/oauth/hooks/refresh.js +91 -0
  96. package/dist/oauth/hooks/refresh.js.map +1 -0
  97. package/dist/oauth/index.d.ts +4 -0
  98. package/dist/oauth/index.d.ts.map +1 -0
  99. package/dist/oauth/index.js +222 -0
  100. package/dist/oauth/index.js.map +1 -0
  101. package/dist/oauth/strategy/index.d.ts +54 -0
  102. package/dist/oauth/strategy/index.d.ts.map +1 -0
  103. package/dist/oauth/strategy/index.js +280 -0
  104. package/dist/oauth/strategy/index.js.map +1 -0
  105. package/dist/oauth/types.d.ts +192 -0
  106. package/dist/oauth/types.d.ts.map +1 -0
  107. package/dist/oauth/types.js +3 -0
  108. package/dist/oauth/types.js.map +1 -0
  109. package/dist/oauth/utilities/clearCookie.d.ts +9 -0
  110. package/dist/oauth/utilities/clearCookie.d.ts.map +1 -0
  111. package/dist/oauth/utilities/clearCookie.js +21 -0
  112. package/dist/oauth/utilities/clearCookie.js.map +1 -0
  113. package/dist/oauth/utilities/createCookieOptions.d.ts +10 -0
  114. package/dist/oauth/utilities/createCookieOptions.d.ts.map +1 -0
  115. package/dist/oauth/utilities/createCookieOptions.js +42 -0
  116. package/dist/oauth/utilities/createCookieOptions.js.map +1 -0
  117. package/dist/oauth/utilities/createDebugLogger.d.ts +4 -0
  118. package/dist/oauth/utilities/createDebugLogger.d.ts.map +1 -0
  119. package/dist/oauth/utilities/createDebugLogger.js +16 -0
  120. package/dist/oauth/utilities/createDebugLogger.js.map +1 -0
  121. package/dist/oauth/utilities/extractOrigin.d.ts +2 -0
  122. package/dist/oauth/utilities/extractOrigin.d.ts.map +1 -0
  123. package/dist/oauth/utilities/extractOrigin.js +12 -0
  124. package/dist/oauth/utilities/extractOrigin.js.map +1 -0
  125. package/dist/oauth/utilities/getAdminCollectionSlug.d.ts +3 -0
  126. package/dist/oauth/utilities/getAdminCollectionSlug.d.ts.map +1 -0
  127. package/dist/oauth/utilities/getAdminCollectionSlug.js +18 -0
  128. package/dist/oauth/utilities/getAdminCollectionSlug.js.map +1 -0
  129. package/dist/oauth/utilities/getAdminPath.d.ts +8 -0
  130. package/dist/oauth/utilities/getAdminPath.d.ts.map +1 -0
  131. package/dist/oauth/utilities/getAdminPath.js +9 -0
  132. package/dist/oauth/utilities/getAdminPath.js.map +1 -0
  133. package/dist/oauth/utilities/getAuthorizeURL.d.ts +17 -0
  134. package/dist/oauth/utilities/getAuthorizeURL.d.ts.map +1 -0
  135. package/dist/oauth/utilities/getAuthorizeURL.js +45 -0
  136. package/dist/oauth/utilities/getAuthorizeURL.js.map +1 -0
  137. package/dist/oauth/utilities/getCookieExpiration.d.ts +4 -0
  138. package/dist/oauth/utilities/getCookieExpiration.d.ts.map +1 -0
  139. package/dist/oauth/utilities/getCookieExpiration.js +11 -0
  140. package/dist/oauth/utilities/getCookieExpiration.js.map +1 -0
  141. package/dist/oauth/utilities/getSecondsFromTokenExp.d.ts +2 -0
  142. package/dist/oauth/utilities/getSecondsFromTokenExp.d.ts.map +1 -0
  143. package/dist/oauth/utilities/getSecondsFromTokenExp.js +7 -0
  144. package/dist/oauth/utilities/getSecondsFromTokenExp.js.map +1 -0
  145. package/dist/oauth/utilities/getTokenExp.d.ts +6 -0
  146. package/dist/oauth/utilities/getTokenExp.d.ts.map +1 -0
  147. package/dist/oauth/utilities/getTokenExp.js +20 -0
  148. package/dist/oauth/utilities/getTokenExp.js.map +1 -0
  149. package/dist/oauth/utilities/getUsernameField.d.ts +9 -0
  150. package/dist/oauth/utilities/getUsernameField.d.ts.map +1 -0
  151. package/dist/oauth/utilities/getUsernameField.js +20 -0
  152. package/dist/oauth/utilities/getUsernameField.js.map +1 -0
  153. package/dist/oauth/utilities/hasUserTokenPropsChanged.d.ts +8 -0
  154. package/dist/oauth/utilities/hasUserTokenPropsChanged.d.ts.map +1 -0
  155. package/dist/oauth/utilities/hasUserTokenPropsChanged.js +25 -0
  156. package/dist/oauth/utilities/hasUserTokenPropsChanged.js.map +1 -0
  157. package/dist/oauth/utilities/mergeHeaders.d.ts +2 -0
  158. package/dist/oauth/utilities/mergeHeaders.d.ts.map +1 -0
  159. package/dist/oauth/utilities/mergeHeaders.js +37 -0
  160. package/dist/oauth/utilities/mergeHeaders.js.map +1 -0
  161. package/dist/oauth/utilities/refreshTokens.d.ts +16 -0
  162. package/dist/oauth/utilities/refreshTokens.d.ts.map +1 -0
  163. package/dist/oauth/utilities/refreshTokens.js +67 -0
  164. package/dist/oauth/utilities/refreshTokens.js.map +1 -0
  165. package/dist/plugin/build-config.d.ts +7 -1
  166. package/dist/plugin/build-config.d.ts.map +1 -1
  167. package/dist/plugin/build-config.js +53 -3
  168. package/dist/plugin/build-config.js.map +1 -1
  169. package/dist/types/config.d.ts +0 -11
  170. package/dist/types/config.d.ts.map +1 -1
  171. package/dist/types/config.js +1 -1
  172. package/dist/types/config.js.map +1 -1
  173. package/dist/utils/config.d.ts +0 -22
  174. package/dist/utils/config.d.ts.map +1 -1
  175. package/dist/utils/config.js +0 -46
  176. package/dist/utils/config.js.map +1 -1
  177. package/dist/utils/messages.js +11 -11
  178. package/dist/utils/messages.js.map +1 -1
  179. package/dist/utils/payload-config-ast.d.ts +17 -1
  180. package/dist/utils/payload-config-ast.d.ts.map +1 -1
  181. package/dist/utils/payload-config-ast.js +166 -14
  182. package/dist/utils/payload-config-ast.js.map +1 -1
  183. package/dist/utils/payload-config-modifier.d.ts +2 -1
  184. package/dist/utils/payload-config-modifier.d.ts.map +1 -1
  185. package/dist/utils/payload-config-modifier.js +50 -79
  186. package/dist/utils/payload-config-modifier.js.map +1 -1
  187. package/dist/utils/payload-package-check.d.ts.map +1 -1
  188. package/dist/utils/payload-package-check.js +14 -33
  189. package/dist/utils/payload-package-check.js.map +1 -1
  190. package/dist/utils/project.d.ts +1 -1
  191. package/dist/utils/project.d.ts.map +1 -1
  192. package/dist/utils/project.js +3 -5
  193. package/dist/utils/project.js.map +1 -1
  194. package/dist/utils/s3-upload.d.ts.map +1 -1
  195. package/dist/utils/s3-upload.js +3 -8
  196. package/dist/utils/s3-upload.js.map +1 -1
  197. package/dist/utils/token-display.d.ts.map +1 -1
  198. package/dist/utils/token-display.js +3 -2
  199. package/dist/utils/token-display.js.map +1 -1
  200. package/package.json +9 -3
  201. package/dist/api/control-plane.spec.d.ts +0 -2
  202. package/dist/api/control-plane.spec.d.ts.map +0 -1
  203. package/dist/api/control-plane.spec.js +0 -296
  204. package/dist/api/control-plane.spec.js.map +0 -1
  205. package/dist/api/figma-api.spec.d.ts +0 -14
  206. package/dist/api/figma-api.spec.d.ts.map +0 -1
  207. package/dist/api/figma-api.spec.js +0 -201
  208. package/dist/api/figma-api.spec.js.map +0 -1
  209. package/dist/auth/__tests__/fixtures.d.ts +0 -26
  210. package/dist/auth/__tests__/fixtures.d.ts.map +0 -1
  211. package/dist/auth/__tests__/fixtures.js +0 -67
  212. package/dist/auth/__tests__/fixtures.js.map +0 -1
  213. package/dist/auth/__tests__/mocks.d.ts +0 -33
  214. package/dist/auth/__tests__/mocks.d.ts.map +0 -1
  215. package/dist/auth/__tests__/mocks.js +0 -63
  216. package/dist/auth/__tests__/mocks.js.map +0 -1
  217. package/dist/auth/callback-server.spec.d.ts +0 -2
  218. package/dist/auth/callback-server.spec.d.ts.map +0 -1
  219. package/dist/auth/callback-server.spec.js +0 -85
  220. package/dist/auth/callback-server.spec.js.map +0 -1
  221. package/dist/auth/crypto-utils.spec.d.ts +0 -2
  222. package/dist/auth/crypto-utils.spec.d.ts.map +0 -1
  223. package/dist/auth/crypto-utils.spec.js +0 -36
  224. package/dist/auth/crypto-utils.spec.js.map +0 -1
  225. package/dist/auth/jwt-validator.spec.d.ts +0 -10
  226. package/dist/auth/jwt-validator.spec.d.ts.map +0 -1
  227. package/dist/auth/jwt-validator.spec.js +0 -236
  228. package/dist/auth/jwt-validator.spec.js.map +0 -1
  229. package/dist/auth/oauth-flow.spec.d.ts +0 -2
  230. package/dist/auth/oauth-flow.spec.d.ts.map +0 -1
  231. package/dist/auth/oauth-flow.spec.js +0 -134
  232. package/dist/auth/oauth-flow.spec.js.map +0 -1
  233. package/dist/auth/pkce.spec.d.ts +0 -2
  234. package/dist/auth/pkce.spec.d.ts.map +0 -1
  235. package/dist/auth/pkce.spec.js +0 -32
  236. package/dist/auth/pkce.spec.js.map +0 -1
  237. package/dist/auth/project-token.spec.d.ts +0 -2
  238. package/dist/auth/project-token.spec.d.ts.map +0 -1
  239. package/dist/auth/project-token.spec.js +0 -332
  240. package/dist/auth/project-token.spec.js.map +0 -1
  241. package/dist/auth/refresh.spec.d.ts +0 -2
  242. package/dist/auth/refresh.spec.d.ts.map +0 -1
  243. package/dist/auth/refresh.spec.js +0 -105
  244. package/dist/auth/refresh.spec.js.map +0 -1
  245. package/dist/auth/token-store.spec.d.ts +0 -2
  246. package/dist/auth/token-store.spec.d.ts.map +0 -1
  247. package/dist/auth/token-store.spec.js +0 -276
  248. package/dist/auth/token-store.spec.js.map +0 -1
  249. package/dist/commands/__tests__/test-utils.d.ts +0 -28
  250. package/dist/commands/__tests__/test-utils.d.ts.map +0 -1
  251. package/dist/commands/__tests__/test-utils.js +0 -34
  252. package/dist/commands/__tests__/test-utils.js.map +0 -1
  253. package/dist/commands/deploy.spec.d.ts +0 -2
  254. package/dist/commands/deploy.spec.d.ts.map +0 -1
  255. package/dist/commands/deploy.spec.js +0 -18
  256. package/dist/commands/deploy.spec.js.map +0 -1
  257. package/dist/commands/init.spec.d.ts +0 -2
  258. package/dist/commands/init.spec.d.ts.map +0 -1
  259. package/dist/commands/init.spec.js +0 -283
  260. package/dist/commands/init.spec.js.map +0 -1
  261. package/dist/plugin/build-config.spec.d.ts +0 -2
  262. package/dist/plugin/build-config.spec.d.ts.map +0 -1
  263. package/dist/plugin/build-config.spec.js +0 -72
  264. package/dist/plugin/build-config.spec.js.map +0 -1
  265. package/dist/utils/asset-collection.spec.d.ts +0 -2
  266. package/dist/utils/asset-collection.spec.d.ts.map +0 -1
  267. package/dist/utils/asset-collection.spec.js +0 -155
  268. package/dist/utils/asset-collection.spec.js.map +0 -1
  269. package/dist/utils/build-detection.spec.d.ts +0 -2
  270. package/dist/utils/build-detection.spec.d.ts.map +0 -1
  271. package/dist/utils/build-detection.spec.js +0 -110
  272. package/dist/utils/build-detection.spec.js.map +0 -1
  273. package/dist/utils/config.spec.d.ts +0 -2
  274. package/dist/utils/config.spec.d.ts.map +0 -1
  275. package/dist/utils/config.spec.js +0 -167
  276. package/dist/utils/config.spec.js.map +0 -1
  277. package/dist/utils/download-template.spec.d.ts +0 -2
  278. package/dist/utils/download-template.spec.d.ts.map +0 -1
  279. package/dist/utils/download-template.spec.js +0 -76
  280. package/dist/utils/download-template.spec.js.map +0 -1
  281. package/dist/utils/env-management.spec.d.ts +0 -2
  282. package/dist/utils/env-management.spec.d.ts.map +0 -1
  283. package/dist/utils/env-management.spec.js +0 -123
  284. package/dist/utils/env-management.spec.js.map +0 -1
  285. package/dist/utils/git.spec.d.ts +0 -2
  286. package/dist/utils/git.spec.d.ts.map +0 -1
  287. package/dist/utils/git.spec.js +0 -99
  288. package/dist/utils/git.spec.js.map +0 -1
  289. package/dist/utils/lambda-config.spec.d.ts +0 -2
  290. package/dist/utils/lambda-config.spec.d.ts.map +0 -1
  291. package/dist/utils/lambda-config.spec.js +0 -141
  292. package/dist/utils/lambda-config.spec.js.map +0 -1
  293. package/dist/utils/payload-config-ast.spec.d.ts +0 -2
  294. package/dist/utils/payload-config-ast.spec.d.ts.map +0 -1
  295. package/dist/utils/payload-config-ast.spec.js +0 -303
  296. package/dist/utils/payload-config-ast.spec.js.map +0 -1
  297. package/dist/utils/payload-config-modifier.int.spec.d.ts +0 -2
  298. package/dist/utils/payload-config-modifier.int.spec.d.ts.map +0 -1
  299. package/dist/utils/payload-config-modifier.int.spec.js +0 -116
  300. package/dist/utils/payload-config-modifier.int.spec.js.map +0 -1
  301. package/dist/utils/payload-config-modifier.spec.d.ts +0 -2
  302. package/dist/utils/payload-config-modifier.spec.d.ts.map +0 -1
  303. package/dist/utils/payload-config-modifier.spec.js +0 -162
  304. package/dist/utils/payload-config-modifier.spec.js.map +0 -1
  305. package/dist/utils/payload-package-check.spec.d.ts +0 -2
  306. package/dist/utils/payload-package-check.spec.d.ts.map +0 -1
  307. package/dist/utils/payload-package-check.spec.js +0 -148
  308. package/dist/utils/payload-package-check.spec.js.map +0 -1
  309. package/dist/utils/project.spec.d.ts +0 -2
  310. package/dist/utils/project.spec.d.ts.map +0 -1
  311. package/dist/utils/project.spec.js +0 -222
  312. package/dist/utils/project.spec.js.map +0 -1
  313. package/dist/utils/s3-upload.spec.d.ts +0 -2
  314. package/dist/utils/s3-upload.spec.d.ts.map +0 -1
  315. package/dist/utils/s3-upload.spec.js +0 -140
  316. package/dist/utils/s3-upload.spec.js.map +0 -1
@@ -1,116 +0,0 @@
1
- import fs from 'fs/promises';
2
- import path from 'path';
3
- import { Project } from 'ts-morph';
4
- import { beforeEach, describe, expect, it } from 'vitest';
5
- import { applyModifications, detectRequiredChanges } from './payload-config-ast.js';
6
- describe('payload-config-modifier - integration tests', ()=>{
7
- const fixturesDir = path.join(process.cwd(), 'test/fixtures/payload-configs');
8
- let project;
9
- beforeEach(()=>{
10
- project = new Project({
11
- useInMemoryFileSystem: false
12
- });
13
- });
14
- it('should handle minimal config correctly', async ()=>{
15
- const fixturePath = path.join(fixturesDir, 'minimal.ts');
16
- const content = await fs.readFile(fixturePath, 'utf-8');
17
- const sourceFile = project.createSourceFile('test-minimal.ts', content);
18
- const detection = detectRequiredChanges(sourceFile);
19
- expect(detection.needsImportChange).toBe(true);
20
- expect(detection.dbProperty).toBeDefined();
21
- expect(detection.secretProperty).toBe(true);
22
- expect(detection.editorProperty?.isDefault).toBe(true);
23
- const { changes, modified } = applyModifications(sourceFile, detection);
24
- expect(modified).toBe(true);
25
- expect(changes).toContain('Removed db property');
26
- expect(changes).toContain('Removed secret property');
27
- expect(changes).toContain('Removed default editor property');
28
- expect(changes).toContain('Changed buildConfig import to @payloadcms/figma');
29
- // Verify final state
30
- const finalText = sourceFile.getFullText();
31
- expect(finalText).toContain("from '@payloadcms/figma'");
32
- expect(finalText).not.toContain('db:');
33
- expect(finalText).not.toContain('secret:');
34
- expect(finalText).not.toContain('editor:');
35
- });
36
- it('should skip already-figma config', async ()=>{
37
- const fixturePath = path.join(fixturesDir, 'already-figma.ts');
38
- const content = await fs.readFile(fixturePath, 'utf-8');
39
- const sourceFile = project.createSourceFile('test-already-figma.ts', content);
40
- const detection = detectRequiredChanges(sourceFile);
41
- expect(detection.needsImportChange).toBe(false);
42
- const { modified } = applyModifications(sourceFile, detection);
43
- expect(modified).toBe(false);
44
- });
45
- it('should preserve other payload imports', async ()=>{
46
- const fixturePath = path.join(fixturesDir, 'with-other-imports.ts');
47
- const content = await fs.readFile(fixturePath, 'utf-8');
48
- const sourceFile = project.createSourceFile('test-with-other-imports.ts', content);
49
- const detection = detectRequiredChanges(sourceFile);
50
- expect(detection.needsImportChange).toBe(true);
51
- expect(detection.hasOtherPayloadImports).toBe(true);
52
- const { changes, modified } = applyModifications(sourceFile, detection);
53
- expect(modified).toBe(true);
54
- expect(changes).toContain('Split buildConfig import to @payloadcms/figma');
55
- const finalText = sourceFile.getFullText();
56
- expect(finalText).toContain("import { CollectionConfig } from 'payload'");
57
- // ts-morph uses double quotes for new imports
58
- expect(finalText).toContain('import { buildConfig } from "@payloadcms/figma"');
59
- });
60
- it('should preserve custom editor config', async ()=>{
61
- const fixturePath = path.join(fixturesDir, 'custom-editor.ts');
62
- const content = await fs.readFile(fixturePath, 'utf-8');
63
- const sourceFile = project.createSourceFile('test-custom-editor.ts', content);
64
- const detection = detectRequiredChanges(sourceFile);
65
- expect(detection.editorProperty?.isDefault).toBe(false);
66
- applyModifications(sourceFile, detection);
67
- const finalText = sourceFile.getFullText();
68
- expect(finalText).toContain('editor:');
69
- expect(finalText).toContain('lexicalEditor');
70
- });
71
- it('should handle postgres adapter', async ()=>{
72
- const fixturePath = path.join(fixturesDir, 'postgres-adapter.ts');
73
- const content = await fs.readFile(fixturePath, 'utf-8');
74
- const sourceFile = project.createSourceFile('test-postgres.ts', content);
75
- const detection = detectRequiredChanges(sourceFile);
76
- expect(detection.dbProperty?.adapter).toBe('postgresAdapter');
77
- expect(detection.dbProperty?.importSource).toBe('@payloadcms/db-postgres');
78
- const { changes, modified } = applyModifications(sourceFile, detection);
79
- expect(modified).toBe(true);
80
- expect(changes).toContain('Removed postgresAdapter import');
81
- const finalText = sourceFile.getFullText();
82
- expect(finalText).not.toContain('@payloadcms/db-postgres');
83
- });
84
- it('should fail gracefully on alias', async ()=>{
85
- const fixturePath = path.join(fixturesDir, 'with-alias.ts');
86
- const content = await fs.readFile(fixturePath, 'utf-8');
87
- const sourceFile = project.createSourceFile('test-alias.ts', content);
88
- const detection = detectRequiredChanges(sourceFile);
89
- expect(detection.hasAlias).toBe(true);
90
- const { modified } = applyModifications(sourceFile, detection);
91
- expect(modified).toBe(false);
92
- });
93
- it('should fail gracefully on missing buildConfig call', async ()=>{
94
- const fixturePath = path.join(fixturesDir, 'no-buildconfig.ts');
95
- const content = await fs.readFile(fixturePath, 'utf-8');
96
- const sourceFile = project.createSourceFile('test-no-buildconfig.ts', content);
97
- const detection = detectRequiredChanges(sourceFile);
98
- expect(detection.buildConfigNotFound).toBe(true);
99
- const { modified } = applyModifications(sourceFile, detection);
100
- expect(modified).toBe(false);
101
- });
102
- it('should handle syntax errors gracefully', async ()=>{
103
- const fixturePath = path.join(fixturesDir, 'syntax-error.ts');
104
- const content = await fs.readFile(fixturePath, 'utf-8');
105
- // ts-morph parses as much as it can, even with syntax errors
106
- // It doesn't throw, but the AST may be incomplete
107
- const sourceFile = project.createSourceFile('test-syntax-error.ts', content);
108
- // Detection should handle incomplete AST gracefully
109
- const detection = detectRequiredChanges(sourceFile);
110
- // With syntax errors, detection may fail to find buildConfig properly
111
- // The code should not crash
112
- expect(()=>applyModifications(sourceFile, detection)).not.toThrow();
113
- });
114
- });
115
-
116
- //# sourceMappingURL=payload-config-modifier.int.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utils/payload-config-modifier.int.spec.ts"],"sourcesContent":["import fs from 'fs/promises'\nimport path from 'path'\nimport { Project } from 'ts-morph'\nimport { beforeEach, describe, expect, it } from 'vitest'\n\nimport { applyModifications, detectRequiredChanges } from './payload-config-ast.js'\n\ndescribe('payload-config-modifier - integration tests', () => {\n const fixturesDir = path.join(process.cwd(), 'test/fixtures/payload-configs')\n let project: Project\n\n beforeEach(() => {\n project = new Project({ useInMemoryFileSystem: false })\n })\n\n it('should handle minimal config correctly', async () => {\n const fixturePath = path.join(fixturesDir, 'minimal.ts')\n const content = await fs.readFile(fixturePath, 'utf-8')\n\n const sourceFile = project.createSourceFile('test-minimal.ts', content)\n\n const detection = detectRequiredChanges(sourceFile)\n expect(detection.needsImportChange).toBe(true)\n expect(detection.dbProperty).toBeDefined()\n expect(detection.secretProperty).toBe(true)\n expect(detection.editorProperty?.isDefault).toBe(true)\n\n const { changes, modified } = applyModifications(sourceFile, detection)\n expect(modified).toBe(true)\n expect(changes).toContain('Removed db property')\n expect(changes).toContain('Removed secret property')\n expect(changes).toContain('Removed default editor property')\n expect(changes).toContain('Changed buildConfig import to @payloadcms/figma')\n\n // Verify final state\n const finalText = sourceFile.getFullText()\n expect(finalText).toContain(\"from '@payloadcms/figma'\")\n expect(finalText).not.toContain('db:')\n expect(finalText).not.toContain('secret:')\n expect(finalText).not.toContain('editor:')\n })\n\n it('should skip already-figma config', async () => {\n const fixturePath = path.join(fixturesDir, 'already-figma.ts')\n const content = await fs.readFile(fixturePath, 'utf-8')\n\n const sourceFile = project.createSourceFile('test-already-figma.ts', content)\n\n const detection = detectRequiredChanges(sourceFile)\n expect(detection.needsImportChange).toBe(false)\n\n const { modified } = applyModifications(sourceFile, detection)\n expect(modified).toBe(false)\n })\n\n it('should preserve other payload imports', async () => {\n const fixturePath = path.join(fixturesDir, 'with-other-imports.ts')\n const content = await fs.readFile(fixturePath, 'utf-8')\n\n const sourceFile = project.createSourceFile('test-with-other-imports.ts', content)\n\n const detection = detectRequiredChanges(sourceFile)\n expect(detection.needsImportChange).toBe(true)\n expect(detection.hasOtherPayloadImports).toBe(true)\n\n const { changes, modified } = applyModifications(sourceFile, detection)\n expect(modified).toBe(true)\n expect(changes).toContain('Split buildConfig import to @payloadcms/figma')\n\n const finalText = sourceFile.getFullText()\n expect(finalText).toContain(\"import { CollectionConfig } from 'payload'\")\n // ts-morph uses double quotes for new imports\n expect(finalText).toContain('import { buildConfig } from \"@payloadcms/figma\"')\n })\n\n it('should preserve custom editor config', async () => {\n const fixturePath = path.join(fixturesDir, 'custom-editor.ts')\n const content = await fs.readFile(fixturePath, 'utf-8')\n\n const sourceFile = project.createSourceFile('test-custom-editor.ts', content)\n\n const detection = detectRequiredChanges(sourceFile)\n expect(detection.editorProperty?.isDefault).toBe(false)\n\n applyModifications(sourceFile, detection)\n\n const finalText = sourceFile.getFullText()\n expect(finalText).toContain('editor:')\n expect(finalText).toContain('lexicalEditor')\n })\n\n it('should handle postgres adapter', async () => {\n const fixturePath = path.join(fixturesDir, 'postgres-adapter.ts')\n const content = await fs.readFile(fixturePath, 'utf-8')\n\n const sourceFile = project.createSourceFile('test-postgres.ts', content)\n\n const detection = detectRequiredChanges(sourceFile)\n expect(detection.dbProperty?.adapter).toBe('postgresAdapter')\n expect(detection.dbProperty?.importSource).toBe('@payloadcms/db-postgres')\n\n const { changes, modified } = applyModifications(sourceFile, detection)\n expect(modified).toBe(true)\n expect(changes).toContain('Removed postgresAdapter import')\n\n const finalText = sourceFile.getFullText()\n expect(finalText).not.toContain('@payloadcms/db-postgres')\n })\n\n it('should fail gracefully on alias', async () => {\n const fixturePath = path.join(fixturesDir, 'with-alias.ts')\n const content = await fs.readFile(fixturePath, 'utf-8')\n\n const sourceFile = project.createSourceFile('test-alias.ts', content)\n\n const detection = detectRequiredChanges(sourceFile)\n expect(detection.hasAlias).toBe(true)\n\n const { modified } = applyModifications(sourceFile, detection)\n expect(modified).toBe(false)\n })\n\n it('should fail gracefully on missing buildConfig call', async () => {\n const fixturePath = path.join(fixturesDir, 'no-buildconfig.ts')\n const content = await fs.readFile(fixturePath, 'utf-8')\n\n const sourceFile = project.createSourceFile('test-no-buildconfig.ts', content)\n\n const detection = detectRequiredChanges(sourceFile)\n expect(detection.buildConfigNotFound).toBe(true)\n\n const { modified } = applyModifications(sourceFile, detection)\n expect(modified).toBe(false)\n })\n\n it('should handle syntax errors gracefully', async () => {\n const fixturePath = path.join(fixturesDir, 'syntax-error.ts')\n const content = await fs.readFile(fixturePath, 'utf-8')\n\n // ts-morph parses as much as it can, even with syntax errors\n // It doesn't throw, but the AST may be incomplete\n const sourceFile = project.createSourceFile('test-syntax-error.ts', content)\n\n // Detection should handle incomplete AST gracefully\n const detection = detectRequiredChanges(sourceFile)\n\n // With syntax errors, detection may fail to find buildConfig properly\n // The code should not crash\n expect(() => applyModifications(sourceFile, detection)).not.toThrow()\n })\n})\n"],"names":["fs","path","Project","beforeEach","describe","expect","it","applyModifications","detectRequiredChanges","fixturesDir","join","process","cwd","project","useInMemoryFileSystem","fixturePath","content","readFile","sourceFile","createSourceFile","detection","needsImportChange","toBe","dbProperty","toBeDefined","secretProperty","editorProperty","isDefault","changes","modified","toContain","finalText","getFullText","not","hasOtherPayloadImports","adapter","importSource","hasAlias","buildConfigNotFound","toThrow"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=payload-config-modifier.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"payload-config-modifier.spec.d.ts","sourceRoot":"","sources":["../../src/utils/payload-config-modifier.spec.ts"],"names":[],"mappings":""}
@@ -1,162 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- import { displayManualInstructions, ensurePayloadFigmaConfig } from './payload-config-modifier.js';
3
- vi.mock('./payload-config-finder.js');
4
- vi.mock('./payload-package-check.js');
5
- vi.mock('./payload-config-ast.js');
6
- vi.mock('./typescript-validator.js');
7
- vi.mock('./formatter.js');
8
- describe('payload-config-modifier', ()=>{
9
- beforeEach(()=>{
10
- vi.clearAllMocks();
11
- });
12
- describe('ensurePayloadFigmaConfig', ()=>{
13
- it('should return error when config not found', async ()=>{
14
- const { findPayloadConfig } = await import('./payload-config-finder.js');
15
- vi.mocked(findPayloadConfig).mockResolvedValue(null);
16
- const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm');
17
- expect(result.success).toBe(false);
18
- expect(result.error).toContain('payload.config.ts not found');
19
- });
20
- it('should install package if missing', async ()=>{
21
- const { findPayloadConfig } = await import('./payload-config-finder.js');
22
- const { checkPackageInstalled, installPackage } = await import('./payload-package-check.js');
23
- vi.mocked(findPayloadConfig).mockResolvedValue('/test/project/payload.config.ts');
24
- vi.mocked(checkPackageInstalled).mockResolvedValue(false);
25
- vi.mocked(installPackage).mockResolvedValue();
26
- // Mock ts-morph to avoid file system operations
27
- const { Project } = await import('ts-morph');
28
- vi.spyOn(Project.prototype, 'addSourceFileAtPath').mockReturnValue({
29
- getFullText: vi.fn().mockReturnValue('')
30
- });
31
- const { detectRequiredChanges } = await import('./payload-config-ast.js');
32
- vi.mocked(detectRequiredChanges).mockReturnValue({
33
- hasAlias: false,
34
- hasOtherPayloadImports: false,
35
- needsImportChange: false
36
- });
37
- const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm');
38
- expect(installPackage).toHaveBeenCalledWith('/test/project', '@payloadcms/figma', 'pnpm');
39
- expect(result.changes).toContain('Installed @payloadcms/figma');
40
- });
41
- it('should apply modifications when needed', async ()=>{
42
- const { findPayloadConfig } = await import('./payload-config-finder.js');
43
- const { checkPackageInstalled } = await import('./payload-package-check.js');
44
- const { applyModifications, detectRequiredChanges } = await import('./payload-config-ast.js');
45
- vi.mocked(findPayloadConfig).mockResolvedValue('/test/project/payload.config.ts');
46
- vi.mocked(checkPackageInstalled).mockResolvedValue(true);
47
- // Mock source file
48
- const mockSourceFile = {
49
- getFullText: vi.fn().mockReturnValue(''),
50
- save: vi.fn().mockResolvedValue(undefined)
51
- };
52
- const { Project } = await import('ts-morph');
53
- vi.spyOn(Project.prototype, 'addSourceFileAtPath').mockReturnValue(mockSourceFile);
54
- vi.mocked(detectRequiredChanges).mockReturnValue({
55
- dbProperty: {
56
- adapter: 'mongooseAdapter',
57
- importSource: '@payloadcms/db-mongodb'
58
- },
59
- hasAlias: false,
60
- hasOtherPayloadImports: false,
61
- needsImportChange: true
62
- });
63
- vi.mocked(applyModifications).mockReturnValue({
64
- changes: [
65
- 'Removed db property',
66
- 'Changed buildConfig import to @payloadcms/figma'
67
- ],
68
- modified: true
69
- });
70
- const { runTypeScriptCheck } = await import('./typescript-validator.js');
71
- vi.mocked(runTypeScriptCheck).mockResolvedValue({
72
- errors: [],
73
- success: true
74
- });
75
- const { formatFile } = await import('./formatter.js');
76
- vi.mocked(formatFile).mockResolvedValue({
77
- success: true
78
- });
79
- const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm');
80
- expect(result.success).toBe(true);
81
- expect(result.modified).toBe(true);
82
- expect(result.changes.length).toBeGreaterThan(0);
83
- expect(mockSourceFile.save).toHaveBeenCalled();
84
- });
85
- it('should return error when buildConfig has alias', async ()=>{
86
- const { findPayloadConfig } = await import('./payload-config-finder.js');
87
- const { checkPackageInstalled } = await import('./payload-package-check.js');
88
- const { detectRequiredChanges } = await import('./payload-config-ast.js');
89
- vi.mocked(findPayloadConfig).mockResolvedValue('/test/project/payload.config.ts');
90
- vi.mocked(checkPackageInstalled).mockResolvedValue(true);
91
- const mockSourceFile = {
92
- getFullText: vi.fn().mockReturnValue('')
93
- };
94
- const { Project } = await import('ts-morph');
95
- vi.spyOn(Project.prototype, 'addSourceFileAtPath').mockReturnValue(mockSourceFile);
96
- vi.mocked(detectRequiredChanges).mockReturnValue({
97
- hasAlias: true,
98
- hasOtherPayloadImports: false,
99
- needsImportChange: true
100
- });
101
- const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm');
102
- expect(result.success).toBe(false);
103
- expect(result.error).toContain('Config uses import alias');
104
- });
105
- it('should uninstall orphaned packages', async ()=>{
106
- const { findPayloadConfig } = await import('./payload-config-finder.js');
107
- const { checkPackageInstalled, uninstallPackage } = await import('./payload-package-check.js');
108
- const { applyModifications, detectRequiredChanges } = await import('./payload-config-ast.js');
109
- vi.mocked(findPayloadConfig).mockResolvedValue('/test/project/payload.config.ts');
110
- vi.mocked(checkPackageInstalled).mockResolvedValue(true);
111
- const mockSourceFile = {
112
- getFullText: vi.fn().mockReturnValue(''),
113
- save: vi.fn().mockResolvedValue(undefined)
114
- };
115
- const { Project } = await import('ts-morph');
116
- vi.spyOn(Project.prototype, 'addSourceFileAtPath').mockReturnValue(mockSourceFile);
117
- vi.mocked(detectRequiredChanges).mockReturnValue({
118
- dbProperty: {
119
- adapter: 'mongooseAdapter',
120
- importSource: '@payloadcms/db-mongodb'
121
- },
122
- editorProperty: {
123
- importSource: '@payloadcms/richtext-lexical',
124
- isDefault: true
125
- },
126
- hasAlias: false,
127
- hasOtherPayloadImports: false,
128
- needsImportChange: false
129
- });
130
- vi.mocked(applyModifications).mockReturnValue({
131
- changes: [
132
- 'Removed db property',
133
- 'Removed default editor property'
134
- ],
135
- modified: true
136
- });
137
- vi.mocked(uninstallPackage).mockResolvedValue();
138
- const { runTypeScriptCheck } = await import('./typescript-validator.js');
139
- vi.mocked(runTypeScriptCheck).mockResolvedValue({
140
- errors: [],
141
- success: true
142
- });
143
- const { formatFile } = await import('./formatter.js');
144
- vi.mocked(formatFile).mockResolvedValue({
145
- success: true
146
- });
147
- const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm');
148
- expect(uninstallPackage).toHaveBeenCalledWith('/test/project', '@payloadcms/db-mongodb', 'pnpm');
149
- expect(uninstallPackage).toHaveBeenCalledWith('/test/project', '@payloadcms/richtext-lexical', 'pnpm');
150
- expect(result.changes).toContain('Uninstalled @payloadcms/db-mongodb');
151
- expect(result.changes).toContain('Uninstalled @payloadcms/richtext-lexical');
152
- });
153
- });
154
- describe('displayManualInstructions', ()=>{
155
- it('should format manual instructions correctly', ()=>{
156
- // This is a formatting function, just verify it doesn't throw
157
- expect(()=>displayManualInstructions('Test reason')).not.toThrow();
158
- });
159
- });
160
- });
161
-
162
- //# sourceMappingURL=payload-config-modifier.spec.js.map
@@ -1 +0,0 @@
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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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=payload-package-check.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"payload-package-check.spec.d.ts","sourceRoot":"","sources":["../../src/utils/payload-package-check.spec.ts"],"names":[],"mappings":""}
@@ -1,148 +0,0 @@
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
@@ -1 +0,0 @@
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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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=project.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project.spec.d.ts","sourceRoot":"","sources":["../../src/utils/project.spec.ts"],"names":[],"mappings":""}