@figma/code-connect 0.1.2 → 0.2.1

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 (106) hide show
  1. package/README.md +123 -25
  2. package/dist/cli.js +7 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/connect.d.ts +15 -0
  5. package/dist/commands/connect.d.ts.map +1 -1
  6. package/dist/commands/connect.js +137 -76
  7. package/dist/commands/connect.js.map +1 -1
  8. package/dist/common/__test__/project.test.d.ts +2 -0
  9. package/dist/common/__test__/project.test.d.ts.map +1 -0
  10. package/dist/common/__test__/project.test.js +14 -0
  11. package/dist/common/__test__/project.test.js.map +1 -0
  12. package/dist/common/api.d.ts +56 -2
  13. package/dist/common/api.d.ts.map +1 -1
  14. package/dist/common/external.d.ts +6 -3
  15. package/dist/common/external.d.ts.map +1 -1
  16. package/dist/common/external.js +13 -1
  17. package/dist/common/external.js.map +1 -1
  18. package/dist/common/figma_connect.d.ts +10 -8
  19. package/dist/common/figma_connect.d.ts.map +1 -1
  20. package/dist/common/intrinsics.d.ts +38 -6
  21. package/dist/common/intrinsics.d.ts.map +1 -1
  22. package/dist/common/intrinsics.js +160 -26
  23. package/dist/common/intrinsics.js.map +1 -1
  24. package/dist/common/logging.d.ts +9 -0
  25. package/dist/common/logging.d.ts.map +1 -1
  26. package/dist/common/logging.js +21 -1
  27. package/dist/common/logging.js.map +1 -1
  28. package/dist/common/updates.d.ts +4 -0
  29. package/dist/common/updates.d.ts.map +1 -0
  30. package/dist/common/updates.js +87 -0
  31. package/dist/common/updates.js.map +1 -0
  32. package/dist/connect/create.d.ts +5 -1
  33. package/dist/connect/create.d.ts.map +1 -1
  34. package/dist/connect/create.js +55 -69
  35. package/dist/connect/create.js.map +1 -1
  36. package/dist/connect/delete_docs.d.ts.map +1 -1
  37. package/dist/connect/delete_docs.js +1 -4
  38. package/dist/connect/delete_docs.js.map +1 -1
  39. package/dist/connect/figma_rest_api.d.ts +5 -0
  40. package/dist/connect/figma_rest_api.d.ts.map +1 -1
  41. package/dist/connect/figma_rest_api.js +10 -1
  42. package/dist/connect/figma_rest_api.js.map +1 -1
  43. package/dist/connect/helpers.d.ts +1 -1
  44. package/dist/connect/helpers.d.ts.map +1 -1
  45. package/dist/connect/helpers.js +6 -5
  46. package/dist/connect/helpers.js.map +1 -1
  47. package/dist/connect/parser_executable_types.d.ts +297 -0
  48. package/dist/connect/parser_executable_types.d.ts.map +1 -0
  49. package/dist/connect/parser_executable_types.js +108 -0
  50. package/dist/connect/parser_executable_types.js.map +1 -0
  51. package/dist/connect/parser_executables.d.ts +8 -0
  52. package/dist/connect/parser_executables.d.ts.map +1 -0
  53. package/dist/connect/parser_executables.js +132 -0
  54. package/dist/connect/parser_executables.js.map +1 -0
  55. package/dist/connect/project.d.ts +137 -0
  56. package/dist/connect/project.d.ts.map +1 -0
  57. package/dist/connect/project.js +411 -0
  58. package/dist/connect/project.js.map +1 -0
  59. package/dist/connect/upload.d.ts.map +1 -1
  60. package/dist/connect/upload.js +1 -4
  61. package/dist/connect/upload.js.map +1 -1
  62. package/dist/connect/validation.d.ts +6 -1
  63. package/dist/connect/validation.d.ts.map +1 -1
  64. package/dist/connect/validation.js +23 -18
  65. package/dist/connect/validation.js.map +1 -1
  66. package/dist/connect/wizard/helpers.d.ts +7 -0
  67. package/dist/connect/wizard/helpers.d.ts.map +1 -0
  68. package/dist/connect/wizard/helpers.js +55 -0
  69. package/dist/connect/wizard/helpers.js.map +1 -0
  70. package/dist/connect/wizard/run_wizard.d.ts +3 -0
  71. package/dist/connect/wizard/run_wizard.d.ts.map +1 -0
  72. package/dist/connect/wizard/run_wizard.js +480 -0
  73. package/dist/connect/wizard/run_wizard.js.map +1 -0
  74. package/dist/parser_scripts/get_file_if_exists.d.ts +2 -0
  75. package/dist/parser_scripts/get_file_if_exists.d.ts.map +1 -0
  76. package/dist/parser_scripts/get_file_if_exists.js +10 -0
  77. package/dist/parser_scripts/get_file_if_exists.js.map +1 -0
  78. package/dist/parser_scripts/get_gradlew_path.d.ts +3 -0
  79. package/dist/parser_scripts/get_gradlew_path.d.ts.map +1 -0
  80. package/dist/parser_scripts/get_gradlew_path.js +24 -0
  81. package/dist/parser_scripts/get_gradlew_path.js.map +1 -0
  82. package/dist/parser_scripts/get_swift_parser_dir.d.ts +2 -0
  83. package/dist/parser_scripts/get_swift_parser_dir.d.ts.map +1 -0
  84. package/dist/parser_scripts/get_swift_parser_dir.js +93 -0
  85. package/dist/parser_scripts/get_swift_parser_dir.js.map +1 -0
  86. package/dist/react/create.d.ts +4 -0
  87. package/dist/react/create.d.ts.map +1 -0
  88. package/dist/react/create.js +132 -0
  89. package/dist/react/create.js.map +1 -0
  90. package/dist/react/parser.d.ts +6 -15
  91. package/dist/react/parser.d.ts.map +1 -1
  92. package/dist/react/parser.js +55 -62
  93. package/dist/react/parser.js.map +1 -1
  94. package/dist/react/parser_template_helpers.d.ts +21 -0
  95. package/dist/react/parser_template_helpers.d.ts.map +1 -1
  96. package/dist/react/parser_template_helpers.js +107 -43
  97. package/dist/react/parser_template_helpers.js.map +1 -1
  98. package/dist/storybook/convert.d.ts +2 -2
  99. package/dist/storybook/convert.d.ts.map +1 -1
  100. package/dist/storybook/convert.js +6 -4
  101. package/dist/storybook/convert.js.map +1 -1
  102. package/package.json +36 -11
  103. package/dist/common/project.d.ts +0 -94
  104. package/dist/common/project.d.ts.map +0 -1
  105. package/dist/common/project.js +0 -198
  106. package/dist/common/project.js.map +0 -1
@@ -0,0 +1,480 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.runWizard = void 0;
30
+ const connect_1 = require("../../commands/connect");
31
+ const prompts_1 = __importDefault(require("prompts"));
32
+ const fs_1 = __importDefault(require("fs"));
33
+ const helpers_1 = require("../helpers");
34
+ const figma_rest_api_1 = require("../figma_rest_api");
35
+ const logging_1 = require("../../common/logging");
36
+ const axios_1 = __importStar(require("axios"));
37
+ const project_1 = require("../../connect/project");
38
+ const validation_1 = require("../validation");
39
+ const chalk_1 = __importDefault(require("chalk"));
40
+ const path_1 = __importDefault(require("path"));
41
+ const create_1 = require("../create");
42
+ const create_2 = require("../../react/create");
43
+ const boxen_1 = __importDefault(require("boxen"));
44
+ const fast_fuzzy_1 = require("fast-fuzzy");
45
+ const parser_1 = require("../../react/parser");
46
+ const helpers_2 = require("./helpers");
47
+ const NONE = '(None)';
48
+ const DELIMITERS_REGEX = /[\s-_]/g;
49
+ async function fetchTopLevelComponentsFromFile({ accessToken, figmaUrl, }) {
50
+ // TODO enter create flow if node-id specified
51
+ const fileKey = (0, helpers_1.parseFileKey)(figmaUrl);
52
+ const apiUrl = (0, figma_rest_api_1.getApiUrl)(figmaUrl ?? '') + `/files/${fileKey}`;
53
+ try {
54
+ logging_1.logger.info('Fetching component information from Figma...');
55
+ const response = await axios_1.default.get(apiUrl, {
56
+ headers: {
57
+ 'X-Figma-Token': accessToken,
58
+ 'Content-Type': 'application/json',
59
+ },
60
+ });
61
+ if (response.status === 200) {
62
+ return (0, helpers_1.findComponentsInDocument)(response.data.document).filter(({ id }) => id in response.data.componentSets || !response.data.components[id].componentSetId);
63
+ }
64
+ else {
65
+ logging_1.logger.error(`Failed to fetch components from Figma with status: ${response.status}`);
66
+ logging_1.logger.debug('Failed to fetch components from Figma with Body:', response.data);
67
+ }
68
+ }
69
+ catch (err) {
70
+ if ((0, axios_1.isAxiosError)(err)) {
71
+ if (err.response) {
72
+ logging_1.logger.error(`Failed to fetch components from Figma (${err.code}): ${err.response?.status} ${err.response?.data?.err ?? err.response?.data?.message}`);
73
+ }
74
+ else {
75
+ logging_1.logger.error(`Failed to fetch components from Figma: ${err.message}`);
76
+ }
77
+ logging_1.logger.debug(JSON.stringify(err.response?.data));
78
+ }
79
+ process.exit(1);
80
+ }
81
+ }
82
+ async function askQuestionWithExitConfirmation(question) {
83
+ while (true) {
84
+ const answers = await (0, prompts_1.default)(question, { onCancel: () => process.exit(0) });
85
+ if (Object.keys(answers).length) {
86
+ logging_1.logger.info('');
87
+ return answers;
88
+ }
89
+ }
90
+ }
91
+ function formatComponentTitle(componentName, path, pad) {
92
+ const nameLabel = `${chalk_1.default.dim('Figma component:')} ${componentName.padEnd(pad, ' ')}`;
93
+ const linkedLabel = `↔️ ${path ?? '-'}`;
94
+ return `${nameLabel} ${linkedLabel}`;
95
+ }
96
+ function getComponentChoicesForPrompt(components, linkedNodeIdsToPaths, connectedComponentsMappings) {
97
+ const longestNameLength = [...components, ...connectedComponentsMappings].reduce((longest, component) => Math.max(longest, 'name' in component ? component.name.length : component.componentName.length), 0);
98
+ const nameCompare = (a, b) => a.name.localeCompare(b.name);
99
+ const linkedComponents = components.filter((c) => !!linkedNodeIdsToPaths[c.id]).sort(nameCompare);
100
+ const unlinkedComponents = components.filter((c) => !linkedNodeIdsToPaths[c.id]).sort(nameCompare);
101
+ const formatComponentChoice = (c) => ({
102
+ title: formatComponentTitle(c.name, linkedNodeIdsToPaths[c.id], longestNameLength),
103
+ value: c.id,
104
+ description: `${chalk_1.default.green('Edit link')}`,
105
+ });
106
+ return [
107
+ ...linkedComponents.map(formatComponentChoice),
108
+ ...unlinkedComponents.map(formatComponentChoice),
109
+ ...connectedComponentsMappings.map((connectedComponent) => ({
110
+ title: formatComponentTitle(connectedComponent.componentName, connectedComponent.path, longestNameLength),
111
+ disabled: true,
112
+ })),
113
+ ];
114
+ }
115
+ function getUnconnectedComponentChoices(componentPaths) {
116
+ return [
117
+ {
118
+ title: NONE,
119
+ value: NONE,
120
+ },
121
+ ...componentPaths.map((path) => {
122
+ return {
123
+ title: path,
124
+ value: path,
125
+ };
126
+ }),
127
+ ];
128
+ }
129
+ async function runManualLinking({ unconnectedComponents, linkedNodeIdsToPaths, componentPaths, connectedComponentsMappings, }) {
130
+ while (true) {
131
+ // Don't show exit confirmation as we're relying on esc behavior
132
+ const { nodeId } = await (0, prompts_1.default)({
133
+ type: 'select',
134
+ name: 'nodeId',
135
+ message: `Select a link to edit (Press ${chalk_1.default.green('esc')} when you're ready to continue on)`,
136
+ choices: getComponentChoicesForPrompt(unconnectedComponents, linkedNodeIdsToPaths, connectedComponentsMappings),
137
+ warn: 'This component already has a local Code Connect file.',
138
+ hint: ' ',
139
+ });
140
+ if (!nodeId) {
141
+ return;
142
+ }
143
+ const pathChoices = getUnconnectedComponentChoices(componentPaths);
144
+ const { pathToComponent } = await (0, prompts_1.default)({
145
+ type: 'autocomplete',
146
+ name: 'pathToComponent',
147
+ message: 'Choose a path to your code component (type to filter results)',
148
+ choices: pathChoices,
149
+ // default suggest uses .startsWith(input) which isn't very useful for full paths
150
+ suggest: (input, choices) => Promise.resolve(choices.filter((i) => i.value.toUpperCase().includes(input.toUpperCase()))),
151
+ // preselect if editing an existing choice
152
+ initial: nodeId in linkedNodeIdsToPaths
153
+ ? pathChoices.findIndex(({ value }) => value === linkedNodeIdsToPaths[nodeId])
154
+ : 0,
155
+ });
156
+ if (pathToComponent) {
157
+ if (pathToComponent === NONE) {
158
+ delete linkedNodeIdsToPaths[nodeId];
159
+ }
160
+ else {
161
+ linkedNodeIdsToPaths[nodeId] = pathToComponent;
162
+ }
163
+ }
164
+ }
165
+ }
166
+ async function runManualLinkingWithConfirmation(manualLinkingArgs) {
167
+ let outDir = manualLinkingArgs.cmd.outDir || null;
168
+ let hasAskedOutDirQuestion = false;
169
+ while (true) {
170
+ await runManualLinking(manualLinkingArgs);
171
+ if (!outDir && !hasAskedOutDirQuestion) {
172
+ const { outputDirectory } = await askQuestionWithExitConfirmation({
173
+ type: 'text',
174
+ name: 'outputDirectory',
175
+ message: `What directory should Code Connect files be created in? (Press ${chalk_1.default.green('enter')} to co-locate your files alongside your component files)`,
176
+ });
177
+ hasAskedOutDirQuestion = true;
178
+ outDir = outputDirectory;
179
+ }
180
+ const linkedNodes = Object.keys(manualLinkingArgs.linkedNodeIdsToPaths);
181
+ if (!linkedNodes.length) {
182
+ const { confirmation } = await askQuestionWithExitConfirmation({
183
+ type: 'select',
184
+ name: 'confirmation',
185
+ message: `No Code Connect files linked. Are you sure you want to exit?`,
186
+ choices: [
187
+ {
188
+ title: 'Back to edit',
189
+ value: 'backToEdit',
190
+ },
191
+ {
192
+ title: 'Exit',
193
+ value: 'exit',
194
+ },
195
+ ],
196
+ });
197
+ if (confirmation === 'exit') {
198
+ process.exit(0);
199
+ }
200
+ }
201
+ else {
202
+ const { confirmation } = await askQuestionWithExitConfirmation({
203
+ type: 'select',
204
+ name: 'confirmation',
205
+ message: `You're ready to create ${chalk_1.default.green(linkedNodes.length)} Code Connect file${linkedNodes.length == 1 ? '' : 's'}. Continue?`,
206
+ choices: [
207
+ {
208
+ title: 'Create files',
209
+ value: 'create',
210
+ },
211
+ {
212
+ title: 'Back to editing',
213
+ value: 'backToEdit',
214
+ },
215
+ ],
216
+ });
217
+ if (confirmation !== 'backToEdit') {
218
+ return outDir;
219
+ }
220
+ }
221
+ }
222
+ }
223
+ /**
224
+ * Autolinks components/paths based on fuzzy matching of name and writes mappings to linkedNodeIdsToPaths.
225
+ *
226
+ * Matching is done by fast-fuzzy
227
+ */
228
+ function autoLinkComponents({ unconnectedComponents, linkedNodeIdsToPaths, componentPaths, }) {
229
+ const matchableNamesToNodeIdsMap = unconnectedComponents.reduce((acc, curr) => {
230
+ const matchableName = curr.name;
231
+ acc[matchableName] = curr.id;
232
+ return acc;
233
+ }, {});
234
+ const searchSpace = Object.keys(matchableNamesToNodeIdsMap);
235
+ const searcher = new fast_fuzzy_1.Searcher(searchSpace);
236
+ componentPaths.forEach((componentPath) => {
237
+ const { name } = path_1.default.parse(componentPath);
238
+ const matchableName = name;
239
+ const results = searcher.search(matchableName, { returnMatchData: true });
240
+ const bestMatch = results[0];
241
+ if (bestMatch && bestMatch.score > 0.9 && bestMatch.item in matchableNamesToNodeIdsMap) {
242
+ linkedNodeIdsToPaths[matchableNamesToNodeIdsMap[bestMatch.item]] = componentPath;
243
+ }
244
+ });
245
+ }
246
+ // returns ES-style import path from given system path
247
+ function formatImportPath(systemPath) {
248
+ // use forward slashes for import paths
249
+ let formattedImportPath = systemPath.replaceAll(path_1.default.sep, '/');
250
+ // prefix current dir paths with ./ (node path does not)
251
+ formattedImportPath = formattedImportPath.startsWith('.')
252
+ ? formattedImportPath
253
+ : `./${formattedImportPath}`;
254
+ // assume not using ESM imports
255
+ return formattedImportPath.replace(/\.(jsx|tsx)$/, '');
256
+ }
257
+ async function createCodeConnectFiles({ linkedNodeIdsToPaths, figmaFileUrl, unconnectedComponentsMap, outDir: outDirArg, }) {
258
+ for (const [nodeId, filePath] of Object.entries(linkedNodeIdsToPaths)) {
259
+ const urlObj = new URL(figmaFileUrl);
260
+ urlObj.search = '';
261
+ urlObj.searchParams.append('node-id', nodeId);
262
+ const { name } = path_1.default.parse(filePath);
263
+ const componentName = name.split('.')[0];
264
+ const outDir = outDirArg || path_1.default.dirname(filePath);
265
+ const outFile = path_1.default.join(outDir, `${name}.figma.tsx`);
266
+ const payload = {
267
+ mode: 'CREATE',
268
+ destinationDir: path_1.default.dirname(filePath),
269
+ destinationFile: outFile,
270
+ component: {
271
+ figmaNodeUrl: urlObj.toString(),
272
+ normalizedName: (0, create_1.normalizeComponentName)(name),
273
+ ...unconnectedComponentsMap[nodeId],
274
+ },
275
+ config: {},
276
+ };
277
+ await (0, create_2.createReactCodeConnect)(payload);
278
+ logging_1.logger.info((0, logging_1.success)(`Created ${outFile}`));
279
+ }
280
+ }
281
+ function convertRemoteFileUrlToRelativePath({ remoteFileUrl, gitRootPath, componentDirectory, }) {
282
+ if (!gitRootPath) {
283
+ return null;
284
+ }
285
+ const pathWithinRepo = remoteFileUrl.replace(new RegExp(`.*?(tree|blob)/[^/]*`), '');
286
+ if (!pathWithinRepo) {
287
+ return null;
288
+ }
289
+ const absPath = path_1.default.join(gitRootPath, pathWithinRepo);
290
+ return path_1.default.relative(componentDirectory, absPath);
291
+ }
292
+ async function getUnconnectedComponentsAndConnectedComponentMappings(cmd, figmaFileUrl, componentsFromFile, componentDirectory, projectInfo) {
293
+ const dir = (0, connect_1.getDir)(cmd);
294
+ const fileKey = (0, helpers_1.parseFileKey)(figmaFileUrl);
295
+ const codeConnectObjects = await (0, connect_1.getCodeConnectObjects)(dir, cmd, projectInfo, true);
296
+ const connectedNodeIdsInFileToCodeConnectObjectMap = codeConnectObjects.reduce((map, codeConnectJson) => {
297
+ const parsedNode = (0, validation_1.parseFigmaNode)(cmd, codeConnectJson, true);
298
+ if (parsedNode && parsedNode.fileKey === fileKey) {
299
+ map[parsedNode.nodeId] = codeConnectJson;
300
+ }
301
+ return map;
302
+ }, {});
303
+ const unconnectedComponents = [];
304
+ const connectedComponentsMappings = [];
305
+ const gitRootPath = (0, project_1.getGitRepoAbsolutePath)(componentDirectory);
306
+ componentsFromFile.map((c) => {
307
+ if (c.id in connectedNodeIdsInFileToCodeConnectObjectMap) {
308
+ const cc = connectedNodeIdsInFileToCodeConnectObjectMap[c.id];
309
+ const relativePath = convertRemoteFileUrlToRelativePath({
310
+ remoteFileUrl: cc.source,
311
+ gitRootPath,
312
+ componentDirectory,
313
+ });
314
+ connectedComponentsMappings.push({
315
+ componentName: c.name,
316
+ path: relativePath ?? '(Unknown)',
317
+ });
318
+ }
319
+ else {
320
+ unconnectedComponents.push(c);
321
+ }
322
+ });
323
+ return {
324
+ unconnectedComponents,
325
+ connectedComponentsMappings,
326
+ };
327
+ }
328
+ async function askForTopLevelDirectoryOrDetermineFromConfig({ dir, hasConfigFile, config, }) {
329
+ let dirToSearchForFiles = dir;
330
+ while (true) {
331
+ if (!hasConfigFile) {
332
+ const { componentDirectory } = await askQuestionWithExitConfirmation({
333
+ type: 'text',
334
+ message: `Which top-level directory contains the code to be connected to your Figma design system? (Press ${chalk_1.default.green('enter')} to use current directory)`,
335
+ name: 'componentDirectory',
336
+ format: (val) => val || process.cwd(),
337
+ validate: (value) => {
338
+ if (!value) {
339
+ return true;
340
+ }
341
+ const isValidDir = fs_1.default.existsSync(value) && fs_1.default.lstatSync(value).isDirectory();
342
+ if (!isValidDir)
343
+ return 'Please enter a valid directory path.';
344
+ return true;
345
+ },
346
+ });
347
+ dirToSearchForFiles = componentDirectory;
348
+ }
349
+ const projectInfo = (0, project_1.getReactProjectInfo)((await (0, project_1.getProjectInfoFromConfig)(dirToSearchForFiles, config)));
350
+ const componentPaths = projectInfo.files.filter((f) => !(0, parser_1.isFigmaConnectFile)(projectInfo.tsProgram, f));
351
+ if (!componentPaths.length) {
352
+ if (hasConfigFile) {
353
+ logging_1.logger.error('No jsx/tsx files found. Please update the include/exclude globs in your config file and try again.');
354
+ process.exit(1);
355
+ }
356
+ else {
357
+ logging_1.logger.error('No jsx/tsx files could be found in that directory. Please enter a different directory.');
358
+ }
359
+ }
360
+ else {
361
+ return {
362
+ projectInfo,
363
+ dirToSearchForFiles,
364
+ componentPaths,
365
+ };
366
+ }
367
+ }
368
+ }
369
+ async function runWizard(cmd) {
370
+ logging_1.logger.warn('The Code Connect assistant is under construction! Please use one of the other commands.');
371
+ logging_1.logger.info((0, boxen_1.default)(`${chalk_1.default.bold(`Welcome to ${chalk_1.default.green('Code Connect')}`)}\n\n` +
372
+ `Follow a few simple steps to connect your Figma design system to your codebase.\n` +
373
+ `When you're done, you'll be able to see your component code while inspecting in\n` +
374
+ `Figma's Dev Mode.\n\n` +
375
+ `Learn more at ${chalk_1.default.cyan('https://www.figma.com/developers/code-connect')}.\n\n` +
376
+ `${chalk_1.default.red.bold('Note: ')}This process will create and modify Code Connect files. Make sure you've\n` +
377
+ `committed necessary changes in your codebase first.`, {
378
+ padding: 1,
379
+ margin: 1,
380
+ textAlignment: 'center',
381
+ }));
382
+ const dir = (0, connect_1.getDir)(cmd);
383
+ const { hasConfigFile, config } = await (0, project_1.parseOrDetermineConfig)(dir, cmd.config);
384
+ if (config.parser !== 'react' && config.parser !== '__unit_test__') {
385
+ logging_1.logger.error('This flow currently only supports React projects. Please use one of the other commands.');
386
+ process.exit(1);
387
+ }
388
+ let accessToken = (0, connect_1.getAccessToken)(cmd);
389
+ if (!accessToken) {
390
+ const { accessTokenEntered } = await askQuestionWithExitConfirmation({
391
+ type: 'text',
392
+ message: `No access token detected. Visit https://help.figma.com/hc/en-us/articles/8085703771159-Manage-personal-access-tokens
393
+ for instructions on how to do this, ensuring you have both the File Content and Code Connect Write scopes \n\n Please enter your access token:`,
394
+ name: 'accessTokenEntered',
395
+ validate: (value) => {
396
+ if (!value) {
397
+ logging_1.logger.info('');
398
+ logging_1.logger.info('');
399
+ logging_1.logger.info('No access token entered. Exiting...');
400
+ process.exit(1);
401
+ }
402
+ return true;
403
+ },
404
+ });
405
+ accessToken = accessTokenEntered;
406
+ }
407
+ logging_1.logger.info('');
408
+ const { dirToSearchForFiles, projectInfo, componentPaths } = await askForTopLevelDirectoryOrDetermineFromConfig({
409
+ dir,
410
+ hasConfigFile,
411
+ config,
412
+ });
413
+ const { figmaFileUrl } = await askQuestionWithExitConfirmation({
414
+ type: 'text',
415
+ message: 'What is the URL of the Figma file containing your design system library?',
416
+ name: 'figmaFileUrl',
417
+ });
418
+ const componentsFromFile = await fetchTopLevelComponentsFromFile({
419
+ accessToken,
420
+ figmaUrl: figmaFileUrl,
421
+ });
422
+ if (!componentsFromFile) {
423
+ process.exit(1);
424
+ }
425
+ if (!hasConfigFile) {
426
+ const { createConfigFile } = await askQuestionWithExitConfirmation({
427
+ type: 'select',
428
+ name: 'createConfigFile',
429
+ message: "It looks like you don't have a Code Connect config file. Would you like to generate one now from your provided answers?",
430
+ choices: [
431
+ {
432
+ title: 'Yes',
433
+ value: 'yes',
434
+ },
435
+ {
436
+ title: 'No',
437
+ value: 'no',
438
+ },
439
+ ],
440
+ });
441
+ if (createConfigFile === 'yes') {
442
+ await (0, helpers_2.createCodeConnectConfig)({ dir, dirToSearchForFiles, config });
443
+ }
444
+ }
445
+ const linkedNodeIdsToPaths = {};
446
+ const { unconnectedComponents, connectedComponentsMappings } = await getUnconnectedComponentsAndConnectedComponentMappings(cmd, figmaFileUrl, componentsFromFile, dirToSearchForFiles, projectInfo);
447
+ autoLinkComponents({
448
+ unconnectedComponents,
449
+ linkedNodeIdsToPaths,
450
+ componentPaths,
451
+ });
452
+ logging_1.logger.info((0, boxen_1.default)(`${chalk_1.default.bold(`Connecting your components`)}\n\n` +
453
+ `${chalk_1.default.green(`${chalk_1.default.bold(Object.keys(linkedNodeIdsToPaths).length)} ${Object.keys(linkedNodeIdsToPaths).length === 1 ? 'component was automatically matched based on its name' : 'components were automatically matched based on their names'}`)}\n` +
454
+ `${chalk_1.default.yellow(`${chalk_1.default.bold(unconnectedComponents.length)} ${unconnectedComponents.length === 1 ? 'component has not been matched' : 'components have not been matched'}`)}\n\n` +
455
+ `Match up Figma components with their code definitions. When you're finished, you\n` +
456
+ `can specify the directory you want to create Code Connect files in.`, {
457
+ padding: 1,
458
+ margin: 1,
459
+ textAlignment: 'center',
460
+ }));
461
+ const outDir = await runManualLinkingWithConfirmation({
462
+ unconnectedComponents,
463
+ connectedComponentsMappings,
464
+ linkedNodeIdsToPaths,
465
+ componentPaths,
466
+ cmd,
467
+ });
468
+ const unconnectedComponentsMap = unconnectedComponents.reduce((map, component) => {
469
+ map[component.id] = component;
470
+ return map;
471
+ }, {});
472
+ await createCodeConnectFiles({
473
+ linkedNodeIdsToPaths,
474
+ unconnectedComponentsMap,
475
+ figmaFileUrl,
476
+ outDir,
477
+ });
478
+ }
479
+ exports.runWizard = runWizard;
480
+ //# sourceMappingURL=run_wizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run_wizard.js","sourceRoot":"","sources":["../../../src/connect/wizard/run_wizard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function getFileIfExists(cwd: string, search: string): string;
2
+ //# sourceMappingURL=get_file_if_exists.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_file_if_exists.d.ts","sourceRoot":"","sources":["../../src/parser_scripts/get_file_if_exists.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAE1D"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFileIfExists = void 0;
4
+ const child_process_1 = require("child_process");
5
+ // Check if a file matching a search pattern exists, and return the first match if so
6
+ function getFileIfExists(cwd, search) {
7
+ return (0, child_process_1.execSync)(`find . -maxdepth 1 -name ${search}`, { cwd }).toString().trim().split('\n')[0];
8
+ }
9
+ exports.getFileIfExists = getFileIfExists;
10
+ //# sourceMappingURL=get_file_if_exists.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_file_if_exists.js","sourceRoot":"","sources":["../../src/parser_scripts/get_file_if_exists.ts"],"names":[],"mappings":";;;AAAA,iDAAwC;AAExC,qFAAqF;AACrF,SAAgB,eAAe,CAAC,GAAW,EAAE,MAAc;IACzD,OAAO,IAAA,wBAAQ,EAAC,4BAA4B,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AACjG,CAAC;AAFD,0CAEC"}
@@ -0,0 +1,3 @@
1
+ export declare function getGradleWrapperPath(cwd: string, gradleWrapperPath?: string): Promise<string>;
2
+ export declare function getGradleWrapperExecutablePath(gradleWrapperDir: string): string;
3
+ //# sourceMappingURL=get_gradlew_path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_gradlew_path.d.ts","sourceRoot":"","sources":["../../src/parser_scripts/get_gradlew_path.ts"],"names":[],"mappings":"AAKA,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,mBASjF;AAGD,wBAAgB,8BAA8B,CAAC,gBAAgB,EAAE,MAAM,UAEtE"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getGradleWrapperExecutablePath = exports.getGradleWrapperPath = void 0;
7
+ const logging_1 = require("../common/logging");
8
+ const get_file_if_exists_1 = require("./get_file_if_exists");
9
+ const path_1 = __importDefault(require("path"));
10
+ // Get the enclosing directory of the gradle wrapper
11
+ async function getGradleWrapperPath(cwd, gradleWrapperPath) {
12
+ const gradlePath = gradleWrapperPath || (0, get_file_if_exists_1.getFileIfExists)(cwd, 'gradlew');
13
+ if (!gradlePath) {
14
+ (0, logging_1.exitWithError)('Could not find the location of the gradlew in your project. You can specify the location of your gradlew file with the `gradleWrapperPath` config option.');
15
+ }
16
+ return path_1.default.dirname(gradlePath);
17
+ }
18
+ exports.getGradleWrapperPath = getGradleWrapperPath;
19
+ // Get the path for the executable
20
+ function getGradleWrapperExecutablePath(gradleWrapperDir) {
21
+ return gradleWrapperDir === '.' ? './gradlew' : path_1.default.join(gradleWrapperDir, 'gradlew');
22
+ }
23
+ exports.getGradleWrapperExecutablePath = getGradleWrapperExecutablePath;
24
+ //# sourceMappingURL=get_gradlew_path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_gradlew_path.js","sourceRoot":"","sources":["../../src/parser_scripts/get_gradlew_path.ts"],"names":[],"mappings":";;;;;;AAAA,+CAAiD;AACjD,6DAAsD;AACtD,gDAAuB;AAEvB,oDAAoD;AAC7C,KAAK,UAAU,oBAAoB,CAAC,GAAW,EAAE,iBAA0B;IAChF,MAAM,UAAU,GAAG,iBAAiB,IAAI,IAAA,oCAAe,EAAC,GAAG,EAAE,SAAS,CAAC,CAAA;IACvE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAA,uBAAa,EACX,2JAA2J,CAC5J,CAAA;IACH,CAAC;IAED,OAAO,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;AACjC,CAAC;AATD,oDASC;AAED,kCAAkC;AAClC,SAAgB,8BAA8B,CAAC,gBAAwB;IACrE,OAAO,gBAAgB,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAA;AACxF,CAAC;AAFD,wEAEC"}
@@ -0,0 +1,2 @@
1
+ export declare function getSwiftParserDir(cwd: string, xcodeprojPath?: string): Promise<string>;
2
+ //# sourceMappingURL=get_swift_parser_dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_swift_parser_dir.d.ts","sourceRoot":"","sources":["../../src/parser_scripts/get_swift_parser_dir.ts"],"names":[],"mappings":"AAYA,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,mBA2F1E"}