makelabs
Version:
Component tagging toolkit for visual editing
1 lines • 21.3 kB
Source Map (JSON)
{"version":3,"sources":["../src/vite.ts","../src/vite/plugin.ts","../src/core/utils.ts"],"sourcesContent":["export * from './vite/index'; ","import { parse } from '@babel/parser';\nimport * as esbuild from 'esbuild';\nimport fs from 'fs/promises';\nimport MagicString from 'magic-string';\nimport path from 'path';\nimport resolveConfig from 'tailwindcss/resolveConfig.js';\nimport type { Plugin } from 'vite';\nimport type { MakeLabsConfig, ComponentStats } from '../core';\nimport { findProjectRoot, shouldTagElement } from '../core';\n\nconst validExtensions = new Set(['.jsx', '.tsx']);\n\nexport function visualEditorPlugin(userConfig: MakeLabsConfig = {}): Plugin {\n const config: Required<MakeLabsConfig> = {\n include: ['.jsx', '.tsx'],\n excludeElements: ['Fragment', 'React.Fragment'],\n excludeThreeFiber: true,\n excludeDrei: true,\n customExcludes: [],\n generateTailwindConfig: false,\n tailwindConfigPath: './tailwind.config.ts',\n tailwindOutputPath: './src/tailwind.config.ml.json',\n ...userConfig\n };\n\n const idPrefix = 'ml';\n\n const projectRoot = findProjectRoot();\n const cwd = process.cwd();\n \n const stats: ComponentStats = {\n totalFiles: 0,\n processedFiles: 0,\n totalElements: 0\n };\n\n const tailwindInputFile = path.resolve(projectRoot, config.tailwindConfigPath);\n const tailwindJsonOutfile = path.resolve(projectRoot, config.tailwindOutputPath);\n const tailwindIntermediateFile = path.resolve(projectRoot, './.ml.tailwind.config.js');\n\n return {\n name: 'makelabs-visual-editor-plugin',\n enforce: 'pre',\n\n async transform(code: string, id: string) {\n if (!validExtensions.has(path.extname(id)) || id.includes('node_modules')) {\n return null;\n }\n\n stats.totalFiles++;\n const relativePath = path.relative(cwd, id);\n\n try {\n const parserOptions: any = {\n sourceType: 'module' as const,\n plugins: ['jsx', 'typescript']\n };\n\n const ast = parse(code, parserOptions);\n const magicString = new MagicString(code);\n let changedElementsCount = 0;\n let currentElement: any = null;\n\n const { walk } = await import('estree-walker');\n\n walk(ast as any, {\n enter(node: any) {\n if (node.type === 'JSXElement') {\n currentElement = node;\n }\n\n if (node.type === 'JSXOpeningElement') {\n const jsxNode = node;\n let elementName: string;\n\n if (jsxNode.name.type === 'JSXIdentifier') {\n elementName = jsxNode.name.name;\n } else if (jsxNode.name.type === 'JSXMemberExpression') {\n const memberExpr = jsxNode.name;\n elementName = `${memberExpr.object.name}.${memberExpr.property.name}`;\n } else {\n return;\n }\n\n if (!shouldTagElement(elementName, config)) {\n return;\n }\n\n // Extract attributes\n const attributes = jsxNode.attributes.reduce((acc: any, attr: any) => {\n if (attr.type === 'JSXAttribute') {\n if (attr.value?.type === 'StringLiteral') {\n acc[attr.name.name] = attr.value.value;\n } else if (\n attr.value?.type === 'JSXExpressionContainer' &&\n attr.value.expression?.type === 'StringLiteral'\n ) {\n acc[attr.name.name] = attr.value.expression.value;\n }\n }\n return acc;\n }, {});\n\n // Extract text content\n let textContent = '';\n if (currentElement && currentElement.children) {\n textContent = currentElement.children\n .map((child: any) => {\n if (child.type === 'JSXText') {\n return child.value.trim();\n } else if (child.type === 'JSXExpressionContainer') {\n if (child.expression?.type === 'StringLiteral') {\n return child.expression.value;\n }\n }\n return '';\n })\n .filter(Boolean)\n .join(' ')\n .trim();\n }\n\n // Build content object\n const content: any = {};\n if (textContent) content.text = textContent;\n if (attributes.placeholder) content.placeholder = attributes.placeholder;\n if (attributes.className) content.className = attributes.className;\n\n // Generate IDs and attributes\n const line = jsxNode.loc?.start?.line ?? 0;\n const col = jsxNode.loc?.start?.column ?? 0;\n const dataComponentId = `${relativePath}:${line}:${col}`;\n const fileName = path.basename(id);\n\n // Create data attributes (compatible with Lovable format)\n const legacyIds = [\n `data-component-path=\"${relativePath}\"`,\n `data-component-line=\"${line}\"`,\n `data-component-file=\"${fileName}\"`,\n `data-component-name=\"${elementName}\"`,\n `data-component-content=\"${encodeURIComponent(JSON.stringify(content))}\"`\n ].join(' ');\n\n const dataAttributes = [\n `data-${idPrefix}-id=\"${dataComponentId}\"`,\n `data-${idPrefix}-name=\"${elementName}\"`,\n legacyIds\n ].join(' ');\n\n magicString.appendLeft(jsxNode.name.end ?? 0, ` ${dataAttributes}`);\n changedElementsCount++;\n }\n }\n });\n\n stats.processedFiles++;\n stats.totalElements += changedElementsCount;\n\n return {\n code: magicString.toString(),\n map: magicString.generateMap({ hires: true })\n };\n\n } catch (error) {\n console.error(`MakeLabs: Error processing file ${relativePath}:`, error);\n stats.processedFiles++;\n return null;\n }\n },\n\n async buildStart() {\n if (config.generateTailwindConfig) {\n try {\n await generateTailwindConfig();\n } catch (error) {\n console.error('MakeLabs: Error generating tailwind config:', error);\n }\n }\n },\n\n configureServer(server) {\n if (config.generateTailwindConfig) {\n try {\n server.watcher.add(tailwindInputFile);\n server.watcher.on('change', async (changedPath) => {\n if (path.normalize(changedPath) === path.normalize(tailwindInputFile)) {\n await generateTailwindConfig();\n }\n });\n } catch (error) {\n console.error('MakeLabs: Error adding watcher:', error);\n }\n }\n },\n\n buildEnd() {\n console.log(`✅ MakeLabs: Tagged ${stats.totalElements} elements in ${stats.processedFiles} files`);\n }\n };\n\n async function generateTailwindConfig(): Promise<void> {\n try {\n await esbuild.build({\n entryPoints: [tailwindInputFile],\n outfile: tailwindIntermediateFile,\n bundle: true,\n format: 'esm',\n banner: {\n js: 'import { createRequire } from \"module\"; const require = createRequire(import.meta.url);'\n }\n });\n\n const userConfig = await import(\n tailwindIntermediateFile + '?update=' + Date.now()\n );\n\n if (!userConfig || !userConfig.default) {\n throw new Error('Invalid Tailwind config structure');\n }\n\n const resolvedConfig = resolveConfig(userConfig.default);\n await fs.writeFile(tailwindJsonOutfile, JSON.stringify(resolvedConfig, null, 2));\n await fs.unlink(tailwindIntermediateFile).catch(() => {});\n\n } catch (error) {\n console.error('MakeLabs: Error in generateTailwindConfig:', error);\n throw error;\n }\n }\n} ","import path from 'path';\nimport { existsSync } from 'fs';\n\nexport function findProjectRoot(startPath = process.cwd()): string {\n try {\n let currentPath = startPath;\n let count = 0;\n \n while (currentPath !== path.parse(currentPath).root && count < 20) {\n if (existsSync(path.join(currentPath, 'package.json'))) {\n return currentPath;\n }\n currentPath = path.dirname(currentPath);\n count++;\n }\n \n return process.cwd();\n } catch (error) {\n console.error('Error finding project root:', error);\n return process.cwd();\n }\n}\n\n// Three.js Fiber elements\nconst threeFiberElems = [\n 'object3D', 'audioListener', 'positionalAudio', 'mesh', 'batchedMesh', 'instancedMesh',\n 'scene', 'sprite', 'lOD', 'skinnedMesh', 'skeleton', 'bone', 'lineSegments',\n 'lineLoop', 'points', 'group', 'camera', 'perspectiveCamera', 'orthographicCamera',\n 'cubeCamera', 'arrayCamera', 'instancedBufferGeometry', 'bufferGeometry',\n 'boxBufferGeometry', 'circleBufferGeometry', 'coneBufferGeometry', 'cylinderBufferGeometry',\n 'dodecahedronBufferGeometry', 'extrudeBufferGeometry', 'icosahedronBufferGeometry',\n 'latheBufferGeometry', 'octahedronBufferGeometry', 'planeBufferGeometry',\n 'polyhedronBufferGeometry', 'ringBufferGeometry', 'shapeBufferGeometry',\n 'sphereBufferGeometry', 'tetrahedronBufferGeometry', 'torusBufferGeometry',\n 'torusKnotBufferGeometry', 'tubeBufferGeometry', 'wireframeGeometry',\n 'tetrahedronGeometry', 'octahedronGeometry', 'icosahedronGeometry',\n 'dodecahedronGeometry', 'polyhedronGeometry', 'tubeGeometry', 'torusKnotGeometry',\n 'torusGeometry', 'sphereGeometry', 'ringGeometry', 'planeGeometry',\n 'latheGeometry', 'shapeGeometry', 'extrudeGeometry', 'edgesGeometry',\n 'coneGeometry', 'cylinderGeometry', 'circleGeometry', 'boxGeometry',\n 'capsuleGeometry', 'material', 'shadowMaterial', 'spriteMaterial',\n 'rawShaderMaterial', 'shaderMaterial', 'pointsMaterial', 'meshPhysicalMaterial',\n 'meshStandardMaterial', 'meshPhongMaterial', 'meshToonMaterial',\n 'meshNormalMaterial', 'meshLambertMaterial', 'meshDepthMaterial',\n 'meshDistanceMaterial', 'meshBasicMaterial', 'meshMatcapMaterial',\n 'lineDashedMaterial', 'lineBasicMaterial', 'primitive', 'light',\n 'spotLightShadow', 'spotLight', 'pointLight', 'rectAreaLight',\n 'hemisphereLight', 'directionalLightShadow', 'directionalLight',\n 'ambientLight', 'lightShadow', 'ambientLightProbe', 'hemisphereLightProbe',\n 'lightProbe', 'texture', 'videoTexture', 'dataTexture', 'dataTexture3D',\n 'compressedTexture', 'cubeTexture', 'canvasTexture', 'depthTexture',\n 'raycaster', 'vector2', 'vector3', 'vector4', 'euler', 'matrix3',\n 'matrix4', 'quaternion', 'bufferAttribute', 'color', 'fog', 'fogExp2', 'shape'\n];\n\n// Drei elements\nconst dreiElems = [\n 'AsciiRenderer', 'Billboard', 'Clone', 'ComputedAttribute', 'Decal', 'Edges',\n 'Effects', 'GradientTexture', 'Image', 'MarchingCubes', 'Outlines',\n 'PositionalAudio', 'Sampler', 'ScreenSizer', 'ScreenSpace', 'Splat',\n 'Svg', 'Text', 'Text3D', 'Trail', 'CubeCamera', 'OrthographicCamera',\n 'PerspectiveCamera', 'CameraControls', 'FaceControls', 'KeyboardControls',\n 'MotionPathControls', 'PresentationControls', 'ScrollControls',\n 'DragControls', 'GizmoHelper', 'Grid', 'Helper', 'PivotControls',\n 'TransformControls', 'CubeTexture', 'Fbx', 'Gltf', 'Ktx2', 'Loader',\n 'Progress', 'ScreenVideoTexture', 'Texture', 'TrailTexture', 'VideoTexture',\n 'WebcamVideoTexture', 'CycleRaycast', 'DetectGPU', 'Example', 'FaceLandmarker',\n 'Fbo', 'Html', 'Select', 'SpriteAnimator', 'StatsGl', 'Stats', 'Trail',\n 'Wireframe', 'CurveModifier', 'AdaptiveDpr', 'AdaptiveEvents', 'BakeShadows',\n 'Bvh', 'Detailed', 'Instances', 'Merged', 'meshBounds', 'PerformanceMonitor',\n 'Points', 'Preload', 'Segments', 'Fisheye', 'Hud', 'Mask', 'MeshPortalMaterial',\n 'RenderCubeTexture', 'RenderTexture', 'View', 'MeshDiscardMaterial',\n 'MeshDistortMaterial', 'MeshReflectorMaterial', 'MeshRefractionMaterial',\n 'MeshTransmissionMaterial', 'MeshWobbleMaterial', 'PointMaterial',\n 'shaderMaterial', 'SoftShadows', 'CatmullRomLine', 'CubicBezierLine',\n 'Facemesh', 'Line', 'Mesh', 'QuadraticBezierLine', 'RoundedBox',\n 'ScreenQuad', 'AccumulativeShadows', 'Backdrop', 'BBAnchor', 'Bounds',\n 'CameraShake', 'Caustics', 'Center', 'Cloud', 'ContactShadows',\n 'Environment', 'Float', 'Lightformer', 'MatcapTexture', 'NormalTexture',\n 'RandomizedLight', 'Resize', 'ShadowAlpha', 'Shadow', 'Sky', 'Sparkles',\n 'SpotLightShadow', 'SpotLight', 'Stage', 'Stars', 'OrbitControls'\n];\n\nexport function shouldTagElement(\n elementName: string,\n config: {\n excludeElements?: string[];\n excludeThreeFiber?: boolean;\n excludeDrei?: boolean;\n customExcludes?: string[];\n } = {}\n): boolean {\n const {\n excludeElements = ['Fragment', 'React.Fragment'],\n excludeThreeFiber = true,\n excludeDrei = true,\n customExcludes = []\n } = config;\n\n // Basic excludes\n if (excludeElements.includes(elementName)) {\n return false;\n }\n\n // Custom excludes\n if (customExcludes.includes(elementName)) {\n return false;\n }\n\n // Three.js Fiber elements\n if (excludeThreeFiber && threeFiberElems.includes(elementName)) {\n return false;\n }\n\n // Drei elements\n if (excludeDrei && dreiElems.includes(elementName)) {\n return false;\n }\n\n return true;\n} "],"mappings":"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","names":["import_path","path","path","MagicString","userConfig","resolveConfig","fs"]}