Track HiveGrid Cloud planning reference
This commit is contained in:
1 parent
b3d5ea6764
commit
e341c5938a
5784 files changed
+1104929
-3
No files matched your search
@@ -0,0 +1,271 @@
|
||||
import { EntityWithDetails } from "~/utils/db/entities/entities.db.server";
|
||||
import { t as i18nT } from "i18next";
|
||||
import CodeTemplateForm from "../templates/components/CodeTemplate.Form";
|
||||
import CodeTemplateDto from "../templates/dtos/CodeTemplate.Dto";
|
||||
import CodeTemplateDtoCreate from "../templates/dtos/CodeTemplate.Dto.Create";
|
||||
import CodeTemplateHelper from "../templates/helpers/CodeTemplate.Helper";
|
||||
import CodeTemplateRoutesActivityApi from "../templates/routes/api/CodeTemplate.Routes.Activity.Api";
|
||||
import CodeTemplateRoutesEditApi from "../templates/routes/api/CodeTemplate.Routes.Edit.Api";
|
||||
import CodeTemplateRoutesIndexApi from "../templates/routes/api/CodeTemplate.Routes.Index.Api";
|
||||
import CodeTemplateRoutesNewApi from "../templates/routes/api/CodeTemplate.Routes.New.Api";
|
||||
import CodeTemplateRoutesShareApi from "../templates/routes/api/CodeTemplate.Routes.Share.Api";
|
||||
import CodeTemplateRoutesTagsApi from "../templates/routes/api/CodeTemplate.Routes.Tags.Api";
|
||||
import CodeTemplateRoutesActivityComponent from "../templates/routes/components/CodeTemplate.Routes.Activity.Component";
|
||||
import CodeTemplateRoutesEditComponent from "../templates/routes/components/CodeTemplate.Routes.Edit.Component";
|
||||
import CodeTemplateRoutesIndexComponent from "../templates/routes/components/CodeTemplate.Routes.Index.Component";
|
||||
import CodeTemplateRoutesNewComponent from "../templates/routes/components/CodeTemplate.Routes.New.Component";
|
||||
import CodeTemplateRoutesShareComponent from "../templates/routes/components/CodeTemplate.Routes.Share.Component";
|
||||
import CodeTemplateRoutesTagsComponent from "../templates/routes/components/CodeTemplate.Routes.Tags.Component";
|
||||
import CodeTemplateRoutesActivityView from "../templates/routes/views/CodeTemplate.Routes.Activity.View";
|
||||
import CodeTemplateRoutesEditView from "../templates/routes/views/CodeTemplate.Routes.Edit.View";
|
||||
import CodeTemplateRoutesIndexView from "../templates/routes/views/CodeTemplate.Routes.Index.View";
|
||||
import CodeTemplateRoutesNewView from "../templates/routes/views/CodeTemplate.Routes.New.View";
|
||||
import CodeTemplateRoutesShareView from "../templates/routes/views/CodeTemplate.Routes.Share.View";
|
||||
import CodeTemplateRoutesTagsView from "../templates/routes/views/CodeTemplate.Routes.Tags.View";
|
||||
import CodeTemplateModelSchemaPrisma from "../templates/schemas/CodeTemplate.Model.Schema.Prisma";
|
||||
import CodeTemplateService from "../templates/services/CodeTemplate.Service";
|
||||
import CodeGeneratorHelper from "../utils/CodeGeneratorHelper";
|
||||
import Constants from "~/application/Constants";
|
||||
|
||||
export type CodeGeneratorOptions = {
|
||||
entity: EntityWithDetails;
|
||||
type: string;
|
||||
moduleDirectory: string;
|
||||
routesDirectory: string;
|
||||
deleteFilesOnFinish: boolean;
|
||||
};
|
||||
|
||||
export type CodeGeneratorFileDto = {
|
||||
type: "module" | "route" | "model";
|
||||
directory?: string;
|
||||
file: string;
|
||||
content: string;
|
||||
description: string;
|
||||
};
|
||||
|
||||
function getModuleFiles(options: CodeGeneratorOptions): CodeGeneratorFileDto[] {
|
||||
const { entity } = options;
|
||||
const { capitalized } = CodeGeneratorHelper.getNames(entity);
|
||||
|
||||
const files: CodeGeneratorFileDto[] = [
|
||||
{
|
||||
type: "module",
|
||||
directory: `dtos`,
|
||||
file: `${capitalized}Dto.ts`,
|
||||
content: CodeTemplateDto.generate({ entity }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.dto.rowInterface"),
|
||||
},
|
||||
{
|
||||
type: "module",
|
||||
directory: `dtos`,
|
||||
file: `${capitalized}CreateDto.ts`,
|
||||
content: CodeTemplateDtoCreate.generate({ entity }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.dto.createInput"),
|
||||
},
|
||||
{
|
||||
type: "module",
|
||||
directory: `components`,
|
||||
file: `${capitalized}Form.tsx`,
|
||||
content: CodeTemplateForm.generate({ entity }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.components.form"),
|
||||
},
|
||||
{
|
||||
type: "module",
|
||||
directory: `helpers`,
|
||||
file: `${capitalized}Helpers.ts`,
|
||||
content: CodeTemplateHelper.generate({ entity }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.helpers.formDataTransformers"),
|
||||
},
|
||||
{
|
||||
type: "module",
|
||||
directory: `services`,
|
||||
file: `${capitalized}Service.ts`,
|
||||
content: CodeTemplateService.generate({ entity }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.services.crud"),
|
||||
},
|
||||
{
|
||||
type: "module",
|
||||
directory: `routes/api`,
|
||||
file: `${capitalized}Routes.Index.Api.ts`,
|
||||
content: CodeTemplateRoutesIndexApi.generate({ entity }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.api.index"),
|
||||
},
|
||||
{
|
||||
type: "module",
|
||||
directory: `routes/api`,
|
||||
file: `${capitalized}Routes.New.Api.ts`,
|
||||
content: CodeTemplateRoutesNewApi.generate({ entity }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.api.new"),
|
||||
},
|
||||
{
|
||||
type: "module",
|
||||
directory: `routes/api`,
|
||||
file: `${capitalized}Routes.Edit.Api.ts`,
|
||||
content: CodeTemplateRoutesEditApi.generate({ entity }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.api.edit"),
|
||||
},
|
||||
{
|
||||
type: "module",
|
||||
directory: `routes/api`,
|
||||
file: `${capitalized}Routes.Activity.Api.ts`,
|
||||
content: CodeTemplateRoutesActivityApi.generate({ entity }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.api.activity"),
|
||||
},
|
||||
{
|
||||
type: "module",
|
||||
directory: `routes/api`,
|
||||
file: `${capitalized}Routes.Share.Api.ts`,
|
||||
content: CodeTemplateRoutesShareApi.generate({ entity }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.api.share"),
|
||||
},
|
||||
{
|
||||
type: "module",
|
||||
directory: `routes/api`,
|
||||
file: `${capitalized}Routes.Tags.Api.ts`,
|
||||
content: CodeTemplateRoutesTagsApi.generate({ entity }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.api.tags"),
|
||||
},
|
||||
{
|
||||
type: "module",
|
||||
directory: `routes/views`,
|
||||
file: `${capitalized}Routes.Index.View.tsx`,
|
||||
content: CodeTemplateRoutesIndexView.generate({ entity }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.views.index"),
|
||||
},
|
||||
{
|
||||
type: "module",
|
||||
directory: `routes/views`,
|
||||
file: `${capitalized}Routes.New.View.tsx`,
|
||||
content: CodeTemplateRoutesNewView.generate({ entity }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.views.new"),
|
||||
},
|
||||
{
|
||||
type: "module",
|
||||
directory: `routes/views`,
|
||||
file: `${capitalized}Routes.Edit.View.tsx`,
|
||||
content: CodeTemplateRoutesEditView.generate({ entity }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.views.edit"),
|
||||
},
|
||||
{
|
||||
type: "module",
|
||||
directory: `routes/views`,
|
||||
file: `${capitalized}Routes.Activity.View.tsx`,
|
||||
content: CodeTemplateRoutesActivityView.generate({ entity }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.views.activity"),
|
||||
},
|
||||
{
|
||||
type: "module",
|
||||
directory: `routes/views`,
|
||||
file: `${capitalized}Routes.Share.View.tsx`,
|
||||
content: CodeTemplateRoutesShareView.generate({ entity }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.views.share"),
|
||||
},
|
||||
{
|
||||
type: "module",
|
||||
directory: `routes/views`,
|
||||
file: `${capitalized}Routes.Tags.View.tsx`,
|
||||
content: CodeTemplateRoutesTagsView.generate({ entity }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.views.tags"),
|
||||
},
|
||||
];
|
||||
|
||||
if (options.type === "custom") {
|
||||
files.unshift({
|
||||
type: "model",
|
||||
file: `schema.prisma`,
|
||||
content: CodeTemplateModelSchemaPrisma.generate({ entity }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.schema.prisma"),
|
||||
});
|
||||
}
|
||||
|
||||
addTopComments(files, entity);
|
||||
return files;
|
||||
}
|
||||
|
||||
function getRouteFiles({ type, entity, moduleDirectory }: CodeGeneratorOptions) {
|
||||
let moduleLocation = moduleDirectory.replace("./app", "");
|
||||
if (moduleLocation.startsWith("/")) {
|
||||
moduleLocation = moduleLocation.substring(1);
|
||||
}
|
||||
const files: CodeGeneratorFileDto[] = [
|
||||
{
|
||||
type: "route",
|
||||
file: `index.tsx`,
|
||||
content: CodeTemplateRoutesIndexComponent.generate({ entity, moduleLocation }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.routeShells.index"),
|
||||
},
|
||||
{
|
||||
type: "route",
|
||||
file: `new.tsx`,
|
||||
content: CodeTemplateRoutesNewComponent.generate({ entity, moduleLocation }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.routeShells.new"),
|
||||
},
|
||||
{
|
||||
type: "route",
|
||||
file: `$id.tsx`,
|
||||
content: CodeTemplateRoutesEditComponent.generate({ entity, moduleLocation }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.routeShells.edit"),
|
||||
},
|
||||
{
|
||||
type: "route",
|
||||
file: `activity.tsx`,
|
||||
directory: "$id",
|
||||
content: CodeTemplateRoutesActivityComponent.generate({ entity, moduleLocation }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.routeShells.activity"),
|
||||
},
|
||||
{
|
||||
type: "route",
|
||||
file: `share.tsx`,
|
||||
directory: "$id",
|
||||
content: CodeTemplateRoutesShareComponent.generate({ entity, moduleLocation }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.routeShells.share"),
|
||||
},
|
||||
{
|
||||
type: "route",
|
||||
file: `tags.tsx`,
|
||||
directory: "$id",
|
||||
content: CodeTemplateRoutesTagsComponent.generate({ entity, moduleLocation }),
|
||||
description: i18nT("models.entity.codeGenerator.fileDescriptions.routeShells.tags"),
|
||||
},
|
||||
];
|
||||
|
||||
addTopComments(files, entity);
|
||||
return files;
|
||||
}
|
||||
|
||||
function addTopComments(files: CodeGeneratorFileDto[], entity: EntityWithDetails) {
|
||||
const rawLabelWarnings = CodeGeneratorHelper.getRawLabelWarnings(entity);
|
||||
files.forEach((file) => {
|
||||
const comments: string[] = [];
|
||||
comments.push(file.description);
|
||||
comments.push(...rawLabelWarnings);
|
||||
comments.push("Date: " + new Date().toISOString().slice(0, 10));
|
||||
comments.push("Version: App v" + Constants.VERSION);
|
||||
file.content = comments.map((comment) => `// ${comment}`).join("\n") + "\n\n" + file.content;
|
||||
});
|
||||
}
|
||||
|
||||
function moduleDirectoryOptions(entity: EntityWithDetails) {
|
||||
let tests = `./apps/web/app/modules/codeGeneratorTests/` + entity.slug;
|
||||
let app = `./apps/web/app/modules/` + entity.slug;
|
||||
return [
|
||||
{ name: tests, value: tests },
|
||||
{ name: app, value: app },
|
||||
];
|
||||
}
|
||||
|
||||
function routeDirectoryOptions(entity: EntityWithDetails) {
|
||||
let tests = `./apps/web/app/routes/admin/entities/code-generator/tests/` + entity.slug;
|
||||
let app = `./apps/web/app/routes/app.$tenant/` + entity.slug;
|
||||
return [
|
||||
{ name: tests, value: tests },
|
||||
{ name: app, value: app },
|
||||
];
|
||||
}
|
||||
|
||||
export default {
|
||||
getModuleFiles,
|
||||
getRouteFiles,
|
||||
moduleDirectoryOptions,
|
||||
routeDirectoryOptions,
|
||||
};
|
||||
Reference in new issue
Block a user