UNPKG

flowbite-react

Version:

Official React components built for Flowbite and Tailwind CSS

1 lines 9.55 kB
{"version":3,"file":"update-build-config.cjs","sources":["../../../src/cli/utils/update-build-config.ts"],"sourcesContent":["import MagicString from \"magic-string\";\nimport type { ArrayExpression, Expression, IdentifierReference, ObjectExpression } from \"oxc-parser\";\nimport { parseSync, Visitor } from \"oxc-parser\";\nimport { addImport } from \"./add-import\";\n\ninterface PluginsArrayInfo {\n arrayStart: number;\n arrayEnd: number;\n hasElements: boolean;\n lastElementEnd?: number;\n pluginExists: boolean;\n}\n\ninterface BuildOptionsInfo {\n objectStart: number;\n objectEnd: number;\n lastPropertyEnd?: number;\n hasProperties: boolean;\n}\n\nfunction isIdentifier(node: Expression): node is IdentifierReference {\n return node.type === \"Identifier\";\n}\n\nfunction isMemberExpression(\n node: Expression,\n): node is Expression & { type: \"MemberExpression\"; object: Expression; property: { name?: string } } {\n return node.type === \"MemberExpression\";\n}\n\nfunction isObjectExpression(node: Expression | ObjectExpression): node is ObjectExpression {\n return node.type === \"ObjectExpression\";\n}\n\nfunction isArrayExpression(node: Expression | ArrayExpression): node is ArrayExpression {\n return node.type === \"ArrayExpression\";\n}\n\n/**\n * Updates the build configuration by adding a plugin to the build options.\n *\n * @param {Object} options - The options for updating the build config.\n * @param {string} options.content - The source code content to modify.\n * @param {string} options.pluginName - The name to use for the imported plugin.\n * @param {string} options.pluginImportPath - The import path for the plugin.\n * @returns {string} The modified source code with the plugin added.\n */\nexport function updateBuildConfig({\n content,\n pluginName,\n pluginImportPath,\n}: {\n content: string;\n pluginName: string;\n pluginImportPath: string;\n}): string {\n const result = parseSync(\"config.ts\", content);\n\n if (result.errors.length > 0) {\n return content;\n }\n\n let pluginsArrayInfo: PluginsArrayInfo | null = null;\n let buildOptionsInfo: BuildOptionsInfo | null = null;\n\n const visitor = new Visitor({\n CallExpression(node) {\n const { callee } = node;\n\n let isBuildCall = false;\n\n if (isIdentifier(callee) && callee.name === \"build\") {\n isBuildCall = true;\n } else if (\n isMemberExpression(callee) &&\n isIdentifier(callee.object) &&\n callee.object.name === \"Bun\" &&\n callee.property.name === \"build\"\n ) {\n isBuildCall = true;\n }\n\n if (!isBuildCall || node.arguments.length === 0) return;\n\n const firstArg = node.arguments[0] as Expression;\n if (!isObjectExpression(firstArg)) return;\n\n const properties = firstArg.properties;\n\n buildOptionsInfo = {\n objectStart: firstArg.start,\n objectEnd: firstArg.end,\n hasProperties: properties.length > 0,\n };\n\n if (properties.length > 0) {\n const lastProp = properties[properties.length - 1];\n buildOptionsInfo.lastPropertyEnd = lastProp.end;\n }\n\n for (const prop of properties) {\n if (prop.type === \"SpreadElement\") continue;\n\n let isPluginsKey = false;\n if (prop.key.type === \"Identifier\" && prop.key.name === \"plugins\") {\n isPluginsKey = true;\n } else if (prop.key.type === \"Literal\" && prop.key.value === \"plugins\") {\n isPluginsKey = true;\n }\n\n if (!isPluginsKey) continue;\n\n const propValue = prop.value;\n if (isArrayExpression(propValue)) {\n const elements = propValue.elements;\n const pluginExists = elements.some((el) => el !== null && el.type === \"Identifier\" && el.name === pluginName);\n\n let lastElementEnd: number | undefined;\n if (elements.length > 0) {\n const lastElement = elements[elements.length - 1];\n if (lastElement) {\n lastElementEnd = lastElement.end;\n }\n }\n\n pluginsArrayInfo = {\n arrayStart: propValue.start,\n arrayEnd: propValue.end,\n hasElements: elements.length > 0,\n lastElementEnd,\n pluginExists,\n };\n }\n break;\n }\n },\n });\n\n visitor.visit(result.program);\n\n const finalBuildOptions = buildOptionsInfo as BuildOptionsInfo | null;\n const finalPluginsArray = pluginsArrayInfo as PluginsArrayInfo | null;\n\n if (!finalBuildOptions) {\n return addImport({\n content,\n importName: pluginName,\n importPath: pluginImportPath,\n });\n }\n\n const s = new MagicString(content);\n\n if (finalPluginsArray) {\n if (!finalPluginsArray.pluginExists) {\n if (finalPluginsArray.hasElements && finalPluginsArray.lastElementEnd) {\n s.appendLeft(finalPluginsArray.lastElementEnd, `, ${pluginName}`);\n } else {\n s.appendLeft(finalPluginsArray.arrayStart + 1, pluginName);\n }\n }\n } else {\n if (finalBuildOptions.hasProperties && finalBuildOptions.lastPropertyEnd) {\n s.appendLeft(finalBuildOptions.lastPropertyEnd, `,\\n plugins: [${pluginName}]`);\n } else {\n s.appendLeft(finalBuildOptions.objectStart + 1, ` plugins: [${pluginName}] `);\n }\n }\n\n let modifiedCode = s.toString();\n\n modifiedCode = addImport({\n content: modifiedCode,\n importName: pluginName,\n importPath: pluginImportPath,\n });\n\n return modifiedCode;\n}\n"],"names":["parseSync","Visitor","addImport"],"mappings":"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"}