{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/plugin/builtin/enum-constants/generate-enum-constants.ts","../../../../src/plugin/builtin/enum-constants/process-enum-type.ts","../../../../src/plugin/builtin/enum-constants/index.ts"],"sourcesContent":["import type { EnumDefinition } from \"./types\";\n\n/**\n * Generate enum constant definitions from collected metadata.\n * @param allEnums - All collected enum definitions\n * @returns Generated enum constant definitions\n */\nexport function generateUnifiedEnumConstants(allEnums: EnumDefinition[]): string {\n  if (allEnums.length === 0) {\n    return \"\";\n  }\n\n  const enumMap = new Map<string, EnumDefinition>();\n  for (const enumDef of allEnums) {\n    enumMap.set(enumDef.name, enumDef);\n  }\n\n  const enumDefs = Array.from(enumMap.values())\n    .map((e) => {\n      const members = e.values\n        .map((v) => {\n          const key = v.value.replace(/[-\\s]/g, \"_\");\n          return `  \"${key}\": \"${v.value}\"`;\n        })\n        .join(\",\\n\");\n\n      const hasDescriptions = e.values.some((v) => v.description);\n      let jsDoc = \"\";\n      if (e.fieldDescription || hasDescriptions) {\n        const lines: string[] = [];\n\n        if (e.fieldDescription) {\n          lines.push(` * ${e.fieldDescription}`);\n          if (hasDescriptions) {\n            lines.push(\" *\");\n          }\n        }\n\n        if (hasDescriptions) {\n          const propertyDocs = e.values.map((v) => {\n            const key = v.value.replace(/[-\\s]/g, \"_\");\n            return ` * @property ${[key, v.description].filter(Boolean).join(\" - \")}`;\n          });\n          lines.push(...propertyDocs);\n        }\n\n        if (lines.length > 0) {\n          jsDoc = `/**\\n${lines.join(\"\\n\")}\\n */\\n`;\n        }\n      }\n\n      const constDef = `${jsDoc}export const ${e.name} = {\\n${members}\\n} as const;`;\n      const typeDef = `export type ${e.name} = (typeof ${e.name})[keyof typeof ${e.name}];`;\n      return `${constDef}\\n${typeDef}`;\n    })\n    .join(\"\\n\\n\");\n\n  if (!enumDefs) {\n    return \"\";\n  }\n\n  return enumDefs + \"\\n\";\n}\n","import type { TailorDBType } from \"#/parser/service/tailordb/types\";\nimport type { EnumConstantMetadata } from \"./types\";\n\nfunction capitalizeFirst(str: string): string {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nfunction collectEnums(type: TailorDBType): EnumConstantMetadata[\"enums\"] {\n  const enums: EnumConstantMetadata[\"enums\"] = [];\n\n  for (const [fieldName, parsedField] of Object.entries(type.fields)) {\n    if (parsedField.config.type === \"enum\" && parsedField.config.allowedValues) {\n      const enumTypeName = `${type.name}${capitalizeFirst(fieldName)}`;\n      enums.push({\n        name: enumTypeName,\n        values: parsedField.config.allowedValues,\n        fieldDescription: parsedField.config.description,\n      });\n    }\n\n    // Process nested fields\n    if (parsedField.config.type === \"nested\" && parsedField.config.fields) {\n      for (const [nestedFieldName, nestedFieldConfig] of Object.entries(\n        parsedField.config.fields,\n      )) {\n        if (nestedFieldConfig.type === \"enum\" && nestedFieldConfig.allowedValues) {\n          const fullFieldName = `${fieldName}${capitalizeFirst(nestedFieldName)}`;\n          const enumTypeName = `${type.name}${capitalizeFirst(fullFieldName)}`;\n          enums.push({\n            name: enumTypeName,\n            values: nestedFieldConfig.allowedValues,\n            fieldDescription: nestedFieldConfig.description,\n          });\n        }\n      }\n    }\n  }\n\n  return enums;\n}\n\n/**\n * Process a TailorDB table and extract enum metadata.\n * @param type - The parsed TailorDB table to process\n * @returns Enum constant metadata for the table\n */\nexport async function processEnumType(type: TailorDBType): Promise<EnumConstantMetadata> {\n  const enums = collectEnums(type);\n\n  return {\n    name: type.name,\n    enums,\n  };\n}\n","import { generateUnifiedEnumConstants } from \"./generate-enum-constants\";\nimport { processEnumType } from \"./process-enum-type\";\nimport type { Plugin, GeneratorResult, TailorDBReadyContext } from \"#/plugin/types\";\nimport type { EnumDefinition } from \"./types\";\n\n/** Unique identifier for the enum constants generator plugin. */\nexport const EnumConstantsGeneratorID = \"@tailor-platform/enum-constants\";\n\ntype EnumConstantsPluginOptions = {\n  distPath: string;\n};\n\n/**\n * Plugin that generates enum constants from TailorDB table definitions.\n * @param options - Plugin options\n * @param options.distPath - Output file path for generated constants\n * @returns Plugin instance with onTailorDBReady hook\n */\nexport function enumConstantsPlugin(\n  options: EnumConstantsPluginOptions,\n): Plugin<unknown, EnumConstantsPluginOptions> {\n  return {\n    id: EnumConstantsGeneratorID,\n    description: \"Generates enum constants from TailorDB table definitions\",\n    pluginConfig: options,\n\n    async onTailorDBReady(\n      ctx: TailorDBReadyContext<EnumConstantsPluginOptions>,\n    ): Promise<GeneratorResult> {\n      const allEnums: EnumDefinition[] = [];\n\n      for (const ns of ctx.tailordb) {\n        for (const type of Object.values(ns.tables)) {\n          const metadata = await processEnumType(type);\n          allEnums.push(...metadata.enums);\n        }\n      }\n\n      const files: GeneratorResult[\"files\"] = [];\n      if (allEnums.length > 0) {\n        const content = generateUnifiedEnumConstants(allEnums);\n        files.push({\n          path: ctx.pluginConfig.distPath,\n          content,\n        });\n      }\n\n      return { files };\n    },\n  };\n}\n"],"mappings":"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"}