@odata2ts/odata2ts 0.36.3 → 0.38.0
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.
- package/CHANGELOG.md +28 -0
- package/lib/FactoryFunctionModel.d.ts +7 -7
- package/lib/FactoryFunctionModel.js +1 -2
- package/lib/FactoryFunctionModel.js.map +1 -1
- package/lib/NamingModel.js +2 -5
- package/lib/NamingModel.js.map +1 -1
- package/lib/OptionModel.d.ts +7 -2
- package/lib/OptionModel.js +4 -7
- package/lib/OptionModel.js.map +1 -1
- package/lib/TypeModel.js +2 -5
- package/lib/TypeModel.js.map +1 -1
- package/lib/app.d.ts +2 -2
- package/lib/app.js +23 -27
- package/lib/app.js.map +1 -1
- package/lib/cli/cli.d.ts +1 -0
- package/lib/cli/cli.js +27 -0
- package/lib/cli/cli.js.map +1 -0
- package/lib/cli/index.d.ts +4 -0
- package/lib/cli/index.js +5 -0
- package/lib/cli/index.js.map +1 -0
- package/lib/cli/processCliArgs.d.ts +2 -0
- package/lib/cli/processCliArgs.js +57 -0
- package/lib/cli/processCliArgs.js.map +1 -0
- package/lib/cli/processConfigFile.d.ts +2 -0
- package/lib/cli/processConfigFile.js +24 -0
- package/lib/cli/processConfigFile.js.map +1 -0
- package/lib/cli/serviceGenerationRun.d.ts +2 -0
- package/lib/cli/serviceGenerationRun.js +77 -0
- package/lib/cli/serviceGenerationRun.js.map +1 -0
- package/lib/data-model/DataModel.d.ts +2 -2
- package/lib/data-model/DataModel.js +5 -10
- package/lib/data-model/DataModel.js.map +1 -1
- package/lib/data-model/DataModelDigestion.d.ts +10 -10
- package/lib/data-model/DataModelDigestion.js +27 -27
- package/lib/data-model/DataModelDigestion.js.map +1 -1
- package/lib/data-model/DataModelDigestionV2.d.ts +2 -2
- package/lib/data-model/DataModelDigestionV2.js +27 -31
- package/lib/data-model/DataModelDigestionV2.js.map +1 -1
- package/lib/data-model/DataModelDigestionV4.d.ts +2 -2
- package/lib/data-model/DataModelDigestionV4.js +33 -37
- package/lib/data-model/DataModelDigestionV4.js.map +1 -1
- package/lib/data-model/DataTypeModel.d.ts +5 -2
- package/lib/data-model/DataTypeModel.js +2 -5
- package/lib/data-model/DataTypeModel.js.map +1 -1
- package/lib/data-model/NamingHelper.d.ts +2 -2
- package/lib/data-model/NamingHelper.js +12 -19
- package/lib/data-model/NamingHelper.js.map +1 -1
- package/lib/data-model/ServiceConfigHelper.d.ts +3 -3
- package/lib/data-model/ServiceConfigHelper.js +18 -22
- package/lib/data-model/ServiceConfigHelper.js.map +1 -1
- package/lib/data-model/edmx/ODataEdmxModelBase.js +1 -2
- package/lib/data-model/edmx/ODataEdmxModelV3.d.ts +1 -1
- package/lib/data-model/edmx/ODataEdmxModelV3.js +1 -2
- package/lib/data-model/edmx/ODataEdmxModelV3.js.map +1 -1
- package/lib/data-model/edmx/ODataEdmxModelV4.d.ts +1 -1
- package/lib/data-model/edmx/ODataEdmxModelV4.js +1 -2
- package/lib/data-model/edmx/ODataEdmxModelV4.js.map +1 -1
- package/lib/data-model/validation/NameClashValidator.d.ts +5 -4
- package/lib/data-model/validation/NameClashValidator.js +16 -18
- package/lib/data-model/validation/NameClashValidator.js.map +1 -1
- package/lib/data-model/validation/NameValidator.d.ts +3 -2
- package/lib/data-model/validation/NameValidator.js +1 -2
- package/lib/data-model/validation/NameValidator.js.map +1 -1
- package/lib/data-model/validation/NoopValidator.d.ts +4 -3
- package/lib/data-model/validation/NoopValidator.js +5 -9
- package/lib/data-model/validation/NoopValidator.js.map +1 -1
- package/lib/defaultConfig.d.ts +1 -1
- package/lib/defaultConfig.js +22 -26
- package/lib/defaultConfig.js.map +1 -1
- package/lib/download/downloadMetadata.d.ts +1 -1
- package/lib/download/downloadMetadata.js +6 -10
- package/lib/download/downloadMetadata.js.map +1 -1
- package/lib/download/index.d.ts +2 -2
- package/lib/download/index.js +2 -7
- package/lib/download/index.js.map +1 -1
- package/lib/download/storeMetadata.js +15 -17
- package/lib/download/storeMetadata.js.map +1 -1
- package/lib/evaluateConfig.d.ts +1 -1
- package/lib/evaluateConfig.js +14 -18
- package/lib/evaluateConfig.js.map +1 -1
- package/lib/generator/ImportContainer.d.ts +3 -3
- package/lib/generator/ImportContainer.js +40 -27
- package/lib/generator/ImportContainer.js.map +1 -1
- package/lib/generator/ImportedNameValidator.js +1 -5
- package/lib/generator/ImportedNameValidator.js.map +1 -1
- package/lib/generator/ModelGenerator.d.ts +1 -1
- package/lib/generator/ModelGenerator.js +13 -13
- package/lib/generator/ModelGenerator.js.map +1 -1
- package/lib/generator/QueryObjectGenerator.d.ts +1 -1
- package/lib/generator/QueryObjectGenerator.js +41 -31
- package/lib/generator/QueryObjectGenerator.js.map +1 -1
- package/lib/generator/ServiceGenerator.d.ts +5 -5
- package/lib/generator/ServiceGenerator.js +62 -65
- package/lib/generator/ServiceGenerator.js.map +1 -1
- package/lib/generator/import/ImportObjects.d.ts +3 -1
- package/lib/generator/import/ImportObjects.js +14 -15
- package/lib/generator/import/ImportObjects.js.map +1 -1
- package/lib/generator/index.d.ts +3 -3
- package/lib/generator/index.js +3 -9
- package/lib/generator/index.js.map +1 -1
- package/lib/index.d.ts +4 -4
- package/lib/index.js +4 -7
- package/lib/index.js.map +1 -1
- package/lib/project/FileHandler.d.ts +3 -3
- package/lib/project/FileHandler.js +12 -16
- package/lib/project/FileHandler.js.map +1 -1
- package/lib/project/ProjectManager.d.ts +5 -5
- package/lib/project/ProjectManager.js +25 -32
- package/lib/project/ProjectManager.js.map +1 -1
- package/lib/project/TsMorphHelper.d.ts +1 -1
- package/lib/project/TsMorphHelper.js +21 -22
- package/lib/project/TsMorphHelper.js.map +1 -1
- package/lib/project/formatter/BaseFormatter.d.ts +1 -1
- package/lib/project/formatter/BaseFormatter.js +1 -5
- package/lib/project/formatter/BaseFormatter.js.map +1 -1
- package/lib/project/formatter/FileFormatter.js +1 -2
- package/lib/project/formatter/NoopFormatter.d.ts +1 -1
- package/lib/project/formatter/NoopFormatter.js +5 -9
- package/lib/project/formatter/NoopFormatter.js.map +1 -1
- package/lib/project/formatter/PrettierFormatter.d.ts +1 -1
- package/lib/project/formatter/PrettierFormatter.js +20 -25
- package/lib/project/formatter/PrettierFormatter.js.map +1 -1
- package/lib/project/formatter/index.d.ts +1 -1
- package/lib/project/formatter/index.js +6 -10
- package/lib/project/formatter/index.js.map +1 -1
- package/lib/project/logger/logFilePath.js +4 -9
- package/lib/project/logger/logFilePath.js.map +1 -1
- package/lib/run-cli.js +2 -4
- package/lib/run-cli.js.map +1 -1
- package/package.json +55 -64
- package/lib/cli.d.ts +0 -3
- package/lib/cli.js +0 -176
- package/lib/cli.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceGenerator.js","sourceRoot":"","sources":["../../src/generator/ServiceGenerator.ts"],"names":[],"mappings":"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","sourcesContent":["import { ODataVersions } from \"@odata2ts/odata-core\";\r\nimport deepmerge from \"deepmerge\";\r\nimport {\r\n ClassDeclarationStructure,\r\n MethodDeclarationStructure,\r\n OptionalKind,\r\n PropertyDeclarationStructure,\r\n Scope,\r\n} from \"ts-morph\";\r\nimport { upperCaseFirst } from \"upper-case-first\";\r\nimport { firstCharLowerCase } from \"xml2js/lib/processors\";\r\n\r\nimport { DataModel } from \"../data-model/DataModel\";\r\nimport {\r\n ActionImportType,\r\n ComplexType,\r\n DataTypes,\r\n EntityContainerModel,\r\n EntityType,\r\n FunctionImportType,\r\n OperationType,\r\n OperationTypes,\r\n PropertyModel,\r\n ReturnTypeModel,\r\n SingletonType,\r\n} from \"../data-model/DataTypeModel\";\r\nimport { NamingHelper } from \"../data-model/NamingHelper\";\r\nimport { ConfigFileOptions, Modes } from \"../OptionModel\";\r\nimport { FileHandler } from \"../project/FileHandler\";\r\nimport { ProjectManager } from \"../project/ProjectManager\";\r\nimport { ClientApiImports, CoreImports, QueryObjectImports, ServiceImports } from \"./import/ImportObjects\";\r\nimport { ImportContainer } from \"./ImportContainer\";\r\n\r\nexport interface PropsAndOps extends Required<Pick<ClassDeclarationStructure, \"properties\" | \"methods\">> {}\r\n\r\nexport interface ServiceGeneratorOptions\r\n extends Pick<ConfigFileOptions, \"enablePrimitivePropertyServices\" | \"v4BigNumberAsString\"> {}\r\n\r\nexport async function generateServices(\r\n project: ProjectManager,\r\n dataModel: DataModel,\r\n version: ODataVersions,\r\n namingHelper: NamingHelper,\r\n options?: ServiceGeneratorOptions\r\n) {\r\n const generator = new ServiceGenerator(project, dataModel, version, namingHelper, options);\r\n return generator.generate();\r\n}\r\n\r\nclass ServiceGenerator {\r\n constructor(\r\n private project: ProjectManager,\r\n private dataModel: DataModel,\r\n private version: ODataVersions,\r\n private namingHelper: NamingHelper,\r\n private options: ServiceGeneratorOptions = {}\r\n ) {}\r\n\r\n private isV4BigNumber() {\r\n return this.options.v4BigNumberAsString && this.version === ODataVersions.V4;\r\n }\r\n\r\n public async generate(): Promise<void> {\r\n const mainServiceName = this.namingHelper.getMainServiceName();\r\n this.project.initServices();\r\n\r\n await Promise.all([\r\n this.generateMainService(mainServiceName),\r\n ...this.generateEntityTypeServices(),\r\n ...this.generateComplexTypeServices(),\r\n ]);\r\n\r\n return this.project.finalizeServices();\r\n }\r\n\r\n private async generateMainService(mainServiceName: string) {\r\n const mainServiceFile = this.project.getMainServiceFile();\r\n const importContainer = mainServiceFile.getImports();\r\n const container = this.dataModel.getEntityContainer();\r\n const unboundOperations = [...Object.values(container.functions), ...Object.values(container.actions)];\r\n\r\n const httpClient = importContainer.addClientApi(ClientApiImports.ODataHttpClient);\r\n const rootService = importContainer.addServiceObject(this.version, ServiceImports.ODataService);\r\n\r\n const { properties, methods }: PropsAndOps = deepmerge(\r\n this.generateMainServiceProperties(container, importContainer),\r\n this.generateMainServiceOperations(unboundOperations, importContainer)\r\n );\r\n\r\n mainServiceFile.getFile().addClass({\r\n isExported: true,\r\n name: mainServiceName,\r\n typeParameters: [`in out ClientType extends ${httpClient}`],\r\n extends: `${rootService}<ClientType>`,\r\n ctors: this.isV4BigNumber()\r\n ? [\r\n {\r\n parameters: [\r\n { name: \"client\", type: \"ClientType\" },\r\n { name: \"basePath\", type: \"string\" },\r\n ],\r\n statements: [`super(client, basePath, true);`],\r\n },\r\n ]\r\n : [],\r\n properties,\r\n methods,\r\n });\r\n }\r\n\r\n private generateMainServiceProperties(\r\n container: EntityContainerModel,\r\n importContainer: ImportContainer\r\n ): PropsAndOps {\r\n const result: PropsAndOps = { properties: [], methods: [] };\r\n\r\n Object.values(container.entitySets).forEach(({ name, odataName, entityType }) => {\r\n result.methods.push(this.generateRelatedServiceGetter(name, odataName, entityType, importContainer));\r\n });\r\n\r\n Object.values(container.singletons).forEach((singleton) => {\r\n result.properties.push(this.generateSingletonProp(importContainer, singleton));\r\n result.methods.push(this.generateSingletonGetter(singleton));\r\n });\r\n\r\n return result;\r\n }\r\n\r\n private generateMainServiceOperations(\r\n ops: Array<FunctionImportType | ActionImportType>,\r\n importContainer: ImportContainer\r\n ): PropsAndOps {\r\n const result: PropsAndOps = { properties: [], methods: [] };\r\n\r\n ops.forEach(({ operation, name }) => {\r\n const op = this.dataModel.getUnboundOperationType(operation);\r\n if (!op) {\r\n throw new Error(`Operation \"${operation}\" not found!`);\r\n }\r\n\r\n result.properties.push(this.generateQOperationProp(op));\r\n result.methods.push(this.generateMethod(name, op, importContainer, \"\"));\r\n });\r\n\r\n return result;\r\n }\r\n\r\n private generateRelatedServiceGetter(\r\n propName: string,\r\n odataPropName: string,\r\n entityType: EntityType,\r\n imports: ImportContainer\r\n ): OptionalKind<MethodDeclarationStructure> {\r\n const idName = imports.addGeneratedModel(entityType.id.fqName, entityType.id.modelName);\r\n const idFunctionName = imports.addGeneratedQObject(entityType.id.fqName, entityType.id.qName);\r\n const serviceName = imports.addGeneratedService(entityType.fqName, entityType.serviceName);\r\n const collectionName = imports.addGeneratedService(entityType.fqName, entityType.serviceCollectionName);\r\n\r\n return {\r\n scope: Scope.Public,\r\n name: this.namingHelper.getRelatedServiceGetter(propName),\r\n parameters: [\r\n {\r\n name: \"id\",\r\n type: `${idName} | undefined`,\r\n hasQuestionToken: true,\r\n },\r\n ],\r\n overloads: [\r\n {\r\n parameters: [],\r\n returnType: `${collectionName}<ClientType>`,\r\n },\r\n {\r\n parameters: [\r\n {\r\n name: \"id\",\r\n type: idName,\r\n },\r\n ],\r\n returnType: `${serviceName}<ClientType>`,\r\n },\r\n ],\r\n statements: [\r\n `const fieldName = \"${odataPropName}\";`,\r\n `const { client, path } = this.__base;`,\r\n 'return typeof id === \"undefined\" || id === null',\r\n `? new ${collectionName}(client, path, fieldName)`,\r\n `: new ${serviceName}(client, path, new ${idFunctionName}(fieldName).buildUrl(id));`,\r\n ],\r\n };\r\n }\r\n\r\n private generateSingletonProp(\r\n importContainer: ImportContainer,\r\n singleton: SingletonType\r\n ): OptionalKind<PropertyDeclarationStructure> {\r\n const { name, entityType } = singleton;\r\n const type = entityType.serviceName;\r\n\r\n return {\r\n scope: Scope.Private,\r\n name: this.namingHelper.getPrivatePropName(name),\r\n type: `${type}<ClientType>`,\r\n hasQuestionToken: true,\r\n };\r\n }\r\n\r\n private generateQOperationProp = (operation: OperationType) => {\r\n return {\r\n scope: Scope.Private,\r\n name: this.namingHelper.getPrivatePropName(operation.qName),\r\n type: operation.qName,\r\n hasQuestionToken: true,\r\n };\r\n };\r\n\r\n private generateSingletonGetter(singleton: SingletonType): OptionalKind<MethodDeclarationStructure> {\r\n const { name, odataName, entityType } = singleton;\r\n const propName = \"this.\" + this.namingHelper.getPrivatePropName(name);\r\n const serviceType = entityType.serviceName;\r\n\r\n return {\r\n scope: Scope.Public,\r\n name: this.namingHelper.getRelatedServiceGetter(name),\r\n statements: [\r\n `if(!${propName}) {`,\r\n ` const { client, path } = this.__base;`,\r\n // prettier-ignore\r\n ` ${propName} = new ${serviceType}(client, path, \"${odataName}\")`,\r\n \"}\",\r\n `return ${propName}`,\r\n ],\r\n };\r\n }\r\n\r\n private generateEntityTypeService(file: FileHandler, model: ComplexType) {\r\n const importContainer = file.getImports();\r\n\r\n const operations = this.dataModel.getEntityTypeOperations(model.fqName);\r\n const props = [...model.baseProps, ...model.props];\r\n\r\n const entityServiceType = importContainer.addServiceObject(this.version, ServiceImports.EntityTypeService);\r\n const httpClient = importContainer.addClientApi(ClientApiImports.ODataHttpClient);\r\n\r\n // note: predictable first imports => no need to take renaming into account\r\n const modelName = importContainer.addGeneratedModel(model.fqName, model.modelName);\r\n const editableModelName = importContainer.addGeneratedModel(model.fqName, model.editableName);\r\n const qName = importContainer.addGeneratedQObject(model.fqName, model.qName, true);\r\n const qObjectName = importContainer.addGeneratedQObject(model.fqName, firstCharLowerCase(model.qName));\r\n\r\n const { properties, methods }: PropsAndOps = deepmerge(\r\n this.generateServiceProperties(importContainer, model.serviceName, props),\r\n this.generateServiceOperations(importContainer, model, operations)\r\n );\r\n\r\n // generate EntityTypeService\r\n file.getFile().addClass({\r\n isExported: true,\r\n name: model.serviceName,\r\n typeParameters: [`in out ClientType extends ${httpClient}`],\r\n extends: entityServiceType + `<ClientType, ${modelName}, ${editableModelName}, ${qName}>`,\r\n ctors: [\r\n {\r\n parameters: [\r\n { name: \"client\", type: \"ClientType\" },\r\n { name: \"basePath\", type: \"string\" },\r\n { name: \"name\", type: \"string\" },\r\n ],\r\n statements: [`super(client, basePath, name, ${qObjectName}${this.isV4BigNumber() ? \", true\" : \"\"});`],\r\n },\r\n ],\r\n properties,\r\n methods,\r\n });\r\n }\r\n\r\n private generateServiceProperties(\r\n importContainer: ImportContainer,\r\n serviceName: string,\r\n props: Array<PropertyModel>\r\n ): PropsAndOps {\r\n const result: PropsAndOps = { properties: [], methods: [] };\r\n\r\n props.forEach((prop) => {\r\n // complex types, collection of complex types or entityTypes\r\n if ((prop.dataType === DataTypes.ModelType && !prop.isCollection) || prop.dataType === DataTypes.ComplexType) {\r\n result.properties.push(this.generateModelProp(importContainer, prop));\r\n result.methods.push(this.generateModelPropGetter(importContainer, prop));\r\n } else if (prop.isCollection) {\r\n // collection of entity types\r\n if (prop.dataType === DataTypes.ModelType) {\r\n const entityType = this.dataModel.getEntityType(prop.fqType);\r\n if (!entityType) {\r\n throw new Error(`Entity type \"${prop.fqType}\" specified by property not found!`);\r\n }\r\n\r\n result.methods.push(\r\n this.generateRelatedServiceGetter(prop.name, prop.odataName, entityType, importContainer)\r\n );\r\n }\r\n // collection of primitive or enum types\r\n else {\r\n result.properties.push(this.generatePrimitiveCollectionProp(importContainer, prop));\r\n result.methods.push(this.generatePrimitiveCollectionGetter(importContainer, prop));\r\n }\r\n }\r\n // generation of services for each primitive property: turned off by default\r\n else if (this.options.enablePrimitivePropertyServices && prop.dataType === DataTypes.PrimitiveType) {\r\n result.properties.push(this.generatePrimitiveTypeProp(importContainer, prop));\r\n result.methods.push(this.generatePrimitiveTypeGetter(importContainer, prop));\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n private generateServiceOperations(\r\n importContainer: ImportContainer,\r\n model: ComplexType,\r\n operations: Array<OperationType>\r\n ): PropsAndOps {\r\n const result: PropsAndOps = { properties: [], methods: [] };\r\n\r\n operations.forEach((operation) => {\r\n result.properties.push(this.generateQOperationProp(operation));\r\n result.methods.push(this.generateMethod(operation.name, operation, importContainer, model.fqName));\r\n });\r\n\r\n return result;\r\n }\r\n\r\n private generateModelProp(imports: ImportContainer, prop: PropertyModel): PropertyDeclarationStructure {\r\n const propModel = this.dataModel.getModel(prop.fqType) as ComplexType;\r\n let propModelType: string;\r\n\r\n if (prop.isCollection) {\r\n const modelName = imports.addGeneratedModel(propModel.fqName, propModel.modelName);\r\n const editableModelName = imports.addGeneratedModel(propModel.fqName, propModel.editableName);\r\n const qModelName = imports.addGeneratedQObject(propModel.fqName, propModel.qName, true);\r\n const collectionServiceType = imports.addServiceObject(this.version, ServiceImports.CollectionService);\r\n\r\n propModelType = `${collectionServiceType}<ClientType, ${modelName}, ${qModelName}, ${editableModelName}>`;\r\n } else {\r\n const serviceName = imports.addGeneratedService(propModel.fqName, propModel.serviceName);\r\n propModelType = `${serviceName}<ClientType>`;\r\n }\r\n\r\n return {\r\n scope: Scope.Private,\r\n name: this.namingHelper.getPrivatePropName(prop.name),\r\n type: propModelType,\r\n hasQuestionToken: true,\r\n } as PropertyDeclarationStructure;\r\n }\r\n\r\n private generatePrimitiveCollectionProp(\r\n imports: ImportContainer,\r\n prop: PropertyModel\r\n ): OptionalKind<PropertyDeclarationStructure> {\r\n if (!prop.qObject) {\r\n throw new Error(\"Illegal State: [qObject] must be provided for Collection types!\");\r\n }\r\n\r\n const collectionServiceType = imports.addServiceObject(this.version, ServiceImports.CollectionService);\r\n const isEnum = prop.dataType === DataTypes.EnumType;\r\n let qType: string;\r\n let type: string;\r\n\r\n if (!isEnum) {\r\n // TODO refactor string concat\r\n type = imports.addQObjectType(`${upperCaseFirst(prop.type)}Collection`);\r\n qType = imports.addQObjectType(prop.qObject);\r\n } else {\r\n const propEnum = this.dataModel.getModel(prop.fqType)!;\r\n const propTypeModel = imports.addGeneratedModel(propEnum.fqName, propEnum.modelName);\r\n type = `${imports.addQObjectType(QueryObjectImports.EnumCollection)}<${propTypeModel}>`;\r\n qType = imports.addQObjectType(QueryObjectImports.QEnumCollection);\r\n }\r\n\r\n const collectionType = `${collectionServiceType}<ClientType, ${type}, ${qType}>`;\r\n\r\n return {\r\n scope: Scope.Private,\r\n name: this.namingHelper.getPrivatePropName(prop.name),\r\n type: `${collectionType}`,\r\n hasQuestionToken: true,\r\n };\r\n }\r\n\r\n private generatePrimitiveTypeProp(\r\n imports: ImportContainer,\r\n prop: PropertyModel\r\n ): OptionalKind<PropertyDeclarationStructure> {\r\n const serviceType = imports.addServiceObject(this.version, ServiceImports.PrimitiveTypeService);\r\n const type = prop.typeModule ? imports.addCustomType(prop.typeModule, prop.type, true) : prop.type;\r\n\r\n return {\r\n scope: Scope.Private,\r\n name: this.namingHelper.getPrivatePropName(prop.name),\r\n type: `${serviceType}<ClientType, ${type}>`,\r\n hasQuestionToken: true,\r\n };\r\n }\r\n\r\n private generateModelPropGetter(\r\n imports: ImportContainer,\r\n prop: PropertyModel\r\n ): OptionalKind<MethodDeclarationStructure> {\r\n const model = this.dataModel.getModel(prop.fqType) as ComplexType;\r\n const isComplexCollection = prop.isCollection && model.dataType === DataTypes.ComplexType;\r\n\r\n const type = isComplexCollection\r\n ? imports.addServiceObject(this.version, ServiceImports.CollectionService)\r\n : prop.isCollection\r\n ? model.serviceCollectionName\r\n : model.serviceName;\r\n const typeWithGenerics = isComplexCollection\r\n ? `${type}<ClientType, ${imports.addGeneratedModel(model.fqName, model.modelName)}, ${imports.addGeneratedQObject(\r\n model.fqName,\r\n model.qName,\r\n true\r\n )}, ${imports.addGeneratedModel(model.fqName, model.editableName)}>`\r\n : `${type}<ClientType>`;\r\n\r\n const privateSrvProp = \"this.\" + this.namingHelper.getPrivatePropName(prop.name);\r\n\r\n return {\r\n scope: Scope.Public,\r\n name: this.namingHelper.getRelatedServiceGetter(prop.name),\r\n returnType: typeWithGenerics,\r\n statements: [\r\n `if(!${privateSrvProp}) {`,\r\n ` const { client, path } = this.__base;`,\r\n // prettier-ignore\r\n ` ${privateSrvProp} = new ${type}(client, path, \"${prop.odataName}\"${isComplexCollection ? `, ${imports.addGeneratedQObject(model.fqName, firstCharLowerCase(model.qName))}`: \"\"})`,\r\n \"}\",\r\n `return ${privateSrvProp}`,\r\n ],\r\n };\r\n }\r\n\r\n private generatePrimitiveCollectionGetter(\r\n imports: ImportContainer,\r\n prop: PropertyModel\r\n ): OptionalKind<MethodDeclarationStructure> {\r\n const collectionServiceType = imports.addServiceObject(this.version, ServiceImports.CollectionService);\r\n const instanceName = firstCharLowerCase(prop.qObject!);\r\n const qInstanceName = imports.addQObject(instanceName);\r\n\r\n const propName = \"this.\" + this.namingHelper.getPrivatePropName(prop.name);\r\n return {\r\n scope: Scope.Public,\r\n name: this.namingHelper.getRelatedServiceGetter(prop.name),\r\n statements: [\r\n `if(!${propName}) {`,\r\n ` const { client, path } = this.__base;`,\r\n // prettier-ignore\r\n ` ${propName} = new ${collectionServiceType}(client, path, \"${prop.odataName}\", ${qInstanceName}${this.isV4BigNumber() ? \", true\": \"\"})`,\r\n \"}\",\r\n `return ${propName}`,\r\n ],\r\n };\r\n }\r\n\r\n private generatePrimitiveTypeGetter(\r\n imports: ImportContainer,\r\n prop: PropertyModel\r\n ): OptionalKind<MethodDeclarationStructure> {\r\n const serviceType = imports.addServiceObject(this.version, ServiceImports.PrimitiveTypeService);\r\n const propName = \"this.\" + this.namingHelper.getPrivatePropName(prop.name);\r\n // for V2: mapped name must be specified\r\n const useMappedName = this.version === ODataVersions.V2 && prop.name !== prop.odataName;\r\n // for V4: big number support\r\n const useBigNumber = this.isV4BigNumber();\r\n const addParamString = useMappedName ? `, \"${prop.name}\"` : useBigNumber ? \", true\" : \"\";\r\n\r\n return {\r\n scope: Scope.Public,\r\n name: this.namingHelper.getRelatedServiceGetter(prop.name),\r\n statements: [\r\n `if(!${propName}) {`,\r\n ` const { client, path, qModel } = this.__base;`,\r\n ` ${propName} = new ${serviceType}(client, path, \"${prop.odataName}\", qModel.${prop.name}.converter${addParamString})`,\r\n \"}\",\r\n `return ${propName}`,\r\n ],\r\n };\r\n }\r\n\r\n private generateEntityCollectionService(file: FileHandler, model: EntityType) {\r\n const importContainer = file.getImports();\r\n const editableModelName = model.editableName;\r\n const qObjectName = firstCharLowerCase(model.qName);\r\n\r\n const entitySetServiceType = importContainer.addServiceObject(this.version, ServiceImports.EntitySetService);\r\n const paramsModelName = importContainer.addGeneratedModel(model.id.fqName, model.id.modelName);\r\n const qIdFunctionName = importContainer.addGeneratedQObject(model.id.fqName, model.id.qName);\r\n\r\n const collectionOperations = this.dataModel.getEntitySetOperations(model.fqName);\r\n\r\n const { properties, methods } = this.generateServiceOperations(importContainer, model, collectionOperations);\r\n\r\n file.getFile().addClass({\r\n isExported: true,\r\n name: model.serviceCollectionName,\r\n typeParameters: [\"in out ClientType extends ODataHttpClient\"],\r\n extends:\r\n entitySetServiceType +\r\n `<ClientType, ${model.modelName}, ${editableModelName}, ${model.qName}, ${paramsModelName}>`,\r\n ctors: [\r\n {\r\n parameters: [\r\n { name: \"client\", type: \"ClientType\" },\r\n { name: \"basePath\", type: \"string\" },\r\n { name: \"name\", type: \"string\" },\r\n ],\r\n statements: [\r\n `super(client, basePath, name, ${qObjectName}, new ${qIdFunctionName}(name)${\r\n this.isV4BigNumber() ? \", true\" : \"\"\r\n });`,\r\n ],\r\n },\r\n ],\r\n properties,\r\n methods,\r\n });\r\n }\r\n\r\n private generateEntityTypeServices(): Array<Promise<void>> {\r\n // build service file for each entity, consisting of EntityTypeService & EntityCollectionService\r\n return this.dataModel\r\n .getEntityTypes()\r\n .filter((model) => model.genMode === Modes.service || model.genMode === Modes.all)\r\n .map((model) => {\r\n const file = this.project.createOrGetServiceFile(model.folderPath, model.serviceName, [\r\n model.serviceName,\r\n model.serviceCollectionName,\r\n ]);\r\n\r\n // entity type service\r\n this.generateEntityTypeService(file, model);\r\n // entity collection service if this entity specified keys at all\r\n if (model.keyNames.length) {\r\n this.generateEntityCollectionService(file, model);\r\n }\r\n\r\n return this.project.finalizeFile(file);\r\n });\r\n }\r\n\r\n private generateComplexTypeServices(): Array<Promise<void>> {\r\n // build service file for complex types\r\n return this.dataModel\r\n .getComplexTypes()\r\n .filter((model) => model.genMode === Modes.service || model.genMode === Modes.all)\r\n .map((model) => {\r\n const file = this.project.createOrGetServiceFile(model.folderPath, model.serviceName, [model.serviceName]);\r\n\r\n // entity type service\r\n this.generateEntityTypeService(file, model);\r\n\r\n return this.project.finalizeFile(file);\r\n });\r\n }\r\n\r\n private generateMethod(\r\n name: string,\r\n operation: OperationType,\r\n importContainer: ImportContainer,\r\n baseFqName: string\r\n ): OptionalKind<MethodDeclarationStructure> {\r\n const isFunc = operation.type === OperationTypes.Function;\r\n const returnType = operation.returnType;\r\n const hasParams = operation.parameters.length > 0 || operation.overrides?.length;\r\n const isParamsOptional = !![operation.parameters, ...(operation.overrides ?? [])].find((pSet) => pSet.length === 0);\r\n\r\n // importing dependencies\r\n const httpClientConfigModel = importContainer.addClientApi(ClientApiImports.ODataHttpClientConfig);\r\n const odataResponse = importContainer.addClientApi(ClientApiImports.HttpResponseModel);\r\n const responseStructure = this.importReturnType(importContainer, returnType);\r\n const qOperationName = importContainer.addGeneratedQObject(baseFqName, operation.qName);\r\n const rtType =\r\n returnType?.type && returnType.dataType !== DataTypes.PrimitiveType\r\n ? importContainer.addGeneratedModel(returnType.fqType, returnType.type)\r\n : returnType?.type;\r\n const paramsModelName = hasParams\r\n ? importContainer.addGeneratedModel(baseFqName, operation.paramsModelName)\r\n : undefined;\r\n\r\n const requestConfigParam = {\r\n name: \"requestConfig\",\r\n hasQuestionToken: true,\r\n type: `${httpClientConfigModel}<ClientType>`,\r\n };\r\n const qOpProp = \"this.\" + this.namingHelper.getPrivatePropName(operation.qName);\r\n\r\n return {\r\n scope: Scope.Public,\r\n isAsync: true,\r\n name,\r\n parameters: hasParams\r\n ? [{ name: \"params\", type: paramsModelName, hasQuestionToken: isParamsOptional }, requestConfigParam]\r\n : [requestConfigParam],\r\n returnType: `Promise<${odataResponse}<${responseStructure}<${rtType || \"void\"}>>>`,\r\n statements: [\r\n `if(!${qOpProp}) {`,\r\n ` ${qOpProp} = new ${qOperationName}()`,\r\n \"}\",\r\n\r\n `const { addFullPath, client, getDefaultHeaders } = this.__base;`,\r\n `const url = addFullPath(${qOpProp}.buildUrl(${isFunc && hasParams ? \"params\" : \"\"}));`,\r\n `${returnType ? \"const response = await \" : \"return\"} client.${\r\n !isFunc\r\n ? // actions: since V4\r\n `post(url, ${hasParams ? `${qOpProp}.convertUserParams(params)` : \"{}\"}, ${\r\n requestConfigParam.name\r\n }, getDefaultHeaders())`\r\n : operation.usePost\r\n ? // V2 POST => BUT values are still query params, they are not part of the request body\r\n `post(url, undefined, ${requestConfigParam.name}, getDefaultHeaders())`\r\n : // functions: since V2\r\n `get(url, ${requestConfigParam.name}, getDefaultHeaders())`\r\n };`,\r\n returnType ? `return ${qOpProp}.convertResponse(response);` : \"\",\r\n ],\r\n };\r\n }\r\n\r\n private importReturnType(imports: ImportContainer, returnType: ReturnTypeModel | undefined): string {\r\n const typeToImport: CoreImports = returnType?.isCollection\r\n ? CoreImports.ODataCollectionResponse\r\n : returnType?.dataType === DataTypes.PrimitiveType\r\n ? CoreImports.ODataValueResponse\r\n : CoreImports.ODataModelResponse;\r\n\r\n return imports.addCoreLib(this.version, typeToImport);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ServiceGenerator.js","sourceRoot":"","sources":["../../src/generator/ServiceGenerator.ts"],"names":[],"mappings":"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","sourcesContent":["import { ODataVersions } from \"@odata2ts/odata-core\";\r\nimport deepmerge from \"deepmerge\";\r\nimport {\r\n ClassDeclarationStructure,\r\n MethodDeclarationStructure,\r\n OptionalKind,\r\n PropertyDeclarationStructure,\r\n Scope,\r\n} from \"ts-morph\";\r\nimport { upperCaseFirst } from \"upper-case-first\";\r\nimport { firstCharLowerCase } from \"xml2js/lib/processors.js\";\r\nimport { DataModel } from \"../data-model/DataModel.js\";\r\nimport {\r\n ActionImportType,\r\n ComplexType,\r\n DataTypes,\r\n EntityContainerModel,\r\n EntityType,\r\n FunctionImportType,\r\n OperationType,\r\n OperationTypes,\r\n PropertyModel,\r\n ReturnTypeModel,\r\n SingletonType,\r\n} from \"../data-model/DataTypeModel.js\";\r\nimport { NamingHelper } from \"../data-model/NamingHelper.js\";\r\nimport { ConfigFileOptions, Modes } from \"../OptionModel.js\";\r\nimport { FileHandler } from \"../project/FileHandler.js\";\r\nimport { ProjectManager } from \"../project/ProjectManager.js\";\r\nimport { ClientApiImports, CoreImports, QueryObjectImports, ServiceImports } from \"./import/ImportObjects.js\";\r\nimport { ImportContainer } from \"./ImportContainer.js\";\r\n\r\nexport interface PropsAndOps extends Required<Pick<ClassDeclarationStructure, \"properties\" | \"methods\">> {}\r\n\r\nexport interface ServiceGeneratorOptions\r\n extends Pick<ConfigFileOptions, \"enablePrimitivePropertyServices\" | \"v4BigNumberAsString\" | \"numericEnums\"> {}\r\n\r\nexport async function generateServices(\r\n project: ProjectManager,\r\n dataModel: DataModel,\r\n version: ODataVersions,\r\n namingHelper: NamingHelper,\r\n options?: ServiceGeneratorOptions,\r\n) {\r\n const generator = new ServiceGenerator(project, dataModel, version, namingHelper, options);\r\n return generator.generate();\r\n}\r\n\r\nclass ServiceGenerator {\r\n constructor(\r\n private project: ProjectManager,\r\n private dataModel: DataModel,\r\n private version: ODataVersions,\r\n private namingHelper: NamingHelper,\r\n private options: ServiceGeneratorOptions = {},\r\n ) {}\r\n\r\n private isV4BigNumber() {\r\n return this.options.v4BigNumberAsString && this.version === ODataVersions.V4;\r\n }\r\n\r\n public async generate(): Promise<void> {\r\n const mainServiceName = this.namingHelper.getMainServiceName();\r\n this.project.initServices();\r\n\r\n await Promise.all([\r\n this.generateMainService(mainServiceName),\r\n ...this.generateEntityTypeServices(),\r\n ...this.generateComplexTypeServices(),\r\n ]);\r\n\r\n return this.project.finalizeServices();\r\n }\r\n\r\n private async generateMainService(mainServiceName: string) {\r\n const mainServiceFile = this.project.getMainServiceFile();\r\n const importContainer = mainServiceFile.getImports();\r\n const container = this.dataModel.getEntityContainer();\r\n const unboundOperations = [...Object.values(container.functions), ...Object.values(container.actions)];\r\n\r\n const httpClient = importContainer.addClientApi(ClientApiImports.ODataHttpClient);\r\n const rootService = importContainer.addServiceObject(this.version, ServiceImports.ODataService);\r\n\r\n const { properties, methods }: PropsAndOps = deepmerge(\r\n this.generateMainServiceProperties(container, importContainer),\r\n this.generateMainServiceOperations(unboundOperations, importContainer),\r\n );\r\n\r\n mainServiceFile.getFile().addClass({\r\n isExported: true,\r\n name: mainServiceName,\r\n typeParameters: [`in out ClientType extends ${httpClient}`],\r\n extends: `${rootService}<ClientType>`,\r\n ctors: this.isV4BigNumber()\r\n ? [\r\n {\r\n parameters: [\r\n { name: \"client\", type: \"ClientType\" },\r\n { name: \"basePath\", type: \"string\" },\r\n ],\r\n statements: [`super(client, basePath, true);`],\r\n },\r\n ]\r\n : [],\r\n properties,\r\n methods,\r\n });\r\n }\r\n\r\n private generateMainServiceProperties(\r\n container: EntityContainerModel,\r\n importContainer: ImportContainer,\r\n ): PropsAndOps {\r\n const result: PropsAndOps = { properties: [], methods: [] };\r\n\r\n Object.values(container.entitySets).forEach(({ name, odataName, entityType }) => {\r\n result.methods.push(this.generateRelatedServiceGetter(name, odataName, entityType, importContainer));\r\n });\r\n\r\n Object.values(container.singletons).forEach((singleton) => {\r\n result.properties.push(this.generateSingletonProp(importContainer, singleton));\r\n result.methods.push(this.generateSingletonGetter(singleton));\r\n });\r\n\r\n return result;\r\n }\r\n\r\n private generateMainServiceOperations(\r\n ops: Array<FunctionImportType | ActionImportType>,\r\n importContainer: ImportContainer,\r\n ): PropsAndOps {\r\n const result: PropsAndOps = { properties: [], methods: [] };\r\n\r\n ops.forEach(({ operation, name }) => {\r\n const op = this.dataModel.getUnboundOperationType(operation);\r\n if (!op) {\r\n throw new Error(`Operation \"${operation}\" not found!`);\r\n }\r\n\r\n result.properties.push(this.generateQOperationProp(op));\r\n result.methods.push(this.generateMethod(name, op, importContainer, \"\"));\r\n });\r\n\r\n return result;\r\n }\r\n\r\n private generateRelatedServiceGetter(\r\n propName: string,\r\n odataPropName: string,\r\n entityType: EntityType,\r\n imports: ImportContainer,\r\n ): OptionalKind<MethodDeclarationStructure> {\r\n const idName = imports.addGeneratedModel(entityType.id.fqName, entityType.id.modelName);\r\n const idFunctionName = imports.addGeneratedQObject(entityType.id.fqName, entityType.id.qName);\r\n const serviceName = imports.addGeneratedService(entityType.fqName, entityType.serviceName);\r\n const collectionName = imports.addGeneratedService(entityType.fqName, entityType.serviceCollectionName);\r\n\r\n return {\r\n scope: Scope.Public,\r\n name: this.namingHelper.getRelatedServiceGetter(propName),\r\n parameters: [\r\n {\r\n name: \"id\",\r\n type: `${idName} | undefined`,\r\n hasQuestionToken: true,\r\n },\r\n ],\r\n overloads: [\r\n {\r\n parameters: [],\r\n returnType: `${collectionName}<ClientType>`,\r\n },\r\n {\r\n parameters: [\r\n {\r\n name: \"id\",\r\n type: idName,\r\n },\r\n ],\r\n returnType: `${serviceName}<ClientType>`,\r\n },\r\n ],\r\n statements: [\r\n `const fieldName = \"${odataPropName}\";`,\r\n `const { client, path } = this.__base;`,\r\n 'return typeof id === \"undefined\" || id === null',\r\n `? new ${collectionName}(client, path, fieldName)`,\r\n `: new ${serviceName}(client, path, new ${idFunctionName}(fieldName).buildUrl(id));`,\r\n ],\r\n };\r\n }\r\n\r\n private generateSingletonProp(\r\n importContainer: ImportContainer,\r\n singleton: SingletonType,\r\n ): OptionalKind<PropertyDeclarationStructure> {\r\n const { name, entityType } = singleton;\r\n const type = entityType.serviceName;\r\n\r\n return {\r\n scope: Scope.Private,\r\n name: this.namingHelper.getPrivatePropName(name),\r\n type: `${type}<ClientType>`,\r\n hasQuestionToken: true,\r\n };\r\n }\r\n\r\n private generateQOperationProp = (operation: OperationType) => {\r\n return {\r\n scope: Scope.Private,\r\n name: this.namingHelper.getPrivatePropName(operation.qName),\r\n type: operation.qName,\r\n hasQuestionToken: true,\r\n };\r\n };\r\n\r\n private generateSingletonGetter(singleton: SingletonType): OptionalKind<MethodDeclarationStructure> {\r\n const { name, odataName, entityType } = singleton;\r\n const propName = \"this.\" + this.namingHelper.getPrivatePropName(name);\r\n const serviceType = entityType.serviceName;\r\n\r\n return {\r\n scope: Scope.Public,\r\n name: this.namingHelper.getRelatedServiceGetter(name),\r\n statements: [\r\n `if(!${propName}) {`,\r\n ` const { client, path } = this.__base;`,\r\n // prettier-ignore\r\n ` ${propName} = new ${serviceType}(client, path, \"${odataName}\")`,\r\n \"}\",\r\n `return ${propName}`,\r\n ],\r\n };\r\n }\r\n\r\n private generateEntityTypeService(file: FileHandler, model: ComplexType) {\r\n const importContainer = file.getImports();\r\n\r\n const operations = this.dataModel.getEntityTypeOperations(model.fqName);\r\n const props = [...model.baseProps, ...model.props];\r\n\r\n const entityServiceType = importContainer.addServiceObject(this.version, ServiceImports.EntityTypeService);\r\n const httpClient = importContainer.addClientApi(ClientApiImports.ODataHttpClient);\r\n\r\n // note: predictable first imports => no need to take renaming into account\r\n const modelName = importContainer.addGeneratedModel(model.fqName, model.modelName);\r\n const editableModelName = importContainer.addGeneratedModel(model.fqName, model.editableName);\r\n const qName = importContainer.addGeneratedQObject(model.fqName, model.qName, true);\r\n const qObjectName = importContainer.addGeneratedQObject(model.fqName, firstCharLowerCase(model.qName));\r\n\r\n const { properties, methods }: PropsAndOps = deepmerge(\r\n this.generateServiceProperties(importContainer, model.serviceName, props),\r\n this.generateServiceOperations(importContainer, model, operations),\r\n );\r\n\r\n // generate EntityTypeService\r\n file.getFile().addClass({\r\n isExported: true,\r\n name: model.serviceName,\r\n typeParameters: [`in out ClientType extends ${httpClient}`],\r\n extends: entityServiceType + `<ClientType, ${modelName}, ${editableModelName}, ${qName}>`,\r\n ctors: [\r\n {\r\n parameters: [\r\n { name: \"client\", type: \"ClientType\" },\r\n { name: \"basePath\", type: \"string\" },\r\n { name: \"name\", type: \"string\" },\r\n ],\r\n statements: [`super(client, basePath, name, ${qObjectName}${this.isV4BigNumber() ? \", true\" : \"\"});`],\r\n },\r\n ],\r\n properties,\r\n methods,\r\n });\r\n }\r\n\r\n private generateServiceProperties(\r\n importContainer: ImportContainer,\r\n serviceName: string,\r\n props: Array<PropertyModel>,\r\n ): PropsAndOps {\r\n const result: PropsAndOps = { properties: [], methods: [] };\r\n\r\n props.forEach((prop) => {\r\n // collection of ComplexTypes, ComplexTypes, or EntityTypes\r\n if ((prop.dataType === DataTypes.ModelType && !prop.isCollection) || prop.dataType === DataTypes.ComplexType) {\r\n result.properties.push(this.generateModelProp(importContainer, prop));\r\n result.methods.push(this.generateModelPropGetter(importContainer, prop));\r\n } else if (prop.isCollection) {\r\n // collection of EntityTypes\r\n if (prop.dataType === DataTypes.ModelType) {\r\n const entityType = this.dataModel.getEntityType(prop.fqType);\r\n if (!entityType) {\r\n throw new Error(`Entity type \"${prop.fqType}\" specified by property not found!`);\r\n }\r\n\r\n result.methods.push(\r\n this.generateRelatedServiceGetter(prop.name, prop.odataName, entityType, importContainer),\r\n );\r\n }\r\n // collection of primitive or enum types\r\n else {\r\n result.properties.push(this.generatePrimitiveCollectionProp(importContainer, prop));\r\n result.methods.push(this.generatePrimitiveCollectionGetter(importContainer, prop));\r\n }\r\n }\r\n // generation of services for each primitive property: turned off by default\r\n else if (this.options.enablePrimitivePropertyServices && prop.dataType === DataTypes.PrimitiveType) {\r\n result.properties.push(this.generatePrimitiveTypeProp(importContainer, prop));\r\n result.methods.push(this.generatePrimitiveTypeGetter(importContainer, prop));\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n private generateServiceOperations(\r\n importContainer: ImportContainer,\r\n model: ComplexType,\r\n operations: Array<OperationType>,\r\n ): PropsAndOps {\r\n const result: PropsAndOps = { properties: [], methods: [] };\r\n\r\n operations.forEach((operation) => {\r\n result.properties.push(this.generateQOperationProp(operation));\r\n result.methods.push(this.generateMethod(operation.name, operation, importContainer, model.fqName));\r\n });\r\n\r\n return result;\r\n }\r\n\r\n private generateModelProp(imports: ImportContainer, prop: PropertyModel): PropertyDeclarationStructure {\r\n const propModel = this.dataModel.getModel(prop.fqType) as ComplexType;\r\n let propModelType: string;\r\n\r\n if (prop.isCollection) {\r\n const modelName = imports.addGeneratedModel(propModel.fqName, propModel.modelName);\r\n const editableModelName = imports.addGeneratedModel(propModel.fqName, propModel.editableName);\r\n const qModelName = imports.addGeneratedQObject(propModel.fqName, propModel.qName, true);\r\n const collectionServiceType = imports.addServiceObject(this.version, ServiceImports.CollectionService);\r\n\r\n propModelType = `${collectionServiceType}<ClientType, ${modelName}, ${qModelName}, ${editableModelName}>`;\r\n } else {\r\n const serviceName = imports.addGeneratedService(propModel.fqName, propModel.serviceName);\r\n propModelType = `${serviceName}<ClientType>`;\r\n }\r\n\r\n return {\r\n scope: Scope.Private,\r\n name: this.namingHelper.getPrivatePropName(prop.name),\r\n type: propModelType,\r\n hasQuestionToken: true,\r\n } as PropertyDeclarationStructure;\r\n }\r\n\r\n private generatePrimitiveCollectionProp(\r\n imports: ImportContainer,\r\n prop: PropertyModel,\r\n ): OptionalKind<PropertyDeclarationStructure> {\r\n if (!prop.qObject) {\r\n throw new Error(\"Illegal State: [qObject] must be provided for Collection types!\");\r\n }\r\n\r\n const collectionServiceType = imports.addServiceObject(this.version, ServiceImports.CollectionService);\r\n const isEnum = prop.dataType === DataTypes.EnumType;\r\n const isNumericEnum = this.options.numericEnums;\r\n let qType: string;\r\n let type: string;\r\n\r\n if (isEnum) {\r\n const propEnum = this.dataModel.getModel(prop.fqType)!;\r\n const propTypeModel = imports.addGeneratedModel(propEnum.fqName, propEnum.modelName, false);\r\n type = `${imports.addQObjectType(QueryObjectImports.EnumCollection)}<typeof ${propTypeModel}>`;\r\n qType = `${imports.addQObjectType(\r\n isNumericEnum ? QueryObjectImports.QNumericEnumCollection : QueryObjectImports.QEnumCollection,\r\n )}<typeof ${propTypeModel}>`;\r\n } else {\r\n // TODO refactor string concat\r\n type = imports.addQObjectType(`${upperCaseFirst(prop.type)}Collection`);\r\n qType = imports.addQObjectType(prop.qObject);\r\n }\r\n const collectionType = `${collectionServiceType}<ClientType, ${type}, ${qType}>`;\r\n\r\n return {\r\n scope: Scope.Private,\r\n name: this.namingHelper.getPrivatePropName(prop.name),\r\n type: `${collectionType}`,\r\n hasQuestionToken: true,\r\n };\r\n }\r\n\r\n private generatePrimitiveTypeProp(\r\n imports: ImportContainer,\r\n prop: PropertyModel,\r\n ): OptionalKind<PropertyDeclarationStructure> {\r\n const serviceType = imports.addServiceObject(this.version, ServiceImports.PrimitiveTypeService);\r\n const type = prop.typeModule ? imports.addCustomType(prop.typeModule, prop.type, true) : prop.type;\r\n\r\n return {\r\n scope: Scope.Private,\r\n name: this.namingHelper.getPrivatePropName(prop.name),\r\n type: `${serviceType}<ClientType, ${type}>`,\r\n hasQuestionToken: true,\r\n };\r\n }\r\n\r\n private generateModelPropGetter(\r\n imports: ImportContainer,\r\n prop: PropertyModel,\r\n ): OptionalKind<MethodDeclarationStructure> {\r\n const model = this.dataModel.getModel(prop.fqType) as ComplexType;\r\n const isComplexCollection = prop.isCollection && model.dataType === DataTypes.ComplexType;\r\n\r\n const type = isComplexCollection\r\n ? imports.addServiceObject(this.version, ServiceImports.CollectionService)\r\n : prop.isCollection\r\n ? model.serviceCollectionName\r\n : model.serviceName;\r\n const typeWithGenerics = isComplexCollection\r\n ? `${type}<ClientType, ${imports.addGeneratedModel(model.fqName, model.modelName)}, ${imports.addGeneratedQObject(\r\n model.fqName,\r\n model.qName,\r\n true,\r\n )}, ${imports.addGeneratedModel(model.fqName, model.editableName)}>`\r\n : `${type}<ClientType>`;\r\n\r\n const privateSrvProp = \"this.\" + this.namingHelper.getPrivatePropName(prop.name);\r\n\r\n return {\r\n scope: Scope.Public,\r\n name: this.namingHelper.getRelatedServiceGetter(prop.name),\r\n returnType: typeWithGenerics,\r\n statements: [\r\n `if(!${privateSrvProp}) {`,\r\n ` const { client, path } = this.__base;`,\r\n // prettier-ignore\r\n ` ${privateSrvProp} = new ${type}(client, path, \"${prop.odataName}\"${isComplexCollection ? `, ${imports.addGeneratedQObject(model.fqName, firstCharLowerCase(model.qName))}`: \"\"})`,\r\n \"}\",\r\n `return ${privateSrvProp}`,\r\n ],\r\n };\r\n }\r\n\r\n private generatePrimitiveCollectionGetter(\r\n imports: ImportContainer,\r\n prop: PropertyModel,\r\n ): OptionalKind<MethodDeclarationStructure> {\r\n const collectionServiceType = imports.addServiceObject(this.version, ServiceImports.CollectionService);\r\n const qCollectionName = imports.addQObject(prop.qObject!);\r\n const enumName =\r\n prop.dataType === DataTypes.EnumType ? imports.addGeneratedModel(prop.fqType, prop.type) : undefined;\r\n\r\n const propName = \"this.\" + this.namingHelper.getPrivatePropName(prop.name);\r\n return {\r\n scope: Scope.Public,\r\n name: this.namingHelper.getRelatedServiceGetter(prop.name),\r\n statements: [\r\n `if(!${propName}) {`,\r\n ` const { client, path } = this.__base;`,\r\n // prettier-ignore\r\n ` ${propName} = new ${collectionServiceType}(client, path, \"${prop.odataName}\", new ${qCollectionName}(${enumName ?? \"\"})${this.isV4BigNumber() ? \", true\": \"\"})`,\r\n \"}\",\r\n `return ${propName}`,\r\n ],\r\n };\r\n }\r\n\r\n private generatePrimitiveTypeGetter(\r\n imports: ImportContainer,\r\n prop: PropertyModel,\r\n ): OptionalKind<MethodDeclarationStructure> {\r\n const serviceType = imports.addServiceObject(this.version, ServiceImports.PrimitiveTypeService);\r\n const propName = \"this.\" + this.namingHelper.getPrivatePropName(prop.name);\r\n // for V2: mapped name must be specified\r\n const useMappedName = this.version === ODataVersions.V2 && prop.name !== prop.odataName;\r\n // for V4: big number support\r\n const useBigNumber = this.isV4BigNumber();\r\n const addParamString = useMappedName ? `, \"${prop.name}\"` : useBigNumber ? \", true\" : \"\";\r\n\r\n return {\r\n scope: Scope.Public,\r\n name: this.namingHelper.getRelatedServiceGetter(prop.name),\r\n statements: [\r\n `if(!${propName}) {`,\r\n ` const { client, path, qModel } = this.__base;`,\r\n ` ${propName} = new ${serviceType}(client, path, \"${prop.odataName}\", qModel.${prop.name}.converter${addParamString})`,\r\n \"}\",\r\n `return ${propName}`,\r\n ],\r\n };\r\n }\r\n\r\n private generateEntityCollectionService(file: FileHandler, model: EntityType) {\r\n const importContainer = file.getImports();\r\n const editableModelName = model.editableName;\r\n const qObjectName = firstCharLowerCase(model.qName);\r\n\r\n const entitySetServiceType = importContainer.addServiceObject(this.version, ServiceImports.EntitySetService);\r\n const paramsModelName = importContainer.addGeneratedModel(model.id.fqName, model.id.modelName);\r\n const qIdFunctionName = importContainer.addGeneratedQObject(model.id.fqName, model.id.qName);\r\n\r\n const collectionOperations = this.dataModel.getEntitySetOperations(model.fqName);\r\n\r\n const { properties, methods } = this.generateServiceOperations(importContainer, model, collectionOperations);\r\n\r\n file.getFile().addClass({\r\n isExported: true,\r\n name: model.serviceCollectionName,\r\n typeParameters: [\"in out ClientType extends ODataHttpClient\"],\r\n extends:\r\n entitySetServiceType +\r\n `<ClientType, ${model.modelName}, ${editableModelName}, ${model.qName}, ${paramsModelName}>`,\r\n ctors: [\r\n {\r\n parameters: [\r\n { name: \"client\", type: \"ClientType\" },\r\n { name: \"basePath\", type: \"string\" },\r\n { name: \"name\", type: \"string\" },\r\n ],\r\n statements: [\r\n `super(client, basePath, name, ${qObjectName}, new ${qIdFunctionName}(name)${\r\n this.isV4BigNumber() ? \", true\" : \"\"\r\n });`,\r\n ],\r\n },\r\n ],\r\n properties,\r\n methods,\r\n });\r\n }\r\n\r\n private generateEntityTypeServices(): Array<Promise<void>> {\r\n // build service file for each entity, consisting of EntityTypeService & EntityCollectionService\r\n return this.dataModel\r\n .getEntityTypes()\r\n .filter((model) => model.genMode === Modes.service || model.genMode === Modes.all)\r\n .map((model) => {\r\n const file = this.project.createOrGetServiceFile(model.folderPath, model.serviceName, [\r\n model.serviceName,\r\n model.serviceCollectionName,\r\n ]);\r\n\r\n // entity type service\r\n this.generateEntityTypeService(file, model);\r\n // entity collection service if this entity specified keys at all\r\n if (model.keyNames.length) {\r\n this.generateEntityCollectionService(file, model);\r\n }\r\n\r\n return this.project.finalizeFile(file);\r\n });\r\n }\r\n\r\n private generateComplexTypeServices(): Array<Promise<void>> {\r\n // build service file for complex types\r\n return this.dataModel\r\n .getComplexTypes()\r\n .filter((model) => model.genMode === Modes.service || model.genMode === Modes.all)\r\n .map((model) => {\r\n const file = this.project.createOrGetServiceFile(model.folderPath, model.serviceName, [model.serviceName]);\r\n\r\n // entity type service\r\n this.generateEntityTypeService(file, model);\r\n\r\n return this.project.finalizeFile(file);\r\n });\r\n }\r\n\r\n private generateMethod(\r\n name: string,\r\n operation: OperationType,\r\n importContainer: ImportContainer,\r\n baseFqName: string,\r\n ): OptionalKind<MethodDeclarationStructure> {\r\n const isFunc = operation.type === OperationTypes.Function;\r\n const returnType = operation.returnType;\r\n const hasParams = operation.parameters.length > 0 || operation.overrides?.length;\r\n const isParamsOptional = !![operation.parameters, ...(operation.overrides ?? [])].find((pSet) => pSet.length === 0);\r\n\r\n // importing dependencies\r\n const httpClientConfigModel = importContainer.addClientApi(ClientApiImports.ODataHttpClientConfig);\r\n const odataResponse = importContainer.addClientApi(ClientApiImports.HttpResponseModel);\r\n const responseStructure = this.importReturnType(importContainer, returnType);\r\n const qOperationName = importContainer.addGeneratedQObject(baseFqName, operation.qName);\r\n const rtType =\r\n returnType?.type && returnType.dataType !== DataTypes.PrimitiveType\r\n ? importContainer.addGeneratedModel(returnType.fqType, returnType.type)\r\n : returnType?.type;\r\n const paramsModelName = hasParams\r\n ? importContainer.addGeneratedModel(baseFqName, operation.paramsModelName)\r\n : undefined;\r\n\r\n const requestConfigParam = {\r\n name: \"requestConfig\",\r\n hasQuestionToken: true,\r\n type: `${httpClientConfigModel}<ClientType>`,\r\n };\r\n const qOpProp = \"this.\" + this.namingHelper.getPrivatePropName(operation.qName);\r\n\r\n return {\r\n scope: Scope.Public,\r\n isAsync: true,\r\n name,\r\n parameters: hasParams\r\n ? [{ name: \"params\", type: paramsModelName, hasQuestionToken: isParamsOptional }, requestConfigParam]\r\n : [requestConfigParam],\r\n returnType: `Promise<${odataResponse}<${responseStructure}<${rtType || \"void\"}>>>`,\r\n statements: [\r\n `if(!${qOpProp}) {`,\r\n ` ${qOpProp} = new ${qOperationName}()`,\r\n \"}\",\r\n\r\n `const { addFullPath, client, getDefaultHeaders } = this.__base;`,\r\n `const url = addFullPath(${qOpProp}.buildUrl(${isFunc && hasParams ? \"params\" : \"\"}));`,\r\n `${returnType ? \"const response = await \" : \"return\"} client.${\r\n !isFunc\r\n ? // actions: since V4\r\n `post(url, ${hasParams ? `${qOpProp}.convertUserParams(params)` : \"{}\"}, ${\r\n requestConfigParam.name\r\n }, getDefaultHeaders())`\r\n : operation.usePost\r\n ? // V2 POST => BUT values are still query params, they are not part of the request body\r\n `post(url, undefined, ${requestConfigParam.name}, getDefaultHeaders())`\r\n : // functions: since V2\r\n `get(url, ${requestConfigParam.name}, getDefaultHeaders())`\r\n };`,\r\n returnType ? `return ${qOpProp}.convertResponse(response);` : \"\",\r\n ],\r\n };\r\n }\r\n\r\n private importReturnType(imports: ImportContainer, returnType: ReturnTypeModel | undefined): string {\r\n const typeToImport: CoreImports = returnType?.isCollection\r\n ? CoreImports.ODataCollectionResponse\r\n : returnType?.dataType === DataTypes.PrimitiveType\r\n ? CoreImports.ODataValueResponse\r\n : CoreImports.ODataModelResponse;\r\n\r\n return imports.addCoreLib(this.version, typeToImport);\r\n }\r\n}\r\n"]}
|
|
@@ -33,7 +33,9 @@ export declare enum QueryObjectImports {
|
|
|
33
33
|
QAction = "QAction",
|
|
34
34
|
EnumCollection = "EnumCollection",
|
|
35
35
|
QEnumCollection = "QEnumCollection",
|
|
36
|
-
|
|
36
|
+
QNumericEnumCollection = "QNumericEnumCollection",
|
|
37
|
+
QEnumCollectionPath = "QEnumCollectionPath",
|
|
38
|
+
QNumericEnumCollectionPath = "QNumericEnumCollectionPath",
|
|
37
39
|
QCollectionPath = "QCollectionPath",
|
|
38
40
|
QEntityCollectionPath = "QEntityCollectionPath",
|
|
39
41
|
OperationReturnType = "OperationReturnType",
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.VERSIONED_SERVICE_IMPORTS = exports.ServiceImports = exports.ClientApiImports = exports.QueryObjectImports = exports.VERSIONED_CORE_IMPORTS = exports.CoreImports = exports.LIB_MODULES = void 0;
|
|
4
1
|
/**
|
|
5
2
|
* All module names of the main dependencies.
|
|
6
3
|
*/
|
|
7
|
-
|
|
4
|
+
export const LIB_MODULES = {
|
|
8
5
|
core: "@odata2ts/odata-core",
|
|
9
6
|
qObject: "@odata2ts/odata-query-objects",
|
|
10
7
|
clientApi: "@odata2ts/http-client-api",
|
|
@@ -14,19 +11,19 @@ exports.LIB_MODULES = {
|
|
|
14
11
|
* All imported entity names from the core API.
|
|
15
12
|
* Includes versioned file names, i.e. according to OData version.
|
|
16
13
|
*/
|
|
17
|
-
var CoreImports;
|
|
14
|
+
export var CoreImports;
|
|
18
15
|
(function (CoreImports) {
|
|
19
16
|
CoreImports[CoreImports["DeferredContent"] = 0] = "DeferredContent";
|
|
20
17
|
CoreImports[CoreImports["ODataCollectionResponse"] = 1] = "ODataCollectionResponse";
|
|
21
18
|
CoreImports[CoreImports["ODataModelResponse"] = 2] = "ODataModelResponse";
|
|
22
19
|
CoreImports[CoreImports["ODataValueResponse"] = 3] = "ODataValueResponse";
|
|
23
|
-
})(CoreImports || (
|
|
20
|
+
})(CoreImports || (CoreImports = {}));
|
|
24
21
|
/**
|
|
25
22
|
* For all core imports that are versioned two files exist, one for V2, one for V4.
|
|
26
23
|
* ODataCollectionResponse = ODataCollectionResponseV2 + ODataCollectionResponseV4
|
|
27
24
|
*
|
|
28
25
|
*/
|
|
29
|
-
|
|
26
|
+
export const VERSIONED_CORE_IMPORTS = [
|
|
30
27
|
CoreImports.ODataCollectionResponse,
|
|
31
28
|
CoreImports.ODataValueResponse,
|
|
32
29
|
CoreImports.ODataModelResponse,
|
|
@@ -34,7 +31,7 @@ exports.VERSIONED_CORE_IMPORTS = [
|
|
|
34
31
|
/**
|
|
35
32
|
* Most relevant, but not all imports from query objects library
|
|
36
33
|
*/
|
|
37
|
-
var QueryObjectImports;
|
|
34
|
+
export var QueryObjectImports;
|
|
38
35
|
(function (QueryObjectImports) {
|
|
39
36
|
QueryObjectImports["QueryObject"] = "QueryObject";
|
|
40
37
|
QueryObjectImports["QId"] = "QId";
|
|
@@ -42,39 +39,41 @@ var QueryObjectImports;
|
|
|
42
39
|
QueryObjectImports["QAction"] = "QAction";
|
|
43
40
|
QueryObjectImports["EnumCollection"] = "EnumCollection";
|
|
44
41
|
QueryObjectImports["QEnumCollection"] = "QEnumCollection";
|
|
45
|
-
QueryObjectImports["
|
|
42
|
+
QueryObjectImports["QNumericEnumCollection"] = "QNumericEnumCollection";
|
|
43
|
+
QueryObjectImports["QEnumCollectionPath"] = "QEnumCollectionPath";
|
|
44
|
+
QueryObjectImports["QNumericEnumCollectionPath"] = "QNumericEnumCollectionPath";
|
|
46
45
|
QueryObjectImports["QCollectionPath"] = "QCollectionPath";
|
|
47
46
|
QueryObjectImports["QEntityCollectionPath"] = "QEntityCollectionPath";
|
|
48
47
|
QueryObjectImports["OperationReturnType"] = "OperationReturnType";
|
|
49
48
|
QueryObjectImports["ReturnTypes"] = "ReturnTypes";
|
|
50
49
|
QueryObjectImports["QComplexParam"] = "QComplexParam";
|
|
51
|
-
})(QueryObjectImports || (
|
|
50
|
+
})(QueryObjectImports || (QueryObjectImports = {}));
|
|
52
51
|
/**
|
|
53
52
|
* All imports from HTTP client API.
|
|
54
53
|
*/
|
|
55
|
-
var ClientApiImports;
|
|
54
|
+
export var ClientApiImports;
|
|
56
55
|
(function (ClientApiImports) {
|
|
57
56
|
ClientApiImports[ClientApiImports["ODataHttpClient"] = 0] = "ODataHttpClient";
|
|
58
57
|
ClientApiImports[ClientApiImports["ODataHttpClientConfig"] = 1] = "ODataHttpClientConfig";
|
|
59
58
|
ClientApiImports[ClientApiImports["HttpResponseModel"] = 2] = "HttpResponseModel";
|
|
60
|
-
})(ClientApiImports || (
|
|
59
|
+
})(ClientApiImports || (ClientApiImports = {}));
|
|
61
60
|
/**
|
|
62
61
|
* All imports from service library.
|
|
63
62
|
* Includes versioned file names, i.e. according to OData version.
|
|
64
63
|
*/
|
|
65
|
-
var ServiceImports;
|
|
64
|
+
export var ServiceImports;
|
|
66
65
|
(function (ServiceImports) {
|
|
67
66
|
ServiceImports[ServiceImports["ODataService"] = 0] = "ODataService";
|
|
68
67
|
ServiceImports[ServiceImports["EntityTypeService"] = 1] = "EntityTypeService";
|
|
69
68
|
ServiceImports[ServiceImports["PrimitiveTypeService"] = 2] = "PrimitiveTypeService";
|
|
70
69
|
ServiceImports[ServiceImports["CollectionService"] = 3] = "CollectionService";
|
|
71
70
|
ServiceImports[ServiceImports["EntitySetService"] = 4] = "EntitySetService";
|
|
72
|
-
})(ServiceImports || (
|
|
71
|
+
})(ServiceImports || (ServiceImports = {}));
|
|
73
72
|
/**
|
|
74
73
|
* For all versioned imports two files exist, one for V2, one for V4.
|
|
75
74
|
* EntityTypeService = EntityTypeServiceV2 + EntityTypeServiceV4
|
|
76
75
|
*/
|
|
77
|
-
|
|
76
|
+
export const VERSIONED_SERVICE_IMPORTS = [
|
|
78
77
|
ServiceImports.EntityTypeService,
|
|
79
78
|
ServiceImports.PrimitiveTypeService,
|
|
80
79
|
ServiceImports.CollectionService,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImportObjects.js","sourceRoot":"","sources":["../../../src/generator/import/ImportObjects.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ImportObjects.js","sourceRoot":"","sources":["../../../src/generator/import/ImportObjects.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,sBAAsB;IAC5B,OAAO,EAAE,+BAA+B;IACxC,SAAS,EAAE,2BAA2B;IACtC,OAAO,EAAE,yBAAyB;CACnC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAN,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,mEAAe,CAAA;IACf,mFAAuB,CAAA;IACvB,yEAAkB,CAAA;IAClB,yEAAkB,CAAA;AACpB,CAAC,EALW,WAAW,KAAX,WAAW,QAKtB;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,WAAW,CAAC,uBAAuB;IACnC,WAAW,CAAC,kBAAkB;IAC9B,WAAW,CAAC,kBAAkB;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAN,IAAY,kBAeX;AAfD,WAAY,kBAAkB;IAC5B,iDAA2B,CAAA;IAC3B,iCAAW,CAAA;IACX,6CAAuB,CAAA;IACvB,yCAAmB,CAAA;IACnB,uDAAiC,CAAA;IACjC,yDAAmC,CAAA;IACnC,uEAAiD,CAAA;IACjD,iEAA2C,CAAA;IAC3C,+EAAyD,CAAA;IACzD,yDAAmC,CAAA;IACnC,qEAA+C,CAAA;IAC/C,iEAA2C,CAAA;IAC3C,iDAA2B,CAAA;IAC3B,qDAA+B,CAAA;AACjC,CAAC,EAfW,kBAAkB,KAAlB,kBAAkB,QAe7B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,6EAAe,CAAA;IACf,yFAAqB,CAAA;IACrB,iFAAiB,CAAA;AACnB,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,mEAAY,CAAA;IACZ,6EAAiB,CAAA;IACjB,mFAAoB,CAAA;IACpB,6EAAiB,CAAA;IACjB,2EAAgB,CAAA;AAClB,CAAC,EANW,cAAc,KAAd,cAAc,QAMzB;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,cAAc,CAAC,iBAAiB;IAChC,cAAc,CAAC,oBAAoB;IACnC,cAAc,CAAC,iBAAiB;IAChC,cAAc,CAAC,gBAAgB;CAChC,CAAC","sourcesContent":["/**\r\n * All module names of the main dependencies.\r\n */\r\nexport const LIB_MODULES = {\r\n core: \"@odata2ts/odata-core\",\r\n qObject: \"@odata2ts/odata-query-objects\",\r\n clientApi: \"@odata2ts/http-client-api\",\r\n service: \"@odata2ts/odata-service\",\r\n};\r\n\r\n/**\r\n * All imported entity names from the core API.\r\n * Includes versioned file names, i.e. according to OData version.\r\n */\r\nexport enum CoreImports {\r\n DeferredContent,\r\n ODataCollectionResponse, // versioned\r\n ODataModelResponse, // versioned\r\n ODataValueResponse, // versioned\r\n}\r\n\r\n/**\r\n * For all core imports that are versioned two files exist, one for V2, one for V4.\r\n * ODataCollectionResponse = ODataCollectionResponseV2 + ODataCollectionResponseV4\r\n *\r\n */\r\nexport const VERSIONED_CORE_IMPORTS = [\r\n CoreImports.ODataCollectionResponse,\r\n CoreImports.ODataValueResponse,\r\n CoreImports.ODataModelResponse,\r\n];\r\n\r\n/**\r\n * Most relevant, but not all imports from query objects library\r\n */\r\nexport enum QueryObjectImports {\r\n QueryObject = \"QueryObject\",\r\n QId = \"QId\",\r\n QFunction = \"QFunction\",\r\n QAction = \"QAction\",\r\n EnumCollection = \"EnumCollection\",\r\n QEnumCollection = \"QEnumCollection\",\r\n QNumericEnumCollection = \"QNumericEnumCollection\",\r\n QEnumCollectionPath = \"QEnumCollectionPath\",\r\n QNumericEnumCollectionPath = \"QNumericEnumCollectionPath\",\r\n QCollectionPath = \"QCollectionPath\",\r\n QEntityCollectionPath = \"QEntityCollectionPath\",\r\n OperationReturnType = \"OperationReturnType\",\r\n ReturnTypes = \"ReturnTypes\",\r\n QComplexParam = \"QComplexParam\",\r\n}\r\n\r\n/**\r\n * All imports from HTTP client API.\r\n */\r\nexport enum ClientApiImports {\r\n ODataHttpClient,\r\n ODataHttpClientConfig,\r\n HttpResponseModel,\r\n}\r\n\r\n/**\r\n * All imports from service library.\r\n * Includes versioned file names, i.e. according to OData version.\r\n */\r\nexport enum ServiceImports {\r\n ODataService,\r\n EntityTypeService,\r\n PrimitiveTypeService,\r\n CollectionService,\r\n EntitySetService,\r\n}\r\n\r\n/**\r\n * For all versioned imports two files exist, one for V2, one for V4.\r\n * EntityTypeService = EntityTypeServiceV2 + EntityTypeServiceV4\r\n */\r\nexport const VERSIONED_SERVICE_IMPORTS = [\r\n ServiceImports.EntityTypeService,\r\n ServiceImports.PrimitiveTypeService,\r\n ServiceImports.CollectionService,\r\n ServiceImports.EntitySetService,\r\n];\r\n"]}
|
package/lib/generator/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { generateModels } from "./ModelGenerator";
|
|
2
|
-
export { generateQueryObjects } from "./QueryObjectGenerator";
|
|
3
|
-
export { generateServices } from "./ServiceGenerator";
|
|
1
|
+
export { generateModels } from "./ModelGenerator.js";
|
|
2
|
+
export { generateQueryObjects } from "./QueryObjectGenerator.js";
|
|
3
|
+
export { generateServices } from "./ServiceGenerator.js";
|
package/lib/generator/index.js
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var ModelGenerator_1 = require("./ModelGenerator");
|
|
5
|
-
Object.defineProperty(exports, "generateModels", { enumerable: true, get: function () { return ModelGenerator_1.generateModels; } });
|
|
6
|
-
var QueryObjectGenerator_1 = require("./QueryObjectGenerator");
|
|
7
|
-
Object.defineProperty(exports, "generateQueryObjects", { enumerable: true, get: function () { return QueryObjectGenerator_1.generateQueryObjects; } });
|
|
8
|
-
var ServiceGenerator_1 = require("./ServiceGenerator");
|
|
9
|
-
Object.defineProperty(exports, "generateServices", { enumerable: true, get: function () { return ServiceGenerator_1.generateServices; } });
|
|
1
|
+
export { generateModels } from "./ModelGenerator.js";
|
|
2
|
+
export { generateQueryObjects } from "./QueryObjectGenerator.js";
|
|
3
|
+
export { generateServices } from "./ServiceGenerator.js";
|
|
10
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC","sourcesContent":["export { generateModels } from \"./ModelGenerator.js\";\r\nexport { generateQueryObjects } from \"./QueryObjectGenerator.js\";\r\nexport { generateServices } from \"./ServiceGenerator.js\";\r\n"]}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from "./OptionModel";
|
|
2
|
-
export * from "./NamingModel";
|
|
3
|
-
export * from "./defaultConfig";
|
|
4
|
-
export * from "./TypeModel";
|
|
1
|
+
export * from "./OptionModel.js";
|
|
2
|
+
export * from "./NamingModel.js";
|
|
3
|
+
export * from "./defaultConfig.js";
|
|
4
|
+
export * from "./TypeModel.js";
|
package/lib/index.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
tslib_1.__exportStar(require("./NamingModel"), exports);
|
|
6
|
-
tslib_1.__exportStar(require("./defaultConfig"), exports);
|
|
7
|
-
tslib_1.__exportStar(require("./TypeModel"), exports);
|
|
1
|
+
export * from "./OptionModel.js";
|
|
2
|
+
export * from "./NamingModel.js";
|
|
3
|
+
export * from "./defaultConfig.js";
|
|
4
|
+
export * from "./TypeModel.js";
|
|
8
5
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC","sourcesContent":["export * from \"./OptionModel.js\";\r\nexport * from \"./NamingModel.js\";\r\nexport * from \"./defaultConfig.js\";\r\nexport * from \"./TypeModel.js\";\r\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SourceFile } from "ts-morph";
|
|
2
|
-
import { ImportContainer } from "../generator/ImportContainer";
|
|
3
|
-
import { EmitModes } from "../OptionModel";
|
|
4
|
-
import { FileFormatter } from "./formatter/FileFormatter";
|
|
2
|
+
import { ImportContainer } from "../generator/ImportContainer.js";
|
|
3
|
+
import { EmitModes } from "../OptionModel.js";
|
|
4
|
+
import { FileFormatter } from "./formatter/FileFormatter.js";
|
|
5
5
|
export declare class FileHandler {
|
|
6
6
|
readonly path: string;
|
|
7
7
|
readonly fileName: string;
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const promises_1 = require("fs/promises");
|
|
6
|
-
const OptionModel_1 = require("../OptionModel");
|
|
7
|
-
class FileHandler {
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { writeFile } from "fs/promises";
|
|
3
|
+
import { EmitModes } from "../OptionModel.js";
|
|
4
|
+
export class FileHandler {
|
|
8
5
|
constructor(path, fileName, file, importContainer, formatter, allowTypeChecking) {
|
|
9
6
|
this.path = path;
|
|
10
7
|
this.fileName = fileName;
|
|
@@ -23,7 +20,7 @@ class FileHandler {
|
|
|
23
20
|
return this.importContainer;
|
|
24
21
|
}
|
|
25
22
|
write(emitMode, noOutput = false) {
|
|
26
|
-
return
|
|
23
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
27
24
|
this.file.addImportDeclarations(this.importContainer.getImportDeclarations());
|
|
28
25
|
// add ts-nocheck to beginning of each file
|
|
29
26
|
if (!this.allowTypeChecking) {
|
|
@@ -36,12 +33,12 @@ class FileHandler {
|
|
|
36
33
|
return;
|
|
37
34
|
}
|
|
38
35
|
switch (emitMode) {
|
|
39
|
-
case
|
|
40
|
-
case
|
|
36
|
+
case EmitModes.js:
|
|
37
|
+
case EmitModes.js_dts:
|
|
41
38
|
return this.file.emit();
|
|
42
|
-
case
|
|
39
|
+
case EmitModes.dts:
|
|
43
40
|
return this.file.emit({ emitOnlyDtsFiles: true });
|
|
44
|
-
case
|
|
41
|
+
case EmitModes.ts:
|
|
45
42
|
return this.formatAndWriteFile();
|
|
46
43
|
default:
|
|
47
44
|
throw new Error(`Emit mode "${emitMode}" is invalid!`);
|
|
@@ -49,13 +46,13 @@ class FileHandler {
|
|
|
49
46
|
});
|
|
50
47
|
}
|
|
51
48
|
formatAndWriteFile() {
|
|
52
|
-
return
|
|
49
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53
50
|
const fileName = this.file.getFilePath();
|
|
54
51
|
const content = this.file.getFullText();
|
|
55
52
|
try {
|
|
56
53
|
const formatted = this.formatter ? yield this.formatter.format(content) : content;
|
|
57
54
|
try {
|
|
58
|
-
return
|
|
55
|
+
return writeFile(fileName, formatted);
|
|
59
56
|
}
|
|
60
57
|
catch (writeError) {
|
|
61
58
|
console.error(`Failed to write file [/${fileName}]`, writeError);
|
|
@@ -64,11 +61,10 @@ class FileHandler {
|
|
|
64
61
|
}
|
|
65
62
|
catch (formattingError) {
|
|
66
63
|
console.error("Formatting failed", formattingError);
|
|
67
|
-
yield
|
|
64
|
+
yield writeFile("error.log", (formattingError === null || formattingError === void 0 ? void 0 : formattingError.toString()) || "no error message!");
|
|
68
65
|
process.exit(99);
|
|
69
66
|
}
|
|
70
67
|
});
|
|
71
68
|
}
|
|
72
69
|
}
|
|
73
|
-
exports.FileHandler = FileHandler;
|
|
74
70
|
//# sourceMappingURL=FileHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileHandler.js","sourceRoot":"","sources":["../../src/project/FileHandler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FileHandler.js","sourceRoot":"","sources":["../../src/project/FileHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { writeFile } from \"fs/promises\";\r\n\r\nimport { SourceFile } from \"ts-morph\";\r\n\r\nimport { ImportContainer } from \"../generator/ImportContainer.js\";\r\nimport { EmitModes } from \"../OptionModel.js\";\r\nimport { FileFormatter } from \"./formatter/FileFormatter.js\";\r\n\r\nexport class FileHandler {\r\n constructor(\r\n public readonly path: string,\r\n public readonly fileName: string,\r\n protected readonly file: SourceFile,\r\n protected readonly importContainer: ImportContainer,\r\n protected formatter: FileFormatter | undefined,\r\n public readonly allowTypeChecking: boolean\r\n ) {}\r\n\r\n public getFullFilePath() {\r\n return this.path ? `${this.path}/${this.fileName}` : this.fileName;\r\n }\r\n\r\n public getFile() {\r\n return this.file;\r\n }\r\n\r\n public getImports() {\r\n return this.importContainer;\r\n }\r\n\r\n public async write(emitMode: EmitModes, noOutput = false) {\r\n this.file.addImportDeclarations(this.importContainer.getImportDeclarations());\r\n // add ts-nocheck to beginning of each file\r\n if (!this.allowTypeChecking) {\r\n const stmts = this.file.addStatements((writer) => {\r\n writer.writeLine(\"// @ts-nocheck\");\r\n });\r\n stmts[0].setOrder(0);\r\n }\r\n\r\n if (noOutput) {\r\n return;\r\n }\r\n\r\n switch (emitMode) {\r\n case EmitModes.js:\r\n case EmitModes.js_dts:\r\n return this.file.emit();\r\n case EmitModes.dts:\r\n return this.file.emit({ emitOnlyDtsFiles: true });\r\n case EmitModes.ts:\r\n return this.formatAndWriteFile();\r\n default:\r\n throw new Error(`Emit mode \"${emitMode}\" is invalid!`);\r\n }\r\n }\r\n\r\n private async formatAndWriteFile() {\r\n const fileName = this.file.getFilePath();\r\n const content = this.file.getFullText();\r\n\r\n try {\r\n const formatted = this.formatter ? await this.formatter.format(content) : content;\r\n\r\n try {\r\n return writeFile(fileName, formatted);\r\n } catch (writeError) {\r\n console.error(`Failed to write file [/${fileName}]`, writeError);\r\n process.exit(3);\r\n }\r\n } catch (formattingError) {\r\n console.error(\"Formatting failed\", formattingError);\r\n await writeFile(\"error.log\", formattingError?.toString() || \"no error message!\");\r\n process.exit(99);\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { CompilerOptions, SourceFile } from "ts-morph";
|
|
2
|
-
import { DataModel } from "../data-model/DataModel";
|
|
3
|
-
import { NamingHelper } from "../data-model/NamingHelper";
|
|
4
|
-
import { EmitModes } from "../OptionModel";
|
|
5
|
-
import { FileHandler } from "./FileHandler";
|
|
6
|
-
import { FileFormatter } from "./formatter/FileFormatter";
|
|
2
|
+
import { DataModel } from "../data-model/DataModel.js";
|
|
3
|
+
import { NamingHelper } from "../data-model/NamingHelper.js";
|
|
4
|
+
import { EmitModes } from "../OptionModel.js";
|
|
5
|
+
import { FileHandler } from "./FileHandler.js";
|
|
6
|
+
import { FileFormatter } from "./formatter/FileFormatter.js";
|
|
7
7
|
export interface ProjectManagerOptions {
|
|
8
8
|
usePrettier?: boolean;
|
|
9
9
|
tsConfigPath?: string;
|