@prisma-psm/pg 1.0.0

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 (114) hide show
  1. package/.idea/modules.xml +8 -0
  2. package/.idea/php.xml +9 -0
  3. package/.idea/psm-pg.iml +8 -0
  4. package/.idea/vcs.xml +6 -0
  5. package/.idea/workspace.xml +73 -0
  6. package/LICENSE +201 -0
  7. package/README.md +2 -0
  8. package/package.json +21 -0
  9. package/src/index.d.ts +4 -0
  10. package/src/index.d.ts.map +1 -0
  11. package/src/index.js +21 -0
  12. package/src/index.js.map +1 -0
  13. package/src/index.ts +23 -0
  14. package/src/migration/migrate.d.ts +3 -0
  15. package/src/migration/migrate.d.ts.map +1 -0
  16. package/src/migration/migrate.js +8 -0
  17. package/src/migration/migrate.js.map +1 -0
  18. package/src/migration/migrate.ts +7 -0
  19. package/src/migration/test.d.ts +3 -0
  20. package/src/migration/test.d.ts.map +1 -0
  21. package/src/migration/test.js +40 -0
  22. package/src/migration/test.js.map +1 -0
  23. package/src/migration/test.ts +43 -0
  24. package/src/parser/backup/engine.d.ts +16 -0
  25. package/src/parser/backup/engine.d.ts.map +1 -0
  26. package/src/parser/backup/engine.js +176 -0
  27. package/src/parser/backup/engine.js.map +1 -0
  28. package/src/parser/backup/engine.ts +201 -0
  29. package/src/parser/backup/index.d.ts +7 -0
  30. package/src/parser/backup/index.d.ts.map +1 -0
  31. package/src/parser/backup/index.js +29 -0
  32. package/src/parser/backup/index.js.map +1 -0
  33. package/src/parser/backup/index.ts +30 -0
  34. package/src/parser/constraint.d.ts +22 -0
  35. package/src/parser/constraint.d.ts.map +1 -0
  36. package/src/parser/constraint.js +160 -0
  37. package/src/parser/constraint.js.map +1 -0
  38. package/src/parser/constraint.ts +161 -0
  39. package/src/parser/def.d.ts +37 -0
  40. package/src/parser/def.d.ts.map +1 -0
  41. package/src/parser/def.js +4 -0
  42. package/src/parser/def.js.map +1 -0
  43. package/src/parser/def.ts +22 -0
  44. package/src/parser/dependencies.d.ts +3 -0
  45. package/src/parser/dependencies.d.ts.map +1 -0
  46. package/src/parser/dependencies.js +39 -0
  47. package/src/parser/dependencies.js.map +1 -0
  48. package/src/parser/dependencies.ts +43 -0
  49. package/src/parser/indexes.d.ts +13 -0
  50. package/src/parser/indexes.d.ts.map +1 -0
  51. package/src/parser/indexes.js +54 -0
  52. package/src/parser/indexes.js.map +1 -0
  53. package/src/parser/indexes.ts +57 -0
  54. package/src/parser/modelParser.d.ts +19 -0
  55. package/src/parser/modelParser.d.ts.map +1 -0
  56. package/src/parser/modelParser.js +24 -0
  57. package/src/parser/modelParser.js.map +1 -0
  58. package/src/parser/modelParser.ts +30 -0
  59. package/src/parser/notice.d.ts +2 -0
  60. package/src/parser/notice.d.ts.map +1 -0
  61. package/src/parser/notice.js +8 -0
  62. package/src/parser/notice.js.map +1 -0
  63. package/src/parser/notice.ts +5 -0
  64. package/src/parser/parser.d.ts +15 -0
  65. package/src/parser/parser.d.ts.map +1 -0
  66. package/src/parser/parser.js +72 -0
  67. package/src/parser/parser.js.map +1 -0
  68. package/src/parser/parser.ts +87 -0
  69. package/src/parser/shadow.d.ts +4 -0
  70. package/src/parser/shadow.d.ts.map +1 -0
  71. package/src/parser/shadow.js +21 -0
  72. package/src/parser/shadow.js.map +1 -0
  73. package/src/parser/shadow.ts +20 -0
  74. package/src/parser/sql.d.ts +3 -0
  75. package/src/parser/sql.d.ts.map +1 -0
  76. package/src/parser/sql.js +67 -0
  77. package/src/parser/sql.js.map +1 -0
  78. package/src/parser/sql.ts +74 -0
  79. package/src/parser/sys.d.ts +11 -0
  80. package/src/parser/sys.d.ts.map +1 -0
  81. package/src/parser/sys.js +54 -0
  82. package/src/parser/sys.js.map +1 -0
  83. package/src/parser/sys.ts +56 -0
  84. package/src/parser/table/engine.d.ts +7 -0
  85. package/src/parser/table/engine.d.ts.map +1 -0
  86. package/src/parser/table/engine.js +103 -0
  87. package/src/parser/table/engine.js.map +1 -0
  88. package/src/parser/table/engine.ts +106 -0
  89. package/src/parser/table/field.d.ts +8 -0
  90. package/src/parser/table/field.d.ts.map +1 -0
  91. package/src/parser/table/field.js +25 -0
  92. package/src/parser/table/field.js.map +1 -0
  93. package/src/parser/table/field.ts +22 -0
  94. package/src/parser/table.d.ts +8 -0
  95. package/src/parser/table.d.ts.map +1 -0
  96. package/src/parser/table.js +31 -0
  97. package/src/parser/table.js.map +1 -0
  98. package/src/parser/table.ts +30 -0
  99. package/src/utils/escape.d.ts +3 -0
  100. package/src/utils/escape.d.ts.map +1 -0
  101. package/src/utils/escape.js +59 -0
  102. package/src/utils/escape.js.map +1 -0
  103. package/src/utils/escape.ts +36 -0
  104. package/src/utils/sha.d.ts +2 -0
  105. package/src/utils/sha.d.ts.map +1 -0
  106. package/src/utils/sha.js +33 -0
  107. package/src/utils/sha.js.map +1 -0
  108. package/src/utils/sha.ts +6 -0
  109. package/src/utils/tabs.d.ts +2 -0
  110. package/src/utils/tabs.d.ts.map +1 -0
  111. package/src/utils/tabs.js +16 -0
  112. package/src/utils/tabs.js.map +1 -0
  113. package/src/utils/tabs.ts +14 -0
  114. package/tsconfig.json +81 -0
@@ -0,0 +1,161 @@
1
+ import {PostgresParserOptions} from "./def";
2
+ import {oid} from "../utils/escape";
3
+ import {ModelOptions} from "@prisma-psm/core";
4
+ import {notice} from "./notice";
5
+
6
+ export type ConstraintsOptions = {
7
+ model:ModelOptions,
8
+ name:string
9
+ key: "primary"|"foreign"|"unique"|"check"|"index",
10
+ fields?:string[],
11
+ refModel?:string
12
+ algorithm?:string
13
+ refModelSchema?:string
14
+ refFields?:string[],
15
+ parser:PostgresParserOptions
16
+ }
17
+ function resolver(parser:PostgresParserOptions, opts:ConstraintsOptions){
18
+ const name = oid( opts.name );
19
+ let refFields:string = "";
20
+ let fieldsId:string = "";
21
+ let refModel:string = "";
22
+ let refModelSchema:string = "";
23
+
24
+ if(!!opts.refFields?.length) refFields = opts.refFields.map( oid ).join(`, `);
25
+ if(!!opts.fields?.length) fieldsId = opts.fields.map(oid).join(`, `);
26
+ if(!!opts.refModel) refModel = oid(opts.refModel);
27
+ if(!!opts.refModelSchema) refModelSchema = oid(opts.refModelSchema);
28
+
29
+ return {
30
+ create_primary:()=> ([
31
+ notice( `CREATE PRIMARY KEY ${name} OF MODEL ${opts.model.model}`),
32
+ `alter table if exists ${oid(parser.shadow)}.${oid(opts.model.temp)} add constraint ${name} primary key (${fieldsId});`,
33
+ notice( `CREATE PRIMARY KEY ${name} OF MODEL ${opts.model.model} OK!`),
34
+ ]),
35
+ create_foreign:()=> ([
36
+ notice( `CREATE FOREIGN KEY ${name} OF MODEL ${ opts.model.model}`),
37
+ `alter table if exists ${oid(parser.shadow)}.${oid(opts.model.temp)} add constraint ${name} foreign key (${fieldsId}) references ${refModelSchema}.${refModel} ( ${refFields} );`,
38
+ notice( `CREATE FOREIGN KEY ${name} OF MODEL ${ opts.model.model} OK!`),
39
+ ]),
40
+ create_unique:()=> ([
41
+ notice( `CREATE UNIQUE KEY ${name} OF MODEL ${ opts.model.model}`),
42
+ `alter table if exists ${oid(parser.shadow)}.${oid(opts.model.temp)} add constraint ${name} unique (${fieldsId});`,
43
+ notice( `CREATE UNIQUE KEY ${name} OF MODEL ${ opts.model.model} OK!`),
44
+ ]),
45
+ drop:()=> ([
46
+ notice( `DROP CONSTRAINT KEY ${name} OF MODEL ${ opts.model.model}`),
47
+ `alter table if exists ${oid(opts.model.schema)}.${oid(opts.model.name)} drop constraint if exists ${name};`,
48
+ notice( `DROP CONSTRAINT KEY ${name} OF MODEL ${ opts.model.model} OK!`),
49
+ ]),
50
+ }
51
+ }
52
+
53
+ export function constraintsParser( model:ModelOptions, parser:PostgresParserOptions ) {
54
+ const primary = (()=>{
55
+ const index = model.indexes.find( value => value.type === "id" );
56
+ if( !index ) return;
57
+ let localField = index.fields?.map( next => {
58
+ const field = model.fields.find( value1 => value1.name === next.name );
59
+ if( !field ) return next.name;
60
+ return field.dbName||field.name;
61
+ });
62
+ let name = index.dbName || index.name;
63
+ if( !name ) name = `pk_${model.name}_${ localField.join( "_" )}_by_prisma`;
64
+ return resolver(parser, {
65
+ key: "primary",
66
+ fields: localField,
67
+ name: name,
68
+ parser: parser,
69
+ model: model,
70
+ });
71
+ })()
72
+
73
+ const unique = model.indexes.filter( field => {
74
+ return field.type === "unique";
75
+ }).map( index => {
76
+ let localField = index.fields?.map( next => {
77
+ const field = model.fields.find( value1 => value1.name === next.name );
78
+ if( !field ) return next.name;
79
+ return field.dbName||field.name;
80
+ });
81
+ let name = index.dbName || index.name;
82
+ if( !name ) name = `uk_${model.name}_${ localField.join( "_" )}_by_prisma`;
83
+ return resolver(parser, {
84
+ key: "unique",
85
+ fields: localField,
86
+ name: name,
87
+ parser: parser,
88
+ model: model
89
+ });
90
+ })
91
+
92
+ const foreign = model.fields.filter( field => {
93
+ return field.kind === "object"
94
+ && !!field.relationName
95
+ && field.relationFromFields?.length
96
+ && field.relationToFields?.length
97
+ ;
98
+ }).map( next => {
99
+ let localField = next.relationFromFields?.map( name => {
100
+ const field = model.fields.find( value1 => value1.name === name );
101
+ if( !field ) return name;
102
+ return field.dbName||field.name;
103
+ });
104
+ let reference = parser.models.find( value => value.model === next.type );
105
+ if( reference?.psm?.view ) return null;
106
+ let referenceField = next.relationToFields?.map( name => {
107
+ if( !reference ) return name;
108
+ const field = reference.fields.find( value1 => value1.name === name );
109
+ if( !field ) return name;
110
+ return field.dbName||field.name;
111
+ });
112
+
113
+
114
+
115
+ let name = next.relationName;
116
+ let ref = reference?.name;
117
+ if( !name ) name = `fk_${model.name}_${referenceField?.join("_")}_to_${ref}_by_prisma`;
118
+
119
+ return resolver( parser, {
120
+ key: "foreign",
121
+ fields: localField,
122
+ name: name,
123
+ refModel: ref,
124
+ refFields: referenceField,
125
+ refModelSchema: reference?.schema || "public",
126
+ parser: parser,
127
+ model: model,
128
+ });
129
+ }).filter( value => !!value );
130
+
131
+ const maps = ( list:any, key:string):string[]=>{
132
+ const fk:string[] = [];
133
+ if( !list ) return[];
134
+ list.forEach( value => {
135
+ if( !value ) return;
136
+ fk.push( ...value?.[key]());
137
+ });
138
+ return fk;
139
+ }
140
+ return {
141
+ create_primary_keys: ()=> {
142
+ return maps( [primary], "create_primary" );
143
+ },
144
+ drop_primary_keys: ()=> {
145
+ return maps( [primary], "drop" );
146
+
147
+ },
148
+ create_foreign_key: ()=> {
149
+ return maps( foreign, "create_foreign" );
150
+ },
151
+ drop_foreign_key: ()=> {
152
+ return maps( foreign, "drop" );
153
+ },
154
+ create_unique_key: ()=> {
155
+ return maps( unique, "create_unique" );
156
+ },
157
+ drop_unique_key: ()=> {
158
+ return maps( unique, "drop" );
159
+ },
160
+ };
161
+ }
@@ -0,0 +1,37 @@
1
+ import { ModelOptions, PSMParserOptions } from "@prisma-psm/core";
2
+ export interface PostgresParserOptions extends PSMParserOptions {
3
+ mode: "check" | "migrate";
4
+ }
5
+ export interface ParseModelResult {
6
+ model: ModelOptions;
7
+ backup: {
8
+ create: string[];
9
+ restore: string[];
10
+ restore_serial: string[];
11
+ clean: string[];
12
+ };
13
+ table: {
14
+ create: string[];
15
+ drop: string[];
16
+ allocate: string[];
17
+ };
18
+ primary: {
19
+ create: string[];
20
+ drop: string[];
21
+ };
22
+ foreign: {
23
+ create: string[];
24
+ drop: string[];
25
+ };
26
+ unique: {
27
+ create: string[];
28
+ drop: string[];
29
+ };
30
+ indexes: {
31
+ create: string[];
32
+ drop: string[];
33
+ };
34
+ dependencies: string[];
35
+ dependents: string[];
36
+ }
37
+ //# sourceMappingURL=def.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"def.d.ts","sourceRoot":"","sources":["def.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAEhE,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC3D,IAAI,EAAC,OAAO,GAAC,SAAS,CAAA;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE;QAAE,MAAM,EAAC,MAAM,EAAE,CAAC;QAAC,OAAO,EAAC,MAAM,EAAE,CAAC;QAAC,cAAc,EAAC,MAAM,EAAE,CAAC;QAAC,KAAK,EAAC,MAAM,EAAE,CAAA;KAAE,CAAA;IACtF,KAAK,EAAE;QAAE,MAAM,EAAC,MAAM,EAAE,CAAC;QAAC,IAAI,EAAC,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAC,MAAM,EAAE,CAAA;KAAE,CAAA;IAC5D,OAAO,EAAE;QAAG,MAAM,EAAC,MAAM,EAAE,CAAC;QAAC,IAAI,EAAC,MAAM,EAAE,CAAA;KAAE,CAAA;IAC5C,OAAO,EAAE;QAAE,MAAM,EAAC,MAAM,EAAE,CAAC;QAAC,IAAI,EAAC,MAAM,EAAE,CAAA;KAAE,CAAA;IAC3C,MAAM,EAAE;QAAE,MAAM,EAAC,MAAM,EAAE,CAAC;QAAC,IAAI,EAAC,MAAM,EAAE,CAAA;KAAE,CAAA;IAC1C,OAAO,EAAE;QAAE,MAAM,EAAC,MAAM,EAAE,CAAC;QAAC,IAAI,EAAC,MAAM,EAAE,CAAA;KAAE,CAAA;IAC3C,YAAY,EAAC,MAAM,EAAE,CAAA;IACrB,UAAU,EAAC,MAAM,EAAE,CAAA;CACtB"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ //filename: src/libs/migrate/def.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=def.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"def.js","sourceRoot":"","sources":["def.ts"],"names":[],"mappings":";AAAA,mCAAmC"}
@@ -0,0 +1,22 @@
1
+ //filename: src/libs/migrate/def.ts
2
+
3
+ import {ModelOptions, PSMParserOptions} from "@prisma-psm/core";
4
+
5
+ export interface PostgresParserOptions extends PSMParserOptions{
6
+ mode:"check"|"migrate"
7
+ }
8
+
9
+ export interface ParseModelResult {
10
+ model: ModelOptions,
11
+ backup: { create:string[], restore:string[], restore_serial:string[], clean:string[] }
12
+ table: { create:string[], drop:string[], allocate:string[] }
13
+ primary: { create:string[], drop:string[] }
14
+ foreign: { create:string[], drop:string[] }
15
+ unique: { create:string[], drop:string[] }
16
+ indexes: { create:string[], drop:string[] }
17
+ dependencies:string[]
18
+ dependents:string[]
19
+ }
20
+
21
+
22
+
@@ -0,0 +1,3 @@
1
+ import { ParseModelResult } from "./def";
2
+ export declare function reverseDependencies(response: ParseModelResult[]): void;
3
+ //# sourceMappingURL=dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,OAAO,CAAC;AAEvC,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAuC/D"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reverseDependencies = reverseDependencies;
4
+ function reverseDependencies(response) {
5
+ // Mapeia modelos por nome
6
+ const modelMap = new Map();
7
+ for (const item of response) {
8
+ item.dependents = []; // limpa dependents antes de começar
9
+ modelMap.set(item.model.model, item);
10
+ }
11
+ // Cria mapa auxiliar para armazenar dependentes indiretos (cache)
12
+ const dependentsMap = new Map();
13
+ // Função recursiva para coletar todos os dependentes de um modelo
14
+ function collectDependents(target, visited = new Set()) {
15
+ if (dependentsMap.has(target)) {
16
+ return dependentsMap.get(target);
17
+ }
18
+ const dependents = new Set();
19
+ for (const model of response) {
20
+ if (model.dependencies.includes(target)) {
21
+ if (!visited.has(model.model.model)) {
22
+ dependents.add(model.model.model);
23
+ visited.add(model.model.model);
24
+ const indirect = collectDependents(model.model.model, new Set(visited));
25
+ for (const d of indirect)
26
+ dependents.add(d);
27
+ }
28
+ }
29
+ }
30
+ dependentsMap.set(target, dependents);
31
+ return dependents;
32
+ }
33
+ // Aplica para cada modelo
34
+ for (const item of response) {
35
+ const allDependents = collectDependents(item.model.model);
36
+ item.dependents = [...allDependents];
37
+ }
38
+ }
39
+ //# sourceMappingURL=dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["dependencies.ts"],"names":[],"mappings":";;AAEA,kDAuCC;AAvCD,SAAgB,mBAAmB,CAAC,QAA4B;IAC5D,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;IACrD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,oCAAoC;QAC1D,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,kEAAkE;IAClE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAuB,CAAC;IAErD,kEAAkE;IAClE,SAAS,iBAAiB,CAAC,MAAc,EAAE,UAAU,IAAI,GAAG,EAAU;QAClE,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,aAAa,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QACtC,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QAErC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC/B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;oBACxE,KAAK,MAAM,CAAC,IAAI,QAAQ;wBAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChD,CAAC;YACL,CAAC;QACL,CAAC;QAED,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACtC,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,0BAA0B;IAC1B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;IACzC,CAAC;AACL,CAAC"}
@@ -0,0 +1,43 @@
1
+ import {ParseModelResult} from "./def";
2
+
3
+ export function reverseDependencies(response: ParseModelResult[]) {
4
+ // Mapeia modelos por nome
5
+ const modelMap = new Map<string, ParseModelResult>();
6
+ for (const item of response) {
7
+ item.dependents = []; // limpa dependents antes de começar
8
+ modelMap.set(item.model.model, item);
9
+ }
10
+
11
+ // Cria mapa auxiliar para armazenar dependentes indiretos (cache)
12
+ const dependentsMap = new Map<string, Set<string>>();
13
+
14
+ // Função recursiva para coletar todos os dependentes de um modelo
15
+ function collectDependents(target: string, visited = new Set<string>()): Set<string> {
16
+ if (dependentsMap.has(target)) {
17
+ return dependentsMap.get(target)!;
18
+ }
19
+
20
+ const dependents = new Set<string>();
21
+
22
+ for (const model of response) {
23
+ if (model.dependencies.includes(target)) {
24
+ if (!visited.has(model.model.model)) {
25
+ dependents.add(model.model.model);
26
+ visited.add(model.model.model);
27
+ const indirect = collectDependents(model.model.model, new Set(visited));
28
+ for (const d of indirect) dependents.add(d);
29
+ }
30
+ }
31
+ }
32
+
33
+ dependentsMap.set(target, dependents);
34
+ return dependents;
35
+ }
36
+
37
+ // Aplica para cada modelo
38
+ for (const item of response) {
39
+ const allDependents = collectDependents(item.model.model);
40
+ item.dependents = [...allDependents];
41
+ }
42
+ }
43
+
@@ -0,0 +1,13 @@
1
+ import { PostgresParserOptions } from "./def";
2
+ import { ModelOptions } from "@prisma-psm/core";
3
+ export type IndexesOptions = {
4
+ model: ModelOptions;
5
+ name: string;
6
+ fields?: string[];
7
+ algorithm?: string;
8
+ };
9
+ export declare function indexesParser(model: ModelOptions, parser: PostgresParserOptions): {
10
+ create_index_key: () => string[];
11
+ drop_index_key: () => string[];
12
+ };
13
+ //# sourceMappingURL=indexes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexes.d.ts","sourceRoot":"","sources":["indexes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C,MAAM,MAAM,cAAc,GAAG;IACzB,KAAK,EAAC,YAAY,CAAC;IACnB,IAAI,EAAC,MAAM,CAAA;IACX,MAAM,CAAC,EAAC,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAC,MAAM,CAAA;CACpB,CAAA;AAgBD,wBAAgB,aAAa,CAAE,KAAK,EAAC,YAAY,EAAE,MAAM,EAAC,qBAAqB;;;EA+B9E"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.indexesParser = indexesParser;
4
+ const escape_1 = require("../utils/escape");
5
+ function resolver(parser, opts) {
6
+ var _a;
7
+ const name = (0, escape_1.oid)(opts.name);
8
+ let fieldsId = "";
9
+ let algorithm = "";
10
+ if (!!((_a = opts.fields) === null || _a === void 0 ? void 0 : _a.length))
11
+ fieldsId = opts.fields.map(escape_1.oid).join(`, `);
12
+ if (!!opts.algorithm)
13
+ algorithm = ` using ${opts.algorithm}`;
14
+ return {
15
+ create_index: () => `create index ${name} on ${(0, escape_1.oid)(parser.shadow)}.${(0, escape_1.oid)(opts.model.temp)}${algorithm} (${fieldsId});`,
16
+ drop_index: () => `drop index if exists ${name};`,
17
+ };
18
+ }
19
+ function indexesParser(model, parser) {
20
+ const indexes = model.indexes.filter(field => {
21
+ return field.type === "normal";
22
+ }).map(index => {
23
+ var _a;
24
+ let localField = (_a = index.fields) === null || _a === void 0 ? void 0 : _a.map(next => {
25
+ const field = model.fields.find(value1 => value1.name === next.name);
26
+ if (!field)
27
+ return next.name;
28
+ return field.dbName || field.name;
29
+ });
30
+ let name = index.dbName || index.name;
31
+ let schema = model.schema || "public";
32
+ if (!name)
33
+ name = `idx_${schema}_${model.name}_${localField.join("_")}_by_prisma`;
34
+ return resolver(parser, {
35
+ algorithm: index.algorithm,
36
+ fields: localField,
37
+ name: name,
38
+ model: model,
39
+ });
40
+ });
41
+ return {
42
+ create_index_key: () => {
43
+ if (!indexes)
44
+ return [];
45
+ return indexes.map(value => value.create_index());
46
+ },
47
+ drop_index_key: () => {
48
+ if (!indexes)
49
+ return [];
50
+ return indexes.map(value => value.drop_index());
51
+ },
52
+ };
53
+ }
54
+ //# sourceMappingURL=indexes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexes.js","sourceRoot":"","sources":["indexes.ts"],"names":[],"mappings":";;AAyBA,sCA+BC;AAvDD,4CAAoC;AAUpC,SAAS,QAAQ,CAAC,MAA4B,EAAE,IAAmB;;IAC/D,MAAM,IAAI,GAAG,IAAA,YAAG,EAAE,IAAI,CAAC,IAAI,CAAE,CAAC;IAC9B,IAAI,QAAQ,GAAU,EAAE,CAAC;IACzB,IAAI,SAAS,GAAU,EAAE,CAAC;IAE1B,IAAG,CAAC,CAAC,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,CAAA;QAAE,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrE,IAAG,CAAC,CAAC,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;IAE5D,OAAO;QACH,YAAY,EAAC,GAAE,EAAE,CAAC,gBAAgB,IAAI,OAAO,IAAA,YAAG,EAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAA,YAAG,EAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,KAAK,QAAQ,IAAI;QACpH,UAAU,EAAC,GAAE,EAAE,CAAC,wBAAwB,IAAI,GAAG;KAClD,CAAA;AACL,CAAC;AAED,SAAgB,aAAa,CAAE,KAAkB,EAAE,MAA4B;IAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAE,KAAK,CAAC,EAAE;QAC1C,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;IACnC,CAAC,CAAC,CAAC,GAAG,CAAE,KAAK,CAAC,EAAE;;QACZ,IAAI,UAAU,GAAG,MAAA,KAAK,CAAC,MAAM,0CAAE,GAAG,CAAE,IAAI,CAAC,EAAE;YACvC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAE,CAAC;YACvE,IAAI,CAAC,KAAK;gBAAG,OAAO,IAAI,CAAC,IAAI,CAAC;YAC9B,OAAO,KAAK,CAAC,MAAM,IAAE,KAAK,CAAC,IAAI,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC;QACtC,IAAI,MAAM,GAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC;QACvC,IAAI,CAAC,IAAI;YAAG,IAAI,GAAG,OAAO,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAE,GAAG,CAAC,YAAY,CAAC;QACpF,OAAO,QAAQ,CAAC,MAAM,EAAE;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,KAAK;SACf,CAAC,CAAC;IACP,CAAC,CAAC,CAAA;IAEF,OAAO;QACH,gBAAgB,EAAE,GAAE,EAAE;YAClB,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC,GAAG,CAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,cAAc,EAAE,GAAE,EAAE;YAChB,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC,GAAG,CAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QACrD,CAAC;KAEJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,57 @@
1
+ import {PostgresParserOptions} from "./def";
2
+ import {oid} from "../utils/escape";
3
+ import {ModelOptions} from "@prisma-psm/core";
4
+
5
+ export type IndexesOptions = {
6
+ model:ModelOptions,
7
+ name:string
8
+ fields?:string[],
9
+ algorithm?:string
10
+ }
11
+
12
+ function resolver(parser:PostgresParserOptions, opts:IndexesOptions){
13
+ const name = oid( opts.name );
14
+ let fieldsId:string = "";
15
+ let algorithm:string = "";
16
+
17
+ if(!!opts.fields?.length) fieldsId = opts.fields.map(oid).join(`, `);
18
+ if(!!opts.algorithm) algorithm = ` using ${opts.algorithm}`;
19
+
20
+ return {
21
+ create_index:()=> `create index ${name} on ${oid(parser.shadow)}.${oid(opts.model.temp)}${algorithm} (${fieldsId});`,
22
+ drop_index:()=> `drop index if exists ${name};`,
23
+ }
24
+ }
25
+
26
+ export function indexesParser( model:ModelOptions, parser:PostgresParserOptions ) {
27
+ const indexes = model.indexes.filter( field => {
28
+ return field.type === "normal";
29
+ }).map( index => {
30
+ let localField = index.fields?.map( next => {
31
+ const field = model.fields.find( value1 => value1.name === next.name );
32
+ if( !field ) return next.name;
33
+ return field.dbName||field.name;
34
+ });
35
+ let name = index.dbName || index.name;
36
+ let schema = model.schema || "public";
37
+ if( !name ) name = `idx_${schema}_${model.name}_${localField.join( "_")}_by_prisma`;
38
+ return resolver(parser, {
39
+ algorithm: index.algorithm,
40
+ fields: localField,
41
+ name: name,
42
+ model: model,
43
+ });
44
+ })
45
+
46
+ return {
47
+ create_index_key: ()=> {
48
+ if( !indexes) return [];
49
+ return indexes.map( value => value.create_index());
50
+ },
51
+ drop_index_key: ()=> {
52
+ if( !indexes) return [];
53
+ return indexes.map( value => value.drop_index());
54
+ },
55
+
56
+ };
57
+ }
@@ -0,0 +1,19 @@
1
+ import { ModelOptions } from "@prisma-psm/core";
2
+ import { PostgresParserOptions } from "./def";
3
+ export declare function modelParser(model: ModelOptions, parser: PostgresParserOptions): {
4
+ create_primary_keys: () => string[];
5
+ drop_primary_keys: () => string[];
6
+ create_foreign_key: () => string[];
7
+ drop_foreign_key: () => string[];
8
+ create_unique_key: () => string[];
9
+ drop_unique_key: () => string[];
10
+ create_index_key: () => string[];
11
+ drop_index_key: () => string[];
12
+ drop_table: () => string[];
13
+ allocate_table: () => string[];
14
+ create_table: () => string[];
15
+ restore_backup: () => string[];
16
+ restore_serial: () => string[];
17
+ depends: () => string[];
18
+ };
19
+ //# sourceMappingURL=modelParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelParser.d.ts","sourceRoot":"","sources":["modelParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAC,qBAAqB,EAAC,MAAM,OAAO,CAAC;AAM5C,wBAAgB,WAAW,CAAE,KAAK,EAAC,YAAY,EAAE,MAAM,EAAC,qBAAqB;;;;;;;;;;;;;;;EAsB5E"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.modelParser = modelParser;
4
+ const table_1 = require("./table");
5
+ const indexes_1 = require("./indexes");
6
+ const constraint_1 = require("./constraint");
7
+ const backup_1 = require("./backup");
8
+ function modelParser(model, parser) {
9
+ const depends = model.fields.filter(field => {
10
+ var _a, _b;
11
+ return field.kind === "object"
12
+ && !!field.relationName
13
+ && ((_a = field.relationFromFields) === null || _a === void 0 ? void 0 : _a.length)
14
+ && ((_b = field.relationToFields) === null || _b === void 0 ? void 0 : _b.length);
15
+ }).map(next => {
16
+ return next.type;
17
+ });
18
+ return Object.assign(Object.assign(Object.assign(Object.assign({ depends: () => {
19
+ if (!depends)
20
+ return [];
21
+ return depends;
22
+ } }, (0, backup_1.backupParser)(model, parser)), (0, table_1.tableParser)(model, parser)), (0, indexes_1.indexesParser)(model, parser)), (0, constraint_1.constraintsParser)(model, parser));
23
+ }
24
+ //# sourceMappingURL=modelParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelParser.js","sourceRoot":"","sources":["modelParser.ts"],"names":[],"mappings":";;AAOA,kCAsBC;AA3BD,mCAAoC;AACpC,uCAAwC;AACxC,6CAA+C;AAC/C,qCAAsC;AAEtC,SAAgB,WAAW,CAAE,KAAkB,EAAE,MAA4B;IACzE,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAE,KAAK,CAAC,EAAE;;QACzC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;eACvB,CAAC,CAAC,KAAK,CAAC,YAAY;gBACpB,MAAA,KAAK,CAAC,kBAAkB,0CAAE,MAAM,CAAA;gBAChC,MAAA,KAAK,CAAC,gBAAgB,0CAAE,MAAM,CAAA,CAChC;IACT,CAAC,CAAC,CAAC,GAAG,CAAE,IAAI,CAAC,EAAE;QACX,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC,CAAC,CAAA;IACF,iEAGI,OAAO,EAAE,GAAE,EAAE;YACT,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC;QACnB,CAAC,IACG,IAAA,qBAAY,EAAC,KAAK,EAAE,MAAM,CAAC,GAC3B,IAAA,mBAAW,EAAE,KAAK,EAAE,MAAM,CAAC,GAC3B,IAAA,uBAAa,EAAE,KAAK,EAAE,MAAM,CAAC,GAC7B,IAAA,8BAAiB,EAAE,KAAK,EAAE,MAAM,CAAE,EACzC;AACL,CAAC"}
@@ -0,0 +1,30 @@
1
+ import {ModelOptions} from "@prisma-psm/core";
2
+ import {PostgresParserOptions} from "./def";
3
+ import {tableParser} from "./table";
4
+ import {indexesParser} from "./indexes";
5
+ import {constraintsParser} from "./constraint";
6
+ import {backupParser} from "./backup";
7
+
8
+ export function modelParser( model:ModelOptions, parser:PostgresParserOptions ){
9
+ const depends = model.fields.filter( field => {
10
+ return field.kind === "object"
11
+ && !!field.relationName
12
+ && field.relationFromFields?.length
13
+ && field.relationToFields?.length
14
+ ;
15
+ }).map( next => {
16
+ return next.type;
17
+ })
18
+ return {
19
+
20
+
21
+ depends: ()=> {
22
+ if( !depends) return [];
23
+ return depends;
24
+ },
25
+ ... backupParser(model, parser),
26
+ ... tableParser( model, parser),
27
+ ... indexesParser( model, parser),
28
+ ... constraintsParser( model, parser )
29
+ }
30
+ }
@@ -0,0 +1,2 @@
1
+ export declare function notice(message: string): string;
2
+ //# sourceMappingURL=notice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notice.d.ts","sourceRoot":"","sources":["notice.ts"],"names":[],"mappings":"AAEA,wBAAgB,MAAM,CAAC,OAAO,EAAC,MAAM,UAEpC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.notice = notice;
4
+ const escape_1 = require("../utils/escape");
5
+ function notice(message) {
6
+ return `do $$ begin raise notice '%', ${(0, escape_1.val)(message)}; end $$;`;
7
+ }
8
+ //# sourceMappingURL=notice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notice.js","sourceRoot":"","sources":["notice.ts"],"names":[],"mappings":";;AAEA,wBAEC;AAJD,4CAAoC;AAEpC,SAAgB,MAAM,CAAC,OAAc;IACjC,OAAO,iCAAiC,IAAA,YAAG,EAAE,OAAO,CAAE,WAAW,CAAA;AACrE,CAAC"}
@@ -0,0 +1,5 @@
1
+ import {val} from "../utils/escape";
2
+
3
+ export function notice(message:string) {
4
+ return `do $$ begin raise notice '%', ${val( message )}; end $$;`
5
+ }
@@ -0,0 +1,15 @@
1
+ import { ParseModelResult, PostgresParserOptions } from "./def";
2
+ export interface ParserResult {
3
+ options: PostgresParserOptions;
4
+ models: string[];
5
+ core: string[];
6
+ shadow: {
7
+ create: string[];
8
+ drop: string[];
9
+ };
10
+ parsed: {
11
+ [p: string]: ParseModelResult;
12
+ };
13
+ }
14
+ export declare function parser(opts: PostgresParserOptions): ParserResult;
15
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["parser.ts"],"names":[],"mappings":"AAOA,OAAO,EAAC,gBAAgB,EAAE,qBAAqB,EAAC,MAAM,OAAO,CAAC;AAG9D,MAAM,WAAW,YAAY;IACzB,OAAO,EAAC,qBAAqB,CAAA;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,MAAM,EAAE;QAAE,MAAM,EAAC,MAAM,EAAE,CAAC;QAAE,IAAI,EAAC,MAAM,EAAE,CAAA;KAAE,CAAC;IAC5C,MAAM,EAAE;QACJ,CAAC,CAAC,EAAC,MAAM,GAAE,gBAAgB,CAAA;KAC9B,CAAA;CACJ;AAED,wBAAgB,MAAM,CAAE,IAAI,EAAC,qBAAqB,gBAkEjD"}