{"_id":"@aligov/gov-venom-transformer","_rev":"20-e18ee3f58e2c1060e113003923f99043","name":"@aligov/gov-venom-transformer","description":"venom dsl transformed to js code","dist-tags":{"latest":"0.0.3"},"versions":{"0.0.1":{"name":"@aligov/gov-venom-transformer","version":"0.0.1","author":{"name":"xiangzhong.wxz"},"_id":"@aligov/gov-venom-transformer@0.0.1","maintainers":[{"name":"zhangcong52","email":"386333321@qq.com"},{"name":"zwhu","email":"zwhu2014@foxmail.com"},{"name":"guoliang.hgl","email":"guoliang.hgl@alibaba-inc.com"},{"name":"abell123456","email":"742766812@qq.com"},{"name":"mo.zhou","email":"bjfuzm@163.com"},{"name":"zhousufa","email":"zhousufa@gmail.com"},{"name":"jerrywang12","email":"463174595@qq.com"},{"name":"xiazhiqiang","email":"xiazhiqiangcuc@126.com"},{"name":"liunian","email":"dengjij@gmail.com"},{"name":"itrip","email":"1198488651@qq.com"},{"name":"tao1991123","email":"tao360907796@gmail.com"}],"dist":{"shasum":"8f070a691d2aad66b30b7264f78195d3cbad3059","tarball":"https://registry.npmjs.org/@aligov/gov-venom-transformer/-/gov-venom-transformer-0.0.1.tgz","fileCount":54,"integrity":"sha512-w2/lqmQkG3UK733xQ63lE80PPZ6quRBq1zJYh0H9E+B5Oy1bJQDqvczTZnlF+g9/aiRs+aNqX/XXjxlMDCQUxQ==","signatures":[{"sig":"MEYCIQCha1yH3D78/ZaJoebiVpZjnjGxalnkqzlUlcvnEV9itQIhAOsKYdsvPQwqC5fmskmi3UrBO23qv+H8gZWwX98YS4RZ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":135622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe144+CRA9TVsSAnZWagAAfNwP/1blBJKSmYUVZQ7mxVGK\n+/yTTnHIWW0f5pm8rBndBWLCx4P+CK0QSnFvhKhX5/jgKHFQJccl/clzu9wk\n4Nzo2XaFssc+b+nuVIybKhATFEIO3f1hqs6n9MuOTXGdfRORIerEFW8ES8S4\n6/SsJf1qU2mTVcrczcns2QS5RqLX+SPynWXGK2t5PZrYLGVFjmZlN074G3Pq\nWPArSJay6Y0ra2oK8kwoiZYs+FlvJnN6iWf1iG+PQ3aq1qComxKvVXAFu16L\nfh/NJoEQck1AjjNTeEcj8Dq9gibu3j5ewc54O4oZTggcSZ70KXtbSq4uDcaz\nM0CVRpN5WZ7XwUPjHsYMEbBozQDfIn8j6Tg59EPIY0yctYTRIhcYAxVAlRlC\nXzHkoF/w9Nk6iceEpZYa6uko4Cvr5RSfQZPQM8fu9JaXsTWVY6ZVHRwF7j3W\n86+2d5on9tAYJ8i1gGF2xCqeUGALH4xO5NvsRheuefYYRCtTZgJWM9Uwy45r\nh/ccL6WQiNoU6oV/AEOC1XZs3BJHJHf+/khOrGhYv4Y51dDuVi7LOkxjsYFp\ng/mRVyQGRJHO+RIFRo+9jfY0kwWH668Fv3L3XfZG9v/kK2gPfsLsUIWLpStK\nM81aynGiK6OygEvvPEdL935rJFiulAZDth9wHVhcIJ+iNS7SS2/9uqdGhL49\n893F\r\n=jkut\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","gitHead":"2bac3678c52c6df42f2acb20491e7ce2ec00b9d5","scripts":{"lint":"eslint --fix lib","test":"mocha --slow 5000 --timeout 10000","build":"rimraf lib && babel --plugins lodash --presets es2015 src --out-dir lib","watch":"rimraf lib && babel --plugins lodash --presets es2015 src --out-dir lib --watch","prepublish":"npm run lint && npm run build"},"_npmUser":{"name":"abell123456","email":"742766812@qq.com"},"repository":{"url":"git@gitlab.alibaba-inc.com:digitalGov/gov-venom-transformer.git","type":"git"},"_npmVersion":"6.14.4","description":"venom dsl transformed to js code","directories":{},"_nodeVersion":"14.0.0","dependencies":{"colors":"^1.3.1","warning":"^4.0.1","invariant":"^2.2.4","lodash.map":"^4.6.0","lodash.cond":"^4.5.2","lodash.find":"^4.6.0","lodash.keys":"^4.2.0","lodash.rest":"^4.0.5","lodash.some":"^4.6.0","lodash.clone":"^4.5.0","lodash.assign":"^4.2.0","lodash.filter":"^4.6.0","lodash.forown":"^4.4.0","lodash.reject":"^4.6.0","lodash.values":"^4.3.0","lodash.compact":"^3.0.1","lodash.flatmap":"^4.5.0","lodash.foreach":"^4.5.0","lodash.matches":"^4.6.0","is-plain-object":"^2.0.4","lodash.constant":"^3.0.0","lodash.defaults":"^4.2.0","lodash.includes":"^4.3.0","lodash.template":"^4.4.0","lodash.transform":"^4.6.0","lodash.startswith":"^4.2.1","lodash.upperfirst":"^4.3.1","lodash.intersection":"^4.4.0","@aligov/gov-venom-parser":"^0.0.x","normalize-html-whitespace":"^0.2.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","jsdom":"^11.12.0","mocha":"^5.2.0","react":"^16.4.2","colors":"^1.3.1","eslint":"^2.9.0","webpack":"^3.10.0","cheeriox":"^0.24.3","hash-sum":"^1.0.2","babel-cli":"^6.14.0","memory-fs":"^0.4.1","react-dom":"^16.4.2","babel-eslint":"^6.1.2","loader-utils":"^1.1.0","eslint-loader":"^2.1.0","expose-loader":"^0.7.5","babel-register":"^6.14.0","normalize-newline":"^3.0.0","babel-preset-react":"^6.11.1","babel-plugin-lodash":"^3.3.4","babel-preset-es2015":"^6.14.0","eslint-plugin-react":"^5.2.2","babel-preset-stage-0":"~6.5.0","eslint-config-airbnb":"^9.0.1","eslint-plugin-import":"^1.12.0","babel-plugin-istanbul":"^2.0.1","eslint-plugin-jsx-a11y":"^1.2.3","babel-plugin-transform-runtime":"^6.23.0","babel-plugin-add-module-exports":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/gov-venom-transformer_0.0.1_1591184957527_0.4156841001737459","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"@aligov/gov-venom-transformer","version":"0.0.2","author":{"name":"xiangzhong.wxz"},"_id":"@aligov/gov-venom-transformer@0.0.2","maintainers":[{"name":"abell123456","email":"742766812@qq.com"},{"name":"guoliang.hgl","email":"guoliang.hgl@alibaba-inc.com"},{"name":"itrip","email":"1198488651@qq.com"},{"name":"jerrywang12","email":"463174595@qq.com"},{"name":"liunian","email":"dengjij@gmail.com"},{"name":"mo.zhou","email":"bjfuzm@163.com"},{"name":"tao1991123","email":"tao360907796@gmail.com"},{"name":"xiazhiqiang","email":"xiazhiqiangcuc@126.com"},{"name":"zhangcong52","email":"386333321@qq.com"},{"name":"zhousufa","email":"zhousufa@gmail.com"},{"name":"zwhu","email":"zwhu2014@foxmail.com"}],"dist":{"shasum":"f842cf0ad6bdab17162f1042dad3c031bf3cea9d","tarball":"https://registry.npmjs.org/@aligov/gov-venom-transformer/-/gov-venom-transformer-0.0.2.tgz","fileCount":58,"integrity":"sha512-aYo0XioTkcdsxtzpP3E85UaVHEwNTPWf4kZrWgYOJYHUUBL6grjtHVUMaBRUvGNh5nvzlIzLwDi2E9/B/tMjGw==","signatures":[{"sig":"MEUCIDqNUTxcmek70XvSUsp5BKPG4QrXG5XgtXkVD1lrJHbtAiEA4WB68ICTjtc8YAiRyTMphqGvoArOfTVKw7P3Te9RTyA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":146700,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe15BzCRA9TVsSAnZWagAAEYIQAICbtOZA3heoyQyAf3Fh\nQ5FJYyJFnB5rMnTvtB2jOaD0CW65x9MBeZN5kW2ZdOKkmXGtyE6nMa4skmwm\nc+hguSIFxur/EkJJuolRTiwOKjuOw4J+0OCHil+jNWXOWSf3U6QgWmdKGapa\nz1Vlx80qelgNTl1ZOG/klLZxdRhwxuI5/NxB1JvnWaZHNnWkIdVMy0uUY4WB\n9rXtzroip3NNi5v1nK0RgZBOPSZSL5No74rS3e5Xf/ZW3oAWsRt5G821J4c6\n16DwWcCOsY0Wv9rE6iTFmWtn1QlAEnSQxC5ubH/NN7uLNfyF7v33qXkJ74pO\nRDXSlR9DfnKXtUEi8S0jZGac8oLq4Xa2B+2Xj+jB4wgSZ0yVgulILDLslGZX\nO/qzNydBg206ycQO03/8JkhmhbanZFFCKU/qGNm7zT4C8QktmpUkNgnBsESM\nqNAb4VGx4Sj+uCqga1kucPpjGpZkLH9W3/2G86lRfIJuoylxAWMEFYr2zJ2T\n//i7KdOU8lu+MKOyx3CxmMHX7HuE/vGmSk+6zYzN5Zq5R01j5ZuOCJ0UBDN7\nUR74UOkDHBVg3O+XEb4HxivyQ6pgpSI26f/tD7um0fNcU8FxGaddvoX5iggd\nxnq5fTrishiJK7iHI9SXiLoocGMs5vO2K5b+QsEtHz8lzdb5SxRxPSlAVByd\ntAAN\r\n=hYXp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","gitHead":"5c81a9618136605221405281e2e4172eee4095b2","scripts":{"lint":"eslint --fix lib","test":"mocha --slow 5000 --timeout 10000","build":"rimraf lib && babel --plugins lodash --presets es2015 src --out-dir lib","watch":"rimraf lib && babel --plugins lodash --presets es2015 src --out-dir lib --watch","prepublish":"npm run lint && npm run build"},"_npmUser":{"name":"abell123456","email":"742766812@qq.com"},"repository":{"url":"git@gitlab.alibaba-inc.com:digitalGov/gov-venom-transformer.git","type":"git"},"_npmVersion":"6.14.4","description":"venom dsl transformed to js code","directories":{},"_nodeVersion":"14.0.0","dependencies":{"assert":"^2.0.0","colors":"^1.3.1","babylon":"^6.18.0","esutils":"^2.0.3","warning":"^4.0.1","invariant":"^2.2.4","lodash.map":"^4.6.0","babel-types":"^6.26.0","lodash.cond":"^4.5.2","lodash.find":"^4.6.0","lodash.keys":"^4.2.0","lodash.rest":"^4.0.5","lodash.some":"^4.6.0","lodash.clone":"^4.5.0","lodash.assign":"^4.2.0","lodash.filter":"^4.6.0","lodash.forown":"^4.4.0","lodash.reject":"^4.6.0","lodash.values":"^4.3.0","babel-traverse":"^6.26.0","lodash.compact":"^3.0.1","lodash.flatmap":"^4.5.0","lodash.foreach":"^4.5.0","lodash.matches":"^4.6.0","babel-generator":"^6.26.1","is-plain-object":"^2.0.4","lodash.constant":"^3.0.0","lodash.defaults":"^4.2.0","lodash.includes":"^4.3.0","lodash.template":"^4.4.0","lodash.transform":"^4.6.0","lodash.startswith":"^4.2.1","lodash.upperfirst":"^4.3.1","lodash.intersection":"^4.4.0","@aligov/gov-venom-parser":"^0.0.x","normalize-html-whitespace":"^0.2.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","jsdom":"^11.12.0","mocha":"^5.2.0","react":"^16.4.2","colors":"^1.3.1","eslint":"^2.9.0","webpack":"^3.10.0","cheeriox":"^0.24.3","hash-sum":"^1.0.2","babel-cli":"^6.14.0","memory-fs":"^0.4.1","react-dom":"^16.4.2","babel-eslint":"^6.1.2","loader-utils":"^1.1.0","eslint-loader":"^2.1.0","expose-loader":"^0.7.5","babel-register":"^6.14.0","normalize-newline":"^3.0.0","babel-preset-react":"^6.11.1","babel-plugin-lodash":"^3.3.4","babel-preset-es2015":"^6.14.0","eslint-plugin-react":"^5.2.2","babel-preset-stage-0":"~6.5.0","eslint-config-airbnb":"^9.0.1","eslint-plugin-import":"^1.12.0","babel-plugin-istanbul":"^2.0.1","eslint-plugin-jsx-a11y":"^1.2.3","babel-plugin-transform-runtime":"^6.23.0","babel-plugin-add-module-exports":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/gov-venom-transformer_0.0.2_1591185523271_0.4103409001899654","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"@aligov/gov-venom-transformer","version":"0.0.3","author":{"name":"xiangzhong.wxz"},"_id":"@aligov/gov-venom-transformer@0.0.3","maintainers":[{"name":"abell123456","email":"742766812@qq.com"},{"name":"guoliang.hgl","email":"guoliang.hgl@alibaba-inc.com"},{"name":"itrip","email":"1198488651@qq.com"},{"name":"jerrywang12","email":"463174595@qq.com"},{"name":"liunian","email":"dengjij@gmail.com"},{"name":"mo.zhou","email":"bjfuzm@163.com"},{"name":"tao1991123","email":"tao360907796@gmail.com"},{"name":"xiazhiqiang","email":"xiazhiqiangcuc@126.com"},{"name":"zhangcong52","email":"386333321@qq.com"},{"name":"zhousufa","email":"zhousufa@gmail.com"},{"name":"zwhu","email":"zwhu2014@foxmail.com"}],"dist":{"shasum":"7e2c6d394d5b158a8b73a26889979abd5a9b919b","tarball":"https://registry.npmjs.org/@aligov/gov-venom-transformer/-/gov-venom-transformer-0.0.3.tgz","fileCount":58,"integrity":"sha512-s+QkHsNqihpebF9v4HJN5e2D82eFX8cyS/1Q3p4a8ak87qno/pAkdcFO2iZcYPaiRaXSQwhZAHwrtpGtBjnCnw==","signatures":[{"sig":"MEYCIQDyjDp1AU9NCU++7aaXT6nLHcQBdEs+3xJ410yfm4/lbgIhAOQd/MmVZFwGn+ctWIeyGC/6c6qZp5i//sQ5m1y08rpK","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":146758,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh11W6CRA9TVsSAnZWagAARPEQAIkMuayzmg4ae9HAbJ2I\nL1EhNZK9b4MoNNzwI4AFP5T/yQ1dOBVZob9ABj8cJ9ajjhnhZSz6LpmxeG0V\n4U84jKv4cdbIOCpp6tEUh0oZpRgbZ12fJTxx77rwb7uWv0ypEtuNJCenU4/p\nK64GHxXpUnmac6WrGhe9BJLIQrrjzuLRb3oQ4GHwTPuF4KmNrkJxR8OZ4VA/\nupxNei+EB+Dna+bZkr18XXgPEe9xvMO+eaiCWsvWS8wZ+9kgvzeTB8uXW1Dx\nQI9iWjHt1tJ01e4CwLzB26xEIYX0Ru6KyjRHu0r6lrTwZsYsdcAKJpAcxd0+\nfAFwvJLKmi30nZEILYPp3AbYUTl5/SVqP2HICPNDOXDI6Kx4Yt9IUlQ4ExYH\notvGsezuTax4z7qTMa0Z8feNOUm3SvlIXngeqpVCKZ02NZ4Yn/V3Uth9rvEa\nEjCBSmUsJywYiROikCU8lyRF7/OHjo7Cp3Vc5pOqqvkq21+TikTLIPIkNFW/\nyRTyDrfUIObrMP/fHF40gP8Esr4UaVxp+RfeQTxYOG2Y24MuTM2UCOJQy9AW\nQq7sQoNEaE4xnPiCkvvwt5KM7Wl+d2IFFULAKvGX6eG4E+bBzx34CAUAHwLz\nZtGCOgUABmDjBAvUUBV4qBa5zY5BRCqoyTC45NjYeC+d3LXKeV9iayTqqbfl\nXe5u\r\n=gZEZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","gitHead":"fc60875d8a2c9de5ebcd47aa591b0d92caf1ed0b","scripts":{"lint":"eslint --fix lib","test":"mocha --slow 5000 --timeout 10000","build":"rimraf lib && babel --plugins lodash --presets es2015 src --out-dir lib","watch":"rimraf lib && babel --plugins lodash --presets es2015 src --out-dir lib --watch","prepublish":"npm run lint && npm run build"},"_npmUser":{"name":"abell123456","email":"742766812@qq.com"},"repository":{"url":"git@gitlab.alibaba-inc.com:digitalGov/gov-venom-transformer.git","type":"git"},"_npmVersion":"6.14.4","description":"venom dsl transformed to js code","directories":{},"_nodeVersion":"14.0.0","dependencies":{"assert":"^2.0.0","colors":"^1.3.1","babylon":"^6.18.0","esutils":"^2.0.3","warning":"^4.0.1","invariant":"^2.2.4","lodash.map":"^4.6.0","babel-types":"^6.26.0","lodash.cond":"^4.5.2","lodash.find":"^4.6.0","lodash.keys":"^4.2.0","lodash.rest":"^4.0.5","lodash.some":"^4.6.0","lodash.clone":"^4.5.0","lodash.assign":"^4.2.0","lodash.filter":"^4.6.0","lodash.forown":"^4.4.0","lodash.reject":"^4.6.0","lodash.values":"^4.3.0","babel-traverse":"^6.26.0","lodash.compact":"^3.0.1","lodash.flatmap":"^4.5.0","lodash.foreach":"^4.5.0","lodash.matches":"^4.6.0","babel-generator":"^6.26.1","is-plain-object":"^2.0.4","lodash.constant":"^3.0.0","lodash.defaults":"^4.2.0","lodash.includes":"^4.3.0","lodash.template":"^4.4.0","lodash.transform":"^4.6.0","lodash.startswith":"^4.2.1","lodash.upperfirst":"^4.3.1","lodash.intersection":"^4.4.0","@aligov/gov-venom-parser":"^0.0.x","normalize-html-whitespace":"^0.2.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","jsdom":"^11.12.0","mocha":"^5.2.0","react":"^16.4.2","colors":"^1.3.1","eslint":"^2.9.0","webpack":"^3.10.0","cheeriox":"^0.24.3","hash-sum":"^1.0.2","babel-cli":"^6.14.0","memory-fs":"^0.4.1","react-dom":"^16.4.2","babel-eslint":"^6.1.2","loader-utils":"^1.1.0","eslint-loader":"^2.1.0","expose-loader":"^0.7.5","babel-register":"^6.14.0","normalize-newline":"^3.0.0","babel-preset-react":"^6.11.1","babel-plugin-lodash":"^3.3.4","babel-preset-es2015":"^6.14.0","eslint-plugin-react":"^5.2.2","babel-preset-stage-0":"~6.5.0","eslint-config-airbnb":"^9.0.1","eslint-plugin-import":"^1.12.0","babel-plugin-istanbul":"^2.0.1","eslint-plugin-jsx-a11y":"^1.2.3","babel-plugin-transform-runtime":"^6.23.0","babel-plugin-add-module-exports":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/gov-venom-transformer_0.0.3_1591186097011_0.2654014539482388","host":"s3://npm-registry-packages"}}},"time":{"created":"2020-06-03T11:49:17.060Z","modified":"2024-07-04T09:19:11.271Z","0.0.1":"2020-06-03T11:49:17.797Z","0.0.2":"2020-06-03T11:58:43.379Z","0.0.3":"2020-06-03T12:08:17.201Z"},"maintainers":[{"email":"wanyi.css@alibaba-inc.com","name":"wanyi.css"},{"email":"17682318001@163.com","name":"jasoncapricorn"},{"email":"chris_jun@aliyun.com","name":"qingkaili"},{"email":"hgxjyh@163.com","name":"huguoxin"},{"email":"shenyu.wsy@alibaba-inc.com","name":"shenyu.wsy"},{"email":"dengjij@gmail.com","name":"liunian"},{"email":"tao360907796@gmail.com","name":"tao1991123"},{"email":"1198488651@qq.com","name":"itrip"},{"email":"xiazhiqiangcuc@126.com","name":"xiazhiqiang"},{"email":"bjfuzm@163.com","name":"mo.zhou"},{"email":"guoliang.hgl@alibaba-inc.com","name":"guoliang.hgl"},{"email":"15858208586@163.com","name":"daip"},{"email":"ethan.cqw@gmail.com","name":"baizhao"}],"author":{"name":"xiangzhong.wxz"},"repository":{"url":"git@gitlab.alibaba-inc.com:digitalGov/gov-venom-transformer.git","type":"git"},"readme":"## @aligov/gov-venom-transformer\n\nVenom DSL code转化为React render。\n\n### Example\n\n```js\n    const { venomToReact, plugin } = require(\"@aligov/gov-venom-transformer\");\n\n    // class\n    const code = `\n        <div\n            :class={{active : true, current: false}}\n        >123</div>\n    `;\n\n    const transedCode = venomToReact(code);\n```\n\n转化后的结果：\n\n```js\n    // transedCode值:\n\n    import React from 'react';\n    import _ from 'lodash';\n    export default function () {\n        return React.createElement('div', {\n            'className': _.transform({\n                active: true,\n                current: false\n            }, function (res, value, key) {\n                if (value) {\n                    res.push(key);\n                }\n            }, []).join(' ')\n        }, '123');\n    }\n```\n\n### venom-transformer插件机制\n\n`@aligov/gov-venom-transformer`库通过提供可扩展的插件机制，为我们实现venom以及可定制的DSL语法提供了便利。  \n\n目前，`@aligov/gov-venom-transformer`库的插件机制提供两种能力的可扩展：`标签`及`标签属性`。  \n\n#### 标签属性的插件扩展机制\n\n格式如下：\n\n```js\nmodule.exports = {\n    type: \"prop\",\n    name: /\\:class|className/,\n    func(ctx, { value, node }) {\n        // console.log(\"ctx:\", ctx, val);\n        value = value || \"\";\n\n        // 支持表达式范式\n        if (/^\\{\\{.+\\}\\}$/.test(value)) {\n            value = value.slice(1, -1);\n        }\n\n        // key: 属性名\n        // value: 该属性所对应的实际代码值\n        return {\n            // 如果是定制的样式，需要维持原来的属性名\n            [isCustomElement(node.name)\n                ? \"class\"\n                : \"className\"\n            ]: classSetTemplate({ classSet: value })\n        };\n    }\n};\n```\n\n插件最终需要提供一个对象格式，对象里有三个属性：\n\n##### type\n告知transformer库是什么类型的插件，可选值：`prop/tag`。\n\n##### name\n表明是对哪个属性的代码转换插件，支持字符串及正则表达式。\n\n##### func\nfunc需要是一个方法，transformer库会传对应的内部实现参数给到该方法，该方法需要实现对对应标签属性的转化，并返回一个对象，对象名为转化后的属性名字，对象值为转化后的React标签的属性值，字符串属性。\n\n#### 标签的插件扩展机制\n\n格式如下：\n\n```js\nimport _ from \"lodash\";\n\nconst ifTemplate = _.template(\"((<%= condition %>)?(<%= body %>):null)\");\nconst ifAttr = `condition`;\n\nmodule.exports = {\n    type: \"tag\",\n    name: /if/i, // 忽略大小写\n    func(ctx, {\n        node,\n        children,\n        VenomCodeError\n    }) {\n        if(_.startsWith(children, ',')) {\n            children = children.slice(1);\n        }\n\n        const condStr = node.attribs[ifAttr] || 'false'; // 条件不写默认为false\n\n        const data = {\n            condition: condStr.trim(),\n            body: children,\n        };\n\n        return ifTemplate(data);\n    }\n};\n```\n\n`type`跟`name`跟标签属性的说明一致，主要是func有点区别：\n\n- func的参数里会多传一个children过来，代表该标签的children已经被转化成的js代码；\n- func方法不再需要返回对象，而是只需要返回被转化后的代码即可。\n\n同时，在实际的插件书写过程中，可能需要用到内部的，用于方便实现上下文的`context`的部分机制，比如：\n\n- 如果需要引入一些第三方模块，那么可以使用context的defines属性，该属性是一个数组，只需要将参数组装成有一定格式的对象，然后被push进该数组，最终会生成类似`import {Button} from '@alife/next';`之类的代码；\n- 如果需要生成一些辅助性的通用函数，且需要借助于render的上下文环境，则需要用到：`context.injectedFunctions`数组，将生成的函数代码字符串push进该数组即可。\n\n\n\n### TODO\n\n- [x] 1、去this写法支持；\n- [x] 2、else/elseif标签支持；\n- [x] 3、编译出的代码的lodash引用去掉；\n- [x] 4、venom-transformer实现无用代码精简；\n- [ ] 5、[styled-components](https://github.com/styled-components/styled-components)支持；\n","readmeFilename":"README.md"}