@figma/code-connect 1.1.3 → 1.2.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 (90) hide show
  1. package/README.md +2 -2
  2. package/dist/common/updates.js +1 -1
  3. package/dist/common/updates.js.map +1 -1
  4. package/dist/connect/api.d.ts +38 -6
  5. package/dist/connect/api.d.ts.map +1 -1
  6. package/dist/connect/create.d.ts.map +1 -1
  7. package/dist/connect/create.js +3 -0
  8. package/dist/connect/create.js.map +1 -1
  9. package/dist/connect/external_types.d.ts +2 -1
  10. package/dist/connect/external_types.d.ts.map +1 -1
  11. package/dist/connect/external_types.js +5 -1
  12. package/dist/connect/external_types.js.map +1 -1
  13. package/dist/connect/intrinsics.d.ts +4 -1
  14. package/dist/connect/intrinsics.d.ts.map +1 -1
  15. package/dist/connect/intrinsics.js +76 -36
  16. package/dist/connect/intrinsics.js.map +1 -1
  17. package/dist/connect/modifiers.d.ts +29 -0
  18. package/dist/connect/modifiers.d.ts.map +1 -0
  19. package/dist/connect/modifiers.js +109 -0
  20. package/dist/connect/modifiers.js.map +1 -0
  21. package/dist/connect/parser_common.d.ts +3 -3
  22. package/dist/connect/parser_common.d.ts.map +1 -1
  23. package/dist/connect/parser_common.js +18 -18
  24. package/dist/connect/parser_common.js.map +1 -1
  25. package/dist/connect/parser_executable_types.d.ts +21 -19
  26. package/dist/connect/parser_executable_types.d.ts.map +1 -1
  27. package/dist/connect/parser_executable_types.js.map +1 -1
  28. package/dist/connect/wizard/embeddings.d.ts +13 -0
  29. package/dist/connect/wizard/embeddings.d.ts.map +1 -0
  30. package/dist/connect/wizard/embeddings.js +22 -0
  31. package/dist/connect/wizard/embeddings.js.map +1 -0
  32. package/dist/connect/wizard/helpers.d.ts +2 -0
  33. package/dist/connect/wizard/helpers.d.ts.map +1 -1
  34. package/dist/connect/wizard/helpers.js +16 -1
  35. package/dist/connect/wizard/helpers.js.map +1 -1
  36. package/dist/connect/wizard/prop_mapping.d.ts +20 -10
  37. package/dist/connect/wizard/prop_mapping.d.ts.map +1 -1
  38. package/dist/connect/wizard/prop_mapping.js +156 -48
  39. package/dist/connect/wizard/prop_mapping.js.map +1 -1
  40. package/dist/connect/wizard/prop_mapping_helpers.d.ts +71 -0
  41. package/dist/connect/wizard/prop_mapping_helpers.d.ts.map +1 -0
  42. package/dist/connect/wizard/prop_mapping_helpers.js +176 -0
  43. package/dist/connect/wizard/prop_mapping_helpers.js.map +1 -0
  44. package/dist/connect/wizard/run_wizard.d.ts.map +1 -1
  45. package/dist/connect/wizard/run_wizard.js +48 -16
  46. package/dist/connect/wizard/run_wizard.js.map +1 -1
  47. package/dist/connect/wizard/signature_extraction.d.ts +2 -4
  48. package/dist/connect/wizard/signature_extraction.d.ts.map +1 -1
  49. package/dist/connect/wizard/signature_extraction.js +119 -33
  50. package/dist/connect/wizard/signature_extraction.js.map +1 -1
  51. package/dist/html/external.d.ts +1 -1
  52. package/dist/html/external.d.ts.map +1 -1
  53. package/dist/html/external.js +6 -5
  54. package/dist/html/external.js.map +1 -1
  55. package/dist/html/index_html.d.ts +1 -1
  56. package/dist/html/index_html.d.ts.map +1 -1
  57. package/dist/html/parser.d.ts.map +1 -1
  58. package/dist/html/parser.js +16 -12
  59. package/dist/html/parser.js.map +1 -1
  60. package/dist/html/parser_template_helpers.d.ts +8 -0
  61. package/dist/html/parser_template_helpers.d.ts.map +1 -1
  62. package/dist/html/parser_template_helpers.js +19 -3
  63. package/dist/html/parser_template_helpers.js.map +1 -1
  64. package/dist/html/types.d.ts +1 -1
  65. package/dist/html/types.d.ts.map +1 -1
  66. package/dist/react/create.d.ts.map +1 -1
  67. package/dist/react/create.js +69 -22
  68. package/dist/react/create.js.map +1 -1
  69. package/dist/react/external.d.ts +1 -2
  70. package/dist/react/external.d.ts.map +1 -1
  71. package/dist/react/external.js +1 -4
  72. package/dist/react/external.js.map +1 -1
  73. package/dist/react/index_react.d.ts +25 -2
  74. package/dist/react/index_react.d.ts.map +1 -1
  75. package/dist/react/index_react.js.map +1 -1
  76. package/dist/react/parser.d.ts +38 -14
  77. package/dist/react/parser.d.ts.map +1 -1
  78. package/dist/react/parser.js +128 -215
  79. package/dist/react/parser.js.map +1 -1
  80. package/dist/react/parser_template_helpers.d.ts +5 -1
  81. package/dist/react/parser_template_helpers.d.ts.map +1 -1
  82. package/dist/react/parser_template_helpers.js +20 -3
  83. package/dist/react/parser_template_helpers.js.map +1 -1
  84. package/dist/react/types.d.ts +6 -2
  85. package/dist/react/types.d.ts.map +1 -1
  86. package/dist/storybook/convert.js +1 -1
  87. package/dist/storybook/convert.js.map +1 -1
  88. package/dist/storybook/external.d.ts +2 -2
  89. package/dist/storybook/external.d.ts.map +1 -1
  90. package/package.json +12 -10
@@ -1,17 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.extractSignatureAndGeneratePropMapping = exports.generatePropMapping = exports.generateValueMapping = exports.PROPERTY_PLACEHOLDER = void 0;
3
+ exports.generatePropMapping = exports.buildMatchableNamesMap = exports.MatchableNameTypes = exports.generateValueMapping = exports.PROPERTY_PLACEHOLDER = void 0;
4
4
  const figma_rest_api_1 = require("../figma_rest_api");
5
5
  const fast_fuzzy_1 = require("fast-fuzzy");
6
- const logging_1 = require("../../common/logging");
7
6
  const intrinsics_1 = require("../../connect/intrinsics");
8
- const signature_extraction_1 = require("./signature_extraction");
9
7
  const create_1 = require("../../react/create");
8
+ /**
9
+ * These thresholds were come up with by running the benchmarking
10
+ * and tweaking until high positives + acceptable false positives
11
+ * were achieved. It's worth repeating this process whenever making
12
+ * changes to the mapping algorithm.
13
+ */
14
+ const MININUM_MATCH_SCORES = {
15
+ fuzzy: {
16
+ property: 0.65,
17
+ variantValue: 0.8,
18
+ },
19
+ embeddings: {
20
+ property: 0.84,
21
+ variantValue: 0.87,
22
+ },
23
+ };
10
24
  /**
11
25
  * Used when we should output a placeholder for an unknown value in prop mapping.
12
26
  */
13
27
  exports.PROPERTY_PLACEHOLDER = 'PROPERTY_PLACEHOLDER';
14
- const PROP_MINIMUM_MATCH_THRESHOLD = 0.8;
15
28
  function generateValueMapping(propSignature, figmaPropDef) {
16
29
  const codeEnumOptions = propSignature.split(' | ').map((str) => str.substring(1, str.length - 1)); // remove quote marks
17
30
  const searcher = new fast_fuzzy_1.Searcher(figmaPropDef.variantOptions);
@@ -24,15 +37,18 @@ function generateValueMapping(propSignature, figmaPropDef) {
24
37
  }, {});
25
38
  }
26
39
  exports.generateValueMapping = generateValueMapping;
40
+ function signatureIsJsxLike(signature) {
41
+ return (signature.includes('ElementType') ||
42
+ signature.includes('ReactElement') ||
43
+ signature.includes('ReactNode'));
44
+ }
27
45
  /**
28
46
  * Attempts to create a mapping between a code prop and figma prop.
29
47
  * These props have been matched by name and aren't guaranteed to
30
48
  * actually be related, so we return null if no suitable mapping
31
49
  */
32
- function generateIntrinsic({ propSignature: propSignatureWithOptionalModifier, figmaPropName, figmaPropDef, }) {
33
- const propSignature = propSignatureWithOptionalModifier.startsWith('?')
34
- ? propSignatureWithOptionalModifier.substring(1)
35
- : propSignatureWithOptionalModifier;
50
+ function generateIntrinsic({ propSignature, figmaPropName: figmaPropNameWithNodeId, figmaPropDef, }) {
51
+ const figmaPropName = stripNodeIdFromPropertyName(figmaPropNameWithNodeId);
36
52
  if (propSignature === 'string' && figmaPropDef.type === figma_rest_api_1.FigmaRestApi.ComponentPropertyType.Text) {
37
53
  return {
38
54
  kind: intrinsics_1.IntrinsicKind.String,
@@ -55,62 +71,154 @@ function generateIntrinsic({ propSignature: propSignatureWithOptionalModifier, f
55
71
  }
56
72
  if (propSignature.includes(' | ') &&
57
73
  figmaPropDef.type === figma_rest_api_1.FigmaRestApi.ComponentPropertyType.Variant) {
74
+ const valueMapping = generateValueMapping(propSignature, figmaPropDef);
75
+ // Only valuable if some values were mapped
76
+ if (Object.keys(valueMapping).length > 0) {
77
+ return {
78
+ kind: intrinsics_1.IntrinsicKind.Enum,
79
+ args: {
80
+ figmaPropName,
81
+ valueMapping,
82
+ },
83
+ };
84
+ }
85
+ }
86
+ if (signatureIsJsxLike(propSignature) &&
87
+ figmaPropDef.type === figma_rest_api_1.FigmaRestApi.ComponentPropertyType.InstanceSwap) {
58
88
  return {
59
- kind: intrinsics_1.IntrinsicKind.Enum,
89
+ kind: intrinsics_1.IntrinsicKind.Instance,
60
90
  args: {
61
91
  figmaPropName,
62
- valueMapping: generateValueMapping(propSignature, figmaPropDef),
63
92
  },
64
93
  };
65
94
  }
66
95
  return null;
67
96
  }
68
- function generatePropMapping({ componentPropertyDefinitions, signature, }) {
97
+ function stripNodeIdFromPropertyName(propertyName) {
98
+ return propertyName.replace(/#\d+:\d+/, '');
99
+ }
100
+ const DELIMITERS_REGEX = /[\s-_]/g;
101
+ var MatchableNameTypes;
102
+ (function (MatchableNameTypes) {
103
+ MatchableNameTypes[MatchableNameTypes["Property"] = 0] = "Property";
104
+ MatchableNameTypes[MatchableNameTypes["VariantValue"] = 1] = "VariantValue";
105
+ // ChildLayer, // TODO
106
+ })(MatchableNameTypes || (exports.MatchableNameTypes = MatchableNameTypes = {}));
107
+ const MATCHABLE_NAME_TYPES_PRIORITY = [
108
+ MatchableNameTypes.Property,
109
+ MatchableNameTypes.VariantValue,
110
+ ];
111
+ /**
112
+ * Builds a map of all properties and enum values, indexed by name.
113
+ * @param componentPropertyDefinitions
114
+ * @returns A map of {name: values[]}. Each value is an array to avoid
115
+ * collisions between properties / enum values
116
+ */
117
+ function buildMatchableNamesMap(componentPropertyDefinitions) {
118
+ const matchableValues = {};
119
+ function add(name, definition) {
120
+ matchableValues[name] = matchableValues[name] || [];
121
+ matchableValues[name].push(definition);
122
+ }
123
+ Object.entries(componentPropertyDefinitions || {}).forEach(([propName, propDef]) => {
124
+ const name = stripNodeIdFromPropertyName(propName);
125
+ add(name, {
126
+ type: MatchableNameTypes.Property,
127
+ name: propName,
128
+ });
129
+ if (propDef.type === figma_rest_api_1.FigmaRestApi.ComponentPropertyType.Variant) {
130
+ propDef.variantOptions?.forEach((variantValue) => {
131
+ add(variantValue, {
132
+ type: MatchableNameTypes.VariantValue,
133
+ name: variantValue,
134
+ variantProperty: propName,
135
+ });
136
+ });
137
+ }
138
+ });
139
+ return matchableValues;
140
+ }
141
+ exports.buildMatchableNamesMap = buildMatchableNamesMap;
142
+ function generatePropMapping({ componentPropertyDefinitions, signature, componentMatchResults, matchableNamesMap, }) {
69
143
  const propMapping = {};
70
- // Remove whitespace for closer matches with code props
71
- const matchableFigmaProperties = Object.keys(componentPropertyDefinitions || {}).reduce((acc, propName) => {
72
- const withoutWhitespace = propName.replace(/\s/g, '');
73
- acc[withoutWhitespace] = propName;
74
- return acc;
75
- }, {});
76
- const searchSpace = Object.keys(matchableFigmaProperties);
144
+ const searchSpace = Object.keys(matchableNamesMap);
77
145
  const searcher = new fast_fuzzy_1.Searcher(searchSpace);
78
- Object.entries(signature).forEach(([propName, propSignature]) => {
79
- const results = searcher.search(propName, { returnMatchData: true });
80
- if (results.length > 0) {
81
- const { item, score } = results[0];
82
- const figmaPropName = matchableFigmaProperties[item];
83
- const figmaPropDef = componentPropertyDefinitions[figmaPropName];
84
- if (score > PROP_MINIMUM_MATCH_THRESHOLD) {
85
- const intrinsic = generateIntrinsic({ propSignature, figmaPropName, figmaPropDef });
146
+ let minimumMatchScores = MININUM_MATCH_SCORES.fuzzy;
147
+ const useEmbeddings = !!componentMatchResults;
148
+ if (useEmbeddings) {
149
+ minimumMatchScores = MININUM_MATCH_SCORES.embeddings;
150
+ }
151
+ function attemptGetIntrinsicForProp({ propMatch, propSignature, }) {
152
+ const itemsInPriorityOrder = [...matchableNamesMap[propMatch.item]].sort((a, b) => MATCHABLE_NAME_TYPES_PRIORITY.indexOf(a.type) -
153
+ MATCHABLE_NAME_TYPES_PRIORITY.indexOf(b.type));
154
+ for (const item of itemsInPriorityOrder) {
155
+ /**
156
+ * First, look for matching property names with compatible types
157
+ */
158
+ if (item.type === MatchableNameTypes.Property &&
159
+ propMatch.score > minimumMatchScores.property) {
160
+ const intrinsic = generateIntrinsic({
161
+ propSignature,
162
+ figmaPropName: item.name,
163
+ figmaPropDef: componentPropertyDefinitions[item.name],
164
+ });
86
165
  if (intrinsic) {
87
- propMapping[propName] = intrinsic;
166
+ return intrinsic;
88
167
  }
168
+ /**
169
+ * Then if no match AND a boolean prop, look for matching variant values, e.g:
170
+ *
171
+ * disabled: figma.enum('State', {
172
+ * Disabled: true,
173
+ * })
174
+ */
175
+ }
176
+ else if (item.type === MatchableNameTypes.VariantValue &&
177
+ propSignature === 'false | true' &&
178
+ propMatch.score > minimumMatchScores.variantValue) {
179
+ return {
180
+ kind: intrinsics_1.IntrinsicKind.Enum,
181
+ args: {
182
+ figmaPropName: item.variantProperty,
183
+ valueMapping: {
184
+ [item.name]: true,
185
+ },
186
+ },
187
+ };
89
188
  }
90
189
  }
91
- });
92
- return propMapping;
93
- }
94
- exports.generatePropMapping = generatePropMapping;
95
- function extractSignatureAndGeneratePropMapping({ exportName, filepath, projectInfo, componentPropertyDefinitions, cmd, }) {
96
- let signature;
97
- try {
98
- signature = (0, signature_extraction_1.extractSignature)({
99
- nameToFind: exportName,
100
- sourceFilePath: filepath,
101
- projectInfo,
102
- });
190
+ return null;
103
191
  }
104
- catch (e) {
105
- if (cmd.verbose) {
106
- logging_1.logger.warn(`Could not extract signature for "${exportName}" in ${filepath}`);
192
+ /**
193
+ * Attempt to generate an intrinsic for a given property name by looking
194
+ * for name matches with a minimum threshold
195
+ *
196
+ * Embeddings are priorized over fuzzy matching if present (they
197
+ * may be missing if gated or missing permissions).
198
+ */
199
+ for (const [propName, propSignatureWithOptionalModifier] of Object.entries(signature)) {
200
+ const propSignature = propSignatureWithOptionalModifier.startsWith('?')
201
+ ? propSignatureWithOptionalModifier.substring(1)
202
+ : propSignatureWithOptionalModifier;
203
+ let matches = searcher.search(propName, { returnMatchData: true });
204
+ if (useEmbeddings) {
205
+ matches = componentMatchResults[propName];
206
+ }
207
+ if (matches.length === 0) {
208
+ continue;
209
+ }
210
+ for (const match of matches) {
211
+ const intrinsic = attemptGetIntrinsicForProp({
212
+ propMatch: match,
213
+ propSignature,
214
+ });
215
+ if (intrinsic) {
216
+ propMapping[propName] = intrinsic;
217
+ break;
218
+ }
107
219
  }
108
- return undefined;
109
220
  }
110
- return generatePropMapping({
111
- componentPropertyDefinitions,
112
- signature,
113
- });
221
+ return propMapping;
114
222
  }
115
- exports.extractSignatureAndGeneratePropMapping = extractSignatureAndGeneratePropMapping;
223
+ exports.generatePropMapping = generatePropMapping;
116
224
  //# sourceMappingURL=prop_mapping.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prop_mapping.js","sourceRoot":"","sources":["../../../src/connect/wizard/prop_mapping.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prop_mapping.js","sourceRoot":"","sources":["../../../src/connect/wizard/prop_mapping.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { BaseCommand } from '../../commands/connect';
2
+ import { ComponentTypeSignature } from '../../react/parser';
3
+ import { FigmaRestApi } from '../figma_rest_api';
4
+ import { ProjectInfo } from '../project';
5
+ import { MatchableName } from './prop_mapping';
6
+ import { PropMapping } from '../parser_executable_types';
7
+ export type MatchableNamesMap = Record<string, MatchableName[]>;
8
+ export type PropMappingData = {
9
+ [filepathExport: string]: {
10
+ signature: ComponentTypeSignature;
11
+ matchableNamesMap: MatchableNamesMap;
12
+ componentPropertyDefinitions: FigmaRestApi.Component['componentPropertyDefinitions'];
13
+ };
14
+ };
15
+ /**
16
+ * Preprocess signatures and matchable names for all components
17
+ */
18
+ export declare function getPropMappingData({ filepathExportsToComponents, projectInfo, cmd, }: {
19
+ filepathExportsToComponents: Record<string, FigmaRestApi.Component>;
20
+ projectInfo: ProjectInfo;
21
+ cmd: BaseCommand;
22
+ }): PropMappingData;
23
+ export declare function getUniqueMatchableNames(propMappingData: PropMappingData): string[];
24
+ export type PropMatchResult = {
25
+ item: string;
26
+ score: number;
27
+ };
28
+ export type ComponentMatchResults = {
29
+ [propName: string]: PropMatchResult[];
30
+ };
31
+ type AllMatchResults = {
32
+ [filepathExport: string]: ComponentMatchResults;
33
+ };
34
+ type MatchableNameEmbeddings = {
35
+ [matchableName: string]: number[];
36
+ };
37
+ export declare function buildAllEmbeddingsMatchResults(propMappingData: PropMappingData, matchableNameEmbeddings: MatchableNameEmbeddings): AllMatchResults;
38
+ export declare function generateAllPropsMappings({ propMappingData, accessToken, figmaUrl, useAi, mockResponseName, }: {
39
+ propMappingData: PropMappingData;
40
+ accessToken: string;
41
+ figmaUrl: string;
42
+ useAi: boolean;
43
+ mockResponseName?: string;
44
+ }): Promise<{
45
+ [filepathExport: string]: PropMapping;
46
+ }>;
47
+ /**
48
+ * This is the top level function that takes a map of filepathExports to components and generates prop mappings.
49
+ * It does the following:
50
+ *
51
+ * 1. For each component we want to match, extract their TS signature and all figma properties
52
+ * 2. Make an array of all strings we want embeddings for (react props, figma properties, variant values)
53
+ * 3. Call embeddings endpoint with above and create a map of names => embeddings
54
+ * 4. For each component, build a map of code props to an list of matchable names + scores, sorted by their calculated embedding distance to the code prop
55
+ * 5. Finally, pass those name matches and component data to the prop mapping algorithm to generate the mapping
56
+ */
57
+ export declare function extractDataAndGenerateAllPropsMappings({ filepathExportsToComponents, projectInfo, cmd, figmaUrl, accessToken, useAi, }: {
58
+ filepathExportsToComponents: Record<string, FigmaRestApi.Component>;
59
+ projectInfo: ProjectInfo;
60
+ cmd: BaseCommand;
61
+ figmaUrl: string;
62
+ accessToken: string;
63
+ useAi: boolean;
64
+ }): Promise<{
65
+ propMappingData: PropMappingData;
66
+ propMappings: {
67
+ [filepathExport: string]: PropMapping;
68
+ };
69
+ }>;
70
+ export {};
71
+ //# sourceMappingURL=prop_mapping_helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prop_mapping_helpers.d.ts","sourceRoot":"","sources":["../../../src/connect/wizard/prop_mapping_helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAoB,MAAM,YAAY,CAAA;AAE1D,OAAO,EAAE,aAAa,EAA+C,MAAM,gBAAgB,CAAA;AAE3F,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAIxD,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;AAE/D,MAAM,MAAM,eAAe,GAAG;IAC5B,CAAC,cAAc,EAAE,MAAM,GAAG;QACxB,SAAS,EAAE,sBAAsB,CAAA;QACjC,iBAAiB,EAAE,iBAAiB,CAAA;QACpC,4BAA4B,EAAE,YAAY,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAA;KACrF,CAAA;CACF,CAAA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,2BAA2B,EAC3B,WAAW,EACX,GAAG,GACJ,EAAE;IACD,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,CAAA;IACnE,WAAW,EAAE,WAAW,CAAA;IACxB,GAAG,EAAE,WAAW,CAAA;CACjB,mBA+BA;AAED,wBAAgB,uBAAuB,CAAC,eAAe,EAAE,eAAe,YAMvE;AAED,MAAM,MAAM,eAAe,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE7D,MAAM,MAAM,qBAAqB,GAAG;IAClC,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CAAA;CACtC,CAAA;AAED,KAAK,eAAe,GAAG;IACrB,CAAC,cAAc,EAAE,MAAM,GAAG,qBAAqB,CAAA;CAChD,CAAA;AAED,KAAK,uBAAuB,GAAG;IAC7B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAClC,CAAA;AASD,wBAAgB,8BAA8B,CAC5C,eAAe,EAAE,eAAe,EAChC,uBAAuB,EAAE,uBAAuB,mBAiBjD;AA8DD,wBAAsB,wBAAwB,CAAC,EAC7C,eAAe,EACf,WAAW,EACX,QAAQ,EACR,KAAK,EACL,gBAAgB,GACjB,EAAE;IACD,eAAe,EAAE,eAAe,CAAA;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;;GAqCA;AAED;;;;;;;;;GASG;AACH,wBAAsB,sCAAsC,CAAC,EAC3D,2BAA2B,EAC3B,WAAW,EACX,GAAG,EACH,QAAQ,EACR,WAAW,EACX,KAAK,GACN,EAAE;IACD,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,CAAA;IACnE,WAAW,EAAE,WAAW,CAAA;IACxB,GAAG,EAAE,WAAW,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,OAAO,CAAA;CACf;;;;;GAeA"}
@@ -0,0 +1,176 @@
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.extractDataAndGenerateAllPropsMappings = exports.generateAllPropsMappings = exports.buildAllEmbeddingsMatchResults = exports.getUniqueMatchableNames = exports.getPropMappingData = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const logging_1 = require("../../common/logging");
10
+ const helpers_1 = require("./helpers");
11
+ const prop_mapping_1 = require("./prop_mapping");
12
+ const signature_extraction_1 = require("./signature_extraction");
13
+ const embeddings_1 = require("./embeddings");
14
+ const axios_1 = require("axios");
15
+ /**
16
+ * Preprocess signatures and matchable names for all components
17
+ */
18
+ function getPropMappingData({ filepathExportsToComponents, projectInfo, cmd, }) {
19
+ const propMappingData = {};
20
+ for (const [filepathExport, { componentPropertyDefinitions }] of Object.entries(filepathExportsToComponents)) {
21
+ const { filepath, exportName } = (0, helpers_1.parseFilepathExport)(filepathExport);
22
+ if (projectInfo.config.parser === 'react' && filepath && exportName) {
23
+ try {
24
+ const signature = (0, signature_extraction_1.extractSignature)({
25
+ nameToFind: exportName,
26
+ sourceFilePath: filepath,
27
+ });
28
+ if (cmd.verbose && Object.keys(signature).length === 0) {
29
+ logging_1.logger.warn(`No TS signature found for "${exportName}" in ${filepath}`);
30
+ }
31
+ propMappingData[filepathExport] = {
32
+ signature,
33
+ componentPropertyDefinitions,
34
+ matchableNamesMap: (0, prop_mapping_1.buildMatchableNamesMap)(componentPropertyDefinitions),
35
+ };
36
+ }
37
+ catch (e) {
38
+ if (cmd.verbose) {
39
+ logging_1.logger.warn(`Could not extract signature for "${exportName}" in ${filepath}`);
40
+ }
41
+ }
42
+ }
43
+ }
44
+ return propMappingData;
45
+ }
46
+ exports.getPropMappingData = getPropMappingData;
47
+ function getUniqueMatchableNames(propMappingData) {
48
+ const allNames = Object.values(propMappingData).flatMap((d) => [
49
+ ...Object.keys(d.signature),
50
+ ...Object.keys(d.matchableNamesMap),
51
+ ]);
52
+ return Array.from(new Set(allNames));
53
+ }
54
+ exports.getUniqueMatchableNames = getUniqueMatchableNames;
55
+ function cosineSimilarity(a, b) {
56
+ const dot_product = a.reduce((acc, val, i) => acc + val * b[i], 0);
57
+ const magnitude_a = Math.sqrt(a.reduce((acc, val) => acc + val * val, 0));
58
+ const magnitude_b = Math.sqrt(b.reduce((acc, val) => acc + val * val, 0));
59
+ return dot_product / (magnitude_a * magnitude_b);
60
+ }
61
+ function buildAllEmbeddingsMatchResults(propMappingData, matchableNameEmbeddings) {
62
+ const allMatchResults = {};
63
+ Object.entries(propMappingData).forEach(([filepathExport, { signature, matchableNamesMap }]) => {
64
+ allMatchResults[filepathExport] = {};
65
+ Object.keys(signature).forEach((propName) => {
66
+ allMatchResults[filepathExport][propName] = Object.keys(matchableNamesMap)
67
+ .map((item) => ({
68
+ item,
69
+ score: cosineSimilarity(matchableNameEmbeddings[propName], matchableNameEmbeddings[item]),
70
+ }))
71
+ .sort((a, b) => b.score - a.score);
72
+ });
73
+ });
74
+ return allMatchResults;
75
+ }
76
+ exports.buildAllEmbeddingsMatchResults = buildAllEmbeddingsMatchResults;
77
+ async function getMockEmbeddingsResponse(uniqueMatchableNames, mockResponseName) {
78
+ /**
79
+ * Refetch and write local mock responses.
80
+ * This should be done whenever any upstream changes are made to e.g. TS signature extraction
81
+ */
82
+ const updateMockFiles = false;
83
+ // Return mock response or update local mocks
84
+ const mockResponsePath = mockResponseName &&
85
+ path_1.default.join(__dirname, `__test__/prop_mapping/test_cases/embeddings_responses/${mockResponseName}.json`);
86
+ if (updateMockFiles) {
87
+ if (!process.env.FIGMA_ACCESS_TOKEN) {
88
+ throw new Error('process.env.FIGMA_ACCESS_TOKEN required to fetch embeddings');
89
+ }
90
+ if (!process.env.FILE_URL) {
91
+ throw new Error("process.env.FILE_URL required to fetch embeddings (note: contents of file don't matter)");
92
+ }
93
+ const res = await (0, embeddings_1.fetchEmbeddings)({
94
+ uniqueMatchableNames,
95
+ accessToken: process.env.FIGMA_ACCESS_TOKEN,
96
+ figmaUrl: process.env.FILE_URL,
97
+ });
98
+ fs_1.default.writeFileSync(mockResponsePath, JSON.stringify(res));
99
+ return res;
100
+ }
101
+ else {
102
+ return JSON.parse(fs_1.default.readFileSync(mockResponsePath, 'utf-8'));
103
+ }
104
+ }
105
+ async function getEmbeddingsMatchResults({ propMappingData, accessToken, figmaUrl, mockResponseName, }) {
106
+ const uniqueMatchableNames = getUniqueMatchableNames(propMappingData);
107
+ const res = mockResponseName
108
+ ? await getMockEmbeddingsResponse(uniqueMatchableNames, mockResponseName)
109
+ : await (0, embeddings_1.fetchEmbeddings)({ uniqueMatchableNames, accessToken, figmaUrl });
110
+ const matchableNamesEmbeddings = {};
111
+ res?.meta.embeddings.forEach((embedding, index) => {
112
+ matchableNamesEmbeddings[uniqueMatchableNames[index]] = embedding;
113
+ });
114
+ return buildAllEmbeddingsMatchResults(propMappingData, matchableNamesEmbeddings);
115
+ }
116
+ async function generateAllPropsMappings({ propMappingData, accessToken, figmaUrl, useAi, mockResponseName, }) {
117
+ let allMatchResults = {};
118
+ if (useAi) {
119
+ try {
120
+ allMatchResults = await getEmbeddingsMatchResults({
121
+ propMappingData,
122
+ accessToken,
123
+ figmaUrl,
124
+ mockResponseName,
125
+ });
126
+ }
127
+ catch (e) {
128
+ if ((0, axios_1.isAxiosError)(e)) {
129
+ logging_1.logger.error(`Failed to fetch embeddings: ${e.response?.data?.message || e.response?.status}`);
130
+ }
131
+ else {
132
+ logging_1.logger.error(`Failed to compute embeddings: ${e}`);
133
+ }
134
+ logging_1.logger.info('Falling back to using fuzzy matching');
135
+ }
136
+ }
137
+ const propMappings = {};
138
+ Object.entries(propMappingData).forEach(([filepathExport, { signature, componentPropertyDefinitions, matchableNamesMap }]) => {
139
+ propMappings[filepathExport] = (0, prop_mapping_1.generatePropMapping)({
140
+ matchableNamesMap,
141
+ componentPropertyDefinitions,
142
+ signature,
143
+ componentMatchResults: allMatchResults[filepathExport],
144
+ });
145
+ });
146
+ return propMappings;
147
+ }
148
+ exports.generateAllPropsMappings = generateAllPropsMappings;
149
+ /**
150
+ * This is the top level function that takes a map of filepathExports to components and generates prop mappings.
151
+ * It does the following:
152
+ *
153
+ * 1. For each component we want to match, extract their TS signature and all figma properties
154
+ * 2. Make an array of all strings we want embeddings for (react props, figma properties, variant values)
155
+ * 3. Call embeddings endpoint with above and create a map of names => embeddings
156
+ * 4. For each component, build a map of code props to an list of matchable names + scores, sorted by their calculated embedding distance to the code prop
157
+ * 5. Finally, pass those name matches and component data to the prop mapping algorithm to generate the mapping
158
+ */
159
+ async function extractDataAndGenerateAllPropsMappings({ filepathExportsToComponents, projectInfo, cmd, figmaUrl, accessToken, useAi, }) {
160
+ const propMappingData = getPropMappingData({
161
+ filepathExportsToComponents,
162
+ projectInfo,
163
+ cmd,
164
+ });
165
+ return {
166
+ propMappingData,
167
+ propMappings: await generateAllPropsMappings({
168
+ propMappingData,
169
+ accessToken,
170
+ figmaUrl,
171
+ useAi,
172
+ }),
173
+ };
174
+ }
175
+ exports.extractDataAndGenerateAllPropsMappings = extractDataAndGenerateAllPropsMappings;
176
+ //# sourceMappingURL=prop_mapping_helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prop_mapping_helpers.js","sourceRoot":"","sources":["../../../src/connect/wizard/prop_mapping_helpers.ts"],"names":[],"mappings":"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"}
@@ -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;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;AAwB9B,KAAK,0BAA0B,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,EAAE,CAAA;AA0JrF,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,YAAY,CAAC,SAAS,EAAE,EACpC,8BAA8B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACtD,2BAA2B,EAAE,0BAA0B,EACvD,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,EAAE,CA2ClB;AA+QD,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;AAsFD,wBAAsB,SAAS,CAAC,GAAG,EAAE,WAAW,iBAiK/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;AAyB9B,KAAK,0BAA0B,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,EAAE,CAAA;AA0JrF,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,YAAY,CAAC,SAAS,EAAE,EACpC,8BAA8B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACtD,2BAA2B,EAAE,0BAA0B,EACvD,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,EAAE,CA2ClB;AAySD,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;AAsFD,wBAAsB,SAAS,CAAC,GAAG,EAAE,WAAW,iBAsL/C"}