@figma/code-connect 1.0.1 → 1.0.3

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 (76) hide show
  1. package/README.md +21 -5
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/connect.d.ts +1 -0
  4. package/dist/commands/connect.d.ts.map +1 -1
  5. package/dist/commands/connect.js +14 -2
  6. package/dist/commands/connect.js.map +1 -1
  7. package/dist/common/updates.d.ts +4 -1
  8. package/dist/common/updates.d.ts.map +1 -1
  9. package/dist/common/updates.js +10 -2
  10. package/dist/common/updates.js.map +1 -1
  11. package/dist/connect/parser_executables.d.ts.map +1 -1
  12. package/dist/connect/parser_executables.js +1 -1
  13. package/dist/connect/parser_executables.js.map +1 -1
  14. package/dist/connect/project.d.ts +4 -0
  15. package/dist/connect/project.d.ts.map +1 -1
  16. package/dist/connect/project.js +33 -8
  17. package/dist/connect/project.js.map +1 -1
  18. package/dist/connect/upload.d.ts.map +1 -1
  19. package/dist/connect/upload.js +12 -1
  20. package/dist/connect/upload.js.map +1 -1
  21. package/dist/connect/wizard/__test__/autolinking/autolinking.test.d.ts +2 -0
  22. package/dist/connect/wizard/__test__/autolinking/autolinking.test.d.ts.map +1 -0
  23. package/dist/connect/wizard/__test__/autolinking/autolinking.test.js +49 -0
  24. package/dist/connect/wizard/__test__/autolinking/autolinking.test.js.map +1 -0
  25. package/dist/connect/wizard/__test__/autolinking/test_cases/backstage.d.ts +4 -0
  26. package/dist/connect/wizard/__test__/autolinking/test_cases/backstage.d.ts.map +1 -0
  27. package/dist/connect/wizard/__test__/autolinking/test_cases/backstage.js +306 -0
  28. package/dist/connect/wizard/__test__/autolinking/test_cases/backstage.js.map +1 -0
  29. package/dist/connect/wizard/__test__/autolinking/test_cases/polaris_react.d.ts +4 -0
  30. package/dist/connect/wizard/__test__/autolinking/test_cases/polaris_react.d.ts.map +1 -0
  31. package/dist/connect/wizard/__test__/autolinking/test_cases/polaris_react.js +982 -0
  32. package/dist/connect/wizard/__test__/autolinking/test_cases/polaris_react.js.map +1 -0
  33. package/dist/connect/wizard/__test__/autolinking/test_cases/vitamin_web.d.ts +4 -0
  34. package/dist/connect/wizard/__test__/autolinking/test_cases/vitamin_web.d.ts.map +1 -0
  35. package/dist/connect/wizard/__test__/autolinking/test_cases/vitamin_web.js +463 -0
  36. package/dist/connect/wizard/__test__/autolinking/test_cases/vitamin_web.js.map +1 -0
  37. package/dist/connect/wizard/__test__/autolinking/types.d.ts +12 -0
  38. package/dist/connect/wizard/__test__/autolinking/types.d.ts.map +1 -0
  39. package/dist/connect/wizard/__test__/autolinking/types.js +3 -0
  40. package/dist/connect/wizard/__test__/autolinking/types.js.map +1 -0
  41. package/dist/connect/wizard/__test__/helpers.test.d.ts +2 -0
  42. package/dist/connect/wizard/__test__/helpers.test.d.ts.map +1 -0
  43. package/dist/connect/wizard/__test__/helpers.test.js +27 -0
  44. package/dist/connect/wizard/__test__/helpers.test.js.map +1 -0
  45. package/dist/connect/wizard/__test__/run_wizard.test.d.ts +2 -0
  46. package/dist/connect/wizard/__test__/run_wizard.test.d.ts.map +1 -0
  47. package/dist/connect/wizard/__test__/run_wizard.test.js +160 -0
  48. package/dist/connect/wizard/__test__/run_wizard.test.js.map +1 -0
  49. package/dist/connect/wizard/autolinking.d.ts +12 -0
  50. package/dist/connect/wizard/autolinking.d.ts.map +1 -0
  51. package/dist/connect/wizard/autolinking.js +47 -0
  52. package/dist/connect/wizard/autolinking.js.map +1 -0
  53. package/dist/connect/wizard/helpers.d.ts +16 -2
  54. package/dist/connect/wizard/helpers.d.ts.map +1 -1
  55. package/dist/connect/wizard/helpers.js +23 -9
  56. package/dist/connect/wizard/helpers.js.map +1 -1
  57. package/dist/connect/wizard/run_wizard.d.ts +18 -0
  58. package/dist/connect/wizard/run_wizard.d.ts.map +1 -1
  59. package/dist/connect/wizard/run_wizard.js +132 -78
  60. package/dist/connect/wizard/run_wizard.js.map +1 -1
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +20 -1
  63. package/dist/index.js.map +1 -1
  64. package/dist/parser_scripts/get_swift_parser_dir.d.ts.map +1 -1
  65. package/dist/parser_scripts/get_swift_parser_dir.js +5 -11
  66. package/dist/parser_scripts/get_swift_parser_dir.js.map +1 -1
  67. package/dist/react/create.d.ts.map +1 -1
  68. package/dist/react/create.js +3 -2
  69. package/dist/react/create.js.map +1 -1
  70. package/dist/react/parser.d.ts.map +1 -1
  71. package/dist/react/parser.js +11 -12
  72. package/dist/react/parser.js.map +1 -1
  73. package/dist/react/parser_template_helpers.d.ts.map +1 -1
  74. package/dist/react/parser_template_helpers.js +12 -2
  75. package/dist/react/parser_template_helpers.js.map +1 -1
  76. package/package.json +10 -5
@@ -0,0 +1,160 @@
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
+ const path_1 = __importDefault(require("path"));
30
+ const connect = __importStar(require("../../../commands/connect"));
31
+ const project = __importStar(require("../../project"));
32
+ const run_wizard_1 = require("../run_wizard");
33
+ const _stripAnsi = require('strip-ansi');
34
+ const MOCK_COMPONENTS = [
35
+ {
36
+ type: 'COMPONENT',
37
+ name: 'a reeeeeeeally long component name',
38
+ id: '1:11',
39
+ children: [],
40
+ componentPropertyDefinitions: {},
41
+ },
42
+ {
43
+ type: 'COMPONENT',
44
+ name: 'another component',
45
+ id: '1:12',
46
+ children: [],
47
+ componentPropertyDefinitions: {},
48
+ },
49
+ {
50
+ type: 'COMPONENT',
51
+ name: 'different component',
52
+ id: '1:13',
53
+ children: [],
54
+ componentPropertyDefinitions: {},
55
+ },
56
+ ];
57
+ describe('getComponentChoicesForPrompt', () => {
58
+ it('returns a sorted list of linked + unlinked formatted choices', () => {
59
+ const result = (0, run_wizard_1.getComponentChoicesForPrompt)(MOCK_COMPONENTS, {
60
+ '1:12': '/some/component/path.tsx',
61
+ }, [], '/');
62
+ expect(result.map((r) => _stripAnsi(r.title))).toEqual([
63
+ `Figma component: another component ↔️ ${path_1.default.join('some', 'component', 'path.tsx')}`,
64
+ `Figma component: a reeeeeeeally long component name ↔️ -`,
65
+ `Figma component: different component ↔️ -`,
66
+ ]);
67
+ });
68
+ it('returns results relative to dir', () => {
69
+ const result = (0, run_wizard_1.getComponentChoicesForPrompt)(MOCK_COMPONENTS, {
70
+ '1:12': '/some/component/path.tsx',
71
+ }, [], '/some');
72
+ expect(result.map((r) => _stripAnsi(r.title))).toEqual([
73
+ `Figma component: another component ↔️ ${path_1.default.join('component', 'path.tsx')}`,
74
+ `Figma component: a reeeeeeeally long component name ↔️ -`,
75
+ `Figma component: different component ↔️ -`,
76
+ ]);
77
+ });
78
+ it('displays already connected components underneath unconnected components', () => {
79
+ const result = (0, run_wizard_1.getComponentChoicesForPrompt)([MOCK_COMPONENTS[0]], {}, [
80
+ {
81
+ componentName: 'some connected component',
82
+ path: '/foo/connectedComponent1.tsx',
83
+ },
84
+ {
85
+ componentName: 'another connected component',
86
+ path: '/foo/connectedComponent2.tsx',
87
+ },
88
+ ], '/');
89
+ expect(result.map((r) => _stripAnsi(r.title))).toEqual([
90
+ `Figma component: a reeeeeeeally long component name ↔️ -`,
91
+ `Figma component: some connected component ↔️ /foo/connectedComponent1.tsx`,
92
+ `Figma component: another connected component ↔️ /foo/connectedComponent2.tsx`,
93
+ ]);
94
+ });
95
+ });
96
+ describe('getUnconnectedComponentsAndConnectedComponentMappings', () => {
97
+ it('correctly derives connected / unconnected components', async () => {
98
+ jest.spyOn(project, 'getGitRepoAbsolutePath').mockReturnValue('/user/me/my-repo');
99
+ jest.spyOn(connect, 'getCodeConnectObjects').mockReturnValue(new Promise((resolve) => resolve([
100
+ {
101
+ figmaNode: 'https://figma.com/design/someFileId/wow?node-id=1:11',
102
+ label: 'React',
103
+ language: 'typescript',
104
+ component: 'Modal',
105
+ source: 'https://github.com/some-user/my-design-system/blob/main/components/Modal.tsx',
106
+ sourceLocation: { line: 2 },
107
+ template: '',
108
+ templateData: {
109
+ props: {
110
+ property: {
111
+ kind: 'enum',
112
+ args: {
113
+ figmaPropName: 'Property 1',
114
+ valueMapping: { Default: 'default', Variant2: 'variant2' },
115
+ },
116
+ },
117
+ },
118
+ imports: ['import { Modal } from "./Modal"'],
119
+ nestable: true,
120
+ },
121
+ metadata: { cliVersion: '1.0.1' },
122
+ },
123
+ ])));
124
+ const result = await (0, run_wizard_1.getUnconnectedComponentsAndConnectedComponentMappings)({
125
+ dir: '/user/me/my-repo/components',
126
+ }, 'https://figma.com/design/someFileId/abc', MOCK_COMPONENTS, {});
127
+ expect(result).toEqual({
128
+ unconnectedComponents: [
129
+ {
130
+ type: 'COMPONENT',
131
+ name: 'another component',
132
+ id: '1:12',
133
+ children: [],
134
+ componentPropertyDefinitions: {},
135
+ },
136
+ {
137
+ type: 'COMPONENT',
138
+ name: 'different component',
139
+ id: '1:13',
140
+ children: [],
141
+ componentPropertyDefinitions: {},
142
+ },
143
+ ],
144
+ connectedComponentsMappings: [
145
+ { componentName: 'a reeeeeeeally long component name', path: 'Modal.tsx' },
146
+ ],
147
+ });
148
+ });
149
+ });
150
+ describe('convertRemoteFileUrlToRelativePath', () => {
151
+ it('converts to relative path', () => {
152
+ const result = (0, run_wizard_1.convertRemoteFileUrlToRelativePath)({
153
+ remoteFileUrl: 'https://github.com/slees-figma/sims-design-system/blob/main/components/ds/Modal.tsx',
154
+ gitRootPath: '/user/me/my-repo',
155
+ dir: '/user/me/my-repo/components',
156
+ });
157
+ expect(result).toBe(path_1.default.join('ds', 'Modal.tsx'));
158
+ });
159
+ });
160
+ //# sourceMappingURL=run_wizard.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run_wizard.test.js","sourceRoot":"","sources":["../../../../src/connect/wizard/__test__/run_wizard.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { FigmaRestApi } from '../figma_rest_api';
2
+ /**
3
+ * Autolinks components/paths based on fuzzy matching of name and writes mappings to linkedNodeIdsToPaths.
4
+ *
5
+ * Matching is done by fast-fuzzy
6
+ */
7
+ export declare function autoLinkComponents({ unconnectedComponents, linkedNodeIdsToPaths, componentPaths, }: {
8
+ unconnectedComponents: FigmaRestApi.Component[];
9
+ linkedNodeIdsToPaths: Record<string, string>;
10
+ componentPaths: string[];
11
+ }): void;
12
+ //# sourceMappingURL=autolinking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autolinking.d.ts","sourceRoot":"","sources":["../../../src/connect/wizard/autolinking.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAKhD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,GACf,EAAE;IACD,qBAAqB,EAAE,YAAY,CAAC,SAAS,EAAE,CAAA;IAC/C,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5C,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB,QAsCA"}
@@ -0,0 +1,47 @@
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.autoLinkComponents = void 0;
7
+ const fast_fuzzy_1 = require("fast-fuzzy");
8
+ const path_1 = __importDefault(require("path"));
9
+ const MINIMUM_MATCH_THRESHOLD = 0.8;
10
+ /**
11
+ * Autolinks components/paths based on fuzzy matching of name and writes mappings to linkedNodeIdsToPaths.
12
+ *
13
+ * Matching is done by fast-fuzzy
14
+ */
15
+ function autoLinkComponents({ unconnectedComponents, linkedNodeIdsToPaths, componentPaths, }) {
16
+ const pathMatchScores = {};
17
+ /**
18
+ * fast-fuzzy finds best match in filenames for a given component - this function
19
+ * allows us to replace that link if a closer match is found
20
+ */
21
+ function isBestMatchForPath(match) {
22
+ return !pathMatchScores[match.item] || match.score > pathMatchScores[match.item].score;
23
+ }
24
+ const matchableFilenameToPathMap = componentPaths.reduce((acc, componentPath) => {
25
+ const { name } = path_1.default.parse(componentPath);
26
+ const matchableName = name;
27
+ acc[matchableName] = componentPath;
28
+ return acc;
29
+ }, {});
30
+ const searchSpace = Object.keys(matchableFilenameToPathMap);
31
+ const searcher = new fast_fuzzy_1.Searcher(searchSpace);
32
+ unconnectedComponents.forEach((component) => {
33
+ const matchableName = component.name;
34
+ const results = searcher.search(matchableName, { returnMatchData: true });
35
+ const bestMatch = results[0];
36
+ const filepath = bestMatch?.item;
37
+ if (bestMatch &&
38
+ bestMatch.score > MINIMUM_MATCH_THRESHOLD &&
39
+ filepath in matchableFilenameToPathMap &&
40
+ isBestMatchForPath(bestMatch)) {
41
+ linkedNodeIdsToPaths[component.id] = matchableFilenameToPathMap[bestMatch.item];
42
+ pathMatchScores[bestMatch.item] = { nodeId: component.id, score: bestMatch.score };
43
+ }
44
+ });
45
+ }
46
+ exports.autoLinkComponents = autoLinkComponents;
47
+ //# sourceMappingURL=autolinking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autolinking.js","sourceRoot":"","sources":["../../../src/connect/wizard/autolinking.ts"],"names":[],"mappings":";;;;;;AAAA,2CAAgD;AAEhD,gDAAuB;AAEvB,MAAM,uBAAuB,GAAG,GAAG,CAAA;AAEnC;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,EACjC,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,GAKf;IACC,MAAM,eAAe,GAAsD,EAAE,CAAA;IAC7E;;;OAGG;IACH,SAAS,kBAAkB,CAAC,KAAwB;QAClD,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAA;IACxF,CAAC;IAED,MAAM,0BAA0B,GAAG,cAAc,CAAC,MAAM,CACtD,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE;QACrB,MAAM,EAAE,IAAI,EAAE,GAAG,cAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QAC1C,MAAM,aAAa,GAAG,IAAI,CAAA;QAC1B,GAAG,CAAC,aAAa,CAAC,GAAG,aAAa,CAAA;QAClC,OAAO,GAAG,CAAA;IACZ,CAAC,EACD,EAA4B,CAC7B,CAAA;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;IAC3D,MAAM,QAAQ,GAAG,IAAI,qBAAQ,CAAC,WAAW,CAAC,CAAA;IAE1C,qBAAqB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QAC1C,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAA;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAA;QACzE,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,QAAQ,GAAG,SAAS,EAAE,IAAI,CAAA;QAChC,IACE,SAAS;YACT,SAAS,CAAC,KAAK,GAAG,uBAAuB;YACzC,QAAQ,IAAI,0BAA0B;YACtC,kBAAkB,CAAC,SAAS,CAAC,EAC7B,CAAC;YACD,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,0BAA0B,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YAC/E,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAA;QACpF,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AA9CD,gDA8CC"}
@@ -1,7 +1,21 @@
1
1
  import { CodeConnectConfig } from '../project';
2
- export declare function createCodeConnectConfig({ dir, dirToSearchForFiles, config, }: {
2
+ /**
3
+ *
4
+ * Gets the default include globs for config.parser with componentDirectory prepended
5
+ * @param args
6
+ * @param args.dir project root path
7
+ * @param args.componentDirectory optional path to where includes should be limited to
8
+ * @param args.config CodeConnectConfig
9
+ * @returns array of include globs
10
+ */
11
+ export declare function getIncludesGlob({ dir, componentDirectory, config, }: {
3
12
  dir: string;
4
- dirToSearchForFiles: string;
13
+ componentDirectory: string | null;
14
+ config: CodeConnectConfig;
15
+ }): string[];
16
+ export declare function createCodeConnectConfig({ dir, componentDirectory, config, }: {
17
+ dir: string;
18
+ componentDirectory: string | null;
5
19
  config: CodeConnectConfig;
6
20
  }): Promise<void>;
7
21
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/connect/wizard/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,EAGlB,MAAM,YAAY,CAAA;AAInB,wBAAsB,uBAAuB,CAAC,EAC5C,GAAG,EACH,mBAAmB,EACnB,MAAM,GACP,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;IACX,mBAAmB,EAAE,MAAM,CAAA;IAC3B,MAAM,EAAE,iBAAiB,CAAA;CAC1B,iBAsBA"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/connect/wizard/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,EAGlB,MAAM,YAAY,CAAA;AAMnB;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAC9B,GAAG,EACH,kBAAkB,EAClB,MAAM,GACP,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;IACX,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,MAAM,EAAE,iBAAiB,CAAA;CAC1B,YASA;AAED,wBAAsB,uBAAuB,CAAC,EAC5C,GAAG,EACH,kBAAkB,EAClB,MAAM,GACP,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;IACX,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,MAAM,EAAE,iBAAiB,CAAA;CAC1B,iBAiBA"}
@@ -26,19 +26,32 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.createCodeConnectConfig = void 0;
29
+ exports.createCodeConnectConfig = exports.getIncludesGlob = void 0;
30
30
  const prettier = __importStar(require("prettier"));
31
31
  const fs_1 = __importDefault(require("fs"));
32
32
  const project_1 = require("../project");
33
33
  const logging_1 = require("../../common/logging");
34
34
  const path_1 = __importDefault(require("path"));
35
- async function createCodeConnectConfig({ dir, dirToSearchForFiles, config, }) {
36
- // use unix separators for config file globs
37
- const pathToComponentsDir = path_1.default.relative(dir, dirToSearchForFiles).replaceAll(path_1.default.sep, '/');
38
- const includesGlob = pathToComponentsDir
39
- ? `${pathToComponentsDir}/${project_1.DEFAULT_INCLUDE_GLOBS_BY_PARSER[config.parser]}`
40
- : project_1.DEFAULT_INCLUDE_GLOBS_BY_PARSER[config.parser];
41
- const filePath = (0, project_1.getDefaultConfigPath)(dir);
35
+ /**
36
+ *
37
+ * Gets the default include globs for config.parser with componentDirectory prepended
38
+ * @param args
39
+ * @param args.dir project root path
40
+ * @param args.componentDirectory optional path to where includes should be limited to
41
+ * @param args.config CodeConnectConfig
42
+ * @returns array of include globs
43
+ */
44
+ function getIncludesGlob({ dir, componentDirectory, config, }) {
45
+ if (componentDirectory) {
46
+ // use unix separators for config file globs
47
+ const pathToComponentsDir = path_1.default.relative(dir, componentDirectory).replaceAll(path_1.default.sep, '/');
48
+ return project_1.DEFAULT_INCLUDE_GLOBS_BY_PARSER[config.parser].map((defaultIncludeGlob) => `${pathToComponentsDir}/${defaultIncludeGlob}`);
49
+ }
50
+ return project_1.DEFAULT_INCLUDE_GLOBS_BY_PARSER[config.parser];
51
+ }
52
+ exports.getIncludesGlob = getIncludesGlob;
53
+ async function createCodeConnectConfig({ dir, componentDirectory, config, }) {
54
+ const includesGlob = getIncludesGlob({ dir, componentDirectory, config });
42
55
  const configJson = `
43
56
  {
44
57
  "codeConnect": {
@@ -46,9 +59,10 @@ async function createCodeConnectConfig({ dir, dirToSearchForFiles, config, }) {
46
59
  }
47
60
  }
48
61
  `;
49
- let formatted = await prettier.format(configJson, {
62
+ const formatted = await prettier.format(configJson, {
50
63
  parser: 'json',
51
64
  });
65
+ const filePath = (0, project_1.getDefaultConfigPath)(dir);
52
66
  fs_1.default.writeFileSync(filePath, formatted);
53
67
  logging_1.logger.info((0, logging_1.success)(`Created ${filePath}`));
54
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/connect/wizard/helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAoC;AACpC,4CAAmB;AACnB,wCAImB;AACnB,kDAAsD;AACtD,gDAAuB;AAEhB,KAAK,UAAU,uBAAuB,CAAC,EAC5C,GAAG,EACH,mBAAmB,EACnB,MAAM,GAKP;IACC,4CAA4C;IAC5C,MAAM,mBAAmB,GAAG,cAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC,UAAU,CAAC,cAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAE7F,MAAM,YAAY,GAAG,mBAAmB;QACtC,CAAC,CAAC,GAAG,mBAAmB,IAAI,yCAA+B,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QAC5E,CAAC,CAAC,yCAA+B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAElD,MAAM,QAAQ,GAAG,IAAA,8BAAoB,EAAC,GAAG,CAAC,CAAA;IAC1C,MAAM,UAAU,GAAG;;;mBAGF,YAAY;;;GAG5B,CAAA;IACD,IAAI,SAAS,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE;QAChD,MAAM,EAAE,MAAM;KACf,CAAC,CAAA;IACF,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IAErC,gBAAM,CAAC,IAAI,CAAC,IAAA,iBAAO,EAAC,WAAW,QAAQ,EAAE,CAAC,CAAC,CAAA;AAC7C,CAAC;AA9BD,0DA8BC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/connect/wizard/helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAoC;AACpC,4CAAmB;AACnB,wCAImB;AACnB,kDAAsD;AACtD,gDAAuB;AAIvB;;;;;;;;GAQG;AACH,SAAgB,eAAe,CAAC,EAC9B,GAAG,EACH,kBAAkB,EAClB,MAAM,GAKP;IACC,IAAI,kBAAkB,EAAE,CAAC;QACvB,4CAA4C;QAC5C,MAAM,mBAAmB,GAAG,cAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,UAAU,CAAC,cAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC5F,OAAO,yCAA+B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CACvD,CAAC,kBAAkB,EAAE,EAAE,CAAC,GAAG,mBAAmB,IAAI,kBAAkB,EAAE,CACvE,CAAA;IACH,CAAC;IACD,OAAO,yCAA+B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AACvD,CAAC;AAjBD,0CAiBC;AAEM,KAAK,UAAU,uBAAuB,CAAC,EAC5C,GAAG,EACH,kBAAkB,EAClB,MAAM,GAKP;IACC,MAAM,YAAY,GAAG,eAAe,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAA;IACzE,MAAM,UAAU,GAAG;;;mBAGF,YAAY;;;GAG5B,CAAA;IACD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE;QAClD,MAAM,EAAE,MAAM;KACf,CAAC,CAAA;IACF,MAAM,QAAQ,GAAG,IAAA,8BAAoB,EAAC,GAAG,CAAC,CAAA;IAE1C,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IAErC,gBAAM,CAAC,IAAI,CAAC,IAAA,iBAAO,EAAC,WAAW,QAAQ,EAAE,CAAC,CAAC,CAAA;AAC7C,CAAC;AAzBD,0DAyBC"}
@@ -1,3 +1,21 @@
1
1
  import { BaseCommand } from '../../commands/connect';
2
+ import prompts from 'prompts';
3
+ import { FigmaRestApi } from '../figma_rest_api';
4
+ import { ReactProjectInfo, CodeConnectConfig, ProjectInfo } from '../../connect/project';
5
+ type ConnectedComponentMappings = {
6
+ componentName: string;
7
+ path: string;
8
+ }[];
9
+ export declare function getComponentChoicesForPrompt(components: FigmaRestApi.Component[], linkedNodeIdsToPaths: Record<string, string>, connectedComponentsMappings: ConnectedComponentMappings, dir: string): prompts.Choice[];
10
+ export declare function convertRemoteFileUrlToRelativePath({ remoteFileUrl, gitRootPath, dir, }: {
11
+ remoteFileUrl: string;
12
+ gitRootPath: string;
13
+ dir: string;
14
+ }): string | null;
15
+ export declare function getUnconnectedComponentsAndConnectedComponentMappings(cmd: BaseCommand, figmaFileUrl: string, componentsFromFile: FigmaRestApi.Component[], projectInfo: ProjectInfo<CodeConnectConfig> | ReactProjectInfo): Promise<{
16
+ unconnectedComponents: FigmaRestApi.Component[];
17
+ connectedComponentsMappings: ConnectedComponentMappings;
18
+ }>;
2
19
  export declare function runWizard(cmd: BaseCommand): Promise<void>;
20
+ export {};
3
21
  //# sourceMappingURL=run_wizard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run_wizard.d.ts","sourceRoot":"","sources":["../../../src/connect/wizard/run_wizard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAiD,MAAM,wBAAwB,CAAA;AAuiBnG,wBAAsB,SAAS,CAAC,GAAG,EAAE,WAAW,iBAgJ/C"}
1
+ {"version":3,"file":"run_wizard.d.ts","sourceRoot":"","sources":["../../../src/connect/wizard/run_wizard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAiD,MAAM,wBAAwB,CAAA;AACnG,OAAO,OAAO,MAAM,SAAS,CAAA;AAG7B,OAAO,EAAE,YAAY,EAAa,MAAM,mBAAmB,CAAA;AAG3D,OAAO,EACL,gBAAgB,EAKhB,iBAAiB,EACjB,WAAW,EAEZ,MAAM,uBAAuB,CAAA;AAkB9B,KAAK,0BAA0B,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAAA;AAoJ3E,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,YAAY,CAAC,SAAS,EAAE,EACpC,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5C,2BAA2B,EAAE,0BAA0B,EACvD,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,EAAE,CAuClB;AA0OD,wBAAgB,kCAAkC,CAAC,EACjD,aAAa,EACb,WAAW,EACX,GAAG,GACJ,EAAE;IACD,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;CACZ,iBAYA;AAED,wBAAsB,qDAAqD,CACzE,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,MAAM,EACpB,kBAAkB,EAAE,YAAY,CAAC,SAAS,EAAE,EAC5C,WAAW,EAAE,WAAW,CAAC,iBAAiB,CAAC,GAAG,gBAAgB;;;GA8C/D;AAwFD,wBAAsB,SAAS,CAAC,GAAG,EAAE,WAAW,iBAwJ/C"}