@figma/code-connect 1.0.6 → 1.1.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 (156) hide show
  1. package/README.md +2 -595
  2. package/dist/client/figma_client.d.ts +1 -1
  3. package/dist/client/figma_client.js +9 -7
  4. package/dist/client/figma_client.js.map +1 -1
  5. package/dist/commands/connect.d.ts +4 -2
  6. package/dist/commands/connect.d.ts.map +1 -1
  7. package/dist/commands/connect.js +97 -49
  8. package/dist/commands/connect.js.map +1 -1
  9. package/dist/common/project.d.ts +86 -0
  10. package/dist/common/project.d.ts.map +1 -0
  11. package/dist/common/project.js +138 -0
  12. package/dist/common/project.js.map +1 -0
  13. package/dist/connect/api.d.ts +143 -0
  14. package/dist/connect/api.d.ts.map +1 -0
  15. package/dist/connect/api.js +3 -0
  16. package/dist/connect/api.js.map +1 -0
  17. package/dist/connect/create.d.ts.map +1 -1
  18. package/dist/connect/create.js +4 -0
  19. package/dist/connect/create.js.map +1 -1
  20. package/dist/connect/create_common.d.ts +7 -0
  21. package/dist/connect/create_common.d.ts.map +1 -0
  22. package/dist/connect/create_common.js +19 -0
  23. package/dist/connect/create_common.js.map +1 -0
  24. package/dist/connect/external_types.d.ts +8 -0
  25. package/dist/connect/external_types.d.ts.map +1 -0
  26. package/dist/connect/external_types.js +31 -0
  27. package/dist/connect/external_types.js.map +1 -0
  28. package/dist/connect/figma_connect.d.ts +26 -0
  29. package/dist/connect/figma_connect.d.ts.map +1 -0
  30. package/dist/connect/figma_connect.js +3 -0
  31. package/dist/connect/figma_connect.js.map +1 -0
  32. package/dist/connect/figma_rest_api.d.ts +7 -0
  33. package/dist/connect/figma_rest_api.d.ts.map +1 -1
  34. package/dist/connect/figma_rest_api.js.map +1 -1
  35. package/dist/connect/index_common.d.ts +3 -0
  36. package/dist/connect/index_common.d.ts.map +1 -0
  37. package/dist/connect/index_common.js +23 -0
  38. package/dist/connect/index_common.js.map +1 -0
  39. package/dist/connect/intrinsics.d.ts +94 -0
  40. package/dist/connect/intrinsics.d.ts.map +1 -0
  41. package/dist/connect/intrinsics.js +401 -0
  42. package/dist/connect/intrinsics.js.map +1 -0
  43. package/dist/connect/parser_common.d.ts +144 -0
  44. package/dist/connect/parser_common.d.ts.map +1 -0
  45. package/dist/connect/parser_common.js +297 -0
  46. package/dist/connect/parser_common.js.map +1 -0
  47. package/dist/connect/parser_executable_types.d.ts +20 -23
  48. package/dist/connect/parser_executable_types.d.ts.map +1 -1
  49. package/dist/connect/parser_executable_types.js.map +1 -1
  50. package/dist/connect/parser_executables.js +1 -1
  51. package/dist/connect/parser_executables.js.map +1 -1
  52. package/dist/connect/project.d.ts +20 -5
  53. package/dist/connect/project.d.ts.map +1 -1
  54. package/dist/connect/project.js +79 -16
  55. package/dist/connect/project.js.map +1 -1
  56. package/dist/connect/upload.d.ts +1 -1
  57. package/dist/connect/upload.d.ts.map +1 -1
  58. package/dist/connect/validation.d.ts +1 -1
  59. package/dist/connect/validation.d.ts.map +1 -1
  60. package/dist/connect/wizard/helpers.d.ts.map +1 -1
  61. package/dist/connect/wizard/helpers.js +18 -14
  62. package/dist/connect/wizard/helpers.js.map +1 -1
  63. package/dist/connect/wizard/prop_mapping.d.ts +12 -7
  64. package/dist/connect/wizard/prop_mapping.d.ts.map +1 -1
  65. package/dist/connect/wizard/prop_mapping.js +88 -89
  66. package/dist/connect/wizard/prop_mapping.js.map +1 -1
  67. package/dist/connect/wizard/run_wizard.d.ts.map +1 -1
  68. package/dist/connect/wizard/run_wizard.js +8 -3
  69. package/dist/connect/wizard/run_wizard.js.map +1 -1
  70. package/dist/connect/wizard/signature_extraction.d.ts +7 -0
  71. package/dist/connect/wizard/signature_extraction.d.ts.map +1 -0
  72. package/dist/connect/wizard/signature_extraction.js +46 -0
  73. package/dist/connect/wizard/signature_extraction.js.map +1 -0
  74. package/dist/html/__test__/parser/examples/NoConfigObject.figma.d.ts +2 -0
  75. package/dist/html/__test__/parser/examples/NoConfigObject.figma.d.ts.map +1 -0
  76. package/dist/html/__test__/parser/examples/NoConfigObject.figma.js +9 -0
  77. package/dist/html/__test__/parser/examples/NoConfigObject.figma.js.map +1 -0
  78. package/dist/html/__test__/parser/examples/NoExample.figma.d.ts +2 -0
  79. package/dist/html/__test__/parser/examples/NoExample.figma.d.ts.map +1 -0
  80. package/dist/html/__test__/parser/examples/NoExample.figma.js +9 -0
  81. package/dist/html/__test__/parser/examples/NoExample.figma.js.map +1 -0
  82. package/dist/html/__test__/parser/examples/RegularFunctionExampleWithExtraCode.figma.d.ts +2 -0
  83. package/dist/html/__test__/parser/examples/RegularFunctionExampleWithExtraCode.figma.d.ts.map +1 -0
  84. package/dist/html/__test__/parser/examples/RegularFunctionExampleWithExtraCode.figma.js +33 -0
  85. package/dist/html/__test__/parser/examples/RegularFunctionExampleWithExtraCode.figma.js.map +1 -0
  86. package/dist/html/__test__/parser/examples/WrongSignatureJsx.figma.d.ts +2 -0
  87. package/dist/html/__test__/parser/examples/WrongSignatureJsx.figma.d.ts.map +1 -0
  88. package/dist/html/__test__/parser/examples/WrongSignatureJsx.figma.js +15 -0
  89. package/dist/html/__test__/parser/examples/WrongSignatureJsx.figma.js.map +1 -0
  90. package/dist/html/__test__/parser/examples/WrongSignatureNoHtmlTag.figma.d.ts +2 -0
  91. package/dist/html/__test__/parser/examples/WrongSignatureNoHtmlTag.figma.d.ts.map +1 -0
  92. package/dist/html/__test__/parser/examples/WrongSignatureNoHtmlTag.figma.js +15 -0
  93. package/dist/html/__test__/parser/examples/WrongSignatureNoHtmlTag.figma.js.map +1 -0
  94. package/dist/html/__test__/parser/parser.test.d.ts +2 -0
  95. package/dist/html/__test__/parser/parser.test.d.ts.map +1 -0
  96. package/dist/html/__test__/parser/parser.test.js +50 -0
  97. package/dist/html/__test__/parser/parser.test.js.map +1 -0
  98. package/dist/html/create.d.ts +4 -0
  99. package/dist/html/create.d.ts.map +1 -0
  100. package/dist/html/create.js +81 -0
  101. package/dist/html/create.js.map +1 -0
  102. package/dist/html/external.d.ts +8 -0
  103. package/dist/html/external.d.ts.map +1 -0
  104. package/dist/html/external.js +25 -0
  105. package/dist/html/external.js.map +1 -0
  106. package/dist/html/index_html.d.ts +77 -0
  107. package/dist/html/index_html.d.ts.map +1 -0
  108. package/dist/html/index_html.js +42 -0
  109. package/dist/html/index_html.js.map +1 -0
  110. package/dist/html/parser.d.ts +19 -0
  111. package/dist/html/parser.d.ts.map +1 -0
  112. package/dist/html/parser.js +487 -0
  113. package/dist/html/parser.js.map +1 -0
  114. package/dist/html/parser_template_helpers.d.ts +2 -0
  115. package/dist/html/parser_template_helpers.d.ts.map +1 -0
  116. package/dist/html/parser_template_helpers.js +68 -0
  117. package/dist/html/parser_template_helpers.js.map +1 -0
  118. package/dist/html/template_literal.d.ts +5 -0
  119. package/dist/html/template_literal.d.ts.map +1 -0
  120. package/dist/html/template_literal.js +8 -0
  121. package/dist/html/template_literal.js.map +1 -0
  122. package/dist/parser_scripts/get_swift_parser_dir.d.ts +1 -1
  123. package/dist/parser_scripts/get_swift_parser_dir.d.ts.map +1 -1
  124. package/dist/parser_scripts/get_swift_parser_dir.js +38 -10
  125. package/dist/parser_scripts/get_swift_parser_dir.js.map +1 -1
  126. package/dist/react/create.d.ts +5 -0
  127. package/dist/react/create.d.ts.map +1 -1
  128. package/dist/react/create.js +144 -42
  129. package/dist/react/create.js.map +1 -1
  130. package/dist/react/external.d.ts +9 -0
  131. package/dist/react/external.d.ts.map +1 -0
  132. package/dist/react/external.js +45 -0
  133. package/dist/react/external.js.map +1 -0
  134. package/dist/react/index_react.d.ts +94 -0
  135. package/dist/react/index_react.d.ts.map +1 -0
  136. package/dist/react/index_react.js +39 -0
  137. package/dist/react/index_react.js.map +1 -0
  138. package/dist/react/parser.d.ts +6 -38
  139. package/dist/react/parser.d.ts.map +1 -1
  140. package/dist/react/parser.js +137 -295
  141. package/dist/react/parser.js.map +1 -1
  142. package/dist/react/parser_template_helpers.d.ts +15 -15
  143. package/dist/react/parser_template_helpers.d.ts.map +1 -1
  144. package/dist/react/parser_template_helpers.js +51 -35
  145. package/dist/react/parser_template_helpers.js.map +1 -1
  146. package/dist/storybook/convert.d.ts +1 -1
  147. package/dist/storybook/convert.d.ts.map +1 -1
  148. package/dist/storybook/convert.js +6 -4
  149. package/dist/storybook/convert.js.map +1 -1
  150. package/dist/storybook/external.d.ts +1 -1
  151. package/dist/storybook/external.d.ts.map +1 -1
  152. package/dist/typescript/compiler.d.ts +2 -2
  153. package/dist/typescript/compiler.d.ts.map +1 -1
  154. package/dist/typescript/compiler.js +50 -23
  155. package/dist/typescript/compiler.js.map +1 -1
  156. package/package.json +27 -7
@@ -0,0 +1,401 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.parsePropsObject = exports.intrinsicToString = exports.valueMappingToString = exports.parseIntrinsic = exports.IntrinsicKind = exports.FIGMA_CONNECT_CALL = exports.API_PREFIX = void 0;
27
+ const ts = __importStar(require("typescript"));
28
+ const parser_common_1 = require("./parser_common");
29
+ const compiler_1 = require("../typescript/compiler");
30
+ const compiler_2 = require("../typescript/compiler");
31
+ const compiler_3 = require("../typescript/compiler");
32
+ const parser_template_helpers_1 = require("../react/parser_template_helpers");
33
+ exports.API_PREFIX = 'figma';
34
+ exports.FIGMA_CONNECT_CALL = `${exports.API_PREFIX}.connect`;
35
+ var IntrinsicKind;
36
+ (function (IntrinsicKind) {
37
+ IntrinsicKind["Enum"] = "enum";
38
+ IntrinsicKind["String"] = "string";
39
+ IntrinsicKind["Boolean"] = "boolean";
40
+ IntrinsicKind["Instance"] = "instance";
41
+ IntrinsicKind["Children"] = "children";
42
+ IntrinsicKind["NestedProps"] = "nested-props";
43
+ IntrinsicKind["ClassName"] = "className";
44
+ IntrinsicKind["TextContent"] = "text-content";
45
+ })(IntrinsicKind || (exports.IntrinsicKind = IntrinsicKind = {}));
46
+ const Intrinsics = {};
47
+ /**
48
+ * These functions are used to convert "intrinsic" parser types (which are calls to helper functions
49
+ * like `Figma.boolean() in code)` to an object representing that intrinsic that we can serialize to JSON.
50
+ *
51
+ * Each call to `makeIntrinsic` should take a function from the {@link FigmaConnectAPI},
52
+ * ensuring that the name of the intrinsic that we're parsing matches the name of the function
53
+ *
54
+ * @param staticFunctionMember
55
+ * @param obj
56
+ */
57
+ function makeIntrinsic(intrinsicName, obj) {
58
+ const name = `${exports.API_PREFIX}.${intrinsicName}`;
59
+ Intrinsics[name] = {
60
+ match: (exp) => {
61
+ return ts.isCallExpression(exp) && exp.getText().startsWith(name);
62
+ },
63
+ ...obj(name),
64
+ };
65
+ }
66
+ makeIntrinsic('boolean', (name) => {
67
+ return {
68
+ parse: (exp, ctx) => {
69
+ const figmaPropNameIdentifier = exp.arguments?.[0];
70
+ (0, compiler_1.assertIsStringLiteral)(figmaPropNameIdentifier, ctx.sourceFile, `${name} takes at least one argument, which is the Figma property name`);
71
+ const valueMappingArg = exp.arguments?.[1];
72
+ let valueMapping;
73
+ if (valueMappingArg) {
74
+ (0, compiler_3.assertIsObjectLiteralExpression)(valueMappingArg, ctx.sourceFile, `${name} second argument should be an object literal, that sets values for 'true' and 'false'`);
75
+ valueMapping = parsePropsObject(valueMappingArg, ctx);
76
+ }
77
+ return {
78
+ kind: IntrinsicKind.Boolean,
79
+ args: {
80
+ figmaPropName: (0, compiler_1.stripQuotesFromNode)(figmaPropNameIdentifier),
81
+ valueMapping,
82
+ },
83
+ };
84
+ },
85
+ };
86
+ });
87
+ makeIntrinsic('enum', (name) => {
88
+ return {
89
+ parse: (exp, ctx) => {
90
+ const { sourceFile } = ctx;
91
+ const figmaPropNameIdentifier = exp.arguments?.[0];
92
+ (0, compiler_1.assertIsStringLiteral)(figmaPropNameIdentifier, sourceFile, `${name} takes at least one argument, which is the Figma property name`);
93
+ const valueMapping = exp.arguments?.[1];
94
+ (0, compiler_3.assertIsObjectLiteralExpression)(valueMapping, sourceFile, `${name} second argument should be an object literal, that maps Figma prop values to code`);
95
+ return {
96
+ kind: IntrinsicKind.Enum,
97
+ args: {
98
+ figmaPropName: (0, compiler_1.stripQuotesFromNode)(figmaPropNameIdentifier),
99
+ valueMapping: parsePropsObject(valueMapping, ctx),
100
+ },
101
+ };
102
+ },
103
+ };
104
+ });
105
+ makeIntrinsic('string', (name) => {
106
+ return {
107
+ parse: (exp, ctx) => {
108
+ const { sourceFile } = ctx;
109
+ const figmaPropNameIdentifier = exp.arguments?.[0];
110
+ (0, compiler_1.assertIsStringLiteral)(figmaPropNameIdentifier, sourceFile, `${name} takes at least one argument, which is the Figma property name`);
111
+ return {
112
+ kind: IntrinsicKind.String,
113
+ args: {
114
+ figmaPropName: (0, compiler_1.stripQuotesFromNode)(figmaPropNameIdentifier),
115
+ },
116
+ };
117
+ },
118
+ };
119
+ });
120
+ makeIntrinsic('instance', (name) => {
121
+ return {
122
+ parse: (exp, ctx) => {
123
+ const { sourceFile } = ctx;
124
+ const figmaPropNameIdentifier = exp.arguments?.[0];
125
+ (0, compiler_1.assertIsStringLiteral)(figmaPropNameIdentifier, sourceFile, `${name} takes at least one argument, which is the Figma property name`);
126
+ return {
127
+ kind: IntrinsicKind.Instance,
128
+ args: {
129
+ figmaPropName: (0, compiler_1.stripQuotesFromNode)(figmaPropNameIdentifier),
130
+ },
131
+ };
132
+ },
133
+ };
134
+ });
135
+ makeIntrinsic('children', (name) => {
136
+ return {
137
+ parse: (exp, ctx) => {
138
+ const { sourceFile } = ctx;
139
+ const layerName = exp.arguments?.[0];
140
+ const layers = [];
141
+ if (ts.isStringLiteral(layerName)) {
142
+ layers.push((0, compiler_1.stripQuotesFromNode)(layerName));
143
+ }
144
+ else if (ts.isArrayLiteralExpression(layerName) && layerName.elements.length > 0) {
145
+ layerName.elements.forEach((el) => {
146
+ (0, compiler_1.assertIsStringLiteral)(el, sourceFile);
147
+ const name = (0, compiler_1.stripQuotesFromNode)(el);
148
+ if (name.includes('*')) {
149
+ throw new parser_common_1.ParserError(`Wildcards can not be used with an array of strings. Use a single string literal instead.`, {
150
+ node: layerName,
151
+ sourceFile,
152
+ });
153
+ }
154
+ layers.push((0, compiler_1.stripQuotesFromNode)(el));
155
+ });
156
+ }
157
+ else {
158
+ throw new parser_common_1.ParserError(`Invalid argument to ${name}, should be a string literal or an array of strings`, {
159
+ node: layerName,
160
+ sourceFile,
161
+ });
162
+ }
163
+ return {
164
+ kind: IntrinsicKind.Children,
165
+ args: {
166
+ layers,
167
+ },
168
+ };
169
+ },
170
+ };
171
+ });
172
+ makeIntrinsic('nestedProps', (name) => {
173
+ return {
174
+ parse: (exp, ctx) => {
175
+ const { sourceFile } = ctx;
176
+ const layerName = exp.arguments?.[0];
177
+ const mapping = exp.arguments?.[1];
178
+ (0, compiler_1.assertIsStringLiteral)(layerName, sourceFile, `Invalid argument to ${name}, \`layerName\` should be a string literal`);
179
+ (0, compiler_3.assertIsObjectLiteralExpression)(mapping, sourceFile, `Invalid argument to ${name}, \`props\` should be an object literal`);
180
+ ts.forEachChild(mapping, (node) => {
181
+ if (ts.isPropertyAssignment(node) &&
182
+ ts.isCallExpression(node.initializer) &&
183
+ node.initializer.getText().startsWith('figma.nestedProps')) {
184
+ throw new parser_common_1.ParserError(`nestedProps can not be nested inside another nestedProps call, instead, pass the deeply nested layer name at the top level`);
185
+ }
186
+ });
187
+ return {
188
+ kind: IntrinsicKind.NestedProps,
189
+ args: {
190
+ layer: (0, compiler_1.stripQuotesFromNode)(layerName),
191
+ props: parsePropsObject(mapping, ctx),
192
+ },
193
+ };
194
+ },
195
+ };
196
+ });
197
+ makeIntrinsic('className', (name) => {
198
+ return {
199
+ parse: (exp, ctx) => {
200
+ const { sourceFile } = ctx;
201
+ const classNameArg = exp.arguments?.[0];
202
+ const className = [];
203
+ (0, compiler_1.assertIsArrayLiteralExpression)(classNameArg, sourceFile, `${name} takes an array of strings`);
204
+ classNameArg.elements.forEach((el) => {
205
+ if (ts.isStringLiteral(el)) {
206
+ className.push((0, compiler_1.stripQuotesFromNode)(el));
207
+ }
208
+ else if (ts.isCallExpression(el)) {
209
+ className.push(parseIntrinsic(el, ctx));
210
+ }
211
+ });
212
+ return {
213
+ kind: IntrinsicKind.ClassName,
214
+ args: {
215
+ className,
216
+ },
217
+ };
218
+ },
219
+ };
220
+ });
221
+ makeIntrinsic('textContent', (name) => {
222
+ return {
223
+ parse: (exp, ctx) => {
224
+ const { sourceFile } = ctx;
225
+ const layerNameArg = exp.arguments?.[0];
226
+ (0, compiler_1.assertIsStringLiteral)(layerNameArg, sourceFile, `${name} takes a single argument which is the Figma layer name`);
227
+ return {
228
+ kind: IntrinsicKind.TextContent,
229
+ args: {
230
+ layer: (0, compiler_1.stripQuotesFromNode)(layerNameArg),
231
+ },
232
+ };
233
+ },
234
+ };
235
+ });
236
+ /**
237
+ * Parses a call expression to an intrinsic
238
+ *
239
+ * @param exp Expression to parse
240
+ * @param parserContext parser context
241
+ * @returns
242
+ */
243
+ function parseIntrinsic(exp, parserContext) {
244
+ for (const key in Intrinsics) {
245
+ if (Intrinsics[key].match(exp)) {
246
+ return Intrinsics[key].parse(exp, parserContext);
247
+ }
248
+ }
249
+ throw new parser_common_1.ParserError(`Unknown intrinsic: ${exp.getText()}`, {
250
+ node: exp,
251
+ sourceFile: parserContext.sourceFile,
252
+ });
253
+ }
254
+ exports.parseIntrinsic = parseIntrinsic;
255
+ /**
256
+ * Replace newlines in enum values with \\n so that we don't output
257
+ * broken JS with newlines inside the string
258
+ */
259
+ function replaceNewlines(str) {
260
+ return str.toString().replaceAll('\n', '\\n').replaceAll("'", "\\'");
261
+ }
262
+ function valueMappingToString(valueMapping, childLayer) {
263
+ // For enums (and booleans with a valueMapping provided), convert the
264
+ // value mapping to an object.
265
+ return ('{\n' +
266
+ Object.entries(valueMapping)
267
+ .map(([key, value]) => {
268
+ if (typeof value === 'boolean' ||
269
+ typeof value === 'number' ||
270
+ typeof value === 'undefined') {
271
+ return `"${key}": ${value}`;
272
+ }
273
+ if (typeof value === 'string') {
274
+ return `"${key}": '${replaceNewlines(value)}'`;
275
+ }
276
+ if ('kind' in value) {
277
+ // Mappings can be nested, e.g. an enum value can be figma.instance(...)
278
+ return `"${key}": ${intrinsicToString(value, childLayer)}`;
279
+ }
280
+ // Convert objects to strings
281
+ const str = typeof value.$value === 'string' ? value.$value : `${JSON.stringify(value.$value)}`;
282
+ const v = replaceNewlines(str);
283
+ switch (value.$type) {
284
+ case 'function':
285
+ return `"${key}": _fcc_function('${v}')`;
286
+ case 'identifier':
287
+ return `"${key}": _fcc_identifier('${v}')`;
288
+ case 'object':
289
+ // Don't pass the object itself wrapped in quotes - this helper needs to instantiate the actual
290
+ // object, as it may be used in the snippet code
291
+ return `"${key}": _fcc_object(${v})`;
292
+ case 'template-string':
293
+ return `"${key}": _fcc_templateString('${v}')`;
294
+ case 'jsx-element':
295
+ return `"${key}": _fcc_jsxElement('${v}')`;
296
+ default:
297
+ throw new parser_common_1.InternalError(`Unknown helper type: ${value}`);
298
+ }
299
+ })
300
+ .join(',\n') +
301
+ '}');
302
+ }
303
+ exports.valueMappingToString = valueMappingToString;
304
+ let nestedLayerCount = 0;
305
+ function intrinsicToString({ kind, args }, childLayer) {
306
+ const selector = childLayer ?? `figma.currentLayer`;
307
+ switch (kind) {
308
+ case IntrinsicKind.String:
309
+ case IntrinsicKind.Instance: {
310
+ // Outputs:
311
+ // `const propName = figma.properties.string('propName')`, or
312
+ // `const propName = figma.properties.boolean('propName')`, or
313
+ // `const propName = figma.properties.instance('propName')`
314
+ return `${selector}.__properties__.${kind}('${args.figmaPropName}')`;
315
+ }
316
+ case IntrinsicKind.Boolean: {
317
+ if (args.valueMapping) {
318
+ const mappingString = valueMappingToString(args.valueMapping, childLayer);
319
+ // Outputs: `const propName = figma.properties.boolean('propName', { ... mapping object from above ... })`
320
+ return `${selector}.__properties__.boolean('${args.figmaPropName}', ${mappingString})`;
321
+ }
322
+ return `${selector}.__properties__.boolean('${args.figmaPropName}')`;
323
+ }
324
+ case IntrinsicKind.Enum: {
325
+ const mappingString = valueMappingToString(args.valueMapping, childLayer);
326
+ // Outputs: `const propName = figma.properties.enum('propName', { ... mapping object from above ... })`
327
+ return `${selector}.__properties__.enum('${args.figmaPropName}', ${mappingString})`;
328
+ }
329
+ case IntrinsicKind.Children: {
330
+ // Outputs: `const propName = figma.properties.children(["Layer 1", "Layer 2"])`
331
+ return `${selector}.__properties__.children([${args.layers.map((layerName) => `"${layerName}"`).join(',')}])`;
332
+ }
333
+ case IntrinsicKind.ClassName: {
334
+ // Outputs: `const propName = ['btn-base', figma.currentLayer.__properties__.enum('Size, { Large: 'btn-large' })].join(" ")`
335
+ return `[${args.className.map((className) => (typeof className === 'string' ? `"${className}"` : `${intrinsicToString(className, childLayer)}`)).join(', ')}].filter(v => !!v).join(' ')`;
336
+ }
337
+ case IntrinsicKind.TextContent: {
338
+ return `${selector}.__findChildWithCriteria__({ name: '${args.layer}', type: "TEXT" }).__render__()`;
339
+ }
340
+ case IntrinsicKind.NestedProps: {
341
+ let body = '';
342
+ // the actual layer name in figma could have a bunch of special characters in it,
343
+ // and if we try to normalize it to a valid JS identifier, it could conflict with
344
+ // other variables in the template code. So we generate a unique variable name
345
+ // for each nested layer reference instead. The only reason it's wrapped in a funciton
346
+ // currently is to keep the error checking out of global scope
347
+ const nestedLayerRef = `nestedLayer${nestedLayerCount++}`;
348
+ body += `const ${nestedLayerRef} = figma.currentLayer.__find__("${args.layer}")\n`;
349
+ body += `return ${nestedLayerRef}.type === "ERROR" ? ${nestedLayerRef} : {
350
+ ${Object.entries(args.props).map(([key, intrinsic]) => `${key}: ${intrinsicToString(intrinsic, nestedLayerRef)}\n`)}
351
+ }\n`;
352
+ return `(function () {${body}})()`;
353
+ }
354
+ default:
355
+ throw new parser_common_1.InternalError(`Unknown intrinsic: ${kind}`);
356
+ }
357
+ }
358
+ exports.intrinsicToString = intrinsicToString;
359
+ function expressionToFccEnumValue(valueNode, parserContext) {
360
+ if (ts.isParenthesizedExpression(valueNode)) {
361
+ return expressionToFccEnumValue(valueNode.expression, parserContext);
362
+ }
363
+ if (ts.isJsxElement(valueNode) || ts.isJsxSelfClosingElement(valueNode)) {
364
+ return (0, parser_template_helpers_1._fcc_jsxElement)(valueNode.getText());
365
+ }
366
+ if (ts.isArrowFunction(valueNode) || ts.isFunctionExpression(valueNode)) {
367
+ return (0, parser_template_helpers_1._fcc_function)(valueNode.getText());
368
+ }
369
+ if (ts.isObjectLiteralExpression(valueNode)) {
370
+ // should recursively convert to FCC
371
+ return (0, parser_template_helpers_1._fcc_object)(parsePropsObject(valueNode, parserContext));
372
+ }
373
+ if (ts.isTemplateLiteral(valueNode)) {
374
+ const str = valueNode.getText().replaceAll('`', '');
375
+ return (0, parser_template_helpers_1._fcc_templateString)(str);
376
+ }
377
+ if (ts.isPropertyAccessExpression(valueNode)) {
378
+ return (0, parser_template_helpers_1._fcc_identifier)(valueNode.getText());
379
+ }
380
+ // Fall back to the default conversion in `convertObjectLiteralToJs`
381
+ return undefined;
382
+ }
383
+ /**
384
+ * Parses the `props` field in a `figma.connect()` call, returning a mapping of
385
+ * prop names to their respective intrinsic types
386
+ *
387
+ * @param objectLiteral An object literal expression
388
+ * @param parserContext Parser context
389
+ * @returns
390
+ */
391
+ function parsePropsObject(objectLiteral, parserContext) {
392
+ const { sourceFile, checker } = parserContext;
393
+ return (0, compiler_2.convertObjectLiteralToJs)(objectLiteral, sourceFile, checker, (valueNode) => {
394
+ if (ts.isCallExpression(valueNode)) {
395
+ return parseIntrinsic(valueNode, parserContext);
396
+ }
397
+ return expressionToFccEnumValue(valueNode, parserContext);
398
+ });
399
+ }
400
+ exports.parsePropsObject = parsePropsObject;
401
+ //# sourceMappingURL=intrinsics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intrinsics.js","sourceRoot":"","sources":["../../src/connect/intrinsics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ import ts from 'typescript';
2
+ import { PropMappings } from './intrinsics';
3
+ import { BaseCodeConnectConfig } from './project';
4
+ import { CodeConnectJSON } from './figma_connect';
5
+ interface ParserErrorContext {
6
+ sourceFile: ts.SourceFile;
7
+ node: ts.Node | undefined;
8
+ }
9
+ export declare function getPositionInSourceFile(node: ts.Node, sourceFile: ts.SourceFile): ts.LineAndCharacter;
10
+ export declare class ParserError extends Error {
11
+ sourceFilePosition: ts.LineAndCharacter | null;
12
+ sourceFileName: string;
13
+ constructor(message: string, context?: ParserErrorContext);
14
+ toString(): string;
15
+ toDebugString(): string;
16
+ }
17
+ export declare class InternalError extends ParserError {
18
+ constructor(message: string);
19
+ }
20
+ export interface ParserContext {
21
+ checker: ts.TypeChecker;
22
+ sourceFile: ts.SourceFile;
23
+ resolvedImports: Record<string, string>;
24
+ config: any;
25
+ absPath: string;
26
+ }
27
+ /**
28
+ * Factory to create a function that is used to create `__PROP__(propName)`
29
+ * function nodes, which are used to replace prop references and ultimately
30
+ * replaced.
31
+ *
32
+ * @returns Function to create `__PROP__(propName)` function nodes
33
+ */
34
+ export declare function makeCreatePropPlaceholder({ propMappings, referencedProps, sourceFile, }: {
35
+ /** The prop mappings object */
36
+ propMappings: PropMappings | undefined;
37
+ /** The set of referenced props in the current example */
38
+ referencedProps: Set<string>;
39
+ /** The source file */
40
+ sourceFile: ts.SourceFile;
41
+ }): ({ name, node, wrapInJsxExpression, }: {
42
+ /** The prop name */
43
+ name: string;
44
+ /** The props node, used for error reporting */
45
+ node: ts.Node;
46
+ /** Whether to wrap the placeholder in a JSX expression node */
47
+ wrapInJsxExpression?: boolean | undefined;
48
+ }) => ts.CallExpression | ts.JsxExpression;
49
+ /**
50
+ * TS AST visitor function for use with example functions, which replaces
51
+ * references to the `props` argument in various forms in the example code with
52
+ * `__PROP__(propName)` placeholders (created with a createPropPlaceholder
53
+ * function).
54
+ *
55
+ * This is called when transforming the TS AST, and allows us to normalise the
56
+ * different forms of supported prop references into a single representation,
57
+ * which we can then handle consistently (currently we replace the placeholders,
58
+ * using a regex).
59
+ *
60
+ * @returns Placeholder node, or undefined if the node is not a supported prop
61
+ * reference (which results in no transformation)
62
+ */
63
+ export declare function visitPropReferencingNode({ propsParameter, node, createPropPlaceholder, useJsx, }: {
64
+ /** The props function parameter node */
65
+ propsParameter: ts.ParameterDeclaration;
66
+ /** The node to visit */
67
+ node: ts.Node;
68
+ /**
69
+ * The function to create `__PROP__(propName)` function nodes, created by
70
+ * `baseCreatePropPlaceholder`
71
+ * */
72
+ createPropPlaceholder: ReturnType<typeof makeCreatePropPlaceholder>;
73
+ /** Whether to support JSX syntax or not */
74
+ useJsx?: boolean;
75
+ }): ts.Expression | undefined;
76
+ /**
77
+ * Get template code to create variables referencing the props in the prop
78
+ * mappings. This converts the prop mappings into JS calls like `const propName
79
+ * = figma.properties.string('Prop Name')`, which can then be prepended to the
80
+ * template code.
81
+ *
82
+ * @returns Template code string
83
+ */
84
+ export declare function getReferencedPropsForTemplate({ propMappings, referencedProps, exp, sourceFile, }: {
85
+ /** The prop mappings object */
86
+ propMappings: PropMappings | undefined;
87
+ /** The set of referenced props */
88
+ referencedProps: Set<string>;
89
+ /** The top level node, used for error reporting */
90
+ exp: ts.Node;
91
+ /** The source file */
92
+ sourceFile: ts.SourceFile;
93
+ }): string;
94
+ /**
95
+ * Checks if a file contains Code Connect by looking for the `figma.connect()` function call
96
+ */
97
+ export declare function isFigmaConnectFile(program: ts.Program, file: string, extension: string): boolean;
98
+ /**
99
+ * Checks if an AST node is a `figma.connect()` call
100
+ *
101
+ * @param node AST node
102
+ * @param sourceFile Source file
103
+ * @returns True if the node is a `figma.connect()` call
104
+ */
105
+ export declare function isFigmaConnectCall(node: ts.Node, sourceFile: ts.SourceFile): node is ts.CallExpression;
106
+ export declare function findDescendants(node: ts.Node, cb: (node: ts.Node) => boolean): ts.Node[];
107
+ /**
108
+ * Parses the `links` field of a `figma.connect()` call
109
+ *
110
+ * @param linksArray an ArrayLiteralExpression
111
+ * @param parserContext Parser context
112
+ * @returns An array of link objects
113
+ */
114
+ export declare function parseLinks(linksArray: ts.ArrayLiteralExpression, parserContext: ParserContext): {
115
+ name: string;
116
+ url: string;
117
+ }[];
118
+ export declare function parseVariant(variantMap: ts.ObjectLiteralExpression, sourceFile: ts.SourceFile, checker: ts.TypeChecker): Record<string, any>;
119
+ /**
120
+ * Parses the `imports` field of a `figma.connect()` call
121
+ *
122
+ * @param importsArray an ArrayLiteralExpression
123
+ * @param parserContext Parser context
124
+ * @returns An array of link objects
125
+ */
126
+ export declare function parseImports(importsArray: ts.ArrayLiteralExpression, parserContext: ParserContext): string[];
127
+ export type ParseOptions = {
128
+ repoUrl?: string;
129
+ debug?: boolean;
130
+ silent?: boolean;
131
+ };
132
+ export type ParseFn = (node: ts.CallExpression, parserContext: ParserContext, { repoUrl, silent }: ParseOptions) => Promise<CodeConnectJSON>;
133
+ export type ResolveImportsFn = (program: ts.Program, sourceFile: ts.SourceFile) => Record<string, string>;
134
+ export declare function parseCodeConnect<T extends BaseCodeConnectConfig>({ program, file, config, absPath, parseFn, resolveImportsFn, parseOptions, }: {
135
+ program: ts.Program;
136
+ file: string;
137
+ config: T;
138
+ absPath: string;
139
+ parseFn: ParseFn;
140
+ resolveImportsFn?: ResolveImportsFn;
141
+ parseOptions?: ParseOptions;
142
+ }): Promise<any[]>;
143
+ export {};
144
+ //# sourceMappingURL=parser_common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser_common.d.ts","sourceRoot":"","sources":["../../src/connect/parser_common.ts"],"names":[],"mappings":"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"}