runlify 0.0.782 → 0.0.786

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.
Files changed (51) hide show
  1. package/build/index.js +4 -2
  2. package/build/projectsGeneration/builders/BaseSavableEntityBuilder.js +17 -13
  3. package/build/projectsGeneration/builders/SystemMetaBuilder.js +27 -3
  4. package/build/projectsGeneration/builders/buildedTypes.js +1 -1
  5. package/build/projectsGeneration/builders/storage.js +60 -0
  6. package/build/projectsGeneration/commonEntities/addCommonCommands.js +22 -4
  7. package/build/projectsGeneration/defaultCatalogs/{addElasticSearch.js → addExternalSearch.js} +5 -5
  8. package/build/projectsGeneration/defaultCatalogs/index.js +2 -2
  9. package/build/projectsGeneration/generateProject/back/generateBack.js +3 -1
  10. package/build/projectsGeneration/generateProject/back/src/services/generateBackEntityService.js +2 -2
  11. package/build/projectsGeneration/generateProject/generateBackClickHouseBootstrap.js +16 -0
  12. package/build/projectsGeneration/generateProject/generateBackElasticBootstrap.js +3 -2
  13. package/build/projectsGeneration/generateProject/generateEnvironment.js +33 -16
  14. package/build/projectsGeneration/generators/fileTemplates/back/clickhouse/jobs.js +94 -0
  15. package/build/projectsGeneration/generators/fileTemplates/back/elastic/jobs.js +15 -3
  16. package/build/projectsGeneration/generators/fileTemplates/back/environment/src/clients/createPgPrismaClient.js +43 -0
  17. package/build/projectsGeneration/generators/fileTemplates/back/environment/src/clients/getPrisma.js +139 -20
  18. package/build/projectsGeneration/generators/fileTemplates/back/environment/src/init/prisma/writeClientPackageStubs.js +39 -0
  19. package/build/projectsGeneration/generators/fileTemplates/back/services/entity/class.js +31 -20
  20. package/build/projectsGeneration/generators/fileTemplates/back/services/entity/config.js +9 -2
  21. package/build/projectsGeneration/generators/prisma/scheme/genPrismaConfig.js +34 -0
  22. package/build/projectsGeneration/generators/prisma/scheme/genPrismaConfig.spec.js +28 -0
  23. package/build/projectsGeneration/generators/prisma/scheme/genPrismaSchemaForEntitiesWithClientAdnDb.js +29 -12
  24. package/build/projectsGeneration/generators/prisma/scheme/genPrismaSchemaForEntitiesWithClientAdnDb.spec.js +99 -0
  25. package/build/projectsGeneration/utils/buildPrismaCommands.js +80 -0
  26. package/build/projectsGeneration/utils/buildPrismaCommands.spec.js +58 -0
  27. package/build/projectsGeneration/utils/detectPrismaMajorVersion.js +62 -0
  28. package/build/projectsGeneration/utils/detectPrismaMajorVersion.spec.js +51 -0
  29. package/build/types/index.d.ts +1 -0
  30. package/build/types/projectsGeneration/builders/BaseSavableEntityBuilder.d.ts +4 -4
  31. package/build/types/projectsGeneration/builders/SystemMetaBuilder.d.ts +4 -1
  32. package/build/types/projectsGeneration/builders/buildedTypes.d.ts +2 -2
  33. package/build/types/projectsGeneration/builders/storage.d.ts +21 -0
  34. package/build/types/projectsGeneration/defaultCatalogs/addExternalSearch.d.ts +2 -0
  35. package/build/types/projectsGeneration/defaultCatalogs/index.d.ts +1 -1
  36. package/build/types/projectsGeneration/generateProject/generateBackClickHouseBootstrap.d.ts +3 -0
  37. package/build/types/projectsGeneration/generators/fileTemplates/back/clickhouse/jobs.d.ts +183 -0
  38. package/build/types/projectsGeneration/generators/fileTemplates/back/environment/src/clients/createPgPrismaClient.d.ts +1 -0
  39. package/build/types/projectsGeneration/generators/fileTemplates/back/environment/src/clients/getPrisma.d.ts +1 -1
  40. package/build/types/projectsGeneration/generators/fileTemplates/back/environment/src/init/prisma/writeClientPackageStubs.d.ts +2 -0
  41. package/build/types/projectsGeneration/generators/fileTemplates/back/services/entity/class.d.ts +1 -1
  42. package/build/types/projectsGeneration/generators/prisma/scheme/genPrismaConfig.d.ts +13 -0
  43. package/build/types/projectsGeneration/generators/prisma/scheme/genPrismaConfig.spec.d.ts +1 -0
  44. package/build/types/projectsGeneration/generators/prisma/scheme/genPrismaSchemaForEntitiesWithClientAdnDb.d.ts +3 -1
  45. package/build/types/projectsGeneration/generators/prisma/scheme/genPrismaSchemaForEntitiesWithClientAdnDb.spec.d.ts +1 -0
  46. package/build/types/projectsGeneration/utils/buildPrismaCommands.d.ts +11 -0
  47. package/build/types/projectsGeneration/utils/buildPrismaCommands.spec.d.ts +1 -0
  48. package/build/types/projectsGeneration/utils/detectPrismaMajorVersion.d.ts +2 -0
  49. package/build/types/projectsGeneration/utils/detectPrismaMajorVersion.spec.d.ts +1 -0
  50. package/package.json +9 -1
  51. package/build/types/projectsGeneration/defaultCatalogs/addElasticSearch.d.ts +0 -2
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const jest_without_globals_1 = require("jest-without-globals");
7
+ const CatalogBuilder_1 = __importDefault(require("../../../builders/CatalogBuilder"));
8
+ const genPrismaSchemaForEntitiesWithClientAdnDb_1 = require("./genPrismaSchemaForEntitiesWithClientAdnDb");
9
+ const types_1 = require("../../../types");
10
+ const minimalArgs = (entities) => ({
11
+ system: {
12
+ name: 'test',
13
+ prefix: 'test',
14
+ dataBases: [{ name: 'main' }, { name: 'bsDocuments' }],
15
+ commands: [],
16
+ configVars: [],
17
+ catalogs: [],
18
+ documents: [],
19
+ infoRegistries: [],
20
+ sumRegistries: [],
21
+ languages: [],
22
+ defaultLanguage: 'ru',
23
+ deployEnvironments: [],
24
+ glossary: [],
25
+ telegramBots: [],
26
+ reports: [],
27
+ restApis: [],
28
+ integrationClients: [],
29
+ workers: [],
30
+ roles: [],
31
+ menuItems: [],
32
+ pages: [],
33
+ additionalServices: [],
34
+ labels: [],
35
+ generalModels: [],
36
+ inputModels: [],
37
+ outputModels: [],
38
+ methods: [],
39
+ back: {},
40
+ },
41
+ entities,
42
+ allEntities: new Map(entities.map((e) => [e.name, e])),
43
+ allSumRegistries: new Map(),
44
+ allInfoRegistries: new Map(),
45
+ allDocuments: new Map(),
46
+ allCatalogs: new Map(),
47
+ allLinks: [],
48
+ additionalServices: [],
49
+ options: types_1.defaultBootstrapEntityOptions,
50
+ });
51
+ describe('genPrismaSchemaForEntitiesWithClientAdnDb', () => {
52
+ const cards = new CatalogBuilder_1.default('cards', 'ru');
53
+ cards.addField('name').setType('string').setRequired();
54
+ const cardEntity = cards.build();
55
+ it('legacy main schema uses prisma-client-js and datasource url', () => {
56
+ const result = (0, genPrismaSchemaForEntitiesWithClientAdnDb_1.genPrismaSchemaForEntitiesWithClientAdnDb)(minimalArgs([cardEntity]), {
57
+ database: 'main',
58
+ forShards: false,
59
+ prismaMajor: 6,
60
+ });
61
+ (0, jest_without_globals_1.expect)(result).toContain('provider = "prisma-client-js"');
62
+ (0, jest_without_globals_1.expect)(result).toContain('previewFeatures = ["metrics"]');
63
+ (0, jest_without_globals_1.expect)(result).toContain('url = env("DATABASE_MAIN_WRITE_URI")');
64
+ (0, jest_without_globals_1.expect)(result).not.toContain('output = "./generated/client"');
65
+ });
66
+ it('P7 main schema uses prisma-client and generated output', () => {
67
+ const result = (0, genPrismaSchemaForEntitiesWithClientAdnDb_1.genPrismaSchemaForEntitiesWithClientAdnDb)(minimalArgs([cardEntity]), {
68
+ database: 'main',
69
+ forShards: false,
70
+ prismaMajor: 7,
71
+ });
72
+ (0, jest_without_globals_1.expect)(result).toContain('provider = "prisma-client"');
73
+ (0, jest_without_globals_1.expect)(result).not.toContain('previewFeatures');
74
+ (0, jest_without_globals_1.expect)(result).not.toContain('url = env(');
75
+ (0, jest_without_globals_1.expect)(result).toContain('output = "./generated/client"');
76
+ });
77
+ it('P7 extra DB schema uses ./client output', () => {
78
+ const docEntity = Object.assign(Object.assign({}, cardEntity), { database: 'bsDocuments' });
79
+ const result = (0, genPrismaSchemaForEntitiesWithClientAdnDb_1.genPrismaSchemaForEntitiesWithClientAdnDb)(minimalArgs([docEntity]), {
80
+ database: 'bsDocuments',
81
+ forShards: false,
82
+ prismaMajor: 7,
83
+ });
84
+ (0, jest_without_globals_1.expect)(result).toContain('output = "./client"');
85
+ });
86
+ it('legacy deploy schema includes generator', () => {
87
+ const result = (0, genPrismaSchemaForEntitiesWithClientAdnDb_1.genDeployConnectionPrisma)('main', 6);
88
+ (0, jest_without_globals_1.expect)(result).toContain('generator client');
89
+ (0, jest_without_globals_1.expect)(result).toContain('url = env("DATABASE_MAIN_MIGRATION_URI")');
90
+ });
91
+ it('P7 deploy schema is datasource-only', () => {
92
+ const result = (0, genPrismaSchemaForEntitiesWithClientAdnDb_1.genDeployConnectionPrisma)('main', 7);
93
+ (0, jest_without_globals_1.expect)(result).toBe(`datasource db {
94
+ provider = "postgresql"
95
+ }
96
+ `);
97
+ });
98
+ });
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuUHJpc21hU2NoZW1hRm9yRW50aXRpZXNXaXRoQ2xpZW50QWRuRGIuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm9qZWN0c0dlbmVyYXRpb24vZ2VuZXJhdG9ycy9wcmlzbWEvc2NoZW1lL2dlblByaXNtYVNjaGVtYUZvckVudGl0aWVzV2l0aENsaWVudEFkbkRiLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrREFBMkM7QUFDM0Msc0ZBQTZEO0FBQzdELDJHQUdvRDtBQUVwRCwwQ0FBNEQ7QUFHNUQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxRQUErQyxFQUE2QixFQUFFLENBQUMsQ0FBQztJQUNuRyxNQUFNLEVBQUU7UUFDTixJQUFJLEVBQUUsTUFBTTtRQUNaLE1BQU0sRUFBRSxNQUFNO1FBQ2QsU0FBUyxFQUFFLENBQUMsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsYUFBYSxFQUFDLENBQUM7UUFDbEQsUUFBUSxFQUFFLEVBQUU7UUFDWixVQUFVLEVBQUUsRUFBRTtRQUNkLFFBQVEsRUFBRSxFQUFFO1FBQ1osU0FBUyxFQUFFLEVBQUU7UUFDYixjQUFjLEVBQUUsRUFBRTtRQUNsQixhQUFhLEVBQUUsRUFBRTtRQUNqQixTQUFTLEVBQUUsRUFBRTtRQUNiLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLGtCQUFrQixFQUFFLEVBQUU7UUFDdEIsUUFBUSxFQUFFLEVBQUU7UUFDWixZQUFZLEVBQUUsRUFBRTtRQUNoQixPQUFPLEVBQUUsRUFBRTtRQUNYLFFBQVEsRUFBRSxFQUFFO1FBQ1osa0JBQWtCLEVBQUUsRUFBRTtRQUN0QixPQUFPLEVBQUUsRUFBRTtRQUNYLEtBQUssRUFBRSxFQUFFO1FBQ1QsU0FBUyxFQUFFLEVBQUU7UUFDYixLQUFLLEVBQUUsRUFBRTtRQUNULGtCQUFrQixFQUFFLEVBQUU7UUFDdEIsTUFBTSxFQUFFLEVBQUU7UUFD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
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildMigrationsListCommand = exports.buildPrismaDeployCommand = exports.buildShardsNewMigrationCommand = exports.buildPrismaNewMigrationCommand = exports.buildShardsGenCommand = exports.buildPrismaGenCommand = void 0;
4
+ const joinSteps = (steps) => steps.join(' && ');
5
+ const extraDatabases = (databaseNames) => databaseNames.filter((d) => d !== 'main');
6
+ const buildPrismaGenCommand = ({ databaseNames, sharding, prismaMajor, }) => {
7
+ const extras = extraDatabases(databaseNames);
8
+ if (prismaMajor >= 7) {
9
+ const steps = [
10
+ 'prisma generate --config prisma/prisma.config.ts',
11
+ ...extras.map((db) => `prisma generate --config prisma/databases/${db}/prisma.config.ts`),
12
+ 'tsx src/init/prisma/writeClientPackageStubs.ts',
13
+ ];
14
+ return joinSteps(steps);
15
+ }
16
+ return joinSteps([
17
+ 'prisma generate --schema prisma/schema.prisma',
18
+ ...extras.map((db) => `prisma generate --schema prisma/databases/${db}/schema.prisma`),
19
+ ]);
20
+ };
21
+ exports.buildPrismaGenCommand = buildPrismaGenCommand;
22
+ const buildShardsGenCommand = ({ sharding, prismaMajor, }) => {
23
+ if (!sharding) {
24
+ return null;
25
+ }
26
+ if (prismaMajor >= 7) {
27
+ return joinSteps([
28
+ 'prisma generate --config prisma/shards/prisma.config.ts',
29
+ 'tsx src/init/prisma/writeClientPackageStubs.ts --shards-only',
30
+ ]);
31
+ }
32
+ return 'prisma generate --schema prisma/shards/schema.prisma';
33
+ };
34
+ exports.buildShardsGenCommand = buildShardsGenCommand;
35
+ const buildPrismaNewMigrationCommand = ({ databaseNames, prismaMajor, }) => {
36
+ const extras = extraDatabases(databaseNames);
37
+ const migratePrefix = 'runlify start env=local prisma migrate dev';
38
+ if (prismaMajor >= 7) {
39
+ return joinSteps([
40
+ `${migratePrefix} --config prisma/prisma.config.ts`,
41
+ ...extras.map((db) => `${migratePrefix} --config prisma/databases/${db}/prisma.config.ts`),
42
+ ]);
43
+ }
44
+ return joinSteps([
45
+ `${migratePrefix} --schema=prisma/schema.prisma --preview-feature`,
46
+ ...extras.map((db) => `${migratePrefix} --schema=prisma/databases/${db}/schema.prisma --preview-feature`),
47
+ ]);
48
+ };
49
+ exports.buildPrismaNewMigrationCommand = buildPrismaNewMigrationCommand;
50
+ const buildShardsNewMigrationCommand = ({ sharding, prismaMajor, }) => {
51
+ if (!sharding) {
52
+ return null;
53
+ }
54
+ const migratePrefix = 'runlify start env=local prisma migrate dev';
55
+ if (prismaMajor >= 7) {
56
+ return `${migratePrefix} --config prisma/shards/prisma.config.ts`;
57
+ }
58
+ return `${migratePrefix} --schema=prisma/shards/schema.prisma --preview-feature`;
59
+ };
60
+ exports.buildShardsNewMigrationCommand = buildShardsNewMigrationCommand;
61
+ const buildPrismaDeployCommand = ({ databaseNames, prismaMajor, }) => {
62
+ const extras = extraDatabases(databaseNames);
63
+ const deployPrefix = 'runlify start env=local prisma migrate deploy';
64
+ if (prismaMajor >= 7) {
65
+ return joinSteps([
66
+ `${deployPrefix} --config prisma/deploy.prisma.config.ts`,
67
+ ...extras.map((db) => `${deployPrefix} --config prisma/databases/${db}/deploy.prisma.config.ts`),
68
+ ]);
69
+ }
70
+ return joinSteps([
71
+ `${deployPrefix} --schema=prisma/deployConnection.prisma`,
72
+ ...extras.map((db) => `${deployPrefix} --schema=prisma/databases/${db}/deployConnection.prisma`),
73
+ ]);
74
+ };
75
+ exports.buildPrismaDeployCommand = buildPrismaDeployCommand;
76
+ const buildMigrationsListCommand = ({ prismaMajor }) => prismaMajor >= 7
77
+ ? 'prisma migrate status --config prisma/deploy.prisma.config.ts'
78
+ : 'prisma migrate status --schema prisma/deployConnection.prisma';
79
+ exports.buildMigrationsListCommand = buildMigrationsListCommand;
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRQcmlzbWFDb21tYW5kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wcm9qZWN0c0dlbmVyYXRpb24vdXRpbHMvYnVpbGRQcmlzbWFDb21tYW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSxNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQWUsRUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUVqRSxNQUFNLGNBQWMsR0FBRyxDQUFDLGFBQXVCLEVBQVksRUFBRSxDQUMzRCxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUE7QUFFcEMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEVBQ3BDLGFBQWEsRUFDYixRQUFRLEVBQ1IsV0FBVyxHQUNnQixFQUFVLEVBQUU7SUFDdkMsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBRTVDLElBQUksV0FBVyxJQUFJLENBQUMsRUFBRTtRQUNwQixNQUFNLEtBQUssR0FBRztZQUNaLGtEQUFrRDtZQUNsRCxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQ1gsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLG1CQUFtQixDQUMzRTtZQUNELGdEQUFnRDtTQUNqRCxDQUFBO1FBQ0QsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUE7S0FDeEI7SUFFRCxPQUFPLFNBQVMsQ0FBQztRQUNmLCtDQUErQztRQUMvQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQ1gsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLGdCQUFnQixDQUN4RTtLQUNGLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQXhCWSxRQUFBLHFCQUFxQix5QkF3QmpDO0FBRU0sTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEVBQ3BDLFFBQVEsRUFDUixXQUFXLEdBQ2dCLEVBQWlCLEVBQUU7SUFDOUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNiLE9BQU8sSUFBSSxDQUFBO0tBQ1o7SUFFRCxJQUFJLFdBQVcsSUFBSSxDQUFDLEVBQUU7UUFDcEIsT0FBTyxTQUFTLENBQUM7WUFDZix5REFBeUQ7WUFDekQsOERBQThEO1NBQy9ELENBQUMsQ0FBQTtLQUNIO0lBRUQsT0FBTyxzREFBc0QsQ0FBQTtBQUMvRCxDQUFDLENBQUE7QUFoQlksUUFBQSxxQkFBcUIseUJBZ0JqQztBQUVNLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxFQUM3QyxhQUFhLEVBQ2IsV0FBVyxHQUNnQixFQUFVLEVBQUU7SUFDdkMsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQzVDLE1BQU0sYUFBYSxHQUFHLDRDQUE0QyxDQUFBO0lBRWxFLElBQUksV0FBVyxJQUFJLENBQUMsRUFBRTtRQUNwQixPQUFPLFNBQVMsQ0FBQztZQUNmLEdBQUcsYUFBYSxtQ0FBbUM7WUFDbkQsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUNYLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLGFBQWEsOEJBQThCLEVBQUUsbUJBQW1CLENBQzVFO1NBQ0YsQ0FBQyxDQUFBO0tBQ0g7SUFFRCxPQUFPLFNBQVMsQ0FBQztRQUNmLEdBQUcsYUFBYSxrREFBa0Q7UUFDbEUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUNYLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FDTCxHQUFHLGFBQWEsOEJBQThCLEVBQUUsa0NBQWtDLENBQ3JGO0tBQ0YsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBdkJZLFFBQUEsOEJBQThCLGtDQXVCMUM7QUFFTSxNQUFNLDhCQUE4QixHQUFHLENBQUMsRUFDN0MsUUFBUSxFQUNSLFdBQVcsR0FDZ0IsRUFBaUIsRUFBRTtJQUM5QyxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ2IsT0FBTyxJQUFJLENBQUE7S0FDWjtJQUVELE1BQU0sYUFBYSxHQUFHLDRDQUE0QyxDQUFBO0lBRWxFLElBQUksV0FBVyxJQUFJLENBQUMsRUFBRTtRQUNwQixPQUFPLEdBQUcsYUFBYSwwQ0FBMEMsQ0FBQTtLQUNsRTtJQUVELE9BQU8sR0FBRyxhQUFhLHlEQUF5RCxDQUFBO0FBQ2xGLENBQUMsQ0FBQTtBQWZZLFFBQUEsOEJBQThCLGtDQWUxQztBQUVNLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxFQUN2QyxhQUFhLEVBQ2IsV0FBVyxHQUNnQixFQUFVLEVBQUU7SUFDdkMsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQzVDLE1BQU0sWUFBWSxHQUFHLCtDQUErQyxDQUFBO0lBRXBFLElBQUksV0FBVyxJQUFJLENBQUMsRUFBRTtRQUNwQixPQUFPLFNBQVMsQ0FBQztZQUNmLEdBQUcsWUFBWSwwQ0FBMEM7WUFDekQsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUNYLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLFlBQVksOEJBQThCLEVBQUUsMEJBQTBCLENBQ2xGO1NBQ0YsQ0FBQyxDQUFBO0tBQ0g7SUFFRCxPQUFPLFNBQVMsQ0FBQztRQUNmLEdBQUcsWUFBWSwwQ0FBMEM7UUFDekQsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUNYLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLFlBQVksOEJBQThCLEVBQUUsMEJBQTBCLENBQ2xGO0tBQ0YsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBdEJZLFFBQUEsd0JBQXdCLDRCQXNCcEM7QUFFTSxNQUFNLDBCQUEwQixHQUFHLENBQUMsRUFBQyxXQUFXLEVBQTZCLEVBQVUsRUFBRSxDQUM5RixXQUFXLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQywrREFBK0Q7SUFDakUsQ0FBQyxDQUFDLCtEQUErRCxDQUFBO0FBSHhELFFBQUEsMEJBQTBCLDhCQUc4QiJ9
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const buildPrismaCommands_1 = require("./buildPrismaCommands");
4
+ describe('buildPrismaCommands', () => {
5
+ it('builds legacy P6 prisma:gen with per-db schemas', () => {
6
+ const cmd = (0, buildPrismaCommands_1.buildPrismaGenCommand)({
7
+ databaseNames: ['main', 'bsDocuments'],
8
+ sharding: false,
9
+ prismaMajor: 6,
10
+ });
11
+ expect(cmd).toBe('prisma generate --schema prisma/schema.prisma && prisma generate --schema prisma/databases/bsDocuments/schema.prisma');
12
+ });
13
+ it('builds P7 prisma:gen with configs and stubs', () => {
14
+ const cmd = (0, buildPrismaCommands_1.buildPrismaGenCommand)({
15
+ databaseNames: ['main', 'bsDocuments'],
16
+ sharding: false,
17
+ prismaMajor: 7,
18
+ });
19
+ expect(cmd).toContain('prisma generate --config prisma/prisma.config.ts');
20
+ expect(cmd).toContain('prisma/databases/bsDocuments/prisma.config.ts');
21
+ expect(cmd).toContain('tsx src/init/prisma/writeClientPackageStubs.ts');
22
+ });
23
+ it('builds legacy shards:gen', () => {
24
+ const cmd = (0, buildPrismaCommands_1.buildShardsGenCommand)({
25
+ databaseNames: ['main'],
26
+ sharding: true,
27
+ prismaMajor: 6,
28
+ });
29
+ expect(cmd).toBe('prisma generate --schema prisma/shards/schema.prisma');
30
+ });
31
+ it('builds P7 shards:gen', () => {
32
+ const cmd = (0, buildPrismaCommands_1.buildShardsGenCommand)({
33
+ databaseNames: ['main'],
34
+ sharding: true,
35
+ prismaMajor: 7,
36
+ });
37
+ expect(cmd).toContain('prisma/shards/prisma.config.ts');
38
+ expect(cmd).toContain('--shards-only');
39
+ });
40
+ it('builds legacy prisma:deploy chain', () => {
41
+ const cmd = (0, buildPrismaCommands_1.buildPrismaDeployCommand)({
42
+ databaseNames: ['main', 'bsDocuments'],
43
+ sharding: false,
44
+ prismaMajor: 6,
45
+ });
46
+ expect(cmd).toContain('--schema=prisma/deployConnection.prisma');
47
+ expect(cmd).toContain('prisma/databases/bsDocuments/deployConnection.prisma');
48
+ });
49
+ it('builds migrations:list for P7', () => {
50
+ const cmd = (0, buildPrismaCommands_1.buildMigrationsListCommand)({
51
+ databaseNames: ['main'],
52
+ sharding: false,
53
+ prismaMajor: 7,
54
+ });
55
+ expect(cmd).toBe('prisma migrate status --config prisma/deploy.prisma.config.ts');
56
+ });
57
+ });
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRQcmlzbWFDb21tYW5kcy5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb2plY3RzR2VuZXJhdGlvbi91dGlscy9idWlsZFByaXNtYUNvbW1hbmRzLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwrREFLOEI7QUFFOUIsUUFBUSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtJQUNuQyxFQUFFLENBQUMsaURBQWlELEVBQUUsR0FBRyxFQUFFO1FBQ3pELE1BQU0sR0FBRyxHQUFHLElBQUEsMkNBQXFCLEVBQUM7WUFDaEMsYUFBYSxFQUFFLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQztZQUN0QyxRQUFRLEVBQUUsS0FBSztZQUNmLFdBQVcsRUFBRSxDQUFDO1NBQ2YsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDZCxzSEFBc0gsQ0FDdkgsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtRQUNyRCxNQUFNLEdBQUcsR0FBRyxJQUFBLDJDQUFxQixFQUFDO1lBQ2hDLGFBQWEsRUFBRSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUM7WUFDdEMsUUFBUSxFQUFFLEtBQUs7WUFDZixXQUFXLEVBQUUsQ0FBQztTQUNmLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsa0RBQWtELENBQUMsQ0FBQTtRQUN6RSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLCtDQUErQyxDQUFDLENBQUE7UUFDdEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFBO0lBQ3pFLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRTtRQUNsQyxNQUFNLEdBQUcsR0FBRyxJQUFBLDJDQUFxQixFQUFDO1lBQ2hDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUN2QixRQUFRLEVBQUUsSUFBSTtZQUNkLFdBQVcsRUFBRSxDQUFDO1NBQ2YsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxzREFBc0QsQ0FBQyxDQUFBO0lBQzFFLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtRQUM5QixNQUFNLEdBQUcsR0FBRyxJQUFBLDJDQUFxQixFQUFDO1lBQ2hDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUN2QixRQUFRLEVBQUUsSUFBSTtZQUNkLFdBQVcsRUFBRSxDQUFDO1NBQ2YsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFBO1FBQ3ZELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDeEMsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxFQUFFO1FBQzNDLE1BQU0sR0FBRyxHQUFHLElBQUEsOENBQXdCLEVBQUM7WUFDbkMsYUFBYSxFQUFFLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQztZQUN0QyxRQUFRLEVBQUUsS0FBSztZQUNmLFdBQVcsRUFBRSxDQUFDO1NBQ2YsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFBO1FBQ2hFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsc0RBQXNELENBQUMsQ0FBQTtJQUMvRSxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7UUFDdkMsTUFBTSxHQUFHLEdBQUcsSUFBQSxnREFBMEIsRUFBQztZQUNyQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDdkIsUUFBUSxFQUFFLEtBQUs7WUFDZixXQUFXLEVBQUUsQ0FBQztTQUNmLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsK0RBQStELENBQUMsQ0FBQTtJQUNuRixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIn0=
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isPrisma7OrLater = exports.detectPrismaMajorVersion = void 0;
7
+ const fs_1 = require("fs");
8
+ const path_1 = require("path");
9
+ const log_1 = __importDefault(require("../../log"));
10
+ const parseMajor = (version) => {
11
+ const match = /^(\d+)/u.exec(version.trim());
12
+ return match ? Number.parseInt(match[1], 10) : null;
13
+ };
14
+ const readPackageJson = (projectRoot) => {
15
+ try {
16
+ const raw = (0, fs_1.readFileSync)((0, path_1.join)(projectRoot, 'package.json'), 'utf8');
17
+ return JSON.parse(raw);
18
+ }
19
+ catch (_a) {
20
+ return null;
21
+ }
22
+ };
23
+ const getDepVersion = (pkg, name) => {
24
+ for (const section of ['dependencies', 'devDependencies']) {
25
+ const deps = pkg[section];
26
+ const version = deps === null || deps === void 0 ? void 0 : deps[name];
27
+ if (version) {
28
+ return version.replace(/^[\^~>=<]+/u, '');
29
+ }
30
+ }
31
+ return undefined;
32
+ };
33
+ const detectPrismaMajorVersion = (projectRoot) => {
34
+ const pkg = readPackageJson(projectRoot);
35
+ if (!pkg) {
36
+ log_1.default.warn('detectPrismaMajorVersion: package.json not found, using legacy Prisma mode');
37
+ return 6;
38
+ }
39
+ const cliVersion = getDepVersion(pkg, 'prisma');
40
+ const clientVersion = getDepVersion(pkg, '@prisma/client');
41
+ if (!cliVersion && !clientVersion) {
42
+ log_1.default.warn('detectPrismaMajorVersion: neither prisma nor @prisma/client found in package.json, using legacy Prisma mode');
43
+ return 6;
44
+ }
45
+ const cliMajor = cliVersion ? parseMajor(cliVersion) : null;
46
+ const clientMajor = clientVersion ? parseMajor(clientVersion) : null;
47
+ if (cliMajor !== null && clientMajor !== null && cliMajor !== clientMajor) {
48
+ log_1.default.warn(`detectPrismaMajorVersion: prisma (${cliVersion}) and @prisma/client (${clientVersion}) differ in major version; using prisma CLI major ${cliMajor}`);
49
+ }
50
+ if (cliMajor !== null) {
51
+ return cliMajor;
52
+ }
53
+ if (clientMajor !== null) {
54
+ return clientMajor;
55
+ }
56
+ log_1.default.warn('detectPrismaMajorVersion: could not parse Prisma version, using legacy Prisma mode');
57
+ return 6;
58
+ };
59
+ exports.detectPrismaMajorVersion = detectPrismaMajorVersion;
60
+ const isPrisma7OrLater = (projectRoot) => (0, exports.detectPrismaMajorVersion)(projectRoot) >= 7;
61
+ exports.isPrisma7OrLater = isPrisma7OrLater;
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0UHJpc21hTWFqb3JWZXJzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb2plY3RzR2VuZXJhdGlvbi91dGlscy9kZXRlY3RQcmlzbWFNYWpvclZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMkJBQStCO0FBQy9CLCtCQUF5QjtBQUN6QixvREFBMkI7QUFFM0IsTUFBTSxVQUFVLEdBQUcsQ0FBQyxPQUFlLEVBQWlCLEVBQUU7SUFDcEQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUM1QyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUNyRCxDQUFDLENBQUE7QUFFRCxNQUFNLGVBQWUsR0FBRyxDQUFDLFdBQW1CLEVBQWtDLEVBQUU7SUFDOUUsSUFBSTtRQUNGLE1BQU0sR0FBRyxHQUFHLElBQUEsaUJBQVksRUFBQyxJQUFBLFdBQUksRUFBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDbkUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBNEIsQ0FBQTtLQUNsRDtJQUFDLFdBQU07UUFDTixPQUFPLElBQUksQ0FBQTtLQUNaO0FBQ0gsQ0FBQyxDQUFBO0FBRUQsTUFBTSxhQUFhLEdBQUcsQ0FDcEIsR0FBNEIsRUFDNUIsSUFBWSxFQUNRLEVBQUU7SUFDdEIsS0FBSyxNQUFNLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBVSxFQUFFO1FBQ2xFLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQXVDLENBQUE7UUFDL0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFHLElBQUksQ0FBQyxDQUFBO1FBQzVCLElBQUksT0FBTyxFQUFFO1lBQ1gsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQTtTQUMxQztLQUNGO0lBQ0QsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQyxDQUFBO0FBRU0sTUFBTSx3QkFBd0IsR0FBRyxDQUFDLFdBQW1CLEVBQVUsRUFBRTtJQUN0RSxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDeEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNSLGFBQUcsQ0FBQyxJQUFJLENBQUMsNEVBQTRFLENBQUMsQ0FBQTtRQUN0RixPQUFPLENBQUMsQ0FBQTtLQUNUO0lBRUQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUMvQyxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQUE7SUFFMUQsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLGFBQWEsRUFBRTtRQUNqQyxhQUFHLENBQUMsSUFBSSxDQUNOLDZHQUE2RyxDQUM5RyxDQUFBO1FBQ0QsT0FBTyxDQUFDLENBQUE7S0FDVDtJQUVELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDM0QsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUVwRSxJQUFJLFFBQVEsS0FBSyxJQUFJLElBQUksV0FBVyxLQUFLLElBQUksSUFBSSxRQUFRLEtBQUssV0FBVyxFQUFFO1FBQ3pFLGFBQUcsQ0FBQyxJQUFJLENBQ04scUNBQXFDLFVBQVUseUJBQXlCLGFBQWEscURBQXFELFFBQVEsRUFBRSxDQUNySixDQUFBO0tBQ0Y7SUFFRCxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7UUFDckIsT0FBTyxRQUFRLENBQUE7S0FDaEI7SUFFRCxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7UUFDeEIsT0FBTyxXQUFXLENBQUE7S0FDbkI7SUFFRCxhQUFHLENBQUMsSUFBSSxDQUFDLG9GQUFvRixDQUFDLENBQUE7SUFDOUYsT0FBTyxDQUFDLENBQUE7QUFDVixDQUFDLENBQUE7QUFwQ1ksUUFBQSx3QkFBd0IsNEJBb0NwQztBQUVNLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxXQUFtQixFQUFXLEVBQUUsQ0FDL0QsSUFBQSxnQ0FBd0IsRUFBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7QUFEL0IsUUFBQSxnQkFBZ0Isb0JBQ2UifQ==
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const fs_1 = require("fs");
4
+ const path_1 = require("path");
5
+ const os_1 = require("os");
6
+ const fs_jetpack_1 = require("fs-jetpack");
7
+ const detectPrismaMajorVersion_1 = require("./detectPrismaMajorVersion");
8
+ const mkPkg = (deps) => {
9
+ const dir = (0, path_1.join)((0, os_1.tmpdir)(), `runlify-prisma-detect-${Date.now()}-${Math.random()}`);
10
+ (0, fs_1.mkdirSync)(dir, { recursive: true });
11
+ (0, fs_1.writeFileSync)((0, path_1.join)(dir, 'package.json'), JSON.stringify({
12
+ dependencies: deps,
13
+ }));
14
+ return dir;
15
+ };
16
+ describe('detectPrismaMajorVersion', () => {
17
+ const dirs = [];
18
+ afterEach(() => {
19
+ for (const dir of dirs) {
20
+ (0, fs_jetpack_1.remove)(dir);
21
+ }
22
+ dirs.length = 0;
23
+ });
24
+ it('returns 7 for prisma 7.x', () => {
25
+ dirs.push(mkPkg({ prisma: '7.8.0', '@prisma/client': '7.8.0' }));
26
+ expect((0, detectPrismaMajorVersion_1.detectPrismaMajorVersion)(dirs[0])).toBe(7);
27
+ });
28
+ it('returns 6 for prisma 6.x', () => {
29
+ dirs.push(mkPkg({ prisma: '6.19.0', '@prisma/client': '6.19.0' }));
30
+ expect((0, detectPrismaMajorVersion_1.detectPrismaMajorVersion)(dirs[0])).toBe(6);
31
+ });
32
+ it('prefers prisma CLI over @prisma/client on mismatch', () => {
33
+ dirs.push(mkPkg({ prisma: '7.0.0', '@prisma/client': '6.19.0' }));
34
+ expect((0, detectPrismaMajorVersion_1.detectPrismaMajorVersion)(dirs[0])).toBe(7);
35
+ });
36
+ it('falls back to @prisma/client when prisma CLI is absent', () => {
37
+ dirs.push(mkPkg({ '@prisma/client': '6.19.0' }));
38
+ expect((0, detectPrismaMajorVersion_1.detectPrismaMajorVersion)(dirs[0])).toBe(6);
39
+ });
40
+ it('returns legacy default when no prisma packages found', () => {
41
+ dirs.push(mkPkg({ lodash: '4.17.21' }));
42
+ expect((0, detectPrismaMajorVersion_1.detectPrismaMajorVersion)(dirs[0])).toBe(6);
43
+ });
44
+ it('returns legacy default when package.json is missing', () => {
45
+ const dir = (0, path_1.join)((0, os_1.tmpdir)(), `runlify-prisma-detect-missing-${Date.now()}`);
46
+ (0, fs_1.mkdirSync)(dir, { recursive: true });
47
+ dirs.push(dir);
48
+ expect((0, detectPrismaMajorVersion_1.detectPrismaMajorVersion)(dir)).toBe(6);
49
+ });
50
+ });
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0UHJpc21hTWFqb3JWZXJzaW9uLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvamVjdHNHZW5lcmF0aW9uL3V0aWxzL2RldGVjdFByaXNtYU1ham9yVmVyc2lvbi5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkJBQTJDO0FBQzNDLCtCQUF5QjtBQUN6QiwyQkFBeUI7QUFDekIsMkNBQWlDO0FBQ2pDLHlFQUFtRTtBQUVuRSxNQUFNLEtBQUssR0FBRyxDQUFDLElBQTRCLEVBQVUsRUFBRTtJQUNyRCxNQUFNLEdBQUcsR0FBRyxJQUFBLFdBQUksRUFBQyxJQUFBLFdBQU0sR0FBRSxFQUFFLHlCQUF5QixJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNsRixJQUFBLGNBQVMsRUFBQyxHQUFHLEVBQUUsRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtJQUNqQyxJQUFBLGtCQUFhLEVBQ1gsSUFBQSxXQUFJLEVBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxFQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2IsWUFBWSxFQUFFLElBQUk7S0FDbkIsQ0FBQyxDQUNILENBQUE7SUFDRCxPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUMsQ0FBQTtBQUVELFFBQVEsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7SUFDeEMsTUFBTSxJQUFJLEdBQWEsRUFBRSxDQUFBO0lBRXpCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtZQUN0QixJQUFBLG1CQUFNLEVBQUMsR0FBRyxDQUFDLENBQUE7U0FDWjtRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO0lBQ2pCLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRTtR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
@@ -1,2 +1,3 @@
1
1
  export { default as SystemMetaBuilder } from './projectsGeneration/builders/SystemMetaBuilder';
2
2
  export * from './projectsGeneration';
3
+ export { Storage, type StorageType, type SearchEngine } from './projectsGeneration/builders/storage';
@@ -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
- externalSearch: boolean;
42
- elasticOnly: boolean;
42
+ protected _storage: StorageType;
43
43
  multitenancy: Multitenancy;
44
44
  commonElementsVisibleToAll: boolean;
45
45
  title: Record<string, {
@@ -69,8 +69,8 @@ declare abstract class BaseSavableEntityBuilder extends BaseBuilder implements M
69
69
  plural: string;
70
70
  singular: string;
71
71
  }, language?: string): this;
72
- setExternalSearch(): this;
73
- setElasticOnly(): this;
72
+ getStorage(): StorageType;
73
+ setStorage(storage: StorageType): this;
74
74
  setSearchEnabled(searchEnabled?: boolean): this;
75
75
  setAuditable(auditable?: boolean): this;
76
76
  setDeletable(deletable?: boolean): this;
@@ -96,6 +96,7 @@ declare class SystemMetaBuilder implements MethodsModelsHolder {
96
96
  addExternalEnvMenuItem(label: string, env: string): ExternalEnvMenuItemBuilder;
97
97
  getBack(): DeploymentBuilder;
98
98
  addDatabase(name: string): this;
99
+ getRegisteredDatabaseNames(): string[];
99
100
  getDocuments(): EntityBuilderWithOptions<DocumentBuilder>[];
100
101
  addDocument(name: string, title?: {
101
102
  singular?: string;
@@ -114,7 +115,9 @@ declare class SystemMetaBuilder implements MethodsModelsHolder {
114
115
  addGlossaryTerm(term: string, definition: string): this;
115
116
  addCommnad(projectCategory: ProjectCategory, name: string, command: string, needFor: string): this;
116
117
  getSavableEntities(): (EntityBuilderWithOptions<CatalogBuilder> | EntityBuilderWithOptions<InfoRegistryBuilder> | EntityBuilderWithOptions<DocumentBuilder> | EntityBuilderWithOptions<SumRegistryBuilder>)[];
117
- getExternalSearchEntities(): Array<CatalogBuilder | DocumentBuilder | InfoRegistryBuilder | SumRegistryBuilder>;
118
+ getEntitiesWithExternalSearch(): Array<CatalogBuilder | DocumentBuilder | InfoRegistryBuilder | SumRegistryBuilder>;
119
+ getEntitiesWithElasticSearch(): Array<CatalogBuilder | DocumentBuilder | InfoRegistryBuilder | SumRegistryBuilder>;
120
+ getEntitiesWithClickHouseSearch(): Array<CatalogBuilder | DocumentBuilder | InfoRegistryBuilder | SumRegistryBuilder>;
118
121
  addMethod(name: string, methodType: MethodType, title?: string): MethodBuilder;
119
122
  addLabel(label: string): void;
120
123
  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';
@@ -209,8 +210,7 @@ export type BaseSavableEntity = BaseEntity & {
209
210
  predefinedElements: Record<string, any>[];
210
211
  devPerefinedElements: Record<string, any>[];
211
212
  auditable: boolean;
212
- externalSearch: boolean;
213
- elasticOnly: boolean;
213
+ storage: StorageType;
214
214
  searchEnabled: boolean;
215
215
  sortField: string;
216
216
  creatableByUser: boolean;
@@ -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;
@@ -0,0 +1,2 @@
1
+ import SystemMetaBuilder from '../builders/SystemMetaBuilder';
2
+ export declare const addExternalSearch: (system: SystemMetaBuilder) => void;
@@ -1,2 +1,2 @@
1
1
  export * from './files';
2
- export * from './addElasticSearch';
2
+ export * from './addExternalSearch';
@@ -0,0 +1,3 @@
1
+ import { ProjectWideGenerationArgs } from '../args';
2
+ import { FileCreator } from './types';
3
+ export declare const generateBackClickHouseBootstrap: (fileCreator: FileCreator, args: ProjectWideGenerationArgs) => void;