gen-jhipster
Version:
Spring Boot + Angular/React/Vue in one handy generator
88 lines (87 loc) • 3.58 kB
JavaScript
/**
* Copyright 2013-2024 the original author or authors from the JHipster project.
*
* This file is part of the JHipster project, see https://www.jhipster.tech/
* for more information.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import _ from 'lodash';
import { asWritingEntitiesTask } from '../base-application/support/task-type-inference.js';
import { SERVER_MAIN_PROTO_DIR, SERVER_MAIN_SRC_DIR } from '../generator-constants.js';
import { moveToJavaPackageSrcDir, moveToSrcMainProtoDir } from '../java/support/index.js';
const defaultEntities = ['User', 'Authority'];
const protoFiles = [
{
condition: ctx => ctx.entityClass !== 'User',
path: `${SERVER_MAIN_PROTO_DIR}`,
renameTo: moveToSrcMainProtoDir,
templates: ['entity/_entityUnderscoredName_.proto'],
},
{
condition: ctx => ctx.entityClass === 'User',
path: `${SERVER_MAIN_PROTO_DIR}`,
renameTo: moveToSrcMainProtoDir,
templates: ['entity/user_.proto'],
},
];
const javaFiles = [
{
condition: ctx => ctx.entityClass === 'Authority',
path: `${SERVER_MAIN_SRC_DIR}_package_`,
renameTo: moveToJavaPackageSrcDir,
templates: ['web/grpc/service/AuthorityGrpcService_.java', 'web/grpc/mapper/AuthorityProtoMapper_.java'],
},
{
condition: ctx => ctx.entityClass === 'User',
path: `${SERVER_MAIN_SRC_DIR}_package_`,
renameTo: moveToJavaPackageSrcDir,
templates: ['web/grpc/service/UserGrpcService_.java', 'web/grpc/mapper/UserProtoMapper_.java'],
},
{
condition: ctx => !defaultEntities.includes(ctx.entityClass),
path: `${SERVER_MAIN_SRC_DIR}_package_`,
renameTo: moveToJavaPackageSrcDir,
templates: ['web/grpc/service/_entityClass_GrpcService.java', 'web/grpc/mapper/_entityClass_ProtoMapper.java'],
},
];
export const grpcFiles = {
protoFiles,
javaFiles,
};
export function cleanupEntitiesTask() { }
export default asWritingEntitiesTask(async function writeEntitiesTasks({ application, entities }) {
if (application.enableGrpc) {
for (const entity of entities.filter(entity => !entity.skipServer)) {
const instanceType = entity.dto === 'mapstruct' ? `${entity.entityClass}DTO` : entity.entityClass;
const instanceName = entity.dto === 'mapstruct' ? `${entity.entityInstance}DTO` : entity.entityInstance;
const entityUnderscoredName = _.snakeCase(entity.entityClass).toLowerCase();
let idProtoWrappedType;
let idProtoType;
idProtoType = 'string';
idProtoWrappedType = 'StringValue';
const newApplication = {
...application,
instanceType,
instanceName,
entityUnderscoredName,
idProtoType,
idProtoWrappedType,
};
await this.writeFiles({
sections: grpcFiles,
context: { ...newApplication, ...entity },
});
}
}
});