@figma/code-connect 1.4.5 → 1.4.8
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.
- package/dist/cli.js +0 -1
- package/dist/cli.js.map +1 -1
- package/dist/client/figma_client.d.ts +6 -6
- package/dist/commands/connect.d.ts +4 -1
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +107 -25
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/connect_template.d.ts +2 -2
- package/dist/commands/connect_template.d.ts.map +1 -1
- package/dist/commands/connect_template.js +11 -2
- package/dist/commands/connect_template.js.map +1 -1
- package/dist/commands/filter_project_info.d.ts +3 -3
- package/dist/commands/filter_project_info.d.ts.map +1 -1
- package/dist/commands/filter_project_info.js +18 -12
- package/dist/commands/filter_project_info.js.map +1 -1
- package/dist/common/logging.d.ts.map +1 -1
- package/dist/common/logging.js +13 -6
- package/dist/common/logging.js.map +1 -1
- package/dist/common/updates.d.ts.map +1 -1
- package/dist/common/updates.js +2 -2
- package/dist/common/updates.js.map +1 -1
- package/dist/connect/migration_batch_helpers.d.ts +45 -0
- package/dist/connect/migration_batch_helpers.d.ts.map +1 -0
- package/dist/connect/migration_batch_helpers.js +439 -0
- package/dist/connect/migration_batch_helpers.js.map +1 -0
- package/dist/connect/migration_helpers.d.ts +4 -0
- package/dist/connect/migration_helpers.d.ts.map +1 -1
- package/dist/connect/migration_helpers.js +29 -5
- package/dist/connect/migration_helpers.js.map +1 -1
- package/dist/connect/parser_executable_types.d.ts +60 -60
- package/dist/connect/project.d.ts +2 -1
- package/dist/connect/project.d.ts.map +1 -1
- package/dist/connect/project.js +26 -24
- package/dist/connect/project.js.map +1 -1
- package/dist/connect/raw_templates.d.ts +10 -0
- package/dist/connect/raw_templates.d.ts.map +1 -1
- package/dist/connect/raw_templates.js +48 -14
- package/dist/connect/raw_templates.js.map +1 -1
- package/dist/connect/upload.d.ts.map +1 -1
- package/dist/connect/upload.js +24 -8
- package/dist/connect/upload.js.map +1 -1
- package/dist/connect/wizard/helpers.d.ts.map +1 -1
- package/dist/connect/wizard/helpers.js +7 -2
- package/dist/connect/wizard/helpers.js.map +1 -1
- package/figma-types.d.ts +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration_helpers.js","sourceRoot":"","sources":["../../src/connect/migration_helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs'\nimport path from 'path'\nimport * as prettier from 'prettier'\nimport { CodeConnectJSON } from '../connect/figma_connect'\n\n/** Prettier configuration used for all generated template files */\nconst PRETTIER_OPTIONS = {\n parser: 'typescript' as const,\n semi: false,\n trailingComma: 'all' as const,\n pluginSearchDirs: false as const,\n}\n\n/** Formats template code with consistent prettier configuration */\nfunction formatTemplate(code: string): string {\n return prettier.format(code, PRETTIER_OPTIONS)\n}\n\n/**\n * Common wrapper that handles path determination and file writing for both\n * simple templates and variant templates.\n */\nfunction writeTemplateFileCommon(\n componentName: string,\n fileContent: string,\n outputDir: string | undefined,\n baseDir: string,\n localSourcePath: string | undefined,\n filePathsCreated: Set<string> | undefined,\n useTypeScript = true,\n): { outputPath: string; skipped: boolean } {\n const suffix = useTypeScript ? '.figma.ts' : '.figma.js'\n const baseOutputPath = determineOutputPath(\n componentName,\n suffix,\n outputDir,\n baseDir,\n localSourcePath,\n )\n return writeFileWithDuplicateHandling(baseOutputPath, fileContent, suffix, filePathsCreated)\n}\n\nexport function getFilenameFromComponentName(componentName: string): string {\n const allowlisted = /[a-zA-Z0-9\\-\\.]/\n return componentName\n .split('')\n .map((ch) => (allowlisted.test(ch) ? ch : '_'))\n .join('')\n .replace(/_+/g, '_')\n .replace(/^_|_$/g, '')\n}\n\n/**\n * Determines the base output path for a template file.\n * Shared logic between writeTemplateFile and writeVariantTemplateFile.\n */\nfunction determineOutputPath(\n rawComponentName: string,\n suffix: string,\n outputDir: string | undefined,\n baseDir: string,\n localSourcePath: string | undefined,\n): string {\n // Extract basename from localSourcePath when available, falling back to componentName\n const componentFilename = getFilenameFromComponentName(rawComponentName)\n let basename = componentFilename\n if (localSourcePath) {\n let sourceBasename = path.basename(localSourcePath)\n\n // If this is a Code Connect file, extract the base component name\n // Handles patterns like: Button.figma.tsx, Button.figmadoc.tsx, Button.figma.template.js\n // Should all become: Button.figma.js\n const codeConnectPattern = /\\.(figma|figmadoc)(\\.[^.]+)+$/\n if (codeConnectPattern.test(sourceBasename)) {\n // Extract everything before the .figma/.figmadoc pattern\n sourceBasename = sourceBasename.replace(codeConnectPattern, '')\n } else {\n // For regular component files, strip extension normally\n sourceBasename = path.basename(localSourcePath, path.extname(localSourcePath))\n }\n\n basename = sourceBasename\n }\n\n if (outputDir) {\n // Use specified output directory with basename derived from source path\n return path.join(outputDir, `${basename}${suffix}`)\n } else if (localSourcePath) {\n // Use same directory as local source file\n return path.join(path.dirname(localSourcePath), `${basename}${suffix}`)\n } else {\n // No source info, use current directory\n const filename = `${componentFilename}${suffix}`\n return path.join(baseDir, filename)\n }\n}\n\n/**\n * Handles file existence checking, duplicate name resolution, and writing.\n * Shared logic between writeTemplateFile and writeVariantTemplateFile.\n */\nfunction writeFileWithDuplicateHandling(\n baseOutputPath: string,\n fileContent: string,\n suffix: string,\n filePathsCreated: Set<string> | undefined,\n): { outputPath: string; skipped: boolean } {\n // Check if file already exists on disk (pre-existing file, not created in this run)\n const existsOnDisk = fs.existsSync(baseOutputPath)\n const createdInThisRun = filePathsCreated && filePathsCreated.has(baseOutputPath)\n\n if (existsOnDisk && !createdInThisRun) {\n // This file existed before the migration run, skip it\n return { outputPath: baseOutputPath, skipped: true }\n }\n\n // Handle duplicate names (either created in this run or would conflict with an existing file)\n let outputPath = baseOutputPath\n if (createdInThisRun || existsOnDisk) {\n // Find a unique name by appending _1, _2, etc. before the suffix\n const dir = path.dirname(baseOutputPath)\n const basename = path.basename(baseOutputPath)\n\n // Remove the suffix to get the base name (works for any suffix like .figma.js or .figma.ts)\n const baseNameWithoutSuffix = basename.endsWith(suffix)\n ? basename.slice(0, -suffix.length)\n : basename\n\n let counter = 1\n do {\n outputPath = path.join(dir, `${baseNameWithoutSuffix}_${counter}${suffix}`)\n counter++\n } while ((filePathsCreated && filePathsCreated.has(outputPath)) || fs.existsSync(outputPath))\n }\n\n // Ensure output directory exists\n const outputDirPath = path.dirname(outputPath)\n if (!fs.existsSync(outputDirPath)) {\n fs.mkdirSync(outputDirPath, { recursive: true })\n }\n\n // Write the file\n fs.writeFileSync(outputPath, fileContent, 'utf-8')\n\n // Track the created file path\n if (filePathsCreated) {\n filePathsCreated.add(outputPath)\n }\n\n return { outputPath, skipped: false }\n}\n\n/** Migrates a doc's template (Swift helpers, server helpers, V2, id, imports, nestable) and returns the formatted string. */\nexport function prepareMigratedTemplate(\n doc: CodeConnectJSON,\n includeProps = false,\n useTypeScript?: boolean,\n): string {\n let template = doc.template\n template = removeSwiftHelpers(template)\n template = migrateTemplateToUseServerSideHelpers(template)\n if (!includeProps) {\n template = removePropsDefinitionAndMetadata(template)\n }\n template = migrateV1TemplateToV2(template)\n template = addId(template, doc.component || 'TODO')\n template = addImports(template, doc.templateData?.imports)\n template = addNestableToMetadata(template, !!doc.templateData?.nestable)\n if (useTypeScript) {\n template = convertSyntaxToTypeScript(template)\n }\n return formatTemplate(template)\n}\n\nfunction removeSwiftHelpers(template: string): string {\n return template.replace(\n `function __fcc_renderSwiftChildren(children, prefix) {\n if (children === undefined) {\n return children\n }\n return children.flatMap((child, index) => {\n if (child.type === 'CODE') {\n let code = child.code.split('\\\\n').map((line) => {\n return line.trim() !== '' ? \\`\\${prefix}\\${line}\\` : line;\n }).join('\\\\n')\n if (index !== children.length - 1) {\n code = code + '\\\\n'\n }\n return {\n ...child,\n code: code,\n }\n } else {\n let elements = []\n const shouldAddNewline = index > 0 && children[index - 1].type === 'CODE' && !children[index - 1].code.endsWith('\\\\n')\n elements.push({ type: 'CODE', code: \\`\\${shouldAddNewline ? '\\\\n' : ''}\\${prefix}\\` })\n elements.push(child)\n if (index !== children.length - 1) {\n elements.push({ type: 'CODE', code: '\\\\n' })\n }\n return elements\n }\n })\n}\n`,\n '',\n )\n}\n\nexport type WriteTemplateFileOptions = {\n localSourcePath?: string\n filePathsCreated?: Set<string>\n includeProps?: boolean\n useTypeScript?: boolean\n}\n\nexport function writeTemplateFile(\n doc: CodeConnectJSON,\n outputDir: string | undefined,\n baseDir: string,\n {\n localSourcePath,\n filePathsCreated,\n includeProps = false,\n useTypeScript = true,\n }: WriteTemplateFileOptions = {},\n): { outputPath: string; skipped: boolean } {\n const componentName = doc.component || 'template'\n const template = prepareMigratedTemplate(doc, includeProps, useTypeScript)\n\n // Build comment header lines\n const commentLines: string[] = [`// url=${doc.figmaNode}`]\n if (doc.source) {\n commentLines.push(`// source=${doc.source}`)\n }\n if (doc.component) {\n commentLines.push(`// component=${doc.component}`)\n }\n commentLines.push(``)\n\n const fileContent = commentLines.join('\\n') + '\\n' + template\n\n return writeTemplateFileCommon(\n componentName,\n fileContent,\n outputDir,\n baseDir,\n localSourcePath,\n filePathsCreated,\n useTypeScript,\n )\n}\n\n// Renames must match helpers in code_connect_js_api.raw_source.ts\nexport function migrateTemplateToUseServerSideHelpers(template: string) {\n return (\n template\n // React helpers\n .replace(/_fcc_renderReactProp/g, 'figma.helpers.react.renderProp')\n .replace(/_fcc_renderReactChildren/g, 'figma.helpers.react.renderChildren')\n .replace(/_fcc_jsxElement/g, 'figma.helpers.react.jsxElement')\n .replace(/_fcc_function/g, 'figma.helpers.react.function')\n .replace(/_fcc_identifier/g, 'figma.helpers.react.identifier')\n .replace(/_fcc_object/g, 'figma.helpers.react.object')\n .replace(/_fcc_templateString/g, 'figma.helpers.react.templateString')\n .replace(/_fcc_renderPropValue/g, 'figma.helpers.react.renderPropValue')\n .replace(/_fcc_stringifyObject/g, 'figma.helpers.react.stringifyObject')\n .replace(/_fcc_reactComponent/g, 'figma.helpers.react.reactComponent')\n .replace(/_fcc_array/g, 'figma.helpers.react.array')\n .replace(/isReactComponentArray/g, 'figma.helpers.react.isReactComponentArray')\n // Swift helpers\n .replace(/__fcc_renderSwiftChildren/g, 'figma.helpers.swift.renderChildren')\n // Kotlin/Compose helpers\n .replace(/__fcc_renderComposeChildren/g, 'figma.helpers.kotlin.renderChildren')\n )\n}\n\nexport function addId(template: string, id: string): string {\n // Don't add id if already present (e.g. when re-migrating a previously-migrated template)\n if (/export default\\s*\\{\\s*id:\\s*['\"]/.test(template)) {\n return template\n }\n return template.replace(/export default \\{/, `export default { id: '${id}',`)\n}\n\nexport function addImports(template: string, imports: string[] | undefined): string {\n if (!imports || imports.length === 0) {\n return template\n }\n\n // Escape imports for safe insertion into JS\n const importsJson = JSON.stringify(imports)\n\n // Add imports after the id field if it exists, otherwise at the start\n // Match: export default { id: '...', (with optional whitespace/newlines)\n const withId = template.replace(\n /(export default\\s*\\{\\s*id:\\s*'[^']*',)/,\n `$1 imports: ${importsJson},`,\n )\n\n // If id replacement worked, return\n if (withId !== template) {\n return withId\n }\n\n // Otherwise, add at the start (after opening brace)\n return template.replace(/export default\\s*\\{/, `export default { imports: ${importsJson},`)\n}\n\nexport function addNestableToMetadata(template: string, nestable: boolean): string {\n // Find \"metadata: {\" and replace with \"metadata: { nestable: <value>,\"\n return template.replace(/metadata:\\s*\\{/, `metadata: { nestable: ${nestable},`)\n}\n\n/**\n * Migrates V1 templates to V2 API.\n *\n * This performs safe, incremental transformations. The following patterns\n * are intentionally NOT migrated as they're still supported in V2:\n *\n * - __props metadata building pattern - still valid JavaScript\n * - __renderWithFn__() - complex transformation, still supported\n *\n * These may be addressed in future migrations.\n */\nexport const migrateV1TemplateToV2 = (template: string): string => {\n let migrated = template\n\n // 1. Core object rename\n migrated = migrated.replace(/figma\\.currentLayer/g, 'figma.selectedInstance')\n\n // 2. Normalize template types to figma.code\n migrated = migrated.replace(/figma\\.html/g, 'figma.code')\n migrated = migrated.replace(/figma\\.tsx/g, 'figma.code')\n migrated = migrated.replace(/figma\\.swift/g, 'figma.code')\n migrated = migrated.replace(/figma\\.kotlin/g, 'figma.code')\n\n // 3. Property accessor methods\n migrated = migrated.replace(/\\.__properties__\\.string\\(/g, '.getString(')\n migrated = migrated.replace(/\\.__properties__\\.boolean\\(/g, '.getBoolean(')\n migrated = migrated.replace(/\\.__properties__\\.enum\\(/g, '.getEnum(')\n migrated = migrated.replace(/\\.__properties__\\.__instance__\\(/g, '.getInstanceSwap(')\n // .__properties__.instance() auto-renders, so we need to add .executeTemplate().example\n migrated = migrated.replace(\n /\\.__properties__\\.instance\\(([^)]+)\\)/g,\n '.getInstanceSwap($1)?.executeTemplate().example',\n )\n\n // 4. Alias for __properties__ on selectedInstance\n migrated = migrated.replace(/figma\\.selectedInstance\\.__properties__\\./g, 'figma.properties.')\n\n // 5. Other method renames\n migrated = migrated.replace(/\\.__getPropertyValue__\\(/g, '.getPropertyValue(')\n\n // 6. __findChildWithCriteria__ - migrate based on type parameter\n // For TEXT type with __render__(): __findChildWithCriteria__({ name: 'X', type: \"TEXT\" }).__render__() → findText('X').textContent\n migrated = migrated.replace(\n /\\.__findChildWithCriteria__\\(\\{\\s*name:\\s*'([^']+)',\\s*type:\\s*\"TEXT\"\\s*\\}\\)\\.__render__\\(\\)/g,\n \".findText('$1').textContent\",\n )\n migrated = migrated.replace(\n /\\.__findChildWithCriteria__\\(\\{\\s*type:\\s*\"TEXT\",\\s*name:\\s*'([^']+)'\\s*\\}\\)\\.__render__\\(\\)/g,\n \".findText('$1').textContent\",\n )\n // For INSTANCE type: __findChildWithCriteria__({ type: 'INSTANCE', name: 'X' }) → findInstance('X')\n migrated = migrated.replace(\n /\\.__findChildWithCriteria__\\(\\{\\s*name:\\s*'([^']+)',\\s*type:\\s*['\"]INSTANCE['\"]\\s*\\}\\)/g,\n \".findInstance('$1')\",\n )\n migrated = migrated.replace(\n /\\.__findChildWithCriteria__\\(\\{\\s*type:\\s*['\"]INSTANCE['\"],\\s*name:\\s*'([^']+)'\\s*\\}\\)/g,\n \".findInstance('$1')\",\n )\n // For TEXT type without __render__(): __findChildWithCriteria__({ type: 'TEXT', name: 'X' }) → findText('X')\n migrated = migrated.replace(\n /\\.__findChildWithCriteria__\\(\\{\\s*name:\\s*'([^']+)',\\s*type:\\s*['\"]TEXT['\"]\\s*\\}\\)/g,\n \".findText('$1')\",\n )\n migrated = migrated.replace(\n /\\.__findChildWithCriteria__\\(\\{\\s*type:\\s*['\"]TEXT['\"],\\s*name:\\s*'([^']+)'\\s*\\}\\)/g,\n \".findText('$1')\",\n )\n\n // 7. __find__() - migrate to findInstance()\n migrated = migrated.replace(\n /\\.__find__\\((\"([^\"]+)\"|'([^']+)')\\)/g,\n (match, quote, doubleQuoted, singleQuoted) => {\n const name = doubleQuoted || singleQuoted\n return `.findInstance(\"${name}\")`\n },\n )\n\n // 8. __render__() - migrate to executeTemplate().example (but not if part of __findChildWithCriteria__)\n migrated = migrated.replace(/\\.__render__\\(\\)/g, '.executeTemplate().example')\n\n // 9. __getProps__() - migrate to executeTemplate().metadata.props\n migrated = migrated.replace(/\\.__getProps__\\(\\)/g, '.executeTemplate().metadata.props')\n\n // 10. Export format - simple case\n // Match export default figma.code` (or tsx, html, etc) and wrap in { example: ... }\n migrated = migrated.replace(\n /export default figma\\.(code|tsx|html|swift|kotlin)`/g,\n 'export default { example: figma.$1`',\n )\n // Close the template literal for simple exports (look for backtick at end, handling multiline)\n // Use a more robust approach: find the last backtick that's not followed by more content\n migrated = migrated.replace(\n /(export default \\{ example: figma\\.\\w+`[\\s\\S]*?)`(?=\\s*$)/gm,\n '$1` }',\n )\n\n // 11. Export format - spread operator case\n // { ...figma.code`...`, metadata: ... } → { example: figma.code`...`, metadata: ... }\n migrated = migrated.replace(\n /\\{\\s*\\.\\.\\.figma\\.(code|tsx|html|swift|kotlin)`/g,\n '{ example: figma.$1`',\n )\n\n return migrated\n}\n\n/**\n * Removes the __props definition and props assignments. These are only used by icons\n * helpers and significantly bloat templates.\n */\nexport function removePropsDefinition(template: string): string {\n // Match from \"const __props = {\" through everything up until (but not including) \"export default {\"\n // Uses [\\s\\S] to match any character including newlines\n return template.replace(/const\\s+__props\\s*=\\s*\\{[\\s\\S]*?(?=export\\s+default\\s*\\{)/g, '\\n')\n}\n\n/**\n * Removes the __props definition/assignments and removes __props from the default export\n */\nexport function removePropsDefinitionAndMetadata(template: string): string {\n // First remove the __props definition and assignments\n let result = removePropsDefinition(template)\n const exportMatch = result.match(/(export\\s+default\\s+\\{[\\s\\S]*$)/)\n if (exportMatch) {\n const exportSection = exportMatch[1]\n const cleanedExport = exportSection\n .replace(/metadata:\\s*\\{\\s*__props\\s*\\}/g, 'metadata: {}') // metadata: { __props }\n .replace(/metadata:\\s*\\{\\s*__props\\s*,/g, 'metadata: {') // metadata: { __props, ...\n .replace(/,\\s*__props\\s*\\}/g, ' }') // metadata: { ..., __props }\n .replace(/,\\s*__props\\s*,/g, ',') // metadata: { ..., __props, ... }\n\n result = result.substring(0, result.indexOf(exportSection)) + cleanedExport\n }\n\n return result\n}\n\ntype CodeConnectObjectsForFigmaUrl = {\n main: CodeConnectJSON | null\n variants: CodeConnectJSON[]\n}\n\n/**\n * For each figmaUrl in the given codeConnectObjects, return the main (non-variant)\n * codeConnectObject plus a list of any variants\n */\nexport const groupCodeConnectObjectsByFigmaUrl = (codeConnectObjects: CodeConnectJSON[]) => {\n return codeConnectObjects.reduce(\n (acc, obj) => {\n const figmaUrl = obj.figmaNode\n if (!acc[figmaUrl]) {\n acc[figmaUrl] = { main: null, variants: [] }\n }\n\n if (obj.variant && Object.keys(obj.variant).length > 0) {\n acc[figmaUrl].variants.push(obj)\n } else {\n acc[figmaUrl].main = obj\n }\n\n return acc\n },\n {} as Record<string, CodeConnectObjectsForFigmaUrl>,\n )\n}\n\n/** One parserless file per component: branch per variant, each with its own props and template object; export default template. */\nexport function writeVariantTemplateFile(\n group: CodeConnectObjectsForFigmaUrl,\n figmaUrl: string,\n outputDir: string | undefined,\n baseDir: string,\n {\n localSourcePath,\n filePathsCreated,\n useTypeScript = true,\n includeProps = false,\n }: WriteTemplateFileOptions = {},\n): { outputPath: string; skipped: boolean } {\n const variantDocs = group.variants.map((v) => ({ doc: v, variant: v.variant }))\n const defaultDoc = group.main ? { doc: group.main, variant: null } : null\n const componentName = (group.main ?? group.variants[0])?.component || 'template'\n\n // Migrate templates and extract their full code (no deduplication)\n const allDocs = [...variantDocs, ...(defaultDoc ? [defaultDoc] : [])]\n const migratedTemplates = allDocs.map(({ doc }) =>\n prepareMigratedTemplate(doc, includeProps, useTypeScript),\n )\n const exportDefaultPrefix = 'export default '\n\n // For each template, replace 'export default' with 'template =' and remove figma require\n const branches = migratedTemplates.map((t) => {\n if (!t.includes(exportDefaultPrefix)) {\n throw new Error(`Variant merge: no \"export default\" in template for ${figmaUrl}`)\n }\n\n // Replace 'export default' with 'template ='\n let branchCode = t.replace(exportDefaultPrefix, 'template = ')\n\n // Remove only the top-level figma require/import, keep everything else\n const lines = branchCode.split('\\n')\n const filteredLines = lines.filter(\n (line) =>\n !line.trim().startsWith('const figma = require') &&\n !line.trim().startsWith('import figma from'),\n )\n\n return filteredLines.join('\\n').trim()\n })\n\n // Build the variant switch structure using conditions for all variant properties\n const ifParts: string[] = []\n for (let i = 0; i < variantDocs.length; i++) {\n const { variant } = variantDocs[i]\n const branchCode = branches[i]\n\n if (variant && Object.keys(variant).length > 0) {\n // Build condition from all properties in the variant\n const condition = Object.entries(variant)\n .map(\n ([key, val]) =>\n `figma.selectedInstance.getPropertyValue('${key}') === ${typeof val === 'string' ? `'${val}'` : val}`,\n )\n .join(' && ')\n\n ifParts.push(`${ifParts.length ? '} else ' : ''}if (${condition}) {\\n${branchCode}`)\n }\n }\n\n // Add default/fallback branch (use the last doc: main if present, otherwise first variant)\n const defaultBranchCode = branches[branches.length - 1]\n\n ifParts.push(`} else {\\n${defaultBranchCode}\\n}`)\n\n const variantComment =\n group.main != null\n ? `// Branch per variant combination.`\n : `// Branch per variant; no default, else first.`\n\n const templateBody = [\n useTypeScript ? `import figma from \"figma\"` : `const figma = require('figma')`,\n '',\n variantComment,\n '',\n 'let template',\n ifParts.join('\\n'),\n '',\n 'export default template',\n ].join('\\n')\n\n const formatted = formatTemplate(templateBody)\n\n // Build comment header with url, source, and component\n // Use the representative doc (main or first variant) for source/component values\n const representativeDoc = group.main ?? group.variants[0]\n const commentLines: string[] = [`// url=${figmaUrl}`]\n if (representativeDoc?.source) {\n commentLines.push(`// source=${representativeDoc.source}`)\n }\n if (representativeDoc?.component) {\n commentLines.push(`// component=${representativeDoc.component}`)\n }\n commentLines.push(``)\n\n const fileContent = commentLines.join('\\n') + '\\n' + formatted\n\n return writeTemplateFileCommon(\n componentName,\n fileContent,\n outputDir,\n baseDir,\n localSourcePath,\n filePathsCreated,\n useTypeScript,\n )\n}\n\nfunction convertSyntaxToTypeScript(template: string): string {\n return template\n .replace(/const figma = require\\(['\"]figma['\"]\\)/, `import figma from \"figma\"`)\n .replace(/const __props = {}/, 'const __props: Record<string, unknown> = {}')\n .replace(\n /if \\((\\w+) && \\1\\.type !== \"ERROR\"\\)/g,\n 'if ($1 && ($1 as { type?: string }).type !== \"ERROR\")',\n )\n}\n"]}
|
|
1
|
+
{"version":3,"file":"migration_helpers.js","sourceRoot":"","sources":["../../src/connect/migration_helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs'\nimport path from 'path'\nimport * as prettier from 'prettier'\nimport { CodeConnectJSON } from '../connect/figma_connect'\n\n/** Prettier configuration used for all generated template files */\nconst PRETTIER_OPTIONS = {\n parser: 'typescript' as const,\n semi: false,\n trailingComma: 'all' as const,\n pluginSearchDirs: false as const,\n}\n\n/** Formats template code with consistent prettier configuration */\nexport function formatTemplate(code: string): string {\n return prettier.format(code, PRETTIER_OPTIONS)\n}\n\n/**\n * Common wrapper that handles path determination and file writing for both\n * simple templates and variant templates.\n */\nfunction writeTemplateFileCommon(\n componentName: string,\n fileContent: string,\n outputDir: string | undefined,\n baseDir: string,\n localSourcePath: string | undefined,\n filePathsCreated: Set<string> | undefined,\n useTypeScript = true,\n): { outputPath: string; skipped: boolean } {\n const suffix = useTypeScript ? '.figma.ts' : '.figma.js'\n const baseOutputPath = determineOutputPath(\n componentName,\n suffix,\n outputDir,\n baseDir,\n localSourcePath,\n )\n return writeFileWithDuplicateHandling(baseOutputPath, fileContent, suffix, filePathsCreated)\n}\n\nexport function getFilenameFromComponentName(componentName: string): string {\n const allowlisted = /[a-zA-Z0-9\\-\\.]/\n return componentName\n .split('')\n .map((ch) => (allowlisted.test(ch) ? ch : '_'))\n .join('')\n .replace(/_+/g, '_')\n .replace(/^_|_$/g, '')\n}\n\n/**\n * Determines the base output path for a template file.\n * Shared logic between writeTemplateFile and writeVariantTemplateFile.\n */\nfunction determineOutputPath(\n rawComponentName: string,\n suffix: string,\n outputDir: string | undefined,\n baseDir: string,\n localSourcePath: string | undefined,\n): string {\n // Extract basename from localSourcePath when available, falling back to componentName\n const componentFilename = getFilenameFromComponentName(rawComponentName)\n let basename = componentFilename\n if (localSourcePath) {\n let sourceBasename = path.basename(localSourcePath)\n\n // If this is a Code Connect file, extract the base component name\n // Handles patterns like: Button.figma.tsx, Button.figmadoc.tsx, Button.figma.template.js\n // Should all become: Button.figma.js\n const codeConnectPattern = /\\.(figma|figmadoc)(\\.[^.]+)+$/\n if (codeConnectPattern.test(sourceBasename)) {\n // Extract everything before the .figma/.figmadoc pattern\n sourceBasename = sourceBasename.replace(codeConnectPattern, '')\n } else {\n // For regular component files, strip extension normally\n sourceBasename = path.basename(localSourcePath, path.extname(localSourcePath))\n }\n\n basename = sourceBasename\n }\n\n if (outputDir) {\n // Use specified output directory with basename derived from source path\n return path.join(outputDir, `${basename}${suffix}`)\n } else if (localSourcePath) {\n // Use same directory as local source file\n return path.join(path.dirname(localSourcePath), `${basename}${suffix}`)\n } else {\n // No source info, use current directory\n const filename = `${componentFilename}${suffix}`\n return path.join(baseDir, filename)\n }\n}\n\n/**\n * Handles file existence checking, duplicate name resolution, and writing.\n * Shared logic between writeTemplateFile and writeVariantTemplateFile.\n */\nfunction writeFileWithDuplicateHandling(\n baseOutputPath: string,\n fileContent: string,\n suffix: string,\n filePathsCreated: Set<string> | undefined,\n): { outputPath: string; skipped: boolean } {\n // Check if file already exists on disk (pre-existing file, not created in this run)\n const existsOnDisk = fs.existsSync(baseOutputPath)\n const createdInThisRun = filePathsCreated && filePathsCreated.has(baseOutputPath)\n\n if (existsOnDisk && !createdInThisRun) {\n // This file existed before the migration run, skip it\n return { outputPath: baseOutputPath, skipped: true }\n }\n\n // Handle duplicate names (either created in this run or would conflict with an existing file)\n let outputPath = baseOutputPath\n if (createdInThisRun || existsOnDisk) {\n // Find a unique name by appending _1, _2, etc. before the suffix\n const dir = path.dirname(baseOutputPath)\n const basename = path.basename(baseOutputPath)\n\n // Remove the suffix to get the base name (works for any suffix like .figma.js or .figma.ts)\n const baseNameWithoutSuffix = basename.endsWith(suffix)\n ? basename.slice(0, -suffix.length)\n : basename\n\n let counter = 1\n do {\n outputPath = path.join(dir, `${baseNameWithoutSuffix}_${counter}${suffix}`)\n counter++\n } while ((filePathsCreated && filePathsCreated.has(outputPath)) || fs.existsSync(outputPath))\n }\n\n // Ensure output directory exists\n const outputDirPath = path.dirname(outputPath)\n if (!fs.existsSync(outputDirPath)) {\n fs.mkdirSync(outputDirPath, { recursive: true })\n }\n\n // Write the file\n fs.writeFileSync(outputPath, fileContent, 'utf-8')\n\n // Track the created file path\n if (filePathsCreated) {\n filePathsCreated.add(outputPath)\n }\n\n return { outputPath, skipped: false }\n}\n\n/** Migrates a doc's template (Swift helpers, server helpers, V2, id, imports, nestable) without formatting. */\nexport function prepareMigratedTemplateBody(\n doc: CodeConnectJSON,\n includeProps = false,\n useTypeScript?: boolean,\n): string {\n let template = doc.template\n template = removeSwiftHelpers(template)\n template = migrateTemplateToUseServerSideHelpers(template)\n if (!includeProps) {\n template = removePropsDefinitionAndMetadata(template)\n }\n template = migrateV1TemplateToV2(template)\n template = addId(template, doc.component || 'TODO')\n template = addImports(template, doc.templateData?.imports)\n template = addNestableToMetadata(template, !!doc.templateData?.nestable)\n if (useTypeScript) {\n template = convertSyntaxToTypeScript(template)\n }\n return template\n}\n\n/** Migrates a doc's template (Swift helpers, server helpers, V2, id, imports, nestable) and returns the formatted string. */\nexport function prepareMigratedTemplate(\n doc: CodeConnectJSON,\n includeProps = false,\n useTypeScript?: boolean,\n): string {\n const template = prepareMigratedTemplateBody(doc, includeProps, useTypeScript)\n return formatTemplate(template)\n}\n\nfunction removeSwiftHelpers(template: string): string {\n return template.replace(\n `function __fcc_renderSwiftChildren(children, prefix) {\n if (children === undefined) {\n return children\n }\n return children.flatMap((child, index) => {\n if (child.type === 'CODE') {\n let code = child.code.split('\\\\n').map((line) => {\n return line.trim() !== '' ? \\`\\${prefix}\\${line}\\` : line;\n }).join('\\\\n')\n if (index !== children.length - 1) {\n code = code + '\\\\n'\n }\n return {\n ...child,\n code: code,\n }\n } else {\n let elements = []\n const shouldAddNewline = index > 0 && children[index - 1].type === 'CODE' && !children[index - 1].code.endsWith('\\\\n')\n elements.push({ type: 'CODE', code: \\`\\${shouldAddNewline ? '\\\\n' : ''}\\${prefix}\\` })\n elements.push(child)\n if (index !== children.length - 1) {\n elements.push({ type: 'CODE', code: '\\\\n' })\n }\n return elements\n }\n })\n}\n`,\n '',\n )\n}\n\nexport type WriteTemplateFileOptions = {\n localSourcePath?: string\n filePathsCreated?: Set<string>\n includeProps?: boolean\n useTypeScript?: boolean\n}\n\nexport function writeTemplateFile(\n doc: CodeConnectJSON,\n outputDir: string | undefined,\n baseDir: string,\n {\n localSourcePath,\n filePathsCreated,\n includeProps = false,\n useTypeScript = true,\n }: WriteTemplateFileOptions = {},\n): { outputPath: string; skipped: boolean } {\n const componentName = doc.component || 'template'\n const template = prepareMigratedTemplate(doc, includeProps, useTypeScript)\n\n // Build comment header lines\n const commentLines: string[] = [`// url=${doc.figmaNode}`]\n if (doc.source) {\n commentLines.push(`// source=${doc.source}`)\n }\n if (doc.component) {\n commentLines.push(`// component=${doc.component}`)\n }\n commentLines.push(``)\n\n const fileContent = commentLines.join('\\n') + '\\n' + template\n\n return writeTemplateFileCommon(\n componentName,\n fileContent,\n outputDir,\n baseDir,\n localSourcePath,\n filePathsCreated,\n useTypeScript,\n )\n}\n\n// Renames must match helpers in code_connect_js_api.raw_source.ts\nexport function migrateTemplateToUseServerSideHelpers(template: string) {\n return (\n template\n // React helpers\n .replace(/_fcc_renderReactProp/g, 'figma.helpers.react.renderProp')\n .replace(/_fcc_renderReactChildren/g, 'figma.helpers.react.renderChildren')\n .replace(/_fcc_jsxElement/g, 'figma.helpers.react.jsxElement')\n .replace(/_fcc_function/g, 'figma.helpers.react.function')\n .replace(/_fcc_identifier/g, 'figma.helpers.react.identifier')\n .replace(/_fcc_object/g, 'figma.helpers.react.object')\n .replace(/_fcc_templateString/g, 'figma.helpers.react.templateString')\n .replace(/_fcc_renderPropValue/g, 'figma.helpers.react.renderPropValue')\n .replace(/_fcc_stringifyObject/g, 'figma.helpers.react.stringifyObject')\n .replace(/_fcc_reactComponent/g, 'figma.helpers.react.reactComponent')\n .replace(/_fcc_array/g, 'figma.helpers.react.array')\n .replace(/isReactComponentArray/g, 'figma.helpers.react.isReactComponentArray')\n // Swift helpers\n .replace(/__fcc_renderSwiftChildren/g, 'figma.helpers.swift.renderChildren')\n // Kotlin/Compose helpers\n .replace(/__fcc_renderComposeChildren/g, 'figma.helpers.kotlin.renderChildren')\n )\n}\n\nexport function addId(template: string, id: string): string {\n // Don't add id if already present (e.g. when re-migrating a previously-migrated template)\n if (/export default\\s*\\{\\s*id:\\s*['\"]/.test(template)) {\n return template\n }\n return template.replace(/export default \\{/, `export default { id: '${id}',`)\n}\n\nexport function addImports(template: string, imports: string[] | undefined): string {\n if (!imports || imports.length === 0) {\n return template\n }\n\n // Escape imports for safe insertion into JS\n const importsJson = JSON.stringify(imports)\n\n // Add imports after the id field if it exists, otherwise at the start\n // Match: export default { id: '...', (with optional whitespace/newlines)\n const withId = template.replace(\n /(export default\\s*\\{\\s*id:\\s*'[^']*',)/,\n `$1 imports: ${importsJson},`,\n )\n\n // If id replacement worked, return\n if (withId !== template) {\n return withId\n }\n\n // Otherwise, add at the start (after opening brace)\n return template.replace(/export default\\s*\\{/, `export default { imports: ${importsJson},`)\n}\n\nexport function addNestableToMetadata(template: string, nestable: boolean): string {\n // Find \"metadata: {\" and replace with \"metadata: { nestable: <value>,\"\n return template.replace(/metadata:\\s*\\{/, `metadata: { nestable: ${nestable},`)\n}\n\n/**\n * Migrates V1 templates to V2 API.\n *\n * This performs safe, incremental transformations. The following patterns\n * are intentionally NOT migrated as they're still supported in V2:\n *\n * - __props metadata building pattern - still valid JavaScript\n * - __renderWithFn__() - complex transformation, still supported\n *\n * These may be addressed in future migrations.\n */\nexport const migrateV1TemplateToV2 = (template: string): string => {\n let migrated = template\n\n // 1. Core object rename\n migrated = migrated.replace(/figma\\.currentLayer/g, 'figma.selectedInstance')\n\n // 2. Normalize template types to figma.code\n migrated = migrated.replace(/figma\\.html/g, 'figma.code')\n migrated = migrated.replace(/figma\\.tsx/g, 'figma.code')\n migrated = migrated.replace(/figma\\.swift/g, 'figma.code')\n migrated = migrated.replace(/figma\\.kotlin/g, 'figma.code')\n\n // 3. Property accessor methods\n migrated = migrated.replace(/\\.__properties__\\.string\\(/g, '.getString(')\n migrated = migrated.replace(/\\.__properties__\\.boolean\\(/g, '.getBoolean(')\n migrated = migrated.replace(/\\.__properties__\\.enum\\(/g, '.getEnum(')\n migrated = migrated.replace(/\\.__properties__\\.__instance__\\(/g, '.getInstanceSwap(')\n // .__properties__.instance() auto-renders, so we need to add .executeTemplate().example\n migrated = migrated.replace(\n /\\.__properties__\\.instance\\(([^)]+)\\)/g,\n '.getInstanceSwap($1)?.executeTemplate().example',\n )\n\n // 4. Alias for __properties__ on selectedInstance\n migrated = migrated.replace(/figma\\.selectedInstance\\.__properties__\\./g, 'figma.properties.')\n\n // 5. Other method renames\n migrated = migrated.replace(/\\.__getPropertyValue__\\(/g, '.getPropertyValue(')\n\n // 6. __findChildWithCriteria__ - migrate based on type parameter\n // For TEXT type with __render__(): __findChildWithCriteria__({ name: 'X', type: \"TEXT\" }).__render__() → findText('X').__render__()\n //\n // We intentionally keep `.__render__()` here rather than the friendlier\n // `.textContent`. `findText` returns `TextHandle | ErrorHandle`, and\n // `textContent` only exists on `TextHandle` - so `.findText('X').textContent`\n // (a) fails to typecheck (`textContent` does not exist on `ErrorHandle`), and\n // (b) silently evaluates to `undefined` for a missing layer, swallowing the\n // error. `__render__()` exists on both handles (returning the text string on\n // success and an error section on failure), exactly matching the pre-migration\n // runtime behavior of the React parser's `figma.textContent('X')`.\n //\n // We emit a sentinel so the blanket `__render__()` -> `executeTemplate().example`\n // rewrite below (step 8) doesn't clobber it - `TextHandle` has no\n // `executeTemplate`, so that rewrite would re-break the text case. The sentinel\n // is converted back to `__render__()` at the end of this function.\n migrated = migrated.replace(\n /\\.__findChildWithCriteria__\\(\\{\\s*name:\\s*'([^']+)',\\s*type:\\s*\"TEXT\"\\s*\\}\\)\\.__render__\\(\\)/g,\n \".findText('$1').__FCC_TEXT_RENDER__()\",\n )\n migrated = migrated.replace(\n /\\.__findChildWithCriteria__\\(\\{\\s*type:\\s*\"TEXT\",\\s*name:\\s*'([^']+)'\\s*\\}\\)\\.__render__\\(\\)/g,\n \".findText('$1').__FCC_TEXT_RENDER__()\",\n )\n // For INSTANCE type: __findChildWithCriteria__({ type: 'INSTANCE', name: 'X' }) → findInstance('X')\n migrated = migrated.replace(\n /\\.__findChildWithCriteria__\\(\\{\\s*name:\\s*'([^']+)',\\s*type:\\s*['\"]INSTANCE['\"]\\s*\\}\\)/g,\n \".findInstance('$1')\",\n )\n migrated = migrated.replace(\n /\\.__findChildWithCriteria__\\(\\{\\s*type:\\s*['\"]INSTANCE['\"],\\s*name:\\s*'([^']+)'\\s*\\}\\)/g,\n \".findInstance('$1')\",\n )\n // For TEXT type without __render__(): __findChildWithCriteria__({ type: 'TEXT', name: 'X' }) → findText('X')\n migrated = migrated.replace(\n /\\.__findChildWithCriteria__\\(\\{\\s*name:\\s*'([^']+)',\\s*type:\\s*['\"]TEXT['\"]\\s*\\}\\)/g,\n \".findText('$1')\",\n )\n migrated = migrated.replace(\n /\\.__findChildWithCriteria__\\(\\{\\s*type:\\s*['\"]TEXT['\"],\\s*name:\\s*'([^']+)'\\s*\\}\\)/g,\n \".findText('$1')\",\n )\n\n // 7. __find__() - migrate to findInstance()\n migrated = migrated.replace(\n /\\.__find__\\((\"([^\"]+)\"|'([^']+)')\\)/g,\n (match, quote, doubleQuoted, singleQuoted) => {\n const name = doubleQuoted || singleQuoted\n return `.findInstance(\"${name}\")`\n },\n )\n\n // 8. __render__() - migrate to executeTemplate().example (but not if part of __findChildWithCriteria__)\n migrated = migrated.replace(/\\.__render__\\(\\)/g, '.executeTemplate().example')\n\n // 9. __getProps__() - migrate to executeTemplate().metadata.props\n migrated = migrated.replace(/\\.__getProps__\\(\\)/g, '.executeTemplate().metadata.props')\n\n // 10. Export format - simple case\n // Match export default figma.code` (or tsx, html, etc) and wrap in { example: ... }\n migrated = migrated.replace(\n /export default figma\\.(code|tsx|html|swift|kotlin)`/g,\n 'export default { example: figma.$1`',\n )\n // Close the template literal for simple exports (look for backtick at end, handling multiline)\n // Use a more robust approach: find the last backtick that's not followed by more content\n migrated = migrated.replace(\n /(export default \\{ example: figma\\.\\w+`[\\s\\S]*?)`(?=\\s*$)/gm,\n '$1` }',\n )\n\n // 11. Export format - spread operator case\n // { ...figma.code`...`, metadata: ... } → { example: figma.code`...`, metadata: ... }\n migrated = migrated.replace(\n /\\{\\s*\\.\\.\\.figma\\.(code|tsx|html|swift|kotlin)`/g,\n '{ example: figma.$1`',\n )\n\n // 12. Restore the TEXT __render__ sentinel emitted in step 6 (kept out of the\n // way of step 8's __render__ -> executeTemplate().example rewrite).\n migrated = migrated.replace(/\\.__FCC_TEXT_RENDER__\\(\\)/g, '.__render__()')\n\n return migrated\n}\n\n/**\n * Removes the __props definition and props assignments. These are only used by icons\n * helpers and significantly bloat templates.\n */\nexport function removePropsDefinition(template: string): string {\n // Match from \"const __props = {\" through everything up until (but not including) \"export default {\"\n // Uses [\\s\\S] to match any character including newlines\n return template.replace(/const\\s+__props\\s*=\\s*\\{[\\s\\S]*?(?=export\\s+default\\s*\\{)/g, '\\n')\n}\n\n/**\n * Removes the __props definition/assignments and removes __props from the default export\n */\nexport function removePropsDefinitionAndMetadata(template: string): string {\n // First remove the __props definition and assignments\n let result = removePropsDefinition(template)\n const exportMatch = result.match(/(export\\s+default\\s+\\{[\\s\\S]*$)/)\n if (exportMatch) {\n const exportSection = exportMatch[1]\n const cleanedExport = exportSection\n .replace(/metadata:\\s*\\{\\s*__props\\s*\\}/g, 'metadata: {}') // metadata: { __props }\n .replace(/metadata:\\s*\\{\\s*__props\\s*,/g, 'metadata: {') // metadata: { __props, ...\n .replace(/,\\s*__props\\s*\\}/g, ' }') // metadata: { ..., __props }\n .replace(/,\\s*__props\\s*,/g, ',') // metadata: { ..., __props, ... }\n\n result = result.substring(0, result.indexOf(exportSection)) + cleanedExport\n }\n\n return result\n}\n\ntype CodeConnectObjectsForFigmaUrl = {\n main: CodeConnectJSON | null\n variants: CodeConnectJSON[]\n}\n\n/**\n * For each figmaUrl in the given codeConnectObjects, return the main (non-variant)\n * codeConnectObject plus a list of any variants\n */\nexport const groupCodeConnectObjectsByFigmaUrl = (codeConnectObjects: CodeConnectJSON[]) => {\n return codeConnectObjects.reduce(\n (acc, obj) => {\n const figmaUrl = obj.figmaNode\n if (!acc[figmaUrl]) {\n acc[figmaUrl] = { main: null, variants: [] }\n }\n\n if (obj.variant && Object.keys(obj.variant).length > 0) {\n acc[figmaUrl].variants.push(obj)\n } else {\n acc[figmaUrl].main = obj\n }\n\n return acc\n },\n {} as Record<string, CodeConnectObjectsForFigmaUrl>,\n )\n}\n\n/** One parserless file per component: branch per variant, each with its own props and template object; export default template. */\nexport function writeVariantTemplateFile(\n group: CodeConnectObjectsForFigmaUrl,\n figmaUrl: string,\n outputDir: string | undefined,\n baseDir: string,\n {\n localSourcePath,\n filePathsCreated,\n useTypeScript = true,\n includeProps = false,\n }: WriteTemplateFileOptions = {},\n): { outputPath: string; skipped: boolean } {\n const variantDocs = group.variants.map((v) => ({ doc: v, variant: v.variant }))\n const defaultDoc = group.main ? { doc: group.main, variant: null } : null\n const componentName = (group.main ?? group.variants[0])?.component || 'template'\n\n // Migrate templates and extract their full code (no deduplication)\n const allDocs = [...variantDocs, ...(defaultDoc ? [defaultDoc] : [])]\n const migratedTemplates = allDocs.map(({ doc }) =>\n prepareMigratedTemplate(doc, includeProps, useTypeScript),\n )\n const exportDefaultPrefix = 'export default '\n\n // For each template, replace 'export default' with 'template =' and remove figma require\n const branches = migratedTemplates.map((t) => {\n if (!t.includes(exportDefaultPrefix)) {\n throw new Error(`Variant merge: no \"export default\" in template for ${figmaUrl}`)\n }\n\n // Replace 'export default' with 'template ='\n let branchCode = t.replace(exportDefaultPrefix, 'template = ')\n\n // Remove only the top-level figma require/import, keep everything else\n const lines = branchCode.split('\\n')\n const filteredLines = lines.filter(\n (line) =>\n !line.trim().startsWith('const figma = require') &&\n !line.trim().startsWith('import figma from'),\n )\n\n return filteredLines.join('\\n').trim()\n })\n\n // Build the variant switch structure using conditions for all variant properties\n const ifParts: string[] = []\n for (let i = 0; i < variantDocs.length; i++) {\n const { variant } = variantDocs[i]\n const branchCode = branches[i]\n\n if (variant && Object.keys(variant).length > 0) {\n // Build condition from all properties in the variant\n const condition = Object.entries(variant)\n .map(\n ([key, val]) =>\n `figma.selectedInstance.getPropertyValue('${key}') === ${typeof val === 'string' ? `'${val}'` : val}`,\n )\n .join(' && ')\n\n ifParts.push(`${ifParts.length ? '} else ' : ''}if (${condition}) {\\n${branchCode}`)\n }\n }\n\n // Add default/fallback branch (use the last doc: main if present, otherwise first variant)\n const defaultBranchCode = branches[branches.length - 1]\n\n ifParts.push(`} else {\\n${defaultBranchCode}\\n}`)\n\n const variantComment =\n group.main != null\n ? `// Branch per variant combination.`\n : `// Branch per variant; no default, else first.`\n\n const templateBody = [\n useTypeScript ? `import figma from \"figma\"` : `const figma = require('figma')`,\n '',\n variantComment,\n '',\n 'let template',\n ifParts.join('\\n'),\n '',\n 'export default template',\n ].join('\\n')\n\n const formatted = formatTemplate(templateBody)\n\n // Build comment header with url, source, and component\n // Use the representative doc (main or first variant) for source/component values\n const representativeDoc = group.main ?? group.variants[0]\n const commentLines: string[] = [`// url=${figmaUrl}`]\n if (representativeDoc?.source) {\n commentLines.push(`// source=${representativeDoc.source}`)\n }\n if (representativeDoc?.component) {\n commentLines.push(`// component=${representativeDoc.component}`)\n }\n commentLines.push(``)\n\n const fileContent = commentLines.join('\\n') + '\\n' + formatted\n\n return writeTemplateFileCommon(\n componentName,\n fileContent,\n outputDir,\n baseDir,\n localSourcePath,\n filePathsCreated,\n useTypeScript,\n )\n}\n\nfunction convertSyntaxToTypeScript(template: string): string {\n return template\n .replace(/const figma = require\\(['\"]figma['\"]\\)/, `import figma from \"figma\"`)\n .replace(/const __props = {}/, 'const __props: Record<string, unknown> = {}')\n .replace(\n /if \\((\\w+) && \\1\\.type !== \"ERROR\"\\)/g,\n 'if ($1 && ($1 as { type?: string }).type !== \"ERROR\")',\n )\n}\n"]}
|
|
@@ -23,17 +23,17 @@ export declare const ParserExecutableMessages: z.ZodArray<z.ZodObject<{
|
|
|
23
23
|
line?: number | undefined;
|
|
24
24
|
}>>;
|
|
25
25
|
}, "strip", z.ZodTypeAny, {
|
|
26
|
-
|
|
27
|
-
level: "DEBUG" | "INFO" | "WARN" | "ERROR";
|
|
26
|
+
level: "DEBUG" | "ERROR" | "INFO" | "WARN";
|
|
28
27
|
type?: string | undefined;
|
|
28
|
+
message: string;
|
|
29
29
|
sourceLocation?: {
|
|
30
30
|
file: string;
|
|
31
31
|
line?: number | undefined;
|
|
32
32
|
} | undefined;
|
|
33
33
|
}, {
|
|
34
|
-
|
|
35
|
-
level: "DEBUG" | "INFO" | "WARN" | "ERROR";
|
|
34
|
+
level: "DEBUG" | "ERROR" | "INFO" | "WARN";
|
|
36
35
|
type?: string | undefined;
|
|
36
|
+
message: string;
|
|
37
37
|
sourceLocation?: {
|
|
38
38
|
file: string;
|
|
39
39
|
line?: number | undefined;
|
|
@@ -80,43 +80,43 @@ export declare const ParseResponsePayload: z.ZodObject<{
|
|
|
80
80
|
url: string;
|
|
81
81
|
}>, "many">>;
|
|
82
82
|
}, "strip", z.ZodTypeAny, {
|
|
83
|
-
label: string;
|
|
84
|
-
template: string;
|
|
85
83
|
figmaNode: string;
|
|
84
|
+
component?: string | undefined;
|
|
85
|
+
variant?: Record<string, any> | undefined;
|
|
86
|
+
source?: string | undefined;
|
|
87
|
+
sourceLocation?: {
|
|
88
|
+
line: number;
|
|
89
|
+
} | undefined;
|
|
90
|
+
_codeConnectFilePath?: string | undefined;
|
|
91
|
+
template: string;
|
|
86
92
|
templateData: {
|
|
87
93
|
props: Record<string, any>;
|
|
88
94
|
imports?: string[] | undefined;
|
|
89
95
|
nestable?: boolean | undefined;
|
|
90
96
|
};
|
|
91
97
|
language: SyntaxHighlightLanguage;
|
|
92
|
-
|
|
93
|
-
sourceLocation?: {
|
|
94
|
-
line: number;
|
|
95
|
-
} | undefined;
|
|
96
|
-
component?: string | undefined;
|
|
97
|
-
variant?: Record<string, any> | undefined;
|
|
98
|
-
_codeConnectFilePath?: string | undefined;
|
|
98
|
+
label: string;
|
|
99
99
|
links?: {
|
|
100
100
|
name: string;
|
|
101
101
|
url: string;
|
|
102
102
|
}[] | undefined;
|
|
103
103
|
}, {
|
|
104
|
-
label: string;
|
|
105
|
-
template: string;
|
|
106
104
|
figmaNode: string;
|
|
105
|
+
component?: string | undefined;
|
|
106
|
+
variant?: Record<string, any> | undefined;
|
|
107
|
+
source?: string | undefined;
|
|
108
|
+
sourceLocation?: {
|
|
109
|
+
line: number;
|
|
110
|
+
} | undefined;
|
|
111
|
+
_codeConnectFilePath?: string | undefined;
|
|
112
|
+
template: string;
|
|
107
113
|
templateData: {
|
|
108
114
|
props: Record<string, any>;
|
|
109
115
|
imports?: string[] | undefined;
|
|
110
116
|
nestable?: boolean | undefined;
|
|
111
117
|
};
|
|
112
118
|
language: SyntaxHighlightLanguage;
|
|
113
|
-
|
|
114
|
-
sourceLocation?: {
|
|
115
|
-
line: number;
|
|
116
|
-
} | undefined;
|
|
117
|
-
component?: string | undefined;
|
|
118
|
-
variant?: Record<string, any> | undefined;
|
|
119
|
-
_codeConnectFilePath?: string | undefined;
|
|
119
|
+
label: string;
|
|
120
120
|
links?: {
|
|
121
121
|
name: string;
|
|
122
122
|
url: string;
|
|
@@ -137,17 +137,17 @@ export declare const ParseResponsePayload: z.ZodObject<{
|
|
|
137
137
|
line?: number | undefined;
|
|
138
138
|
}>>;
|
|
139
139
|
}, "strip", z.ZodTypeAny, {
|
|
140
|
-
|
|
141
|
-
level: "DEBUG" | "INFO" | "WARN" | "ERROR";
|
|
140
|
+
level: "DEBUG" | "ERROR" | "INFO" | "WARN";
|
|
142
141
|
type?: string | undefined;
|
|
142
|
+
message: string;
|
|
143
143
|
sourceLocation?: {
|
|
144
144
|
file: string;
|
|
145
145
|
line?: number | undefined;
|
|
146
146
|
} | undefined;
|
|
147
147
|
}, {
|
|
148
|
-
|
|
149
|
-
level: "DEBUG" | "INFO" | "WARN" | "ERROR";
|
|
148
|
+
level: "DEBUG" | "ERROR" | "INFO" | "WARN";
|
|
150
149
|
type?: string | undefined;
|
|
150
|
+
message: string;
|
|
151
151
|
sourceLocation?: {
|
|
152
152
|
file: string;
|
|
153
153
|
line?: number | undefined;
|
|
@@ -155,31 +155,31 @@ export declare const ParseResponsePayload: z.ZodObject<{
|
|
|
155
155
|
}>, "many">;
|
|
156
156
|
}, "strip", z.ZodTypeAny, {
|
|
157
157
|
docs: {
|
|
158
|
-
label: string;
|
|
159
|
-
template: string;
|
|
160
158
|
figmaNode: string;
|
|
159
|
+
component?: string | undefined;
|
|
160
|
+
variant?: Record<string, any> | undefined;
|
|
161
|
+
source?: string | undefined;
|
|
162
|
+
sourceLocation?: {
|
|
163
|
+
line: number;
|
|
164
|
+
} | undefined;
|
|
165
|
+
_codeConnectFilePath?: string | undefined;
|
|
166
|
+
template: string;
|
|
161
167
|
templateData: {
|
|
162
168
|
props: Record<string, any>;
|
|
163
169
|
imports?: string[] | undefined;
|
|
164
170
|
nestable?: boolean | undefined;
|
|
165
171
|
};
|
|
166
172
|
language: SyntaxHighlightLanguage;
|
|
167
|
-
|
|
168
|
-
sourceLocation?: {
|
|
169
|
-
line: number;
|
|
170
|
-
} | undefined;
|
|
171
|
-
component?: string | undefined;
|
|
172
|
-
variant?: Record<string, any> | undefined;
|
|
173
|
-
_codeConnectFilePath?: string | undefined;
|
|
173
|
+
label: string;
|
|
174
174
|
links?: {
|
|
175
175
|
name: string;
|
|
176
176
|
url: string;
|
|
177
177
|
}[] | undefined;
|
|
178
178
|
}[];
|
|
179
179
|
messages: {
|
|
180
|
-
|
|
181
|
-
level: "DEBUG" | "INFO" | "WARN" | "ERROR";
|
|
180
|
+
level: "DEBUG" | "ERROR" | "INFO" | "WARN";
|
|
182
181
|
type?: string | undefined;
|
|
182
|
+
message: string;
|
|
183
183
|
sourceLocation?: {
|
|
184
184
|
file: string;
|
|
185
185
|
line?: number | undefined;
|
|
@@ -187,31 +187,31 @@ export declare const ParseResponsePayload: z.ZodObject<{
|
|
|
187
187
|
}[];
|
|
188
188
|
}, {
|
|
189
189
|
docs: {
|
|
190
|
-
label: string;
|
|
191
|
-
template: string;
|
|
192
190
|
figmaNode: string;
|
|
191
|
+
component?: string | undefined;
|
|
192
|
+
variant?: Record<string, any> | undefined;
|
|
193
|
+
source?: string | undefined;
|
|
194
|
+
sourceLocation?: {
|
|
195
|
+
line: number;
|
|
196
|
+
} | undefined;
|
|
197
|
+
_codeConnectFilePath?: string | undefined;
|
|
198
|
+
template: string;
|
|
193
199
|
templateData: {
|
|
194
200
|
props: Record<string, any>;
|
|
195
201
|
imports?: string[] | undefined;
|
|
196
202
|
nestable?: boolean | undefined;
|
|
197
203
|
};
|
|
198
204
|
language: SyntaxHighlightLanguage;
|
|
199
|
-
|
|
200
|
-
sourceLocation?: {
|
|
201
|
-
line: number;
|
|
202
|
-
} | undefined;
|
|
203
|
-
component?: string | undefined;
|
|
204
|
-
variant?: Record<string, any> | undefined;
|
|
205
|
-
_codeConnectFilePath?: string | undefined;
|
|
205
|
+
label: string;
|
|
206
206
|
links?: {
|
|
207
207
|
name: string;
|
|
208
208
|
url: string;
|
|
209
209
|
}[] | undefined;
|
|
210
210
|
}[];
|
|
211
211
|
messages: {
|
|
212
|
-
|
|
213
|
-
level: "DEBUG" | "INFO" | "WARN" | "ERROR";
|
|
212
|
+
level: "DEBUG" | "ERROR" | "INFO" | "WARN";
|
|
214
213
|
type?: string | undefined;
|
|
214
|
+
message: string;
|
|
215
215
|
sourceLocation?: {
|
|
216
216
|
file: string;
|
|
217
217
|
line?: number | undefined;
|
|
@@ -288,48 +288,48 @@ export declare const CreateResponsePayload: z.ZodObject<{
|
|
|
288
288
|
line?: number | undefined;
|
|
289
289
|
}>>;
|
|
290
290
|
}, "strip", z.ZodTypeAny, {
|
|
291
|
-
|
|
292
|
-
level: "DEBUG" | "INFO" | "WARN" | "ERROR";
|
|
291
|
+
level: "DEBUG" | "ERROR" | "INFO" | "WARN";
|
|
293
292
|
type?: string | undefined;
|
|
293
|
+
message: string;
|
|
294
294
|
sourceLocation?: {
|
|
295
295
|
file: string;
|
|
296
296
|
line?: number | undefined;
|
|
297
297
|
} | undefined;
|
|
298
298
|
}, {
|
|
299
|
-
|
|
300
|
-
level: "DEBUG" | "INFO" | "WARN" | "ERROR";
|
|
299
|
+
level: "DEBUG" | "ERROR" | "INFO" | "WARN";
|
|
301
300
|
type?: string | undefined;
|
|
301
|
+
message: string;
|
|
302
302
|
sourceLocation?: {
|
|
303
303
|
file: string;
|
|
304
304
|
line?: number | undefined;
|
|
305
305
|
} | undefined;
|
|
306
306
|
}>, "many">;
|
|
307
307
|
}, "strip", z.ZodTypeAny, {
|
|
308
|
+
createdFiles: {
|
|
309
|
+
filePath: string;
|
|
310
|
+
}[];
|
|
308
311
|
messages: {
|
|
309
|
-
|
|
310
|
-
level: "DEBUG" | "INFO" | "WARN" | "ERROR";
|
|
312
|
+
level: "DEBUG" | "ERROR" | "INFO" | "WARN";
|
|
311
313
|
type?: string | undefined;
|
|
314
|
+
message: string;
|
|
312
315
|
sourceLocation?: {
|
|
313
316
|
file: string;
|
|
314
317
|
line?: number | undefined;
|
|
315
318
|
} | undefined;
|
|
316
319
|
}[];
|
|
320
|
+
}, {
|
|
317
321
|
createdFiles: {
|
|
318
322
|
filePath: string;
|
|
319
323
|
}[];
|
|
320
|
-
}, {
|
|
321
324
|
messages: {
|
|
322
|
-
|
|
323
|
-
level: "DEBUG" | "INFO" | "WARN" | "ERROR";
|
|
325
|
+
level: "DEBUG" | "ERROR" | "INFO" | "WARN";
|
|
324
326
|
type?: string | undefined;
|
|
327
|
+
message: string;
|
|
325
328
|
sourceLocation?: {
|
|
326
329
|
file: string;
|
|
327
330
|
line?: number | undefined;
|
|
328
331
|
} | undefined;
|
|
329
332
|
}[];
|
|
330
|
-
createdFiles: {
|
|
331
|
-
filePath: string;
|
|
332
|
-
}[];
|
|
333
333
|
}>;
|
|
334
334
|
export type ParserRequestPayload = ParseRequestPayload | CreateRequestPayload;
|
|
335
335
|
//# sourceMappingURL=parser_executable_types.d.ts.map
|
|
@@ -8,6 +8,7 @@ export declare const DEFAULT_INCLUDE_GLOBS_BY_PARSER: {
|
|
|
8
8
|
custom: undefined;
|
|
9
9
|
__unit_test__: string[];
|
|
10
10
|
};
|
|
11
|
+
export declare const DEFAULT_PARSERLESS_INCLUDE_GLOBS: string[];
|
|
11
12
|
export declare const DEFAULT_LABEL_PER_PARSER: Partial<Record<CodeConnectParser, string>>;
|
|
12
13
|
export type CodeConnectExecutableParser = 'swift' | 'compose' | 'custom' | '__unit_test__';
|
|
13
14
|
export type CodeConnectParser = 'react' | 'html' | CodeConnectExecutableParser;
|
|
@@ -105,7 +106,7 @@ export type CodeConnectConfig = CodeConnectReactConfig | CodeConnectExecutablePa
|
|
|
105
106
|
interface FigmaConfig {
|
|
106
107
|
codeConnect?: CodeConnectConfig;
|
|
107
108
|
}
|
|
108
|
-
export declare function determineConfigFromProject(dir: string,
|
|
109
|
+
export declare function determineConfigFromProject(dir: string, isTemplatesOnlyCLI?: boolean): FigmaConfig;
|
|
109
110
|
export declare function determineLabelFromProject(dir: string): string | undefined;
|
|
110
111
|
export declare function getGitRemoteURL(repoPath: string): string;
|
|
111
112
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/connect/project.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,YAAY,CAAA;AAO3B,OAAO,EAAoB,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAKpF,eAAO,MAAM,+BAA+B;;;;;;;CAQ3C,CAAA;AAED,eAAO,MAAM,wBAAwB,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAG/E,CAAA;AAGD,MAAM,MAAM,2BAA2B,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,eAAe,CAAA;AAK1F,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,GAAG,2BAA2B,CAAA;AAE9E,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjD;;OAEG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAE1B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;;OAGG;IACH,QAAQ,CAAC,EAAE,uBAAuB,CAAA;IAElC;;OAEG;IACH,4BAA4B,CAAC,EAAE,MAAM,CAAA;IAErC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,iCAAiC,GAAG,qBAAqB,GAAG;IACtE,MAAM,EAAE,2BAA2B,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,uCAAuC,GAAG,qBAAqB,GAAG;IAC5E,MAAM,EAAE,QAAQ,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,qBAAqB,GAAG;IAC3D,MAAM,EAAE,OAAO,CAAA;IACf;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAChC;;OAEG;IACH,SAAS,CAAC,EAAE;QACV;;WAEG;QACH,GAAG,EAAE,MAAM,CAAA;KACZ,CAAA;CACF,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,qBAAqB,GAAG,EAAE,CAAA;AAE9D,MAAM,MAAM,2BAA2B,GAAG,qBAAqB,GAAG;IAChE,MAAM,EAAE,SAAS,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,iBAAiB,GACzB,sBAAsB,GACtB,iCAAiC,GACjC,uCAAuC,GACvC,qBAAqB,GACrB,qBAAqB,GACrB,2BAA2B,CAAA;AAE/B,UAAU,WAAW;IACnB,WAAW,CAAC,EAAE,iBAAiB,CAAA;CAChC;AAED,wBAAgB,0BAA0B,
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/connect/project.ts"],"names":[],"mappings":"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"}
|
package/dist/connect/project.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.DEFAULT_LABEL_PER_PARSER = exports.DEFAULT_INCLUDE_GLOBS_BY_PARSER = void 0;
|
|
6
|
+
exports.DEFAULT_LABEL_PER_PARSER = exports.DEFAULT_PARSERLESS_INCLUDE_GLOBS = exports.DEFAULT_INCLUDE_GLOBS_BY_PARSER = void 0;
|
|
7
7
|
exports.determineConfigFromProject = determineConfigFromProject;
|
|
8
8
|
exports.determineLabelFromProject = determineLabelFromProject;
|
|
9
9
|
exports.getGitRemoteURL = getGitRemoteURL;
|
|
@@ -44,26 +44,33 @@ exports.DEFAULT_INCLUDE_GLOBS_BY_PARSER = {
|
|
|
44
44
|
custom: undefined,
|
|
45
45
|
__unit_test__: [''],
|
|
46
46
|
};
|
|
47
|
+
exports.DEFAULT_PARSERLESS_INCLUDE_GLOBS = [
|
|
48
|
+
'**/*.figma.ts',
|
|
49
|
+
'**/*.figma.js',
|
|
50
|
+
'**/*.figma.template.ts',
|
|
51
|
+
'**/*.figma.template.js',
|
|
52
|
+
'**/*.figma.batch.json',
|
|
53
|
+
];
|
|
54
|
+
const DEFAULT_PARSERLESS_EXCLUDE_GLOBS = ['node_modules/**'];
|
|
47
55
|
exports.DEFAULT_LABEL_PER_PARSER = {
|
|
48
56
|
react: label_language_mapping_1.CodeConnectLabel.React,
|
|
49
57
|
html: label_language_mapping_1.CodeConnectLabel.WebComponents,
|
|
50
58
|
};
|
|
51
|
-
function determineConfigFromProject(dir,
|
|
59
|
+
function determineConfigFromProject(dir, isTemplatesOnlyCLI = false) {
|
|
52
60
|
if (isTemplatesOnlyCLI) {
|
|
53
61
|
const label = determineLabelFromProject(dir);
|
|
54
62
|
return { codeConnect: label ? { label } : {} };
|
|
55
63
|
}
|
|
56
64
|
const parser = determineParserFromProject(dir);
|
|
65
|
+
const label = determineLabelFromProject(dir);
|
|
57
66
|
if (parser) {
|
|
58
|
-
const label = determineLabelFromProject(dir);
|
|
59
67
|
if (label) {
|
|
60
68
|
return { codeConnect: { parser, label } };
|
|
61
69
|
}
|
|
62
70
|
return { codeConnect: { parser } };
|
|
63
71
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
72
|
+
logging_1.logger.info(`Can't determine parser from project. Proceeding without a parser.`);
|
|
73
|
+
return { codeConnect: label ? { label } : {} };
|
|
67
74
|
}
|
|
68
75
|
function showParserMessage(message) {
|
|
69
76
|
logging_1.logger.info(message +
|
|
@@ -226,15 +233,16 @@ async function parseConfig(configFilePath, dir, isTemplatesOnlyCLI = false) {
|
|
|
226
233
|
const config = await checkForLegacyConfig(rawConfig, configFilePath);
|
|
227
234
|
if (!isTemplatesOnlyCLI && !config.codeConnect?.parser) {
|
|
228
235
|
const parser = determineParserFromProject(dir);
|
|
229
|
-
if (
|
|
230
|
-
|
|
231
|
-
|
|
236
|
+
if (parser) {
|
|
237
|
+
if (!config.codeConnect) {
|
|
238
|
+
config.codeConnect = { parser };
|
|
239
|
+
}
|
|
240
|
+
// TS errors if this is in an else
|
|
241
|
+
config.codeConnect.parser = parser;
|
|
232
242
|
}
|
|
233
|
-
|
|
234
|
-
|
|
243
|
+
else {
|
|
244
|
+
logging_1.logger.info(`Can't determine parser from project. Proceeding without a parser.`);
|
|
235
245
|
}
|
|
236
|
-
// TS errors if this is in an else
|
|
237
|
-
config.codeConnect.parser = parser;
|
|
238
246
|
}
|
|
239
247
|
if (!config.codeConnect?.label) {
|
|
240
248
|
const label = determineLabelFromProject(dir);
|
|
@@ -427,7 +435,7 @@ async function parseOrDetermineConfig(dir, configPath, isTemplatesOnlyCLI = fals
|
|
|
427
435
|
}
|
|
428
436
|
const globalConfig = hasConfigFile
|
|
429
437
|
? await parseConfig(configFilePath, dir, isTemplatesOnlyCLI)
|
|
430
|
-
: determineConfigFromProject(dir,
|
|
438
|
+
: determineConfigFromProject(dir, isTemplatesOnlyCLI);
|
|
431
439
|
if (!globalConfig) {
|
|
432
440
|
throw new Error(`Error parsing config file: ${configFilePath}`);
|
|
433
441
|
}
|
|
@@ -489,19 +497,13 @@ async function getProjectInfoFromConfig(dir, config, isTemplatesOnlyCLI = false)
|
|
|
489
497
|
const absPath = path_1.default.resolve(dir);
|
|
490
498
|
const remoteUrl = getGitRemoteURL(absPath);
|
|
491
499
|
const defaultIncludeGlobs = isTemplatesOnlyCLI
|
|
492
|
-
?
|
|
493
|
-
'**/*.figma.ts',
|
|
494
|
-
'**/*.figma.js',
|
|
495
|
-
'**/*.figma.template.ts',
|
|
496
|
-
'**/*.figma.template.js',
|
|
497
|
-
'**/*.figma.batch.json',
|
|
498
|
-
]
|
|
500
|
+
? exports.DEFAULT_PARSERLESS_INCLUDE_GLOBS
|
|
499
501
|
: config.parser
|
|
500
502
|
? exports.DEFAULT_INCLUDE_GLOBS_BY_PARSER[config.parser]
|
|
501
|
-
:
|
|
503
|
+
: exports.DEFAULT_PARSERLESS_INCLUDE_GLOBS;
|
|
502
504
|
// always ignore node_modules; for parsers, apply parser-specific exclusions
|
|
503
505
|
const defaultExcludeGlobs = isTemplatesOnlyCLI
|
|
504
|
-
?
|
|
506
|
+
? DEFAULT_PARSERLESS_EXCLUDE_GLOBS
|
|
505
507
|
: config.parser
|
|
506
508
|
? ({
|
|
507
509
|
react: ['node_modules/**'],
|
|
@@ -511,7 +513,7 @@ async function getProjectInfoFromConfig(dir, config, isTemplatesOnlyCLI = false)
|
|
|
511
513
|
custom: [],
|
|
512
514
|
__unit_test__: [],
|
|
513
515
|
}[config.parser] ?? [])
|
|
514
|
-
:
|
|
516
|
+
: DEFAULT_PARSERLESS_EXCLUDE_GLOBS;
|
|
515
517
|
const includeGlobs = config.include || defaultIncludeGlobs;
|
|
516
518
|
const excludeGlobs = config.exclude
|
|
517
519
|
? [...config.exclude, ...defaultExcludeGlobs]
|