@odata2ts/odata2ts 0.38.0 → 0.39.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.
@@ -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.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"]}
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 name: \"options\",\r\n type: importContainer.addServiceObject(this.version, ServiceImports.ODataServiceOptions),\r\n hasQuestionToken: true,\r\n },\r\n ],\r\n statements: [`super(client, basePath, options);`, \"this.__base.options.bigNumbersAsString = 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, options, isUrlNotEncoded } = this.__base;`,\r\n 'return typeof id === \"undefined\" || id === null',\r\n `? new ${collectionName}(client, path, fieldName, options)`,\r\n `: new ${serviceName}(client, path, new ${idFunctionName}(fieldName).buildUrl(id, isUrlNotEncoded()), options);`,\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, options } = this.__base;`,\r\n // prettier-ignore\r\n ` ${propName} = new ${serviceType}(client, path, \"${odataName}\", options)`,\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 const serviceOptions = importContainer.addServiceObject(\r\n this.version,\r\n this.version === ODataVersions.V4\r\n ? ServiceImports.ODataServiceOptionsInternal\r\n : ServiceImports.ODataServiceOptions,\r\n );\r\n\r\n const { properties, methods }: PropsAndOps = deepmerge(\r\n deepmerge(\r\n this.generateServiceProperties(importContainer, model.serviceName, props),\r\n this.generateServiceOperations(importContainer, model, operations),\r\n ),\r\n this.generateCastOperations(importContainer, model, false),\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 { name: \"options\", type: serviceOptions, hasQuestionToken: true },\r\n ],\r\n statements: [`super(client, basePath, name, ${qObjectName}, options);`],\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, options } = this.__base;`,\r\n // prettier-ignore\r\n ` ${privateSrvProp} = new ${type}(client, path, \"${prop.odataName}\"${isComplexCollection ? `, ${imports.addGeneratedQObject(model.fqName, firstCharLowerCase(model.qName))}`: \"\"}, options)`,\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, options } = this.__base;`,\r\n // prettier-ignore\r\n ` ${propName} = new ${collectionServiceType}(client, path, \"${prop.odataName}\", new ${qCollectionName}(${enumName ?? \"\"}), options)`,\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 v2MappedName =\r\n this.version === ODataVersions.V4 ? \"\" : prop.name !== prop.odataName ? `, \"${prop.name}\"` : \", undefined\";\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, options } = this.__base;`,\r\n ` ${propName} = new ${serviceType}(client, path, \"${prop.odataName}\", qModel.${prop.name}.converter${v2MappedName}, options)`,\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 const serviceOptions = importContainer.addServiceObject(\r\n this.version,\r\n this.version === ODataVersions.V4\r\n ? ServiceImports.ODataServiceOptionsInternal\r\n : ServiceImports.ODataServiceOptions,\r\n );\r\n\r\n const collectionOperations = this.dataModel.getEntitySetOperations(model.fqName);\r\n\r\n const { properties, methods } = deepmerge(\r\n this.generateServiceOperations(importContainer, model, collectionOperations),\r\n this.generateCastOperations(importContainer, model, true),\r\n );\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 { name: \"options\", type: serviceOptions, hasQuestionToken: true },\r\n ],\r\n statements: [`super(client, basePath, name, ${qObjectName}, new ${qIdFunctionName}(name), options);`],\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, isUrlNotEncoded } = this.__base;`,\r\n `const url = addFullPath(${qOpProp}.buildUrl(${isFunc && hasParams ? \"params, \" : \"\"}${isFunc ? \"isUrlNotEncoded()\" : \"\"}));`,\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 private generateCastOperations(\r\n importContainer: ImportContainer,\r\n model: ComplexType,\r\n isCollection: boolean,\r\n ): PropsAndOps {\r\n const result: PropsAndOps = { properties: [], methods: [] };\r\n\r\n if (this.version === ODataVersions.V4) {\r\n model.subtypes.forEach((subtype) => {\r\n const subClass = this.dataModel.getModel(subtype) as ComplexType;\r\n const serviceName = isCollection ? subClass.serviceCollectionName : subClass.serviceName;\r\n const serviceType = importContainer.addGeneratedService(subClass.fqName, serviceName);\r\n result.methods.push({\r\n name: `as${upperCaseFirst(serviceName)}`,\r\n scope: Scope.Public,\r\n statements: [\r\n \"const { client, path, options } = this.__base;\",\r\n `return new ${serviceType}(client, path, \"${subClass.fqName}\", { ...options, subtype: true });`,\r\n ],\r\n });\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n"]}
@@ -28,6 +28,7 @@ export declare const VERSIONED_CORE_IMPORTS: CoreImports[];
28
28
  */
29
29
  export declare enum QueryObjectImports {
30
30
  QueryObject = "QueryObject",
31
+ ENUMERABLE_PROP_DEFINITION = "ENUMERABLE_PROP_DEFINITION",
31
32
  QId = "QId",
32
33
  QFunction = "QFunction",
33
34
  QAction = "QAction",
@@ -56,10 +57,12 @@ export declare enum ClientApiImports {
56
57
  */
57
58
  export declare enum ServiceImports {
58
59
  ODataService = 0,
59
- EntityTypeService = 1,
60
- PrimitiveTypeService = 2,
61
- CollectionService = 3,
62
- EntitySetService = 4
60
+ ODataServiceOptions = 1,
61
+ ODataServiceOptionsInternal = 2,
62
+ EntityTypeService = 3,
63
+ PrimitiveTypeService = 4,
64
+ CollectionService = 5,
65
+ EntitySetService = 6
63
66
  }
64
67
  /**
65
68
  * For all versioned imports two files exist, one for V2, one for V4.
@@ -34,6 +34,7 @@ export const VERSIONED_CORE_IMPORTS = [
34
34
  export var QueryObjectImports;
35
35
  (function (QueryObjectImports) {
36
36
  QueryObjectImports["QueryObject"] = "QueryObject";
37
+ QueryObjectImports["ENUMERABLE_PROP_DEFINITION"] = "ENUMERABLE_PROP_DEFINITION";
37
38
  QueryObjectImports["QId"] = "QId";
38
39
  QueryObjectImports["QFunction"] = "QFunction";
39
40
  QueryObjectImports["QAction"] = "QAction";
@@ -64,10 +65,12 @@ export var ClientApiImports;
64
65
  export var ServiceImports;
65
66
  (function (ServiceImports) {
66
67
  ServiceImports[ServiceImports["ODataService"] = 0] = "ODataService";
67
- ServiceImports[ServiceImports["EntityTypeService"] = 1] = "EntityTypeService";
68
- ServiceImports[ServiceImports["PrimitiveTypeService"] = 2] = "PrimitiveTypeService";
69
- ServiceImports[ServiceImports["CollectionService"] = 3] = "CollectionService";
70
- ServiceImports[ServiceImports["EntitySetService"] = 4] = "EntitySetService";
68
+ ServiceImports[ServiceImports["ODataServiceOptions"] = 1] = "ODataServiceOptions";
69
+ ServiceImports[ServiceImports["ODataServiceOptionsInternal"] = 2] = "ODataServiceOptionsInternal";
70
+ ServiceImports[ServiceImports["EntityTypeService"] = 3] = "EntityTypeService";
71
+ ServiceImports[ServiceImports["PrimitiveTypeService"] = 4] = "PrimitiveTypeService";
72
+ ServiceImports[ServiceImports["CollectionService"] = 5] = "CollectionService";
73
+ ServiceImports[ServiceImports["EntitySetService"] = 6] = "EntitySetService";
71
74
  })(ServiceImports || (ServiceImports = {}));
72
75
  /**
73
76
  * For all versioned imports two files exist, one for V2, one for V4.
@@ -1 +1 @@
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"]}
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,kBAgBX;AAhBD,WAAY,kBAAkB;IAC5B,iDAA2B,CAAA;IAC3B,+EAAyD,CAAA;IACzD,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,EAhBW,kBAAkB,KAAlB,kBAAkB,QAgB7B;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,cAQX;AARD,WAAY,cAAc;IACxB,mEAAY,CAAA;IACZ,iFAAmB,CAAA;IACnB,iGAA2B,CAAA;IAC3B,6EAAiB,CAAA;IACjB,mFAAoB,CAAA;IACpB,6EAAiB,CAAA;IACjB,2EAAgB,CAAA;AAClB,CAAC,EARW,cAAc,KAAd,cAAc,QAQzB;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":["/**\n * All module names of the main dependencies.\n */\nexport const LIB_MODULES = {\n core: \"@odata2ts/odata-core\",\n qObject: \"@odata2ts/odata-query-objects\",\n clientApi: \"@odata2ts/http-client-api\",\n service: \"@odata2ts/odata-service\",\n};\n\n/**\n * All imported entity names from the core API.\n * Includes versioned file names, i.e. according to OData version.\n */\nexport enum CoreImports {\n DeferredContent,\n ODataCollectionResponse, // versioned\n ODataModelResponse, // versioned\n ODataValueResponse, // versioned\n}\n\n/**\n * For all core imports that are versioned two files exist, one for V2, one for V4.\n * ODataCollectionResponse = ODataCollectionResponseV2 + ODataCollectionResponseV4\n *\n */\nexport const VERSIONED_CORE_IMPORTS = [\n CoreImports.ODataCollectionResponse,\n CoreImports.ODataValueResponse,\n CoreImports.ODataModelResponse,\n];\n\n/**\n * Most relevant, but not all imports from query objects library\n */\nexport enum QueryObjectImports {\n QueryObject = \"QueryObject\",\n ENUMERABLE_PROP_DEFINITION = \"ENUMERABLE_PROP_DEFINITION\",\n QId = \"QId\",\n QFunction = \"QFunction\",\n QAction = \"QAction\",\n EnumCollection = \"EnumCollection\",\n QEnumCollection = \"QEnumCollection\",\n QNumericEnumCollection = \"QNumericEnumCollection\",\n QEnumCollectionPath = \"QEnumCollectionPath\",\n QNumericEnumCollectionPath = \"QNumericEnumCollectionPath\",\n QCollectionPath = \"QCollectionPath\",\n QEntityCollectionPath = \"QEntityCollectionPath\",\n OperationReturnType = \"OperationReturnType\",\n ReturnTypes = \"ReturnTypes\",\n QComplexParam = \"QComplexParam\",\n}\n\n/**\n * All imports from HTTP client API.\n */\nexport enum ClientApiImports {\n ODataHttpClient,\n ODataHttpClientConfig,\n HttpResponseModel,\n}\n\n/**\n * All imports from service library.\n * Includes versioned file names, i.e. according to OData version.\n */\nexport enum ServiceImports {\n ODataService,\n ODataServiceOptions,\n ODataServiceOptionsInternal,\n EntityTypeService,\n PrimitiveTypeService,\n CollectionService,\n EntitySetService,\n}\n\n/**\n * For all versioned imports two files exist, one for V2, one for V4.\n * EntityTypeService = EntityTypeServiceV2 + EntityTypeServiceV4\n */\nexport const VERSIONED_SERVICE_IMPORTS = [\n ServiceImports.EntityTypeService,\n ServiceImports.PrimitiveTypeService,\n ServiceImports.CollectionService,\n ServiceImports.EntitySetService,\n];\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odata2ts/odata2ts",
3
- "version": "0.38.0",
3
+ "version": "0.39.0",
4
4
  "description": "Flexible generator to produce various TypeScript artefacts (from simple model interfaces to complete odata clients) from OData metadata files",
5
5
  "keywords": [
6
6
  "odata2ts",
@@ -42,6 +42,7 @@
42
42
  "prepublish": "yarn build",
43
43
  "test": "yarn test-compile && vitest run --dir test",
44
44
  "test-compile": "tsc -p tsconfig.compile.json",
45
+ "test-compile-large": "npx --node-options=\"--max-old-space-size=14000\" tsc -p tsconfig.compile.json",
45
46
  "testing": "vitest --dir test"
46
47
  },
47
48
  "dependencies": {
@@ -68,19 +69,19 @@
68
69
  },
69
70
  "devDependencies": {
70
71
  "@odata2ts/converter-v2-to-v4": "^0.5.1",
71
- "@odata2ts/odata-query-objects": "^0.25.0",
72
- "@odata2ts/odata-service": "^0.21.0",
72
+ "@odata2ts/odata-query-objects": "^0.26.0",
73
+ "@odata2ts/odata-service": "^0.22.0",
73
74
  "@odata2ts/test-converters": "^0.5.0",
74
75
  "@types/node": "^22.4.0"
75
76
  },
76
77
  "peerDependencies": {
77
- "@odata2ts/odata-query-objects": "^0.25.0",
78
- "@odata2ts/odata-service": "^0.21.0",
79
- "typescript": ">= 4"
78
+ "@odata2ts/odata-query-objects": "^0.26.0",
79
+ "@odata2ts/odata-service": "^0.22.0",
80
+ "typescript": ">= 4.7"
80
81
  },
81
82
  "publishConfig": {
82
83
  "access": "public"
83
84
  },
84
- "gitHead": "7ce242e75c634a63d75e30a8c3948d9f89c72769",
85
+ "gitHead": "3342bd281d559cb3489821d445bdc716aae8a946",
85
86
  "readme": "README.md"
86
87
  }