@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,410 @@
1
+ import * as p from '@clack/prompts';
2
+ import fs from 'fs/promises';
3
+ import path from 'path';
4
+ import pc from 'picocolors';
5
+ import { ControlPlaneError, getTenantDetails } from '../api/control-plane.js';
6
+ import { getValidAccessToken } from '../auth/oauth-flow.js';
7
+ import { getValidProjectToken, ProjectTokenError } from '../auth/project-token.js';
8
+ import { TokenStore } from '../auth/token-store.js';
9
+ import { hasFigmaConfig, readFigmaConfig, writeFigmaConfig } from '../utils/config.js';
10
+ import { isDebug } from '../utils/is-debug.js';
11
+ import * as log from '../utils/log.js';
12
+ import { displayManualInstructions, ensurePayloadFigmaConfig } from '../utils/payload-config-modifier.js';
13
+ import { detectPayloadProject, hasRequiredDependencies, initializeGitRepo, installDependencies, isInProjectDirectory, scaffoldProject, validatePayloadVersion } from '../utils/project.js';
14
+ import { loginCommand } from './login.js';
15
+ /**
16
+ * Generate and store project token for a tenant
17
+ * Non-blocking - will show warning but not exit on failure
18
+ * Only shows feedback if DEBUG mode is enabled, otherwise runs silently
19
+ *
20
+ * @param tokenStore - Token store instance
21
+ * @param tenantId - Tenant ID to generate token for
22
+ * @param spinner - Clack spinner instance for status updates (only used in debug mode)
23
+ */ async function generateProjectTokenWithFeedback(tokenStore, tenantId, spinner) {
24
+ if (isDebug()) {
25
+ spinner.start('Generating project token...');
26
+ }
27
+ try {
28
+ const projectToken = await getValidProjectToken(tokenStore, tenantId);
29
+ if (isDebug()) {
30
+ if (projectToken) {
31
+ spinner.stop(pc.green('✓ Project token generated'));
32
+ } else {
33
+ spinner.stop(pc.yellow('⚠ Project token not generated (authentication required)'));
34
+ }
35
+ }
36
+ } catch (error) {
37
+ // Always show failures, even without debug
38
+ if (isDebug()) {
39
+ spinner.stop(pc.yellow('⚠ Project token generation failed'));
40
+ }
41
+ if (error instanceof ProjectTokenError) {
42
+ log.warning(error.message);
43
+ if (isDebug()) {
44
+ p.note('Project token is used for authenticating to the Content API.\nYou can continue without it, but may need to regenerate later.', 'Note');
45
+ }
46
+ } else {
47
+ log.warning(error instanceof Error ? error.message : 'Unknown error');
48
+ }
49
+ // Don't exit - token generation failure shouldn't block initialization
50
+ }
51
+ }
52
+ /**
53
+ * Handle the `init` command
54
+ *
55
+ * Sets up a project by:
56
+ * 1. Checking authentication
57
+ * 2. Detecting/scaffolding Payload project
58
+ * 3. Fetching tenant details
59
+ * 4. Storing configuration
60
+ *
61
+ * @param options - Command options
62
+ */ export async function initCommand(options) {
63
+ // Check authentication
64
+ const tokenStore = new TokenStore();
65
+ const s = p.spinner();
66
+ let accessToken;
67
+ if (options.skipAuth) {
68
+ // Skip authentication for testing/development
69
+ p.log.warn(pc.yellow('Skipping authentication (--skip-auth mode)'));
70
+ accessToken = 'mock-access-token';
71
+ } else {
72
+ try {
73
+ // Check for valid cached tokens first (no API call needed)
74
+ if (tokenStore.hasValidTokens()) {
75
+ // Use cached token silently - no spinner needed
76
+ accessToken = tokenStore.getAccessToken();
77
+ } else {
78
+ // Need to refresh or authenticate - show spinner for API call
79
+ s.start('Checking authentication...');
80
+ const token = await getValidAccessToken(tokenStore);
81
+ if (!token) {
82
+ s.stop(pc.yellow('⚠ Not authenticated'));
83
+ p.log.info('Authentication required to continue');
84
+ // Prompt user to authenticate now
85
+ const shouldAuth = await p.confirm({
86
+ initialValue: true,
87
+ message: 'Would you like to authenticate now?'
88
+ });
89
+ if (p.isCancel(shouldAuth) || !shouldAuth) {
90
+ p.cancel('Operation cancelled');
91
+ process.exit(0);
92
+ }
93
+ // Run login command
94
+ await loginCommand();
95
+ // Get token after auth
96
+ const newToken = await getValidAccessToken(tokenStore);
97
+ if (!newToken) {
98
+ p.log.error('Authentication failed');
99
+ process.exit(1);
100
+ }
101
+ accessToken = newToken;
102
+ p.log.success(pc.green('✓ Authenticated'));
103
+ } else {
104
+ accessToken = token;
105
+ s.stop(pc.green('✓ Authenticated'));
106
+ }
107
+ }
108
+ } catch (error) {
109
+ s.stop(pc.red('✗ Authentication failed'));
110
+ log.error(error instanceof Error ? error.message : 'Unknown error');
111
+ p.note('Run `figma auth` to authenticate', 'Tip');
112
+ process.exit(1);
113
+ }
114
+ }
115
+ // Check if already initialized
116
+ const hasConfig = await hasFigmaConfig();
117
+ if (hasConfig && !options.force) {
118
+ // Read existing config
119
+ const config = await readFigmaConfig();
120
+ if (!config) {
121
+ p.log.error('Failed to read existing configuration');
122
+ process.exit(1);
123
+ }
124
+ // Display existing CMS details
125
+ p.log.info(pc.bold('Project already initialized'));
126
+ const details = [
127
+ `Tenant ID: ${config.tenantId}`,
128
+ `Domain: ${pc.cyan(`https://${config.domain}`)}`
129
+ ];
130
+ // Optionally fetch live status from Control Plane
131
+ if (!options.skipAuth) {
132
+ try {
133
+ const tenant = await getTenantDetails(accessToken, config.tenantId);
134
+ details.push(`Status: ${tenant.status}`);
135
+ } catch {
136
+ // Ignore errors, just skip live status
137
+ }
138
+ }
139
+ p.note(details.join('\n'), 'CMS Configuration');
140
+ p.note('Use --force to reconfigure this project', 'Tip');
141
+ process.exit(0);
142
+ }
143
+ // Step 3: Get CMS ID with retry loop
144
+ log.debug('Configuring Project...');
145
+ let tenantId = options.id;
146
+ let selectedTenant;
147
+ while(!selectedTenant){
148
+ // Prompt for ID if not provided
149
+ if (!tenantId) {
150
+ const input = await p.text({
151
+ message: 'Enter your CMS ID:',
152
+ placeholder: 'tenant_abc123',
153
+ validate: (value)=>{
154
+ if (!value || typeof value !== 'string') {
155
+ return 'CMS ID is required';
156
+ }
157
+ return undefined;
158
+ }
159
+ });
160
+ if (p.isCancel(input)) {
161
+ p.cancel('Operation cancelled');
162
+ process.exit(0);
163
+ }
164
+ tenantId = input;
165
+ }
166
+ // Try to fetch tenant details
167
+ try {
168
+ log.debug('Using mock Control Plane API (no real network calls)');
169
+ selectedTenant = await getTenantDetails(accessToken, tenantId);
170
+ log.debug(`Using: ${selectedTenant.domain}`);
171
+ } catch (error) {
172
+ p.log.error(pc.red('✗ Failed to fetch CMS details'));
173
+ // Check if permission error (403)
174
+ if (error instanceof ControlPlaneError && error.statusCode === 403) {
175
+ p.log.error('You do not have permission to access the provided CMS ID. Please try again.');
176
+ } else if (error instanceof ControlPlaneError && error.statusCode === 404) {
177
+ p.log.error('Tenant ID not found. Verify the ID is correct.');
178
+ } else {
179
+ p.log.error(error instanceof Error ? error.message : 'Unknown error');
180
+ }
181
+ // Clear tenantId to prompt again
182
+ tenantId = undefined;
183
+ // Ask if they want to retry
184
+ const shouldRetry = await p.confirm({
185
+ initialValue: true,
186
+ message: 'Would you like to try a different CMS ID?'
187
+ });
188
+ if (p.isCancel(shouldRetry) || !shouldRetry) {
189
+ p.cancel('Operation cancelled');
190
+ process.exit(1);
191
+ }
192
+ }
193
+ }
194
+ // Step 4: Detect or scaffold Payload project
195
+ // p.log.step(pc.bold('Setting up project...'))
196
+ const isInProject = await isInProjectDirectory();
197
+ if (isInProject) {
198
+ // ===== EXISTING PROJECT FLOW =====
199
+ log.debug('Project directory detected');
200
+ // Detect Payload
201
+ const projectInfo = await detectPayloadProject();
202
+ if (projectInfo.hasPayload) {
203
+ // Validate existing Payload version
204
+ if (projectInfo.payloadVersion && !validatePayloadVersion(projectInfo.payloadVersion)) {
205
+ p.log.warn(pc.yellow(`Payload version ${projectInfo.payloadVersion} detected. Version 3.x is required.`));
206
+ p.note('Upgrade to Payload 3.x before continuing', 'Action Required');
207
+ process.exit(1);
208
+ }
209
+ p.log.success(pc.green(`✓ Payload ${projectInfo.payloadVersion || 'detected'}`));
210
+ // Check dependencies
211
+ s.start('Checking dependencies...');
212
+ const hasDeps = await hasRequiredDependencies(process.cwd());
213
+ s.stop(pc.green('✓ Dependencies checked'));
214
+ if (!hasDeps) {
215
+ const shouldInstall = await p.confirm({
216
+ initialValue: true,
217
+ message: 'Install dependencies now?'
218
+ });
219
+ if (!p.isCancel(shouldInstall) && shouldInstall) {
220
+ s.start('Installing dependencies...');
221
+ await installDependencies(process.cwd(), projectInfo.packageManager || 'pnpm');
222
+ s.stop(pc.green('✓ Dependencies installed'));
223
+ }
224
+ }
225
+ s.start('Checking Payload configuration...');
226
+ const modResult = await ensurePayloadFigmaConfig(process.cwd(), projectInfo.packageManager || 'pnpm');
227
+ if (!modResult.success) {
228
+ s.stop(pc.red('✗ Configuration check failed'));
229
+ displayManualInstructions(modResult.error || 'Unknown error');
230
+ process.exit(1);
231
+ }
232
+ if (modResult.modified) {
233
+ s.stop(pc.green('✓ Payload configuration updated'));
234
+ if (modResult.changes.length > 0) {
235
+ modResult.changes.forEach((change)=>log.info(pc.dim(` → ${change}`)));
236
+ }
237
+ } else {
238
+ s.stop(pc.green('✓ Payload configuration valid'));
239
+ }
240
+ // Display warnings if any
241
+ if (modResult.warnings && modResult.warnings.length > 0) {
242
+ modResult.warnings.forEach((warning)=>{
243
+ p.log.warn(pc.yellow(`⚠ ${warning}`));
244
+ });
245
+ }
246
+ } else {
247
+ // Has package.json but no Payload - offer to add Payload
248
+ p.log.warn(pc.yellow('⚠ No Payload detected in this project'));
249
+ const shouldAddPayload = await p.confirm({
250
+ initialValue: true,
251
+ message: 'Would you like to add Payload to this project?'
252
+ });
253
+ if (p.isCancel(shouldAddPayload)) {
254
+ p.cancel('Operation cancelled');
255
+ process.exit(0);
256
+ }
257
+ if (!shouldAddPayload) {
258
+ p.log.error('Payload is required to use Figma CMS');
259
+ process.exit(1);
260
+ }
261
+ // TODO: Add Payload to existing project (future enhancement)
262
+ p.log.error('Adding Payload to existing projects is not yet supported');
263
+ p.note('Create a new project or manually add Payload dependencies', 'Action Required');
264
+ process.exit(1);
265
+ }
266
+ // Write configuration for existing project
267
+ if (isDebug()) {
268
+ s.start('Configuring your project...');
269
+ }
270
+ try {
271
+ await writeFigmaConfig({
272
+ domain: selectedTenant.domain,
273
+ tenantId: selectedTenant.id
274
+ });
275
+ if (isDebug()) {
276
+ s.stop(pc.green('✓ Project configured'));
277
+ }
278
+ } catch (error) {
279
+ // Always show failures
280
+ if (isDebug()) {
281
+ s.stop(pc.red('✗ Failed'));
282
+ } else {
283
+ log.error('Failed to configure project');
284
+ }
285
+ log.error(error instanceof Error ? error.message : 'Unknown error');
286
+ process.exit(1);
287
+ }
288
+ // Generate project token (unless skipping auth)
289
+ if (!options.skipAuth) {
290
+ await generateProjectTokenWithFeedback(tokenStore, selectedTenant.id, s);
291
+ }
292
+ // Success message for existing project
293
+ p.outro(pc.green('✓ Project initialized successfully!'));
294
+ const nextSteps = [
295
+ selectedTenant.status === 'provisioning' ? 'Wait for CMS provisioning to complete (check status with `payloadcms-figma list`)' : undefined,
296
+ 'Start development server: `pnpm dev`',
297
+ `Access your CMS at: ${pc.cyan(`https://${selectedTenant.domain}`)}`
298
+ ].filter(Boolean);
299
+ p.note(nextSteps.join('\n'), 'Next Steps');
300
+ } else {
301
+ // ===== NEW PROJECT FLOW =====
302
+ // p.log.info('No project detected - Creating New Project')
303
+ // Prompt for path
304
+ const projectPathInput = await p.text({
305
+ initialValue: './',
306
+ message: 'Enter path to create project:',
307
+ placeholder: './my-cms-project',
308
+ validate: (value)=>{
309
+ if (!value) {
310
+ return 'Path is required';
311
+ }
312
+ // Allow relative or absolute paths
313
+ return undefined;
314
+ }
315
+ });
316
+ if (p.isCancel(projectPathInput)) {
317
+ p.cancel('Operation cancelled');
318
+ process.exit(0);
319
+ }
320
+ const projectPath = projectPathInput;
321
+ const fullPath = path.resolve(process.cwd(), projectPath);
322
+ // Get project name from path or prompt
323
+ const projectName = options.name || path.basename(fullPath);
324
+ // Create directory
325
+ try {
326
+ await fs.mkdir(fullPath, {
327
+ recursive: true
328
+ });
329
+ } catch (error) {
330
+ p.log.error(`Failed to create directory: ${error instanceof Error ? error.message : 'Unknown error'}`);
331
+ process.exit(1);
332
+ }
333
+ // Scaffold project
334
+ s.start('Downloading template from GitHub...');
335
+ try {
336
+ await scaffoldProject(fullPath, projectName);
337
+ s.stop(pc.green('✓ Template downloaded'));
338
+ s.start('Installing dependencies...');
339
+ await installDependencies(fullPath, 'pnpm');
340
+ s.stop(pc.green('✓ Dependencies installed'));
341
+ } catch (error) {
342
+ s.stop(pc.red('✗ Failed'));
343
+ log.error(error instanceof Error ? error.message : 'Unknown error');
344
+ process.exit(1);
345
+ }
346
+ // Modify Payload configuration
347
+ s.start('Checking Payload configuration...');
348
+ const modResult = await ensurePayloadFigmaConfig(fullPath, 'pnpm');
349
+ if (!modResult.success) {
350
+ s.stop(pc.red('✗ Configuration check failed'));
351
+ displayManualInstructions(modResult.error || 'Unknown error');
352
+ process.exit(1);
353
+ }
354
+ if (modResult.modified) {
355
+ s.stop(pc.green('✓ Payload configuration updated'));
356
+ if (modResult.changes.length > 0) {
357
+ modResult.changes.forEach((change)=>log.info(pc.dim(` → ${change}`)));
358
+ }
359
+ } else {
360
+ s.stop(pc.green('✓ Payload configuration valid'));
361
+ }
362
+ // Display warnings if any
363
+ if (modResult.warnings && modResult.warnings.length > 0) {
364
+ modResult.warnings.forEach((warning)=>{
365
+ p.log.warn(pc.yellow(`⚠ ${warning}`));
366
+ });
367
+ }
368
+ // Write configuration to new project directory
369
+ if (isDebug()) {
370
+ s.start('Configuring your project...');
371
+ }
372
+ try {
373
+ await writeFigmaConfig({
374
+ domain: selectedTenant.domain,
375
+ tenantId: selectedTenant.id
376
+ }, fullPath);
377
+ if (isDebug()) {
378
+ s.stop(pc.green('✓ Project configured'));
379
+ }
380
+ } catch (error) {
381
+ // Always show failures
382
+ if (isDebug()) {
383
+ s.stop(pc.red('✗ Failed'));
384
+ } else {
385
+ log.error('Failed to configure project');
386
+ }
387
+ log.error(error instanceof Error ? error.message : 'Unknown error');
388
+ process.exit(1);
389
+ }
390
+ // Generate project token (unless skipping auth)
391
+ if (!options.skipAuth) {
392
+ await generateProjectTokenWithFeedback(tokenStore, selectedTenant.id, s);
393
+ }
394
+ // Initialize git repository (after all files including lock file are ready)
395
+ initializeGitRepo(fullPath);
396
+ // Success message for NEW project
397
+ p.log.step(pc.bgGreen(pc.black(' Project created successfully! ')));
398
+ const relativePath = path.relative(process.cwd(), fullPath);
399
+ const nextSteps = [];
400
+ // Only show cd command if user needs to navigate
401
+ if (relativePath && relativePath !== '.') {
402
+ nextSteps.push(`cd ${relativePath}`);
403
+ }
404
+ nextSteps.push('pnpm dev or follow directions in README.md', '', 'Documentation:', '- Getting Started: https://payloadcms.com/docs/getting-started/what-is-payload', '- Configuration: https://payloadcms.com/docs/configuration/overview');
405
+ p.note(nextSteps.join('\n'), 'Next Steps');
406
+ p.outro(pc.green('✓ Done'));
407
+ }
408
+ }
409
+
410
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/commands/init.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport fs from 'fs/promises'\nimport path from 'path'\nimport pc from 'picocolors'\n\nimport type { Tenant } from '../types/config.js'\n\nimport { ControlPlaneError, getTenantDetails } from '../api/control-plane.js'\nimport { getValidAccessToken } from '../auth/oauth-flow.js'\nimport { getValidProjectToken, ProjectTokenError } from '../auth/project-token.js'\nimport { TokenStore } from '../auth/token-store.js'\nimport { hasFigmaConfig, readFigmaConfig, writeFigmaConfig } from '../utils/config.js'\nimport { isDebug } from '../utils/is-debug.js'\nimport * as log from '../utils/log.js'\nimport {\n displayManualInstructions,\n ensurePayloadFigmaConfig,\n} from '../utils/payload-config-modifier.js'\nimport {\n detectPayloadProject,\n hasRequiredDependencies,\n initializeGitRepo,\n installDependencies,\n isInProjectDirectory,\n scaffoldProject,\n validatePayloadVersion,\n} from '../utils/project.js'\nimport { loginCommand } from './login.js'\n\n/**\n * Options for init command\n */\nexport interface InitCommandOptions {\n /** Enable debug mode */\n debug?: boolean\n /** Force reconfiguration of existing project */\n force?: boolean\n /** Tenant ID to use (optional - will prompt if not provided) */\n id?: string\n /** Project name (for scaffolding) */\n name?: string\n /** Skip authentication check (for testing/development) */\n skipAuth?: boolean\n /** Skip prompts and use defaults where possible */\n yes?: boolean\n}\n\n/**\n * Generate and store project token for a tenant\n * Non-blocking - will show warning but not exit on failure\n * Only shows feedback if DEBUG mode is enabled, otherwise runs silently\n *\n * @param tokenStore - Token store instance\n * @param tenantId - Tenant ID to generate token for\n * @param spinner - Clack spinner instance for status updates (only used in debug mode)\n */\nasync function generateProjectTokenWithFeedback(\n tokenStore: TokenStore,\n tenantId: string,\n spinner: ReturnType<typeof p.spinner>,\n): Promise<void> {\n if (isDebug()) {\n spinner.start('Generating project token...')\n }\n\n try {\n const projectToken = await getValidProjectToken(tokenStore, tenantId)\n if (isDebug()) {\n if (projectToken) {\n spinner.stop(pc.green('✓ Project token generated'))\n } else {\n spinner.stop(pc.yellow('⚠ Project token not generated (authentication required)'))\n }\n }\n } catch (error) {\n // Always show failures, even without debug\n if (isDebug()) {\n spinner.stop(pc.yellow('⚠ Project token generation failed'))\n }\n if (error instanceof ProjectTokenError) {\n log.warning(error.message)\n if (isDebug()) {\n p.note(\n 'Project token is used for authenticating to the Content API.\\nYou can continue without it, but may need to regenerate later.',\n 'Note',\n )\n }\n } else {\n log.warning(error instanceof Error ? error.message : 'Unknown error')\n }\n // Don't exit - token generation failure shouldn't block initialization\n }\n}\n\n/**\n * Handle the `init` command\n *\n * Sets up a project by:\n * 1. Checking authentication\n * 2. Detecting/scaffolding Payload project\n * 3. Fetching tenant details\n * 4. Storing configuration\n *\n * @param options - Command options\n */\nexport async function initCommand(options: InitCommandOptions): Promise<void> {\n // Check authentication\n const tokenStore = new TokenStore()\n const s = p.spinner()\n\n let accessToken: string\n\n if (options.skipAuth) {\n // Skip authentication for testing/development\n p.log.warn(pc.yellow('Skipping authentication (--skip-auth mode)'))\n accessToken = 'mock-access-token'\n } else {\n try {\n // Check for valid cached tokens first (no API call needed)\n if (tokenStore.hasValidTokens()) {\n // Use cached token silently - no spinner needed\n accessToken = tokenStore.getAccessToken()!\n } else {\n // Need to refresh or authenticate - show spinner for API call\n s.start('Checking authentication...')\n const token = await getValidAccessToken(tokenStore)\n if (!token) {\n s.stop(pc.yellow('⚠ Not authenticated'))\n p.log.info('Authentication required to continue')\n\n // Prompt user to authenticate now\n const shouldAuth = await p.confirm({\n initialValue: true,\n message: 'Would you like to authenticate now?',\n })\n\n if (p.isCancel(shouldAuth) || !shouldAuth) {\n p.cancel('Operation cancelled')\n process.exit(0)\n }\n\n // Run login command\n await loginCommand()\n\n // Get token after auth\n const newToken = await getValidAccessToken(tokenStore)\n if (!newToken) {\n p.log.error('Authentication failed')\n process.exit(1)\n }\n accessToken = newToken\n p.log.success(pc.green('✓ Authenticated'))\n } else {\n accessToken = token\n s.stop(pc.green('✓ Authenticated'))\n }\n }\n } catch (error) {\n s.stop(pc.red('✗ Authentication failed'))\n log.error(error instanceof Error ? error.message : 'Unknown error')\n p.note('Run `figma auth` to authenticate', 'Tip')\n process.exit(1)\n }\n }\n\n // Check if already initialized\n const hasConfig = await hasFigmaConfig()\n if (hasConfig && !options.force) {\n // Read existing config\n const config = await readFigmaConfig()\n\n if (!config) {\n p.log.error('Failed to read existing configuration')\n process.exit(1)\n }\n\n // Display existing CMS details\n p.log.info(pc.bold('Project already initialized'))\n\n const details = [\n `Tenant ID: ${config.tenantId}`,\n `Domain: ${pc.cyan(`https://${config.domain}`)}`,\n ]\n\n // Optionally fetch live status from Control Plane\n if (!options.skipAuth) {\n try {\n const tenant = await getTenantDetails(accessToken, config.tenantId)\n details.push(`Status: ${tenant.status}`)\n } catch {\n // Ignore errors, just skip live status\n }\n }\n\n p.note(details.join('\\n'), 'CMS Configuration')\n p.note('Use --force to reconfigure this project', 'Tip')\n process.exit(0)\n }\n\n // Step 3: Get CMS ID with retry loop\n log.debug('Configuring Project...')\n\n let tenantId = options.id\n let selectedTenant: Tenant | undefined\n\n while (!selectedTenant) {\n // Prompt for ID if not provided\n if (!tenantId) {\n const input = await p.text({\n message: 'Enter your CMS ID:',\n placeholder: 'tenant_abc123',\n validate: (value) => {\n if (!value || typeof value !== 'string') {\n return 'CMS ID is required'\n }\n return undefined\n },\n })\n\n if (p.isCancel(input)) {\n p.cancel('Operation cancelled')\n process.exit(0)\n }\n\n tenantId = input\n }\n\n // Try to fetch tenant details\n try {\n log.debug('Using mock Control Plane API (no real network calls)')\n selectedTenant = await getTenantDetails(accessToken, tenantId)\n log.debug(`Using: ${selectedTenant.domain}`)\n } catch (error) {\n p.log.error(pc.red('✗ Failed to fetch CMS details'))\n\n // Check if permission error (403)\n if (error instanceof ControlPlaneError && error.statusCode === 403) {\n p.log.error('You do not have permission to access the provided CMS ID. Please try again.')\n } else if (error instanceof ControlPlaneError && error.statusCode === 404) {\n p.log.error('Tenant ID not found. Verify the ID is correct.')\n } else {\n p.log.error(error instanceof Error ? error.message : 'Unknown error')\n }\n\n // Clear tenantId to prompt again\n tenantId = undefined\n\n // Ask if they want to retry\n const shouldRetry = await p.confirm({\n initialValue: true,\n message: 'Would you like to try a different CMS ID?',\n })\n\n if (p.isCancel(shouldRetry) || !shouldRetry) {\n p.cancel('Operation cancelled')\n process.exit(1)\n }\n }\n }\n\n // Step 4: Detect or scaffold Payload project\n // p.log.step(pc.bold('Setting up project...'))\n\n const isInProject = await isInProjectDirectory()\n\n if (isInProject) {\n // ===== EXISTING PROJECT FLOW =====\n log.debug('Project directory detected')\n\n // Detect Payload\n const projectInfo = await detectPayloadProject()\n\n if (projectInfo.hasPayload) {\n // Validate existing Payload version\n if (projectInfo.payloadVersion && !validatePayloadVersion(projectInfo.payloadVersion)) {\n p.log.warn(\n pc.yellow(\n `Payload version ${projectInfo.payloadVersion} detected. Version 3.x is required.`,\n ),\n )\n p.note('Upgrade to Payload 3.x before continuing', 'Action Required')\n process.exit(1)\n }\n\n p.log.success(pc.green(`✓ Payload ${projectInfo.payloadVersion || 'detected'}`))\n\n // Check dependencies\n s.start('Checking dependencies...')\n const hasDeps = await hasRequiredDependencies(process.cwd())\n s.stop(pc.green('✓ Dependencies checked'))\n\n if (!hasDeps) {\n const shouldInstall = await p.confirm({\n initialValue: true,\n message: 'Install dependencies now?',\n })\n\n if (!p.isCancel(shouldInstall) && shouldInstall) {\n s.start('Installing dependencies...')\n await installDependencies(process.cwd(), projectInfo.packageManager || 'pnpm')\n s.stop(pc.green('✓ Dependencies installed'))\n }\n }\n\n s.start('Checking Payload configuration...')\n const modResult = await ensurePayloadFigmaConfig(\n process.cwd(),\n projectInfo.packageManager || 'pnpm',\n )\n\n if (!modResult.success) {\n s.stop(pc.red('✗ Configuration check failed'))\n displayManualInstructions(modResult.error || 'Unknown error')\n process.exit(1)\n }\n\n if (modResult.modified) {\n s.stop(pc.green('✓ Payload configuration updated'))\n if (modResult.changes.length > 0) {\n modResult.changes.forEach((change) => log.info(pc.dim(` → ${change}`)))\n }\n } else {\n s.stop(pc.green('✓ Payload configuration valid'))\n }\n\n // Display warnings if any\n if (modResult.warnings && modResult.warnings.length > 0) {\n modResult.warnings.forEach((warning) => {\n p.log.warn(pc.yellow(`⚠ ${warning}`))\n })\n }\n } else {\n // Has package.json but no Payload - offer to add Payload\n p.log.warn(pc.yellow('⚠ No Payload detected in this project'))\n\n const shouldAddPayload = await p.confirm({\n initialValue: true,\n message: 'Would you like to add Payload to this project?',\n })\n\n if (p.isCancel(shouldAddPayload)) {\n p.cancel('Operation cancelled')\n process.exit(0)\n }\n\n if (!shouldAddPayload) {\n p.log.error('Payload is required to use Figma CMS')\n process.exit(1)\n }\n\n // TODO: Add Payload to existing project (future enhancement)\n p.log.error('Adding Payload to existing projects is not yet supported')\n p.note('Create a new project or manually add Payload dependencies', 'Action Required')\n process.exit(1)\n }\n\n // Write configuration for existing project\n if (isDebug()) {\n s.start('Configuring your project...')\n }\n try {\n await writeFigmaConfig({\n domain: selectedTenant.domain,\n tenantId: selectedTenant.id,\n })\n if (isDebug()) {\n s.stop(pc.green('✓ Project configured'))\n }\n } catch (error) {\n // Always show failures\n if (isDebug()) {\n s.stop(pc.red('✗ Failed'))\n } else {\n log.error('Failed to configure project')\n }\n log.error(error instanceof Error ? error.message : 'Unknown error')\n process.exit(1)\n }\n\n // Generate project token (unless skipping auth)\n if (!options.skipAuth) {\n await generateProjectTokenWithFeedback(tokenStore, selectedTenant.id, s)\n }\n\n // Success message for existing project\n p.outro(pc.green('✓ Project initialized successfully!'))\n\n const nextSteps = [\n selectedTenant.status === 'provisioning'\n ? 'Wait for CMS provisioning to complete (check status with `payloadcms-figma list`)'\n : undefined,\n 'Start development server: `pnpm dev`',\n `Access your CMS at: ${pc.cyan(`https://${selectedTenant.domain}`)}`,\n ].filter(Boolean)\n\n p.note(nextSteps.join('\\n'), 'Next Steps')\n } else {\n // ===== NEW PROJECT FLOW =====\n // p.log.info('No project detected - Creating New Project')\n\n // Prompt for path\n const projectPathInput = await p.text({\n initialValue: './',\n message: 'Enter path to create project:',\n placeholder: './my-cms-project',\n validate: (value) => {\n if (!value) {\n return 'Path is required'\n }\n // Allow relative or absolute paths\n return undefined\n },\n })\n\n if (p.isCancel(projectPathInput)) {\n p.cancel('Operation cancelled')\n process.exit(0)\n }\n\n const projectPath = projectPathInput\n const fullPath = path.resolve(process.cwd(), projectPath)\n\n // Get project name from path or prompt\n const projectName = options.name || path.basename(fullPath)\n\n // Create directory\n try {\n await fs.mkdir(fullPath, { recursive: true })\n } catch (error) {\n p.log.error(\n `Failed to create directory: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n process.exit(1)\n }\n\n // Scaffold project\n s.start('Downloading template from GitHub...')\n try {\n await scaffoldProject(fullPath, projectName)\n s.stop(pc.green('✓ Template downloaded'))\n\n s.start('Installing dependencies...')\n await installDependencies(fullPath, 'pnpm')\n s.stop(pc.green('✓ Dependencies installed'))\n } catch (error) {\n s.stop(pc.red('✗ Failed'))\n log.error(error instanceof Error ? error.message : 'Unknown error')\n process.exit(1)\n }\n\n // Modify Payload configuration\n s.start('Checking Payload configuration...')\n const modResult = await ensurePayloadFigmaConfig(fullPath, 'pnpm')\n\n if (!modResult.success) {\n s.stop(pc.red('✗ Configuration check failed'))\n displayManualInstructions(modResult.error || 'Unknown error')\n process.exit(1)\n }\n\n if (modResult.modified) {\n s.stop(pc.green('✓ Payload configuration updated'))\n if (modResult.changes.length > 0) {\n modResult.changes.forEach((change) => log.info(pc.dim(` → ${change}`)))\n }\n } else {\n s.stop(pc.green('✓ Payload configuration valid'))\n }\n\n // Display warnings if any\n if (modResult.warnings && modResult.warnings.length > 0) {\n modResult.warnings.forEach((warning) => {\n p.log.warn(pc.yellow(`⚠ ${warning}`))\n })\n }\n\n // Write configuration to new project directory\n if (isDebug()) {\n s.start('Configuring your project...')\n }\n try {\n await writeFigmaConfig(\n {\n domain: selectedTenant.domain,\n tenantId: selectedTenant.id,\n },\n fullPath, // Write to new project directory\n )\n if (isDebug()) {\n s.stop(pc.green('✓ Project configured'))\n }\n } catch (error) {\n // Always show failures\n if (isDebug()) {\n s.stop(pc.red('✗ Failed'))\n } else {\n log.error('Failed to configure project')\n }\n log.error(error instanceof Error ? error.message : 'Unknown error')\n process.exit(1)\n }\n\n // Generate project token (unless skipping auth)\n if (!options.skipAuth) {\n await generateProjectTokenWithFeedback(tokenStore, selectedTenant.id, s)\n }\n\n // Initialize git repository (after all files including lock file are ready)\n initializeGitRepo(fullPath)\n\n // Success message for NEW project\n p.log.step(pc.bgGreen(pc.black(' Project created successfully! ')))\n\n const relativePath = path.relative(process.cwd(), fullPath)\n const nextSteps: string[] = []\n\n // Only show cd command if user needs to navigate\n if (relativePath && relativePath !== '.') {\n nextSteps.push(`cd ${relativePath}`)\n }\n\n nextSteps.push(\n 'pnpm dev or follow directions in README.md',\n '',\n 'Documentation:',\n '- Getting Started: https://payloadcms.com/docs/getting-started/what-is-payload',\n '- Configuration: https://payloadcms.com/docs/configuration/overview',\n )\n\n p.note(nextSteps.join('\\n'), 'Next Steps')\n p.outro(pc.green('✓ Done'))\n }\n}\n"],"names":["p","fs","path","pc","ControlPlaneError","getTenantDetails","getValidAccessToken","getValidProjectToken","ProjectTokenError","TokenStore","hasFigmaConfig","readFigmaConfig","writeFigmaConfig","isDebug","log","displayManualInstructions","ensurePayloadFigmaConfig","detectPayloadProject","hasRequiredDependencies","initializeGitRepo","installDependencies","isInProjectDirectory","scaffoldProject","validatePayloadVersion","loginCommand","generateProjectTokenWithFeedback","tokenStore","tenantId","spinner","start","projectToken","stop","green","yellow","error","warning","message","note","Error","initCommand","options","s","accessToken","skipAuth","warn","hasValidTokens","getAccessToken","token","info","shouldAuth","confirm","initialValue","isCancel","cancel","process","exit","newToken","success","red","hasConfig","force","config","bold","details","cyan","domain","tenant","push","status","join","debug","id","selectedTenant","input","text","placeholder","validate","value","undefined","statusCode","shouldRetry","isInProject","projectInfo","hasPayload","payloadVersion","hasDeps","cwd","shouldInstall","packageManager","modResult","modified","changes","length","forEach","change","dim","warnings","shouldAddPayload","outro","nextSteps","filter","Boolean","projectPathInput","projectPath","fullPath","resolve","projectName","name","basename","mkdir","recursive","step","bgGreen","black","relativePath","relative"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=init.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.spec.d.ts","sourceRoot":"","sources":["../../src/commands/init.spec.ts"],"names":[],"mappings":""}