runlify 0.0.780 → 0.0.783
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/build/index.js +4 -2
- package/build/projectsGeneration/args.js +39 -3
- package/build/projectsGeneration/builders/BaseSavableEntityBuilder.js +25 -13
- package/build/projectsGeneration/builders/SystemMetaBuilder.js +75 -11
- package/build/projectsGeneration/builders/buildedTypes.js +1 -1
- package/build/projectsGeneration/builders/storage.js +60 -0
- package/build/projectsGeneration/defaultCatalogs/{addElasticSearch.js → addExternalSearch.js} +6 -5
- package/build/projectsGeneration/defaultCatalogs/index.js +2 -2
- package/build/projectsGeneration/generateProject/back/generateBack.js +3 -1
- package/build/projectsGeneration/generateProject/back/src/services/generateBackEntityService.js +2 -2
- package/build/projectsGeneration/generateProject/generateBackClickHouseBootstrap.js +16 -0
- package/build/projectsGeneration/generateProject/generateBackElasticBootstrap.js +3 -2
- package/build/projectsGeneration/generateProject/generateEnvironment.js +36 -8
- package/build/projectsGeneration/generators/fileTemplates/back/clickhouse/jobs.js +94 -0
- package/build/projectsGeneration/generators/fileTemplates/back/elastic/jobs.js +15 -3
- package/build/projectsGeneration/generators/fileTemplates/back/environment/src/clients/getPrisma.js +75 -8
- package/build/projectsGeneration/generators/fileTemplates/back/services/entity/class.js +31 -20
- package/build/projectsGeneration/generators/fileTemplates/back/services/entity/config.js +10 -3
- package/build/projectsGeneration/generators/prisma/scheme/genPrismaEntity.js +17 -6
- package/build/projectsGeneration/generators/prisma/scheme/genPrismaSchemaForEntities.js +3 -3
- package/build/projectsGeneration/generators/prisma/scheme/genPrismaSchemaForEntitiesWithClientAdnDb.js +67 -9
- package/build/projectsGeneration/utils/databaseMeta.js +75 -0
- package/build/types/index.d.ts +1 -0
- package/build/types/projectsGeneration/builders/BaseSavableEntityBuilder.d.ts +6 -4
- package/build/types/projectsGeneration/builders/SystemMetaBuilder.d.ts +5 -1
- package/build/types/projectsGeneration/builders/buildedTypes.d.ts +7 -2
- package/build/types/projectsGeneration/builders/storage.d.ts +21 -0
- package/build/types/projectsGeneration/defaultCatalogs/addExternalSearch.d.ts +2 -0
- package/build/types/projectsGeneration/defaultCatalogs/index.d.ts +1 -1
- package/build/types/projectsGeneration/generateProject/generateBackClickHouseBootstrap.d.ts +3 -0
- package/build/types/projectsGeneration/generators/fileTemplates/back/clickhouse/jobs.d.ts +183 -0
- package/build/types/projectsGeneration/generators/fileTemplates/back/environment/src/clients/getPrisma.d.ts +2 -2
- package/build/types/projectsGeneration/generators/prisma/scheme/genPrismaEntity.d.ts +1 -1
- package/build/types/projectsGeneration/generators/prisma/scheme/genPrismaSchemaForEntities.d.ts +1 -1
- package/build/types/projectsGeneration/generators/prisma/scheme/genPrismaSchemaForEntitiesWithClientAdnDb.d.ts +12 -1
- package/build/types/projectsGeneration/utils/databaseMeta.d.ts +8 -0
- package/package.json +1 -1
- package/build/types/projectsGeneration/defaultCatalogs/addElasticSearch.d.ts +0 -2
|
@@ -44,13 +44,24 @@ const prismaIndexFieldFragment = (entity, fieldName, indexType) => {
|
|
|
44
44
|
}
|
|
45
45
|
return `${fieldName}(ops: JsonbPathOps)`;
|
|
46
46
|
};
|
|
47
|
-
const
|
|
47
|
+
const inwardEntityLinks = (entity, links, allEntities) => {
|
|
48
|
+
let inward = (0, getLinksFromExternalEntities_1.getLinksFromExternalEntities)(entity, links).filter((el) => el.fromField.linkCategory === 'entity');
|
|
49
|
+
if (allEntities) {
|
|
50
|
+
inward = inward.filter((el) => {
|
|
51
|
+
const owner = allEntities.get(el.entityOwnerName);
|
|
52
|
+
return !!owner && owner.database === entity.database;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return inward;
|
|
56
|
+
};
|
|
57
|
+
const genPrismaEntity = (entity, links, forShards = false, allEntities) => {
|
|
48
58
|
const fields = [
|
|
49
59
|
...R.flatten(entity.fields.map((field) => (0, genPrismaField_1.genPrismaField)(entity, field, forShards))),
|
|
50
|
-
...forShards
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
60
|
+
...forShards
|
|
61
|
+
? []
|
|
62
|
+
: inwardEntityLinks(entity, links, allEntities)
|
|
63
|
+
.map((link) => (0, genPrismaFieldFromExternalEntity_1.genPrismaFieldFromExternalEntity)(link))
|
|
64
|
+
.filter((l) => l),
|
|
54
65
|
];
|
|
55
66
|
return `model ${(0, cases_1.pascalSingular)(entity.name)} {
|
|
56
67
|
${fields.join('\n')}${entity.uniqueConstraints.length > 0
|
|
@@ -68,4 +79,4 @@ ${fields.join('\n')}${entity.uniqueConstraints.length > 0
|
|
|
68
79
|
`;
|
|
69
80
|
};
|
|
70
81
|
exports.genPrismaEntity = genPrismaEntity;
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuUHJpc21hRW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3Byb2plY3RzR2VuZXJhdGlvbi9nZW5lcmF0b3JzL3ByaXNtYS9zY2hlbWUvZ2VuUHJpc21hRW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQTBCO0FBQzFCLG1EQUFzRDtBQUN0RCxnREFBdUU7QUFDdkUsOEZBQXdGO0FBRXhGLDREQUFzRDtBQUN0RCxnR0FBMEY7QUFDMUYsNkNBQXNDO0FBRXRDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFZLEVBQVcsRUFBRSxDQUNuRCxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVE7SUFDM0IsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRO0lBQ3RCLEtBQXFCLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQTtBQUU5QyxNQUFNLHdCQUF3QixHQUFHLENBQy9CLE1BQWMsRUFDZCxTQUFpQixFQUNqQixTQUFnQyxFQUN4QixFQUFFO0lBQ1YsSUFBSSxTQUFTLEtBQUssb0JBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDL0IsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQTtJQUU3RCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDeEMsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxPQUFPLEdBQUcsU0FBUyxxQkFBcUIsQ0FBQztBQUMzQyxDQUFDLENBQUE7QUFFRCxNQUFNLGlCQUFpQixHQUFHLENBQ3hCLE1BQWMsRUFDZCxLQUF1QixFQUN2QixXQUFpQyxFQUNmLEVBQUU7SUFDcEIsSUFBSSxNQUFNLEdBQUcs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
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.genPrismaSchemaForEntities = void 0;
|
|
4
4
|
const genPrismaEntity_1 = require("./genPrismaEntity");
|
|
5
|
-
const genPrismaSchemaForEntities = (entities, links, forShards = false) => {
|
|
5
|
+
const genPrismaSchemaForEntities = (entities, links, forShards = false, allEntities) => {
|
|
6
6
|
const prismaSchemas = [];
|
|
7
7
|
for (const entity of entities) {
|
|
8
|
-
prismaSchemas.push((0, genPrismaEntity_1.genPrismaEntity)(entity, links, forShards));
|
|
8
|
+
prismaSchemas.push((0, genPrismaEntity_1.genPrismaEntity)(entity, links, forShards, allEntities));
|
|
9
9
|
}
|
|
10
10
|
return prismaSchemas.join('\n\n');
|
|
11
11
|
};
|
|
12
12
|
exports.genPrismaSchemaForEntities = genPrismaSchemaForEntities;
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuUHJpc21hU2NoZW1hRm9yRW50aXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvamVjdHNHZW5lcmF0aW9uL2dlbmVyYXRvcnMvcHJpc21hL3NjaGVtZS9nZW5QcmlzbWFTY2hlbWFGb3JFbnRpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSx1REFBaUQ7QUFFMUMsTUFBTSwwQkFBMEIsR0FBRyxDQUN4QyxRQUFrQixFQUNsQixLQUF1QixFQUN2QixTQUFTLEdBQUcsS0FBSyxFQUNqQixXQUFpQyxFQUNqQyxFQUFFO0lBQ0YsTUFBTSxhQUFhLEdBQWEsRUFBRSxDQUFBO0lBQ2xDLEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxFQUFFO1FBQzdCLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBQSxpQ0FBZSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUE7S0FDM0U7SUFFRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDbkMsQ0FBQyxDQUFBO0FBWlksUUFBQSwwQkFBMEIsOEJBWXRDIn0=
|
|
@@ -1,24 +1,82 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.genPrismaSchemaForEntitiesWithClientAdnDb = void 0;
|
|
3
|
+
exports.genDeployConnectionPrisma = exports.genPrismaSchemaForEntitiesWithClientAdnDb = void 0;
|
|
4
4
|
const genPrismaSchemaForEntities_1 = require("./genPrismaSchemaForEntities");
|
|
5
|
-
const
|
|
5
|
+
const databaseMeta_1 = require("../../../utils/databaseMeta");
|
|
6
|
+
const collectCrossDatabaseEntityLinkViolations = (entities, allEntities) => {
|
|
7
|
+
const lines = [];
|
|
8
|
+
for (const entity of entities) {
|
|
9
|
+
for (const field of entity.fields) {
|
|
10
|
+
if (field.category !== 'link') {
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
if (field.linkCategory !== 'entity') {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
const target = allEntities.get(field.externalEntity);
|
|
17
|
+
if (!target) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (target.database !== entity.database) {
|
|
21
|
+
lines.push(` ${entity.name}.${field.name} → ${field.externalEntity} (database "${entity.database}" → "${target.database}")`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return lines;
|
|
26
|
+
};
|
|
27
|
+
const genPrismaSchemaForEntitiesWithClientAdnDb = (args, opts) => {
|
|
28
|
+
const { database, forShards } = opts;
|
|
29
|
+
const { entities, allLinks, allEntities } = args;
|
|
30
|
+
const effectiveForShards = database === 'main' && forShards;
|
|
6
31
|
const ent = entities
|
|
7
|
-
.filter(e =>
|
|
8
|
-
.filter(e =>
|
|
9
|
-
|
|
32
|
+
.filter((e) => e.storage !== 'elastic' && e.storage !== 'clickhouse')
|
|
33
|
+
.filter((e) => {
|
|
34
|
+
if (database !== 'main') {
|
|
35
|
+
return e.database === database;
|
|
36
|
+
}
|
|
37
|
+
return e.database === 'main' && (forShards ? e.sharded : !e.sharded);
|
|
38
|
+
});
|
|
39
|
+
const crossDbViolations = collectCrossDatabaseEntityLinkViolations(ent, allEntities);
|
|
40
|
+
if (crossDbViolations.length > 0) {
|
|
41
|
+
throw new Error(`Cross-database entity links are not supported (Prisma cannot place @relation across datasources). ` +
|
|
42
|
+
`Replace addLinkField with addViewLinkField for these links in metadata:\n${crossDbViolations.join('\n')}`);
|
|
43
|
+
}
|
|
44
|
+
const joined = (0, genPrismaSchemaForEntities_1.genPrismaSchemaForEntities)(ent, allLinks, effectiveForShards, allEntities);
|
|
45
|
+
const writeEnv = (0, databaseMeta_1.prismaDatasourceWriteEnvVar)(database);
|
|
46
|
+
let outputLine = '';
|
|
47
|
+
if (database === 'main' && effectiveForShards) {
|
|
48
|
+
outputLine = `
|
|
49
|
+
output = "./build"`;
|
|
50
|
+
}
|
|
51
|
+
else if (database !== 'main') {
|
|
52
|
+
outputLine = `
|
|
53
|
+
output = "./client"`;
|
|
54
|
+
}
|
|
10
55
|
return `generator client {
|
|
11
56
|
provider = "prisma-client-js"
|
|
12
|
-
previewFeatures = ["metrics"]${
|
|
13
|
-
output = "./build"` : ''}
|
|
57
|
+
previewFeatures = ["metrics"]${outputLine}
|
|
14
58
|
}
|
|
15
59
|
|
|
16
60
|
datasource db {
|
|
17
61
|
provider = "postgresql"
|
|
18
|
-
url = env("
|
|
62
|
+
url = env("${writeEnv}")
|
|
19
63
|
}
|
|
20
64
|
|
|
21
65
|
${joined}`;
|
|
22
66
|
};
|
|
23
67
|
exports.genPrismaSchemaForEntitiesWithClientAdnDb = genPrismaSchemaForEntitiesWithClientAdnDb;
|
|
24
|
-
|
|
68
|
+
/** Minimal deploy schema (migrate URL only). */
|
|
69
|
+
const genDeployConnectionPrisma = (database) => {
|
|
70
|
+
const migrationEnv = (0, databaseMeta_1.prismaDatasourceMigrationEnvVar)(database);
|
|
71
|
+
return `datasource db {
|
|
72
|
+
provider = "postgresql"
|
|
73
|
+
url = env("${migrationEnv}")
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
generator client {
|
|
77
|
+
provider = "prisma-client-js"
|
|
78
|
+
}
|
|
79
|
+
`;
|
|
80
|
+
};
|
|
81
|
+
exports.genDeployConnectionPrisma = genDeployConnectionPrisma;
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuUHJpc21hU2NoZW1hRm9yRW50aXRpZXNXaXRoQ2xpZW50QWRuRGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvamVjdHNHZW5lcmF0aW9uL2dlbmVyYXRvcnMvcHJpc21hL3NjaGVtZS9nZW5QcmlzbWFTY2hlbWFGb3JFbnRpdGllc1dpdGhDbGllbnRBZG5EYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSw2RUFBdUU7QUFDdkUsOERBR29DO0FBRXBDLE1BQU0sd0NBQXdDLEdBQUcsQ0FDL0MsUUFBa0IsRUFDbEIsV0FBZ0MsRUFDdEIsRUFBRTtJQUNaLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQTtJQUMxQixLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsRUFBRTtRQUM3QixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDakMsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLE1BQU0sRUFBRTtnQkFDN0IsU0FBUTthQUNUO1lBQ0QsSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtnQkFDbkMsU0FBUTthQUNUO1lBQ0QsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUE7WUFDcEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDWCxTQUFRO2FBQ1Q7WUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDdkMsS0FBSyxDQUFDLElBQUksQ0FDUixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksTUFBTSxLQUFLLENBQUMsY0FBYyxlQUFlLE1BQU0sQ0FBQyxRQUFRLFFBQVEsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUNsSCxDQUFBO2FBQ0Y7U0FDRjtLQUNGO0lBQ0QsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDLENBQUE7QUFZTSxNQUFNLHlDQUF5QyxHQUFHLENBQ3ZELElBQStCLEVBQy9CLElBQThCLEVBQzlCLEVBQUU7SUFDRixNQUFNLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxHQUFHLElBQUksQ0FBQTtJQUNsQyxNQUFNLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUMsR0FBRyxJQUFJLENBQUE7SUFFOUMsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLEtBQUssTUFBTSxJQUFJLFNBQVMsQ0FBQTtJQUUzRCxNQUFNLEdBQUcsR0FBRyxRQUFRO1NBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxZQUFZLENBQUM7U0FDcEUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDWixJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUU7WUFDdkIsT0FBTyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQTtTQUMvQjtRQUNELE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3RFLENBQUMsQ0FBQyxDQUFBO0lBRUosTUFBTSxpQkFBaUIsR0FBRyx3Q0FBd0MsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDcEYsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQ2Isb0dBQW9HO1lBQ2xHLDRFQUE0RSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDN0csQ0FBQTtLQUNGO0lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBQSx1REFBMEIsRUFDdkMsR0FBRyxFQUNILFFBQVEsRUFDUixrQkFBa0IsRUFDbEIsV0FBVyxDQUNaLENBQUE7SUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFBLDBDQUEyQixFQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRXRELElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQTtJQUNuQixJQUFJLFFBQVEsS0FBSyxNQUFNLElBQUksa0JBQWtCLEVBQUU7UUFDN0MsVUFBVSxHQUFHO3VCQUNNLENBQUE7S0FDcEI7U0FBTSxJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUU7UUFDOUIsVUFBVSxHQUFHO3dCQUNPLENBQUE7S0FDckI7SUFFRCxPQUFPOztpQ0FFd0IsVUFBVTs7Ozs7b0JBS3ZCLFFBQVE7OztFQUcxQixNQUFNLEVBQUUsQ0FBQTtBQUNWLENBQUMsQ0FBQTtBQXZEWSxRQUFBLHlDQUF5Qyw2Q0F1RHJEO0FBRUQsZ0RBQWdEO0FBQ3pDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxRQUFnQixFQUFVLEVBQUU7SUFDcEUsTUFBTSxZQUFZLEdBQUcsSUFBQSw4Q0FBK0IsRUFBQyxRQUFRLENBQUMsQ0FBQTtJQUM5RCxPQUFPOztvQkFFVyxZQUFZOzs7Ozs7Q0FNL0IsQ0FBQTtBQUNELENBQUMsQ0FBQTtBQVhZLFFBQUEseUJBQXlCLDZCQVdyQyJ9
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.prismaDatasourceMigrationEnvVar = exports.prismaDatasourceWriteEnvVar = exports.databaseNameToEnvSuffix = exports.buildConfigVarsForAdditionalDatabase = exports.validateEntityDatabaseName = exports.postgresUrlDatabaseName = void 0;
|
|
4
|
+
const change_case_1 = require("change-case");
|
|
5
|
+
const ENTITY_DATABASE_NAME_RE = /^[a-z][a-zA-Z0-9]*$/;
|
|
6
|
+
const postgresUrlDatabaseName = (metaDbName) => metaDbName === 'main' ? 'postgres' : (0, change_case_1.snakeCase)(metaDbName);
|
|
7
|
+
exports.postgresUrlDatabaseName = postgresUrlDatabaseName;
|
|
8
|
+
const validateEntityDatabaseName = (name) => {
|
|
9
|
+
if (name === 'main') {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
if (!ENTITY_DATABASE_NAME_RE.test(name)) {
|
|
13
|
+
throw new Error(`Invalid database name "${name}": use a reserved "main" or an identifier matching ${ENTITY_DATABASE_NAME_RE}.`);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
exports.validateEntityDatabaseName = validateEntityDatabaseName;
|
|
17
|
+
/** Config vars for a non-main database (mirrors database.main.* in SystemMetaBuilder). */
|
|
18
|
+
const buildConfigVarsForAdditionalDatabase = (dbName) => {
|
|
19
|
+
const titleBase = `База данных "${dbName}"`;
|
|
20
|
+
const defaultBase = `postgresql://postgres:password@localhost:5432/${(0, exports.postgresUrlDatabaseName)(dbName)}`;
|
|
21
|
+
return [
|
|
22
|
+
{
|
|
23
|
+
name: `database.${dbName}.write.uri`,
|
|
24
|
+
type: 'string',
|
|
25
|
+
required: true,
|
|
26
|
+
default: defaultBase,
|
|
27
|
+
needFor: `${titleBase}: строка подключения для записи`,
|
|
28
|
+
scopes: ['back', 'worker', 'telegramBot'],
|
|
29
|
+
hidden: true,
|
|
30
|
+
editable: false,
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: `database.${dbName}.readOnly.uri`,
|
|
34
|
+
type: 'string',
|
|
35
|
+
required: false,
|
|
36
|
+
default: defaultBase,
|
|
37
|
+
needFor: `${titleBase}: строка подключения только для чтения`,
|
|
38
|
+
scopes: ['back', 'worker', 'telegramBot'],
|
|
39
|
+
hidden: true,
|
|
40
|
+
editable: false,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: `database.${dbName}.readOnly.enabled`,
|
|
44
|
+
type: 'bool',
|
|
45
|
+
required: true,
|
|
46
|
+
default: false,
|
|
47
|
+
needFor: `${titleBase}: включено ли отдельное подключение для чтения`,
|
|
48
|
+
scopes: ['back', 'worker', 'telegramBot'],
|
|
49
|
+
hidden: false,
|
|
50
|
+
editable: true,
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: `database.${dbName}.migration.uri`,
|
|
54
|
+
type: 'string',
|
|
55
|
+
required: true,
|
|
56
|
+
default: defaultBase,
|
|
57
|
+
needFor: `${titleBase}: строка подключения для миграций (без pgbouncer)`,
|
|
58
|
+
scopes: ['back', 'worker', 'telegramBot'],
|
|
59
|
+
hidden: true,
|
|
60
|
+
editable: false,
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
};
|
|
64
|
+
exports.buildConfigVarsForAdditionalDatabase = buildConfigVarsForAdditionalDatabase;
|
|
65
|
+
const databaseNameToEnvSuffix = (dbName) => dbName.replace(/([A-Z])/gu, '_$1').replace(/^_/, '').toUpperCase();
|
|
66
|
+
exports.databaseNameToEnvSuffix = databaseNameToEnvSuffix;
|
|
67
|
+
const prismaDatasourceWriteEnvVar = (database) => database === 'main'
|
|
68
|
+
? 'DATABASE_MAIN_WRITE_URI'
|
|
69
|
+
: `DATABASE_${(0, exports.databaseNameToEnvSuffix)(database)}_WRITE_URI`;
|
|
70
|
+
exports.prismaDatasourceWriteEnvVar = prismaDatasourceWriteEnvVar;
|
|
71
|
+
const prismaDatasourceMigrationEnvVar = (database) => database === 'main'
|
|
72
|
+
? 'DATABASE_MAIN_MIGRATION_URI'
|
|
73
|
+
: `DATABASE_${(0, exports.databaseNameToEnvSuffix)(database)}_MIGRATION_URI`;
|
|
74
|
+
exports.prismaDatasourceMigrationEnvVar = prismaDatasourceMigrationEnvVar;
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2VNZXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb2plY3RzR2VuZXJhdGlvbi91dGlscy9kYXRhYmFzZU1ldGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXFDO0FBSXJDLE1BQU0sdUJBQXVCLEdBQUcscUJBQXFCLENBQUE7QUFFOUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLFVBQWtCLEVBQVUsRUFBRSxDQUNwRSxVQUFVLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUEsdUJBQVMsRUFBQyxVQUFVLENBQUMsQ0FBQTtBQUQvQyxRQUFBLHVCQUF1QiwyQkFDd0I7QUFFckQsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLElBQVksRUFBUSxFQUFFO0lBQy9ELElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtRQUNuQixPQUFNO0tBQ1A7SUFDRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQ2IsMEJBQTBCLElBQUksc0RBQXNELHVCQUF1QixHQUFHLENBQy9HLENBQUE7S0FDRjtBQUNILENBQUMsQ0FBQTtBQVRZLFFBQUEsMEJBQTBCLDhCQVN0QztBQUVELDBGQUEwRjtBQUNuRixNQUFNLG9DQUFvQyxHQUFHLENBQ2xELE1BQWMsRUFDRCxFQUFFO0lBQ2YsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLE1BQU0sR0FBRyxDQUFBO0lBQzNDLE1BQU0sV0FBVyxHQUFHLGlEQUFpRCxJQUFBLCtCQUF1QixFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUE7SUFDdEcsT0FBTztRQUNMO1lBQ0UsSUFBSSxFQUFFLFlBQVksTUFBTSxZQUFZO1lBQ3BDLElBQUksRUFBRSxRQUFpQjtZQUN2QixRQUFRLEVBQUUsSUFBSTtZQUNkLE9BQU8sRUFBRSxXQUFXO1lBQ3BCLE9BQU8sRUFBRSxHQUFHLFNBQVMsaUNBQWlDO1lBQ3RELE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDO1lBQ3pDLE1BQU0sRUFBRSxJQUFJO1lBQ1osUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRDtZQUNFLElBQUksRUFBRSxZQUFZLE1BQU0sZUFBZTtZQUN2QyxJQUFJLEVBQUUsUUFBaUI7WUFDdkIsUUFBUSxFQUFFLEtBQUs7WUFDZixPQUFPLEVBQUUsV0FBVztZQUNwQixPQUFPLEVBQUUsR0FBRyxTQUFTLHdDQUF3QztZQUM3RCxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQztZQUN6QyxNQUFNLEVBQUUsSUFBSTtZQUNaLFFBQVEsRUFBRSxLQUFLO1NBQ2hCO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsWUFBWSxNQUFNLG1CQUFtQjtZQUMzQyxJQUFJLEVBQUUsTUFBZTtZQUNyQixRQUFRLEVBQUUsSUFBSTtZQUNkLE9BQU8sRUFBRSxLQUFLO1lBQ2QsT0FBTyxFQUFFLEdBQUcsU0FBUyxnREFBZ0Q7WUFDckUsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUM7WUFDekMsTUFBTSxFQUFFLEtBQUs7WUFDYixRQUFRLEVBQUUsSUFBSTtTQUNmO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsWUFBWSxNQUFNLGdCQUFnQjtZQUN4QyxJQUFJLEVBQUUsUUFBaUI7WUFDdkIsUUFBUSxFQUFFLElBQUk7WUFDZCxPQUFPLEVBQUUsV0FBVztZQUNwQixPQUFPLEVBQUUsR0FBRyxTQUFTLG1EQUFtRDtZQUN4RSxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQztZQUN6QyxNQUFNLEVBQUUsSUFBSTtZQUNaLFFBQVEsRUFBRSxLQUFLO1NBQ2hCO0tBQ3dCLENBQUE7QUFDN0IsQ0FBQyxDQUFBO0FBL0NZLFFBQUEsb0NBQW9DLHdDQStDaEQ7QUFFTSxNQUFNLHVCQUF1QixHQUFHLENBQUMsTUFBYyxFQUFVLEVBQUUsQ0FDaEUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtBQUR2RCxRQUFBLHVCQUF1QiwyQkFDZ0M7QUFFN0QsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLFFBQWdCLEVBQVUsRUFBRSxDQUN0RSxRQUFRLEtBQUssTUFBTTtJQUNqQixDQUFDLENBQUMseUJBQXlCO0lBQzNCLENBQUMsQ0FBQyxZQUFZLElBQUEsK0JBQXVCLEVBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQTtBQUhsRCxRQUFBLDJCQUEyQiwrQkFHdUI7QUFFeEQsTUFBTSwrQkFBK0IsR0FBRyxDQUFDLFFBQWdCLEVBQVUsRUFBRSxDQUMxRSxRQUFRLEtBQUssTUFBTTtJQUNqQixDQUFDLENBQUMsNkJBQTZCO0lBQy9CLENBQUMsQ0FBQyxZQUFZLElBQUEsK0JBQXVCLEVBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFBO0FBSHRELFFBQUEsK0JBQStCLG1DQUd1QiJ9
|
package/build/types/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import ScalarFieldBuilder from './fields/ScalarFieldBuilder';
|
|
|
2
2
|
import IdFieldBuilder from './fields/IdFieldBuilder';
|
|
3
3
|
import LinkFieldBuilder from './fields/LinkFieldBuilder';
|
|
4
4
|
import { Multitenancy, BaseSavableEntity, PermissionType, MethodType, DateUnit } from './buildedTypes';
|
|
5
|
+
import { StorageType } from './storage';
|
|
5
6
|
import CatalogBuilder from './CatalogBuilder';
|
|
6
7
|
import BaseBuilder from './BaseBuilder';
|
|
7
8
|
import FormsBuilder from './ui/FormsBuilder';
|
|
@@ -38,8 +39,7 @@ declare abstract class BaseSavableEntityBuilder extends BaseBuilder implements M
|
|
|
38
39
|
predefinedElements: Record<string, any>[];
|
|
39
40
|
devPerefinedElements: Record<string, any>[];
|
|
40
41
|
searchEnabled: boolean;
|
|
41
|
-
|
|
42
|
-
elasticOnly: boolean;
|
|
42
|
+
protected _storage: StorageType;
|
|
43
43
|
multitenancy: Multitenancy;
|
|
44
44
|
commonElementsVisibleToAll: boolean;
|
|
45
45
|
title: Record<string, {
|
|
@@ -48,6 +48,7 @@ declare abstract class BaseSavableEntityBuilder extends BaseBuilder implements M
|
|
|
48
48
|
}>;
|
|
49
49
|
externalSearchName: string | undefined;
|
|
50
50
|
sharded: boolean;
|
|
51
|
+
database: string;
|
|
51
52
|
isExternalSearch: boolean;
|
|
52
53
|
clearDBAfter: {
|
|
53
54
|
count: number;
|
|
@@ -68,8 +69,8 @@ declare abstract class BaseSavableEntityBuilder extends BaseBuilder implements M
|
|
|
68
69
|
plural: string;
|
|
69
70
|
singular: string;
|
|
70
71
|
}, language?: string): this;
|
|
71
|
-
|
|
72
|
-
|
|
72
|
+
getStorage(): StorageType;
|
|
73
|
+
setStorage(storage: StorageType): this;
|
|
73
74
|
setSearchEnabled(searchEnabled?: boolean): this;
|
|
74
75
|
setAuditable(auditable?: boolean): this;
|
|
75
76
|
setDeletable(deletable?: boolean): this;
|
|
@@ -126,6 +127,7 @@ declare abstract class BaseSavableEntityBuilder extends BaseBuilder implements M
|
|
|
126
127
|
setDevPredefinedElements(fields: Record<string, any>[]): void;
|
|
127
128
|
setMultitenancy(multitenancy: Multitenancy, commonElementsVisibleToAll?: boolean): void;
|
|
128
129
|
setSharded(value?: boolean): this;
|
|
130
|
+
setDatabase(name: string): this;
|
|
129
131
|
setIsExternalTable(): this;
|
|
130
132
|
setClearDBAfter(count: number, unit: DateUnit): this;
|
|
131
133
|
setAllowedToChange(value?: string): this;
|
|
@@ -46,6 +46,7 @@ declare class SystemMetaBuilder implements MethodsModelsHolder {
|
|
|
46
46
|
protected outputModels: BaseModelBuilder[];
|
|
47
47
|
labels: string[];
|
|
48
48
|
additionalServices: AdditionalServiceBuilder[];
|
|
49
|
+
private readonly registeredDatabaseNames;
|
|
49
50
|
name: string;
|
|
50
51
|
prefix: string;
|
|
51
52
|
needFor?: string;
|
|
@@ -94,6 +95,7 @@ declare class SystemMetaBuilder implements MethodsModelsHolder {
|
|
|
94
95
|
addExternalMenuItem(label: string, url: string): ExternalMenuItemBuilder;
|
|
95
96
|
addExternalEnvMenuItem(label: string, env: string): ExternalEnvMenuItemBuilder;
|
|
96
97
|
getBack(): DeploymentBuilder;
|
|
98
|
+
addDatabase(name: string): this;
|
|
97
99
|
getDocuments(): EntityBuilderWithOptions<DocumentBuilder>[];
|
|
98
100
|
addDocument(name: string, title?: {
|
|
99
101
|
singular?: string;
|
|
@@ -112,7 +114,9 @@ declare class SystemMetaBuilder implements MethodsModelsHolder {
|
|
|
112
114
|
addGlossaryTerm(term: string, definition: string): this;
|
|
113
115
|
addCommnad(projectCategory: ProjectCategory, name: string, command: string, needFor: string): this;
|
|
114
116
|
getSavableEntities(): (EntityBuilderWithOptions<CatalogBuilder> | EntityBuilderWithOptions<InfoRegistryBuilder> | EntityBuilderWithOptions<DocumentBuilder> | EntityBuilderWithOptions<SumRegistryBuilder>)[];
|
|
115
|
-
|
|
117
|
+
getEntitiesWithExternalSearch(): Array<CatalogBuilder | DocumentBuilder | InfoRegistryBuilder | SumRegistryBuilder>;
|
|
118
|
+
getEntitiesWithElasticSearch(): Array<CatalogBuilder | DocumentBuilder | InfoRegistryBuilder | SumRegistryBuilder>;
|
|
119
|
+
getEntitiesWithClickHouseSearch(): Array<CatalogBuilder | DocumentBuilder | InfoRegistryBuilder | SumRegistryBuilder>;
|
|
116
120
|
addMethod(name: string, methodType: MethodType, title?: string): MethodBuilder;
|
|
117
121
|
addLabel(label: string): void;
|
|
118
122
|
getMethods(): MethodBuilder[];
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { HttpMethod } from './curlTypes';
|
|
2
2
|
import { DocumentationOfDocument } from './docs/DocumentationOfDocument';
|
|
3
|
+
import { StorageType } from './storage';
|
|
3
4
|
import { Index } from './types';
|
|
4
5
|
import Forms from './ui/Forms';
|
|
5
6
|
export type ConfigVarScope = 'ci' | 'back' | 'admin-app' | 'cutomer-app' | 'worker' | 'telegramBot';
|
|
@@ -18,6 +19,9 @@ export interface Glossary {
|
|
|
18
19
|
term: string;
|
|
19
20
|
definition: string;
|
|
20
21
|
}
|
|
22
|
+
export type DataBaseMeta = {
|
|
23
|
+
name: string;
|
|
24
|
+
};
|
|
21
25
|
export type ProjectCategory = 'back' | 'ui' | 'app' | 'land';
|
|
22
26
|
export interface Command {
|
|
23
27
|
projectCategory: ProjectCategory;
|
|
@@ -206,8 +210,7 @@ export type BaseSavableEntity = BaseEntity & {
|
|
|
206
210
|
predefinedElements: Record<string, any>[];
|
|
207
211
|
devPerefinedElements: Record<string, any>[];
|
|
208
212
|
auditable: boolean;
|
|
209
|
-
|
|
210
|
-
elasticOnly: boolean;
|
|
213
|
+
storage: StorageType;
|
|
211
214
|
searchEnabled: boolean;
|
|
212
215
|
sortField: string;
|
|
213
216
|
creatableByUser: boolean;
|
|
@@ -238,6 +241,7 @@ export type BaseSavableEntity = BaseEntity & {
|
|
|
238
241
|
labels: string[];
|
|
239
242
|
excludeFromCommonMenu: boolean;
|
|
240
243
|
cacheable: boolean;
|
|
244
|
+
database: string;
|
|
241
245
|
};
|
|
242
246
|
export type Report = BaseEntity & {
|
|
243
247
|
type: 'report';
|
|
@@ -427,6 +431,7 @@ export type System = {
|
|
|
427
431
|
prefix: string;
|
|
428
432
|
needFor?: string;
|
|
429
433
|
configVars: ConfigVar[];
|
|
434
|
+
dataBases: DataBaseMeta[];
|
|
430
435
|
catalogs: Catalog[];
|
|
431
436
|
documents: Document[];
|
|
432
437
|
infoRegistries: InfoRegistry[];
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type StorageType = 'postgres' | 'elastic' | 'clickhouse' | 'postgres_with_elastic_search' | 'postgres_with_clickhouse_search';
|
|
2
|
+
export type SearchEngine = 'elastic' | 'clickhouse';
|
|
3
|
+
export declare const Storage: {
|
|
4
|
+
readonly POSTGRES: "postgres";
|
|
5
|
+
readonly ELASTIC: "elastic";
|
|
6
|
+
readonly CLICKHOUSE: "clickhouse";
|
|
7
|
+
readonly POSTGRES_WITH_ELASTIC_SEARCH: "postgres_with_elastic_search";
|
|
8
|
+
readonly POSTGRES_WITH_CLICKHOUSE_SEARCH: "postgres_with_clickhouse_search";
|
|
9
|
+
};
|
|
10
|
+
export declare const isStoragePostgres: (storage: StorageType) => boolean;
|
|
11
|
+
export declare const isStorageElasticOnly: (storage: StorageType) => boolean;
|
|
12
|
+
export declare const isStorageClickHouseOnly: (storage: StorageType) => boolean;
|
|
13
|
+
export declare const isStorageExternalSearch: (storage: StorageType) => boolean;
|
|
14
|
+
export declare const isStorageElasticSearch: (storage: StorageType) => boolean;
|
|
15
|
+
export declare const isStorageClickHouseSearch: (storage: StorageType) => boolean;
|
|
16
|
+
export declare const getSearchEngine: (storage: StorageType) => SearchEngine | null;
|
|
17
|
+
export declare const getSearchServicePrefix: (storage: StorageType) => 'Elastic' | 'ClickHouse' | null;
|
|
18
|
+
export declare const usesPrismaDelegate: (storage: StorageType) => boolean;
|
|
19
|
+
export declare const getConfigExternalSearch: (storage: StorageType) => boolean;
|
|
20
|
+
export declare const entityUsesElasticBootstrap: (storage: StorageType) => boolean;
|
|
21
|
+
export declare const entityUsesClickHouseBootstrap: (storage: StorageType) => boolean;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from './files';
|
|
2
|
-
export * from './
|
|
2
|
+
export * from './addExternalSearch';
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { Entity } from '../../../../builders';
|
|
2
|
+
export declare const genClickHouseJobsDataTmpl: (entities: Entity[], _options?: {
|
|
3
|
+
genPrismaServices: boolean;
|
|
4
|
+
genGraphSchema: boolean;
|
|
5
|
+
genGraphResolvers: boolean;
|
|
6
|
+
genUiResources: boolean;
|
|
7
|
+
skipWarningThisIsGenerated: boolean;
|
|
8
|
+
genPrismaSchema: boolean;
|
|
9
|
+
genContext: boolean;
|
|
10
|
+
typesOnly: boolean;
|
|
11
|
+
genRootConfig: boolean;
|
|
12
|
+
genRootElements: boolean;
|
|
13
|
+
genUiCountWidget: boolean;
|
|
14
|
+
genUiListWidget: boolean;
|
|
15
|
+
genUiAppBar: boolean;
|
|
16
|
+
genUiEntityMapping: boolean;
|
|
17
|
+
genUiMenu: boolean;
|
|
18
|
+
genUiElements: boolean;
|
|
19
|
+
genUiResourcesPage: boolean;
|
|
20
|
+
genUiRoutes: boolean;
|
|
21
|
+
genUIApp: boolean;
|
|
22
|
+
genUiFunctions: boolean;
|
|
23
|
+
genUiDashboard: boolean;
|
|
24
|
+
showMetaPage: boolean;
|
|
25
|
+
readOnly: boolean;
|
|
26
|
+
forms: {
|
|
27
|
+
list: {
|
|
28
|
+
gen: boolean;
|
|
29
|
+
};
|
|
30
|
+
show: {
|
|
31
|
+
gen: boolean;
|
|
32
|
+
};
|
|
33
|
+
edit: {
|
|
34
|
+
gen: boolean;
|
|
35
|
+
idEditable: boolean;
|
|
36
|
+
};
|
|
37
|
+
create: {
|
|
38
|
+
gen: boolean;
|
|
39
|
+
idEditable: boolean;
|
|
40
|
+
};
|
|
41
|
+
menu: {
|
|
42
|
+
show: boolean;
|
|
43
|
+
};
|
|
44
|
+
resourcesPage: {
|
|
45
|
+
show: boolean;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
projectsGroup: string;
|
|
49
|
+
projectPrefix: string;
|
|
50
|
+
dbName: string;
|
|
51
|
+
projectName: string;
|
|
52
|
+
k8sChartName: string;
|
|
53
|
+
k8sNamespacePrefix: string;
|
|
54
|
+
k8sAppsDomain: string;
|
|
55
|
+
k8sSubdomainPrefix: string;
|
|
56
|
+
k8sImagePullSecrets: string;
|
|
57
|
+
ciDockerRegistry: string;
|
|
58
|
+
telemetry: boolean;
|
|
59
|
+
useSortedFilter: boolean;
|
|
60
|
+
genBackGitlabCi: boolean;
|
|
61
|
+
genUiGitlabCi: boolean;
|
|
62
|
+
genBackCiNotify: boolean;
|
|
63
|
+
genUiCiNotify: boolean;
|
|
64
|
+
adminBaseDockerimage: string;
|
|
65
|
+
backendBaseDockerimage: string;
|
|
66
|
+
genBackChartValues: boolean;
|
|
67
|
+
genBackChartIngress: boolean;
|
|
68
|
+
genBackChartBack: boolean;
|
|
69
|
+
genUiChartIngress: boolean;
|
|
70
|
+
genUiChartFront: boolean;
|
|
71
|
+
ingressAnnotationBodySize: string;
|
|
72
|
+
mountebankEnabled: boolean;
|
|
73
|
+
exportHtmlEnabled: boolean;
|
|
74
|
+
corePrismaGetter: boolean;
|
|
75
|
+
coreIndex: boolean;
|
|
76
|
+
usersEnabled: boolean;
|
|
77
|
+
tenantsAvailable: boolean;
|
|
78
|
+
themesEnabled: boolean;
|
|
79
|
+
mainColorOfAppTitile: boolean;
|
|
80
|
+
sharding: boolean;
|
|
81
|
+
breadcrumb: boolean;
|
|
82
|
+
showFunctionsInMenu: boolean;
|
|
83
|
+
showResourcesInMenu: boolean;
|
|
84
|
+
showMetaInMenu: boolean;
|
|
85
|
+
genFrontend: boolean;
|
|
86
|
+
genDockerfileBack: boolean;
|
|
87
|
+
genDockerfileUI: boolean;
|
|
88
|
+
auditableOnlyByUser: boolean;
|
|
89
|
+
graphGeneratorCommand: string;
|
|
90
|
+
detachedBackProject: string;
|
|
91
|
+
detachedUiProject: string;
|
|
92
|
+
}) => string;
|
|
93
|
+
export declare const genClickHouseJobsTmpl: (entities: Entity[], options?: {
|
|
94
|
+
genPrismaServices: boolean;
|
|
95
|
+
genGraphSchema: boolean;
|
|
96
|
+
genGraphResolvers: boolean;
|
|
97
|
+
genUiResources: boolean;
|
|
98
|
+
skipWarningThisIsGenerated: boolean;
|
|
99
|
+
genPrismaSchema: boolean;
|
|
100
|
+
genContext: boolean;
|
|
101
|
+
typesOnly: boolean;
|
|
102
|
+
genRootConfig: boolean;
|
|
103
|
+
genRootElements: boolean;
|
|
104
|
+
genUiCountWidget: boolean;
|
|
105
|
+
genUiListWidget: boolean;
|
|
106
|
+
genUiAppBar: boolean;
|
|
107
|
+
genUiEntityMapping: boolean;
|
|
108
|
+
genUiMenu: boolean;
|
|
109
|
+
genUiElements: boolean;
|
|
110
|
+
genUiResourcesPage: boolean;
|
|
111
|
+
genUiRoutes: boolean;
|
|
112
|
+
genUIApp: boolean;
|
|
113
|
+
genUiFunctions: boolean;
|
|
114
|
+
genUiDashboard: boolean;
|
|
115
|
+
showMetaPage: boolean;
|
|
116
|
+
readOnly: boolean;
|
|
117
|
+
forms: {
|
|
118
|
+
list: {
|
|
119
|
+
gen: boolean;
|
|
120
|
+
};
|
|
121
|
+
show: {
|
|
122
|
+
gen: boolean;
|
|
123
|
+
};
|
|
124
|
+
edit: {
|
|
125
|
+
gen: boolean;
|
|
126
|
+
idEditable: boolean;
|
|
127
|
+
};
|
|
128
|
+
create: {
|
|
129
|
+
gen: boolean;
|
|
130
|
+
idEditable: boolean;
|
|
131
|
+
};
|
|
132
|
+
menu: {
|
|
133
|
+
show: boolean;
|
|
134
|
+
};
|
|
135
|
+
resourcesPage: {
|
|
136
|
+
show: boolean;
|
|
137
|
+
};
|
|
138
|
+
};
|
|
139
|
+
projectsGroup: string;
|
|
140
|
+
projectPrefix: string;
|
|
141
|
+
dbName: string;
|
|
142
|
+
projectName: string;
|
|
143
|
+
k8sChartName: string;
|
|
144
|
+
k8sNamespacePrefix: string;
|
|
145
|
+
k8sAppsDomain: string;
|
|
146
|
+
k8sSubdomainPrefix: string;
|
|
147
|
+
k8sImagePullSecrets: string;
|
|
148
|
+
ciDockerRegistry: string;
|
|
149
|
+
telemetry: boolean;
|
|
150
|
+
useSortedFilter: boolean;
|
|
151
|
+
genBackGitlabCi: boolean;
|
|
152
|
+
genUiGitlabCi: boolean;
|
|
153
|
+
genBackCiNotify: boolean;
|
|
154
|
+
genUiCiNotify: boolean;
|
|
155
|
+
adminBaseDockerimage: string;
|
|
156
|
+
backendBaseDockerimage: string;
|
|
157
|
+
genBackChartValues: boolean;
|
|
158
|
+
genBackChartIngress: boolean;
|
|
159
|
+
genBackChartBack: boolean;
|
|
160
|
+
genUiChartIngress: boolean;
|
|
161
|
+
genUiChartFront: boolean;
|
|
162
|
+
ingressAnnotationBodySize: string;
|
|
163
|
+
mountebankEnabled: boolean;
|
|
164
|
+
exportHtmlEnabled: boolean;
|
|
165
|
+
corePrismaGetter: boolean;
|
|
166
|
+
coreIndex: boolean;
|
|
167
|
+
usersEnabled: boolean;
|
|
168
|
+
tenantsAvailable: boolean;
|
|
169
|
+
themesEnabled: boolean;
|
|
170
|
+
mainColorOfAppTitile: boolean;
|
|
171
|
+
sharding: boolean;
|
|
172
|
+
breadcrumb: boolean;
|
|
173
|
+
showFunctionsInMenu: boolean;
|
|
174
|
+
showResourcesInMenu: boolean;
|
|
175
|
+
showMetaInMenu: boolean;
|
|
176
|
+
genFrontend: boolean;
|
|
177
|
+
genDockerfileBack: boolean;
|
|
178
|
+
genDockerfileUI: boolean;
|
|
179
|
+
auditableOnlyByUser: boolean;
|
|
180
|
+
graphGeneratorCommand: string;
|
|
181
|
+
detachedBackProject: string;
|
|
182
|
+
detachedUiProject: string;
|
|
183
|
+
}) => string;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const prismaGetterTmpl: (
|
|
1
|
+
import { ProjectWideGenerationArgs } from '../../../../../../args';
|
|
2
|
+
export declare const prismaGetterTmpl: (args: ProjectWideGenerationArgs) => string;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Entity } from '../../../builders';
|
|
2
2
|
import { LinkedEntities } from '../../../types';
|
|
3
|
-
export declare const genPrismaEntity: (entity: Entity, links: LinkedEntities[], forShards?: boolean) => string;
|
|
3
|
+
export declare const genPrismaEntity: (entity: Entity, links: LinkedEntities[], forShards?: boolean, allEntities?: Map<string, Entity>) => string;
|
package/build/types/projectsGeneration/generators/prisma/scheme/genPrismaSchemaForEntities.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Entity } from '../../../builders';
|
|
2
2
|
import { LinkedEntities } from '../../../types';
|
|
3
|
-
export declare const genPrismaSchemaForEntities: (entities: Entity[], links: LinkedEntities[], forShards?: boolean) => string;
|
|
3
|
+
export declare const genPrismaSchemaForEntities: (entities: Entity[], links: LinkedEntities[], forShards?: boolean, allEntities?: Map<string, Entity>) => string;
|
|
@@ -1,2 +1,13 @@
|
|
|
1
1
|
import { ProjectWideGenerationArgs } from '../../../args';
|
|
2
|
-
export
|
|
2
|
+
export type GenPrismaSchemaDbOptions = {
|
|
3
|
+
/** Logical database key; `main` uses legacy paths and split by sharding. */
|
|
4
|
+
database: string;
|
|
5
|
+
/**
|
|
6
|
+
* When `database === 'main'`, same as today: shard vs non-shard models.
|
|
7
|
+
* For `database !== 'main'`, callers must pass `false` (sharding ignored).
|
|
8
|
+
*/
|
|
9
|
+
forShards: boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare const genPrismaSchemaForEntitiesWithClientAdnDb: (args: ProjectWideGenerationArgs, opts: GenPrismaSchemaDbOptions) => string;
|
|
12
|
+
/** Minimal deploy schema (migrate URL only). */
|
|
13
|
+
export declare const genDeployConnectionPrisma: (database: string) => string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ConfigVar } from '../builders/buildedTypes';
|
|
2
|
+
export declare const postgresUrlDatabaseName: (metaDbName: string) => string;
|
|
3
|
+
export declare const validateEntityDatabaseName: (name: string) => void;
|
|
4
|
+
/** Config vars for a non-main database (mirrors database.main.* in SystemMetaBuilder). */
|
|
5
|
+
export declare const buildConfigVarsForAdditionalDatabase: (dbName: string) => ConfigVar[];
|
|
6
|
+
export declare const databaseNameToEnvSuffix: (dbName: string) => string;
|
|
7
|
+
export declare const prismaDatasourceWriteEnvVar: (database: string) => string;
|
|
8
|
+
export declare const prismaDatasourceMigrationEnvVar: (database: string) => string;
|
package/package.json
CHANGED