{"version":3,"file":"extend-plugin-index-files.mjs","sources":["../../../src/plops/utils/extend-plugin-index-files.ts"],"sourcesContent":["import * as jscodeshift from 'jscodeshift';\nimport camelCase from 'lodash/camelCase';\n\nconst j = jscodeshift.withParser('tsx');\n\ntype AppendType = 'content-type' | 'index' | 'routes';\n\ninterface AppendConfig {\n  type: AppendType;\n  singularName: string;\n}\n\n// Helper to check if a string is a valid JavaScript identifier\nconst isValidIdentifier = (str: string): boolean => {\n  return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(str);\n};\n\n// Helper to create the appropriate property based on type\nconst createProperty = (config: AppendConfig) => {\n  const { type, singularName } = config;\n  const camelCaseName = camelCase(singularName);\n  const varName = type === 'content-type' ? `${camelCaseName}Schema` : camelCaseName;\n\n  // Use string literal for key only if singularName is not a valid identifier\n  const keyNode = isValidIdentifier(singularName)\n    ? j.identifier(singularName)\n    : j.literal(singularName);\n\n  switch (type) {\n    case 'content-type':\n      return j.objectProperty(\n        keyNode,\n        j.objectExpression([j.objectProperty(j.identifier('schema'), j.identifier(varName))])\n      );\n    case 'index':\n      return j.objectProperty(keyNode, j.identifier(varName));\n    case 'routes':\n      return j.spreadElement(j.memberExpression(j.identifier(varName), j.identifier('routes')));\n    default:\n      throw new Error(`Unknown append type: ${type}`);\n  }\n};\n\n// Helper to check if property already exists\nconst hasExistingProperty = (obj: any, config: AppendConfig): boolean => {\n  const { type, singularName } = config;\n  if (!obj?.properties && !j.ArrayExpression.check(obj)) return false;\n\n  const elements = j.ArrayExpression.check(obj) ? obj.elements : obj.properties;\n  if (!elements) return false;\n\n  if (type === 'routes') {\n    // Check for spread elements ...camelCaseName.routes\n    const camelCaseName = camelCase(singularName);\n    return elements.some(\n      (element: any) =>\n        j.SpreadElement.check(element) &&\n        j.MemberExpression.check(element.argument) &&\n        j.Identifier.check(element.argument.object) &&\n        element.argument.object.name === camelCaseName &&\n        j.Identifier.check(element.argument.property) &&\n        element.argument.property.name === 'routes'\n    );\n  }\n\n  // For content-type and index, check for object property (both identifier and literal keys)\n  return elements.some(\n    (prop: any) =>\n      j.ObjectProperty.check(prop) &&\n      ((j.Identifier.check(prop.key) && prop.key.name === singularName) ||\n        (j.Literal.check(prop.key) && prop.key.value === singularName))\n  );\n};\n\n// Helper to add property to object if it doesn't exist\nconst addPropertyToObject = (obj: any, config: AppendConfig) => {\n  if (!obj || hasExistingProperty(obj, config)) return;\n\n  if (config.type === 'routes' && j.ArrayExpression.check(obj)) {\n    obj.elements.push(createRoutesElement(config));\n  } else if (obj.properties?.length >= 0) {\n    obj.properties.push(createProperty(config));\n  }\n};\n\n// Helper to find and add to routes array\nconst handleRoutesArray = (obj: any, config: AppendConfig) => {\n  if (!obj?.properties) return false;\n\n  const routesProp = obj.properties.find(\n    (prop: any) =>\n      j.ObjectProperty.check(prop) &&\n      ((j.Identifier.check(prop.key) && prop.key.name === 'routes') ||\n        (j.Literal.check(prop.key) && prop.key.value === 'routes')) &&\n      j.ArrayExpression.check(prop.value)\n  );\n\n  if (routesProp?.value) {\n    const routesArray = routesProp.value;\n    if (!hasExistingProperty(routesArray, config)) {\n      routesArray.elements = routesArray.elements || [];\n      routesArray.elements.push(createRoutesElement(config));\n    }\n    return true;\n  }\n\n  return false;\n};\n\n// Helper to create routes array element (always returns SpreadElement for routes)\nconst createRoutesElement = (config: AppendConfig) => {\n  const { singularName } = config;\n  const camelCaseName = camelCase(singularName);\n  return j.spreadElement(j.memberExpression(j.identifier(camelCaseName), j.identifier('routes')));\n};\n\n// Helper to create new export for routes\nconst createRoutesExport = (config: AppendConfig) => {\n  return j.arrowFunctionExpression(\n    [],\n    j.objectExpression([\n      j.objectProperty(j.identifier('type'), j.literal('content-api')),\n      j.objectProperty(j.identifier('routes'), j.arrayExpression([createRoutesElement(config)])),\n    ])\n  );\n};\n\n// Unified append function for all types\nexport const appendToFile = (template: string, config: AppendConfig): string => {\n  if (!config?.singularName || !config?.type) {\n    throw new Error('Invalid config: singularName and type are required');\n  }\n\n  const normalizedTemplate = template?.trim() || '';\n  const root = normalizedTemplate ? j(normalizedTemplate) : j(j.program([]));\n  const { type, singularName } = config;\n  const isEsm = detectModuleFormat(normalizedTemplate) === 'esm';\n\n  const camelCaseName = camelCase(singularName);\n  const varName = type === 'content-type' ? `${camelCaseName}Schema` : camelCaseName;\n  const source = type === 'content-type' ? `./${singularName}/schema.json` : `./${singularName}`;\n\n  addImportIfMissing(root, varName, source, isEsm);\n\n  if (isEsm) {\n    handleEsmExport(root, config, type);\n  } else {\n    handleCjsExport(root, config, type);\n  }\n\n  return root.toSource({ quote: 'single' });\n};\n\n// Helper to detect module format\nconst detectModuleFormat = (template: string): 'esm' | 'cjs' => {\n  const hasImport = /^import\\s/.test(template) || template.includes('import ');\n  const hasExportDefault = template.includes('export default');\n  const hasRequire = template.includes('require(');\n  const hasModuleExports = template.includes('module.exports');\n\n  if (hasImport || hasExportDefault) return 'esm';\n  if (hasRequire || hasModuleExports) return 'cjs';\n  return 'esm'; // Default to ESM\n};\n\n// Helper to insert statement at appropriate location\nconst insertStatement = (\n  root: jscodeshift.Collection<any>,\n  statement: any,\n  preferredLocation?: jscodeshift.Collection<any>\n) => {\n  if (preferredLocation && preferredLocation.length > 0) {\n    preferredLocation.at(-1).insertAfter(statement);\n  } else {\n    const firstStatement = root.find(j.Statement).at(0);\n    if (firstStatement.length > 0) {\n      firstStatement.insertBefore(statement);\n    } else {\n      handleEmptyFile(root, statement);\n    }\n  }\n};\n\n// Helper to add import/require if missing\nconst addImportIfMissing = (\n  root: jscodeshift.Collection<any>,\n  varName: string,\n  source: string,\n  isEsm: boolean\n) => {\n  if (isEsm) {\n    if (root.find(j.ImportDeclaration, { source: { value: source } }).length === 0) {\n      const importDecl = j.importDeclaration(\n        [j.importDefaultSpecifier(j.identifier(varName))],\n        j.literal(source)\n      );\n      insertStatement(root, importDecl, root.find(j.ImportDeclaration));\n    }\n  } else if (\n    root.find(j.VariableDeclarator, {\n      id: { name: varName },\n      init: { type: 'CallExpression', callee: { name: 'require' }, arguments: [{ value: source }] },\n    }).length === 0\n  ) {\n    const requireStmt = j.variableDeclaration('const', [\n      j.variableDeclarator(\n        j.identifier(varName),\n        j.callExpression(j.identifier('require'), [j.literal(source)])\n      ),\n    ]);\n\n    const requires = root\n      .find(j.VariableDeclaration)\n      .filter((path) =>\n        path.value.declarations.some(\n          (decl: any) => j.CallExpression.check(decl.init) && decl.init.callee?.name === 'require'\n        )\n      );\n\n    const useStrict = root\n      .find(j.ExpressionStatement)\n      .filter(\n        (path: any) =>\n          j.Literal.check(path.value.expression) &&\n          /use strict/.test(String(path.value.expression.value))\n      );\n\n    insertStatement(root, requireStmt, requires.length > 0 ? requires : useStrict);\n  }\n};\n\n// Helper to safely handle empty files\nconst handleEmptyFile = (root: jscodeshift.Collection<any>, firstStatement: any) => {\n  try {\n    // Check if we have any paths in the collection\n    const paths = root.paths();\n    if (paths.length === 0) {\n      // Completely empty collection - create new program\n      const newProgram = j.program([firstStatement]);\n      // Replace the entire root with new program\n      return root.replaceWith(newProgram);\n    }\n\n    // Get the first path (should be the program)\n    const rootPath = paths[0];\n    if (!rootPath || !rootPath.value) {\n      // Invalid root path - create new program\n      const newProgram = j.program([firstStatement]);\n      return root.replaceWith(newProgram);\n    }\n\n    // Check if it's a valid program node\n    if (j.Program.check(rootPath.value)) {\n      // Ensure body exists and add statement\n      if (!rootPath.value.body) {\n        rootPath.value.body = [];\n      }\n      rootPath.value.body.push(firstStatement);\n    } else {\n      // Not a program node - replace with new program\n      const newProgram = j.program([firstStatement]);\n      rootPath.replace(newProgram);\n    }\n  } catch (error: any) {\n    // Ultimate fallback - create a minimal working file\n    console.warn('Failed to handle empty file, creating new program:', error.message);\n    const newProgram = j.program([firstStatement]);\n    try {\n      root.replaceWith(newProgram);\n    } catch (replaceError) {\n      // Last resort - throw descriptive error\n      throw new Error(\n        `Unable to add statement to empty file: ${error.message}. Root collection may be invalid.`\n      );\n    }\n  }\n};\n\n// Helper to find the exported object regardless of export pattern\nconst findExportedObject = (root: jscodeshift.Collection<any>, exportedValue: any): any => {\n  // Case 1: Direct object export\n  if (j.ObjectExpression.check(exportedValue)) {\n    return exportedValue;\n  }\n\n  // Case 2: Function that returns an object\n  if (\n    j.FunctionExpression.check(exportedValue) ||\n    j.ArrowFunctionExpression.check(exportedValue) ||\n    j.FunctionDeclaration.check(exportedValue)\n  ) {\n    const body = exportedValue.body;\n    // Arrow function with object expression body: () => ({...})\n    if (j.ObjectExpression.check(body)) {\n      return body;\n    }\n    // Function with return statement in block\n    if (j.BlockStatement.check(body)) {\n      for (const stmt of body.body) {\n        if (j.ReturnStatement.check(stmt) && j.ObjectExpression.check(stmt.argument)) {\n          return stmt.argument;\n        }\n      }\n    }\n  }\n\n  // Case 3: Identifier reference to a variable\n  if (j.Identifier.check(exportedValue)) {\n    const varName = exportedValue.name;\n\n    // Find the variable declaration\n    const varDeclaration = root.find(j.VariableDeclarator, {\n      id: { name: varName },\n    });\n\n    if (varDeclaration.length > 0) {\n      const init = varDeclaration.get().value.init;\n\n      // If it's an object, return it\n      if (j.ObjectExpression.check(init)) {\n        return init;\n      }\n\n      // If it's a function, recursively check its return value\n      if (j.FunctionExpression.check(init) || j.ArrowFunctionExpression.check(init)) {\n        return findExportedObject(root, init);\n      }\n    }\n  }\n\n  return null;\n};\n\n// Helper to handle object export (common logic for ESM and CJS)\nconst handleObjectExport = (\n  obj: any,\n  config: AppendConfig,\n  type: AppendType,\n  setExport: (newExport: any) => void\n) => {\n  if (type === 'routes') {\n    if (!handleRoutesArray(obj, config)) {\n      setExport(createRoutesExport(config));\n    }\n  } else {\n    addPropertyToObject(obj, config);\n  }\n};\n\n// Handle ESM export default\nconst handleEsmExport = (\n  root: jscodeshift.Collection<any>,\n  config: AppendConfig,\n  type: AppendType\n) => {\n  const exports = root.find(j.ExportDefaultDeclaration);\n\n  if (exports.length === 0) {\n    const newExport =\n      type === 'routes' ? createRoutesExport(config) : j.objectExpression([createProperty(config)]);\n    insertStatement(root, j.exportDefaultDeclaration(newExport), root.find(j.Statement));\n  } else {\n    exports.forEach((path: any) => {\n      const decl = path.value.declaration;\n\n      // Find the actual object being exported\n      const exportedObject = findExportedObject(root, decl);\n\n      if (exportedObject) {\n        handleObjectExport(exportedObject, config, type, (newExport) => {\n          path.value.declaration = newExport;\n        });\n      } else {\n        // Fallback: replace the entire export\n        path.value.declaration =\n          type === 'routes'\n            ? createRoutesExport(config)\n            : j.objectExpression([createProperty(config)]);\n      }\n    });\n  }\n};\n\n// Handle CJS module.exports\nconst handleCjsExport = (\n  root: jscodeshift.Collection<any>,\n  config: AppendConfig,\n  type: AppendType\n) => {\n  const exports = root.find(j.AssignmentExpression, {\n    left: { type: 'MemberExpression', object: { name: 'module' }, property: { name: 'exports' } },\n  });\n\n  if (exports.length === 0) {\n    const newExport =\n      type === 'routes' ? createRoutesExport(config) : j.objectExpression([createProperty(config)]);\n    const moduleExportStmt = j.expressionStatement(\n      j.assignmentExpression(\n        '=',\n        j.memberExpression(j.identifier('module'), j.identifier('exports')),\n        newExport\n      )\n    );\n    insertStatement(root, moduleExportStmt, root.find(j.Statement));\n  } else {\n    exports.forEach((path: any) => {\n      const right = path.value.right;\n\n      // Find the actual object being exported\n      const exportedObject = findExportedObject(root, right);\n\n      if (exportedObject) {\n        handleObjectExport(exportedObject, config, type, (newExport) => {\n          path.value.right = newExport;\n        });\n      } else {\n        // Fallback: replace the entire export\n        path.value.right =\n          type === 'routes'\n            ? createRoutesExport(config)\n            : j.objectExpression([createProperty(config)]);\n      }\n    });\n  }\n};\n"],"names":["j","jscodeshift","withParser","isValidIdentifier","str","test","createProperty","config","type","singularName","camelCaseName","camelCase","varName","keyNode","identifier","literal","objectProperty","objectExpression","spreadElement","memberExpression","Error","hasExistingProperty","obj","properties","ArrayExpression","check","elements","some","element","SpreadElement","MemberExpression","argument","Identifier","object","name","property","prop","ObjectProperty","key","Literal","value","addPropertyToObject","push","createRoutesElement","length","handleRoutesArray","routesProp","find","routesArray","createRoutesExport","arrowFunctionExpression","arrayExpression","appendToFile","template","normalizedTemplate","trim","root","program","isEsm","detectModuleFormat","source","addImportIfMissing","handleEsmExport","handleCjsExport","toSource","quote","hasImport","includes","hasExportDefault","hasRequire","hasModuleExports","insertStatement","statement","preferredLocation","at","insertAfter","firstStatement","Statement","insertBefore","handleEmptyFile","ImportDeclaration","importDecl","importDeclaration","importDefaultSpecifier","VariableDeclarator","id","init","callee","arguments","requireStmt","variableDeclaration","variableDeclarator","callExpression","requires","VariableDeclaration","filter","path","declarations","decl","CallExpression","useStrict","ExpressionStatement","expression","String","paths","newProgram","replaceWith","rootPath","Program","body","replace","error","console","warn","message","replaceError","findExportedObject","exportedValue","ObjectExpression","FunctionExpression","ArrowFunctionExpression","FunctionDeclaration","BlockStatement","stmt","ReturnStatement","varDeclaration","get","handleObjectExport","setExport","exports","ExportDefaultDeclaration","newExport","exportDefaultDeclaration","forEach","declaration","exportedObject","AssignmentExpression","left","moduleExportStmt","expressionStatement","assignmentExpression","right"],"mappings":"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"}