You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

79 lines
1.9 KiB

"use strict";
exports.__esModule = true;
exports.getExport = exports.getImport = exports.getProps = void 0;
const getProps = ({
types: t
}, opts) => {
const props = [];
if (opts.ref) {
props.push(t.objectProperty(t.identifier('svgRef'), t.identifier('svgRef'), false, true));
}
if (opts.titleProp) {
props.push(t.objectProperty(t.identifier('title'), t.identifier('title'), false, true));
}
if (opts.expandProps) {
props.push(t.restElement(t.identifier('props')));
}
if (props.length === 0) {
return null;
}
if (props.length === 1 && opts.expandProps) {
return t.identifier('props');
}
return t.objectPattern(props);
};
exports.getProps = getProps;
const getImport = ({
types: t
}, opts) => {
const importDeclarations = [t.importDeclaration([t.importDefaultSpecifier(t.identifier('React'))], t.stringLiteral('react'))];
if (opts.native) {
if (opts.native.expo) {
importDeclarations.push(t.importDeclaration([], t.stringLiteral('expo')));
} else {
importDeclarations.push(t.importDeclaration([t.importDefaultSpecifier(t.identifier('Svg'))], t.stringLiteral('react-native-svg')));
}
}
return importDeclarations;
};
exports.getImport = getImport;
const getExport = ({
template
}, opts) => {
let result = '';
let exportName = opts.state.componentName;
if (opts.ref) {
exportName = 'ForwardRef';
result += `const ForwardRef = React.forwardRef((props, ref) => <${opts.state.componentName} svgRef={ref} {...props} />)\n\n`;
}
if (opts.state.caller && opts.state.caller.previousExport) {
result += `${opts.state.caller.previousExport}\n`;
result += `export { ${exportName} as ReactComponent }`;
return template.ast(result, {
plugins: ['jsx']
});
}
result += `export default ${exportName}`;
return template.ast(result, {
plugins: ['jsx']
});
};
exports.getExport = getExport;