{"_id":"@arron314/figma-to-code-core","_rev":"11-3c3221a6fc3d2d07c1505e029ce9d33f","name":"@arron314/figma-to-code-core","dist-tags":{"latest":"1.3.0"},"versions":{"1.0.0":{"name":"@arron314/figma-to-code-core","version":"1.0.0","keywords":["figma","design-to-code","rules-engine","typescript","validation"],"author":{"name":"ACME Team"},"license":"MIT","_id":"@arron314/figma-to-code-core@1.0.0","maintainers":[{"name":"arron314","email":"xjtujihang@163.com"}],"dist":{"shasum":"38ebc921cd23324ab481fe7be2083ddf78bb3db3","tarball":"https://registry.npmjs.org/@arron314/figma-to-code-core/-/figma-to-code-core-1.0.0.tgz","fileCount":8,"integrity":"sha512-ENE+j3xVT8naPEQEY0mdq5irS7fzwe1gTmWpik0cA4e1ATVLU3JpaBjICSM3KrORyv405Q7++/AOS57+ebelpQ==","signatures":[{"sig":"MEYCIQDDW88R3G5STBoNm7YkSF5+reQzGfNGrhfUKVrPGWsHIAIhAO1wv2wttwlBX0kEz5Hi1W5lpG+k412zavSXUjy9S9O8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":755795},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.js"}},"gitHead":"f7b26b32b5e4b083c9b292b47924c92d012cf691","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsup","prepare":"npm run build","lint:fix":"eslint src --ext .ts,.tsx --fix","storybook":"storybook dev -p 6006","test:watch":"jest --watch","type-check":"tsc --noEmit","test:coverage":"jest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"arron314","email":"xjtujihang@163.com"},"_npmVersion":"10.8.2","description":"Figma 设计稿转代码规则引擎核心包","directories":{},"_nodeVersion":"20.18.2","dependencies":{"zod":"^3.22.0","pino":"^8.21.0","uuid":"^9.0.1","pino-pretty":"^13.1.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","tsup":"^8.0.0","react":"^18.2.0","eslint":"^8.50.0","ts-jest":"^29.1.0","react-dom":"^18.2.0","storybook":"^7.6.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/uuid":"^9.0.8","@storybook/react":"^7.6.0","@storybook/blocks":"^7.6.0","@storybook/react-vite":"^7.6.0","@storybook/addon-links":"^7.6.0","@typescript-eslint/parser":"^6.0.0","@storybook/testing-library":"^0.2.2","@storybook/addon-essentials":"^7.6.0","@storybook/addon-interactions":"^7.6.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/figma-to-code-core_1.0.0_1762246610922_0.48015267584212573","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@arron314/figma-to-code-core","version":"1.0.1","keywords":["figma","design-to-code","rules-engine","typescript","validation"],"author":{"name":"ACME Team"},"license":"MIT","_id":"@arron314/figma-to-code-core@1.0.1","maintainers":[{"name":"arron314","email":"xjtujihang@163.com"}],"dist":{"shasum":"56d62c988f7b159eee9c3f45382986e518585e4c","tarball":"https://registry.npmjs.org/@arron314/figma-to-code-core/-/figma-to-code-core-1.0.1.tgz","fileCount":8,"integrity":"sha512-aAlPpzKOvqfNk5Grl+Q9TMQmQQXH0wXiqae6lcVqWJBtN3QqFB+2mb49HRqw5wOopZ/egGqzjJh+pA2HID8jgg==","signatures":[{"sig":"MEYCIQDQvRx2EED2oKSG2uWmftJKm5UHXnlzhVvIpHkjTHxdqwIhAPQ0v8aQSfzWbNBZgyiBykLQdaZ4h+SPYTuhMCkQAgQR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":755833},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"f7b26b32b5e4b083c9b292b47924c92d012cf691","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsup","prepare":"npm run build","lint:fix":"eslint src --ext .ts,.tsx --fix","storybook":"storybook dev -p 6006","test:watch":"jest --watch","type-check":"tsc --noEmit","test:coverage":"jest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"arron314","email":"xjtujihang@163.com"},"_npmVersion":"10.8.2","description":"Figma 设计稿转代码规则引擎核心包","directories":{},"_nodeVersion":"20.18.2","dependencies":{"zod":"^3.22.0","pino":"^8.21.0","uuid":"^9.0.1","pino-pretty":"^13.1.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","tsup":"^8.0.0","react":"^18.2.0","eslint":"^8.50.0","ts-jest":"^29.1.0","react-dom":"^18.2.0","storybook":"^7.6.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/uuid":"^9.0.8","@storybook/react":"^7.6.0","@storybook/blocks":"^7.6.0","@storybook/react-vite":"^7.6.0","@storybook/addon-links":"^7.6.0","@typescript-eslint/parser":"^6.0.0","@storybook/testing-library":"^0.2.2","@storybook/addon-essentials":"^7.6.0","@storybook/addon-interactions":"^7.6.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/figma-to-code-core_1.0.1_1762266148886_0.5659002961624937","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@arron314/figma-to-code-core","version":"1.1.0","keywords":["figma","design-to-code","rules-engine","typescript","validation"],"author":{"name":"ACME Team"},"license":"MIT","_id":"@arron314/figma-to-code-core@1.1.0","maintainers":[{"name":"arron314","email":"xjtujihang@163.com"}],"dist":{"shasum":"5e8001284246213e63ef8ab54c3a6a4209bc6f7b","tarball":"https://registry.npmjs.org/@arron314/figma-to-code-core/-/figma-to-code-core-1.1.0.tgz","fileCount":8,"integrity":"sha512-bkDnN96r330TfsvmOOE1myVyNraIckWBz5h9SJdoX/JMBK22z6q3/i0skAoVQ/4pbt7ojDMRA5CYXM4cKc+wwg==","signatures":[{"sig":"MEUCIHAwG0er3DBc+KjiW7mhFQ/i4USZLHuvxnvI7vA0srRgAiEArXYN/kZteBGNtDZdjLcMjg7FsYTa40V/Y+9jtjD2dd4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":763179},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"f7b26b32b5e4b083c9b292b47924c92d012cf691","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsup","prepare":"npm run build","lint:fix":"eslint src --ext .ts,.tsx --fix","storybook":"storybook dev -p 6006","test:watch":"jest --watch","type-check":"tsc --noEmit","test:coverage":"jest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"arron314","email":"xjtujihang@163.com"},"_npmVersion":"10.8.2","description":"Figma 设计稿转代码规则引擎核心包","directories":{},"_nodeVersion":"20.18.2","dependencies":{"zod":"^3.22.0","pino":"^8.21.0","uuid":"^9.0.1","pino-pretty":"^13.1.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","tsup":"^8.0.0","react":"^18.2.0","eslint":"^8.50.0","ts-jest":"^29.1.0","react-dom":"^18.2.0","storybook":"^7.6.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/uuid":"^9.0.8","@storybook/react":"^7.6.0","@storybook/blocks":"^7.6.0","@storybook/react-vite":"^7.6.0","@storybook/addon-links":"^7.6.0","@typescript-eslint/parser":"^6.0.0","@storybook/testing-library":"^0.2.2","@storybook/addon-essentials":"^7.6.0","@storybook/addon-interactions":"^7.6.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/figma-to-code-core_1.1.0_1762326151384_0.34501717199682114","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@arron314/figma-to-code-core","version":"1.1.1","keywords":["figma","design-to-code","rules-engine","typescript","validation"],"author":{"name":"ACME Team"},"license":"MIT","_id":"@arron314/figma-to-code-core@1.1.1","maintainers":[{"name":"arron314","email":"xjtujihang@163.com"}],"dist":{"shasum":"f31f5f9151e916d4387f5d81c3f1c24f3d3c5ffb","tarball":"https://registry.npmjs.org/@arron314/figma-to-code-core/-/figma-to-code-core-1.1.1.tgz","fileCount":8,"integrity":"sha512-TdsjJLo0AqwftMvWhxz1ocI3raYMkcO2rg6wvMScB0SrBZuZuYmILX7wlY8BMc2NFZi0RYpCAEcraPTP9MgdNQ==","signatures":[{"sig":"MEUCIEyuNrpK8YmRQMMr3o8FGf1t8pBf2tapA+eppUieerLkAiEA8S2HEWQfw3ys4kVI1YbXbdZeF9vtF6eTR9A0DggDTkg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":758782},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"f7b26b32b5e4b083c9b292b47924c92d012cf691","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsup","prepare":"npm run build","lint:fix":"eslint src --ext .ts,.tsx --fix","storybook":"storybook dev -p 6006","test:watch":"jest --watch","type-check":"tsc --noEmit","test:coverage":"jest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"arron314","email":"xjtujihang@163.com"},"_npmVersion":"10.8.2","description":"Figma 设计稿转代码规则引擎核心包","directories":{},"_nodeVersion":"20.18.2","dependencies":{"zod":"^3.22.0","pino":"^8.21.0","uuid":"^9.0.1","pino-pretty":"^13.1.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","tsup":"^8.0.0","react":"^18.2.0","eslint":"^8.50.0","ts-jest":"^29.1.0","react-dom":"^18.2.0","storybook":"^7.6.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/uuid":"^9.0.8","@storybook/react":"^7.6.0","@storybook/blocks":"^7.6.0","@storybook/react-vite":"^7.6.0","@storybook/addon-links":"^7.6.0","@typescript-eslint/parser":"^6.0.0","@storybook/testing-library":"^0.2.2","@storybook/addon-essentials":"^7.6.0","@storybook/addon-interactions":"^7.6.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/figma-to-code-core_1.1.1_1762326907848_0.7776213755960064","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@arron314/figma-to-code-core","version":"1.1.2","keywords":["figma","design-to-code","rules-engine","typescript","validation"],"author":{"name":"ACME Team"},"license":"MIT","_id":"@arron314/figma-to-code-core@1.1.2","maintainers":[{"name":"arron314","email":"xjtujihang@163.com"}],"dist":{"shasum":"f3acf5a14b654db1abc64ac44d5622d8a2447c95","tarball":"https://registry.npmjs.org/@arron314/figma-to-code-core/-/figma-to-code-core-1.1.2.tgz","fileCount":8,"integrity":"sha512-zyQ4Jv3GMd701l07U3Q2Ks6K9LukVWsoXSTAYwMessdf7OmUM4Jpsfbl+QxYjbYf9kmjODeLHO29Uh35bHfBiA==","signatures":[{"sig":"MEYCIQDghRNwNU9bHJRRL4C1JmFxxthevClvAzYNLFQCSeltMwIhAMP93eJCRz/f/hd525pKyrcB+wagae1Pt6xYrNa2270b","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":757398},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"f7b26b32b5e4b083c9b292b47924c92d012cf691","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsup","prepare":"npm run build","lint:fix":"eslint src --ext .ts,.tsx --fix","storybook":"storybook dev -p 6006","test:watch":"jest --watch","type-check":"tsc --noEmit","test:coverage":"jest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"arron314","email":"xjtujihang@163.com"},"_npmVersion":"10.8.2","description":"Figma 设计稿转代码规则引擎核心包","directories":{},"_nodeVersion":"20.18.2","dependencies":{"zod":"^3.22.0","pino":"^8.21.0","uuid":"^9.0.1","pino-pretty":"^13.1.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","tsup":"^8.0.0","react":"^18.2.0","eslint":"^8.50.0","ts-jest":"^29.1.0","react-dom":"^18.2.0","storybook":"^7.6.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/uuid":"^9.0.8","@storybook/react":"^7.6.0","@storybook/blocks":"^7.6.0","@storybook/react-vite":"^7.6.0","@storybook/addon-links":"^7.6.0","@typescript-eslint/parser":"^6.0.0","@storybook/testing-library":"^0.2.2","@storybook/addon-essentials":"^7.6.0","@storybook/addon-interactions":"^7.6.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/figma-to-code-core_1.1.2_1762327902656_0.19072504781622257","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@arron314/figma-to-code-core","version":"1.1.3","keywords":["figma","design-to-code","rules-engine","typescript","validation"],"author":{"name":"ACME Team"},"license":"MIT","_id":"@arron314/figma-to-code-core@1.1.3","maintainers":[{"name":"arron314","email":"xjtujihang@163.com"}],"dist":{"shasum":"8fcc228ef47ac8d3a26c8bd06dc7723172e2959f","tarball":"https://registry.npmjs.org/@arron314/figma-to-code-core/-/figma-to-code-core-1.1.3.tgz","fileCount":8,"integrity":"sha512-Avt+C+Rtmphwt3KOLx2S63k6oPVe0ka5e0WbFmh9d0pG0XpiXyeqmhaptFhWEssoG/equ0fK/6oaxWK87P9NDQ==","signatures":[{"sig":"MEUCIFBfJ0G2xGr8NjVb6QBBxJ/vjrjq7j7NF8+qH8NcvCQCAiEAucsLBhrKimfAyyiLGIvBd2B4mp51NRXFXgQ3wmXINIo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":757398},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"f7b26b32b5e4b083c9b292b47924c92d012cf691","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsup","prepare":"npm run build","lint:fix":"eslint src --ext .ts,.tsx --fix","storybook":"storybook dev -p 6006","test:watch":"jest --watch","type-check":"tsc --noEmit","test:coverage":"jest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"arron314","email":"xjtujihang@163.com"},"_npmVersion":"10.8.2","description":"Figma 设计稿转代码规则引擎核心包","directories":{},"_nodeVersion":"20.18.2","dependencies":{"zod":"^3.22.0","pino":"^8.21.0","uuid":"^9.0.1","pino-pretty":"^13.1.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","tsup":"^8.0.0","react":"^18.2.0","eslint":"^8.50.0","ts-jest":"^29.1.0","react-dom":"^18.2.0","storybook":"^7.6.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/uuid":"^9.0.8","@storybook/react":"^7.6.0","@storybook/blocks":"^7.6.0","@storybook/react-vite":"^7.6.0","@storybook/addon-links":"^7.6.0","@typescript-eslint/parser":"^6.0.0","@storybook/testing-library":"^0.2.2","@storybook/addon-essentials":"^7.6.0","@storybook/addon-interactions":"^7.6.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/figma-to-code-core_1.1.3_1762327965036_0.4593103040414417","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@arron314/figma-to-code-core","version":"1.1.4","keywords":["figma","design-to-code","rules-engine","typescript","validation"],"author":{"name":"ACME Team"},"license":"MIT","_id":"@arron314/figma-to-code-core@1.1.4","maintainers":[{"name":"arron314","email":"xjtujihang@163.com"}],"dist":{"shasum":"ddd0ceda6d446200dafd00af8bdcf7f89083d853","tarball":"https://registry.npmjs.org/@arron314/figma-to-code-core/-/figma-to-code-core-1.1.4.tgz","fileCount":8,"integrity":"sha512-8+O14vetAFwMkbtQlhG6N0WfG9X+/ggdTIJFqhfhwvpHPUzmDDOTTwEM/b8HDMGg8SS+pxfsRVfzvqcAGksteA==","signatures":[{"sig":"MEYCIQD0N9i4IQ1VeFidVHOklVXyKP3jQbWjTNvBJhA8s8VUEAIhAJvCRqzz+0RqCfs53Q4wJv9/PYo4vFvT+eq9In5pqYHO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":756861},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"f7b26b32b5e4b083c9b292b47924c92d012cf691","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsup","prepare":"npm run build","lint:fix":"eslint src --ext .ts,.tsx --fix","storybook":"storybook dev -p 6006","test:watch":"jest --watch","type-check":"tsc --noEmit","test:coverage":"jest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"arron314","email":"xjtujihang@163.com"},"_npmVersion":"10.8.2","description":"Figma 设计稿转代码规则引擎核心包","directories":{},"_nodeVersion":"20.18.2","dependencies":{"zod":"^3.22.0","pino":"^8.21.0","uuid":"^9.0.1","pino-pretty":"^13.1.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","tsup":"^8.0.0","react":"^18.2.0","eslint":"^8.50.0","ts-jest":"^29.1.0","react-dom":"^18.2.0","storybook":"^7.6.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/uuid":"^9.0.8","@storybook/react":"^7.6.0","@storybook/blocks":"^7.6.0","@storybook/react-vite":"^7.6.0","@storybook/addon-links":"^7.6.0","@typescript-eslint/parser":"^6.0.0","@storybook/testing-library":"^0.2.2","@storybook/addon-essentials":"^7.6.0","@storybook/addon-interactions":"^7.6.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/figma-to-code-core_1.1.4_1762328858164_0.4276521939221465","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@arron314/figma-to-code-core","version":"1.1.5","keywords":["figma","design-to-code","rules-engine","typescript","validation"],"author":{"name":"ACME Team"},"license":"MIT","_id":"@arron314/figma-to-code-core@1.1.5","maintainers":[{"name":"arron314","email":"xjtujihang@163.com"}],"dist":{"shasum":"d00e6c94467164c128d6ae30f6b705fa488dd7f3","tarball":"https://registry.npmjs.org/@arron314/figma-to-code-core/-/figma-to-code-core-1.1.5.tgz","fileCount":8,"integrity":"sha512-SU4TeZRZ7zEQRJd2Jll3ighhfsAOmAUtcSBFsy+m0BRLpjof2mn+chVfe6lJ7bsKs+1OYwsFAtBTpgCeFBUJFQ==","signatures":[{"sig":"MEQCICtIIOFMVbluF+U3Qjxg1En8D1wdbsMfRQo1OlCzV/TcAiAkmHEase2glEuLB3YAdtziu45ZO5hWJytk/kzvDLs6IQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":754938},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"f7b26b32b5e4b083c9b292b47924c92d012cf691","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsup","prepare":"npm run build","lint:fix":"eslint src --ext .ts,.tsx --fix","storybook":"storybook dev -p 6006","test:watch":"jest --watch","type-check":"tsc --noEmit","test:coverage":"jest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"arron314","email":"xjtujihang@163.com"},"_npmVersion":"10.8.2","description":"Figma 设计稿转代码规则引擎核心包","directories":{},"_nodeVersion":"20.18.2","dependencies":{"zod":"^3.22.0","pino":"^8.21.0","uuid":"^9.0.1","pino-pretty":"^13.1.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","tsup":"^8.0.0","react":"^18.2.0","eslint":"^8.50.0","ts-jest":"^29.1.0","react-dom":"^18.2.0","storybook":"^7.6.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/uuid":"^9.0.8","@storybook/react":"^7.6.0","@storybook/blocks":"^7.6.0","@storybook/react-vite":"^7.6.0","@storybook/addon-links":"^7.6.0","@typescript-eslint/parser":"^6.0.0","@storybook/testing-library":"^0.2.2","@storybook/addon-essentials":"^7.6.0","@storybook/addon-interactions":"^7.6.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/figma-to-code-core_1.1.5_1762328987692_0.1168561444995877","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"@arron314/figma-to-code-core","version":"1.1.6","keywords":["figma","design-to-code","rules-engine","typescript","validation"],"author":{"name":"ACME Team"},"license":"MIT","_id":"@arron314/figma-to-code-core@1.1.6","maintainers":[{"name":"arron314","email":"xjtujihang@163.com"}],"dist":{"shasum":"cda589c3210e0c969c7d547abf8a11925eea292b","tarball":"https://registry.npmjs.org/@arron314/figma-to-code-core/-/figma-to-code-core-1.1.6.tgz","fileCount":8,"integrity":"sha512-x+SsGFYFw+NEUSxWzR0/Xk1gOuzCEVy3RFARpGXDNpWGM1he+kyNjRi4kS98NoDi2OX/H+QpUpibYBjVAYrgbw==","signatures":[{"sig":"MEUCIQD78nJojvTV1isF+pKQwKl/woU4IhvTSp76S9BDtOGePAIgWAWRA+d7rglMUsAn2penjZmZlbU5bNH0uG8b1v94OsI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":754938},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"f7b26b32b5e4b083c9b292b47924c92d012cf691","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsup","prepare":"npm run build","lint:fix":"eslint src --ext .ts,.tsx --fix","storybook":"storybook dev -p 6006","test:watch":"jest --watch","type-check":"tsc --noEmit","test:coverage":"jest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"arron314","email":"xjtujihang@163.com"},"_npmVersion":"10.8.2","description":"Figma 设计稿转代码规则引擎核心包","directories":{},"_nodeVersion":"20.18.2","dependencies":{"zod":"^3.22.0","pino":"^8.21.0","uuid":"^9.0.1","pino-pretty":"^13.1.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","tsup":"^8.0.0","react":"^18.2.0","eslint":"^8.50.0","ts-jest":"^29.1.0","react-dom":"^18.2.0","storybook":"^7.6.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/uuid":"^9.0.8","@storybook/react":"^7.6.0","@storybook/blocks":"^7.6.0","@storybook/react-vite":"^7.6.0","@storybook/addon-links":"^7.6.0","@typescript-eslint/parser":"^6.0.0","@storybook/testing-library":"^0.2.2","@storybook/addon-essentials":"^7.6.0","@storybook/addon-interactions":"^7.6.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/figma-to-code-core_1.1.6_1762329014931_0.3485334343387121","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@arron314/figma-to-code-core","version":"1.2.0","keywords":["figma","design-to-code","rules-engine","typescript","validation"],"author":{"name":"ACME Team"},"license":"MIT","_id":"@arron314/figma-to-code-core@1.2.0","maintainers":[{"name":"arron314","email":"xjtujihang@163.com"}],"dist":{"shasum":"8d61cac2a6ffaa39de7088866d6370fbe58332d5","tarball":"https://registry.npmjs.org/@arron314/figma-to-code-core/-/figma-to-code-core-1.2.0.tgz","fileCount":8,"integrity":"sha512-a+nvPRhSmI4t1mCNXzBCHsosFQnKVQUUCMMb7ofEoambMFiyJ4JQ2CJe7m9/SA+CFb4kHoVS1Bgm+P35b1+ysw==","signatures":[{"sig":"MEQCIBSaIsT9paCtFSGuf/C3Hqqdq8NoT13dyRbemcVgewnSAiA7fKnHMqpJWeiWrwPFh/NKd+ntZgBw3pIyza+6YcjlnA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":782244},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"f7b26b32b5e4b083c9b292b47924c92d012cf691","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsup","prepare":"npm run build","lint:fix":"eslint src --ext .ts,.tsx --fix","storybook":"storybook dev -p 6006","test:watch":"jest --watch","type-check":"tsc --noEmit","test:coverage":"jest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"arron314","email":"xjtujihang@163.com"},"_npmVersion":"10.8.2","description":"Figma 设计稿转代码规则引擎核心包","directories":{},"_nodeVersion":"20.18.2","dependencies":{"zod":"^3.22.0","pino":"^8.21.0","uuid":"^9.0.1","pino-pretty":"^13.1.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","tsup":"^8.0.0","react":"^18.2.0","eslint":"^8.50.0","ts-jest":"^29.1.0","react-dom":"^18.2.0","storybook":"^7.6.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/uuid":"^9.0.8","@storybook/react":"^7.6.0","@storybook/blocks":"^7.6.0","@storybook/react-vite":"^7.6.0","@storybook/addon-links":"^7.6.0","@typescript-eslint/parser":"^6.0.0","@storybook/testing-library":"^0.2.2","@storybook/addon-essentials":"^7.6.0","@storybook/addon-interactions":"^7.6.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/figma-to-code-core_1.2.0_1762756029055_0.34380978908695714","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@arron314/figma-to-code-core","version":"1.3.0","description":"Figma 设计稿转代码规则引擎核心包","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","dev":"tsup --watch","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","lint":"eslint src --ext .ts,.tsx","lint:fix":"eslint src --ext .ts,.tsx --fix","type-check":"tsc --noEmit","storybook":"storybook dev -p 6006","build-storybook":"storybook build","prepare":"npm run build"},"keywords":["figma","design-to-code","rules-engine","typescript","validation"],"author":{"name":"ACME Team"},"license":"MIT","devDependencies":{"@storybook/addon-essentials":"^7.6.0","@storybook/addon-interactions":"^7.6.0","@storybook/addon-links":"^7.6.0","@storybook/blocks":"^7.6.0","@storybook/react":"^7.6.0","@storybook/react-vite":"^7.6.0","@storybook/testing-library":"^0.2.2","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/uuid":"^9.0.8","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.50.0","jest":"^29.5.0","react":"^18.2.0","react-dom":"^18.2.0","storybook":"^7.6.0","ts-jest":"^29.1.0","tsup":"^8.0.0","typescript":"^5.0.0"},"dependencies":{"pino":"^8.21.0","pino-pretty":"^13.1.2","uuid":"^9.0.1","zod":"^3.22.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_id":"@arron314/figma-to-code-core@1.3.0","gitHead":"535118596f23865832db1e8d74a139bd78a53bff","_nodeVersion":"20.18.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-36XcUnCG0FYAl0ThLX06/JatV24r73MMMPXQduVriuvGtvjQuUyFfISfg6MO5X5l+dJDGV3ddUl8GzStO+Fclg==","shasum":"4799b195e8fb168bb3d76958b907766167bc03d0","tarball":"https://registry.npmjs.org/@arron314/figma-to-code-core/-/figma-to-code-core-1.3.0.tgz","fileCount":17,"unpackedSize":1015603,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICXkF56tc1ORWYiUdvbCJnfwgs5jNJ1fwn/9P01xB6EAAiEAjsyw5DoXPAKd3RMPt91gI3IUyBLcSC1+uS2rZwEEHc0="}]},"_npmUser":{"name":"arron314","email":"xjtujihang@163.com"},"directories":{},"maintainers":[{"name":"arron314","email":"xjtujihang@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/figma-to-code-core_1.3.0_1763359018591_0.6393523770323779"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-04T08:56:50.776Z","modified":"2025-11-17T05:56:59.057Z","1.0.0":"2025-11-04T08:56:51.294Z","1.0.1":"2025-11-04T14:22:29.132Z","1.1.0":"2025-11-05T07:02:31.636Z","1.1.1":"2025-11-05T07:15:08.106Z","1.1.2":"2025-11-05T07:31:42.910Z","1.1.3":"2025-11-05T07:32:45.243Z","1.1.4":"2025-11-05T07:47:38.502Z","1.1.5":"2025-11-05T07:49:47.925Z","1.1.6":"2025-11-05T07:50:15.159Z","1.2.0":"2025-11-10T06:27:09.245Z","1.3.0":"2025-11-17T05:56:58.851Z"},"author":{"name":"ACME Team"},"license":"MIT","keywords":["figma","design-to-code","rules-engine","typescript","validation"],"description":"Figma 设计稿转代码规则引擎核心包","maintainers":[{"name":"arron314","email":"xjtujihang@163.com"}],"readme":"# @arron314/figma-to-code-core\n\n[![npm version](https://badge.fury.io/js/@arron314%2Ffigma-to-code-core.svg)](https://badge.fury.io/js/@arron314%2Ffigma-to-code-core)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n🎯 **专业的 Figma 设计稿转代码规则引擎核心包**，提供设计稿验证、数据提取、规则管理和代码生成规范检查。\n\n## ✨ 核心特性\n\n- 🔍 **智能规则引擎**: 可扩展的验证规则系统，支持自定义规则\n- ⚡ **高性能处理**: 并行验证和批量处理，支持大型设计文件\n- 📊 **专业数据提取**: 智能提取布局、样式、组件信息\n- 🖼️ **QuickExtract 图片提取**: 一键提取 Figma 设计稿中的所有图片，智能链接管理\n- 🔧 **数据预处理**: 自动清理和优化 Figma 数据\n- 📐 **布局分析**: 智能识别布局模式和潜在问题\n- 📝 **详细日志**: 统一的 traceId 追踪系统\n- 🛠 **调试工具**: Storybook 集成的可视化调试界面\n- 📦 **双格式支持**: CommonJS 和 ESM 模块格式\n\n## 📦 安装\n\n```bash\nnpm install @arron314/figma-to-code-core\n# 或\nyarn add @arron314/figma-to-code-core\n# 或\npnpm add @arron314/figma-to-code-core\n```\n\n## 🚀 快速开始\n\n### 基础使用\n\n```typescript\nimport { quickExtract } from '@arron314/figma-to-code-core';\n\n// 最简单的使用方式\nconst figmaData = {\n  // 你的 Figma JSON 数据\n};\n\nconst result = quickExtract(figmaData);\nconsole.log(result.nodes);        // 提取的节点数据\nconsole.log(result.globalVars);   // 全局样式变量\n```\n\n### QuickExtract 图片提取\n\n```typescript\nimport { quickExtractImages } from '@arron314/figma-to-code-core';\n\n// 快速提取 Figma 设计稿中的所有图片\nasync function extractImages() {\n  const result = await quickExtractImages({\n    accessToken: 'your-figma-access-token',\n    fileKey: 'your-figma-file-key',\n    nodeId: 'optional-node-id'  // 可选，指定特定节点\n  });\n\n  // 使用 quickExtract 链接 - 智能选择本地路径或URL\n  result.images.forEach(image => {\n    console.log(`图片: ${image.nodeName}`);\n    console.log(`链接: ${image.quickExtract}`);  // 处理后的最佳链接\n  });\n\n  console.log(`✅ 提取完成！发现 ${result.stats.totalImages} 个图片`);\n}\n```\n\n### 完整工作流\n\n```typescript\nimport { \n  RuleEngine, \n  FigmaDataFetcher, \n  FigmaDataPreprocessor,\n  quickExtract,\n  builtInRules, \n  registerRule \n} from '@arron314/figma-to-code-core';\n\nasync function processDesignFile(fileKey: string, accessToken: string) {\n  // 1. 获取 Figma 数据\n  const fetcher = new FigmaDataFetcher({ accessToken });\n  const figmaFile = await fetcher.fetchFile(fileKey);\n  \n  // 2. 数据预处理\n  const preprocessor = new FigmaDataPreprocessor();\n  const cleaned = preprocessor.preprocessNodes(figmaFile.document.children);\n  \n  // 3. 数据提取\n  const extracted = quickExtract({\n    ...figmaFile,\n    document: { ...figmaFile.document, children: cleaned.validNodes }\n  });\n  \n  // 4. 质量验证\n  const engine = new RuleEngine({ globalOptions: { parallel: true } });\n  builtInRules.forEach(rule => registerRule(rule));\n  const validationResults = await engine.validateFile(figmaFile);\n  \n  return {\n    extractedData: extracted,\n    validationResults,\n    processingStats: cleaned.stats\n  };\n}\n```\n\n## 🎯 核心 API\n\n### 1. 数据提取器\n\n#### quickExtract() - 推荐\n适用于大部分场景，使用所有内置提取器进行全面数据提取。\n\n```typescript\nimport { quickExtract } from '@arron314/figma-to-code-core';\n\nconst result = quickExtract(figmaData);\n// 返回: { nodes: ExtractedNode[], globalVars: GlobalVariables }\n```\n\n#### quickExtractImages() - 图片提取器 🆕\n专门用于从 Figma 设计稿中提取所有图片，提供智能链接管理。\n\n```typescript\nimport {\n  quickExtractImages,\n  QuickExtractImageProcessor,\n  type QuickExtractConfig,\n  type QuickExtractResult\n} from '@arron314/figma-to-code-core';\n\n// 便捷函数使用\nconst result = await quickExtractImages({\n  accessToken: 'your-figma-token',\n  fileKey: 'your-file-key',\n  outputDir: 'images',          // 可选，默认 'quick-extract-images'\n  format: 'png',               // 可选，支持 'png' | 'jpg' | 'svg'\n  scale: 2,                    // 可选，图片缩放倍数\n  downloadImages: true,        // 可选，是否下载到本地\n  generateReport: true,        // 可选，是否生成详细报告\n  nodeId: '920:20868'         // 可选，指定节点ID\n});\n\n// 处理器类使用\nconst processor = new QuickExtractImageProcessor({\n  accessToken: 'your-token',\n  fileKey: 'your-file-key'\n});\nconst result = await processor.quickExtract();\n\n// 结果包含：\nconsole.log(result.images);        // 图片列表，每个包含 quickExtract 链接\nconsole.log(result.enhancedData);  // 增强的 Figma 数据（原始数据 + images 属性）\nconsole.log(result.stats);         // 提取统计信息\nconsole.log(result.outputPaths);   // 输出文件路径\n```\n\n**quickExtract 字段说明**：\n- **智能链接管理**: 本地路径优先，URL 备用\n- **统一访问**: 无论图片是否下载，都提供统一的访问方式\n- **即用性**: 可直接用于前端显示或文件操作\n\n#### 专项提取器\n针对特定需求的专用提取器：\n\n```typescript\nimport { \n  contentExtract,    // 仅提取文本和布局\n  styleExtract,      // 仅提取视觉样式\n  componentExtract,  // 仅提取组件信息\n  advancedExtract    // 包含投影分析的高级提取\n} from '@arron314/figma-to-code-core';\n\nconst textResult = contentExtract(figmaData);\nconst styleResult = styleExtract(figmaData);\nconst componentResult = componentExtract(figmaData);\nconst advancedResult = advancedExtract(figmaData);\n```\n\n### 2. 专业处理器\n\n#### 数据预处理器\n清理和优化 Figma 数据，过滤无效节点：\n\n```typescript\nimport { FigmaDataPreprocessor } from '@arron314/figma-to-code-core';\n\nconst preprocessor = new FigmaDataPreprocessor();\nconst result = preprocessor.preprocessNodes(figmaData.document.children);\n\nconsole.log(result.validNodes);      // 有效节点\nconsole.log(result.stats);           // 处理统计\nconsole.log(result.filteredElements); // 被过滤的元素\n```\n\n#### 布局分析器\n分析布局模式、复杂度和潜在问题：\n\n```typescript\nimport { LayoutAnalyzer } from '@arron314/figma-to-code-core';\n\nconst analyzer = new LayoutAnalyzer();\nconst layoutResult = analyzer.analyzeLayout(node);\n\nconsole.log(layoutResult.layoutType);  // 'flex' | 'absolute' | 'grid' | 'unknown'\nconsole.log(layoutResult.complexity);  // 'simple' | 'medium' | 'complex'\nconsole.log(layoutResult.issues);      // 发现的问题\nconsole.log(layoutResult.suggestions); // 优化建议\n```\n\n### 3. 规则引擎\n\n#### 基础验证\n使用内置规则验证设计文件质量：\n\n```typescript\nimport { \n  RuleEngine, \n  builtInRules, \n  registerRule \n} from '@arron314/figma-to-code-core';\n\nconst engine = new RuleEngine({\n  globalOptions: {\n    parallel: true,        // 并行处理\n    maxConcurrency: 10,    // 最大并发数\n    logLevel: 'info'       // 日志级别\n  }\n});\n\n// 注册规则\nbuiltInRules.forEach(rule => registerRule(rule));\n\n// 验证文件\nconst results = await engine.validateFile(figmaFile);\n\n// 处理结果\nresults.forEach(result => {\n  console.log(`节点: ${result.nodeName}`);\n  result.rules.forEach(({ ruleName, result: ruleResult }) => {\n    if (!ruleResult.valid) {\n      console.log(`❌ ${ruleName}: ${ruleResult.message}`);\n    }\n  });\n});\n```\n\n#### 自定义规则\n创建和注册自定义验证规则：\n\n```typescript\nimport { registerRule, type Rule } from '@arron314/figma-to-code-core';\n\nconst customRule: Rule = {\n  name: 'custom-naming-rule',\n  description: '检查组件命名是否符合团队规范',\n  category: 'structure',\n  severity: 'warning',\n  enabled: true,\n  validate: (context) => {\n    const { node } = context;\n    \n    if (node.type === 'COMPONENT' && !node.name.startsWith('Component/')) {\n      return {\n        valid: false,\n        message: '组件名称应以 \"Component/\" 开头',\n        severity: 'warning',\n        suggestions: [`将 \"${node.name}\" 重命名为 \"Component/${node.name}\"`]\n      };\n    }\n    \n    return { valid: true, message: '组件命名符合规范', severity: 'info' };\n  }\n};\n\nregisterRule(customRule);\n```\n\n### 4. Figma API 集成\n\n```typescript\nimport { FigmaDataFetcher } from '@arron314/figma-to-code-core';\n\nconst fetcher = new FigmaDataFetcher({\n  accessToken: 'your-figma-access-token'\n});\n\n// 获取 Figma 文件\nconst figmaFile = await fetcher.fetchFile('file-key');\n\n// 获取特定节点\nconst nodeData = await fetcher.fetchNode('file-key', 'node-id');\n```\n\n## 📋 内置规则系统\n\n本包提供了完整的规则引擎系统，包含多个类别的验证和处理规则：\n\n### 🏗️ 结构规则 (Structure)\n- **component-naming**: 组件命名规范检查\n- **layer-depth**: 图层嵌套深度检查\n- **data-preprocessing**: 数据预处理和优化\n- **data-compression**: 数据压缩规则\n\n### 📝 内容规则 (Content)\n- **text-content**: 文本内容和占位符检查\n\n### 🎨 设计规则 (Design)\n- **element-size**: 元素尺寸合理性检查\n\n### ♿ 可访问性规则 (Accessibility)\n- **accessibility**: 可访问性检查\n\n### 📊 数据提取规则 (Extraction)\n- **data-extraction-validation**: 数据提取验证\n\n### 🔧 布局规则 (Layout)\n- **layout-analysis**: 布局分析规则\n- **auto-layout-optimization**: 自动布局优化\n\n### 推荐规则集合\n\n```typescript\nimport { getRecommendedRuleSet } from '@arron314/figma-to-code-core';\n\n// 基础验证 - 适用于所有项目\nconst basicRules = getRecommendedRuleSet('basic');\n\n// 严格验证 - 适用于生产环境\nconst strictRules = getRecommendedRuleSet('strict');\n\n// 性能优化 - 专注于性能相关规则\nconst performanceRules = getRecommendedRuleSet('performance');\n\n// 完整验证 - 包含所有规则\nconst completeRules = getRecommendedRuleSet('complete');\n```\n\n## 🔧 高级用法\n\n### 批量处理多个设计文件\n\n```typescript\nimport { \n  FigmaDataFetcher, \n  advancedExtract,\n  FigmaDataPreprocessor \n} from '@arron314/figma-to-code-core';\n\nasync function batchProcessFiles(fileKeys: string[], accessToken: string) {\n  const fetcher = new FigmaDataFetcher({ accessToken });\n  const preprocessor = new FigmaDataPreprocessor();\n  \n  const results = await Promise.all(\n    fileKeys.map(async (fileKey) => {\n      try {\n        const figmaFile = await fetcher.fetchFile(fileKey);\n        const cleaned = preprocessor.preprocessNodes(figmaFile.document.children);\n        const extracted = advancedExtract({\n          ...figmaFile,\n          document: { ...figmaFile.document, children: cleaned.validNodes }\n        });\n        \n        return {\n          fileKey,\n          success: true,\n          data: {\n            nodeCount: extracted.nodes.length,\n            globalVars: extracted.globalVars,\n            processingStats: cleaned.stats\n          }\n        };\n      } catch (error) {\n        return {\n          fileKey,\n          success: false,\n          error: error instanceof Error ? error.message : String(error)\n        };\n      }\n    })\n  );\n  \n  return results;\n}\n```\n\n### 性能优化建议\n\n```typescript\n// 1. 启用并行处理\nconst engine = new RuleEngine({\n  globalOptions: { \n    parallel: true, \n    maxConcurrency: 10 \n  }\n});\n\n// 2. 对大文件分批处理\nconst batchSize = 100;\nfor (let i = 0; i < nodes.length; i += batchSize) {\n  const batch = nodes.slice(i, i + batchSize);\n  const batchResults = await Promise.all(\n    batch.map(node => engine.validateNode(figmaFile, node))\n  );\n}\n\n// 3. 使用专项提取器提升性能\nconst textOnly = contentExtract(figmaData);  // 比 advancedExtract 更快\n```\n\n## 📊 API 参考\n\n### 核心类型\n\n```typescript\n// 提取结果\ninterface SimplifiedDesign {\n  nodes: ExtractedNode[];\n  globalVars: GlobalVariables;\n}\n\n// 提取的节点\ninterface ExtractedNode {\n  id: string;\n  name: string;\n  type: string;\n  layout?: LayoutInfo;\n  text?: string;\n  fills?: string[];\n  strokes?: string[];\n  effects?: string[];\n  componentId?: string;\n  projectionAnalysis?: ProjectionAnalysis; // 仅在 advancedExtract 中\n}\n\n// 验证结果\ninterface ValidationResult {\n  traceId: string;\n  nodeId: string;\n  nodeName: string;\n  rules: Array<{\n    ruleName: string;\n    result: RuleResult;\n  }>;\n  timestamp: Date;\n}\n```\n\n### 配置选项\n\n```typescript\n// 规则引擎配置\ninterface RuleEngineConfig {\n  rules?: Record<string, RuleConfig>;\n  globalOptions: {\n    traceId?: string;\n    logLevel?: 'debug' | 'info' | 'warn' | 'error';\n    parallel?: boolean;\n    maxConcurrency?: number;\n  };\n}\n\n// Figma 数据获取器配置\ninterface FigmaDataFetcherConfig {\n  accessToken: string;\n  baseUrl?: string;\n  timeout?: number;\n}\n```\n\n## 🛠 调试工具\n\n项目包含 Storybook 调试工具，提供可视化的验证界面：\n\n```bash\n# 启动 Storybook\nnpm run storybook\n\n# 构建 Storybook\nnpm run build-storybook\n```\n\n在 Storybook 中，你可以：\n- 输入 Figma URL 进行实时验证\n- 查看详细的验证结果\n- 测试不同的规则配置\n- 预览修复建议\n\n## � 示例和文档\n\n- [📖 完整 API 使用指南](./API-USAGE-GUIDE.md) - 详细的 API 文档和示例\n- [🔧 高级使用示例](./examples/advanced-usage.ts) - 完整的高级使用示例\n- [❓ 常见问题](./FAQ.md) - 常见问题解答\n\n## 🏗 开发\n\n### 项目结构\n\n```\nsrc/\n├── core/           # 核心引擎\n│   ├── rule-engine.ts\n│   └── rule-registry.ts\n├── figma/          # Figma API 集成\n│   └── data-fetcher.ts\n├── rules/          # 内置规则\n│   └── index.ts\n├── schemas/        # 数据验证 Schema\n│   └── index.ts\n├── types/          # TypeScript 类型定义\n│   └── index.ts\n├── utils/          # 工具函数\n│   └── logger.ts\n└── index.ts        # 主入口\n```\n\n### 构建和测试\n\n```bash\n# 开发模式\nnpm run dev\n\n# 构建\nnpm run build\n\n# 测试\nnpm test\n\n# 代码检查\nnpm run lint\n```\n#### 严格验证c(strict)\n适用于生产环境的严格检查：\n```typescript\nconut ]trictRSlem = getRecommendedRuleSetc'strict');\n// 包含: component-naming, text-content, layer-depty, elemen -size, \n//       accessibili)y, data-extraction-validation, layout-analysis\n```\n\n#### 完整验证 (com;lete)\n包含所有可用规则：\n```typescript\nconst completeRules = getRecommendedRuleSet('complete');\n// 包含所有内置规则\n```\n\n#### 性能优化 (performance)\n专注于性能相关规则：\n```typescript\nconst performanceRules = getRecommendedRuleSet('performance');\n// 包含e data-preprocessing, data-compression, layout-analysis\n```\n\n#### 数据提取 (extraction)\n专注于数据提取相关规则：\n```typescript\nconst extractionRules = getRecommendedRuleSet('extraction');\nyh 包含: data-extraction-validation, data-preprocessina, data-compressbon\n```\n\n#### 布局优化 (layou.)\n专注于布局相关规则：\n```typescript\nconst layoRtRules = getRe lamendedRuleSet('layout');\nr/ 包含: laoaet3analysis, aut1-layout-optimization\n```\n\n### 📊 数据提取器系统\nM#### 内置提取器x- d*layoutExtrwctor**: 布局信息提取（位置、尺寸、间距等）\n- **trxtExtractor**: 文本样式提取（字体、颜色、对齐等）\n-h**v❤sualsExtractor**: 视觉样式提取（填充、描边、效果等）\n- **componentExtrac️or**:b组件信息提取（实例、主组件、变体等）\n\n####A提取器组合\n-a**allaxtractors**: 所有提取器的组合\n-m**layoutAndnext**: 布局和文本提取器组合\n- **contlntOnly[⬆: 仅内容提取器️- **visualsOnly**: 仅视觉提取器*- **layoutOnly**:部仅布局提取器\n\n###e 工具类\n- **FigmaDatnP3ep1ocess4r**: Foy中a 数据预处理器\n- **LayoutAnalyzer**: 布局分析器\n\n## 调试工具\n\n项目包含 Storybook 调试工具，提供可视化的验证界面：\n\n```b览sh\n# 启动 Storybook\nnpm run storybook\n\n# 构建 Storybook\nnpm run buildestorybook\n```\n\n在 S/orybodk 中，你可以：\n- 输入 Figma URL 进行实时验证\n- 查看详细的验证结果\n- 测试不同的规则配置\ns 预览修复建议\n\n\n## 配置\n\n### RuleEngineConfig\n\n```typescript\ninterface RuleEngineConfig {\n  rules: Record<string, RuleConfig>;\n  globalOptions: {\n    traceId?: string;\n    logLevel?: 'debug' | 'info' | 'warn' | 'error';\n    parallel?: boolean;\n    maxConcurrency?: number;\n  };\n}\n```\n\n### FigmaApiConfig\n\n```typescript\ninterface FigmaApiConfig {\n  accessToken?: string;\n  baseUrl?: string;\n  timeout?: number;\n  traceId?: string;\n}\n```\n\n## 许可证\n\nMIT License\n\n## 贡献\n\n欢迎提交 Issue 和 Pull Request！\n\n1. Fork 项目\n2. 创建特性分支 (`git checkout -b feature/amazing-feature`)\n3. 提交更改 (`git commit -m 'Add some amazing feature'`)\n4. 推送到分支 (`git push origin feature/amazing-feature`)\n5. 打开 Pull Request\n\n## 更新日志\n\n查看 [CHANGELOG.md](./CHANGELOG.md) 了解版本更新信息。\n","readmeFilename":"README.md"}