@odata2ts/odata2ts 0.39.1 → 0.40.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/LICENSE +21 -21
  3. package/README.md +81 -81
  4. package/lib/FactoryFunctionModel.d.ts +2 -2
  5. package/lib/FactoryFunctionModel.js.map +1 -1
  6. package/lib/NamingModel.js.map +1 -1
  7. package/lib/OptionModel.d.ts +3 -3
  8. package/lib/OptionModel.js.map +1 -1
  9. package/lib/TypeModel.js.map +1 -1
  10. package/lib/app.js.map +1 -1
  11. package/lib/cli/cli.js.map +1 -1
  12. package/lib/cli/index.js.map +1 -1
  13. package/lib/cli/processCliArgs.js.map +1 -1
  14. package/lib/cli/processConfigFile.js.map +1 -1
  15. package/lib/cli/serviceGenerationRun.js.map +1 -1
  16. package/lib/data-model/DataModel.js.map +1 -1
  17. package/lib/data-model/DataModelDigestion.js +4 -7
  18. package/lib/data-model/DataModelDigestion.js.map +1 -1
  19. package/lib/data-model/DataModelDigestionV2.js.map +1 -1
  20. package/lib/data-model/DataModelDigestionV4.js.map +1 -1
  21. package/lib/data-model/DataTypeModel.js.map +1 -1
  22. package/lib/data-model/NamingHelper.js.map +1 -1
  23. package/lib/data-model/ServiceConfigHelper.js.map +1 -1
  24. package/lib/data-model/edmx/ODataEdmxModelBase.js.map +1 -1
  25. package/lib/data-model/edmx/ODataEdmxModelV3.js.map +1 -1
  26. package/lib/data-model/edmx/ODataEdmxModelV4.js.map +1 -1
  27. package/lib/data-model/validation/NameClashValidator.js.map +1 -1
  28. package/lib/data-model/validation/NameValidator.js.map +1 -1
  29. package/lib/data-model/validation/NoopValidator.js.map +1 -1
  30. package/lib/defaultConfig.js +1 -1
  31. package/lib/defaultConfig.js.map +1 -1
  32. package/lib/download/downloadMetadata.js.map +1 -1
  33. package/lib/download/index.js.map +1 -1
  34. package/lib/download/storeMetadata.js.map +1 -1
  35. package/lib/evaluateConfig.js.map +1 -1
  36. package/lib/generator/ImportContainer.js.map +1 -1
  37. package/lib/generator/ImportedNameValidator.js.map +1 -1
  38. package/lib/generator/ModelGenerator.js +18 -9
  39. package/lib/generator/ModelGenerator.js.map +1 -1
  40. package/lib/generator/QueryObjectGenerator.js +9 -5
  41. package/lib/generator/QueryObjectGenerator.js.map +1 -1
  42. package/lib/generator/ServiceGenerator.d.ts +1 -1
  43. package/lib/generator/ServiceGenerator.js +9 -5
  44. package/lib/generator/ServiceGenerator.js.map +1 -1
  45. package/lib/generator/import/ImportObjects.d.ts +6 -3
  46. package/lib/generator/import/ImportObjects.js +6 -6
  47. package/lib/generator/import/ImportObjects.js.map +1 -1
  48. package/lib/generator/index.js.map +1 -1
  49. package/lib/index.js.map +1 -1
  50. package/lib/project/FileHandler.js.map +1 -1
  51. package/lib/project/ProjectManager.js.map +1 -1
  52. package/lib/project/TsMorphHelper.js.map +1 -1
  53. package/lib/project/formatter/BaseFormatter.js.map +1 -1
  54. package/lib/project/formatter/FileFormatter.js.map +1 -1
  55. package/lib/project/formatter/NoopFormatter.js.map +1 -1
  56. package/lib/project/formatter/PrettierFormatter.js.map +1 -1
  57. package/lib/project/formatter/index.js.map +1 -1
  58. package/lib/project/logger/logFilePath.js.map +1 -1
  59. package/lib/run-cli.js +0 -0
  60. package/lib/run-cli.js.map +1 -1
  61. package/package.json +10 -11
@@ -1 +1 @@
1
- {"version":3,"file":"DataModel.js","sourceRoot":"","sources":["../../src/data-model/DataModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { MappedConverterChains } from \"@odata2ts/converter-runtime\";\r\nimport { ODataTypesV2, ODataTypesV4 } from \"@odata2ts/odata-core\";\r\n\r\nimport {\r\n ActionImportType,\r\n ComplexType,\r\n DataTypes,\r\n EntityContainerModel,\r\n EntitySetType,\r\n EntityType,\r\n EnumType,\r\n FunctionImportType,\r\n ModelType,\r\n ODataVersion,\r\n OperationType,\r\n OperationTypes,\r\n PropertyModel,\r\n SingletonType,\r\n} from \"./DataTypeModel.js\";\r\nimport { ValidationError } from \"./validation/NameValidator.js\";\r\n\r\nexport interface ProjectFiles {\r\n model: string;\r\n qObject: string;\r\n service: string;\r\n}\r\n\r\n/**\r\n * Each namespace is represented as tuple: 1. the namespace 2. the alias, if any.\r\n */\r\nexport type NamespaceWithAlias = [string, string?];\r\n\r\nexport function withNamespace(ns: string, name: string) {\r\n // this supports the edge case of an empty string as namespace which isn't really valid according to spec (see CSDL)\r\n return ns ? `${ns}.${name}` : name;\r\n}\r\n\r\nexport class DataModel {\r\n private readonly converters: MappedConverterChains;\r\n private nameValidation: Map<string, ValidationError[]> | undefined;\r\n\r\n private models = new Map<string, EntityType | ComplexType | EnumType>();\r\n /**\r\n * Stores unbound operations by their fully qualified name.\r\n * @private\r\n */\r\n private unboundOperationTypes = new Map<string, OperationType>();\r\n /**\r\n * Stores operations bound to an entity type by the fully qualified name of the binding entity, e.g.\r\n * \"Trippin.Person\".\r\n * @private\r\n */\r\n private entityBoundOperationTypes = new Map<string, Array<OperationType>>();\r\n /**\r\n * Stores operations bound to an entity collection by the fully qualified name of the binding entity, e.g.\r\n * \"Trippin.Person\".\r\n * @private\r\n */\r\n private entityCollectionBoundOperationTypes = new Map<string, Array<OperationType>>();\r\n /**\r\n * Stores own type definitions which map to primitive types.\r\n * @private\r\n */\r\n private typeDefinitions = new Map<string, string>();\r\n private readonly namespace2Alias: { [ns: string]: string };\r\n private aliases: Record<string, string> = {};\r\n private container: EntityContainerModel = { entitySets: {}, singletons: {}, functions: {}, actions: {} };\r\n\r\n constructor(\r\n namespaces: Array<NamespaceWithAlias>,\r\n private version: ODataVersion,\r\n converters: MappedConverterChains = new Map()\r\n ) {\r\n this.converters = converters;\r\n this.namespace2Alias = namespaces.reduce<Record<string, string>>((col, [ns, alias]) => {\r\n if (alias) {\r\n col[ns] = alias;\r\n }\r\n return col;\r\n }, {});\r\n }\r\n\r\n /**\r\n * OData version: 2.0 or 4.0.\r\n * @returns\r\n */\r\n public getODataVersion() {\r\n return this.version;\r\n }\r\n\r\n public isV2() {\r\n return this.version === ODataVersion.V2;\r\n }\r\n\r\n public isV4() {\r\n return this.version === ODataVersion.V4;\r\n }\r\n\r\n private retrieveType<T>(fqName: string, haystack: Map<string, T>): T | undefined {\r\n return haystack.get(fqName) || (this.aliases[fqName] ? haystack.get(this.aliases[fqName]) : undefined);\r\n }\r\n\r\n private addAlias(namespace: string, name: string) {\r\n const alias = this.namespace2Alias[namespace];\r\n if (alias) {\r\n this.aliases[withNamespace(alias, name)] = withNamespace(namespace, name);\r\n }\r\n }\r\n\r\n public addTypeDefinition(namespace: string, name: string, type: string) {\r\n const fqName = withNamespace(namespace, name);\r\n this.typeDefinitions.set(fqName, type);\r\n this.addAlias(namespace, name);\r\n }\r\n\r\n public getPrimitiveType(fqName: string): string | undefined {\r\n return this.retrieveType(fqName, this.typeDefinitions);\r\n }\r\n\r\n public getModel(fqName: string) {\r\n return this.retrieveType(fqName, this.models);\r\n }\r\n\r\n public getModelTypes(): Array<ModelType> {\r\n return [...this.models.values()];\r\n }\r\n\r\n public addEntityType(namespace: string, name: string, model: Omit<EntityType, \"dataType\">) {\r\n const fqName = withNamespace(namespace, name);\r\n\r\n this.models.set(fqName, { ...model, dataType: DataTypes.ModelType });\r\n this.addAlias(namespace, name);\r\n }\r\n\r\n /**\r\n * Get a specific model by its fully qualified name.\r\n *\r\n * @param fqName the fully qualified name of the entity\r\n * @returns the model type\r\n */\r\n public getEntityType(fqName: string) {\r\n return this.retrieveType(fqName, this.models) as EntityType;\r\n }\r\n\r\n /**\r\n * Retrieve all known EntityType models from the EDMX model.\r\n *\r\n * @returns list of model types\r\n */\r\n public getEntityTypes() {\r\n const ets = [...this.models.values()].filter((m): m is EntityType => m.dataType === DataTypes.ModelType);\r\n return this.sortModelsByInheritance(ets);\r\n }\r\n\r\n public addComplexType(namespace: string, name: string, model: Omit<ComplexType, \"dataType\">) {\r\n const fqName = withNamespace(namespace, name);\r\n\r\n this.models.set(fqName, { ...model, dataType: DataTypes.ComplexType });\r\n this.addAlias(namespace, name);\r\n }\r\n\r\n /**\r\n * Get a specific model by its fully qualified name.\r\n *\r\n * @param fqName the final model name that is generated\r\n * @returns the model type\r\n */\r\n public getComplexType(fqName: string) {\r\n return this.retrieveType(fqName, this.models) as ComplexType;\r\n }\r\n\r\n /**\r\n * Retrieve all known ComplexType models from the EDMX model.\r\n *\r\n * @returns list of model types\r\n */\r\n public getComplexTypes() {\r\n const types = [...this.models.values()].filter((m): m is ComplexType => m.dataType === DataTypes.ComplexType);\r\n return this.sortModelsByInheritance(types);\r\n }\r\n\r\n public addEnum(namespace: string, name: string, type: Omit<EnumType, \"dataType\">) {\r\n const fqName = withNamespace(namespace, name);\r\n\r\n this.models.set(fqName, { ...type, dataType: DataTypes.EnumType });\r\n this.addAlias(namespace, name);\r\n }\r\n\r\n /**\r\n * Get list of all known enums, i.e. EnumType nodes from the EDMX model.\r\n * @returns list of enum types\r\n */\r\n public getEnums() {\r\n return [...this.models.values()].filter((m): m is EnumType => m.dataType === DataTypes.EnumType);\r\n }\r\n\r\n public addUnboundOperationType(namespace: string, operationType: OperationType) {\r\n // supporting function overrides\r\n const isFunction = operationType.type === OperationTypes.Function;\r\n const existingFn = isFunction ? this.unboundOperationTypes.get(operationType.fqName) : undefined;\r\n if (existingFn) {\r\n const params = operationType.parameters;\r\n existingFn.overrides ? existingFn.overrides.push(params) : (existingFn.overrides = [params]);\r\n return;\r\n }\r\n\r\n this.unboundOperationTypes.set(operationType.fqName, operationType);\r\n this.addAlias(namespace, operationType.odataName);\r\n }\r\n\r\n public getUnboundOperationTypes(): Array<OperationType> {\r\n return [...this.unboundOperationTypes.values()];\r\n }\r\n\r\n public getUnboundOperationType(fqOpName: string): OperationType | undefined {\r\n return this.retrieveType(fqOpName, this.unboundOperationTypes);\r\n }\r\n\r\n public addBoundOperationType(namespace: string, bindingProp: PropertyModel, operationType: OperationType) {\r\n const fqEntityType = bindingProp.fqType;\r\n const store = bindingProp.isCollection ? this.entityCollectionBoundOperationTypes : this.entityBoundOperationTypes;\r\n const boundOps = store.get(fqEntityType);\r\n\r\n if (boundOps) {\r\n // supporting function overrides\r\n const isFunction = operationType.type === OperationTypes.Function;\r\n const existingFn = isFunction ? boundOps.find((bo) => bo.fqName === operationType.fqName) : undefined;\r\n if (existingFn) {\r\n const params = operationType.parameters;\r\n existingFn.overrides ? existingFn.overrides.push(params) : (existingFn.overrides = [params]);\r\n } else {\r\n boundOps.push(operationType);\r\n }\r\n } else {\r\n store.set(fqEntityType, [operationType]);\r\n }\r\n }\r\n\r\n public getEntityTypeOperations(fqEntityName: string): Array<OperationType> {\r\n const operations = this.retrieveType(fqEntityName, this.entityBoundOperationTypes);\r\n return operations || [];\r\n }\r\n\r\n public getEntitySetOperations(fqEntityName: string): Array<OperationType> {\r\n const operations = this.retrieveType(fqEntityName, this.entityCollectionBoundOperationTypes);\r\n return operations || [];\r\n }\r\n\r\n public getAllEntityOperations(fqEntityName: string): Array<OperationType> {\r\n return [...this.getEntityTypeOperations(fqEntityName), ...this.getEntitySetOperations(fqEntityName)];\r\n }\r\n\r\n public addAction(fqName: string, action: ActionImportType) {\r\n this.container.actions[fqName] = action;\r\n }\r\n\r\n public addFunction(fqName: string, func: FunctionImportType) {\r\n this.container.functions[fqName] = func;\r\n }\r\n\r\n public addSingleton(fqName: string, singleton: SingletonType) {\r\n this.container.singletons[fqName] = singleton;\r\n }\r\n\r\n public addEntitySet(fqName: string, entitySet: EntitySetType) {\r\n this.container.entitySets[fqName] = entitySet;\r\n }\r\n\r\n public getEntityContainer() {\r\n return this.container;\r\n }\r\n\r\n public getConverter(dataType: ODataTypesV2 | ODataTypesV4 | string) {\r\n return this.converters.get(dataType);\r\n }\r\n\r\n private sortModelsByInheritance<Type extends Omit<ComplexType, \"dataType\">>(models: Array<Type>): Array<Type> {\r\n // recursively visit all models and sort them by inheritance such that base classes\r\n // are always before derived classes\r\n const sorted: Array<Type> = [];\r\n const visitedModels = new Set<string>();\r\n const inProgressModels = new Set<string>();\r\n\r\n function visit(model: Type) {\r\n const fqName = model.fqName;\r\n if (inProgressModels.has(fqName)) {\r\n throw new Error(`Cyclic inheritance detected for model \"${fqName}\"!`);\r\n }\r\n\r\n if (!visitedModels.has(fqName)) {\r\n inProgressModels.add(fqName);\r\n\r\n for (const baseClassName of model.baseClasses) {\r\n const baseClass = models.find((e) => e.fqName === baseClassName);\r\n if (baseClass) {\r\n visit(baseClass);\r\n }\r\n }\r\n visitedModels.add(fqName);\r\n inProgressModels.delete(fqName);\r\n sorted.push(model);\r\n }\r\n }\r\n\r\n for (const model of models) {\r\n visit(model);\r\n }\r\n return sorted;\r\n }\r\n\r\n public setNameValidation(map: Map<string, ValidationError[]>) {\r\n this.nameValidation = map;\r\n }\r\n\r\n public getNameValidation() {\r\n return this.nameValidation!;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"DataModel.js","sourceRoot":"","sources":["../../src/data-model/DataModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { MappedConverterChains } from \"@odata2ts/converter-runtime\";\nimport { ODataTypesV2, ODataTypesV4 } from \"@odata2ts/odata-core\";\n\nimport {\n ActionImportType,\n ComplexType,\n DataTypes,\n EntityContainerModel,\n EntitySetType,\n EntityType,\n EnumType,\n FunctionImportType,\n ModelType,\n ODataVersion,\n OperationType,\n OperationTypes,\n PropertyModel,\n SingletonType,\n} from \"./DataTypeModel.js\";\nimport { ValidationError } from \"./validation/NameValidator.js\";\n\nexport interface ProjectFiles {\n model: string;\n qObject: string;\n service: string;\n}\n\n/**\n * Each namespace is represented as tuple: 1. the namespace 2. the alias, if any.\n */\nexport type NamespaceWithAlias = [string, string?];\n\nexport function withNamespace(ns: string, name: string) {\n // this supports the edge case of an empty string as namespace which isn't really valid according to spec (see CSDL)\n return ns ? `${ns}.${name}` : name;\n}\n\nexport class DataModel {\n private readonly converters: MappedConverterChains;\n private nameValidation: Map<string, ValidationError[]> | undefined;\n\n private models = new Map<string, EntityType | ComplexType | EnumType>();\n /**\n * Stores unbound operations by their fully qualified name.\n * @private\n */\n private unboundOperationTypes = new Map<string, OperationType>();\n /**\n * Stores operations bound to an entity type by the fully qualified name of the binding entity, e.g.\n * \"Trippin.Person\".\n * @private\n */\n private entityBoundOperationTypes = new Map<string, Array<OperationType>>();\n /**\n * Stores operations bound to an entity collection by the fully qualified name of the binding entity, e.g.\n * \"Trippin.Person\".\n * @private\n */\n private entityCollectionBoundOperationTypes = new Map<string, Array<OperationType>>();\n /**\n * Stores own type definitions which map to primitive types.\n * @private\n */\n private typeDefinitions = new Map<string, string>();\n private readonly namespace2Alias: { [ns: string]: string };\n private aliases: Record<string, string> = {};\n private container: EntityContainerModel = { entitySets: {}, singletons: {}, functions: {}, actions: {} };\n\n constructor(\n namespaces: Array<NamespaceWithAlias>,\n private version: ODataVersion,\n converters: MappedConverterChains = new Map()\n ) {\n this.converters = converters;\n this.namespace2Alias = namespaces.reduce<Record<string, string>>((col, [ns, alias]) => {\n if (alias) {\n col[ns] = alias;\n }\n return col;\n }, {});\n }\n\n /**\n * OData version: 2.0 or 4.0.\n * @returns\n */\n public getODataVersion() {\n return this.version;\n }\n\n public isV2() {\n return this.version === ODataVersion.V2;\n }\n\n public isV4() {\n return this.version === ODataVersion.V4;\n }\n\n private retrieveType<T>(fqName: string, haystack: Map<string, T>): T | undefined {\n return haystack.get(fqName) || (this.aliases[fqName] ? haystack.get(this.aliases[fqName]) : undefined);\n }\n\n private addAlias(namespace: string, name: string) {\n const alias = this.namespace2Alias[namespace];\n if (alias) {\n this.aliases[withNamespace(alias, name)] = withNamespace(namespace, name);\n }\n }\n\n public addTypeDefinition(namespace: string, name: string, type: string) {\n const fqName = withNamespace(namespace, name);\n this.typeDefinitions.set(fqName, type);\n this.addAlias(namespace, name);\n }\n\n public getPrimitiveType(fqName: string): string | undefined {\n return this.retrieveType(fqName, this.typeDefinitions);\n }\n\n public getModel(fqName: string) {\n return this.retrieveType(fqName, this.models);\n }\n\n public getModelTypes(): Array<ModelType> {\n return [...this.models.values()];\n }\n\n public addEntityType(namespace: string, name: string, model: Omit<EntityType, \"dataType\">) {\n const fqName = withNamespace(namespace, name);\n\n this.models.set(fqName, { ...model, dataType: DataTypes.ModelType });\n this.addAlias(namespace, name);\n }\n\n /**\n * Get a specific model by its fully qualified name.\n *\n * @param fqName the fully qualified name of the entity\n * @returns the model type\n */\n public getEntityType(fqName: string) {\n return this.retrieveType(fqName, this.models) as EntityType;\n }\n\n /**\n * Retrieve all known EntityType models from the EDMX model.\n *\n * @returns list of model types\n */\n public getEntityTypes() {\n const ets = [...this.models.values()].filter((m): m is EntityType => m.dataType === DataTypes.ModelType);\n return this.sortModelsByInheritance(ets);\n }\n\n public addComplexType(namespace: string, name: string, model: Omit<ComplexType, \"dataType\">) {\n const fqName = withNamespace(namespace, name);\n\n this.models.set(fqName, { ...model, dataType: DataTypes.ComplexType });\n this.addAlias(namespace, name);\n }\n\n /**\n * Get a specific model by its fully qualified name.\n *\n * @param fqName the final model name that is generated\n * @returns the model type\n */\n public getComplexType(fqName: string) {\n return this.retrieveType(fqName, this.models) as ComplexType;\n }\n\n /**\n * Retrieve all known ComplexType models from the EDMX model.\n *\n * @returns list of model types\n */\n public getComplexTypes() {\n const types = [...this.models.values()].filter((m): m is ComplexType => m.dataType === DataTypes.ComplexType);\n return this.sortModelsByInheritance(types);\n }\n\n public addEnum(namespace: string, name: string, type: Omit<EnumType, \"dataType\">) {\n const fqName = withNamespace(namespace, name);\n\n this.models.set(fqName, { ...type, dataType: DataTypes.EnumType });\n this.addAlias(namespace, name);\n }\n\n /**\n * Get list of all known enums, i.e. EnumType nodes from the EDMX model.\n * @returns list of enum types\n */\n public getEnums() {\n return [...this.models.values()].filter((m): m is EnumType => m.dataType === DataTypes.EnumType);\n }\n\n public addUnboundOperationType(namespace: string, operationType: OperationType) {\n // supporting function overrides\n const isFunction = operationType.type === OperationTypes.Function;\n const existingFn = isFunction ? this.unboundOperationTypes.get(operationType.fqName) : undefined;\n if (existingFn) {\n const params = operationType.parameters;\n existingFn.overrides ? existingFn.overrides.push(params) : (existingFn.overrides = [params]);\n return;\n }\n\n this.unboundOperationTypes.set(operationType.fqName, operationType);\n this.addAlias(namespace, operationType.odataName);\n }\n\n public getUnboundOperationTypes(): Array<OperationType> {\n return [...this.unboundOperationTypes.values()];\n }\n\n public getUnboundOperationType(fqOpName: string): OperationType | undefined {\n return this.retrieveType(fqOpName, this.unboundOperationTypes);\n }\n\n public addBoundOperationType(namespace: string, bindingProp: PropertyModel, operationType: OperationType) {\n const fqEntityType = bindingProp.fqType;\n const store = bindingProp.isCollection ? this.entityCollectionBoundOperationTypes : this.entityBoundOperationTypes;\n const boundOps = store.get(fqEntityType);\n\n if (boundOps) {\n // supporting function overrides\n const isFunction = operationType.type === OperationTypes.Function;\n const existingFn = isFunction ? boundOps.find((bo) => bo.fqName === operationType.fqName) : undefined;\n if (existingFn) {\n const params = operationType.parameters;\n existingFn.overrides ? existingFn.overrides.push(params) : (existingFn.overrides = [params]);\n } else {\n boundOps.push(operationType);\n }\n } else {\n store.set(fqEntityType, [operationType]);\n }\n }\n\n public getEntityTypeOperations(fqEntityName: string): Array<OperationType> {\n const operations = this.retrieveType(fqEntityName, this.entityBoundOperationTypes);\n return operations || [];\n }\n\n public getEntitySetOperations(fqEntityName: string): Array<OperationType> {\n const operations = this.retrieveType(fqEntityName, this.entityCollectionBoundOperationTypes);\n return operations || [];\n }\n\n public getAllEntityOperations(fqEntityName: string): Array<OperationType> {\n return [...this.getEntityTypeOperations(fqEntityName), ...this.getEntitySetOperations(fqEntityName)];\n }\n\n public addAction(fqName: string, action: ActionImportType) {\n this.container.actions[fqName] = action;\n }\n\n public addFunction(fqName: string, func: FunctionImportType) {\n this.container.functions[fqName] = func;\n }\n\n public addSingleton(fqName: string, singleton: SingletonType) {\n this.container.singletons[fqName] = singleton;\n }\n\n public addEntitySet(fqName: string, entitySet: EntitySetType) {\n this.container.entitySets[fqName] = entitySet;\n }\n\n public getEntityContainer() {\n return this.container;\n }\n\n public getConverter(dataType: ODataTypesV2 | ODataTypesV4 | string) {\n return this.converters.get(dataType);\n }\n\n private sortModelsByInheritance<Type extends Omit<ComplexType, \"dataType\">>(models: Array<Type>): Array<Type> {\n // recursively visit all models and sort them by inheritance such that base classes\n // are always before derived classes\n const sorted: Array<Type> = [];\n const visitedModels = new Set<string>();\n const inProgressModels = new Set<string>();\n\n function visit(model: Type) {\n const fqName = model.fqName;\n if (inProgressModels.has(fqName)) {\n throw new Error(`Cyclic inheritance detected for model \"${fqName}\"!`);\n }\n\n if (!visitedModels.has(fqName)) {\n inProgressModels.add(fqName);\n\n for (const baseClassName of model.baseClasses) {\n const baseClass = models.find((e) => e.fqName === baseClassName);\n if (baseClass) {\n visit(baseClass);\n }\n }\n visitedModels.add(fqName);\n inProgressModels.delete(fqName);\n sorted.push(model);\n }\n }\n\n for (const model of models) {\n visit(model);\n }\n return sorted;\n }\n\n public setNameValidation(map: Map<string, ValidationError[]>) {\n this.nameValidation = map;\n }\n\n public getNameValidation() {\n return this.nameValidation!;\n }\n}\n"]}
@@ -48,17 +48,14 @@ export class Digester {
48
48
  }
49
49
  // special handling for enums
50
50
  if (modelType === "EnumType" /* DataTypes.EnumType */) {
51
+ const isNumericEnum = this.options.enumType === "numeric";
51
52
  const enumConfig = this.serviceConfigHelper.findEnumTypeConfig(dataTypeNamespace, dataTypeName);
52
53
  result = {
53
54
  dataType: modelType,
54
55
  type: this.namingHelper.getEnumName((_a = enumConfig === null || enumConfig === void 0 ? void 0 : enumConfig.mappedName) !== null && _a !== void 0 ? _a : odataDataType),
55
- qPath: this.options.numericEnums ? "QNumericEnumPath" : "QEnumPath",
56
- qObject: isCollection
57
- ? this.options.numericEnums
58
- ? "QNumericEnumCollection"
59
- : "QEnumCollection"
60
- : undefined,
61
- qParam: this.options.numericEnums ? "QNumericEnumParam" : "QEnumParam",
56
+ qPath: isNumericEnum ? "QNumericEnumPath" : "QEnumPath",
57
+ qObject: isCollection ? (isNumericEnum ? "QNumericEnumCollection" : "QEnumCollection") : undefined,
58
+ qParam: isNumericEnum ? "QNumericEnumParam" : "QEnumParam",
62
59
  };
63
60
  }
64
61
  // handling of complex & entity types
@@ -1 +1 @@
1
- {"version":3,"file":"DataModelDigestion.js","sourceRoot":"","sources":["../../src/data-model/DataModelDigestion.ts"],"names":[],"mappings":"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","sourcesContent":["import { MappedConverterChains } from \"@odata2ts/converter-runtime\";\r\nimport type { DigestionOptions } from \"../FactoryFunctionModel.js\";\r\nimport {\r\n ComplexTypeGenerationOptions,\r\n EntityTypeGenerationOptions,\r\n Modes,\r\n PropertyGenerationOptions,\r\n} from \"../OptionModel.js\";\r\nimport { DataModel, NamespaceWithAlias, withNamespace } from \"./DataModel.js\";\r\nimport {\r\n ComplexType as ComplexModelType,\r\n DataTypes,\r\n EntityType as EntityModelType,\r\n ODataVersion,\r\n PropertyModel,\r\n} from \"./DataTypeModel.js\";\r\nimport { ComplexType, EntityType, EnumType, Property, Schema, TypeDefinition } from \"./edmx/ODataEdmxModelBase.js\";\r\nimport { EntityContainerV3, SchemaV3 } from \"./edmx/ODataEdmxModelV3.js\";\r\nimport { EntityContainerV4, SchemaV4 } from \"./edmx/ODataEdmxModelV4.js\";\r\nimport { NamingHelper } from \"./NamingHelper.js\";\r\nimport { ServiceConfigHelper, WithoutName } from \"./ServiceConfigHelper.js\";\r\nimport { NameClashValidator } from \"./validation/NameClashValidator.js\";\r\nimport { NameValidator } from \"./validation/NameValidator.js\";\r\nimport { NoopValidator } from \"./validation/NoopValidator.js\";\r\n\r\ntype CollectorTuple = [\r\n Array<PropertyModel>,\r\n Array<string>,\r\n { fqIdName: string; idName: string; qIdName: string; open: boolean },\r\n];\r\n\r\nfunction ifTrue(value: string | undefined): boolean {\r\n return value === \"true\";\r\n}\r\n\r\nfunction ifFalse(value: string | undefined): boolean {\r\n return value === \"false\";\r\n}\r\n\r\nexport interface TypeModel {\r\n outputType: string;\r\n qPath: string;\r\n qCollection: string;\r\n qParam: string | undefined;\r\n}\r\n\r\nexport abstract class Digester<S extends Schema<ET, CT>, ET extends EntityType, CT extends ComplexType> {\r\n protected static EDM_PREFIX = \"Edm.\";\r\n\r\n protected readonly dataModel: DataModel;\r\n protected readonly serviceConfigHelper: ServiceConfigHelper;\r\n protected readonly nameValidator: NameValidator;\r\n\r\n /**\r\n * Reverse mapping from fqName to data type: EntityType, ComplexType, EnumType, or Primitive Type.\r\n */\r\n private model2Type = new Map<string, DataTypes>();\r\n\r\n protected constructor(\r\n protected version: ODataVersion,\r\n protected schemas: Array<S>,\r\n protected options: DigestionOptions,\r\n protected namingHelper: NamingHelper,\r\n converters?: MappedConverterChains,\r\n ) {\r\n const namespaces = schemas.map<NamespaceWithAlias>((s) => [s.$.Namespace, s.$.Alias]);\r\n this.dataModel = new DataModel(namespaces, version, converters);\r\n this.serviceConfigHelper = new ServiceConfigHelper(options);\r\n this.nameValidator = options.bundledFileGeneration ? new NameClashValidator(options) : new NoopValidator();\r\n\r\n this.collectModelTypes(schemas);\r\n }\r\n\r\n private collectModelTypes(schemas: Array<S>) {\r\n schemas.forEach((schema) => {\r\n const { Namespace: ns, Alias: alias } = schema.$;\r\n\r\n schema.EnumType?.forEach((et) => {\r\n this.addModel2Type(ns, alias, et.$.Name, DataTypes.EnumType);\r\n });\r\n schema.ComplexType?.forEach((ct) => {\r\n this.addModel2Type(ns, alias, ct.$.Name, DataTypes.ComplexType);\r\n });\r\n schema.EntityType?.forEach((et) => {\r\n this.addModel2Type(ns, alias, et.$.Name, DataTypes.ModelType);\r\n });\r\n });\r\n }\r\n\r\n private addModel2Type(ns: string, alias: string | undefined, name: string, dt: DataTypes) {\r\n this.model2Type.set(withNamespace(ns, name), dt);\r\n if (alias) {\r\n this.model2Type.set(withNamespace(alias, name), dt);\r\n }\r\n }\r\n\r\n protected abstract getNavigationProps(entityType: ET | ComplexType): Array<Property>;\r\n\r\n protected abstract digestOperations(schema: SchemaV3 | SchemaV4): void;\r\n\r\n protected abstract digestEntityContainer(schema: SchemaV3 | SchemaV4): void;\r\n\r\n /**\r\n * Get essential infos about a given odata type from the version specific service variants.\r\n *\r\n * @param type\r\n * @return tuple of return type, query object, query collection object\r\n */\r\n protected abstract mapODataType(type: string): TypeModel;\r\n\r\n public async digest(): Promise<DataModel> {\r\n this.digestEntityTypesAndOperations();\r\n\r\n // delegate to version specific entity container digestion\r\n this.schemas.forEach((schema) => this.digestEntityContainer(schema));\r\n\r\n this.dataModel.setNameValidation(this.nameValidator.validate());\r\n return this.dataModel;\r\n }\r\n\r\n private digestEntityTypesAndOperations() {\r\n this.schemas.forEach((schema) => {\r\n const ns: NamespaceWithAlias = [schema.$.Namespace, schema.$.Alias];\r\n\r\n // type definitions: alias for primitive types\r\n this.addTypeDefinition(schema.$.Namespace, schema.TypeDefinition);\r\n\r\n // enums\r\n this.addEnum(ns, schema.EnumType);\r\n\r\n // complex types\r\n this.addComplexType(ns, schema.ComplexType);\r\n\r\n // entity types\r\n this.addEntityType(ns, schema.EntityType);\r\n\r\n // V4 only: function & action types\r\n this.digestOperations(schema);\r\n });\r\n\r\n this.postProcessModel();\r\n this.postProcessKeys();\r\n\r\n this.schemas.forEach((schema) => {\r\n this.analyzeModelUsage(schema.EntityContainer?.length ? schema.EntityContainer[0] : undefined);\r\n });\r\n }\r\n\r\n private getBaseModel(\r\n entityConfig: WithoutName<EntityTypeGenerationOptions | ComplexTypeGenerationOptions> | undefined,\r\n model: ComplexType,\r\n namespace: string,\r\n name: string,\r\n fqName: string,\r\n ) {\r\n const odataName = model.$.Name;\r\n\r\n // map properties respecting the config\r\n const props = [...(model.Property ?? []), ...this.getNavigationProps(model)].map((p) => {\r\n const epConfig = entityConfig?.properties?.find((ep) => ep.name === p.$.Name);\r\n return this.mapProp(p, epConfig);\r\n });\r\n\r\n // support for base types, i.e. extends clause of interfaces\r\n const baseClasses = [];\r\n let finalBaseClass: string | undefined = undefined;\r\n if (model.$.BaseType) {\r\n baseClasses.push(model.$.BaseType);\r\n const [baseName, basePrefix] = this.namingHelper.getNameAndServicePrefix(model.$.BaseType);\r\n const baseConfig =\r\n this.serviceConfigHelper.findEntityTypeConfig([basePrefix!], baseName) ||\r\n this.serviceConfigHelper.findComplexTypeConfig([basePrefix!], baseName);\r\n finalBaseClass = baseConfig?.mappedName ?? baseName;\r\n }\r\n\r\n return {\r\n fqName,\r\n odataName,\r\n name,\r\n modelName: this.namingHelper.getModelName(name),\r\n qName: this.namingHelper.getQName(name),\r\n editableName: this.namingHelper.getEditableModelName(name),\r\n serviceName: this.namingHelper.getServiceName(name),\r\n serviceCollectionName: this.namingHelper.getCollectionServiceName(name),\r\n folderPath: this.namingHelper.getFolderPath(namespace, name),\r\n baseClasses,\r\n finalBaseClass,\r\n props,\r\n baseProps: [], // postprocess required\r\n abstract: ifTrue(model.$.Abstract),\r\n open: ifTrue(model.$.OpenType),\r\n genMode: Modes.qobjects,\r\n subtypes: new Set(),\r\n } satisfies Partial<ComplexModelType>;\r\n }\r\n\r\n private addTypeDefinition(ns: string, types: Array<TypeDefinition> | undefined) {\r\n if (!types || !types.length) {\r\n return;\r\n }\r\n\r\n for (const t of types) {\r\n this.dataModel.addTypeDefinition(ns, t.$.Name, t.$.UnderlyingType);\r\n }\r\n }\r\n\r\n private addEnum(namespace: NamespaceWithAlias, models: Array<EnumType> | undefined) {\r\n if (!models || !models.length) {\r\n return;\r\n }\r\n\r\n for (const et of models) {\r\n const odataName = et.$.Name;\r\n const fqName = withNamespace(namespace[0], odataName);\r\n const config = this.serviceConfigHelper.findEnumTypeConfig(namespace, odataName);\r\n const enumName = this.nameValidator.addEnumType(fqName, config?.mappedName || odataName);\r\n const filePath = this.namingHelper.getFolderPath(namespace[0], enumName);\r\n this.dataModel.addEnum(namespace[0], odataName, {\r\n fqName,\r\n odataName,\r\n name: enumName,\r\n modelName: this.namingHelper.getEnumName(enumName),\r\n folderPath: filePath,\r\n members: et.Member?.length ? et.Member.map((m) => ({ name: m.$.Name, value: m.$.Value })) : [],\r\n });\r\n }\r\n }\r\n\r\n private addComplexType(namespace: NamespaceWithAlias, models: Array<ComplexType> | undefined) {\r\n if (!models || !models.length) {\r\n return;\r\n }\r\n\r\n for (const model of models) {\r\n const config = this.serviceConfigHelper.findComplexTypeConfig(namespace, model.$.Name);\r\n const fqName = withNamespace(namespace[0], model.$.Name);\r\n const name = this.nameValidator.addComplexType(fqName, config?.mappedName || model.$.Name);\r\n const baseModel = this.getBaseModel(config, model, namespace[0], name, fqName);\r\n this.dataModel.addComplexType(namespace[0], baseModel.odataName, baseModel);\r\n }\r\n }\r\n\r\n private addEntityType(namespace: NamespaceWithAlias, models: Array<ET> | undefined) {\r\n if (!models || !models.length) {\r\n return;\r\n }\r\n\r\n for (const model of models) {\r\n const entityConfig = this.serviceConfigHelper.findEntityTypeConfig(namespace, model.$.Name);\r\n const fqName = withNamespace(namespace[0], model.$.Name);\r\n const name = this.nameValidator.addEntityType(fqName, entityConfig?.mappedName || model.$.Name);\r\n const baseModel = this.getBaseModel(entityConfig, model, namespace[0], name, fqName);\r\n\r\n // key support: we add keys from this entity,\r\n // but not keys stemming from base classes (postprocess required)\r\n const keyNames: Array<string> = [];\r\n if (entityConfig?.keys?.length) {\r\n keyNames.push(...entityConfig.keys);\r\n } else {\r\n const entity = model as EntityType;\r\n if (entity.Key && entity.Key.length && entity.Key[0].PropertyRef.length) {\r\n const propNames = entity.Key[0].PropertyRef.map((key) => key.$.Name);\r\n keyNames.push(...propNames);\r\n }\r\n }\r\n\r\n this.dataModel.addEntityType(namespace[0], baseModel.odataName, {\r\n ...baseModel,\r\n id: {\r\n fqName: baseModel.fqName,\r\n modelName: this.namingHelper.getIdModelName(name),\r\n qName: this.namingHelper.getQIdFunctionName(name),\r\n },\r\n generateId: !!keyNames.length,\r\n keyNames: keyNames, // postprocess required to include key specs from base classes\r\n keys: [], // postprocess required to include props from base classes\r\n getKeyUnion: () => keyNames.join(\" | \"),\r\n subtypes: new Set(),\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Check that models (ComplexType or EntityType) have been referenced in the API\r\n * as entry point or via navProp or by virtue of being a base type or subtype of those.\r\n * For these models one or two services are generated.\r\n *\r\n * In this way unnecessary service generation is prevented. For example, complex types that\r\n * are only referenced as response of an operation do not need a generated service.\r\n *\r\n * @param ec\r\n * @private\r\n */\r\n private analyzeModelUsage(ec: EntityContainerV3 | EntityContainerV4 | undefined) {\r\n if (ec?.EntitySet?.length) {\r\n ec.EntitySet.forEach((et) => this.analyze(et.$.EntityType));\r\n }\r\n const ec4 = ec as EntityContainerV4;\r\n if (ec4?.Singleton?.length) {\r\n ec4.Singleton.forEach((singleton) => this.analyze(singleton.$.Type));\r\n }\r\n }\r\n\r\n /**\r\n * Check usage of model types within API.\r\n *\r\n * @param fqModelName\r\n * @private\r\n */\r\n private analyze(fqModelName: string) {\r\n // to also resolve aliases the data model needs to be used\r\n const model = this.dataModel.getEntityType(fqModelName) ?? this.dataModel.getComplexType(fqModelName);\r\n if (!model?.fqName || model.genMode === Modes.service) {\r\n return;\r\n }\r\n\r\n model.genMode = Modes.service;\r\n\r\n if (model) {\r\n // respect base classes\r\n if (model.baseClasses.length) {\r\n this.analyze(model.baseClasses[0]);\r\n }\r\n // include subtypes since each base class can be cast to its subtypes\r\n model.subtypes.forEach((subtype) => {\r\n this.analyze(subtype);\r\n });\r\n model?.props.forEach((p) => {\r\n if (p.dataType === DataTypes.ComplexType || p.dataType === DataTypes.ModelType) {\r\n this.analyze(p.fqType);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private postProcessModel() {\r\n // complex types\r\n const complexTypes = this.dataModel.getComplexTypes();\r\n complexTypes.forEach((ct) => {\r\n // build up set of subtypes for each complex type\r\n this.addSubtypes(ct);\r\n\r\n // get props & keys from base types\r\n const [baseProps, _, baseAttributes] = this.collectBaseClassPropsAndKeys(ct, []);\r\n const { open } = baseAttributes;\r\n ct.baseProps = baseProps.map((bp) => ({ ...bp }));\r\n if (open) {\r\n ct.open = true;\r\n }\r\n });\r\n // entity types\r\n const entityTypes = this.dataModel.getEntityTypes();\r\n entityTypes.forEach((et) => {\r\n // build up set of subtypes for each entity type\r\n this.addSubtypes(et);\r\n\r\n // get props & keys from base types\r\n const [baseProps, baseKeys, baseAttributes] = this.collectBaseClassPropsAndKeys(et, []);\r\n const { fqIdName, idName, qIdName, open } = baseAttributes;\r\n et.baseProps = baseProps.map((bp) => ({ ...bp }));\r\n\r\n if (!et.keyNames.length && idName) {\r\n et.id = {\r\n fqName: fqIdName,\r\n modelName: idName,\r\n qName: qIdName,\r\n };\r\n et.generateId = false;\r\n }\r\n if (open) {\r\n et.open = open;\r\n }\r\n et.keyNames.unshift(...baseKeys.filter((bk) => !et.keyNames.includes(bk)));\r\n });\r\n }\r\n\r\n private postProcessKeys() {\r\n const entityTypes = this.dataModel.getEntityTypes();\r\n entityTypes.forEach((et) => {\r\n const isSingleKey = et.keyNames.length === 1;\r\n const props = [...et.baseProps, ...et.props];\r\n et.keys = et.keyNames.map((keyName) => {\r\n const prop = props.find((p) => p.odataName === keyName);\r\n if (!prop) {\r\n throw new Error(`Key with name [${keyName}] not found in props!`);\r\n }\r\n\r\n // automatically set key prop to managed, if this is the only key of the given entity\r\n if (prop.managed === undefined) {\r\n prop.managed = !this.options.disableAutoManagedKey && isSingleKey;\r\n }\r\n\r\n return prop;\r\n });\r\n });\r\n }\r\n\r\n private collectBaseClassPropsAndKeys(model: ComplexModelType, visitedModels: string[]): CollectorTuple {\r\n if (visitedModels.includes(model.fqName)) {\r\n throw new Error(`Cyclic inheritance detected for model ${model.fqName}!`);\r\n }\r\n visitedModels.push(model.fqName);\r\n return model.baseClasses.reduce(\r\n ([props, keys, attributes], bc) => {\r\n const baseModel = this.dataModel.getEntityType(bc) || this.dataModel.getComplexType(bc);\r\n if (!baseModel) {\r\n throw new Error(`BaseModel \"${bc}\" doesn't exist!`);\r\n }\r\n\r\n let { fqIdName, idName, qIdName, open } = attributes;\r\n\r\n // recursive\r\n if (baseModel.baseClasses.length) {\r\n const [parentProps, parentKeys, parentAttributes] = this.collectBaseClassPropsAndKeys(\r\n baseModel,\r\n visitedModels,\r\n );\r\n props.unshift(...parentProps);\r\n keys.unshift(...parentKeys);\r\n if (parentAttributes?.idName) {\r\n fqIdName = parentAttributes.fqIdName;\r\n idName = parentAttributes.idName;\r\n qIdName = parentAttributes.qIdName;\r\n }\r\n if (parentAttributes?.open) {\r\n open = true;\r\n }\r\n }\r\n\r\n props.push(...baseModel.props);\r\n const entityModel = baseModel as EntityModelType;\r\n if (entityModel.keyNames?.length) {\r\n keys.push(...entityModel.keyNames.filter((kn) => !keys.includes(kn)));\r\n fqIdName = entityModel.id.fqName;\r\n idName = entityModel.id.modelName;\r\n qIdName = entityModel.id.qName;\r\n }\r\n if (baseModel.open) {\r\n open = true;\r\n }\r\n return [props, keys, { fqIdName, idName, qIdName, open }];\r\n },\r\n [[], [], { fqIdName: \"\", idName: \"\", qIdName: \"\", open: false }] as CollectorTuple,\r\n );\r\n }\r\n\r\n protected mapProp = (p: Property, entityPropConfig?: PropertyGenerationOptions | undefined): PropertyModel => {\r\n if (!p.$.Type) {\r\n throw new Error(`No type information given for property [${p.$.Name}]!`);\r\n }\r\n\r\n const configProp = this.serviceConfigHelper.findPropConfigByName(p.$.Name);\r\n const modelName = this.namingHelper.getModelPropName(\r\n entityPropConfig?.mappedName || configProp?.mappedName || p.$.Name,\r\n );\r\n const isCollection = !!p.$.Type.match(/^Collection\\(/);\r\n let odataDataType = p.$.Type.replace(/^Collection\\(([^\\)]+)\\)/, \"$1\");\r\n\r\n // support for primitive type mapping\r\n if (this.namingHelper.includesServicePrefix(odataDataType)) {\r\n const dt = this.dataModel.getPrimitiveType(odataDataType);\r\n if (dt !== undefined) {\r\n odataDataType = dt;\r\n }\r\n }\r\n\r\n let result: Pick<PropertyModel, \"dataType\" | \"type\" | \"typeModule\" | \"qPath\" | \"qParam\" | \"qObject\" | \"converters\">;\r\n\r\n // domain object known from service:\r\n // EntityType, ComplexType, EnumType\r\n if (this.namingHelper.includesServicePrefix(odataDataType)) {\r\n const modelType = this.model2Type.get(odataDataType)!;\r\n const [dataTypeName, dataTypePrefix] = this.namingHelper.getNameAndServicePrefix(odataDataType);\r\n const dataTypeNamespace: NamespaceWithAlias = [dataTypePrefix!];\r\n if (!modelType) {\r\n throw new Error(\r\n `Couldn't determine model type (EntityType, ComplexType, etc) for property \"${p.$.Name}\"! Given data type: \"${odataDataType}\".`,\r\n );\r\n }\r\n\r\n // special handling for enums\r\n if (modelType === DataTypes.EnumType) {\r\n const enumConfig = this.serviceConfigHelper.findEnumTypeConfig(dataTypeNamespace, dataTypeName);\r\n result = {\r\n dataType: modelType,\r\n type: this.namingHelper.getEnumName(enumConfig?.mappedName ?? odataDataType),\r\n qPath: this.options.numericEnums ? \"QNumericEnumPath\" : \"QEnumPath\",\r\n qObject: isCollection\r\n ? this.options.numericEnums\r\n ? \"QNumericEnumCollection\"\r\n : \"QEnumCollection\"\r\n : undefined,\r\n qParam: this.options.numericEnums ? \"QNumericEnumParam\" : \"QEnumParam\",\r\n };\r\n }\r\n // handling of complex & entity types\r\n else {\r\n const entityConfig =\r\n modelType === DataTypes.ComplexType\r\n ? this.serviceConfigHelper.findComplexTypeConfig(dataTypeNamespace, dataTypeName)\r\n : this.serviceConfigHelper.findEntityTypeConfig(dataTypeNamespace, dataTypeName);\r\n const typeName = entityConfig?.mappedName ?? odataDataType;\r\n\r\n result = {\r\n dataType: modelType,\r\n type: this.namingHelper.getModelName(typeName),\r\n qPath: \"QEntityPath\",\r\n qObject: this.namingHelper.getQName(typeName),\r\n qParam: \"QComplexParam\",\r\n };\r\n }\r\n }\r\n // OData built-in data types\r\n else if (odataDataType.startsWith(Digester.EDM_PREFIX)) {\r\n const { outputType, qPath, qParam, qCollection } = this.mapODataType(odataDataType);\r\n const { to, toModule: typeModule, converters } = this.dataModel.getConverter(odataDataType) || {};\r\n\r\n const type = !to ? outputType : to.startsWith(Digester.EDM_PREFIX) ? this.mapODataType(to).outputType : to;\r\n\r\n result = {\r\n dataType: DataTypes.PrimitiveType,\r\n type,\r\n typeModule,\r\n qPath,\r\n qParam,\r\n qObject: isCollection ? qCollection : undefined,\r\n converters,\r\n };\r\n } else {\r\n throw new Error(\r\n `Unknown type [${odataDataType}]: Not 'Collection(...)', not OData type 'Edm.*', not starting with one of the namespaces!`,\r\n );\r\n }\r\n\r\n return {\r\n odataName: p.$.Name,\r\n name: modelName,\r\n odataType: p.$.Type,\r\n fqType: odataDataType,\r\n required: ifFalse(p.$.Nullable),\r\n isCollection: isCollection,\r\n managed: typeof entityPropConfig?.managed !== \"undefined\" ? entityPropConfig.managed : configProp?.managed,\r\n ...result,\r\n };\r\n };\r\n\r\n private addSubtypes(model: ComplexModelType, grandChildren = new Set<string>()) {\r\n if (!model.baseClasses.length) {\r\n return;\r\n }\r\n\r\n model.baseClasses.forEach((baseClass) => {\r\n const baseType = this.dataModel.getModel(baseClass) as ComplexModelType;\r\n\r\n // add subtypes & base name for q-objects\r\n baseType.subtypes.add(model.fqName);\r\n if (!baseType.qBaseName) {\r\n baseType.qBaseName = this.namingHelper.getQBaseName(baseType.name);\r\n }\r\n grandChildren.forEach((gc) => baseType.subtypes.add(gc));\r\n\r\n // recursive\r\n grandChildren.add(model.fqName);\r\n this.addSubtypes(baseType, grandChildren);\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"DataModelDigestion.js","sourceRoot":"","sources":["../../src/data-model/DataModelDigestion.ts"],"names":[],"mappings":"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","sourcesContent":["import { MappedConverterChains } from \"@odata2ts/converter-runtime\";\nimport type { DigestionOptions } from \"../FactoryFunctionModel.js\";\nimport {\n ComplexTypeGenerationOptions,\n EntityTypeGenerationOptions,\n Modes,\n PropertyGenerationOptions,\n} from \"../OptionModel.js\";\nimport { DataModel, NamespaceWithAlias, withNamespace } from \"./DataModel.js\";\nimport {\n ComplexType as ComplexModelType,\n DataTypes,\n EntityType as EntityModelType,\n ODataVersion,\n PropertyModel,\n} from \"./DataTypeModel.js\";\nimport { ComplexType, EntityType, EnumType, Property, Schema, TypeDefinition } from \"./edmx/ODataEdmxModelBase.js\";\nimport { EntityContainerV3, SchemaV3 } from \"./edmx/ODataEdmxModelV3.js\";\nimport { EntityContainerV4, SchemaV4 } from \"./edmx/ODataEdmxModelV4.js\";\nimport { NamingHelper } from \"./NamingHelper.js\";\nimport { ServiceConfigHelper, WithoutName } from \"./ServiceConfigHelper.js\";\nimport { NameClashValidator } from \"./validation/NameClashValidator.js\";\nimport { NameValidator } from \"./validation/NameValidator.js\";\nimport { NoopValidator } from \"./validation/NoopValidator.js\";\n\ntype CollectorTuple = [\n Array<PropertyModel>,\n Array<string>,\n { fqIdName: string; idName: string; qIdName: string; open: boolean },\n];\n\nfunction ifTrue(value: string | undefined): boolean {\n return value === \"true\";\n}\n\nfunction ifFalse(value: string | undefined): boolean {\n return value === \"false\";\n}\n\nexport interface TypeModel {\n outputType: string;\n qPath: string;\n qCollection: string;\n qParam: string | undefined;\n}\n\nexport abstract class Digester<S extends Schema<ET, CT>, ET extends EntityType, CT extends ComplexType> {\n protected static EDM_PREFIX = \"Edm.\";\n\n protected readonly dataModel: DataModel;\n protected readonly serviceConfigHelper: ServiceConfigHelper;\n protected readonly nameValidator: NameValidator;\n\n /**\n * Reverse mapping from fqName to data type: EntityType, ComplexType, EnumType, or Primitive Type.\n */\n private model2Type = new Map<string, DataTypes>();\n\n protected constructor(\n protected version: ODataVersion,\n protected schemas: Array<S>,\n protected options: DigestionOptions,\n protected namingHelper: NamingHelper,\n converters?: MappedConverterChains,\n ) {\n const namespaces = schemas.map<NamespaceWithAlias>((s) => [s.$.Namespace, s.$.Alias]);\n this.dataModel = new DataModel(namespaces, version, converters);\n this.serviceConfigHelper = new ServiceConfigHelper(options);\n this.nameValidator = options.bundledFileGeneration ? new NameClashValidator(options) : new NoopValidator();\n\n this.collectModelTypes(schemas);\n }\n\n private collectModelTypes(schemas: Array<S>) {\n schemas.forEach((schema) => {\n const { Namespace: ns, Alias: alias } = schema.$;\n\n schema.EnumType?.forEach((et) => {\n this.addModel2Type(ns, alias, et.$.Name, DataTypes.EnumType);\n });\n schema.ComplexType?.forEach((ct) => {\n this.addModel2Type(ns, alias, ct.$.Name, DataTypes.ComplexType);\n });\n schema.EntityType?.forEach((et) => {\n this.addModel2Type(ns, alias, et.$.Name, DataTypes.ModelType);\n });\n });\n }\n\n private addModel2Type(ns: string, alias: string | undefined, name: string, dt: DataTypes) {\n this.model2Type.set(withNamespace(ns, name), dt);\n if (alias) {\n this.model2Type.set(withNamespace(alias, name), dt);\n }\n }\n\n protected abstract getNavigationProps(entityType: ET | ComplexType): Array<Property>;\n\n protected abstract digestOperations(schema: SchemaV3 | SchemaV4): void;\n\n protected abstract digestEntityContainer(schema: SchemaV3 | SchemaV4): void;\n\n /**\n * Get essential infos about a given odata type from the version specific service variants.\n *\n * @param type\n * @return tuple of return type, query object, query collection object\n */\n protected abstract mapODataType(type: string): TypeModel;\n\n public async digest(): Promise<DataModel> {\n this.digestEntityTypesAndOperations();\n\n // delegate to version specific entity container digestion\n this.schemas.forEach((schema) => this.digestEntityContainer(schema));\n\n this.dataModel.setNameValidation(this.nameValidator.validate());\n return this.dataModel;\n }\n\n private digestEntityTypesAndOperations() {\n this.schemas.forEach((schema) => {\n const ns: NamespaceWithAlias = [schema.$.Namespace, schema.$.Alias];\n\n // type definitions: alias for primitive types\n this.addTypeDefinition(schema.$.Namespace, schema.TypeDefinition);\n\n // enums\n this.addEnum(ns, schema.EnumType);\n\n // complex types\n this.addComplexType(ns, schema.ComplexType);\n\n // entity types\n this.addEntityType(ns, schema.EntityType);\n\n // V4 only: function & action types\n this.digestOperations(schema);\n });\n\n this.postProcessModel();\n this.postProcessKeys();\n\n this.schemas.forEach((schema) => {\n this.analyzeModelUsage(schema.EntityContainer?.length ? schema.EntityContainer[0] : undefined);\n });\n }\n\n private getBaseModel(\n entityConfig: WithoutName<EntityTypeGenerationOptions | ComplexTypeGenerationOptions> | undefined,\n model: ComplexType,\n namespace: string,\n name: string,\n fqName: string,\n ) {\n const odataName = model.$.Name;\n\n // map properties respecting the config\n const props = [...(model.Property ?? []), ...this.getNavigationProps(model)].map((p) => {\n const epConfig = entityConfig?.properties?.find((ep) => ep.name === p.$.Name);\n return this.mapProp(p, epConfig);\n });\n\n // support for base types, i.e. extends clause of interfaces\n const baseClasses = [];\n let finalBaseClass: string | undefined = undefined;\n if (model.$.BaseType) {\n baseClasses.push(model.$.BaseType);\n const [baseName, basePrefix] = this.namingHelper.getNameAndServicePrefix(model.$.BaseType);\n const baseConfig =\n this.serviceConfigHelper.findEntityTypeConfig([basePrefix!], baseName) ||\n this.serviceConfigHelper.findComplexTypeConfig([basePrefix!], baseName);\n finalBaseClass = baseConfig?.mappedName ?? baseName;\n }\n\n return {\n fqName,\n odataName,\n name,\n modelName: this.namingHelper.getModelName(name),\n qName: this.namingHelper.getQName(name),\n editableName: this.namingHelper.getEditableModelName(name),\n serviceName: this.namingHelper.getServiceName(name),\n serviceCollectionName: this.namingHelper.getCollectionServiceName(name),\n folderPath: this.namingHelper.getFolderPath(namespace, name),\n baseClasses,\n finalBaseClass,\n props,\n baseProps: [], // postprocess required\n abstract: ifTrue(model.$.Abstract),\n open: ifTrue(model.$.OpenType),\n genMode: Modes.qobjects,\n subtypes: new Set(),\n } satisfies Partial<ComplexModelType>;\n }\n\n private addTypeDefinition(ns: string, types: Array<TypeDefinition> | undefined) {\n if (!types || !types.length) {\n return;\n }\n\n for (const t of types) {\n this.dataModel.addTypeDefinition(ns, t.$.Name, t.$.UnderlyingType);\n }\n }\n\n private addEnum(namespace: NamespaceWithAlias, models: Array<EnumType> | undefined) {\n if (!models || !models.length) {\n return;\n }\n\n for (const et of models) {\n const odataName = et.$.Name;\n const fqName = withNamespace(namespace[0], odataName);\n const config = this.serviceConfigHelper.findEnumTypeConfig(namespace, odataName);\n const enumName = this.nameValidator.addEnumType(fqName, config?.mappedName || odataName);\n const filePath = this.namingHelper.getFolderPath(namespace[0], enumName);\n this.dataModel.addEnum(namespace[0], odataName, {\n fqName,\n odataName,\n name: enumName,\n modelName: this.namingHelper.getEnumName(enumName),\n folderPath: filePath,\n members: et.Member?.length ? et.Member.map((m) => ({ name: m.$.Name, value: m.$.Value })) : [],\n });\n }\n }\n\n private addComplexType(namespace: NamespaceWithAlias, models: Array<ComplexType> | undefined) {\n if (!models || !models.length) {\n return;\n }\n\n for (const model of models) {\n const config = this.serviceConfigHelper.findComplexTypeConfig(namespace, model.$.Name);\n const fqName = withNamespace(namespace[0], model.$.Name);\n const name = this.nameValidator.addComplexType(fqName, config?.mappedName || model.$.Name);\n const baseModel = this.getBaseModel(config, model, namespace[0], name, fqName);\n this.dataModel.addComplexType(namespace[0], baseModel.odataName, baseModel);\n }\n }\n\n private addEntityType(namespace: NamespaceWithAlias, models: Array<ET> | undefined) {\n if (!models || !models.length) {\n return;\n }\n\n for (const model of models) {\n const entityConfig = this.serviceConfigHelper.findEntityTypeConfig(namespace, model.$.Name);\n const fqName = withNamespace(namespace[0], model.$.Name);\n const name = this.nameValidator.addEntityType(fqName, entityConfig?.mappedName || model.$.Name);\n const baseModel = this.getBaseModel(entityConfig, model, namespace[0], name, fqName);\n\n // key support: we add keys from this entity,\n // but not keys stemming from base classes (postprocess required)\n const keyNames: Array<string> = [];\n if (entityConfig?.keys?.length) {\n keyNames.push(...entityConfig.keys);\n } else {\n const entity = model as EntityType;\n if (entity.Key && entity.Key.length && entity.Key[0].PropertyRef.length) {\n const propNames = entity.Key[0].PropertyRef.map((key) => key.$.Name);\n keyNames.push(...propNames);\n }\n }\n\n this.dataModel.addEntityType(namespace[0], baseModel.odataName, {\n ...baseModel,\n id: {\n fqName: baseModel.fqName,\n modelName: this.namingHelper.getIdModelName(name),\n qName: this.namingHelper.getQIdFunctionName(name),\n },\n generateId: !!keyNames.length,\n keyNames: keyNames, // postprocess required to include key specs from base classes\n keys: [], // postprocess required to include props from base classes\n getKeyUnion: () => keyNames.join(\" | \"),\n subtypes: new Set(),\n });\n }\n }\n\n /**\n * Check that models (ComplexType or EntityType) have been referenced in the API\n * as entry point or via navProp or by virtue of being a base type or subtype of those.\n * For these models one or two services are generated.\n *\n * In this way unnecessary service generation is prevented. For example, complex types that\n * are only referenced as response of an operation do not need a generated service.\n *\n * @param ec\n * @private\n */\n private analyzeModelUsage(ec: EntityContainerV3 | EntityContainerV4 | undefined) {\n if (ec?.EntitySet?.length) {\n ec.EntitySet.forEach((et) => this.analyze(et.$.EntityType));\n }\n const ec4 = ec as EntityContainerV4;\n if (ec4?.Singleton?.length) {\n ec4.Singleton.forEach((singleton) => this.analyze(singleton.$.Type));\n }\n }\n\n /**\n * Check usage of model types within API.\n *\n * @param fqModelName\n * @private\n */\n private analyze(fqModelName: string) {\n // to also resolve aliases the data model needs to be used\n const model = this.dataModel.getEntityType(fqModelName) ?? this.dataModel.getComplexType(fqModelName);\n if (!model?.fqName || model.genMode === Modes.service) {\n return;\n }\n\n model.genMode = Modes.service;\n\n if (model) {\n // respect base classes\n if (model.baseClasses.length) {\n this.analyze(model.baseClasses[0]);\n }\n // include subtypes since each base class can be cast to its subtypes\n model.subtypes.forEach((subtype) => {\n this.analyze(subtype);\n });\n model?.props.forEach((p) => {\n if (p.dataType === DataTypes.ComplexType || p.dataType === DataTypes.ModelType) {\n this.analyze(p.fqType);\n }\n });\n }\n }\n\n private postProcessModel() {\n // complex types\n const complexTypes = this.dataModel.getComplexTypes();\n complexTypes.forEach((ct) => {\n // build up set of subtypes for each complex type\n this.addSubtypes(ct);\n\n // get props & keys from base types\n const [baseProps, _, baseAttributes] = this.collectBaseClassPropsAndKeys(ct, []);\n const { open } = baseAttributes;\n ct.baseProps = baseProps.map((bp) => ({ ...bp }));\n if (open) {\n ct.open = true;\n }\n });\n // entity types\n const entityTypes = this.dataModel.getEntityTypes();\n entityTypes.forEach((et) => {\n // build up set of subtypes for each entity type\n this.addSubtypes(et);\n\n // get props & keys from base types\n const [baseProps, baseKeys, baseAttributes] = this.collectBaseClassPropsAndKeys(et, []);\n const { fqIdName, idName, qIdName, open } = baseAttributes;\n et.baseProps = baseProps.map((bp) => ({ ...bp }));\n\n if (!et.keyNames.length && idName) {\n et.id = {\n fqName: fqIdName,\n modelName: idName,\n qName: qIdName,\n };\n et.generateId = false;\n }\n if (open) {\n et.open = open;\n }\n et.keyNames.unshift(...baseKeys.filter((bk) => !et.keyNames.includes(bk)));\n });\n }\n\n private postProcessKeys() {\n const entityTypes = this.dataModel.getEntityTypes();\n entityTypes.forEach((et) => {\n const isSingleKey = et.keyNames.length === 1;\n const props = [...et.baseProps, ...et.props];\n et.keys = et.keyNames.map((keyName) => {\n const prop = props.find((p) => p.odataName === keyName);\n if (!prop) {\n throw new Error(`Key with name [${keyName}] not found in props!`);\n }\n\n // automatically set key prop to managed, if this is the only key of the given entity\n if (prop.managed === undefined) {\n prop.managed = !this.options.disableAutoManagedKey && isSingleKey;\n }\n\n return prop;\n });\n });\n }\n\n private collectBaseClassPropsAndKeys(model: ComplexModelType, visitedModels: string[]): CollectorTuple {\n if (visitedModels.includes(model.fqName)) {\n throw new Error(`Cyclic inheritance detected for model ${model.fqName}!`);\n }\n visitedModels.push(model.fqName);\n return model.baseClasses.reduce(\n ([props, keys, attributes], bc) => {\n const baseModel = this.dataModel.getEntityType(bc) || this.dataModel.getComplexType(bc);\n if (!baseModel) {\n throw new Error(`BaseModel \"${bc}\" doesn't exist!`);\n }\n\n let { fqIdName, idName, qIdName, open } = attributes;\n\n // recursive\n if (baseModel.baseClasses.length) {\n const [parentProps, parentKeys, parentAttributes] = this.collectBaseClassPropsAndKeys(\n baseModel,\n visitedModels,\n );\n props.unshift(...parentProps);\n keys.unshift(...parentKeys);\n if (parentAttributes?.idName) {\n fqIdName = parentAttributes.fqIdName;\n idName = parentAttributes.idName;\n qIdName = parentAttributes.qIdName;\n }\n if (parentAttributes?.open) {\n open = true;\n }\n }\n\n props.push(...baseModel.props);\n const entityModel = baseModel as EntityModelType;\n if (entityModel.keyNames?.length) {\n keys.push(...entityModel.keyNames.filter((kn) => !keys.includes(kn)));\n fqIdName = entityModel.id.fqName;\n idName = entityModel.id.modelName;\n qIdName = entityModel.id.qName;\n }\n if (baseModel.open) {\n open = true;\n }\n return [props, keys, { fqIdName, idName, qIdName, open }];\n },\n [[], [], { fqIdName: \"\", idName: \"\", qIdName: \"\", open: false }] as CollectorTuple,\n );\n }\n\n protected mapProp = (p: Property, entityPropConfig?: PropertyGenerationOptions | undefined): PropertyModel => {\n if (!p.$.Type) {\n throw new Error(`No type information given for property [${p.$.Name}]!`);\n }\n\n const configProp = this.serviceConfigHelper.findPropConfigByName(p.$.Name);\n const modelName = this.namingHelper.getModelPropName(\n entityPropConfig?.mappedName || configProp?.mappedName || p.$.Name,\n );\n const isCollection = !!p.$.Type.match(/^Collection\\(/);\n let odataDataType = p.$.Type.replace(/^Collection\\(([^\\)]+)\\)/, \"$1\");\n\n // support for primitive type mapping\n if (this.namingHelper.includesServicePrefix(odataDataType)) {\n const dt = this.dataModel.getPrimitiveType(odataDataType);\n if (dt !== undefined) {\n odataDataType = dt;\n }\n }\n\n let result: Pick<PropertyModel, \"dataType\" | \"type\" | \"typeModule\" | \"qPath\" | \"qParam\" | \"qObject\" | \"converters\">;\n\n // domain object known from service:\n // EntityType, ComplexType, EnumType\n if (this.namingHelper.includesServicePrefix(odataDataType)) {\n const modelType = this.model2Type.get(odataDataType)!;\n const [dataTypeName, dataTypePrefix] = this.namingHelper.getNameAndServicePrefix(odataDataType);\n const dataTypeNamespace: NamespaceWithAlias = [dataTypePrefix!];\n if (!modelType) {\n throw new Error(\n `Couldn't determine model type (EntityType, ComplexType, etc) for property \"${p.$.Name}\"! Given data type: \"${odataDataType}\".`,\n );\n }\n\n // special handling for enums\n if (modelType === DataTypes.EnumType) {\n const isNumericEnum = this.options.enumType === \"numeric\";\n const enumConfig = this.serviceConfigHelper.findEnumTypeConfig(dataTypeNamespace, dataTypeName);\n result = {\n dataType: modelType,\n type: this.namingHelper.getEnumName(enumConfig?.mappedName ?? odataDataType),\n qPath: isNumericEnum ? \"QNumericEnumPath\" : \"QEnumPath\",\n qObject: isCollection ? (isNumericEnum ? \"QNumericEnumCollection\" : \"QEnumCollection\") : undefined,\n qParam: isNumericEnum ? \"QNumericEnumParam\" : \"QEnumParam\",\n };\n }\n // handling of complex & entity types\n else {\n const entityConfig =\n modelType === DataTypes.ComplexType\n ? this.serviceConfigHelper.findComplexTypeConfig(dataTypeNamespace, dataTypeName)\n : this.serviceConfigHelper.findEntityTypeConfig(dataTypeNamespace, dataTypeName);\n const typeName = entityConfig?.mappedName ?? odataDataType;\n\n result = {\n dataType: modelType,\n type: this.namingHelper.getModelName(typeName),\n qPath: \"QEntityPath\",\n qObject: this.namingHelper.getQName(typeName),\n qParam: \"QComplexParam\",\n };\n }\n }\n // OData built-in data types\n else if (odataDataType.startsWith(Digester.EDM_PREFIX)) {\n const { outputType, qPath, qParam, qCollection } = this.mapODataType(odataDataType);\n const { to, toModule: typeModule, converters } = this.dataModel.getConverter(odataDataType) || {};\n\n const type = !to ? outputType : to.startsWith(Digester.EDM_PREFIX) ? this.mapODataType(to).outputType : to;\n\n result = {\n dataType: DataTypes.PrimitiveType,\n type,\n typeModule,\n qPath,\n qParam,\n qObject: isCollection ? qCollection : undefined,\n converters,\n };\n } else {\n throw new Error(\n `Unknown type [${odataDataType}]: Not 'Collection(...)', not OData type 'Edm.*', not starting with one of the namespaces!`,\n );\n }\n\n return {\n odataName: p.$.Name,\n name: modelName,\n odataType: p.$.Type,\n fqType: odataDataType,\n required: ifFalse(p.$.Nullable),\n isCollection: isCollection,\n managed: typeof entityPropConfig?.managed !== \"undefined\" ? entityPropConfig.managed : configProp?.managed,\n ...result,\n };\n };\n\n private addSubtypes(model: ComplexModelType, grandChildren = new Set<string>()) {\n if (!model.baseClasses.length) {\n return;\n }\n\n model.baseClasses.forEach((baseClass) => {\n const baseType = this.dataModel.getModel(baseClass) as ComplexModelType;\n\n // add subtypes & base name for q-objects\n baseType.subtypes.add(model.fqName);\n if (!baseType.qBaseName) {\n baseType.qBaseName = this.namingHelper.getQBaseName(baseType.name);\n }\n grandChildren.forEach((gc) => baseType.subtypes.add(gc));\n\n // recursive\n grandChildren.add(model.fqName);\n this.addSubtypes(baseType, grandChildren);\n });\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DataModelDigestionV2.js","sourceRoot":"","sources":["../../src/data-model/DataModelDigestionV2.ts"],"names":[],"mappings":";AAAA,OAAO,EAAyB,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGnE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAa,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAiC,MAAM,oBAAoB,CAAC;AAKjF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAA+B,CAAO,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE;IACzF,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAE9E,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAC5E,OAAO,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC3B,CAAC,CAAA,CAAC;AAEF,MAAM,UAAW,SAAQ,QAA+C;IACtE,YACE,OAAwB,EACxB,OAAyB,EACzB,YAA0B,EAC1B,UAA6C;QAE7C,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IACrE,CAAC;IAEO,kBAAkB,CAAC,EAAsB;;QAC/C,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,IAAI,MAAM,CAAC,WAAW,EAAE;gBACtB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBAC7E,MAAM,WAAW,GAAG,MAAA,MAAM,CAAC,WAAW,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;gBAC/E,MAAM,MAAM,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACtE,IAAI,MAAM,EAAE;oBACV,OAAO,MAAM,CAAC;iBACf;aACF;SACF;QACD,MAAM,IAAI,KAAK,CAAC,kEAAkE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IAClG,CAAC;IAES,kBAAkB,CAAC,UAAsC;QACjE,gEAAgE;QAChE,MAAM,EAAE,GAAG,UAA0B,CAAC;QACtC,IAAI,EAAE,CAAC,kBAAkB,EAAE;YACzB,OAAO,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;gBACtC,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;gBACxC,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBACvF,MAAM,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAEvF,OAAO;oBACL,CAAC,EAAE;wBACD,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;wBACf,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;wBAC7D,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;qBACxC;iBACF,CAAC;YACJ,CAAC,CAAC,CAAC;SACJ;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,mGAAmG;IACzF,gBAAgB,CAAC,MAAgB,IAAG,CAAC;IAErC,qBAAqB,CAAC,MAAgB;;QAC9C,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE;YAC3D,MAAM,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;YAEhC,MAAA,SAAS,CAAC,cAAc,0CAAE,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;;gBAC/C,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;gBACpC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBACvF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,KAAI,SAAS,CAAC,CAAC;gBACpG,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gBACvD,MAAM,OAAO,GAAG,CAAA,MAAA,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,0CAAE,WAAW,EAAE,MAAK,MAAM,CAAC;gBACvE,MAAM,UAAU,GAAG,MAAA,MAAA,UAAU,CAAC,SAAS,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAC;gBAE3E,yDAAyD;gBACzD,4GAA4G;gBAC5G,0DAA0D;gBAC1D,MAAM,aAAa,GACjB,UAAU,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAA,MAAA,UAAU,CAAC,UAAU,0CAAE,MAAM,EAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC3G,MAAM,UAAU,GAA8B,aAAa;oBACzD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC;oBACnF,CAAC,CAAC,SAAS,CAAC;gBAEd,2CAA2C;gBAC3C,uDAAuD;gBACvD,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,MAAM,EAAE;oBAC7C,MAAM;oBACN,SAAS;oBACT,IAAI;oBACJ,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC,MAAM,CAAC;oBACtE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC;oBACjD,IAAI,0CAAyB;oBAC7B,UAAU;oBACV,UAAU;oBACV,OAAO;iBACR,CAAC,CAAC;gBAEH,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE;oBACjC,MAAM;oBACN,SAAS;oBACT,IAAI;oBACJ,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,SAAU;oBAClC,SAAS,EAAE,MAAM;iBAClB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAA,SAAS,CAAC,SAAS,0CAAE,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;gBACzC,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;gBACnC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAChD,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAC/E,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,KAAI,SAAS,CAAC,CAAC;gBACtF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBACxE,IAAI,CAAC,UAAU,EAAE;oBACf,MAAM,IAAI,KAAK,CAAC,gBAAgB,SAAS,CAAC,CAAC,CAAC,UAAU,cAAc,CAAC,CAAC;iBACvE;gBAED,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE;oBAClC,MAAM;oBACN,SAAS;oBACT,IAAI;oBACJ,UAAU;iBACX,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAES,YAAY,CAAC,IAAY;QACjC,QAAQ,IAAI,EAAE;YACZ,KAAK,YAAY,CAAC,OAAO;gBACvB,OAAO;oBACL,UAAU,EAAE,SAAS;oBACrB,KAAK,EAAE,cAAc;oBACrB,WAAW,EAAE,oBAAoB;oBACjC,MAAM,EAAE,eAAe;iBACxB,CAAC;YACJ,KAAK,YAAY,CAAC,KAAK,CAAC;YACxB,KAAK,YAAY,CAAC,KAAK;gBACrB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,eAAe;oBACtB,WAAW,EAAE,qBAAqB;oBAClC,MAAM,EAAE,cAAc;iBACvB,CAAC;YACJ,KAAK,YAAY,CAAC,IAAI,CAAC;YACvB,KAAK,YAAY,CAAC,KAAK;gBACrB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,qBAAqB;oBAC5B,WAAW,EAAE,2BAA2B;oBACxC,MAAM,EAAE,sBAAsB;iBAC/B,CAAC;YACJ,KAAK,YAAY,CAAC,KAAK;gBACrB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,qBAAqB;oBAC5B,WAAW,EAAE,2BAA2B;oBACxC,MAAM,EAAE,eAAe;iBACxB,CAAC;YACJ,KAAK,YAAY,CAAC,MAAM;gBACtB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,qBAAqB;oBAC5B,WAAW,EAAE,2BAA2B;oBACxC,MAAM,EAAE,gBAAgB;iBACzB,CAAC;YACJ,KAAK,YAAY,CAAC,MAAM;gBACtB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,qBAAqB;oBAC5B,WAAW,EAAE,2BAA2B;oBACxC,MAAM,EAAE,gBAAgB;iBACzB,CAAC;YACJ,KAAK,YAAY,CAAC,OAAO;gBACvB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,qBAAqB;oBAC5B,WAAW,EAAE,2BAA2B;oBACxC,MAAM,EAAE,iBAAiB;iBAC1B,CAAC;YACJ,KAAK,YAAY,CAAC,MAAM;gBACtB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,eAAe;oBACtB,WAAW,EAAE,qBAAqB;oBAClC,MAAM,EAAE,cAAc;iBACvB,CAAC;YACJ,KAAK,YAAY,CAAC,QAAQ;gBACxB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,iBAAiB;oBACxB,WAAW,EAAE,uBAAuB;oBACpC,MAAM,EAAE,kBAAkB;iBAC3B,CAAC;YACJ,KAAK,YAAY,CAAC,IAAI;gBACpB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,aAAa;oBACpB,WAAW,EAAE,mBAAmB;oBAChC,MAAM,EAAE,cAAc;iBACvB,CAAC;YACJ,KAAK,YAAY,CAAC,cAAc;gBAC9B,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,uBAAuB;oBAC9B,WAAW,EAAE,6BAA6B;oBAC1C,MAAM,EAAE,wBAAwB;iBACjC,CAAC;YACJ,KAAK,YAAY,CAAC,MAAM;gBACtB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,aAAa;oBACpB,WAAW,EAAE,mBAAmB;oBAChC,MAAM,EAAE,gBAAgB;iBACzB,CAAC;YACJ,KAAK,YAAY,CAAC,IAAI;gBACpB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,aAAa;oBACpB,WAAW,EAAE,mBAAmB;oBAChC,MAAM,EAAE,cAAc;iBACvB,CAAC;YACJ;gBACE,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,eAAe;oBACtB,WAAW,EAAE,qBAAqB;oBAClC,MAAM,EAAE,SAAS;iBAClB,CAAC;SACL;IACH,CAAC;CACF","sourcesContent":["import { MappedConverterChains, loadConverters } from \"@odata2ts/converter-runtime\";\r\nimport { ODataTypesV2, ODataVersions } from \"@odata2ts/odata-core\";\r\n\r\nimport { DigesterFunction, DigestionOptions } from \"../FactoryFunctionModel.js\";\r\nimport { withNamespace } from \"./DataModel.js\";\r\nimport { Digester, TypeModel } from \"./DataModelDigestion.js\";\r\nimport { ODataVersion, OperationTypes, PropertyModel } from \"./DataTypeModel.js\";\r\nimport { ComplexType, Property } from \"./edmx/ODataEdmxModelBase.js\";\r\nimport { AssociationEnd, ComplexTypeV3, EntityTypeV3, NavigationProperty, SchemaV3 } from \"./edmx/ODataEdmxModelV3.js\";\r\nimport { NamingHelper } from \"./NamingHelper.js\";\r\n\r\n/**\r\n * Digests an EDMX schema to produce a DataModel.\r\n *\r\n * @param schemas\r\n * @param options\r\n * @param namingHelper\r\n */\r\nexport const digest: DigesterFunction<SchemaV3> = async (schemas, options, namingHelper) => {\r\n const converters = await loadConverters(ODataVersions.V2, options.converters);\r\n\r\n const digester = new DigesterV3(schemas, options, namingHelper, converters);\r\n return digester.digest();\r\n};\r\n\r\nclass DigesterV3 extends Digester<SchemaV3, EntityTypeV3, ComplexTypeV3> {\r\n constructor(\r\n schemas: Array<SchemaV3>,\r\n options: DigestionOptions,\r\n namingHelper: NamingHelper,\r\n converters: MappedConverterChains | undefined\r\n ) {\r\n super(ODataVersion.V2, schemas, options, namingHelper, converters);\r\n }\r\n\r\n private findAssociationEnd(np: NavigationProperty): AssociationEnd {\r\n for (let schema of this.schemas) {\r\n if (schema.Association) {\r\n const relationship = this.namingHelper.stripServicePrefix(np.$.Relationship);\r\n const association = schema.Association?.find((a) => a.$.Name === relationship);\r\n const result = association?.End.find((e) => e.$.Role === np.$.ToRole);\r\n if (result) {\r\n return result;\r\n }\r\n }\r\n }\r\n throw new Error(`Association end couldn't be determined for NavigationProperty [${np.$.Name}]`);\r\n }\r\n\r\n protected getNavigationProps(entityType: ComplexType | EntityTypeV3): Array<Property> {\r\n // return (entityType as EntityTypeV3).NavigationProperty || [];\r\n const et = entityType as EntityTypeV3;\r\n if (et.NavigationProperty) {\r\n return et.NavigationProperty.map((np) => {\r\n const end = this.findAssociationEnd(np);\r\n const isRequired = end.$.Multiplicity !== \"*\" && !end.$.Multiplicity.startsWith(\"0..\");\r\n const isCollection = end.$.Multiplicity !== \"1\" && !end.$.Multiplicity.endsWith(\"..1\");\r\n\r\n return {\r\n $: {\r\n Name: np.$.Name,\r\n Type: isCollection ? `Collection(${end.$.Type})` : end.$.Type,\r\n Nullable: isRequired ? \"false\" : \"true\",\r\n },\r\n };\r\n });\r\n }\r\n\r\n return [];\r\n }\r\n\r\n // in V2 all we have & need is the FunctionImport: Function & Action elements are only known in V4.\r\n protected digestOperations(schema: SchemaV3) {}\r\n\r\n protected digestEntityContainer(schema: SchemaV3) {\r\n if (schema.EntityContainer && schema.EntityContainer.length) {\r\n const container = schema.EntityContainer[0];\r\n const ecName = container.$.Name;\r\n\r\n container.FunctionImport?.forEach((funcImport) => {\r\n const odataName = funcImport.$.Name;\r\n const fqName = withNamespace(ecName, odataName);\r\n const opConfig = this.serviceConfigHelper.findOperationImportConfig(ecName, odataName);\r\n const opName = this.nameValidator.addOperationImportType(fqName, opConfig?.mappedName || odataName);\r\n const name = this.namingHelper.getFunctionName(opName);\r\n const usePost = funcImport.$[\"m:HttpMethod\"]?.toUpperCase() === \"POST\";\r\n const parameters = funcImport.Parameter?.map((p) => this.mapProp(p)) ?? [];\r\n\r\n // TODO: the spec allows for multiple ReturnType elements\r\n // https://docs.microsoft.com/en-us/openspecs/windows_protocols/mc-csdl/f510f36a-36bf-47f4-ac41-4a0ff921fbfa\r\n // totally unclear how the response object would look like\r\n const returnTypeDef =\r\n funcImport.$.ReturnType || (funcImport.ReturnType?.length ? funcImport.ReturnType[0].$.Type : undefined);\r\n const returnType: PropertyModel | undefined = returnTypeDef\r\n ? this.mapProp({ $: { Name: \"NO_NAME_BECAUSE_RETURN_TYPE\", Type: returnTypeDef } })\r\n : undefined;\r\n\r\n // V2 only knows the FunctionImport element\r\n // we generate the data structure for the function here\r\n this.dataModel.addUnboundOperationType(ecName, {\r\n fqName,\r\n odataName,\r\n name,\r\n paramsModelName: this.namingHelper.getOperationParamsModelName(opName),\r\n qName: this.namingHelper.getQFunctionName(opName),\r\n type: OperationTypes.Function,\r\n parameters,\r\n returnType,\r\n usePost,\r\n });\r\n\r\n this.dataModel.addFunction(fqName, {\r\n fqName,\r\n odataName,\r\n name,\r\n entitySet: funcImport.$.EntitySet!,\r\n operation: fqName,\r\n });\r\n });\r\n\r\n container.EntitySet?.forEach((entitySet) => {\r\n const odataName = entitySet.$.Name;\r\n const fqName = withNamespace(ecName, odataName);\r\n const config = this.serviceConfigHelper.findEntitySetConfig(ecName, odataName);\r\n const name = this.nameValidator.addEntitySet(fqName, config?.mappedName || odataName);\r\n const entityType = this.dataModel.getEntityType(entitySet.$.EntityType);\r\n if (!entityType) {\r\n throw new Error(`Entity type \"${entitySet.$.EntityType}\" not found!`);\r\n }\r\n\r\n this.dataModel.addEntitySet(fqName, {\r\n fqName,\r\n odataName,\r\n name,\r\n entityType,\r\n });\r\n });\r\n }\r\n }\r\n\r\n protected mapODataType(type: string): TypeModel {\r\n switch (type) {\r\n case ODataTypesV2.Boolean:\r\n return {\r\n outputType: \"boolean\",\r\n qPath: \"QBooleanPath\",\r\n qCollection: \"QBooleanCollection\",\r\n qParam: \"QBooleanParam\",\r\n };\r\n case ODataTypesV2.Int16:\r\n case ODataTypesV2.Int32:\r\n return {\r\n outputType: \"number\",\r\n qPath: \"QNumberV2Path\",\r\n qCollection: \"QNumberV2Collection\",\r\n qParam: \"QNumberParam\",\r\n };\r\n case ODataTypesV2.Byte:\r\n case ODataTypesV2.SByte:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QStringNumberV2Path\",\r\n qCollection: \"QStringNumberV2Collection\",\r\n qParam: \"QStringNumberV2Param\",\r\n };\r\n case ODataTypesV2.Int64:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QStringNumberV2Path\",\r\n qCollection: \"QStringNumberV2Collection\",\r\n qParam: \"QInt64V2Param\",\r\n };\r\n case ODataTypesV2.Single:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QStringNumberV2Path\",\r\n qCollection: \"QStringNumberV2Collection\",\r\n qParam: \"QSingleV2Param\",\r\n };\r\n case ODataTypesV2.Double:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QStringNumberV2Path\",\r\n qCollection: \"QStringNumberV2Collection\",\r\n qParam: \"QDoubleV2Param\",\r\n };\r\n case ODataTypesV2.Decimal:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QStringNumberV2Path\",\r\n qCollection: \"QStringNumberV2Collection\",\r\n qParam: \"QDecimalV2Param\",\r\n };\r\n case ODataTypesV2.String:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QStringV2Path\",\r\n qCollection: \"QStringV2Collection\",\r\n qParam: \"QStringParam\",\r\n };\r\n case ODataTypesV2.DateTime:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QDateTimeV2Path\",\r\n qCollection: \"QDateTimeV2Collection\",\r\n qParam: \"QDateTimeV2Param\",\r\n };\r\n case ODataTypesV2.Time:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QTimeV2Path\",\r\n qCollection: \"QTimeV2Collection\",\r\n qParam: \"QTimeV2Param\",\r\n };\r\n case ODataTypesV2.DateTimeOffset:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QDateTimeOffsetV2Path\",\r\n qCollection: \"QDateTimeOffsetV2Collection\",\r\n qParam: \"QDateTimeOffsetV2Param\",\r\n };\r\n case ODataTypesV2.Binary:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QBinaryPath\",\r\n qCollection: \"QBinaryCollection\",\r\n qParam: \"QBinaryV2Param\",\r\n };\r\n case ODataTypesV2.Guid:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QGuidV2Path\",\r\n qCollection: \"QGuidV2Collection\",\r\n qParam: \"QGuidV2Param\",\r\n };\r\n default:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QStringV2Path\",\r\n qCollection: \"QStringV2Collection\",\r\n qParam: undefined,\r\n };\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"DataModelDigestionV2.js","sourceRoot":"","sources":["../../src/data-model/DataModelDigestionV2.ts"],"names":[],"mappings":"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","sourcesContent":["import { MappedConverterChains, loadConverters } from \"@odata2ts/converter-runtime\";\nimport { ODataTypesV2, ODataVersions } from \"@odata2ts/odata-core\";\n\nimport { DigesterFunction, DigestionOptions } from \"../FactoryFunctionModel.js\";\nimport { withNamespace } from \"./DataModel.js\";\nimport { Digester, TypeModel } from \"./DataModelDigestion.js\";\nimport { ODataVersion, OperationTypes, PropertyModel } from \"./DataTypeModel.js\";\nimport { ComplexType, Property } from \"./edmx/ODataEdmxModelBase.js\";\nimport { AssociationEnd, ComplexTypeV3, EntityTypeV3, NavigationProperty, SchemaV3 } from \"./edmx/ODataEdmxModelV3.js\";\nimport { NamingHelper } from \"./NamingHelper.js\";\n\n/**\n * Digests an EDMX schema to produce a DataModel.\n *\n * @param schemas\n * @param options\n * @param namingHelper\n */\nexport const digest: DigesterFunction<SchemaV3> = async (schemas, options, namingHelper) => {\n const converters = await loadConverters(ODataVersions.V2, options.converters);\n\n const digester = new DigesterV3(schemas, options, namingHelper, converters);\n return digester.digest();\n};\n\nclass DigesterV3 extends Digester<SchemaV3, EntityTypeV3, ComplexTypeV3> {\n constructor(\n schemas: Array<SchemaV3>,\n options: DigestionOptions,\n namingHelper: NamingHelper,\n converters: MappedConverterChains | undefined\n ) {\n super(ODataVersion.V2, schemas, options, namingHelper, converters);\n }\n\n private findAssociationEnd(np: NavigationProperty): AssociationEnd {\n for (let schema of this.schemas) {\n if (schema.Association) {\n const relationship = this.namingHelper.stripServicePrefix(np.$.Relationship);\n const association = schema.Association?.find((a) => a.$.Name === relationship);\n const result = association?.End.find((e) => e.$.Role === np.$.ToRole);\n if (result) {\n return result;\n }\n }\n }\n throw new Error(`Association end couldn't be determined for NavigationProperty [${np.$.Name}]`);\n }\n\n protected getNavigationProps(entityType: ComplexType | EntityTypeV3): Array<Property> {\n // return (entityType as EntityTypeV3).NavigationProperty || [];\n const et = entityType as EntityTypeV3;\n if (et.NavigationProperty) {\n return et.NavigationProperty.map((np) => {\n const end = this.findAssociationEnd(np);\n const isRequired = end.$.Multiplicity !== \"*\" && !end.$.Multiplicity.startsWith(\"0..\");\n const isCollection = end.$.Multiplicity !== \"1\" && !end.$.Multiplicity.endsWith(\"..1\");\n\n return {\n $: {\n Name: np.$.Name,\n Type: isCollection ? `Collection(${end.$.Type})` : end.$.Type,\n Nullable: isRequired ? \"false\" : \"true\",\n },\n };\n });\n }\n\n return [];\n }\n\n // in V2 all we have & need is the FunctionImport: Function & Action elements are only known in V4.\n protected digestOperations(schema: SchemaV3) {}\n\n protected digestEntityContainer(schema: SchemaV3) {\n if (schema.EntityContainer && schema.EntityContainer.length) {\n const container = schema.EntityContainer[0];\n const ecName = container.$.Name;\n\n container.FunctionImport?.forEach((funcImport) => {\n const odataName = funcImport.$.Name;\n const fqName = withNamespace(ecName, odataName);\n const opConfig = this.serviceConfigHelper.findOperationImportConfig(ecName, odataName);\n const opName = this.nameValidator.addOperationImportType(fqName, opConfig?.mappedName || odataName);\n const name = this.namingHelper.getFunctionName(opName);\n const usePost = funcImport.$[\"m:HttpMethod\"]?.toUpperCase() === \"POST\";\n const parameters = funcImport.Parameter?.map((p) => this.mapProp(p)) ?? [];\n\n // TODO: the spec allows for multiple ReturnType elements\n // https://docs.microsoft.com/en-us/openspecs/windows_protocols/mc-csdl/f510f36a-36bf-47f4-ac41-4a0ff921fbfa\n // totally unclear how the response object would look like\n const returnTypeDef =\n funcImport.$.ReturnType || (funcImport.ReturnType?.length ? funcImport.ReturnType[0].$.Type : undefined);\n const returnType: PropertyModel | undefined = returnTypeDef\n ? this.mapProp({ $: { Name: \"NO_NAME_BECAUSE_RETURN_TYPE\", Type: returnTypeDef } })\n : undefined;\n\n // V2 only knows the FunctionImport element\n // we generate the data structure for the function here\n this.dataModel.addUnboundOperationType(ecName, {\n fqName,\n odataName,\n name,\n paramsModelName: this.namingHelper.getOperationParamsModelName(opName),\n qName: this.namingHelper.getQFunctionName(opName),\n type: OperationTypes.Function,\n parameters,\n returnType,\n usePost,\n });\n\n this.dataModel.addFunction(fqName, {\n fqName,\n odataName,\n name,\n entitySet: funcImport.$.EntitySet!,\n operation: fqName,\n });\n });\n\n container.EntitySet?.forEach((entitySet) => {\n const odataName = entitySet.$.Name;\n const fqName = withNamespace(ecName, odataName);\n const config = this.serviceConfigHelper.findEntitySetConfig(ecName, odataName);\n const name = this.nameValidator.addEntitySet(fqName, config?.mappedName || odataName);\n const entityType = this.dataModel.getEntityType(entitySet.$.EntityType);\n if (!entityType) {\n throw new Error(`Entity type \"${entitySet.$.EntityType}\" not found!`);\n }\n\n this.dataModel.addEntitySet(fqName, {\n fqName,\n odataName,\n name,\n entityType,\n });\n });\n }\n }\n\n protected mapODataType(type: string): TypeModel {\n switch (type) {\n case ODataTypesV2.Boolean:\n return {\n outputType: \"boolean\",\n qPath: \"QBooleanPath\",\n qCollection: \"QBooleanCollection\",\n qParam: \"QBooleanParam\",\n };\n case ODataTypesV2.Int16:\n case ODataTypesV2.Int32:\n return {\n outputType: \"number\",\n qPath: \"QNumberV2Path\",\n qCollection: \"QNumberV2Collection\",\n qParam: \"QNumberParam\",\n };\n case ODataTypesV2.Byte:\n case ODataTypesV2.SByte:\n return {\n outputType: \"string\",\n qPath: \"QStringNumberV2Path\",\n qCollection: \"QStringNumberV2Collection\",\n qParam: \"QStringNumberV2Param\",\n };\n case ODataTypesV2.Int64:\n return {\n outputType: \"string\",\n qPath: \"QStringNumberV2Path\",\n qCollection: \"QStringNumberV2Collection\",\n qParam: \"QInt64V2Param\",\n };\n case ODataTypesV2.Single:\n return {\n outputType: \"string\",\n qPath: \"QStringNumberV2Path\",\n qCollection: \"QStringNumberV2Collection\",\n qParam: \"QSingleV2Param\",\n };\n case ODataTypesV2.Double:\n return {\n outputType: \"string\",\n qPath: \"QStringNumberV2Path\",\n qCollection: \"QStringNumberV2Collection\",\n qParam: \"QDoubleV2Param\",\n };\n case ODataTypesV2.Decimal:\n return {\n outputType: \"string\",\n qPath: \"QStringNumberV2Path\",\n qCollection: \"QStringNumberV2Collection\",\n qParam: \"QDecimalV2Param\",\n };\n case ODataTypesV2.String:\n return {\n outputType: \"string\",\n qPath: \"QStringV2Path\",\n qCollection: \"QStringV2Collection\",\n qParam: \"QStringParam\",\n };\n case ODataTypesV2.DateTime:\n return {\n outputType: \"string\",\n qPath: \"QDateTimeV2Path\",\n qCollection: \"QDateTimeV2Collection\",\n qParam: \"QDateTimeV2Param\",\n };\n case ODataTypesV2.Time:\n return {\n outputType: \"string\",\n qPath: \"QTimeV2Path\",\n qCollection: \"QTimeV2Collection\",\n qParam: \"QTimeV2Param\",\n };\n case ODataTypesV2.DateTimeOffset:\n return {\n outputType: \"string\",\n qPath: \"QDateTimeOffsetV2Path\",\n qCollection: \"QDateTimeOffsetV2Collection\",\n qParam: \"QDateTimeOffsetV2Param\",\n };\n case ODataTypesV2.Binary:\n return {\n outputType: \"string\",\n qPath: \"QBinaryPath\",\n qCollection: \"QBinaryCollection\",\n qParam: \"QBinaryV2Param\",\n };\n case ODataTypesV2.Guid:\n return {\n outputType: \"string\",\n qPath: \"QGuidV2Path\",\n qCollection: \"QGuidV2Collection\",\n qParam: \"QGuidV2Param\",\n };\n default:\n return {\n outputType: \"string\",\n qPath: \"QStringV2Path\",\n qCollection: \"QStringV2Collection\",\n qParam: undefined,\n };\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DataModelDigestionV4.js","sourceRoot":"","sources":["../../src/data-model/DataModelDigestionV4.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAyB,MAAM,6BAA6B,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,EAAsB,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAa,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAgD,MAAM,oBAAoB,CAAC;AAKhG,MAAM,CAAC,MAAM,MAAM,GAA+B,CAAO,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE;IACzF,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAE9E,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAC5E,OAAO,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC3B,CAAC,CAAA,CAAC;AAEF,MAAM,UAAW,SAAQ,QAA+C;IACtE,YACE,OAAwB,EACxB,OAAyB,EACzB,YAA0B,EAC1B,UAAkC;QAElC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IACrE,CAAC;IAES,kBAAkB,CAAC,UAAsC;QACjE,OAAQ,UAA2B,CAAC,kBAAkB,IAAI,EAAE,CAAC;IAC/D,CAAC;IAES,gBAAgB,CAAC,MAAgB;QACzC,MAAM,WAAW,GAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7E,sBAAsB;QACtB,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,2CAA0B,CAAC;QAC1E,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,uCAAwB,CAAC;IACxE,CAAC;IAES,qBAAqB,CAAC,MAAgB;;QAC9C,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE;YAC3D,MAAM,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAE5C,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;YAEhC,MAAA,SAAS,CAAC,YAAY,0CAAE,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;gBAC/C,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBACvF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,KAAI,SAAS,CAAC,CAAC;gBAEpG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE;oBAC/B,MAAM;oBACN,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC;oBAC7C,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI;oBAC9B,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM;iBACjC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAA,SAAS,CAAC,cAAc,0CAAE,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;gBAC/C,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;gBACpC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBACvF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,KAAI,SAAS,CAAC,CAAC;gBAEpG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE;oBACjC,MAAM;oBACN,SAAS;oBACT,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC;oBAC/C,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ;oBAChC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS;iBAClC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAA,SAAS,CAAC,SAAS,0CAAE,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;gBACzC,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;gBACnC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAChD,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAC9F,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAC1C,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,EAChC,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,UAAU,KAAI,SAAS,CACzC,CAAC;gBACF,MAAM,eAAe,GAAG,SAAS,CAAC,yBAAyB,IAAI,EAAE,CAAC;gBAClE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAClE,IAAI,CAAC,UAAU,EAAE;oBACf,MAAM,IAAI,KAAK,CAAC,gBAAgB,SAAS,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC;iBACjE;gBAED,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE;oBAClC,MAAM;oBACN,SAAS;oBACT,IAAI;oBACJ,UAAU;oBACV,cAAc,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;wBAChD,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;wBAC1D,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM;qBACzB,CAAC,CAAC;iBACJ,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAA,SAAS,CAAC,SAAS,0CAAE,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;gBACzC,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;gBACnC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAChD,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBACrF,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,KAAI,SAAS,CAAC,CAAC;gBACtF,MAAM,eAAe,GAAG,SAAS,CAAC,yBAAyB,IAAI,EAAE,CAAC;gBAClE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBACxE,IAAI,CAAC,UAAU,EAAE;oBACf,MAAM,IAAI,KAAK,CAAC,gBAAgB,SAAS,CAAC,CAAC,CAAC,UAAU,cAAc,CAAC,CAAC;iBACvE;gBAED,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE;oBAClC,MAAM;oBACN,SAAS;oBACT,IAAI;oBACJ,UAAU;oBACV,cAAc,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;wBAChD,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;wBAC1D,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM;qBACzB,CAAC,CAAC;iBACJ,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAES,YAAY,CAAC,IAAY;QACjC,QAAQ,IAAI,EAAE;YACZ,KAAK,YAAY,CAAC,OAAO;gBACvB,OAAO;oBACL,UAAU,EAAE,SAAS;oBACrB,KAAK,EAAE,cAAc;oBACrB,WAAW,EAAE,oBAAoB;oBACjC,MAAM,EAAE,eAAe;iBACxB,CAAC;YACJ,KAAK,YAAY,CAAC,KAAK,CAAC;YACxB,KAAK,YAAY,CAAC,OAAO;gBACvB,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE;oBACpC,OAAO;wBACL,UAAU,EAAE,QAAQ;wBACpB,KAAK,EAAE,gBAAgB;wBACvB,WAAW,EAAE,sBAAsB;wBACnC,MAAM,EAAE,iBAAiB;qBAC1B,CAAC;iBACH;YACH,iCAAiC;YACjC,KAAK,YAAY,CAAC,IAAI,CAAC;YACvB,KAAK,YAAY,CAAC,KAAK,CAAC;YACxB,KAAK,YAAY,CAAC,KAAK,CAAC;YACxB,KAAK,YAAY,CAAC,KAAK,CAAC;YACxB,KAAK,YAAY,CAAC,MAAM,CAAC;YACzB,KAAK,YAAY,CAAC,MAAM;gBACtB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,aAAa;oBACpB,WAAW,EAAE,mBAAmB;oBAChC,MAAM,EAAE,cAAc;iBACvB,CAAC;YACJ,KAAK,YAAY,CAAC,MAAM;gBACtB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,aAAa;oBACpB,WAAW,EAAE,mBAAmB;oBAChC,MAAM,EAAE,cAAc;iBACvB,CAAC;YACJ,KAAK,YAAY,CAAC,IAAI;gBACpB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,WAAW;oBAClB,WAAW,EAAE,iBAAiB;oBAC9B,MAAM,EAAE,YAAY;iBACrB,CAAC;YACJ,KAAK,YAAY,CAAC,SAAS;gBACzB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,gBAAgB;oBACvB,WAAW,EAAE,sBAAsB;oBACnC,MAAM,EAAE,iBAAiB;iBAC1B,CAAC;YACJ,KAAK,YAAY,CAAC,cAAc;gBAC9B,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,qBAAqB;oBAC5B,WAAW,EAAE,2BAA2B;oBACxC,MAAM,EAAE,sBAAsB;iBAC/B,CAAC;YACJ,8BAA8B;YAC9B,aAAa;YACb,4BAA4B;YAC5B,8BAA8B;YAC9B,0CAA0C;YAC1C,gCAAgC;YAChC,OAAO;YACP,KAAK,YAAY,CAAC,MAAM;gBACtB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,aAAa;oBACpB,WAAW,EAAE,mBAAmB;oBAChC,MAAM,EAAE,cAAc;iBACvB,CAAC;YACJ,KAAK,YAAY,CAAC,IAAI;gBACpB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,WAAW;oBAClB,WAAW,EAAE,iBAAiB;oBAC9B,MAAM,EAAE,YAAY;iBACrB,CAAC;YACJ;gBACE,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,aAAa;oBACpB,WAAW,EAAE,mBAAmB;oBAChC,MAAM,EAAE,SAAS;iBAClB,CAAC;SACL;IACH,CAAC;IAEO,aAAa,CAAC,EAAsB,EAAE,UAAwC,EAAE,IAAoB;QAC1G,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YACrC,OAAO;SACR;QAED,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;;YACxB,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5B,MAAM,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC;YACxC,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YACjF,MAAM,MAAM,GAAyB,MAAA,MAAA,EAAE,CAAC,SAAS,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAC;YACrF,MAAM,UAAU,GAA8B,MAAA,EAAE,CAAC,UAAU,0CAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;gBACtE,OAAO,IAAI,CAAC,OAAO,iCAAM,EAAE,KAAE,CAAC,kBAAI,IAAI,EAAE,6BAA6B,IAAK,EAAE,CAAC,CAAC,KAAK,CAAC;YACtF,CAAC,EAAE,CAAC,CAAC,CAAC;YAEN,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBAC7B,MAAM,IAAI,KAAK,CAAC,4BAA4B,SAAS,oCAAoC,CAAC,CAAC;aAC5F;YAED,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACzD,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAY,CAAC,MAAM,CAAC,0CAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YAEvG,MAAM,MAAM,GAAG,iBAAiB;gBAC9B,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,KAAI,SAAS,EAAE,IAAI,CAAC;gBAC9G,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,KAAI,SAAS,EAAE,IAAI,CAAC,CAAC;YAEhG,MAAM,IAAI,GACR,IAAI,6CAA4B;gBAC9B,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC;gBAC3C,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,KAAK,GACT,IAAI,6CAA4B;gBAC9B,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC;gBAC/D,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;YAClE,MAAM,MAAM,GAAkB;gBAC5B,MAAM;gBACN,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBACvC,IAAI;gBACJ,KAAK;gBACL,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC,MAAM,EAAE,iBAAiB,CAAC;gBACzF,IAAI;gBACJ,UAAU,EAAE,MAAM;gBAClB,UAAU;aACX,CAAC;YAEF,IAAI,WAAW,EAAE;gBACf,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;aACtE;iBAAM;gBACL,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;aAC3D;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import { loadConverters, MappedConverterChains } from \"@odata2ts/converter-runtime\";\r\nimport { ODataTypesV4, ODataVersions } from \"@odata2ts/odata-core\";\r\nimport { DigesterFunction, DigestionOptions } from \"../FactoryFunctionModel.js\";\r\nimport { NamespaceWithAlias, withNamespace } from \"./DataModel.js\";\r\nimport { Digester, TypeModel } from \"./DataModelDigestion.js\";\r\nimport { ODataVersion, OperationType, OperationTypes, PropertyModel } from \"./DataTypeModel.js\";\r\nimport { ComplexType, Property } from \"./edmx/ODataEdmxModelBase.js\";\r\nimport { ComplexTypeV4, EntityTypeV4, Operation, SchemaV4 } from \"./edmx/ODataEdmxModelV4.js\";\r\nimport { NamingHelper } from \"./NamingHelper.js\";\r\n\r\nexport const digest: DigesterFunction<SchemaV4> = async (schemas, options, namingHelper) => {\r\n const converters = await loadConverters(ODataVersions.V4, options.converters);\r\n\r\n const digester = new DigesterV4(schemas, options, namingHelper, converters);\r\n return digester.digest();\r\n};\r\n\r\nclass DigesterV4 extends Digester<SchemaV4, EntityTypeV4, ComplexTypeV4> {\r\n constructor(\r\n schemas: Array<SchemaV4>,\r\n options: DigestionOptions,\r\n namingHelper: NamingHelper,\r\n converters?: MappedConverterChains,\r\n ) {\r\n super(ODataVersion.V4, schemas, options, namingHelper, converters);\r\n }\r\n\r\n protected getNavigationProps(entityType: ComplexType | EntityTypeV4): Array<Property> {\r\n return (entityType as EntityTypeV4).NavigationProperty || [];\r\n }\r\n\r\n protected digestOperations(schema: SchemaV4) {\r\n const nsWithAlias: NamespaceWithAlias = [schema.$.Namespace, schema.$.Alias];\r\n // functions & actions\r\n this.addOperations(nsWithAlias, schema.Function, OperationTypes.Function);\r\n this.addOperations(nsWithAlias, schema.Action, OperationTypes.Action);\r\n }\r\n\r\n protected digestEntityContainer(schema: SchemaV4) {\r\n if (schema.EntityContainer && schema.EntityContainer.length) {\r\n const container = schema.EntityContainer[0];\r\n\r\n const ecName = container.$.Name;\r\n\r\n container.ActionImport?.forEach((actionImport) => {\r\n const odataName = actionImport.$.Name;\r\n const fqName = withNamespace(ecName, odataName);\r\n const opConfig = this.serviceConfigHelper.findOperationImportConfig(ecName, odataName);\r\n const opName = this.nameValidator.addOperationImportType(fqName, opConfig?.mappedName || odataName);\r\n\r\n this.dataModel.addAction(fqName, {\r\n fqName,\r\n name: this.namingHelper.getActionName(opName),\r\n odataName: actionImport.$.Name,\r\n operation: actionImport.$.Action,\r\n });\r\n });\r\n\r\n container.FunctionImport?.forEach((funcImport) => {\r\n const odataName = funcImport.$.Name;\r\n const fqName = withNamespace(ecName, odataName);\r\n const opConfig = this.serviceConfigHelper.findOperationImportConfig(ecName, odataName);\r\n const opName = this.nameValidator.addOperationImportType(fqName, opConfig?.mappedName || odataName);\r\n\r\n this.dataModel.addFunction(fqName, {\r\n fqName,\r\n odataName,\r\n name: this.namingHelper.getFunctionName(opName),\r\n operation: funcImport.$.Function,\r\n entitySet: funcImport.$.EntitySet,\r\n });\r\n });\r\n\r\n container.Singleton?.forEach((singleton) => {\r\n const odataName = singleton.$.Name;\r\n const fqName = withNamespace(ecName, odataName);\r\n const singletonConfig = this.serviceConfigHelper.findOperationImportConfig(ecName, odataName);\r\n const name = this.nameValidator.addSingleton(\r\n withNamespace(fqName, odataName),\r\n singletonConfig?.mappedName || odataName,\r\n );\r\n const navPropBindings = singleton.NavigationPropertyBinding || [];\r\n const entityType = this.dataModel.getEntityType(singleton.$.Type);\r\n if (!entityType) {\r\n throw new Error(`Entity type \"${singleton.$.Type}\" not found!`);\r\n }\r\n\r\n this.dataModel.addSingleton(fqName, {\r\n fqName,\r\n odataName,\r\n name,\r\n entityType,\r\n navPropBinding: navPropBindings.map((binding) => ({\r\n path: this.namingHelper.stripServicePrefix(binding.$.Path),\r\n target: binding.$.Target,\r\n })),\r\n });\r\n });\r\n\r\n container.EntitySet?.forEach((entitySet) => {\r\n const odataName = entitySet.$.Name;\r\n const fqName = withNamespace(ecName, odataName);\r\n const config = this.serviceConfigHelper.findOperationImportConfig(ecName, odataName);\r\n const name = this.nameValidator.addEntitySet(fqName, config?.mappedName || odataName);\r\n const navPropBindings = entitySet.NavigationPropertyBinding || [];\r\n const entityType = this.dataModel.getEntityType(entitySet.$.EntityType);\r\n if (!entityType) {\r\n throw new Error(`Entity type \"${entitySet.$.EntityType}\" not found!`);\r\n }\r\n\r\n this.dataModel.addEntitySet(fqName, {\r\n fqName,\r\n odataName,\r\n name,\r\n entityType,\r\n navPropBinding: navPropBindings.map((binding) => ({\r\n path: this.namingHelper.stripServicePrefix(binding.$.Path),\r\n target: binding.$.Target,\r\n })),\r\n });\r\n });\r\n }\r\n }\r\n\r\n protected mapODataType(type: string): TypeModel {\r\n switch (type) {\r\n case ODataTypesV4.Boolean:\r\n return {\r\n outputType: \"boolean\",\r\n qPath: \"QBooleanPath\",\r\n qCollection: \"QBooleanCollection\",\r\n qParam: \"QBooleanParam\",\r\n };\r\n case ODataTypesV4.Int64:\r\n case ODataTypesV4.Decimal:\r\n if (this.options.v4BigNumberAsString) {\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QBigNumberPath\",\r\n qCollection: \"QBigNumberCollection\",\r\n qParam: \"QBigNumberParam\",\r\n };\r\n }\r\n // yes, intentional fall through!\r\n case ODataTypesV4.Byte:\r\n case ODataTypesV4.SByte:\r\n case ODataTypesV4.Int16:\r\n case ODataTypesV4.Int32:\r\n case ODataTypesV4.Single:\r\n case ODataTypesV4.Double:\r\n return {\r\n outputType: \"number\",\r\n qPath: \"QNumberPath\",\r\n qCollection: \"QNumberCollection\",\r\n qParam: \"QNumberParam\",\r\n };\r\n case ODataTypesV4.String:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QStringPath\",\r\n qCollection: \"QStringCollection\",\r\n qParam: \"QStringParam\",\r\n };\r\n case ODataTypesV4.Date:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QDatePath\",\r\n qCollection: \"QDateCollection\",\r\n qParam: \"QDateParam\",\r\n };\r\n case ODataTypesV4.TimeOfDay:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QTimeOfDayPath\",\r\n qCollection: \"QTimeOfDayCollection\",\r\n qParam: \"QTimeOfDayParam\",\r\n };\r\n case ODataTypesV4.DateTimeOffset:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QDateTimeOffsetPath\",\r\n qCollection: \"QDateTimeOffsetCollection\",\r\n qParam: \"QDateTimeOffsetParam\",\r\n };\r\n // case ODataTypesV4.Duration:\r\n // return {\r\n // outputType: \"string\",\r\n // qPath: \"QDurationPath\",\r\n // qCollection: \"QDurationCollection\",\r\n // qParam: \"QDurationParam\",\r\n // };\r\n case ODataTypesV4.Binary:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QBinaryPath\",\r\n qCollection: \"QBinaryCollection\",\r\n qParam: \"QBinaryParam\",\r\n };\r\n case ODataTypesV4.Guid:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QGuidPath\",\r\n qCollection: \"QGuidCollection\",\r\n qParam: \"QGuidParam\",\r\n };\r\n default:\r\n return {\r\n outputType: \"string\",\r\n qPath: \"QStringPath\",\r\n qCollection: \"QStringCollection\",\r\n qParam: undefined,\r\n };\r\n }\r\n }\r\n\r\n private addOperations(ns: NamespaceWithAlias, operations: Array<Operation> | undefined, type: OperationTypes) {\r\n const [namespace] = ns;\r\n if (!operations || !operations.length) {\r\n return;\r\n }\r\n\r\n operations.forEach((op) => {\r\n const odataName = op.$.Name;\r\n const isBound = op.$.IsBound === \"true\";\r\n const fqName = withNamespace(namespace, odataName);\r\n const opConfig = this.serviceConfigHelper.findOperationTypeConfig(ns, odataName);\r\n const params: Array<PropertyModel> = op.Parameter?.map((p) => this.mapProp(p)) ?? [];\r\n const returnType: PropertyModel | undefined = op.ReturnType?.map((rt) => {\r\n return this.mapProp({ ...rt, $: { Name: \"NO_NAME_BECAUSE_RETURN_TYPE\", ...rt.$ } });\r\n })[0];\r\n\r\n if (isBound && !params.length) {\r\n throw new Error(`IllegalState: Operation '${odataName}' is bound, but has no parameters!`);\r\n }\r\n\r\n const bindingProp = isBound ? params.shift() : undefined;\r\n const bindingEntityName = bindingProp ? this.dataModel.getModel(bindingProp!.fqType)?.name : undefined;\r\n\r\n const opName = bindingEntityName\r\n ? this.nameValidator.addBoundOperationType(bindingEntityName, fqName, opConfig?.mappedName || odataName, type)\r\n : this.nameValidator.addUnboundOperationType(fqName, opConfig?.mappedName || odataName, type);\r\n\r\n const name =\r\n type === OperationTypes.Function\r\n ? this.namingHelper.getFunctionName(opName)\r\n : this.namingHelper.getActionName(opName);\r\n const qName =\r\n type === OperationTypes.Function\r\n ? this.namingHelper.getQFunctionName(opName, bindingEntityName)\r\n : this.namingHelper.getQActionName(opName, bindingEntityName);\r\n const opType: OperationType = {\r\n fqName,\r\n odataName: isBound ? fqName : odataName,\r\n name,\r\n qName,\r\n paramsModelName: this.namingHelper.getOperationParamsModelName(opName, bindingEntityName),\r\n type,\r\n parameters: params,\r\n returnType,\r\n };\r\n\r\n if (bindingProp) {\r\n this.dataModel.addBoundOperationType(namespace, bindingProp, opType);\r\n } else {\r\n this.dataModel.addUnboundOperationType(namespace, opType);\r\n }\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"DataModelDigestionV4.js","sourceRoot":"","sources":["../../src/data-model/DataModelDigestionV4.ts"],"names":[],"mappings":"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","sourcesContent":["import { loadConverters, MappedConverterChains } from \"@odata2ts/converter-runtime\";\nimport { ODataTypesV4, ODataVersions } from \"@odata2ts/odata-core\";\nimport { DigesterFunction, DigestionOptions } from \"../FactoryFunctionModel.js\";\nimport { NamespaceWithAlias, withNamespace } from \"./DataModel.js\";\nimport { Digester, TypeModel } from \"./DataModelDigestion.js\";\nimport { ODataVersion, OperationType, OperationTypes, PropertyModel } from \"./DataTypeModel.js\";\nimport { ComplexType, Property } from \"./edmx/ODataEdmxModelBase.js\";\nimport { ComplexTypeV4, EntityTypeV4, Operation, SchemaV4 } from \"./edmx/ODataEdmxModelV4.js\";\nimport { NamingHelper } from \"./NamingHelper.js\";\n\nexport const digest: DigesterFunction<SchemaV4> = async (schemas, options, namingHelper) => {\n const converters = await loadConverters(ODataVersions.V4, options.converters);\n\n const digester = new DigesterV4(schemas, options, namingHelper, converters);\n return digester.digest();\n};\n\nclass DigesterV4 extends Digester<SchemaV4, EntityTypeV4, ComplexTypeV4> {\n constructor(\n schemas: Array<SchemaV4>,\n options: DigestionOptions,\n namingHelper: NamingHelper,\n converters?: MappedConverterChains,\n ) {\n super(ODataVersion.V4, schemas, options, namingHelper, converters);\n }\n\n protected getNavigationProps(entityType: ComplexType | EntityTypeV4): Array<Property> {\n return (entityType as EntityTypeV4).NavigationProperty || [];\n }\n\n protected digestOperations(schema: SchemaV4) {\n const nsWithAlias: NamespaceWithAlias = [schema.$.Namespace, schema.$.Alias];\n // functions & actions\n this.addOperations(nsWithAlias, schema.Function, OperationTypes.Function);\n this.addOperations(nsWithAlias, schema.Action, OperationTypes.Action);\n }\n\n protected digestEntityContainer(schema: SchemaV4) {\n if (schema.EntityContainer && schema.EntityContainer.length) {\n const container = schema.EntityContainer[0];\n\n const ecName = container.$.Name;\n\n container.ActionImport?.forEach((actionImport) => {\n const odataName = actionImport.$.Name;\n const fqName = withNamespace(ecName, odataName);\n const opConfig = this.serviceConfigHelper.findOperationImportConfig(ecName, odataName);\n const opName = this.nameValidator.addOperationImportType(fqName, opConfig?.mappedName || odataName);\n\n this.dataModel.addAction(fqName, {\n fqName,\n name: this.namingHelper.getActionName(opName),\n odataName: actionImport.$.Name,\n operation: actionImport.$.Action,\n });\n });\n\n container.FunctionImport?.forEach((funcImport) => {\n const odataName = funcImport.$.Name;\n const fqName = withNamespace(ecName, odataName);\n const opConfig = this.serviceConfigHelper.findOperationImportConfig(ecName, odataName);\n const opName = this.nameValidator.addOperationImportType(fqName, opConfig?.mappedName || odataName);\n\n this.dataModel.addFunction(fqName, {\n fqName,\n odataName,\n name: this.namingHelper.getFunctionName(opName),\n operation: funcImport.$.Function,\n entitySet: funcImport.$.EntitySet,\n });\n });\n\n container.Singleton?.forEach((singleton) => {\n const odataName = singleton.$.Name;\n const fqName = withNamespace(ecName, odataName);\n const singletonConfig = this.serviceConfigHelper.findOperationImportConfig(ecName, odataName);\n const name = this.nameValidator.addSingleton(\n withNamespace(fqName, odataName),\n singletonConfig?.mappedName || odataName,\n );\n const navPropBindings = singleton.NavigationPropertyBinding || [];\n const entityType = this.dataModel.getEntityType(singleton.$.Type);\n if (!entityType) {\n throw new Error(`Entity type \"${singleton.$.Type}\" not found!`);\n }\n\n this.dataModel.addSingleton(fqName, {\n fqName,\n odataName,\n name,\n entityType,\n navPropBinding: navPropBindings.map((binding) => ({\n path: this.namingHelper.stripServicePrefix(binding.$.Path),\n target: binding.$.Target,\n })),\n });\n });\n\n container.EntitySet?.forEach((entitySet) => {\n const odataName = entitySet.$.Name;\n const fqName = withNamespace(ecName, odataName);\n const config = this.serviceConfigHelper.findOperationImportConfig(ecName, odataName);\n const name = this.nameValidator.addEntitySet(fqName, config?.mappedName || odataName);\n const navPropBindings = entitySet.NavigationPropertyBinding || [];\n const entityType = this.dataModel.getEntityType(entitySet.$.EntityType);\n if (!entityType) {\n throw new Error(`Entity type \"${entitySet.$.EntityType}\" not found!`);\n }\n\n this.dataModel.addEntitySet(fqName, {\n fqName,\n odataName,\n name,\n entityType,\n navPropBinding: navPropBindings.map((binding) => ({\n path: this.namingHelper.stripServicePrefix(binding.$.Path),\n target: binding.$.Target,\n })),\n });\n });\n }\n }\n\n protected mapODataType(type: string): TypeModel {\n switch (type) {\n case ODataTypesV4.Boolean:\n return {\n outputType: \"boolean\",\n qPath: \"QBooleanPath\",\n qCollection: \"QBooleanCollection\",\n qParam: \"QBooleanParam\",\n };\n case ODataTypesV4.Int64:\n case ODataTypesV4.Decimal:\n if (this.options.v4BigNumberAsString) {\n return {\n outputType: \"string\",\n qPath: \"QBigNumberPath\",\n qCollection: \"QBigNumberCollection\",\n qParam: \"QBigNumberParam\",\n };\n }\n // yes, intentional fall through!\n case ODataTypesV4.Byte:\n case ODataTypesV4.SByte:\n case ODataTypesV4.Int16:\n case ODataTypesV4.Int32:\n case ODataTypesV4.Single:\n case ODataTypesV4.Double:\n return {\n outputType: \"number\",\n qPath: \"QNumberPath\",\n qCollection: \"QNumberCollection\",\n qParam: \"QNumberParam\",\n };\n case ODataTypesV4.String:\n return {\n outputType: \"string\",\n qPath: \"QStringPath\",\n qCollection: \"QStringCollection\",\n qParam: \"QStringParam\",\n };\n case ODataTypesV4.Date:\n return {\n outputType: \"string\",\n qPath: \"QDatePath\",\n qCollection: \"QDateCollection\",\n qParam: \"QDateParam\",\n };\n case ODataTypesV4.TimeOfDay:\n return {\n outputType: \"string\",\n qPath: \"QTimeOfDayPath\",\n qCollection: \"QTimeOfDayCollection\",\n qParam: \"QTimeOfDayParam\",\n };\n case ODataTypesV4.DateTimeOffset:\n return {\n outputType: \"string\",\n qPath: \"QDateTimeOffsetPath\",\n qCollection: \"QDateTimeOffsetCollection\",\n qParam: \"QDateTimeOffsetParam\",\n };\n // case ODataTypesV4.Duration:\n // return {\n // outputType: \"string\",\n // qPath: \"QDurationPath\",\n // qCollection: \"QDurationCollection\",\n // qParam: \"QDurationParam\",\n // };\n case ODataTypesV4.Binary:\n return {\n outputType: \"string\",\n qPath: \"QBinaryPath\",\n qCollection: \"QBinaryCollection\",\n qParam: \"QBinaryParam\",\n };\n case ODataTypesV4.Guid:\n return {\n outputType: \"string\",\n qPath: \"QGuidPath\",\n qCollection: \"QGuidCollection\",\n qParam: \"QGuidParam\",\n };\n default:\n return {\n outputType: \"string\",\n qPath: \"QStringPath\",\n qCollection: \"QStringCollection\",\n qParam: undefined,\n };\n }\n }\n\n private addOperations(ns: NamespaceWithAlias, operations: Array<Operation> | undefined, type: OperationTypes) {\n const [namespace] = ns;\n if (!operations || !operations.length) {\n return;\n }\n\n operations.forEach((op) => {\n const odataName = op.$.Name;\n const isBound = op.$.IsBound === \"true\";\n const fqName = withNamespace(namespace, odataName);\n const opConfig = this.serviceConfigHelper.findOperationTypeConfig(ns, odataName);\n const params: Array<PropertyModel> = op.Parameter?.map((p) => this.mapProp(p)) ?? [];\n const returnType: PropertyModel | undefined = op.ReturnType?.map((rt) => {\n return this.mapProp({ ...rt, $: { Name: \"NO_NAME_BECAUSE_RETURN_TYPE\", ...rt.$ } });\n })[0];\n\n if (isBound && !params.length) {\n throw new Error(`IllegalState: Operation '${odataName}' is bound, but has no parameters!`);\n }\n\n const bindingProp = isBound ? params.shift() : undefined;\n const bindingEntityName = bindingProp ? this.dataModel.getModel(bindingProp!.fqType)?.name : undefined;\n\n const opName = bindingEntityName\n ? this.nameValidator.addBoundOperationType(bindingEntityName, fqName, opConfig?.mappedName || odataName, type)\n : this.nameValidator.addUnboundOperationType(fqName, opConfig?.mappedName || odataName, type);\n\n const name =\n type === OperationTypes.Function\n ? this.namingHelper.getFunctionName(opName)\n : this.namingHelper.getActionName(opName);\n const qName =\n type === OperationTypes.Function\n ? this.namingHelper.getQFunctionName(opName, bindingEntityName)\n : this.namingHelper.getQActionName(opName, bindingEntityName);\n const opType: OperationType = {\n fqName,\n odataName: isBound ? fqName : odataName,\n name,\n qName,\n paramsModelName: this.namingHelper.getOperationParamsModelName(opName, bindingEntityName),\n type,\n parameters: params,\n returnType,\n };\n\n if (bindingProp) {\n this.dataModel.addBoundOperationType(namespace, bindingProp, opType);\n } else {\n this.dataModel.addUnboundOperationType(namespace, opType);\n }\n });\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DataTypeModel.js","sourceRoot":"","sources":["../../src/data-model/DataTypeModel.ts"],"names":[],"mappings":"AAGA,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,0BAAU,CAAA;IACV,0BAAU,CAAA;AACZ,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB","sourcesContent":["import { ValueConverterImport } from \"@odata2ts/converter-runtime\";\r\nimport { Modes } from \"../OptionModel.js\";\r\n\r\nexport enum ODataVersion {\r\n V2 = \"2.0\",\r\n V4 = \"4.0\",\r\n}\r\n\r\nexport const enum DataTypes {\r\n PrimitiveType = \"PrimitiveType\",\r\n EnumType = \"EnumType\",\r\n ComplexType = \"ComplexType\",\r\n ModelType = \"ModelType\",\r\n}\r\n\r\nexport const enum OperationTypes {\r\n Function = \"Function\",\r\n Action = \"Action\",\r\n}\r\n\r\nexport interface PropertyModel {\r\n odataName: string;\r\n name: string;\r\n odataType: string;\r\n fqType: string;\r\n type: string;\r\n typeModule?: string;\r\n qObject?: string;\r\n qPath: string;\r\n qParam?: string;\r\n required: boolean;\r\n isCollection: boolean;\r\n dataType: DataTypes;\r\n converters?: Array<ValueConverterImport>;\r\n managed?: boolean;\r\n}\r\n\r\nexport type ModelType = EntityType | ComplexType | EnumType;\r\n\r\nexport interface EntityType extends ComplexType {\r\n id: {\r\n // fully qualified name of entity to which this id belongs (might have been inherited)\r\n fqName: string;\r\n // that's the name of the param model for the id function\r\n modelName: string;\r\n // that's the name of the id function which is a q-object\r\n qName: string;\r\n };\r\n generateId: boolean;\r\n keyNames: Array<string>;\r\n keys: Array<PropertyModel>;\r\n getKeyUnion(): string;\r\n}\r\n\r\nexport interface ComplexType {\r\n dataType: DataTypes;\r\n fqName: string;\r\n odataName: string;\r\n name: string;\r\n modelName: string;\r\n editableName: string;\r\n qName: string;\r\n qBaseName?: string;\r\n serviceName: string;\r\n serviceCollectionName: string;\r\n folderPath: string;\r\n props: Array<PropertyModel>;\r\n baseProps: Array<PropertyModel>;\r\n baseClasses: Array<string>;\r\n finalBaseClass: string | undefined;\r\n abstract: boolean;\r\n open: boolean;\r\n genMode: Modes;\r\n subtypes: Set<string>;\r\n}\r\n\r\nexport interface EnumType {\r\n dataType: DataTypes;\r\n odataName: string;\r\n fqName: string;\r\n name: string;\r\n modelName: string;\r\n folderPath: string;\r\n members: Array<{ name: string; value: number }>;\r\n}\r\n\r\nexport interface OperationType {\r\n fqName: string;\r\n odataName: string;\r\n name: string;\r\n qName: string;\r\n paramsModelName: string;\r\n type: OperationTypes;\r\n parameters: Array<PropertyModel>;\r\n returnType?: ReturnTypeModel;\r\n usePost?: boolean;\r\n overrides?: Array<Array<PropertyModel>>;\r\n}\r\n\r\nexport interface ReturnTypeModel extends PropertyModel {}\r\n\r\nexport type EntityContainerModel = {\r\n entitySets: { [name: string]: EntitySetType };\r\n singletons: { [name: string]: SingletonType };\r\n functions: { [name: string]: FunctionImportType };\r\n actions: { [name: string]: ActionImportType };\r\n};\r\n\r\nexport interface SingletonType {\r\n fqName: string;\r\n odataName: string;\r\n name: string;\r\n entityType: EntityType;\r\n navPropBinding?: Array<NavPropBindingType>;\r\n}\r\n\r\nexport interface EntitySetType {\r\n fqName: string;\r\n odataName: string;\r\n name: string;\r\n entityType: EntityType;\r\n navPropBinding?: Array<NavPropBindingType>;\r\n}\r\n\r\nexport interface NavPropBindingType {\r\n path: string;\r\n target: string;\r\n}\r\n\r\nexport interface ActionImportType {\r\n fqName: string;\r\n odataName: string;\r\n name: string;\r\n operation: string;\r\n}\r\n\r\nexport interface FunctionImportType extends ActionImportType {\r\n entitySet: string;\r\n}\r\n"]}
1
+ {"version":3,"file":"DataTypeModel.js","sourceRoot":"","sources":["../../src/data-model/DataTypeModel.ts"],"names":[],"mappings":"AAGA,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,0BAAU,CAAA;IACV,0BAAU,CAAA;AACZ,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB","sourcesContent":["import { ValueConverterImport } from \"@odata2ts/converter-runtime\";\nimport { Modes } from \"../OptionModel.js\";\n\nexport enum ODataVersion {\n V2 = \"2.0\",\n V4 = \"4.0\",\n}\n\nexport const enum DataTypes {\n PrimitiveType = \"PrimitiveType\",\n EnumType = \"EnumType\",\n ComplexType = \"ComplexType\",\n ModelType = \"ModelType\",\n}\n\nexport const enum OperationTypes {\n Function = \"Function\",\n Action = \"Action\",\n}\n\nexport interface PropertyModel {\n odataName: string;\n name: string;\n odataType: string;\n fqType: string;\n type: string;\n typeModule?: string;\n qObject?: string;\n qPath: string;\n qParam?: string;\n required: boolean;\n isCollection: boolean;\n dataType: DataTypes;\n converters?: Array<ValueConverterImport>;\n managed?: boolean;\n}\n\nexport type ModelType = EntityType | ComplexType | EnumType;\n\nexport interface EntityType extends ComplexType {\n id: {\n // fully qualified name of entity to which this id belongs (might have been inherited)\n fqName: string;\n // that's the name of the param model for the id function\n modelName: string;\n // that's the name of the id function which is a q-object\n qName: string;\n };\n generateId: boolean;\n keyNames: Array<string>;\n keys: Array<PropertyModel>;\n getKeyUnion(): string;\n}\n\nexport interface ComplexType {\n dataType: DataTypes;\n fqName: string;\n odataName: string;\n name: string;\n modelName: string;\n editableName: string;\n qName: string;\n qBaseName?: string;\n serviceName: string;\n serviceCollectionName: string;\n folderPath: string;\n props: Array<PropertyModel>;\n baseProps: Array<PropertyModel>;\n baseClasses: Array<string>;\n finalBaseClass: string | undefined;\n abstract: boolean;\n open: boolean;\n genMode: Modes;\n subtypes: Set<string>;\n}\n\nexport interface EnumType {\n dataType: DataTypes;\n odataName: string;\n fqName: string;\n name: string;\n modelName: string;\n folderPath: string;\n members: Array<{ name: string; value: number }>;\n}\n\nexport interface OperationType {\n fqName: string;\n odataName: string;\n name: string;\n qName: string;\n paramsModelName: string;\n type: OperationTypes;\n parameters: Array<PropertyModel>;\n returnType?: ReturnTypeModel;\n usePost?: boolean;\n overrides?: Array<Array<PropertyModel>>;\n}\n\nexport interface ReturnTypeModel extends PropertyModel {}\n\nexport type EntityContainerModel = {\n entitySets: { [name: string]: EntitySetType };\n singletons: { [name: string]: SingletonType };\n functions: { [name: string]: FunctionImportType };\n actions: { [name: string]: ActionImportType };\n};\n\nexport interface SingletonType {\n fqName: string;\n odataName: string;\n name: string;\n entityType: EntityType;\n navPropBinding?: Array<NavPropBindingType>;\n}\n\nexport interface EntitySetType {\n fqName: string;\n odataName: string;\n name: string;\n entityType: EntityType;\n navPropBinding?: Array<NavPropBindingType>;\n}\n\nexport interface NavPropBindingType {\n path: string;\n target: string;\n}\n\nexport interface ActionImportType {\n fqName: string;\n odataName: string;\n name: string;\n operation: string;\n}\n\nexport interface FunctionImportType extends ActionImportType {\n entitySet: string;\n}\n"]}