runlify 0.0.778 → 0.0.782

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 (23) hide show
  1. package/build/projectsGeneration/args.js +39 -3
  2. package/build/projectsGeneration/builders/BaseSavableEntityBuilder.js +16 -3
  3. package/build/projectsGeneration/builders/SystemMetaBuilder.js +55 -9
  4. package/build/projectsGeneration/builders/buildedTypes.js +2 -1
  5. package/build/projectsGeneration/defaultCatalogs/addElasticSearch.js +2 -1
  6. package/build/projectsGeneration/generateProject/generateEnvironment.js +36 -8
  7. package/build/projectsGeneration/generators/fileTemplates/back/environment/src/clients/getPrisma.js +75 -8
  8. package/build/projectsGeneration/generators/fileTemplates/back/services/entity/class.js +8 -4
  9. package/build/projectsGeneration/generators/fileTemplates/back/services/entity/config.js +3 -2
  10. package/build/projectsGeneration/generators/prisma/scheme/genPrismaEntity.js +32 -7
  11. package/build/projectsGeneration/generators/prisma/scheme/genPrismaEntity.spec.js +32 -1
  12. package/build/projectsGeneration/generators/prisma/scheme/genPrismaSchemaForEntities.js +3 -3
  13. package/build/projectsGeneration/generators/prisma/scheme/genPrismaSchemaForEntitiesWithClientAdnDb.js +67 -9
  14. package/build/projectsGeneration/utils/databaseMeta.js +75 -0
  15. package/build/types/projectsGeneration/builders/BaseSavableEntityBuilder.d.ts +4 -0
  16. package/build/types/projectsGeneration/builders/SystemMetaBuilder.d.ts +2 -0
  17. package/build/types/projectsGeneration/builders/buildedTypes.d.ts +12 -1
  18. package/build/types/projectsGeneration/generators/fileTemplates/back/environment/src/clients/getPrisma.d.ts +2 -2
  19. package/build/types/projectsGeneration/generators/prisma/scheme/genPrismaEntity.d.ts +1 -1
  20. package/build/types/projectsGeneration/generators/prisma/scheme/genPrismaSchemaForEntities.d.ts +1 -1
  21. package/build/types/projectsGeneration/generators/prisma/scheme/genPrismaSchemaForEntitiesWithClientAdnDb.d.ts +12 -1
  22. package/build/types/projectsGeneration/utils/databaseMeta.d.ts +8 -0
  23. package/package.json +1 -1
@@ -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
@@ -24,6 +24,7 @@ declare abstract class BaseSavableEntityBuilder extends BaseBuilder implements M
24
24
  singleKey: boolean;
25
25
  logging: boolean;
26
26
  auditable: boolean;
27
+ cacheable: boolean;
27
28
  creatableByUser: boolean;
28
29
  updatableByUser: boolean;
29
30
  removableByUser: boolean;
@@ -47,6 +48,7 @@ declare abstract class BaseSavableEntityBuilder extends BaseBuilder implements M
47
48
  }>;
48
49
  externalSearchName: string | undefined;
49
50
  sharded: boolean;
51
+ database: string;
50
52
  isExternalSearch: boolean;
51
53
  clearDBAfter: {
52
54
  count: number;
@@ -73,6 +75,7 @@ declare abstract class BaseSavableEntityBuilder extends BaseBuilder implements M
73
75
  setAuditable(auditable?: boolean): this;
74
76
  setDeletable(deletable?: boolean): this;
75
77
  setEditable(editable?: boolean): this;
78
+ setCacheable(cacheable?: boolean): this;
76
79
  setCreatableByUser(creatableByUser?: boolean): this;
77
80
  setUpdatableByUser(updatableByUser?: boolean): this;
78
81
  setRemovableByUser(removableByUser?: boolean): this;
@@ -124,6 +127,7 @@ declare abstract class BaseSavableEntityBuilder extends BaseBuilder implements M
124
127
  setDevPredefinedElements(fields: Record<string, any>[]): void;
125
128
  setMultitenancy(multitenancy: Multitenancy, commonElementsVisibleToAll?: boolean): void;
126
129
  setSharded(value?: boolean): this;
130
+ setDatabase(name: string): this;
127
131
  setIsExternalTable(): this;
128
132
  setClearDBAfter(count: number, unit: DateUnit): this;
129
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;
@@ -18,6 +18,9 @@ export interface Glossary {
18
18
  term: string;
19
19
  definition: string;
20
20
  }
21
+ export type DataBaseMeta = {
22
+ name: string;
23
+ };
21
24
  export type ProjectCategory = 'back' | 'ui' | 'app' | 'land';
22
25
  export interface Command {
23
26
  projectCategory: ProjectCategory;
@@ -119,7 +122,8 @@ export declare enum StringType {
119
122
  }
120
123
  export declare enum IndexType {
121
124
  BTree = "bTree",
122
- Hash = "hash"
125
+ Hash = "hash",
126
+ Gin = "gin"
123
127
  }
124
128
  export type PlainStringField = BaseStringField & {
125
129
  stringType: 'plain';
@@ -236,6 +240,8 @@ export type BaseSavableEntity = BaseEntity & {
236
240
  methods: ServiceMethod[];
237
241
  labels: string[];
238
242
  excludeFromCommonMenu: boolean;
243
+ cacheable: boolean;
244
+ database: string;
239
245
  };
240
246
  export type Report = BaseEntity & {
241
247
  type: 'report';
@@ -243,6 +249,7 @@ export type Report = BaseEntity & {
243
249
  };
244
250
  export type Document = BaseSavableEntity & {
245
251
  type: 'document';
252
+ cacheable: boolean;
246
253
  deletable: boolean;
247
254
  editable: boolean;
248
255
  registries: string[];
@@ -252,6 +259,7 @@ export type Catalog = BaseSavableEntity & {
252
259
  type: 'catalog';
253
260
  deletable: boolean;
254
261
  editable: boolean;
262
+ cacheable: boolean;
255
263
  };
256
264
  export type TsModel = BaseEntity & {
257
265
  fields: TsModelField[];
@@ -389,6 +397,7 @@ export type InfoRegistryPeriod = 'notPeriodic' | 'second' | 'day' | 'month' | 'y
389
397
  export type InfoRegistry = BaseSavableEntity & {
390
398
  type: 'infoRegistry';
391
399
  registrarDepended: boolean;
400
+ cacheable: boolean;
392
401
  dimensions: Field[];
393
402
  resources: Field[];
394
403
  period: InfoRegistryPeriod;
@@ -396,6 +405,7 @@ export type InfoRegistry = BaseSavableEntity & {
396
405
  export type SumRegistry = BaseSavableEntity & {
397
406
  type: 'sumRegistry';
398
407
  registrarDepended: boolean;
408
+ cacheable: boolean;
399
409
  dimensions: Field[];
400
410
  resources: Field[];
401
411
  };
@@ -421,6 +431,7 @@ export type System = {
421
431
  prefix: string;
422
432
  needFor?: string;
423
433
  configVars: ConfigVar[];
434
+ dataBases: DataBaseMeta[];
424
435
  catalogs: Catalog[];
425
436
  documents: Document[];
426
437
  infoRegistries: InfoRegistry[];
@@ -1,2 +1,2 @@
1
- import { BootstrapEntityOptions } from '../../../../../../types';
2
- export declare const prismaGetterTmpl: (_options?: BootstrapEntityOptions) => string;
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;
@@ -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 declare const genPrismaSchemaForEntitiesWithClientAdnDb: ({ entities, allLinks, }: ProjectWideGenerationArgs, forShards?: boolean) => string;
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "runlify",
3
- "version": "0.0.778",
3
+ "version": "0.0.782",
4
4
  "description": "runlify CLI",
5
5
  "private": false,
6
6
  "main": "build/index.js",