1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
| function transform(fileInfo, api, options) { const $ = api.gogocode const source = fileInfo.source const ast = $(source, { parseOptions: { language: 'vue', sourceType: 'module' }, }) const script = ast.find('<script></script>') script .replace('export default defineComponent({$$$})', (match) => { match['$$$$'].sort((left, right) => { const orders = propsOrder() let leftName = left.key.name let rightName = right.key.name let leftIndex = orders.indexOf(leftName) let rightIndex = orders.indexOf(rightName)
return leftIndex - rightIndex })
let propsCode = match['$$$$'].map((prop) => $(prop).generate())
return `export default defineComponent({${propsCode.join( ',' )}})` }) .generate() return ast.generate() }
function propsOrder() { return [ 'el',
'name', 'key', 'parent',
'functional',
['delimiters', 'comments'],
['components', 'directives', 'filters'],
'extends', 'mixins', ['provide', 'inject'],
'ROUTER_GUARDS', 'layout', 'middleware', 'validate', 'scrollToTop', 'transition', 'loading',
'inheritAttrs', 'model', ['props', 'propsData'], 'emits',
'setup',
'asyncData', 'data', 'fetch', 'head', 'computed',
'watch', 'watchQuery', [ 'beforeCreate', 'created', 'beforeMount', 'mounted', 'beforeUpdate', 'updated', 'activated', 'deactivated', 'beforeUnmount', 'unmounted', 'beforeDestroy', 'destroyed', 'renderTracked', 'renderTriggered', 'errorCaptured', ],
'methods',
['template', 'render'], 'renderError', ].flat() }
|