@figma/code-connect 1.3.13 → 1.4.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 (65) hide show
  1. package/dist/commands/connect.d.ts +1 -1
  2. package/dist/commands/connect.d.ts.map +1 -1
  3. package/dist/commands/connect.js +104 -25
  4. package/dist/commands/connect.js.map +1 -1
  5. package/dist/common/error_formatting.d.ts +34 -0
  6. package/dist/common/error_formatting.d.ts.map +1 -0
  7. package/dist/common/error_formatting.js +115 -0
  8. package/dist/common/error_formatting.js.map +1 -0
  9. package/dist/connect/api.d.ts +13 -0
  10. package/dist/connect/api.d.ts.map +1 -1
  11. package/dist/connect/api.js.map +1 -1
  12. package/dist/connect/external_types.d.ts +1 -0
  13. package/dist/connect/external_types.d.ts.map +1 -1
  14. package/dist/connect/external_types.js +4 -0
  15. package/dist/connect/external_types.js.map +1 -1
  16. package/dist/connect/figma_connect.d.ts +3 -1
  17. package/dist/connect/figma_connect.d.ts.map +1 -1
  18. package/dist/connect/figma_connect.js.map +1 -1
  19. package/dist/connect/intrinsics.d.ts +9 -2
  20. package/dist/connect/intrinsics.d.ts.map +1 -1
  21. package/dist/connect/intrinsics.js +19 -0
  22. package/dist/connect/intrinsics.js.map +1 -1
  23. package/dist/connect/label_language_mapping.d.ts +20 -5
  24. package/dist/connect/label_language_mapping.d.ts.map +1 -1
  25. package/dist/connect/label_language_mapping.js +36 -22
  26. package/dist/connect/label_language_mapping.js.map +1 -1
  27. package/dist/connect/migration_helpers.d.ts +22 -2
  28. package/dist/connect/migration_helpers.d.ts.map +1 -1
  29. package/dist/connect/migration_helpers.js +184 -24
  30. package/dist/connect/migration_helpers.js.map +1 -1
  31. package/dist/connect/parser_common.d.ts.map +1 -1
  32. package/dist/connect/parser_common.js +1 -0
  33. package/dist/connect/parser_common.js.map +1 -1
  34. package/dist/connect/parser_executable_types.d.ts +11 -5
  35. package/dist/connect/parser_executable_types.d.ts.map +1 -1
  36. package/dist/connect/parser_executable_types.js +5 -1
  37. package/dist/connect/parser_executable_types.js.map +1 -1
  38. package/dist/connect/project.d.ts +3 -2
  39. package/dist/connect/project.d.ts.map +1 -1
  40. package/dist/connect/project.js +1 -1
  41. package/dist/connect/project.js.map +1 -1
  42. package/dist/connect/upload.d.ts.map +1 -1
  43. package/dist/connect/upload.js +9 -4
  44. package/dist/connect/upload.js.map +1 -1
  45. package/dist/html/external.d.ts +1 -1
  46. package/dist/html/external.d.ts.map +1 -1
  47. package/dist/html/external.js +1 -0
  48. package/dist/html/external.js.map +1 -1
  49. package/dist/html/parser.js +1 -1
  50. package/dist/html/parser.js.map +1 -1
  51. package/dist/react/create.d.ts.map +1 -1
  52. package/dist/react/create.js +3 -0
  53. package/dist/react/create.js.map +1 -1
  54. package/dist/react/external.d.ts +2 -2
  55. package/dist/react/external.d.ts.map +1 -1
  56. package/dist/react/external.js +2 -1
  57. package/dist/react/external.js.map +1 -1
  58. package/dist/react/parser.js +1 -1
  59. package/dist/react/parser.js.map +1 -1
  60. package/dist/react/parser_template_helpers.d.ts.map +1 -1
  61. package/dist/react/parser_template_helpers.js +4 -1
  62. package/dist/react/parser_template_helpers.js.map +1 -1
  63. package/dist/storybook/convert.js +1 -1
  64. package/dist/storybook/convert.js.map +1 -1
  65. package/package.json +4 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error_formatting.js","sourceRoot":"","sources":["../../src/common/error_formatting.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Formats a file operation error\n */\nexport function formatFileError(opts: {\n operation: 'read' | 'write' | 'parse' | 'access'\n filePath: string\n error: Error\n suggestion?: string\n}): string {\n const { operation, filePath, error: err, suggestion } = opts\n\n let output = `āŒ Failed to ${operation} file: ${filePath}\\nError: ${err.message}`\n\n const defaultSuggestions: Record<string, string> = {\n read: 'Ensure the file exists and is readable.',\n access: 'Ensure the file exists and is readable.',\n write: 'Ensure the directory exists and is writable.',\n parse: 'Check the file syntax.',\n }\n\n const suggestionText = suggestion || defaultSuggestions[operation]\n if (suggestionText) {\n output += `\\nšŸ’” ${suggestionText}`\n }\n\n return output\n}\n\n/**\n * Formats a network/API error\n */\nexport function formatNetworkError(opts: {\n operation: string\n url?: string\n statusCode?: number\n error: Error\n suggestion?: string\n}): string {\n const { operation, url, statusCode, error: err, suggestion } = opts\n\n let output = `āŒ Network error: ${operation} failed`\n\n if (statusCode) {\n output += ` (HTTP ${statusCode})`\n }\n if (url) {\n output += `\\nURL: ${url}`\n }\n output += `\\nError: ${err.message}`\n\n const defaultSuggestions: Record<string, string> = {\n '401': 'Check your Figma access token is valid.',\n '403': 'Check your Figma access token has the necessary permissions.',\n '404': 'Resource not found. Verify the URL or node ID is correct.',\n '5xx': 'Figma server error. Try again later.',\n default: 'Check your internet connection.',\n }\n\n let suggestionText = suggestion\n if (!suggestionText && statusCode) {\n if (statusCode === 401 || statusCode === 403) {\n suggestionText = defaultSuggestions['401']\n } else if (statusCode === 404) {\n suggestionText = defaultSuggestions['404']\n } else if (statusCode >= 500) {\n suggestionText = defaultSuggestions['5xx']\n } else {\n suggestionText = defaultSuggestions.default\n }\n } else if (!suggestionText) {\n suggestionText = defaultSuggestions.default\n }\n\n output += `\\nšŸ’” ${suggestionText}`\n\n return output\n}\n\n/**\n * Formats a validation error\n */\nexport function formatValidationError(opts: {\n item: string\n errors: string[]\n suggestion?: string\n}): string {\n const { item, errors, suggestion } = opts\n\n let output = `āš ļø Validation failed for ${item}:`\n errors.forEach((err) => {\n output += `\\n - ${err}`\n })\n\n if (suggestion) {\n output += `\\nšŸ’” ${suggestion}`\n }\n\n return output\n}\n\n/**\n * Extracts the most relevant error message from a stack of errors\n * @param error - The error to extract a message from\n * @param isVerbose - Whether verbose mode is already enabled (to avoid suggesting --verbose when it's already on)\n */\nexport function extractErrorMessage(error: unknown, isVerbose = false): string {\n if (error instanceof Error) {\n // Check if it's a Zod error by checking for issues property\n if ('issues' in error && Array.isArray((error as any).issues)) {\n const issues = (error as any).issues\n const errorMessages = issues.map((issue: any) => {\n // Format path with bracket notation for array indices\n const path = issue.path\n .map((segment: string | number, index: number) => {\n if (typeof segment === 'number') {\n return `[${segment}]`\n }\n return index === 0 ? segment : `.${segment}`\n })\n .join('')\n return `${issue.message} at \"${path}\"`\n })\n const baseMessage = `Validation error: ${errorMessages.join('; ')}.`\n // Only suggest --verbose if it's not already enabled\n return isVerbose\n ? baseMessage\n : `${baseMessage} Try re-running the command with --verbose for more information.`\n }\n return error.message\n }\n if (typeof error === 'string') {\n return error\n }\n return String(error)\n}\n"]}
@@ -75,6 +75,19 @@ export interface FigmaConnectAPI<InstanceChildrenT, ChildrenT> {
75
75
  * @param figmaPropName The name of the property on the Figma component
76
76
  */
77
77
  instance<T = InstanceChildrenT>(figmaPropName: string): T;
78
+ /**
79
+ * Maps a Figma instance property for the connected slot layer. This prop is replaced
80
+ * with values from the Figma slot layer when viewed in Dev Mode. For example:
81
+ * ```ts
82
+ * props: {
83
+ * Menu: figma.slot('Menu'),
84
+ * }
85
+ * ```
86
+ * Would show the "Menu" slot layer connected as an instance property in Figma.
87
+ *
88
+ * @param figmaPropName The name of the property on the Figma component
89
+ */
90
+ slot<T = InstanceChildrenT>(figmaPropName: string): T;
78
91
  /**
79
92
  * Maps a Figma instance layer to a nested code example. For example:
80
93
  * ```ts
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/connect/api.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,OAAO,GACP,MAAM,GACN,MAAM,GACN,SAAS,GACT,KAAK,CAAC,YAAY,GAClB,QAAQ,GACR,MAAM,CAAA;AAEV;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAA;IACtB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,cAAc,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAA;CAC1F;AASD,MAAM,WAAW,eAAe,CAAC,iBAAiB,EAAE,SAAS;IAC3D;;;;;;;;;;;;;;;OAeG;IACH,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;IAEpF;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAA;IAErC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,CAAC,GAAG,iBAAiB,EAAE,aAAa,EAAE,MAAM,GAAG,CAAC,CAAA;IAEzD;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAA;IAElD;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,GAAG,MAAM,CAAA;IAEpD;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CACnC;AAED,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AAEnC,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC1B,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;CACzB,CAAA;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAKD,MAAM,WAAW,gBAAgB,CAC/B,MAAM,GAAG,EAAE,EACX,cAAc,GAAG,EAAE,EACnB,gBAAgB,GAAG,OAAO,EAC1B,aAAa,GAAG,KAAK;IAErB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAA;IAEnD;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,cAAc,KAAK,gBAAgB,CAAC,GAAG,aAAa,CAAA;IAEvE;;OAEG;IACH,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAA;CAC3B"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/connect/api.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,OAAO,GACP,MAAM,GACN,MAAM,GACN,SAAS,GACT,KAAK,CAAC,YAAY,GAClB,QAAQ,GACR,MAAM,CAAA;AAEV;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAA;IACtB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,cAAc,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAA;CAC1F;AASD,MAAM,WAAW,eAAe,CAAC,iBAAiB,EAAE,SAAS;IAC3D;;;;;;;;;;;;;;;OAeG;IACH,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;IAEpF;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAA;IAErC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,CAAC,GAAG,iBAAiB,EAAE,aAAa,EAAE,MAAM,GAAG,CAAC,CAAA;IAEzD;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,CAAC,GAAG,iBAAiB,EAAE,aAAa,EAAE,MAAM,GAAG,CAAC,CAAA;IAErD;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAA;IAElD;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,GAAG,MAAM,CAAA;IAEpD;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CACnC;AAED,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AAEnC,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC1B,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;CACzB,CAAA;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAKD,MAAM,WAAW,gBAAgB,CAC/B,MAAM,GAAG,EAAE,EACX,cAAc,GAAG,EAAE,EACnB,gBAAgB,GAAG,OAAO,EAC1B,aAAa,GAAG,KAAK;IAErB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAA;IAEnD;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,cAAc,KAAK,gBAAgB,CAAC,GAAG,aAAa,CAAA;IAEvE;;OAEG;IACH,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAA;CAC3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/connect/api.ts"],"names":[],"mappings":"","sourcesContent":["export type EnumValue =\n | string\n | boolean\n | number\n | symbol\n | undefined\n | React.ReactElement\n | Function\n | Object\n\n/**\n * These types are intended to be returned by figma helper functions for exposing the\n * supported output modifiers for that type. There's no implementation for these types,\n * they are resolved to primitive types when the `props` object is passed to `example`.\n */\nexport interface ConnectedComponent {\n /**\n * Returns the resolved props of the connected component. This is useful for accessing\n * the `props` object of a child in a parent context. For example:\n * ```ts\n * figma.connect(\"parent\", {\n * props: {\n * iconProps: figma.instance(\"Icon\").getProps(),\n * },\n * example: (iconProps) => <IconButton iconId={iconProps.iconId} />,\n * }\n */\n getProps<T = any>(): T\n /**\n * Renders the instance with the provided render function. The function is passed the resolved\n * `props` of the nested connected component. This is useful for dynamically rendering a child\n * component depending on parent context. For example:\n * ```ts\n * figma.connect(\"parent\", {\n * props: {\n * icon: figma.instance(\"Icon\").render(({ iconId }) => <Button.Icon iconId={iconId} />),\n * },\n * example: ({ icon }) => <Button icon={icon}/>,\n * }\n */\n render<T = unknown>(renderFunction: (props: T) => React.ReactElement): React.ReactElement\n}\n\n// This contains the base API interface for figma.connect calls across React and\n// HTML. Any parts which are platform-specific (either the function signature or\n// its docblock) are specified in the individual index_<platform> and added to\n// this using union typing.\n//\n// To override a docblock, all signatures of that function must be moved into\n// the platform-specific index file.\nexport interface FigmaConnectAPI<InstanceChildrenT, ChildrenT> {\n /**\n * Maps a Figma Variant property to a set if values for the connected component. This prop is replaced\n * with values from the Figma instance when viewed in Dev Mode. For example:\n * ```ts\n * props: {\n * type: figma.enum('Type', {\n * Primary: 'primary',\n * Secondary: 'secondary',\n * }),\n * }\n * ```\n * Would output \"primary\" if the Type Variant in Figma is set to \"Primary\".\n *\n * @param figmaPropName The name of the property on the Figma component\n * @param valueMapping A mapping of values for the Figma Variant\n */\n enum<V extends EnumValue>(figmaPropName: string, valueMapping: Record<string, V>): V\n\n /**\n * Maps a Figma property to a string value for the connected component. This prop is replaced\n * with values from the Figma instance when viewed in Dev Mode. For example:\n * ```ts\n * props: {\n * text: figma.string('Text'),\n * }\n * ```\n * Would replace `text` with the text content from the Figma property \"Text\".\n *\n * @param figmaPropName The name of the property on the Figma component\n */\n string(figmaPropName: string): string\n\n /**\n * Maps a Figma instance property for the connected component. This prop is replaced\n * with values from the Figma instance when viewed in Dev Mode. For example:\n * ```ts\n * props: {\n * icon: figma.instance('Icon'),\n * }\n * ```\n * Would show the nested examples for the component passed to the \"Icon\" property in Figma.\n *\n * @param figmaPropName The name of the property on the Figma component\n */\n instance<T = InstanceChildrenT>(figmaPropName: string): T\n\n /**\n * Maps a Figma instance layer to a nested code example. For example:\n * ```ts\n * props: {\n * icon: figma.children('Icon')\n * }\n * ```\n * Would show the nested code example for the child instance named 'Icon'. This also supports\n * an array: `tabs: figma.children(['Tab 1', 'Tab 2'])` to map multiple nested examples.\n *\n * You can pass a single wildcard '*' character to match partial names. For example:\n * ```ts\n * props: {\n * icon: figma.children('Icon*')\n * }\n * ```\n * Would show the nested code example for any child instance which name starts with \"Icon\"\n *\n * @param figmaPropName The name of the property on the Figma component\n */\n children(layerNames: string | string[]): ChildrenT\n\n /**\n * Creates a className string by joining an array of strings. The argument supports both\n * string literals and nested functions like `figma.enum` and `figma.boolean` that return\n * a string. For example:\n * ```ts\n * props: {\n * className: figma.className([\n * 'btn-base',\n * figma.enum('Size', { Large: 'btn-large' }),\n * figma.boolean('Disabled', { true: 'btn-disabled', false: '' }),\n * ]),\n * }\n *\n * @param className\n */\n className(className: (string | undefined)[]): string\n\n /**\n * Maps a Figma text layer to a string value representing the text content of that layer.\n * This function takes the layer name within the original component as its parameter.\n * For example:\n * ```ts\n * props: {\n * text: figma.textContent('Text Layer')\n * }\n * ```\n *\n * @param layer The name of the text layer in the Figma component\n */\n textContent(layer: string): string\n}\n\nexport type ValueOf<T> = T[keyof T]\n\nexport type PropMapping<T> = {\n [key in keyof T]: T[key]\n}\n\nexport interface FigmaConnectLink {\n name: string\n url: string\n}\n\n// ExampleFnReturnT is the return type of an example function.\n// ExtraExampleT allows us to pass in an extra type to the `example` property,\n// so that in Storybook, we can use strings to refer to non-hoisted functions\nexport interface FigmaConnectMeta<\n PropsT = {},\n ResolvedPropsT = {},\n ExampleFnReturnT = unknown,\n ExtraExampleT = never,\n> {\n /**\n * Restricts this figma connect to any variants that fullfill the given filter.\n * The filter is a map of Figma variant names to values. Example:\n * ```ts\n * {\n * variant: { \"Has Icon\": true }\n * }\n */\n variant?: Record<string, string | boolean | number>\n\n /**\n * Prop mappings for the connected component. This is used to map the values of the component's props\n * to the values that are used in Figma, using helper functions like `figma.boolean`. For example:\n * ```ts\n * props: {\n * disabled: figma.boolean('Disabled'),\n * text: figma.string('Text'),\n * size: figma.enum('Size', {\n * slim: 'slim',\n * medium: 'medium',\n * large: 'large',\n * }),\n * }\n */\n props?: PropsT\n\n /**\n * The code example to display in Figma. Any mapped `props` are passed to the component,\n * where those values will be replaced with the mapped value when inspecting that instance in Figma.\n * @param props\n * @returns\n */\n example?: ((props: ResolvedPropsT) => ExampleFnReturnT) | ExtraExampleT\n\n /**\n * A list of links that will display in Figma along with the examples\n */\n links?: FigmaConnectLink[]\n}\n"]}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/connect/api.ts"],"names":[],"mappings":"","sourcesContent":["export type EnumValue =\n | string\n | boolean\n | number\n | symbol\n | undefined\n | React.ReactElement\n | Function\n | Object\n\n/**\n * These types are intended to be returned by figma helper functions for exposing the\n * supported output modifiers for that type. There's no implementation for these types,\n * they are resolved to primitive types when the `props` object is passed to `example`.\n */\nexport interface ConnectedComponent {\n /**\n * Returns the resolved props of the connected component. This is useful for accessing\n * the `props` object of a child in a parent context. For example:\n * ```ts\n * figma.connect(\"parent\", {\n * props: {\n * iconProps: figma.instance(\"Icon\").getProps(),\n * },\n * example: (iconProps) => <IconButton iconId={iconProps.iconId} />,\n * }\n */\n getProps<T = any>(): T\n /**\n * Renders the instance with the provided render function. The function is passed the resolved\n * `props` of the nested connected component. This is useful for dynamically rendering a child\n * component depending on parent context. For example:\n * ```ts\n * figma.connect(\"parent\", {\n * props: {\n * icon: figma.instance(\"Icon\").render(({ iconId }) => <Button.Icon iconId={iconId} />),\n * },\n * example: ({ icon }) => <Button icon={icon}/>,\n * }\n */\n render<T = unknown>(renderFunction: (props: T) => React.ReactElement): React.ReactElement\n}\n\n// This contains the base API interface for figma.connect calls across React and\n// HTML. Any parts which are platform-specific (either the function signature or\n// its docblock) are specified in the individual index_<platform> and added to\n// this using union typing.\n//\n// To override a docblock, all signatures of that function must be moved into\n// the platform-specific index file.\nexport interface FigmaConnectAPI<InstanceChildrenT, ChildrenT> {\n /**\n * Maps a Figma Variant property to a set if values for the connected component. This prop is replaced\n * with values from the Figma instance when viewed in Dev Mode. For example:\n * ```ts\n * props: {\n * type: figma.enum('Type', {\n * Primary: 'primary',\n * Secondary: 'secondary',\n * }),\n * }\n * ```\n * Would output \"primary\" if the Type Variant in Figma is set to \"Primary\".\n *\n * @param figmaPropName The name of the property on the Figma component\n * @param valueMapping A mapping of values for the Figma Variant\n */\n enum<V extends EnumValue>(figmaPropName: string, valueMapping: Record<string, V>): V\n\n /**\n * Maps a Figma property to a string value for the connected component. This prop is replaced\n * with values from the Figma instance when viewed in Dev Mode. For example:\n * ```ts\n * props: {\n * text: figma.string('Text'),\n * }\n * ```\n * Would replace `text` with the text content from the Figma property \"Text\".\n *\n * @param figmaPropName The name of the property on the Figma component\n */\n string(figmaPropName: string): string\n\n /**\n * Maps a Figma instance property for the connected component. This prop is replaced\n * with values from the Figma instance when viewed in Dev Mode. For example:\n * ```ts\n * props: {\n * icon: figma.instance('Icon'),\n * }\n * ```\n * Would show the nested examples for the component passed to the \"Icon\" property in Figma.\n *\n * @param figmaPropName The name of the property on the Figma component\n */\n instance<T = InstanceChildrenT>(figmaPropName: string): T\n\n /**\n * Maps a Figma instance property for the connected slot layer. This prop is replaced\n * with values from the Figma slot layer when viewed in Dev Mode. For example:\n * ```ts\n * props: {\n * Menu: figma.slot('Menu'),\n * }\n * ```\n * Would show the \"Menu\" slot layer connected as an instance property in Figma.\n *\n * @param figmaPropName The name of the property on the Figma component\n */\n slot<T = InstanceChildrenT>(figmaPropName: string): T\n\n /**\n * Maps a Figma instance layer to a nested code example. For example:\n * ```ts\n * props: {\n * icon: figma.children('Icon')\n * }\n * ```\n * Would show the nested code example for the child instance named 'Icon'. This also supports\n * an array: `tabs: figma.children(['Tab 1', 'Tab 2'])` to map multiple nested examples.\n *\n * You can pass a single wildcard '*' character to match partial names. For example:\n * ```ts\n * props: {\n * icon: figma.children('Icon*')\n * }\n * ```\n * Would show the nested code example for any child instance which name starts with \"Icon\"\n *\n * @param figmaPropName The name of the property on the Figma component\n */\n children(layerNames: string | string[]): ChildrenT\n\n /**\n * Creates a className string by joining an array of strings. The argument supports both\n * string literals and nested functions like `figma.enum` and `figma.boolean` that return\n * a string. For example:\n * ```ts\n * props: {\n * className: figma.className([\n * 'btn-base',\n * figma.enum('Size', { Large: 'btn-large' }),\n * figma.boolean('Disabled', { true: 'btn-disabled', false: '' }),\n * ]),\n * }\n *\n * @param className\n */\n className(className: (string | undefined)[]): string\n\n /**\n * Maps a Figma text layer to a string value representing the text content of that layer.\n * This function takes the layer name within the original component as its parameter.\n * For example:\n * ```ts\n * props: {\n * text: figma.textContent('Text Layer')\n * }\n * ```\n *\n * @param layer The name of the text layer in the Figma component\n */\n textContent(layer: string): string\n}\n\nexport type ValueOf<T> = T[keyof T]\n\nexport type PropMapping<T> = {\n [key in keyof T]: T[key]\n}\n\nexport interface FigmaConnectLink {\n name: string\n url: string\n}\n\n// ExampleFnReturnT is the return type of an example function.\n// ExtraExampleT allows us to pass in an extra type to the `example` property,\n// so that in Storybook, we can use strings to refer to non-hoisted functions\nexport interface FigmaConnectMeta<\n PropsT = {},\n ResolvedPropsT = {},\n ExampleFnReturnT = unknown,\n ExtraExampleT = never,\n> {\n /**\n * Restricts this figma connect to any variants that fullfill the given filter.\n * The filter is a map of Figma variant names to values. Example:\n * ```ts\n * {\n * variant: { \"Has Icon\": true }\n * }\n */\n variant?: Record<string, string | boolean | number>\n\n /**\n * Prop mappings for the connected component. This is used to map the values of the component's props\n * to the values that are used in Figma, using helper functions like `figma.boolean`. For example:\n * ```ts\n * props: {\n * disabled: figma.boolean('Disabled'),\n * text: figma.string('Text'),\n * size: figma.enum('Size', {\n * slim: 'slim',\n * medium: 'medium',\n * large: 'large',\n * }),\n * }\n */\n props?: PropsT\n\n /**\n * The code example to display in Figma. Any mapped `props` are passed to the component,\n * where those values will be replaced with the mapped value when inspecting that instance in Figma.\n * @param props\n * @returns\n */\n example?: ((props: ResolvedPropsT) => ExampleFnReturnT) | ExtraExampleT\n\n /**\n * A list of links that will display in Figma along with the examples\n */\n links?: FigmaConnectLink[]\n}\n"]}
@@ -6,4 +6,5 @@ export declare function nestedPropsType<T>(_layer: string, props: T): T;
6
6
  export declare function classNameType(_className: (string | undefined)[]): string;
7
7
  export declare function textContentType(_layer: string): string;
8
8
  export declare function instanceType<T = ConnectedComponent>(_figmaPropName: string): T;
9
+ export declare function slotType<T = ConnectedComponent>(_figmaPropName: string): T;
9
10
  //# sourceMappingURL=external_types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"external_types.d.ts","sourceRoot":"","sources":["../../src/connect/external_types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAA;AAE3E,wBAAgB,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAA;AAW5D,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,EAC1C,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAC5C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAE5B;AAED,wBAAgB,UAAU,CAAC,cAAc,EAAE,MAAM,UAEhD;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAE1D;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,UAE/D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,UAE7C;AAED,wBAAgB,YAAY,CAAC,CAAC,GAAG,kBAAkB,EAAE,cAAc,EAAE,MAAM,GAAG,CAAC,CAE9E"}
1
+ {"version":3,"file":"external_types.d.ts","sourceRoot":"","sources":["../../src/connect/external_types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAA;AAE3E,wBAAgB,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAA;AAW5D,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,EAC1C,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAC5C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAE5B;AAED,wBAAgB,UAAU,CAAC,cAAc,EAAE,MAAM,UAEhD;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAE1D;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,UAE/D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,UAE7C;AAED,wBAAgB,YAAY,CAAC,CAAC,GAAG,kBAAkB,EAAE,cAAc,EAAE,MAAM,GAAG,CAAC,CAE9E;AAED,wBAAgB,QAAQ,CAAC,CAAC,GAAG,kBAAkB,EAAE,cAAc,EAAE,MAAM,GAAG,CAAC,CAE1E"}
@@ -7,6 +7,7 @@ exports.nestedPropsType = nestedPropsType;
7
7
  exports.classNameType = classNameType;
8
8
  exports.textContentType = textContentType;
9
9
  exports.instanceType = instanceType;
10
+ exports.slotType = slotType;
10
11
  function booleanType(_figmaPropName, _valueMapping) {
11
12
  if (_valueMapping) {
12
13
  return enumType(_figmaPropName, _valueMapping);
@@ -31,4 +32,7 @@ function textContentType(_layer) {
31
32
  function instanceType(_figmaPropName) {
32
33
  return undefined;
33
34
  }
35
+ function slotType(_figmaPropName) {
36
+ return undefined;
37
+ }
34
38
  //# sourceMappingURL=external_types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"external_types.js","sourceRoot":"","sources":["../../src/connect/external_types.ts"],"names":[],"mappings":";;AAGA,kCAQC;AAED,4BAKC;AAED,gCAEC;AAED,0CAEC;AAED,sCAEC;AAED,0CAEC;AAED,oCAEC;AAnCD,SAAgB,WAAW,CACzB,cAAsB,EACtB,aAA2C;IAE3C,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAI,cAAc,EAAE,aAAa,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAgB,QAAQ,CACtB,cAAsB,EACtB,aAA6C;IAE7C,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAA+B,CAAA;AACtE,CAAC;AAED,SAAgB,UAAU,CAAC,cAAsB;IAC/C,OAAO,EAAE,CAAA;AACX,CAAC;AAED,SAAgB,eAAe,CAAI,MAAc,EAAE,KAAQ;IACzD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAgB,aAAa,CAAC,UAAkC;IAC9D,OAAO,EAAE,CAAA;AACX,CAAC;AAED,SAAgB,eAAe,CAAC,MAAc;IAC5C,OAAO,EAAE,CAAA;AACX,CAAC;AAED,SAAgB,YAAY,CAAyB,cAAsB;IACzE,OAAO,SAAc,CAAA;AACvB,CAAC","sourcesContent":["import { PropMapping, ValueOf, EnumValue, ConnectedComponent } from './api'\n\nexport function booleanType(_figmaPropName: string): boolean\nexport function booleanType<V extends EnumValue>(\n _figmaPropName: string,\n _valueMapping?: Record<'true' | 'false', V>,\n) {\n if (_valueMapping) {\n return enumType<V>(_figmaPropName, _valueMapping)\n }\n return true\n}\n\nexport function enumType<V extends EnumValue>(\n _figmaPropName: string,\n _valueMapping: PropMapping<Record<string, V>>,\n): ValueOf<Record<string, V>> {\n return Object.values(_valueMapping)[0] as ValueOf<Record<string, V>>\n}\n\nexport function stringType(_figmaPropName: string) {\n return ''\n}\n\nexport function nestedPropsType<T>(_layer: string, props: T) {\n return props\n}\n\nexport function classNameType(_className: (string | undefined)[]) {\n return ''\n}\n\nexport function textContentType(_layer: string) {\n return ''\n}\n\nexport function instanceType<T = ConnectedComponent>(_figmaPropName: string): T {\n return undefined as T\n}\n"]}
1
+ {"version":3,"file":"external_types.js","sourceRoot":"","sources":["../../src/connect/external_types.ts"],"names":[],"mappings":";;AAGA,kCAQC;AAED,4BAKC;AAED,gCAEC;AAED,0CAEC;AAED,sCAEC;AAED,0CAEC;AAED,oCAEC;AAED,4BAEC;AAvCD,SAAgB,WAAW,CACzB,cAAsB,EACtB,aAA2C;IAE3C,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAI,cAAc,EAAE,aAAa,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAgB,QAAQ,CACtB,cAAsB,EACtB,aAA6C;IAE7C,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAA+B,CAAA;AACtE,CAAC;AAED,SAAgB,UAAU,CAAC,cAAsB;IAC/C,OAAO,EAAE,CAAA;AACX,CAAC;AAED,SAAgB,eAAe,CAAI,MAAc,EAAE,KAAQ;IACzD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAgB,aAAa,CAAC,UAAkC;IAC9D,OAAO,EAAE,CAAA;AACX,CAAC;AAED,SAAgB,eAAe,CAAC,MAAc;IAC5C,OAAO,EAAE,CAAA;AACX,CAAC;AAED,SAAgB,YAAY,CAAyB,cAAsB;IACzE,OAAO,SAAc,CAAA;AACvB,CAAC;AAED,SAAgB,QAAQ,CAAyB,cAAsB;IACrE,OAAO,SAAc,CAAA;AACvB,CAAC","sourcesContent":["import { PropMapping, ValueOf, EnumValue, ConnectedComponent } from './api'\n\nexport function booleanType(_figmaPropName: string): boolean\nexport function booleanType<V extends EnumValue>(\n _figmaPropName: string,\n _valueMapping?: Record<'true' | 'false', V>,\n) {\n if (_valueMapping) {\n return enumType<V>(_figmaPropName, _valueMapping)\n }\n return true\n}\n\nexport function enumType<V extends EnumValue>(\n _figmaPropName: string,\n _valueMapping: PropMapping<Record<string, V>>,\n): ValueOf<Record<string, V>> {\n return Object.values(_valueMapping)[0] as ValueOf<Record<string, V>>\n}\n\nexport function stringType(_figmaPropName: string) {\n return ''\n}\n\nexport function nestedPropsType<T>(_layer: string, props: T) {\n return props\n}\n\nexport function classNameType(_className: (string | undefined)[]) {\n return ''\n}\n\nexport function textContentType(_layer: string) {\n return ''\n}\n\nexport function instanceType<T = ConnectedComponent>(_figmaPropName: string): T {\n return undefined as T\n}\n\nexport function slotType<T = ConnectedComponent>(_figmaPropName: string): T {\n return undefined as T\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import { FigmaConnectLink } from './api';
2
2
  import { Intrinsic } from './intrinsics';
3
+ import { SyntaxHighlightLanguage } from './label_language_mapping';
3
4
  export type BaseCodeConnectObject = {
4
5
  figmaNode: string;
5
6
  component?: string;
@@ -11,7 +12,7 @@ export type BaseCodeConnectObject = {
11
12
  nestable?: boolean;
12
13
  isParserless?: boolean;
13
14
  };
14
- language: string;
15
+ language: SyntaxHighlightLanguage;
15
16
  label: string;
16
17
  links?: FigmaConnectLink[];
17
18
  source?: string;
@@ -23,5 +24,6 @@ export type CodeConnectJSON = BaseCodeConnectObject & {
23
24
  metadata: {
24
25
  cliVersion: string;
25
26
  };
27
+ _codeConnectFilePath?: string;
26
28
  };
27
29
  //# sourceMappingURL=figma_connect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"figma_connect.d.ts","sourceRoot":"","sources":["../../src/connect/figma_connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QACjC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;QAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,YAAY,CAAC,EAAE,OAAO,CAAA;KACvB,CAAA;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,qBAAqB,GAAG;IACpD,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;CACF,CAAA"}
1
+ {"version":3,"file":"figma_connect.d.ts","sourceRoot":"","sources":["../../src/connect/figma_connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAElE,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QACjC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;QAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,YAAY,CAAC,EAAE,OAAO,CAAA;KACvB,CAAA;IACD,QAAQ,EAAE,uBAAuB,CAAA;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,qBAAqB,GAAG;IACpD,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;IAGD,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"figma_connect.js","sourceRoot":"","sources":["../../src/connect/figma_connect.ts"],"names":[],"mappings":"","sourcesContent":["import { FigmaConnectLink } from './api'\nimport { Intrinsic } from './intrinsics'\n\nexport type BaseCodeConnectObject = {\n figmaNode: string\n component?: string\n variant?: Record<string, any>\n template: string\n templateData: {\n props?: Record<string, Intrinsic>\n imports?: string[]\n nestable?: boolean\n isParserless?: boolean\n }\n language: string\n label: string\n links?: FigmaConnectLink[]\n source?: string\n sourceLocation?: { line: number }\n}\n\nexport type CodeConnectJSON = BaseCodeConnectObject & {\n metadata: {\n cliVersion: string\n }\n}\n"]}
1
+ {"version":3,"file":"figma_connect.js","sourceRoot":"","sources":["../../src/connect/figma_connect.ts"],"names":[],"mappings":"","sourcesContent":["import { FigmaConnectLink } from './api'\nimport { Intrinsic } from './intrinsics'\nimport { SyntaxHighlightLanguage } from './label_language_mapping'\n\nexport type BaseCodeConnectObject = {\n figmaNode: string\n component?: string\n variant?: Record<string, any>\n template: string\n templateData: {\n props?: Record<string, Intrinsic>\n imports?: string[]\n nestable?: boolean\n isParserless?: boolean\n }\n language: SyntaxHighlightLanguage\n label: string\n links?: FigmaConnectLink[]\n source?: string\n sourceLocation?: { line: number }\n}\n\nexport type CodeConnectJSON = BaseCodeConnectObject & {\n metadata: {\n cliVersion: string\n }\n // INTERNAL ONLY: Path to the Code Connect file itself, used for parserless migration\n // Should be stripped out before publishing\n _codeConnectFilePath?: string\n}\n"]}
@@ -12,7 +12,8 @@ export declare enum IntrinsicKind {
12
12
  Children = "children",
13
13
  NestedProps = "nested-props",
14
14
  ClassName = "className",
15
- TextContent = "text-content"
15
+ TextContent = "text-content",
16
+ Slot = "slot"
16
17
  }
17
18
  export interface IntrinsicBase {
18
19
  kind: IntrinsicKind;
@@ -72,7 +73,13 @@ export interface FigmaTextContent extends IntrinsicBase {
72
73
  layer: string;
73
74
  };
74
75
  }
75
- export type Intrinsic = FigmaBoolean | FigmaEnum | FigmaString | FigmaInstance | FigmaChildren | FigmaNestedProps | FigmaClassName | FigmaTextContent;
76
+ export interface FigmaSlot extends IntrinsicBase {
77
+ kind: IntrinsicKind.Slot;
78
+ args: {
79
+ figmaPropName: string;
80
+ };
81
+ }
82
+ export type Intrinsic = FigmaBoolean | FigmaEnum | FigmaString | FigmaInstance | FigmaSlot | FigmaChildren | FigmaNestedProps | FigmaClassName | FigmaTextContent;
76
83
  /**
77
84
  * Parses a call expression to an intrinsic
78
85
  *
@@ -1 +1 @@
1
- {"version":3,"file":"intrinsics.d.ts","sourceRoot":"","sources":["../../src/connect/intrinsics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"intrinsics.d.ts","sourceRoot":"","sources":["../../src/connect/intrinsics.ts"],"names":[],"mappings":"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"}
@@ -58,6 +58,7 @@ var IntrinsicKind;
58
58
  IntrinsicKind["NestedProps"] = "nested-props";
59
59
  IntrinsicKind["ClassName"] = "className";
60
60
  IntrinsicKind["TextContent"] = "text-content";
61
+ IntrinsicKind["Slot"] = "slot";
61
62
  })(IntrinsicKind || (exports.IntrinsicKind = IntrinsicKind = {}));
62
63
  const Intrinsics = {};
63
64
  /**
@@ -148,6 +149,21 @@ makeIntrinsic('instance', (name) => {
148
149
  },
149
150
  };
150
151
  });
152
+ makeIntrinsic('slot', (name) => {
153
+ return {
154
+ parse: (exp, ctx) => {
155
+ const { sourceFile } = ctx;
156
+ const figmaPropNameIdentifier = exp.arguments?.[0];
157
+ (0, compiler_1.assertIsStringLiteral)(figmaPropNameIdentifier, sourceFile, `${name} takes a single argument which is the Figma property name`);
158
+ return {
159
+ kind: IntrinsicKind.Slot,
160
+ args: {
161
+ figmaPropName: (0, compiler_1.stripQuotesFromNode)(figmaPropNameIdentifier),
162
+ },
163
+ };
164
+ },
165
+ };
166
+ });
151
167
  makeIntrinsic('children', (name) => {
152
168
  return {
153
169
  parse: (exp, ctx) => {
@@ -382,6 +398,9 @@ function intrinsicToString({ kind, args, modifiers = [] }, childLayer) {
382
398
  // Outputs: `const propName = figma.properties.enum('propName', { ... mapping object from above ... })`
383
399
  return `${selector}.__properties__.enum('${args.figmaPropName}', ${mappingString})`;
384
400
  }
401
+ case IntrinsicKind.Slot: {
402
+ return `${selector}.__properties__.slot('${args.figmaPropName}')`;
403
+ }
385
404
  case IntrinsicKind.Children: {
386
405
  // Outputs: `const propName = figma.properties.children(["Layer 1", "Layer 2"])`
387
406
  return `${selector}.__properties__.children([${args.layers.map((layerName) => `"${layerName}"`).join(',')}])`;
@@ -1 +1 @@
1
- {"version":3,"file":"intrinsics.js","sourceRoot":"","sources":["../../src/connect/intrinsics.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ts from 'typescript'\nimport { InternalError, ParserContext, ParserError } from './parser_common'\nimport {\n assertIsArrayLiteralExpression,\n assertIsStringLiteral,\n convertArrayLiteralToJs,\n isUndefinedType,\n stripQuotesFromNode,\n} from '../typescript/compiler'\nimport { convertObjectLiteralToJs } from '../typescript/compiler'\nimport { assertIsObjectLiteralExpression } from '../typescript/compiler'\nimport { FigmaConnectAPI } from './api'\nimport {\n FCCValue,\n _fcc_array,\n _fcc_function,\n _fcc_identifier,\n _fcc_jsxElement,\n _fcc_object,\n _fcc_templateString,\n} from '../react/parser_template_helpers'\nimport htmlApi from '../html/index_html'\nimport reactApi from '../react/index_react'\nimport { Modifier, modifierToString, parseModifier } from './modifiers'\n\nexport const API_PREFIX = 'figma'\nexport const FIGMA_CONNECT_CALL = `${API_PREFIX}.connect`\n\nexport enum IntrinsicKind {\n Enum = 'enum',\n String = 'string',\n Boolean = 'boolean',\n Instance = 'instance',\n Children = 'children',\n NestedProps = 'nested-props',\n ClassName = 'className',\n TextContent = 'text-content',\n}\n\nexport interface IntrinsicBase {\n kind: IntrinsicKind\n args: {}\n modifiers?: Modifier[]\n}\n\nexport type ValueMappingKind = FCCValue | Intrinsic\n\nexport interface FigmaBoolean extends IntrinsicBase {\n kind: IntrinsicKind.Boolean\n args: {\n figmaPropName: string\n valueMapping?: Record<'true' | 'false', ValueMappingKind>\n }\n}\n\nexport type ValueMapping = Record<string, ValueMappingKind>\n\nexport interface FigmaEnum extends IntrinsicBase {\n kind: IntrinsicKind.Enum\n args: {\n figmaPropName: string\n valueMapping: ValueMapping\n }\n}\n\nexport interface FigmaString extends IntrinsicBase {\n kind: IntrinsicKind.String\n args: {\n figmaPropName: string\n }\n}\n\nexport interface FigmaInstance extends IntrinsicBase {\n kind: IntrinsicKind.Instance\n args: {\n figmaPropName: string\n }\n}\n\nexport interface FigmaChildren extends IntrinsicBase {\n kind: IntrinsicKind.Children\n args: {\n layers: string[]\n }\n}\n\nexport interface FigmaNestedProps extends IntrinsicBase {\n kind: IntrinsicKind.NestedProps\n args: {\n layer: string\n props: Record<string, Intrinsic>\n }\n}\n\nexport interface FigmaClassName extends IntrinsicBase {\n kind: IntrinsicKind.ClassName\n args: {\n className: (string | Intrinsic)[]\n }\n}\n\nexport interface FigmaTextContent extends IntrinsicBase {\n kind: IntrinsicKind.TextContent\n args: {\n layer: string\n }\n}\n\nexport type Intrinsic =\n | FigmaBoolean\n | FigmaEnum\n | FigmaString\n | FigmaInstance\n | FigmaChildren\n | FigmaNestedProps\n | FigmaClassName\n | FigmaTextContent\n\nconst Intrinsics: {\n [key: string]: {\n match: (exp: ts.CallExpression) => exp is ts.CallExpression\n parse: (exp: ts.CallExpression, parser: ParserContext) => Intrinsic\n }\n} = {}\n\n/**\n * These functions are used to convert \"intrinsic\" parser types (which are calls to helper functions\n * like `Figma.boolean() in code)` to an object representing that intrinsic that we can serialize to JSON.\n *\n * Each call to `makeIntrinsic` should take a function from the {@link FigmaConnectAPI},\n * ensuring that the name of the intrinsic that we're parsing matches the name of the function\n *\n * @param staticFunctionMember\n * @param obj\n */\nfunction makeIntrinsic<K extends keyof typeof htmlApi | typeof reactApi>(\n intrinsicName: K,\n obj: (name: string) => any,\n) {\n const name = `${API_PREFIX}.${intrinsicName}`\n Intrinsics[name] = {\n match: (exp: ts.CallExpression) => {\n return ts.isCallExpression(exp) && exp.getText().replace(/\\s/g, '').startsWith(name)\n },\n ...obj(name),\n }\n}\n\nmakeIntrinsic('boolean', (name) => {\n return {\n parse: (exp: ts.CallExpression, ctx: ParserContext): FigmaBoolean => {\n const figmaPropNameIdentifier = exp.arguments?.[0]\n assertIsStringLiteral(\n figmaPropNameIdentifier,\n ctx.sourceFile,\n `${name} takes at least one argument, which is the Figma property name`,\n )\n const valueMappingArg = exp.arguments?.[1]\n let valueMapping\n if (valueMappingArg) {\n assertIsObjectLiteralExpression(\n valueMappingArg,\n ctx.sourceFile,\n `${name} second argument should be an object literal, that sets values for 'true' and 'false'`,\n )\n valueMapping = parsePropsObject(valueMappingArg, ctx) as Record<\n 'true' | 'false',\n ValueMappingKind\n >\n }\n return {\n kind: IntrinsicKind.Boolean,\n args: {\n figmaPropName: stripQuotesFromNode(figmaPropNameIdentifier),\n valueMapping,\n },\n }\n },\n }\n})\n\nmakeIntrinsic('enum', (name) => {\n return {\n parse: (exp: ts.CallExpression, ctx: ParserContext): FigmaEnum => {\n const { sourceFile } = ctx\n const figmaPropNameIdentifier = exp.arguments?.[0]\n assertIsStringLiteral(\n figmaPropNameIdentifier,\n sourceFile,\n `${name} takes at least one argument, which is the Figma property name`,\n )\n const valueMapping = exp.arguments?.[1]\n assertIsObjectLiteralExpression(\n valueMapping,\n sourceFile,\n `${name} second argument should be an object literal, that maps Figma prop values to code`,\n )\n return {\n kind: IntrinsicKind.Enum,\n args: {\n figmaPropName: stripQuotesFromNode(figmaPropNameIdentifier),\n valueMapping: parsePropsObject(valueMapping, ctx),\n },\n }\n },\n }\n})\n\nmakeIntrinsic('string', (name) => {\n return {\n parse: (exp: ts.CallExpression, ctx: ParserContext): FigmaString => {\n const { sourceFile } = ctx\n const figmaPropNameIdentifier = exp.arguments?.[0]\n assertIsStringLiteral(\n figmaPropNameIdentifier,\n sourceFile,\n `${name} takes at least one argument, which is the Figma property name`,\n )\n return {\n kind: IntrinsicKind.String,\n args: {\n figmaPropName: stripQuotesFromNode(figmaPropNameIdentifier),\n },\n }\n },\n }\n})\n\nmakeIntrinsic('instance', (name) => {\n return {\n parse: (exp: ts.CallExpression, ctx: ParserContext): FigmaInstance => {\n const { sourceFile } = ctx\n const figmaPropNameIdentifier = exp.arguments?.[0]\n\n assertIsStringLiteral(\n figmaPropNameIdentifier,\n sourceFile,\n `${name} takes at least one argument, which is the Figma property name`,\n )\n\n return {\n kind: IntrinsicKind.Instance,\n args: {\n figmaPropName: stripQuotesFromNode(figmaPropNameIdentifier),\n },\n }\n },\n }\n})\n\nmakeIntrinsic('children', (name) => {\n return {\n parse: (exp: ts.CallExpression, ctx: ParserContext): FigmaChildren => {\n const { sourceFile } = ctx\n const layerName = exp.arguments?.[0]\n const layers: string[] = []\n if (ts.isStringLiteral(layerName)) {\n layers.push(stripQuotesFromNode(layerName))\n } else if (ts.isArrayLiteralExpression(layerName) && layerName.elements.length > 0) {\n layerName.elements.forEach((el) => {\n assertIsStringLiteral(el, sourceFile)\n const name = stripQuotesFromNode(el)\n if (name.includes('*')) {\n throw new ParserError(\n `Wildcards can not be used with an array of strings. Use a single string literal instead.`,\n {\n node: layerName,\n sourceFile,\n },\n )\n }\n layers.push(stripQuotesFromNode(el))\n })\n } else {\n throw new ParserError(\n `Invalid argument to ${name}, should be a string literal or an array of strings`,\n {\n node: layerName,\n sourceFile,\n },\n )\n }\n\n return {\n kind: IntrinsicKind.Children,\n args: {\n layers,\n },\n }\n },\n }\n})\n\nmakeIntrinsic('nestedProps', (name) => {\n return {\n parse: (exp: ts.CallExpression, ctx: ParserContext): FigmaNestedProps => {\n const { sourceFile } = ctx\n const layerName = exp.arguments?.[0]\n const mapping = exp.arguments?.[1]\n\n assertIsStringLiteral(\n layerName,\n sourceFile,\n `Invalid argument to ${name}, \\`layerName\\` should be a string literal`,\n )\n assertIsObjectLiteralExpression(\n mapping,\n sourceFile,\n `Invalid argument to ${name}, \\`props\\` should be an object literal`,\n )\n\n ts.forEachChild(mapping, (node) => {\n if (\n ts.isPropertyAssignment(node) &&\n ts.isCallExpression(node.initializer) &&\n node.initializer.getText().startsWith('figma.nestedProps')\n ) {\n throw new ParserError(\n `nestedProps can not be nested inside another nestedProps call, instead, pass the deeply nested layer name at the top level`,\n )\n }\n })\n\n return {\n kind: IntrinsicKind.NestedProps,\n args: {\n layer: stripQuotesFromNode(layerName),\n props: parsePropsObject(mapping, ctx),\n },\n }\n },\n }\n})\n\nmakeIntrinsic('className', (name) => {\n return {\n parse: (exp: ts.CallExpression, ctx: ParserContext): FigmaClassName => {\n const { sourceFile } = ctx\n const classNameArg = exp.arguments?.[0]\n const className: (string | Intrinsic)[] = []\n assertIsArrayLiteralExpression(classNameArg, sourceFile, `${name} takes an array of strings`)\n\n classNameArg.elements.forEach((el) => {\n if (ts.isStringLiteral(el)) {\n className.push(stripQuotesFromNode(el))\n } else if (ts.isCallExpression(el)) {\n className.push(parseIntrinsic(el, ctx))\n }\n })\n\n return {\n kind: IntrinsicKind.ClassName,\n args: {\n className,\n },\n }\n },\n }\n})\n\nmakeIntrinsic('textContent', (name) => {\n return {\n parse: (exp: ts.CallExpression, ctx: ParserContext): FigmaTextContent => {\n const { sourceFile } = ctx\n const layerNameArg = exp.arguments?.[0]\n assertIsStringLiteral(\n layerNameArg,\n sourceFile,\n `${name} takes a single argument which is the Figma layer name`,\n )\n\n return {\n kind: IntrinsicKind.TextContent,\n args: {\n layer: stripQuotesFromNode(layerNameArg),\n },\n }\n },\n }\n})\n\n/**\n * Parses a call expression to an intrinsic\n *\n * @param exp Expression to parse\n * @param parserContext parser context\n * @returns\n */\nexport function parseIntrinsic(exp: ts.CallExpression, parserContext: ParserContext): Intrinsic {\n for (const key in Intrinsics) {\n if (Intrinsics[key].match(exp)) {\n // Chained call expressions in TS are nested with the innermost call expression\n // being the first in the chain. We need to reverse the chain so that the intrinsic\n // is the first element in the array. The TS AST looks like this for a().b():\n // CallExpression [a().b()] ->\n // PropertyAccessExpression [a().b] ->\n // CallExpression [a()]\n\n let callChain = []\n let current: any = exp\n while (current) {\n if (ts.isCallExpression(current)) {\n callChain.push(current)\n current = current.expression\n } else if (ts.isPropertyAccessExpression(current)) {\n current = current.expression\n } else {\n current = null\n }\n }\n\n // If there's only one call expression just return the matching intrinsic\n callChain = callChain.reverse()\n if (callChain.length <= 1) {\n return Intrinsics[key].parse(exp, parserContext)\n }\n\n // The first call expression is the intrinsic itself, and any following call\n // expressions are modifiers\n const intrinsic = Intrinsics[key].parse(callChain.shift()!, parserContext)\n const modifiers = callChain.map((modifier) => parseModifier(modifier, parserContext))\n\n return {\n ...intrinsic,\n modifiers,\n }\n }\n }\n\n throw new ParserError(`Unknown intrinsic: ${exp.getText()}`, {\n node: exp,\n sourceFile: parserContext.sourceFile,\n })\n}\n\n/**\n * Replace newlines in enum values with \\\\n so that we don't output\n * broken JS with newlines inside the string\n */\nfunction replaceNewlines(str: string) {\n return str.toString().replaceAll('\\n', '\\\\n').replaceAll(\"'\", \"\\\\'\")\n}\n\nexport function valueToString(value: ValueMappingKind, childLayer?: string) {\n if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'undefined') {\n return `${value}`\n }\n\n if (typeof value === 'string') {\n return `'${replaceNewlines(value)}'`\n }\n\n if ('kind' in value) {\n // Mappings can be nested, e.g. an enum value can be figma.instance(...)\n return `${intrinsicToString(value as Intrinsic, childLayer)}`\n }\n\n // Convert objects to strings\n const str = typeof value.$value === 'string' ? value.$value : `${JSON.stringify(value.$value)}`\n const v = replaceNewlines(str)\n\n switch (value.$type) {\n case 'function':\n return `_fcc_function('${v}')`\n case 'identifier':\n return `_fcc_identifier('${v}')`\n case 'object':\n // Don't pass the object itself wrapped in quotes - this helper needs to instantiate the actual\n // object, as it may be used in the snippet code\n return `_fcc_object(${v})`\n case 'template-string':\n return `_fcc_templateString('${v}')`\n case 'jsx-element':\n return `_fcc_jsxElement('${v}')`\n case 'array':\n return `_fcc_array(${v})`\n default:\n throw new InternalError(`Unknown helper type: ${value}`)\n }\n}\n\nexport function valueMappingToString(valueMapping: ValueMapping, childLayer?: string): string {\n // For enums (and booleans with a valueMapping provided), convert the\n // value mapping to an object.\n return (\n '{\\n' +\n Object.entries(valueMapping)\n .map(([key, value]) => {\n return `\"${key}\": ${valueToString(value, childLayer)}`\n })\n .join(',\\n') +\n '}'\n )\n}\n\nlet nestedLayerCount = 0\n\nexport function intrinsicToString(\n { kind, args, modifiers = [] }: Intrinsic,\n childLayer?: string,\n): string {\n const selector = childLayer ?? `figma.currentLayer`\n switch (kind) {\n case IntrinsicKind.String:\n return `${selector}.__properties__.string('${args.figmaPropName}')`\n case IntrinsicKind.Instance: {\n // Outputs:\n // `const propName = figma.properties.string('propName')`, or\n // `const propName = figma.properties.boolean('propName')`, or\n // `const propName = figma.properties.instance('propName')`\n if (modifiers.length > 0) {\n const instance = `${selector}.__properties__.__instance__('${args.figmaPropName}')`\n let body = `const instance = ${instance}\\n`\n body += `return instance && instance.type !== \"ERROR\" ? ${['instance', ...modifiers.map(modifierToString)].join('.')} : instance`\n return `(function () {${body}})()`\n }\n return `${selector}.__properties__.instance('${args.figmaPropName}')`\n }\n case IntrinsicKind.Boolean: {\n if (args.valueMapping) {\n const mappingString = valueMappingToString(args.valueMapping, childLayer)\n // Outputs: `const propName = figma.properties.boolean('propName', { ... mapping object from above ... })`\n return `${selector}.__properties__.boolean('${args.figmaPropName}', ${mappingString})`\n }\n return `${selector}.__properties__.boolean('${args.figmaPropName}')`\n }\n case IntrinsicKind.Enum: {\n const mappingString = valueMappingToString(args.valueMapping, childLayer)\n\n // Outputs: `const propName = figma.properties.enum('propName', { ... mapping object from above ... })`\n return `${selector}.__properties__.enum('${args.figmaPropName}', ${mappingString})`\n }\n case IntrinsicKind.Children: {\n // Outputs: `const propName = figma.properties.children([\"Layer 1\", \"Layer 2\"])`\n return `${selector}.__properties__.children([${args.layers.map((layerName) => `\"${layerName}\"`).join(',')}])`\n }\n case IntrinsicKind.ClassName: {\n // Outputs: `const propName = ['btn-base', figma.currentLayer.__properties__.enum('Size, { Large: 'btn-large' })].join(\" \")`\n return `[${args.className.map((className) => (typeof className === 'string' ? `\"${className}\"` : `${intrinsicToString(className, childLayer)}`)).join(', ')}].filter(v => !!v).join(' ')`\n }\n case IntrinsicKind.TextContent: {\n return `${selector}.__findChildWithCriteria__({ name: '${args.layer}', type: \"TEXT\" }).__render__()`\n }\n case IntrinsicKind.NestedProps: {\n let body: string = ''\n // the actual layer name in figma could have a bunch of special characters in it,\n // and if we try to normalize it to a valid JS identifier, it could conflict with\n // other variables in the template code. So we generate a unique variable name\n // for each nested layer reference instead. The only reason it's wrapped in a funciton\n // currently is to keep the error checking out of global scope\n const nestedLayerRef = `nestedLayer${nestedLayerCount++}`\n body += `const ${nestedLayerRef} = figma.currentLayer.__find__(\"${args.layer}\")\\n`\n body += `return ${nestedLayerRef}.type === \"ERROR\" ? ${nestedLayerRef} : {\n${Object.entries(args.props).map(\n ([key, intrinsic]) => `${key}: ${intrinsicToString(intrinsic, nestedLayerRef)}\\n`,\n)}\n }\\n`\n return `(function () {${body}})()`\n }\n default:\n throw new InternalError(`Unknown intrinsic: ${kind}`)\n }\n}\n\n/**\n * Converts an expression to an FCC value, which is a wrapper around the actual value that\n * includes the type information. This is used to serialize the value to JSON and then\n * deserialize it back to the correct type in the generated code.\n *\n * @param valueNode\n * @param parserContext\n * @returns\n */\nfunction expressionToFccEnumValue(\n valueNode: ts.Expression,\n parserContext: ParserContext,\n): FCCValue {\n const { sourceFile, checker } = parserContext\n\n if (ts.isParenthesizedExpression(valueNode)) {\n return expressionToFccEnumValue(valueNode.expression, parserContext)\n }\n\n if (ts.isJsxElement(valueNode) || ts.isJsxSelfClosingElement(valueNode)) {\n return _fcc_jsxElement(valueNode.getText())\n }\n\n if (ts.isArrowFunction(valueNode) || ts.isFunctionExpression(valueNode)) {\n return _fcc_function(valueNode.getText())\n }\n\n if (ts.isObjectLiteralExpression(valueNode)) {\n // should recursively convert to FCC\n return _fcc_object(parsePropsObject(valueNode, parserContext))\n }\n\n if (ts.isArrayLiteralExpression(valueNode)) {\n return _fcc_array(\n convertArrayLiteralToJs(valueNode, sourceFile, checker, (valueNode) => {\n if (ts.isCallExpression(valueNode)) {\n return parseIntrinsic(valueNode, parserContext)\n }\n return expressionToFccEnumValue(valueNode, parserContext)\n }),\n )\n }\n\n if (ts.isTemplateLiteral(valueNode)) {\n const str = valueNode.getText().replaceAll('`', '')\n return _fcc_templateString(str)\n }\n\n // Handles enums, for example `MyEnum.Value`\n if (ts.isPropertyAccessExpression(valueNode)) {\n return _fcc_identifier(valueNode.getText())\n }\n\n // Any other identifiers (except undefined) are treated as React components, for example `MyComponent`.\n // We don't support referencing other variables in props object so this should be fine.\n if (ts.isIdentifier(valueNode) && !isUndefinedType(valueNode, parserContext.checker)) {\n return _fcc_identifier(valueNode.getText())\n }\n\n // Fall back to the default conversion in `convertObjectLiteralToJs`\n return undefined\n}\n\n/**\n * Parses the `props` field in a `figma.connect()` call, returning a mapping of\n * prop names to their respective intrinsic types\n *\n * @param objectLiteral An object literal expression\n * @param parserContext Parser context\n * @returns\n */\nexport function parsePropsObject(\n objectLiteral: ts.ObjectLiteralExpression,\n parserContext: ParserContext,\n): PropMappings {\n const { sourceFile, checker } = parserContext\n return convertObjectLiteralToJs(objectLiteral, sourceFile, checker, (valueNode) => {\n if (ts.isCallExpression(valueNode)) {\n return parseIntrinsic(valueNode, parserContext)\n }\n return expressionToFccEnumValue(valueNode, parserContext)\n }) as PropMappings\n}\n\nexport type PropMappings = Record<string, Intrinsic>\n"]}
1
+ {"version":3,"file":"intrinsics.js","sourceRoot":"","sources":["../../src/connect/intrinsics.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ts from 'typescript'\nimport { InternalError, ParserContext, ParserError } from './parser_common'\nimport {\n assertIsArrayLiteralExpression,\n assertIsStringLiteral,\n convertArrayLiteralToJs,\n isUndefinedType,\n stripQuotesFromNode,\n} from '../typescript/compiler'\nimport { convertObjectLiteralToJs } from '../typescript/compiler'\nimport { assertIsObjectLiteralExpression } from '../typescript/compiler'\nimport { FigmaConnectAPI } from './api'\nimport {\n FCCValue,\n _fcc_array,\n _fcc_function,\n _fcc_identifier,\n _fcc_jsxElement,\n _fcc_object,\n _fcc_templateString,\n} from '../react/parser_template_helpers'\nimport htmlApi from '../html/index_html'\nimport reactApi from '../react/index_react'\nimport { Modifier, modifierToString, parseModifier } from './modifiers'\n\nexport const API_PREFIX = 'figma'\nexport const FIGMA_CONNECT_CALL = `${API_PREFIX}.connect`\n\nexport enum IntrinsicKind {\n Enum = 'enum',\n String = 'string',\n Boolean = 'boolean',\n Instance = 'instance',\n Children = 'children',\n NestedProps = 'nested-props',\n ClassName = 'className',\n TextContent = 'text-content',\n Slot = 'slot',\n}\n\nexport interface IntrinsicBase {\n kind: IntrinsicKind\n args: {}\n modifiers?: Modifier[]\n}\n\nexport type ValueMappingKind = FCCValue | Intrinsic\n\nexport interface FigmaBoolean extends IntrinsicBase {\n kind: IntrinsicKind.Boolean\n args: {\n figmaPropName: string\n valueMapping?: Record<'true' | 'false', ValueMappingKind>\n }\n}\n\nexport type ValueMapping = Record<string, ValueMappingKind>\n\nexport interface FigmaEnum extends IntrinsicBase {\n kind: IntrinsicKind.Enum\n args: {\n figmaPropName: string\n valueMapping: ValueMapping\n }\n}\n\nexport interface FigmaString extends IntrinsicBase {\n kind: IntrinsicKind.String\n args: {\n figmaPropName: string\n }\n}\n\nexport interface FigmaInstance extends IntrinsicBase {\n kind: IntrinsicKind.Instance\n args: {\n figmaPropName: string\n }\n}\n\nexport interface FigmaChildren extends IntrinsicBase {\n kind: IntrinsicKind.Children\n args: {\n layers: string[]\n }\n}\n\nexport interface FigmaNestedProps extends IntrinsicBase {\n kind: IntrinsicKind.NestedProps\n args: {\n layer: string\n props: Record<string, Intrinsic>\n }\n}\n\nexport interface FigmaClassName extends IntrinsicBase {\n kind: IntrinsicKind.ClassName\n args: {\n className: (string | Intrinsic)[]\n }\n}\n\nexport interface FigmaTextContent extends IntrinsicBase {\n kind: IntrinsicKind.TextContent\n args: {\n layer: string\n }\n}\n\nexport interface FigmaSlot extends IntrinsicBase {\n kind: IntrinsicKind.Slot\n args: {\n figmaPropName: string\n }\n}\n\nexport type Intrinsic =\n | FigmaBoolean\n | FigmaEnum\n | FigmaString\n | FigmaInstance\n | FigmaSlot\n | FigmaChildren\n | FigmaNestedProps\n | FigmaClassName\n | FigmaTextContent\n\nconst Intrinsics: {\n [key: string]: {\n match: (exp: ts.CallExpression) => exp is ts.CallExpression\n parse: (exp: ts.CallExpression, parser: ParserContext) => Intrinsic\n }\n} = {}\n\n/**\n * These functions are used to convert \"intrinsic\" parser types (which are calls to helper functions\n * like `Figma.boolean() in code)` to an object representing that intrinsic that we can serialize to JSON.\n *\n * Each call to `makeIntrinsic` should take a function from the {@link FigmaConnectAPI},\n * ensuring that the name of the intrinsic that we're parsing matches the name of the function\n *\n * @param staticFunctionMember\n * @param obj\n */\nfunction makeIntrinsic<K extends keyof typeof htmlApi | typeof reactApi>(\n intrinsicName: K,\n obj: (name: string) => any,\n) {\n const name = `${API_PREFIX}.${intrinsicName}`\n Intrinsics[name] = {\n match: (exp: ts.CallExpression) => {\n return ts.isCallExpression(exp) && exp.getText().replace(/\\s/g, '').startsWith(name)\n },\n ...obj(name),\n }\n}\n\nmakeIntrinsic('boolean', (name) => {\n return {\n parse: (exp: ts.CallExpression, ctx: ParserContext): FigmaBoolean => {\n const figmaPropNameIdentifier = exp.arguments?.[0]\n assertIsStringLiteral(\n figmaPropNameIdentifier,\n ctx.sourceFile,\n `${name} takes at least one argument, which is the Figma property name`,\n )\n const valueMappingArg = exp.arguments?.[1]\n let valueMapping\n if (valueMappingArg) {\n assertIsObjectLiteralExpression(\n valueMappingArg,\n ctx.sourceFile,\n `${name} second argument should be an object literal, that sets values for 'true' and 'false'`,\n )\n valueMapping = parsePropsObject(valueMappingArg, ctx) as Record<\n 'true' | 'false',\n ValueMappingKind\n >\n }\n return {\n kind: IntrinsicKind.Boolean,\n args: {\n figmaPropName: stripQuotesFromNode(figmaPropNameIdentifier),\n valueMapping,\n },\n }\n },\n }\n})\n\nmakeIntrinsic('enum', (name) => {\n return {\n parse: (exp: ts.CallExpression, ctx: ParserContext): FigmaEnum => {\n const { sourceFile } = ctx\n const figmaPropNameIdentifier = exp.arguments?.[0]\n assertIsStringLiteral(\n figmaPropNameIdentifier,\n sourceFile,\n `${name} takes at least one argument, which is the Figma property name`,\n )\n const valueMapping = exp.arguments?.[1]\n assertIsObjectLiteralExpression(\n valueMapping,\n sourceFile,\n `${name} second argument should be an object literal, that maps Figma prop values to code`,\n )\n return {\n kind: IntrinsicKind.Enum,\n args: {\n figmaPropName: stripQuotesFromNode(figmaPropNameIdentifier),\n valueMapping: parsePropsObject(valueMapping, ctx),\n },\n }\n },\n }\n})\n\nmakeIntrinsic('string', (name) => {\n return {\n parse: (exp: ts.CallExpression, ctx: ParserContext): FigmaString => {\n const { sourceFile } = ctx\n const figmaPropNameIdentifier = exp.arguments?.[0]\n assertIsStringLiteral(\n figmaPropNameIdentifier,\n sourceFile,\n `${name} takes at least one argument, which is the Figma property name`,\n )\n return {\n kind: IntrinsicKind.String,\n args: {\n figmaPropName: stripQuotesFromNode(figmaPropNameIdentifier),\n },\n }\n },\n }\n})\n\nmakeIntrinsic('instance', (name) => {\n return {\n parse: (exp: ts.CallExpression, ctx: ParserContext): FigmaInstance => {\n const { sourceFile } = ctx\n const figmaPropNameIdentifier = exp.arguments?.[0]\n\n assertIsStringLiteral(\n figmaPropNameIdentifier,\n sourceFile,\n `${name} takes at least one argument, which is the Figma property name`,\n )\n\n return {\n kind: IntrinsicKind.Instance,\n args: {\n figmaPropName: stripQuotesFromNode(figmaPropNameIdentifier),\n },\n }\n },\n }\n})\n\nmakeIntrinsic('slot', (name) => {\n return {\n parse: (exp: ts.CallExpression, ctx: ParserContext): FigmaSlot => {\n const { sourceFile } = ctx\n const figmaPropNameIdentifier = exp.arguments?.[0]\n\n assertIsStringLiteral(\n figmaPropNameIdentifier,\n sourceFile,\n `${name} takes a single argument which is the Figma property name`,\n )\n\n return {\n kind: IntrinsicKind.Slot,\n args: {\n figmaPropName: stripQuotesFromNode(figmaPropNameIdentifier),\n },\n }\n },\n }\n})\n\nmakeIntrinsic('children', (name) => {\n return {\n parse: (exp: ts.CallExpression, ctx: ParserContext): FigmaChildren => {\n const { sourceFile } = ctx\n const layerName = exp.arguments?.[0]\n const layers: string[] = []\n if (ts.isStringLiteral(layerName)) {\n layers.push(stripQuotesFromNode(layerName))\n } else if (ts.isArrayLiteralExpression(layerName) && layerName.elements.length > 0) {\n layerName.elements.forEach((el) => {\n assertIsStringLiteral(el, sourceFile)\n const name = stripQuotesFromNode(el)\n if (name.includes('*')) {\n throw new ParserError(\n `Wildcards can not be used with an array of strings. Use a single string literal instead.`,\n {\n node: layerName,\n sourceFile,\n },\n )\n }\n layers.push(stripQuotesFromNode(el))\n })\n } else {\n throw new ParserError(\n `Invalid argument to ${name}, should be a string literal or an array of strings`,\n {\n node: layerName,\n sourceFile,\n },\n )\n }\n\n return {\n kind: IntrinsicKind.Children,\n args: {\n layers,\n },\n }\n },\n }\n})\n\nmakeIntrinsic('nestedProps', (name) => {\n return {\n parse: (exp: ts.CallExpression, ctx: ParserContext): FigmaNestedProps => {\n const { sourceFile } = ctx\n const layerName = exp.arguments?.[0]\n const mapping = exp.arguments?.[1]\n\n assertIsStringLiteral(\n layerName,\n sourceFile,\n `Invalid argument to ${name}, \\`layerName\\` should be a string literal`,\n )\n assertIsObjectLiteralExpression(\n mapping,\n sourceFile,\n `Invalid argument to ${name}, \\`props\\` should be an object literal`,\n )\n\n ts.forEachChild(mapping, (node) => {\n if (\n ts.isPropertyAssignment(node) &&\n ts.isCallExpression(node.initializer) &&\n node.initializer.getText().startsWith('figma.nestedProps')\n ) {\n throw new ParserError(\n `nestedProps can not be nested inside another nestedProps call, instead, pass the deeply nested layer name at the top level`,\n )\n }\n })\n\n return {\n kind: IntrinsicKind.NestedProps,\n args: {\n layer: stripQuotesFromNode(layerName),\n props: parsePropsObject(mapping, ctx),\n },\n }\n },\n }\n})\n\nmakeIntrinsic('className', (name) => {\n return {\n parse: (exp: ts.CallExpression, ctx: ParserContext): FigmaClassName => {\n const { sourceFile } = ctx\n const classNameArg = exp.arguments?.[0]\n const className: (string | Intrinsic)[] = []\n assertIsArrayLiteralExpression(classNameArg, sourceFile, `${name} takes an array of strings`)\n\n classNameArg.elements.forEach((el) => {\n if (ts.isStringLiteral(el)) {\n className.push(stripQuotesFromNode(el))\n } else if (ts.isCallExpression(el)) {\n className.push(parseIntrinsic(el, ctx))\n }\n })\n\n return {\n kind: IntrinsicKind.ClassName,\n args: {\n className,\n },\n }\n },\n }\n})\n\nmakeIntrinsic('textContent', (name) => {\n return {\n parse: (exp: ts.CallExpression, ctx: ParserContext): FigmaTextContent => {\n const { sourceFile } = ctx\n const layerNameArg = exp.arguments?.[0]\n assertIsStringLiteral(\n layerNameArg,\n sourceFile,\n `${name} takes a single argument which is the Figma layer name`,\n )\n\n return {\n kind: IntrinsicKind.TextContent,\n args: {\n layer: stripQuotesFromNode(layerNameArg),\n },\n }\n },\n }\n})\n\n/**\n * Parses a call expression to an intrinsic\n *\n * @param exp Expression to parse\n * @param parserContext parser context\n * @returns\n */\nexport function parseIntrinsic(exp: ts.CallExpression, parserContext: ParserContext): Intrinsic {\n for (const key in Intrinsics) {\n if (Intrinsics[key].match(exp)) {\n // Chained call expressions in TS are nested with the innermost call expression\n // being the first in the chain. We need to reverse the chain so that the intrinsic\n // is the first element in the array. The TS AST looks like this for a().b():\n // CallExpression [a().b()] ->\n // PropertyAccessExpression [a().b] ->\n // CallExpression [a()]\n\n let callChain = []\n let current: any = exp\n while (current) {\n if (ts.isCallExpression(current)) {\n callChain.push(current)\n current = current.expression\n } else if (ts.isPropertyAccessExpression(current)) {\n current = current.expression\n } else {\n current = null\n }\n }\n\n // If there's only one call expression just return the matching intrinsic\n callChain = callChain.reverse()\n if (callChain.length <= 1) {\n return Intrinsics[key].parse(exp, parserContext)\n }\n\n // The first call expression is the intrinsic itself, and any following call\n // expressions are modifiers\n const intrinsic = Intrinsics[key].parse(callChain.shift()!, parserContext)\n const modifiers = callChain.map((modifier) => parseModifier(modifier, parserContext))\n\n return {\n ...intrinsic,\n modifiers,\n }\n }\n }\n\n throw new ParserError(`Unknown intrinsic: ${exp.getText()}`, {\n node: exp,\n sourceFile: parserContext.sourceFile,\n })\n}\n\n/**\n * Replace newlines in enum values with \\\\n so that we don't output\n * broken JS with newlines inside the string\n */\nfunction replaceNewlines(str: string) {\n return str.toString().replaceAll('\\n', '\\\\n').replaceAll(\"'\", \"\\\\'\")\n}\n\nexport function valueToString(value: ValueMappingKind, childLayer?: string) {\n if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'undefined') {\n return `${value}`\n }\n\n if (typeof value === 'string') {\n return `'${replaceNewlines(value)}'`\n }\n\n if ('kind' in value) {\n // Mappings can be nested, e.g. an enum value can be figma.instance(...)\n return `${intrinsicToString(value as Intrinsic, childLayer)}`\n }\n\n // Convert objects to strings\n const str = typeof value.$value === 'string' ? value.$value : `${JSON.stringify(value.$value)}`\n const v = replaceNewlines(str)\n\n switch (value.$type) {\n case 'function':\n return `_fcc_function('${v}')`\n case 'identifier':\n return `_fcc_identifier('${v}')`\n case 'object':\n // Don't pass the object itself wrapped in quotes - this helper needs to instantiate the actual\n // object, as it may be used in the snippet code\n return `_fcc_object(${v})`\n case 'template-string':\n return `_fcc_templateString('${v}')`\n case 'jsx-element':\n return `_fcc_jsxElement('${v}')`\n case 'array':\n return `_fcc_array(${v})`\n default:\n throw new InternalError(`Unknown helper type: ${value}`)\n }\n}\n\nexport function valueMappingToString(valueMapping: ValueMapping, childLayer?: string): string {\n // For enums (and booleans with a valueMapping provided), convert the\n // value mapping to an object.\n return (\n '{\\n' +\n Object.entries(valueMapping)\n .map(([key, value]) => {\n return `\"${key}\": ${valueToString(value, childLayer)}`\n })\n .join(',\\n') +\n '}'\n )\n}\n\nlet nestedLayerCount = 0\n\nexport function intrinsicToString(\n { kind, args, modifiers = [] }: Intrinsic,\n childLayer?: string,\n): string {\n const selector = childLayer ?? `figma.currentLayer`\n switch (kind) {\n case IntrinsicKind.String:\n return `${selector}.__properties__.string('${args.figmaPropName}')`\n case IntrinsicKind.Instance: {\n // Outputs:\n // `const propName = figma.properties.string('propName')`, or\n // `const propName = figma.properties.boolean('propName')`, or\n // `const propName = figma.properties.instance('propName')`\n if (modifiers.length > 0) {\n const instance = `${selector}.__properties__.__instance__('${args.figmaPropName}')`\n let body = `const instance = ${instance}\\n`\n body += `return instance && instance.type !== \"ERROR\" ? ${['instance', ...modifiers.map(modifierToString)].join('.')} : instance`\n return `(function () {${body}})()`\n }\n return `${selector}.__properties__.instance('${args.figmaPropName}')`\n }\n case IntrinsicKind.Boolean: {\n if (args.valueMapping) {\n const mappingString = valueMappingToString(args.valueMapping, childLayer)\n // Outputs: `const propName = figma.properties.boolean('propName', { ... mapping object from above ... })`\n return `${selector}.__properties__.boolean('${args.figmaPropName}', ${mappingString})`\n }\n return `${selector}.__properties__.boolean('${args.figmaPropName}')`\n }\n case IntrinsicKind.Enum: {\n const mappingString = valueMappingToString(args.valueMapping, childLayer)\n\n // Outputs: `const propName = figma.properties.enum('propName', { ... mapping object from above ... })`\n return `${selector}.__properties__.enum('${args.figmaPropName}', ${mappingString})`\n }\n case IntrinsicKind.Slot: {\n return `${selector}.__properties__.slot('${args.figmaPropName}')`\n }\n case IntrinsicKind.Children: {\n // Outputs: `const propName = figma.properties.children([\"Layer 1\", \"Layer 2\"])`\n return `${selector}.__properties__.children([${args.layers.map((layerName) => `\"${layerName}\"`).join(',')}])`\n }\n case IntrinsicKind.ClassName: {\n // Outputs: `const propName = ['btn-base', figma.currentLayer.__properties__.enum('Size, { Large: 'btn-large' })].join(\" \")`\n return `[${args.className.map((className) => (typeof className === 'string' ? `\"${className}\"` : `${intrinsicToString(className, childLayer)}`)).join(', ')}].filter(v => !!v).join(' ')`\n }\n case IntrinsicKind.TextContent: {\n return `${selector}.__findChildWithCriteria__({ name: '${args.layer}', type: \"TEXT\" }).__render__()`\n }\n case IntrinsicKind.NestedProps: {\n let body: string = ''\n // the actual layer name in figma could have a bunch of special characters in it,\n // and if we try to normalize it to a valid JS identifier, it could conflict with\n // other variables in the template code. So we generate a unique variable name\n // for each nested layer reference instead. The only reason it's wrapped in a funciton\n // currently is to keep the error checking out of global scope\n const nestedLayerRef = `nestedLayer${nestedLayerCount++}`\n body += `const ${nestedLayerRef} = figma.currentLayer.__find__(\"${args.layer}\")\\n`\n body += `return ${nestedLayerRef}.type === \"ERROR\" ? ${nestedLayerRef} : {\n${Object.entries(args.props).map(\n ([key, intrinsic]) => `${key}: ${intrinsicToString(intrinsic, nestedLayerRef)}\\n`,\n)}\n }\\n`\n return `(function () {${body}})()`\n }\n default:\n throw new InternalError(`Unknown intrinsic: ${kind}`)\n }\n}\n\n/**\n * Converts an expression to an FCC value, which is a wrapper around the actual value that\n * includes the type information. This is used to serialize the value to JSON and then\n * deserialize it back to the correct type in the generated code.\n *\n * @param valueNode\n * @param parserContext\n * @returns\n */\nfunction expressionToFccEnumValue(\n valueNode: ts.Expression,\n parserContext: ParserContext,\n): FCCValue {\n const { sourceFile, checker } = parserContext\n\n if (ts.isParenthesizedExpression(valueNode)) {\n return expressionToFccEnumValue(valueNode.expression, parserContext)\n }\n\n if (ts.isJsxElement(valueNode) || ts.isJsxSelfClosingElement(valueNode)) {\n return _fcc_jsxElement(valueNode.getText())\n }\n\n if (ts.isArrowFunction(valueNode) || ts.isFunctionExpression(valueNode)) {\n return _fcc_function(valueNode.getText())\n }\n\n if (ts.isObjectLiteralExpression(valueNode)) {\n // should recursively convert to FCC\n return _fcc_object(parsePropsObject(valueNode, parserContext))\n }\n\n if (ts.isArrayLiteralExpression(valueNode)) {\n return _fcc_array(\n convertArrayLiteralToJs(valueNode, sourceFile, checker, (valueNode) => {\n if (ts.isCallExpression(valueNode)) {\n return parseIntrinsic(valueNode, parserContext)\n }\n return expressionToFccEnumValue(valueNode, parserContext)\n }),\n )\n }\n\n if (ts.isTemplateLiteral(valueNode)) {\n const str = valueNode.getText().replaceAll('`', '')\n return _fcc_templateString(str)\n }\n\n // Handles enums, for example `MyEnum.Value`\n if (ts.isPropertyAccessExpression(valueNode)) {\n return _fcc_identifier(valueNode.getText())\n }\n\n // Any other identifiers (except undefined) are treated as React components, for example `MyComponent`.\n // We don't support referencing other variables in props object so this should be fine.\n if (ts.isIdentifier(valueNode) && !isUndefinedType(valueNode, parserContext.checker)) {\n return _fcc_identifier(valueNode.getText())\n }\n\n // Fall back to the default conversion in `convertObjectLiteralToJs`\n return undefined\n}\n\n/**\n * Parses the `props` field in a `figma.connect()` call, returning a mapping of\n * prop names to their respective intrinsic types\n *\n * @param objectLiteral An object literal expression\n * @param parserContext Parser context\n * @returns\n */\nexport function parsePropsObject(\n objectLiteral: ts.ObjectLiteralExpression,\n parserContext: ParserContext,\n): PropMappings {\n const { sourceFile, checker } = parserContext\n return convertObjectLiteralToJs(objectLiteral, sourceFile, checker, (valueNode) => {\n if (ts.isCallExpression(valueNode)) {\n return parseIntrinsic(valueNode, parserContext)\n }\n return expressionToFccEnumValue(valueNode, parserContext)\n }) as PropMappings\n}\n\nexport type PropMappings = Record<string, Intrinsic>\n"]}
@@ -15,19 +15,34 @@ export declare enum CodeConnectLabel {
15
15
  /**
16
16
  * Supported Code Connect languages for syntax highlighting and formatting
17
17
  */
18
- export declare enum CodeConnectLanguage {
18
+ export declare enum SyntaxHighlightLanguage {
19
19
  TypeScript = "typescript",
20
+ CPP = "cpp",
21
+ Ruby = "ruby",
22
+ CSS = "css",
23
+ JavaScript = "javascript",
24
+ HTML = "html",
25
+ JSON = "json",
26
+ GraphQL = "graphql",
27
+ Python = "python",
28
+ Go = "go",
29
+ SQL = "sql",
20
30
  Swift = "swift",
21
31
  Kotlin = "kotlin",
22
- HTML = "html",
23
- Raw = "raw"
32
+ Rust = "rust",
33
+ Bash = "bash",
34
+ XML = "xml",
35
+ Plaintext = "plaintext",
36
+ JSX = "jsx",
37
+ TSX = "tsx",
38
+ Dart = "dart"
24
39
  }
25
40
  /**
26
41
  * Infers the appropriate language for a raw template file based on its label.
27
- * Falls back to 'raw' if the label is not recognized.
42
+ * Falls back to 'plaintext' if the label is not recognized.
28
43
  *
29
44
  * @param label - The label associated with the Code Connect file
30
45
  * @returns The corresponding language identifier for syntax highlighting
31
46
  */
32
- export declare function getInferredLanguageForRaw(label: string): string;
47
+ export declare function getInferredLanguageForRaw(label: string, defaultLanguage?: SyntaxHighlightLanguage): SyntaxHighlightLanguage;
33
48
  //# sourceMappingURL=label_language_mapping.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"label_language_mapping.d.ts","sourceRoot":"","sources":["../../src/connect/label_language_mapping.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,KAAK,UAAU;IACf,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,aAAa,mBAAmB;IAChC,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,IAAI,SAAS;CACd;AAED;;GAEG;AACH,oBAAY,mBAAmB;IAC7B,UAAU,eAAe;IACzB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,GAAG,QAAQ;CACZ;AAkBD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU/D"}
1
+ {"version":3,"file":"label_language_mapping.d.ts","sourceRoot":"","sources":["../../src/connect/label_language_mapping.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,KAAK,UAAU;IACf,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,aAAa,mBAAmB;IAChC,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,IAAI,SAAS;CACd;AAED;;GAEG;AACH,oBAAY,uBAAuB;IACjC,UAAU,eAAe;IACzB,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,UAAU,eAAe;IACzB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,EAAE,OAAO;IACT,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,SAAS,cAAc;IACvB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,IAAI,SAAS;CACd;AAkBD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,eAAe,GAAE,uBAA2D,GAC3E,uBAAuB,CASzB"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CodeConnectLanguage = exports.CodeConnectLabel = void 0;
3
+ exports.SyntaxHighlightLanguage = exports.CodeConnectLabel = void 0;
4
4
  exports.getInferredLanguageForRaw = getInferredLanguageForRaw;
5
5
  /**
6
6
  * Default Code Connect labels for native parsers
@@ -20,43 +20,57 @@ var CodeConnectLabel;
20
20
  /**
21
21
  * Supported Code Connect languages for syntax highlighting and formatting
22
22
  */
23
- var CodeConnectLanguage;
24
- (function (CodeConnectLanguage) {
25
- CodeConnectLanguage["TypeScript"] = "typescript";
26
- CodeConnectLanguage["Swift"] = "swift";
27
- CodeConnectLanguage["Kotlin"] = "kotlin";
28
- CodeConnectLanguage["HTML"] = "html";
29
- CodeConnectLanguage["Raw"] = "raw";
30
- })(CodeConnectLanguage || (exports.CodeConnectLanguage = CodeConnectLanguage = {}));
23
+ var SyntaxHighlightLanguage;
24
+ (function (SyntaxHighlightLanguage) {
25
+ SyntaxHighlightLanguage["TypeScript"] = "typescript";
26
+ SyntaxHighlightLanguage["CPP"] = "cpp";
27
+ SyntaxHighlightLanguage["Ruby"] = "ruby";
28
+ SyntaxHighlightLanguage["CSS"] = "css";
29
+ SyntaxHighlightLanguage["JavaScript"] = "javascript";
30
+ SyntaxHighlightLanguage["HTML"] = "html";
31
+ SyntaxHighlightLanguage["JSON"] = "json";
32
+ SyntaxHighlightLanguage["GraphQL"] = "graphql";
33
+ SyntaxHighlightLanguage["Python"] = "python";
34
+ SyntaxHighlightLanguage["Go"] = "go";
35
+ SyntaxHighlightLanguage["SQL"] = "sql";
36
+ SyntaxHighlightLanguage["Swift"] = "swift";
37
+ SyntaxHighlightLanguage["Kotlin"] = "kotlin";
38
+ SyntaxHighlightLanguage["Rust"] = "rust";
39
+ SyntaxHighlightLanguage["Bash"] = "bash";
40
+ SyntaxHighlightLanguage["XML"] = "xml";
41
+ SyntaxHighlightLanguage["Plaintext"] = "plaintext";
42
+ SyntaxHighlightLanguage["JSX"] = "jsx";
43
+ SyntaxHighlightLanguage["TSX"] = "tsx";
44
+ SyntaxHighlightLanguage["Dart"] = "dart";
45
+ })(SyntaxHighlightLanguage || (exports.SyntaxHighlightLanguage = SyntaxHighlightLanguage = {}));
31
46
  /**
32
47
  * Maps Code Connect labels to their corresponding language for syntax highlighting.
33
48
  * This is used for raw template files to infer the correct language.
34
49
  */
35
50
  const LABEL_TO_LANGUAGE_MAP = {
36
- [CodeConnectLabel.React]: CodeConnectLanguage.TypeScript,
37
- [CodeConnectLabel.Storybook]: CodeConnectLanguage.TypeScript,
38
- [CodeConnectLabel.SwiftUI]: CodeConnectLanguage.Swift,
39
- [CodeConnectLabel.Compose]: CodeConnectLanguage.Kotlin,
40
- [CodeConnectLabel.WebComponents]: CodeConnectLanguage.HTML,
41
- [CodeConnectLabel.HTML]: CodeConnectLanguage.HTML,
42
- [CodeConnectLabel.Vue]: CodeConnectLanguage.TypeScript,
43
- [CodeConnectLabel.Angular]: CodeConnectLanguage.TypeScript,
44
- [CodeConnectLabel.Code]: CodeConnectLanguage.Raw,
51
+ [CodeConnectLabel.React]: SyntaxHighlightLanguage.JSX,
52
+ [CodeConnectLabel.Storybook]: SyntaxHighlightLanguage.TypeScript,
53
+ [CodeConnectLabel.SwiftUI]: SyntaxHighlightLanguage.Swift,
54
+ [CodeConnectLabel.Compose]: SyntaxHighlightLanguage.Kotlin,
55
+ [CodeConnectLabel.WebComponents]: SyntaxHighlightLanguage.HTML,
56
+ [CodeConnectLabel.HTML]: SyntaxHighlightLanguage.HTML,
57
+ [CodeConnectLabel.Vue]: SyntaxHighlightLanguage.HTML,
58
+ [CodeConnectLabel.Angular]: SyntaxHighlightLanguage.HTML,
59
+ [CodeConnectLabel.Code]: SyntaxHighlightLanguage.Plaintext,
45
60
  };
46
61
  /**
47
62
  * Infers the appropriate language for a raw template file based on its label.
48
- * Falls back to 'raw' if the label is not recognized.
63
+ * Falls back to 'plaintext' if the label is not recognized.
49
64
  *
50
65
  * @param label - The label associated with the Code Connect file
51
66
  * @returns The corresponding language identifier for syntax highlighting
52
67
  */
53
- function getInferredLanguageForRaw(label) {
68
+ function getInferredLanguageForRaw(label, defaultLanguage = SyntaxHighlightLanguage.Plaintext) {
54
69
  // Try to match against known labels (enum values)
55
70
  const knownLabel = Object.values(CodeConnectLabel).find((enumLabel) => enumLabel === label);
56
71
  if (knownLabel) {
57
72
  return LABEL_TO_LANGUAGE_MAP[knownLabel];
58
73
  }
59
- // Fallback to raw for unknown labels
60
- return CodeConnectLanguage.Raw;
74
+ return defaultLanguage;
61
75
  }
62
76
  //# sourceMappingURL=label_language_mapping.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"label_language_mapping.js","sourceRoot":"","sources":["../../src/connect/label_language_mapping.ts"],"names":[],"mappings":";;;AAiDA,8DAUC;AA3DD;;GAEG;AACH,IAAY,gBAUX;AAVD,WAAY,gBAAgB;IAC1B,mCAAe,CAAA;IACf,2CAAuB,CAAA;IACvB,uCAAmB,CAAA;IACnB,uCAAmB,CAAA;IACnB,oDAAgC,CAAA;IAChC,iCAAa,CAAA;IACb,+BAAW,CAAA;IACX,uCAAmB,CAAA;IACnB,iCAAa,CAAA;AACf,CAAC,EAVW,gBAAgB,gCAAhB,gBAAgB,QAU3B;AAED;;GAEG;AACH,IAAY,mBAMX;AAND,WAAY,mBAAmB;IAC7B,gDAAyB,CAAA;IACzB,sCAAe,CAAA;IACf,wCAAiB,CAAA;IACjB,oCAAa,CAAA;IACb,kCAAW,CAAA;AACb,CAAC,EANW,mBAAmB,mCAAnB,mBAAmB,QAM9B;AAED;;;GAGG;AACH,MAAM,qBAAqB,GAAkD;IAC3E,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,mBAAmB,CAAC,UAAU;IACxD,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC,UAAU;IAC5D,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC,KAAK;IACrD,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC,MAAM;IACtD,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC,IAAI;IAC1D,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC,IAAI;IACjD,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,mBAAmB,CAAC,UAAU;IACtD,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC,UAAU;IAC1D,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC,GAAG;CACjD,CAAA;AAED;;;;;;GAMG;AACH,SAAgB,yBAAyB,CAAC,KAAa;IACrD,kDAAkD;IAClD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,KAAK,CAAC,CAAA;IAE3F,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,qBAAqB,CAAC,UAA8B,CAAC,CAAA;IAC9D,CAAC;IAED,qCAAqC;IACrC,OAAO,mBAAmB,CAAC,GAAG,CAAA;AAChC,CAAC","sourcesContent":["/**\n * Default Code Connect labels for native parsers\n */\nexport enum CodeConnectLabel {\n React = 'React',\n Storybook = 'Storybook',\n SwiftUI = 'SwiftUI',\n Compose = 'Compose',\n WebComponents = 'Web Components',\n HTML = 'HTML',\n Vue = 'Vue',\n Angular = 'Angular',\n Code = 'Code', // Default/fallback label\n}\n\n/**\n * Supported Code Connect languages for syntax highlighting and formatting\n */\nexport enum CodeConnectLanguage {\n TypeScript = 'typescript',\n Swift = 'swift',\n Kotlin = 'kotlin',\n HTML = 'html',\n Raw = 'raw', // Fallback for unknown languages\n}\n\n/**\n * Maps Code Connect labels to their corresponding language for syntax highlighting.\n * This is used for raw template files to infer the correct language.\n */\nconst LABEL_TO_LANGUAGE_MAP: Record<CodeConnectLabel, CodeConnectLanguage> = {\n [CodeConnectLabel.React]: CodeConnectLanguage.TypeScript,\n [CodeConnectLabel.Storybook]: CodeConnectLanguage.TypeScript,\n [CodeConnectLabel.SwiftUI]: CodeConnectLanguage.Swift,\n [CodeConnectLabel.Compose]: CodeConnectLanguage.Kotlin,\n [CodeConnectLabel.WebComponents]: CodeConnectLanguage.HTML,\n [CodeConnectLabel.HTML]: CodeConnectLanguage.HTML,\n [CodeConnectLabel.Vue]: CodeConnectLanguage.TypeScript,\n [CodeConnectLabel.Angular]: CodeConnectLanguage.TypeScript,\n [CodeConnectLabel.Code]: CodeConnectLanguage.Raw,\n}\n\n/**\n * Infers the appropriate language for a raw template file based on its label.\n * Falls back to 'raw' if the label is not recognized.\n *\n * @param label - The label associated with the Code Connect file\n * @returns The corresponding language identifier for syntax highlighting\n */\nexport function getInferredLanguageForRaw(label: string): string {\n // Try to match against known labels (enum values)\n const knownLabel = Object.values(CodeConnectLabel).find((enumLabel) => enumLabel === label)\n\n if (knownLabel) {\n return LABEL_TO_LANGUAGE_MAP[knownLabel as CodeConnectLabel]\n }\n\n // Fallback to raw for unknown labels\n return CodeConnectLanguage.Raw\n}\n"]}
1
+ {"version":3,"file":"label_language_mapping.js","sourceRoot":"","sources":["../../src/connect/label_language_mapping.ts"],"names":[],"mappings":";;;AAgEA,8DAYC;AA5ED;;GAEG;AACH,IAAY,gBAUX;AAVD,WAAY,gBAAgB;IAC1B,mCAAe,CAAA;IACf,2CAAuB,CAAA;IACvB,uCAAmB,CAAA;IACnB,uCAAmB,CAAA;IACnB,oDAAgC,CAAA;IAChC,iCAAa,CAAA;IACb,+BAAW,CAAA;IACX,uCAAmB,CAAA;IACnB,iCAAa,CAAA;AACf,CAAC,EAVW,gBAAgB,gCAAhB,gBAAgB,QAU3B;AAED;;GAEG;AACH,IAAY,uBAqBX;AArBD,WAAY,uBAAuB;IACjC,oDAAyB,CAAA;IACzB,sCAAW,CAAA;IACX,wCAAa,CAAA;IACb,sCAAW,CAAA;IACX,oDAAyB,CAAA;IACzB,wCAAa,CAAA;IACb,wCAAa,CAAA;IACb,8CAAmB,CAAA;IACnB,4CAAiB,CAAA;IACjB,oCAAS,CAAA;IACT,sCAAW,CAAA;IACX,0CAAe,CAAA;IACf,4CAAiB,CAAA;IACjB,wCAAa,CAAA;IACb,wCAAa,CAAA;IACb,sCAAW,CAAA;IACX,kDAAuB,CAAA;IACvB,sCAAW,CAAA;IACX,sCAAW,CAAA;IACX,wCAAa,CAAA;AACf,CAAC,EArBW,uBAAuB,uCAAvB,uBAAuB,QAqBlC;AAED;;;GAGG;AACH,MAAM,qBAAqB,GAAsD;IAC/E,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,uBAAuB,CAAC,GAAG;IACrD,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,uBAAuB,CAAC,UAAU;IAChE,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,uBAAuB,CAAC,KAAK;IACzD,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,uBAAuB,CAAC,MAAM;IAC1D,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,uBAAuB,CAAC,IAAI;IAC9D,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC,IAAI;IACrD,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,uBAAuB,CAAC,IAAI;IACpD,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,uBAAuB,CAAC,IAAI;IACxD,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC,SAAS;CAC3D,CAAA;AAED;;;;;;GAMG;AACH,SAAgB,yBAAyB,CACvC,KAAa,EACb,kBAA2C,uBAAuB,CAAC,SAAS;IAE5E,kDAAkD;IAClD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,KAAK,CAAC,CAAA;IAE3F,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,qBAAqB,CAAC,UAA8B,CAAC,CAAA;IAC9D,CAAC;IAED,OAAO,eAAe,CAAA;AACxB,CAAC","sourcesContent":["/**\n * Default Code Connect labels for native parsers\n */\nexport enum CodeConnectLabel {\n React = 'React',\n Storybook = 'Storybook',\n SwiftUI = 'SwiftUI',\n Compose = 'Compose',\n WebComponents = 'Web Components',\n HTML = 'HTML',\n Vue = 'Vue',\n Angular = 'Angular',\n Code = 'Code', // Default/fallback label\n}\n\n/**\n * Supported Code Connect languages for syntax highlighting and formatting\n */\nexport enum SyntaxHighlightLanguage {\n TypeScript = 'typescript',\n CPP = 'cpp',\n Ruby = 'ruby',\n CSS = 'css',\n JavaScript = 'javascript',\n HTML = 'html',\n JSON = 'json',\n GraphQL = 'graphql',\n Python = 'python',\n Go = 'go',\n SQL = 'sql',\n Swift = 'swift',\n Kotlin = 'kotlin',\n Rust = 'rust',\n Bash = 'bash',\n XML = 'xml',\n Plaintext = 'plaintext',\n JSX = 'jsx',\n TSX = 'tsx',\n Dart = 'dart',\n}\n\n/**\n * Maps Code Connect labels to their corresponding language for syntax highlighting.\n * This is used for raw template files to infer the correct language.\n */\nconst LABEL_TO_LANGUAGE_MAP: Record<CodeConnectLabel, SyntaxHighlightLanguage> = {\n [CodeConnectLabel.React]: SyntaxHighlightLanguage.JSX,\n [CodeConnectLabel.Storybook]: SyntaxHighlightLanguage.TypeScript,\n [CodeConnectLabel.SwiftUI]: SyntaxHighlightLanguage.Swift,\n [CodeConnectLabel.Compose]: SyntaxHighlightLanguage.Kotlin,\n [CodeConnectLabel.WebComponents]: SyntaxHighlightLanguage.HTML,\n [CodeConnectLabel.HTML]: SyntaxHighlightLanguage.HTML,\n [CodeConnectLabel.Vue]: SyntaxHighlightLanguage.HTML,\n [CodeConnectLabel.Angular]: SyntaxHighlightLanguage.HTML,\n [CodeConnectLabel.Code]: SyntaxHighlightLanguage.Plaintext,\n}\n\n/**\n * Infers the appropriate language for a raw template file based on its label.\n * Falls back to 'plaintext' if the label is not recognized.\n *\n * @param label - The label associated with the Code Connect file\n * @returns The corresponding language identifier for syntax highlighting\n */\nexport function getInferredLanguageForRaw(\n label: string,\n defaultLanguage: SyntaxHighlightLanguage = SyntaxHighlightLanguage.Plaintext,\n): SyntaxHighlightLanguage {\n // Try to match against known labels (enum values)\n const knownLabel = Object.values(CodeConnectLabel).find((enumLabel) => enumLabel === label)\n\n if (knownLabel) {\n return LABEL_TO_LANGUAGE_MAP[knownLabel as CodeConnectLabel]\n }\n\n return defaultLanguage\n}\n"]}