t.BlockStatement([ t.VariableDeclaration('const', [ t.VariableDeclarator(t.Identifier('$$a'), model), t.VariableDeclarator( t.Identifier('$$el'), t.MemberExpression(t.Identifier('$event'), t.Identifier('target')) ), t.VariableDeclarator( t.Identifier('$$c'), t.ConditionalExpression( t.MemberExpression(t.Identifier('$$el'), t.Identifier('checked')), trueValue, falseValue ) ) ]), t.IfStatement( t.CallExpression(t.MemberExpression(t.Identifier('Array'), t.Identifier('isArray')), [t.Identifier('$$a')]), t.BlockStatement([ t.VariableDeclaration('const', [ t.VariableDeclarator( t.Identifier('$$v'), modifier === 'number' ? t.CallExpression(t.MemberExpression(t.ThisExpression(), t.Identifier('_n')), [value]) : value ), t.VariableDeclarator( t.Identifier('$$i'), t.CallExpression(t.MemberExpression(t.ThisExpression(), t.Identifier('_i')), [ t.Identifier('$$a'), t.Identifier('$$v') ]) ) ]), t.IfStatement( t.MemberExpression(t.Identifier('$$el'), t.Identifier('checked')), t.BlockStatement([ t.ExpressionStatement( t.LogicalExpression( '&&', t.BinaryExpression('<', t.Identifier('$$i'), t.NumericLiteral(0)), t.AssignmentExpression( '=', model, t.CallExpression(t.MemberExpression(t.Identifier('$$a'), t.Identifier('concat')), [ t.Identifier('$$v') ]) ) ) ) ]), t.BlockStatement([ t.ExpressionStatement( t.LogicalExpression( '&&', t.BinaryExpression('>', t.Identifier('$$i'), t.UnaryExpression('-', t.NumericLiteral(1))), t.AssignmentExpression( '=', model, t.CallExpression( t.MemberExpression( t.CallExpression(t.MemberExpression(t.Identifier('$$a'), t.Identifier('slice')), [ t.NumericLiteral(0), t.Identifier('$$i') ]), t.Identifier('concat') ), [ t.CallExpression(t.MemberExpression(t.Identifier('$$a'), t.Identifier('slice')), [ t.BinaryExpression('+', t.Identifier('$$i'), t.NumericLiteral(1)) ]) ] ) ) ) ) ]) ) ]), t.BlockStatement([genAssignmentCode(t, model, t.Identifier('$$c'))]) ) ]) ) ) ); return [checkedProp, handlerProp] }; var genRadioModel = function genRadioModel(t, modelAttribute, model, modifier, path) { if (modifier && modifier !== 'number') { throw modelAttribute .get('name') .get('name') .buildCodeFrameError('you can only use number modifier with input[type="radio"]') } var value = t.BooleanLiteral(true); path.get('attributes').forEach(function(path) { if (!path.node.name) { return } if (path.node.name.name === 'value') { value = getExpression(t, path); path.remove(); } }); var checkedProp = t.JSXAttribute( t.JSXIdentifier('checked'), t.JSXExpressionContainer( t.CallExpression(t.MemberExpression(t.ThisExpression(), t.Identifier('_q')), [model, value]) ) ); var handlerProp = t.JSXAttribute( t.JSXIdentifier('on' + CHECKBOX_RADIO_TOKEN), t.JSXExpressionContainer( t.ArrowFunctionExpression( [t.Identifier('$event')], t.BlockStatement([ genAssignmentCode( t, model, modifier === 'number' ? t.CallExpression(t.MemberExpression(t.ThisExpression(), t.Identifier('_n')), [value]) : value ) ]) ) ) ); return [checkedProp, handlerProp] }; var genDefaultModel = function genDefaultModel(t, modelAttribute, model, modifier, path, type) { var needCompositionGuard = modifier !== 'lazy' && type !== 'range'; var event = modifier === 'lazy' ? 'Change' : type === 'range' ? RANGE_TOKEN : 'Input'; var valueExpression = t.MemberExpression( t.MemberExpression(t.Identifier('$event'), t.Identifier('target')), t.Identifier('value') ); if (modifier === 'trim') { valueExpression = t.CallExpression(t.MemberExpression(valueExpression, t.Identifier('trim')), []); } else if (modifier === 'number') { valueExpression = t.CallExpression(t.MemberExpression(t.ThisExpression(), t.Identifier('_n')), [valueExpression]); } var code = genAssignmentCode(t, model, valueExpression); if (needCompositionGuard) { code = t.BlockStatement([ t.IfStatement( t.MemberExpression( t.MemberExpression(t.Identifier('$event'), t.Identifier('target')), t.Identifier('composing') ), t.ReturnStatement(null) ), code ]); } else { code = t.BlockStatement([code]); } var valueProp = t.JSXAttribute(t.jSXIdentifier('domPropsValue'), t.JSXExpressionContainer(model)); var handlerProp = t.JSXAttribute( t.JSXIdentifier('on' + event), t.JSXExpressionContainer(t.ArrowFunctionExpression([t.Identifier('$event')], code)) ); var props = [valueProp, handlerProp]; if (modifier === 'trim' || modifier === 'number') { props.push( t.JSXAttribute( t.JSXIdentifier('onBlur'), t.JSXExpressionContainer( t.ArrowFunctionExpression( [], t.CallExpression(t.MemberExpression(t.ThisExpression(), t.Identifier('$forceUpdate')), []) ) ) ) ); } return props }; var genComponentModel = function genComponentModel(t, modelAttribute, model, modifier, path, type) { var baseValueExpression = t.Identifier('$$v'); var valueExpression = baseValueExpression; if (modifier === 'trim') { valueExpression = t.CallExpression(t.MemberExpression(valueExpression, t.Identifier('trim')), []); } else if (modifier === 'number') { valueExpression = t.CallExpression(t.MemberExpression(t.ThisExpression(), t.Identifier('_n')), [valueExpression]); } var assignment = genAssignmentCode(t, model, valueExpression); var valueProp = t.JSXAttribute(t.jSXIdentifier('domPropsValue'), t.JSXExpressionContainer(model)); var handlerProp = t.JSXAttribute( t.JSXIdentifier('onChange'), t.JSXExpressionContainer(t.ArrowFunctionExpression([baseValueExpression], t.BlockStatement([assignment]))) ); return [valueProp, handlerProp] }; var index$5 = function(babel) { var t = babel.types; return { inherits: index$2, visitor: { JSXOpeningElement: function JSXOpeningElement(path) { var model = null; var modifier = null; var modelAttribute = null; var type = null; var typePath = null; path.get('attributes').forEach(function(path) { if (!path.node.name) { return } if (path.node.name.name === 'type') { type = path.node.value.value; typePath = path.get('value'); } /* istanbul ignore else */ if (t.isJSXIdentifier(path.node.name)) { if (path.node.name.name !== 'v-model') { return } } else if (t.isJSXNamespacedName(path.node.name)) { if (path.node.name.namespace.name !== 'v-model') { return } if (!~allowedModifiers.indexOf(path.node.name.name.name)) { throw path .get('name') .get('name') .buildCodeFrameError('v-model does not support "' + path.node.name.name.name + '" modifier') } modifier = path.node.name.name.name; } else { return } modelAttribute = path; if (model) { throw path.buildCodeFrameError('you can not have multiple v-model directives on a single element') } if (!t.isJSXExpressionContainer(path.node.value)) { throw path.get('value').buildCodeFrameError('you should use JSX Expression with v-model') } if (!t.isMemberExpression(path.node.value.expression)) { throw path .get('value') .get('expression') .buildCodeFrameError('you should use MemberExpression with v-model') } model = path.node.value.expression; }); if (!model) { return } var tag = path.node.name.name; if (tag === 'input' && typePath && t.isJSXExpressionContainer(typePath.node)) { throw typePath.buildCodeFrameError('you can not use dynamic type with v-model') } if (tag === 'input' && type === 'file') { throw typePath.buildCodeFrameError('you can not use "file" type with v-model') } var replacement = null; if (tag === 'select') { replacement = genSelectModel(t, modelAttribute, model, modifier); } else if (tag === 'input' && type === 'checkbox') { replacement = genCheckboxModel(t, modelAttribute, model, modifier, path); } else if (tag === 'input' && type === 'radio') { replacement = genRadioModel(t, modelAttribute, model, modifier, path); } else if (tag === 'input' || tag === 'textarea') { replacement = genDefaultModel(t, modelAttribute, model, modifier, path, type); } else if (!isReservedTag(tag)) { replacement = genComponentModel(t, modelAttribute, model, modifier, path); } else { throw path.buildCodeFrameError('you can not use "' + tag + '" with v-model') } modelAttribute.replaceWithMultiple(replacement.concat( [t.JSXSpreadAttribute( t.ObjectExpression([ t.ObjectProperty( t.Identifier('directives'), t.ArrayExpression([ t.ObjectExpression([ t.ObjectProperty(t.Identifier('name'), t.StringLiteral('model')), t.ObjectProperty(t.Identifier('value'), model) ]) ]) ) ]) )] )); } } } }; var index$10 = function (babel) { var t = babel.types; return { inherits: index$2, visitor: { Program: function Program (path) { path.traverse({ 'VariableDeclaration': function VariableDeclaration (path) { if (path.node.declarations.length !== 1 || !t.isVariableDeclarator(path.node.declarations[0]) || !t.isArrowFunctionExpression(path.node.declarations[0].init)) { return } var jsxChecker = { hasJsx: false }; path.traverse({ JSXElement: function JSXElement () { this.hasJsx = true; } }, jsxChecker); if (!jsxChecker.hasJsx) { return } var name = path.node.declarations[0].id.name; var params = [t.identifier('h') ].concat( path.node.declarations[0].init.params); var body = path.node.declarations[0].init.body; var isDevEnv = process.env.NODE_ENV === 'development'; var props = [ t.objectProperty( t.identifier('functional'), t.booleanLiteral(true) ), t.objectProperty( t.identifier('render'), t.arrowFunctionExpression(params, body) ) ]; if (isDevEnv) { props.unshift( t.objectProperty( t.identifier('name'), t.stringLiteral(name) ) ); } path.replaceWith( t.variableDeclaration( 'const', [ t.variableDeclarator( t.identifier(name), t.objectExpression( props ) ) ] ), [] ); } }); } } } }; var index = { plugins: [ bundle, index$5, index$10, index$1 ] }; return index; }))); tonglan/adminSystem - Gogs: Go Git Service

1 次代码提交 (11e3a9652a62b867d722e5aebdba895bb86f9ed3)

作者 SHA1 备注 提交日期
  FFIB 11e3a9652a first 7 年之前