dataverse-type-gen
Version:
TypeScript type generator for Dataverse entities and metadata
1 lines • 37.8 kB
Source Map (JSON)
{"version":3,"sources":["../src/processors/index.ts"],"names":[],"mappings":"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","file":"chunk-IF2SU3NK.mjs","sourcesContent":["import type { \n EntityDefinition, \n AttributeMetadata,\n LocalizedLabel\n} from '../types.js'\nimport type {\n GlobalOptionSetDefinition,\n PicklistAttributeMetadata,\n MultiSelectPicklistAttributeMetadata,\n LookupAttributeMetadata,\n StateAttributeMetadata,\n StatusAttributeMetadata\n} from '../client/index.js'\n\n/**\n * Related entity information for type-safe nested expands\n */\nexport interface RelatedEntityInfo {\n relationshipName: string // e.g., \"pum_program\"\n targetEntityLogicalName: string // e.g., \"pum_program\" \n targetEntitySetName: string // e.g., \"pum_programs\"\n relationshipType: 'OneToMany' | 'ManyToOne' | 'ManyToMany'\n}\n\n/**\n * Processed entity metadata for type generation\n */\nexport interface ProcessedEntityMetadata {\n logicalName: string\n schemaName: string\n displayName: string\n description?: string\n primaryIdAttribute: string\n primaryNameAttribute: string\n entitySetName: string\n isCustomEntity: boolean\n attributes: ProcessedAttributeMetadata[]\n optionSets: ProcessedOptionSet[]\n expandableProperties: string[] // Lookup fields + relationship names for $expand\n oneToManyRelationships: ProcessedRelationshipMetadata[]\n manyToOneRelationships: ProcessedRelationshipMetadata[]\n manyToManyRelationships: ProcessedManyToManyRelationshipMetadata[]\n /** Related entities with their full metadata for type-safe expands */\n relatedEntities: Record<string, RelatedEntityInfo>\n}\n\n/**\n * String attribute metadata for processing\n */\ninterface StringAttributeTypeMetadata {\n MaxLength?: number\n Format?: string\n}\n\n/**\n * Numeric attribute metadata for processing\n */\ninterface NumericAttributeTypeMetadata {\n MinValue?: number\n MaxValue?: number\n Precision?: number\n}\n\n/**\n * DateTime attribute metadata for processing\n */\ninterface DateTimeAttributeTypeMetadata {\n Format?: string\n}\n\n/**\n * Processed attribute metadata\n */\nexport interface ProcessedAttributeMetadata {\n logicalName: string\n schemaName: string\n displayName: string\n description?: string\n attributeType: string\n isCustomAttribute: boolean\n isValidForCreate: boolean\n isValidForRead: boolean\n isValidForUpdate: boolean\n requiredLevel: 'None' | 'SystemRequired' | 'ApplicationRequired' | 'Recommended'\n isPrimaryId: boolean\n isPrimaryName: boolean\n attributeOf?: string // For auxiliary attribute filtering\n // Type-specific properties\n maxLength?: number\n minValue?: number\n maxValue?: number\n precision?: number\n format?: string\n targets?: string[] // For lookup attributes\n optionSetName?: string // For picklist attributes\n globalOptionSet?: string // For global option sets\n isMultiSelect?: boolean // For multi-select picklists\n optionSet?: ProcessedOptionSet // For picklist attributes with full option set data\n}\n\n/**\n * Processed option set for type generation\n */\nexport interface ProcessedOptionSet {\n name: string\n displayName: string\n description?: string\n isGlobal: boolean\n isCustom: boolean\n options: ProcessedOption[]\n}\n\n/**\n * Processed option for constants generation\n */\nexport interface ProcessedOption {\n value: number\n label: string\n description?: string\n}\n\n/**\n * Processed relationship metadata for type generation\n */\nexport interface ProcessedRelationshipMetadata {\n schemaName: string\n referencedEntity: string\n referencedAttribute: string\n referencingEntity: string\n referencingAttribute: string\n isCustomRelationship: boolean\n}\n\n/**\n * Processed many-to-many relationship metadata for type generation\n */\nexport interface ProcessedManyToManyRelationshipMetadata {\n schemaName: string\n entity1LogicalName: string\n entity1IntersectAttribute: string\n entity2LogicalName: string\n entity2IntersectAttribute: string\n intersectEntityName: string\n isCustomRelationship: boolean\n}\n\n/**\n * Extract display name from localized label structure\n */\nfunction extractDisplayName(localizedLabel?: LocalizedLabel): string {\n if (!localizedLabel) return ''\n \n // Try user localized label first, then first available label\n const label = localizedLabel.UserLocalizedLabel?.Label || \n localizedLabel.LocalizedLabels?.[0]?.Label || \n ''\n \n return label\n}\n\n/**\n * Extract required level from metadata\n */\nfunction extractRequiredLevel(requiredLevel?: { Value: string }): 'None' | 'SystemRequired' | 'ApplicationRequired' | 'Recommended' {\n if (!requiredLevel?.Value) return 'None'\n \n switch (requiredLevel.Value) {\n case 'SystemRequired':\n return 'SystemRequired'\n case 'ApplicationRequired':\n return 'ApplicationRequired'\n case 'Recommended':\n return 'Recommended'\n default:\n return 'None'\n }\n}\n\n/**\n * Process entity metadata for type generation\n */\nexport function processEntityMetadata(entityMetadata: EntityDefinition, options?: { excludeSystemAuditRelationships?: boolean }): ProcessedEntityMetadata {\n const processed: ProcessedEntityMetadata = {\n logicalName: entityMetadata.LogicalName,\n schemaName: entityMetadata.SchemaName,\n displayName: extractDisplayName(entityMetadata.DisplayName) || entityMetadata.SchemaName,\n description: extractDisplayName(entityMetadata.Description),\n primaryIdAttribute: entityMetadata.PrimaryIdAttribute || '',\n primaryNameAttribute: entityMetadata.PrimaryNameAttribute || '',\n entitySetName: entityMetadata.EntitySetName || '',\n isCustomEntity: entityMetadata.IsCustomEntity,\n attributes: [],\n optionSets: [],\n expandableProperties: [],\n oneToManyRelationships: [],\n manyToOneRelationships: [],\n manyToManyRelationships: [],\n relatedEntities: {}\n }\n \n // Process attributes if available\n if (entityMetadata.Attributes) {\n const allProcessedAttributes = entityMetadata.Attributes.map(attr => processAttributeMetadata(attr))\n \n // Store all attributes initially (filtering will be applied during generation if configured)\n processed.attributes = allProcessedAttributes\n \n // Extract option sets from attributes\n processed.optionSets = extractOptionSetsFromAttributes(entityMetadata.Attributes)\n \n // Extract expandable properties (lookup fields for many-to-one relationships)\n const lookupFields = processed.attributes\n .filter(attr => attr.attributeType === 'Lookup')\n .map(attr => attr.schemaName)\n \n processed.expandableProperties = [...lookupFields]\n }\n \n // Process relationships if available\n if (entityMetadata.OneToManyRelationships) {\n processed.oneToManyRelationships = entityMetadata.OneToManyRelationships.map(rel => ({\n schemaName: rel.SchemaName,\n referencedEntity: rel.ReferencedEntity,\n referencedAttribute: rel.ReferencedAttribute,\n referencingEntity: rel.ReferencingEntity,\n referencingAttribute: rel.ReferencingAttribute,\n isCustomRelationship: rel.IsCustomRelationship\n }))\n \n // Add one-to-many relationship names to expandable properties\n const oneToManyNames = processed.oneToManyRelationships.map(rel => rel.schemaName)\n processed.expandableProperties.push(...oneToManyNames)\n }\n \n if (entityMetadata.ManyToOneRelationships) {\n processed.manyToOneRelationships = entityMetadata.ManyToOneRelationships.map(rel => ({\n schemaName: rel.SchemaName,\n referencedEntity: rel.ReferencedEntity,\n referencedAttribute: rel.ReferencedAttribute,\n referencingEntity: rel.ReferencingEntity,\n referencingAttribute: rel.ReferencingAttribute,\n isCustomRelationship: rel.IsCustomRelationship\n }))\n }\n \n if (entityMetadata.ManyToManyRelationships) {\n processed.manyToManyRelationships = entityMetadata.ManyToManyRelationships.map(rel => ({\n schemaName: rel.SchemaName,\n entity1LogicalName: rel.Entity1LogicalName,\n entity1IntersectAttribute: rel.Entity1IntersectAttribute,\n entity2LogicalName: rel.Entity2LogicalName,\n entity2IntersectAttribute: rel.Entity2IntersectAttribute,\n intersectEntityName: rel.IntersectEntityName,\n isCustomRelationship: rel.IsCustomRelationship\n }))\n \n // Add many-to-many relationship names to expandable properties\n const manyToManyNames = processed.manyToManyRelationships.map(rel => rel.schemaName)\n processed.expandableProperties.push(...manyToManyNames)\n }\n \n // Build related entities info from relationships and lookup attributes\n processed.relatedEntities = buildRelatedEntitiesInfo(processed, options?.excludeSystemAuditRelationships)\n \n return processed\n}\n\n/**\n * Build related entities information for type-safe expands\n */\nfunction buildRelatedEntitiesInfo(primaryEntity: ProcessedEntityMetadata, excludeSystemAuditRelationships = false): Record<string, RelatedEntityInfo> {\n const relatedEntities: Record<string, RelatedEntityInfo> = {}\n\n // System audit relationship patterns to exclude for systemuser\n const systemAuditPatterns = [\n /^lk_.*_createdby$/,\n /^lk_.*_modifiedby$/,\n /^lk_.*_createdonbehalfby$/,\n /^lk_.*_modifiedonbehalfby$/,\n /^user_.*$/,\n /^systemuser_.*$/,\n /^createdby_.*$/,\n /^modifiedby_.*$/,\n /^createdonbehalfby_.*$/,\n /^modifiedonbehalfby_.*$/\n ]\n\n // Process lookup attributes (many-to-one relationships)\n for (const attr of primaryEntity.attributes) {\n if (attr.attributeType === 'Lookup' && attr.targets) {\n for (const targetEntity of attr.targets) {\n const relationshipName = attr.logicalName.replace(/_value$/, '')\n \n // Skip if this is a duplicate key\n if (relatedEntities[relationshipName]) {\n continue\n }\n \n relatedEntities[relationshipName] = {\n relationshipName,\n targetEntityLogicalName: targetEntity,\n targetEntitySetName: `${targetEntity}s`, // Will be corrected when we have actual metadata\n relationshipType: 'ManyToOne'\n }\n }\n }\n }\n\n // Process one-to-many relationships\n for (const rel of primaryEntity.oneToManyRelationships) {\n // Skip system audit relationships if configured\n if (excludeSystemAuditRelationships && primaryEntity.logicalName === 'systemuser') {\n const isSystemAuditRelationship = systemAuditPatterns.some(pattern => \n pattern.test(rel.schemaName)\n )\n if (isSystemAuditRelationship) {\n continue\n }\n }\n \n // Skip if this is a duplicate key\n if (relatedEntities[rel.schemaName]) {\n continue\n }\n \n relatedEntities[rel.schemaName] = {\n relationshipName: rel.schemaName,\n targetEntityLogicalName: rel.referencingEntity,\n targetEntitySetName: `${rel.referencingEntity}s`, // Will be corrected when we have actual metadata\n relationshipType: 'OneToMany'\n }\n }\n\n // Process many-to-many relationships\n for (const rel of primaryEntity.manyToManyRelationships) {\n // Determine the target entity (the one that's not the current entity)\n const targetEntity = rel.entity1LogicalName === primaryEntity.logicalName \n ? rel.entity2LogicalName \n : rel.entity1LogicalName\n \n // Skip if this is a duplicate key\n if (relatedEntities[rel.schemaName]) {\n continue\n }\n \n relatedEntities[rel.schemaName] = {\n relationshipName: rel.schemaName,\n targetEntityLogicalName: targetEntity,\n targetEntitySetName: `${targetEntity}s`, // Will be corrected when we have actual metadata\n relationshipType: 'ManyToMany'\n }\n }\n\n return relatedEntities\n}\n\n/**\n * Extract all related entity names from processed metadata\n */\nexport function extractRelatedEntityNames(metadata: ProcessedEntityMetadata): string[] {\n const relatedEntityNames = new Set<string>()\n\n // From related entities info\n for (const relatedEntity of Object.values(metadata.relatedEntities)) {\n relatedEntityNames.add(relatedEntity.targetEntityLogicalName)\n }\n\n return Array.from(relatedEntityNames)\n}\n\n/**\n * Process individual attribute metadata\n */\nexport function processAttributeMetadata(attributeMetadata: AttributeMetadata): ProcessedAttributeMetadata {\n const processed: ProcessedAttributeMetadata = {\n logicalName: attributeMetadata.LogicalName,\n schemaName: attributeMetadata.SchemaName,\n displayName: extractDisplayName(attributeMetadata.DisplayName) || attributeMetadata.SchemaName,\n description: extractDisplayName(attributeMetadata.Description),\n attributeType: attributeMetadata.AttributeType,\n isCustomAttribute: attributeMetadata.IsCustomAttribute,\n isValidForCreate: attributeMetadata.IsValidForCreate,\n isValidForRead: attributeMetadata.IsValidForRead,\n isValidForUpdate: attributeMetadata.IsValidForUpdate,\n requiredLevel: extractRequiredLevel(attributeMetadata.RequiredLevel),\n isPrimaryId: attributeMetadata.IsPrimaryId || false,\n isPrimaryName: attributeMetadata.IsPrimaryName || false,\n attributeOf: attributeMetadata.AttributeOf\n }\n \n // Handle type-specific properties\n const odataType = (attributeMetadata as { '@odata.type'?: string })['@odata.type']\n \n // Normalize OData type by removing # prefix if present\n const normalizedODataType = odataType?.startsWith('#') ? odataType.substring(1) : odataType\n \n switch (normalizedODataType) {\n case 'Microsoft.Dynamics.CRM.PicklistAttributeMetadata':\n processPicklistAttribute(processed, attributeMetadata as PicklistAttributeMetadata)\n break\n \n case 'Microsoft.Dynamics.CRM.MultiSelectPicklistAttributeMetadata':\n processMultiSelectPicklistAttribute(processed, attributeMetadata as MultiSelectPicklistAttributeMetadata)\n break\n \n case 'Microsoft.Dynamics.CRM.LookupAttributeMetadata':\n processLookupAttribute(processed, attributeMetadata as LookupAttributeMetadata)\n break\n \n case 'Microsoft.Dynamics.CRM.StateAttributeMetadata':\n case 'Microsoft.Dynamics.CRM.StatusAttributeMetadata':\n processStateStatusAttribute(processed, attributeMetadata as StateAttributeMetadata | StatusAttributeMetadata)\n break\n \n case 'Microsoft.Dynamics.CRM.StringAttributeMetadata':\n processStringAttribute(processed, attributeMetadata as AttributeMetadata & StringAttributeTypeMetadata)\n break\n \n case 'Microsoft.Dynamics.CRM.IntegerAttributeMetadata':\n case 'Microsoft.Dynamics.CRM.BigIntAttributeMetadata':\n case 'Microsoft.Dynamics.CRM.DecimalAttributeMetadata':\n case 'Microsoft.Dynamics.CRM.DoubleAttributeMetadata':\n case 'Microsoft.Dynamics.CRM.MoneyAttributeMetadata':\n processNumericAttribute(processed, attributeMetadata as AttributeMetadata & NumericAttributeTypeMetadata)\n break\n \n case 'Microsoft.Dynamics.CRM.DateTimeAttributeMetadata':\n processDateTimeAttribute(processed, attributeMetadata as AttributeMetadata & DateTimeAttributeTypeMetadata)\n break\n }\n \n return processed\n}\n\n/**\n * Process picklist attribute\n */\nfunction processPicklistAttribute(processed: ProcessedAttributeMetadata, attr: PicklistAttributeMetadata): void {\n if (attr.OptionSet) {\n processed.optionSetName = attr.OptionSet.Name || `${processed.logicalName}_options`\n }\n \n if (attr.GlobalOptionSet) {\n processed.globalOptionSet = attr.GlobalOptionSet\n }\n}\n\n/**\n * Process multi-select picklist attribute\n */\nfunction processMultiSelectPicklistAttribute(processed: ProcessedAttributeMetadata, attr: MultiSelectPicklistAttributeMetadata): void {\n processed.isMultiSelect = true\n \n if (attr.OptionSet) {\n processed.optionSetName = attr.OptionSet.Name || `${processed.logicalName}_options`\n }\n \n if (attr.GlobalOptionSet) {\n processed.globalOptionSet = attr.GlobalOptionSet\n }\n}\n\n/**\n * Process lookup attribute\n */\nfunction processLookupAttribute(processed: ProcessedAttributeMetadata, attr: LookupAttributeMetadata): void {\n processed.targets = attr.Targets || []\n processed.format = attr.Format\n}\n\n/**\n * Process state/status attribute\n */\nfunction processStateStatusAttribute(processed: ProcessedAttributeMetadata, attr: StateAttributeMetadata | StatusAttributeMetadata): void {\n if (attr.OptionSet) {\n processed.optionSetName = attr.OptionSet.Name || `${processed.logicalName}_options`\n }\n}\n\n/**\n * Process string attribute\n */\nfunction processStringAttribute(processed: ProcessedAttributeMetadata, attr: AttributeMetadata & StringAttributeTypeMetadata): void {\n if (attr.MaxLength !== undefined) {\n processed.maxLength = attr.MaxLength\n }\n if (attr.Format) {\n processed.format = attr.Format\n }\n}\n\n/**\n * Process numeric attribute\n */\nfunction processNumericAttribute(processed: ProcessedAttributeMetadata, attr: AttributeMetadata & NumericAttributeTypeMetadata): void {\n if (attr.MinValue !== undefined) {\n processed.minValue = attr.MinValue\n }\n if (attr.MaxValue !== undefined) {\n processed.maxValue = attr.MaxValue\n }\n if (attr.Precision !== undefined) {\n processed.precision = attr.Precision\n }\n}\n\n/**\n * Process datetime attribute\n */\nfunction processDateTimeAttribute(processed: ProcessedAttributeMetadata, attr: AttributeMetadata & DateTimeAttributeTypeMetadata): void {\n if (attr.Format) {\n processed.format = attr.Format\n }\n}\n\n/**\n * Extract option sets from entity attributes\n */\nexport function extractOptionSetsFromAttributes(attributes: AttributeMetadata[]): ProcessedOptionSet[] {\n const optionSets: ProcessedOptionSet[] = []\n \n for (const attr of attributes) {\n const odataType = (attr as { '@odata.type'?: string })['@odata.type']\n \n // Normalize OData type by removing # prefix if present\n const normalizedODataType = odataType?.startsWith('#') ? odataType.substring(1) : odataType\n \n if (normalizedODataType?.includes('PicklistAttributeMetadata') || \n normalizedODataType?.includes('StateAttributeMetadata') || \n normalizedODataType?.includes('StatusAttributeMetadata')) {\n \n const picklistAttr = attr as PicklistAttributeMetadata\n \n if (picklistAttr.OptionSet && !picklistAttr.GlobalOptionSet) {\n // Local option set\n const processedOptionSet = processOptionSet(picklistAttr.OptionSet, attr.LogicalName)\n if (processedOptionSet) {\n optionSets.push(processedOptionSet)\n }\n }\n }\n }\n \n return optionSets\n}\n\n/**\n * Process option set metadata\n */\nexport function processOptionSet(\n optionSetMetadata: PicklistAttributeMetadata['OptionSet'] | GlobalOptionSetDefinition,\n fallbackName?: string\n): ProcessedOptionSet | null {\n if (!optionSetMetadata?.Options) return null\n \n const processed: ProcessedOptionSet = {\n name: optionSetMetadata.Name || fallbackName || 'unknown_optionset',\n displayName: extractDisplayName(optionSetMetadata.DisplayName) || optionSetMetadata.Name || fallbackName || 'Unknown',\n description: extractDisplayName((optionSetMetadata as { Description?: LocalizedLabel }).Description),\n isGlobal: (optionSetMetadata as GlobalOptionSetDefinition).IsGlobal || false,\n isCustom: (optionSetMetadata as GlobalOptionSetDefinition).IsCustomOptionSet || (optionSetMetadata as { IsCustomOptionSet?: boolean }).IsCustomOptionSet || false,\n options: []\n }\n \n // Process options\n processed.options = optionSetMetadata.Options.map(option => ({\n value: option.Value,\n label: extractDisplayName(option.Label) || option.Value.toString(),\n description: extractDisplayName((option as { Description?: LocalizedLabel }).Description)\n }))\n \n return processed\n}\n\n/**\n * Process global option set\n */\nexport function processGlobalOptionSet(globalOptionSet: GlobalOptionSetDefinition): ProcessedOptionSet {\n return {\n name: globalOptionSet.Name,\n displayName: extractDisplayName(globalOptionSet.DisplayName) || globalOptionSet.Name,\n description: extractDisplayName(globalOptionSet.Description),\n isGlobal: globalOptionSet.IsGlobal,\n isCustom: globalOptionSet.IsCustomOptionSet,\n options: globalOptionSet.Options.map(option => ({\n value: option.Value,\n label: extractDisplayName(option.Label) || option.Value.toString(),\n description: extractDisplayName((option as { Description?: LocalizedLabel }).Description)\n }))\n }\n}\n\n/**\n * Merge processed option sets, avoiding duplicates\n */\nexport function mergeOptionSets(optionSets: ProcessedOptionSet[]): ProcessedOptionSet[] {\n const uniqueOptionSets = new Map<string, ProcessedOptionSet>()\n \n for (const optionSet of optionSets) {\n const key = optionSet.name\n if (!uniqueOptionSets.has(key)) {\n uniqueOptionSets.set(key, optionSet)\n }\n }\n \n return Array.from(uniqueOptionSets.values())\n}\n\n/**\n * Filter attributes by type\n */\nexport function filterAttributesByType(\n attributes: ProcessedAttributeMetadata[], \n types: string[]\n): ProcessedAttributeMetadata[] {\n return attributes.filter(attr => types.includes(attr.attributeType))\n}\n\n/**\n * Get primary attributes (ID and Name)\n */\nexport function getPrimaryAttributes(attributes: ProcessedAttributeMetadata[]): {\n primaryId?: ProcessedAttributeMetadata\n primaryName?: ProcessedAttributeMetadata\n} {\n return {\n primaryId: attributes.find(attr => attr.isPrimaryId),\n primaryName: attributes.find(attr => attr.isPrimaryName)\n }\n}\n\n/**\n * Group attributes by type\n */\nexport function groupAttributesByType(attributes: ProcessedAttributeMetadata[]): Record<string, ProcessedAttributeMetadata[]> {\n const groups: Record<string, ProcessedAttributeMetadata[]> = {}\n \n for (const attr of attributes) {\n if (!groups[attr.attributeType]) {\n groups[attr.attributeType] = []\n }\n groups[attr.attributeType].push(attr)\n }\n \n return groups\n}\n\n/**\n * Get lookup attributes with their targets\n */\nexport function getLookupAttributes(attributes: ProcessedAttributeMetadata[]): Array<ProcessedAttributeMetadata & { targets: string[] }> {\n return attributes\n .filter(attr => attr.attributeType === 'Lookup' && attr.targets)\n .map(attr => ({ ...attr, targets: attr.targets! }))\n}\n\n/**\n * Get option set attributes\n */\nexport function getOptionSetAttributes(attributes: ProcessedAttributeMetadata[]): ProcessedAttributeMetadata[] {\n return attributes.filter(attr => \n attr.attributeType === 'Picklist' || \n attr.attributeType === 'MultiSelectPicklist' ||\n attr.attributeType === 'State' ||\n attr.attributeType === 'Status'\n )\n}\n\n/**\n * Filter out auxiliary attributes using AttributeOf field\n * Auxiliary attributes are system-generated fields like lookup name fields that reference other attributes\n * \n * @param attributes - Array of processed attribute metadata\n * @returns Filtered array without auxiliary attributes\n */\nexport function filterAuxiliaryAttributes(attributes: ProcessedAttributeMetadata[]): ProcessedAttributeMetadata[] {\n return attributes.filter(attr => !attr.attributeOf)\n}\n\n/**\n * Validate processed metadata\n */\nexport function validateProcessedMetadata(metadata: ProcessedEntityMetadata): {\n isValid: boolean\n errors: string[]\n warnings: string[]\n} {\n const errors: string[] = []\n const warnings: string[] = []\n \n // Required fields validation\n if (!metadata.logicalName) {\n errors.push('Missing logical name')\n }\n \n if (!metadata.schemaName) {\n errors.push('Missing schema name')\n }\n \n if (!metadata.primaryIdAttribute) {\n warnings.push('Missing primary ID attribute')\n }\n \n if (!metadata.primaryNameAttribute) {\n warnings.push('Missing primary name attribute')\n }\n \n // Attributes validation\n if (metadata.attributes.length === 0) {\n warnings.push('No attributes found')\n }\n \n // Check for duplicate attribute logical names\n const logicalNames = new Set<string>()\n for (const attr of metadata.attributes) {\n if (logicalNames.has(attr.logicalName)) {\n errors.push(`Duplicate attribute logical name: ${attr.logicalName}`)\n }\n logicalNames.add(attr.logicalName)\n }\n \n // Option sets validation\n for (const optionSet of metadata.optionSets) {\n if (optionSet.options.length === 0) {\n warnings.push(`Option set '${optionSet.name}' has no options`)\n }\n \n // Check for duplicate option values\n const values = new Set<number>()\n for (const option of optionSet.options) {\n if (values.has(option.value)) {\n errors.push(`Duplicate option value in '${optionSet.name}': ${option.value}`)\n }\n values.add(option.value)\n }\n }\n \n return {\n isValid: errors.length === 0,\n errors,\n warnings\n }\n}"]}