123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- 'use strict';
- var core = require('@babel/core');
- const defaultTemplate = (variables, { tpl }) => {
- return tpl`
- ${variables.imports};
- ${variables.interfaces};
- const ${variables.componentName} = (${variables.props}) => (
- ${variables.jsx}
- );
-
- ${variables.exports};
- `;
- };
- var __defProp = Object.defineProperty;
- var __defProps = Object.defineProperties;
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
- var __hasOwnProp = Object.prototype.hasOwnProperty;
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
- var __spreadValues = (a, b) => {
- for (var prop in b || (b = {}))
- if (__hasOwnProp.call(b, prop))
- __defNormalProp(a, prop, b[prop]);
- if (__getOwnPropSymbols)
- for (var prop of __getOwnPropSymbols(b)) {
- if (__propIsEnum.call(b, prop))
- __defNormalProp(a, prop, b[prop]);
- }
- return a;
- };
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
- const tsOptionalPropertySignature = (...args) => {
- return __spreadProps(__spreadValues({}, core.types.tsPropertySignature(...args)), {
- optional: true
- });
- };
- const getOrCreateImport = ({ imports }, sourceValue) => {
- const existing = imports.find(
- (imp2) => imp2.source.value === sourceValue && !imp2.specifiers.some(
- (specifier) => specifier.type === "ImportNamespaceSpecifier"
- )
- );
- if (existing)
- return existing;
- const imp = core.types.importDeclaration([], core.types.stringLiteral(sourceValue));
- imports.push(imp);
- return imp;
- };
- const tsTypeReferenceSVGProps = (ctx) => {
- if (ctx.opts.native) {
- const identifier2 = core.types.identifier("SvgProps");
- getOrCreateImport(ctx, "react-native-svg").specifiers.push(
- core.types.importSpecifier(identifier2, identifier2)
- );
- return core.types.tsTypeReference(identifier2);
- }
- const identifier = core.types.identifier("SVGProps");
- getOrCreateImport(ctx, ctx.importSource).specifiers.push(
- core.types.importSpecifier(identifier, identifier)
- );
- return core.types.tsTypeReference(
- identifier,
- core.types.tsTypeParameterInstantiation([
- core.types.tsTypeReference(core.types.identifier("SVGSVGElement"))
- ])
- );
- };
- const tsTypeReferenceSVGRef = (ctx) => {
- const identifier = core.types.identifier("Ref");
- getOrCreateImport(ctx, ctx.importSource).specifiers.push(
- core.types.importSpecifier(identifier, identifier)
- );
- return core.types.tsTypeReference(
- identifier,
- core.types.tsTypeParameterInstantiation([
- core.types.tsTypeReference(core.types.identifier("SVGSVGElement"))
- ])
- );
- };
- const getJsxRuntimeImport = (cfg) => {
- const specifiers = (() => {
- if (cfg.namespace)
- return [core.types.importNamespaceSpecifier(core.types.identifier(cfg.namespace))];
- if (cfg.specifiers)
- return cfg.specifiers.map((specifier) => {
- const identifier = core.types.identifier(specifier);
- return core.types.importSpecifier(identifier, identifier);
- });
- throw new Error(
- `Specify either "namespace" or "specifiers" in "jsxRuntimeImport" option`
- );
- })();
- return core.types.importDeclaration(specifiers, core.types.stringLiteral(cfg.source));
- };
- const defaultJsxRuntimeImport = {
- source: "react",
- namespace: "React"
- };
- const defaultImportSource = "react";
- const getVariables = ({
- opts,
- jsx
- }) => {
- var _a, _b, _c, _d;
- const interfaces = [];
- const props = [];
- const imports = [];
- const exports = [];
- const ctx = {
- importSource: (_a = opts.importSource) != null ? _a : defaultImportSource,
- exportIdentifier: core.types.identifier(opts.state.componentName),
- opts,
- interfaces,
- props,
- imports,
- exports
- };
- if (opts.jsxRuntime !== "automatic") {
- imports.push(
- getJsxRuntimeImport((_b = opts.jsxRuntimeImport) != null ? _b : defaultJsxRuntimeImport)
- );
- }
- if (opts.native) {
- getOrCreateImport(ctx, "react-native-svg").specifiers.push(
- core.types.importDefaultSpecifier(core.types.identifier("Svg"))
- );
- }
- if (opts.titleProp || opts.descProp) {
- const properties = [];
- const propertySignatures = [];
- const createProperty = (attr) => {
- return core.types.objectProperty(
- core.types.identifier(attr),
- core.types.identifier(attr),
- false,
- true
- );
- };
- const createSignature = (attr) => {
- return tsOptionalPropertySignature(
- core.types.identifier(attr),
- core.types.tsTypeAnnotation(core.types.tsStringKeyword())
- );
- };
- if (opts.titleProp) {
- properties.push(createProperty("title"), createProperty("titleId"));
- if (opts.typescript) {
- propertySignatures.push(
- createSignature("title"),
- createSignature("titleId")
- );
- }
- }
- if (opts.descProp) {
- properties.push(createProperty("desc"), createProperty("descId"));
- if (opts.typescript) {
- propertySignatures.push(
- createSignature("desc"),
- createSignature("descId")
- );
- }
- }
- const prop = core.types.objectPattern(properties);
- props.push(prop);
- if (opts.typescript) {
- interfaces.push(
- core.types.tsInterfaceDeclaration(
- core.types.identifier("SVGRProps"),
- null,
- null,
- core.types.tSInterfaceBody(propertySignatures)
- )
- );
- prop.typeAnnotation = core.types.tsTypeAnnotation(
- core.types.tsTypeReference(core.types.identifier("SVGRProps"))
- );
- }
- }
- if (opts.expandProps) {
- const identifier = core.types.identifier("props");
- if (core.types.isObjectPattern(props[0])) {
- props[0].properties.push(core.types.restElement(identifier));
- if (opts.typescript) {
- props[0].typeAnnotation = core.types.tsTypeAnnotation(
- core.types.tsIntersectionType([
- tsTypeReferenceSVGProps(ctx),
- props[0].typeAnnotation.typeAnnotation
- ])
- );
- }
- } else {
- props.push(identifier);
- if (opts.typescript) {
- identifier.typeAnnotation = core.types.tsTypeAnnotation(
- tsTypeReferenceSVGProps(ctx)
- );
- }
- }
- }
- if (opts.ref) {
- if (props.length === 0) {
- props.push(core.types.identifier("_"));
- }
- const prop = core.types.identifier("ref");
- props.push(prop);
- if (opts.typescript) {
- prop.typeAnnotation = core.types.tsTypeAnnotation(tsTypeReferenceSVGRef(ctx));
- }
- const forwardRef = core.types.identifier("forwardRef");
- const ForwardRef = core.types.identifier("ForwardRef");
- getOrCreateImport(ctx, ctx.importSource).specifiers.push(
- core.types.importSpecifier(forwardRef, forwardRef)
- );
- exports.push(
- core.types.variableDeclaration("const", [
- core.types.variableDeclarator(
- ForwardRef,
- core.types.callExpression(forwardRef, [ctx.exportIdentifier])
- )
- ])
- );
- ctx.exportIdentifier = ForwardRef;
- }
- if (opts.memo) {
- const memo = core.types.identifier("memo");
- const Memo = core.types.identifier("Memo");
- getOrCreateImport(ctx, ctx.importSource).specifiers.push(
- core.types.importSpecifier(memo, memo)
- );
- exports.push(
- core.types.variableDeclaration("const", [
- core.types.variableDeclarator(
- Memo,
- core.types.callExpression(memo, [ctx.exportIdentifier])
- )
- ])
- );
- ctx.exportIdentifier = Memo;
- }
- if (((_c = opts.state.caller) == null ? void 0 : _c.previousExport) || opts.exportType === "named") {
- if (!opts.namedExport) {
- throw new Error(`"namedExport" not specified`);
- }
- exports.push(
- core.types.exportNamedDeclaration(null, [
- core.types.exportSpecifier(ctx.exportIdentifier, core.types.identifier(opts.namedExport))
- ])
- );
- if ((_d = opts.state.caller) == null ? void 0 : _d.previousExport) {
- const previousExportAst = core.template.ast(opts.state.caller.previousExport);
- exports.push(
- ...Array.isArray(previousExportAst) ? previousExportAst : [previousExportAst]
- );
- }
- } else {
- exports.push(core.types.exportDefaultDeclaration(ctx.exportIdentifier));
- }
- return {
- componentName: opts.state.componentName,
- props,
- interfaces,
- imports,
- exports,
- jsx
- };
- };
- const plugin = (_, opts) => {
- const template = opts.template || defaultTemplate;
- const plugins = opts.typescript ? ["jsx", "typescript"] : ["jsx"];
- const tpl = core.template.smart({ plugins, preserveComments: true }).ast;
- return {
- visitor: {
- Program(path) {
- const jsx = path.node.body[0].expression;
- const variables = getVariables({
- opts,
- jsx
- });
- const body = template(variables, { options: opts, tpl });
- path.node.body = Array.isArray(body) ? body : [body];
- path.replaceWith(path.node);
- }
- }
- };
- };
- module.exports = plugin;
- //# sourceMappingURL=index.js.map
|