@memberjunction/codegen-lib 1.0.4 → 1.0.7-next.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.
- package/dist/advanced_generation.d.ts +3 -0
- package/dist/advanced_generation.d.ts.map +1 -1
- package/dist/advanced_generation.js +39 -26
- package/dist/advanced_generation.js.map +1 -1
- package/dist/angular_client_codegen.d.ts +45 -2
- package/dist/angular_client_codegen.d.ts.map +1 -1
- package/dist/angular_client_codegen.js +423 -399
- package/dist/angular_client_codegen.js.map +1 -1
- package/dist/createNewUser.d.ts +6 -1
- package/dist/createNewUser.d.ts.map +1 -1
- package/dist/createNewUser.js +68 -53
- package/dist/createNewUser.js.map +1 -1
- package/dist/dbSchema.d.ts +10 -3
- package/dist/dbSchema.d.ts.map +1 -1
- package/dist/dbSchema.js +144 -130
- package/dist/dbSchema.js.map +1 -1
- package/dist/entity_subclasses_codegen.d.ts +11 -6
- package/dist/entity_subclasses_codegen.d.ts.map +1 -1
- package/dist/entity_subclasses_codegen.js +144 -131
- package/dist/entity_subclasses_codegen.js.map +1 -1
- package/dist/graphql_server_codegen.d.ts +28 -5
- package/dist/graphql_server_codegen.d.ts.map +1 -1
- package/dist/graphql_server_codegen.js +552 -531
- package/dist/graphql_server_codegen.js.map +1 -1
- package/dist/logging.d.ts +20 -0
- package/dist/logging.d.ts.map +1 -1
- package/dist/logging.js +61 -26
- package/dist/logging.js.map +1 -1
- package/dist/manageMetadata.d.ts +128 -7
- package/dist/manageMetadata.d.ts.map +1 -1
- package/dist/manageMetadata.js +992 -898
- package/dist/manageMetadata.js.map +1 -1
- package/dist/runCodeGen.d.ts +16 -0
- package/dist/runCodeGen.d.ts.map +1 -1
- package/dist/runCodeGen.js +185 -140
- package/dist/runCodeGen.js.map +1 -1
- package/dist/runCommand.d.ts +7 -2
- package/dist/runCommand.d.ts.map +1 -1
- package/dist/runCommand.js +104 -90
- package/dist/runCommand.js.map +1 -1
- package/dist/sql.d.ts +21 -16
- package/dist/sql.d.ts.map +1 -1
- package/dist/sql.js +98 -87
- package/dist/sql.js.map +1 -1
- package/dist/sql_codegen.d.ts +56 -13
- package/dist/sql_codegen.d.ts.map +1 -1
- package/dist/sql_codegen.js +836 -795
- package/dist/sql_codegen.js.map +1 -1
- package/dist/util.js +0 -2
- package/dist/util.js.map +1 -1
- package/package.json +32 -32
- package/readme.md +2 -2
- package/dist/graphql_client_codegen.d.ts +0 -4
- package/dist/graphql_client_codegen.js +0 -161
- package/dist/graphql_client_codegen.js.map +0 -1
- package/dist/react_client_codegen.d.ts +0 -4
- package/dist/react_client_codegen.js +0 -147
- package/dist/react_client_codegen.js.map +0 -1
package/dist/runCommand.d.ts
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { CommandInfo } from './config';
|
|
2
|
-
export declare function runCommands(commands: CommandInfo[]): Promise<CommandExecutionResult[]>;
|
|
3
2
|
export type CommandExecutionResult = {
|
|
4
3
|
output: string;
|
|
5
4
|
error: string;
|
|
6
5
|
success: boolean;
|
|
7
6
|
elapsedTime: number;
|
|
8
7
|
};
|
|
9
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Base class that handles the process of running commands which can be done executed from any other area of the system, typically done by the main runMemberJunctionCodeGen process
|
|
10
|
+
*/
|
|
11
|
+
export declare class RunCommandsBase {
|
|
12
|
+
runCommands(commands: CommandInfo[]): Promise<CommandExecutionResult[]>;
|
|
13
|
+
runCommand(command: CommandInfo): Promise<CommandExecutionResult>;
|
|
14
|
+
}
|
|
10
15
|
//# sourceMappingURL=runCommand.d.ts.map
|
package/dist/runCommand.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runCommand.d.ts","sourceRoot":"","sources":["../src/runCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"runCommand.d.ts","sourceRoot":"","sources":["../src/runCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAOvC,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAA;AAED;;GAEG;AACH,qBACa,eAAe;IACb,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAiBvE,UAAU,CAAC,OAAO,EAAE,WAAW,GAAI,OAAO,CAAC,sBAAsB,CAAC;CA8FhF"}
|
package/dist/runCommand.js
CHANGED
|
@@ -1,112 +1,126 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
2
8
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
9
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
10
|
};
|
|
5
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
12
|
+
exports.RunCommandsBase = void 0;
|
|
7
13
|
const child_process_1 = require("child_process");
|
|
8
14
|
const logging_1 = require("./logging");
|
|
9
15
|
const path_1 = __importDefault(require("path"));
|
|
10
16
|
const treeKill = require("tree-kill");
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
17
|
+
const global_1 = require("@memberjunction/global");
|
|
18
|
+
/**
|
|
19
|
+
* Base class that handles the process of running commands which can be done executed from any other area of the system, typically done by the main runMemberJunctionCodeGen process
|
|
20
|
+
*/
|
|
21
|
+
let RunCommandsBase = class RunCommandsBase {
|
|
22
|
+
async runCommands(commands) {
|
|
23
|
+
try {
|
|
24
|
+
const results = [];
|
|
25
|
+
for (const command of commands) {
|
|
26
|
+
results.push(await this.runCommand(command));
|
|
27
|
+
}
|
|
28
|
+
return results;
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
(0, logging_1.logError)(e);
|
|
32
|
+
throw e;
|
|
16
33
|
}
|
|
17
|
-
return results;
|
|
18
|
-
}
|
|
19
|
-
catch (e) {
|
|
20
|
-
(0, logging_1.logError)(e);
|
|
21
|
-
throw e;
|
|
22
34
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
});
|
|
43
|
-
cp.stderr.on('data', (data) => {
|
|
44
|
-
const elapsedTime = new Date().getTime() - startTime.getTime();
|
|
45
|
-
const message = data.toString();
|
|
46
|
-
output += message;
|
|
47
|
-
if (message.toUpperCase().indexOf('ERROR') >= 0) {
|
|
48
|
-
(0, logging_1.logError)(`COMMAND: "${command.command}" FAILED: ${elapsedTime / 1000} seconds`);
|
|
49
|
-
bErrors = true;
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
cp.on('error', (error) => {
|
|
53
|
-
const elapsedTime = new Date().getTime() - startTime.getTime();
|
|
54
|
-
(0, logging_1.logError)(`COMMAND: "${command.command}" FAILED: ${elapsedTime / 1000} seconds`);
|
|
55
|
-
if (!cp.killed)
|
|
56
|
-
treeKill(cp.pid);
|
|
57
|
-
reject(error);
|
|
58
|
-
});
|
|
59
|
-
cp.on('close', (code) => {
|
|
60
|
-
if (code === 0) {
|
|
35
|
+
async runCommand(command) {
|
|
36
|
+
let cp;
|
|
37
|
+
try {
|
|
38
|
+
let output = '';
|
|
39
|
+
let startTime = new Date();
|
|
40
|
+
let bErrors = false;
|
|
41
|
+
const commandName = command.command;
|
|
42
|
+
const absPath = path_1.default.resolve(command.workingDirectory);
|
|
43
|
+
(0, logging_1.logStatus)(`STARTING COMMAND: "${command.command}" in location "${absPath}" with args "${command.args.join(' ')}"`);
|
|
44
|
+
const commandExecution = new Promise((resolve, reject) => {
|
|
45
|
+
cp = (0, child_process_1.spawn)(commandName, command.args, {
|
|
46
|
+
cwd: absPath,
|
|
47
|
+
stdio: 'pipe',
|
|
48
|
+
shell: true,
|
|
49
|
+
});
|
|
50
|
+
cp.stdout.on('data', (data) => {
|
|
51
|
+
output += data.toString();
|
|
52
|
+
});
|
|
53
|
+
cp.stderr.on('data', (data) => {
|
|
61
54
|
const elapsedTime = new Date().getTime() - startTime.getTime();
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
reject(new Error(`Process exited with code ${code}`));
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
if (command.timeout && command.timeout > 0) {
|
|
75
|
-
const timeoutPromise = new Promise((resolve, reject) => {
|
|
76
|
-
setTimeout(() => {
|
|
55
|
+
const message = data.toString();
|
|
56
|
+
output += message;
|
|
57
|
+
if (message.toUpperCase().indexOf('ERROR') >= 0) {
|
|
58
|
+
(0, logging_1.logError)(`COMMAND: "${command.command}" FAILED: ${elapsedTime / 1000} seconds`);
|
|
59
|
+
bErrors = true;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
cp.on('error', (error) => {
|
|
77
63
|
const elapsedTime = new Date().getTime() - startTime.getTime();
|
|
78
|
-
|
|
64
|
+
(0, logging_1.logError)(`COMMAND: "${command.command}" FAILED: ${elapsedTime / 1000} seconds`);
|
|
65
|
+
if (!cp.killed)
|
|
79
66
|
treeKill(cp.pid);
|
|
80
|
-
|
|
81
|
-
|
|
67
|
+
reject(error);
|
|
68
|
+
});
|
|
69
|
+
cp.on('close', (code) => {
|
|
70
|
+
if (code === 0) {
|
|
71
|
+
const elapsedTime = new Date().getTime() - startTime.getTime();
|
|
72
|
+
(0, logging_1.logStatus)(`COMMAND: "${command.command}" COMPLETED SUCCESSFULLY: ${elapsedTime / 1000} seconds`);
|
|
73
|
+
resolve({ output: output,
|
|
74
|
+
error: null,
|
|
75
|
+
success: !bErrors,
|
|
76
|
+
elapsedTime: elapsedTime
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
reject(new Error(`Process exited with code ${code}`));
|
|
82
81
|
}
|
|
83
|
-
|
|
84
|
-
output: output,
|
|
85
|
-
error: null,
|
|
86
|
-
success: !bErrors,
|
|
87
|
-
elapsedTime: elapsedTime
|
|
88
|
-
});
|
|
89
|
-
}, command.timeout);
|
|
82
|
+
});
|
|
90
83
|
});
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
84
|
+
if (command.timeout && command.timeout > 0) {
|
|
85
|
+
const timeoutPromise = new Promise((resolve, reject) => {
|
|
86
|
+
setTimeout(() => {
|
|
87
|
+
const elapsedTime = new Date().getTime() - startTime.getTime();
|
|
88
|
+
if (!cp.killed) {
|
|
89
|
+
treeKill(cp.pid);
|
|
90
|
+
(0, logging_1.logStatus)(`COMMAND: "${command.command}" COMPLETED ${bErrors ? ' - FAILED' : ' - SUCCESS'} IN ${elapsedTime / 1000} seconds`);
|
|
91
|
+
output += `Process killed after ${command.timeout} ms`;
|
|
92
|
+
}
|
|
93
|
+
resolve({
|
|
94
|
+
output: output,
|
|
95
|
+
error: null,
|
|
96
|
+
success: !bErrors,
|
|
97
|
+
elapsedTime: elapsedTime
|
|
98
|
+
});
|
|
99
|
+
}, command.timeout);
|
|
100
|
+
});
|
|
101
|
+
return Promise.race([
|
|
102
|
+
commandExecution,
|
|
103
|
+
timeoutPromise,
|
|
104
|
+
]);
|
|
105
|
+
}
|
|
106
|
+
else
|
|
107
|
+
return commandExecution;
|
|
104
108
|
}
|
|
105
109
|
catch (e) {
|
|
106
110
|
(0, logging_1.logError)(e);
|
|
111
|
+
try {
|
|
112
|
+
if (cp && !cp.killed)
|
|
113
|
+
treeKill(cp.pid);
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
(0, logging_1.logError)(e);
|
|
117
|
+
}
|
|
118
|
+
throw e;
|
|
107
119
|
}
|
|
108
|
-
throw e;
|
|
109
120
|
}
|
|
110
|
-
}
|
|
111
|
-
exports.
|
|
121
|
+
};
|
|
122
|
+
exports.RunCommandsBase = RunCommandsBase;
|
|
123
|
+
exports.RunCommandsBase = RunCommandsBase = __decorate([
|
|
124
|
+
(0, global_1.RegisterClass)(RunCommandsBase)
|
|
125
|
+
], RunCommandsBase);
|
|
112
126
|
//# sourceMappingURL=runCommand.js.map
|
package/dist/runCommand.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runCommand.js","sourceRoot":"","sources":["../src/runCommand.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runCommand.js","sourceRoot":"","sources":["../src/runCommand.ts"],"names":[],"mappings":"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"}
|
package/dist/sql.d.ts
CHANGED
|
@@ -1,21 +1,26 @@
|
|
|
1
1
|
import { EntityInfo } from "@memberjunction/core";
|
|
2
2
|
import { DataSource } from "typeorm";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* The basic format is to have a directory for each schema, and within each directory
|
|
6
|
-
* the file name for each object has this format: <type>.<objectName>.<permissions>.<generated>.sql
|
|
7
|
-
* Where in the above format the <permissions> is only included if the isPermissions flag is true.
|
|
8
|
-
* For example:
|
|
9
|
-
* getDBObjectFileName('view', 'dbo', 'MyView', false, true) => 'dbo/MyView.view.generated.sql'
|
|
10
|
-
* getDBObjectFileName('view', 'dbo', 'MyView', true, true) => 'dbo/MyView.view.permissions.generated.sql'
|
|
11
|
-
* getDBObjectFileName('full_text_search_function', 'dbo', 'tableName', false, true) => 'dbo/tableName.fulltext.generated.sql'
|
|
12
|
-
* @param type
|
|
13
|
-
* @param schema
|
|
14
|
-
* @param objectName
|
|
4
|
+
* Base class for SQL Utility functions, you can sub-class this class to create your own SQL Utility functions/override existing functionality.
|
|
15
5
|
*/
|
|
16
|
-
export declare
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
6
|
+
export declare class SQLUtilityBase {
|
|
7
|
+
/**
|
|
8
|
+
* Returns a file name for a given DB Object given a type, schema and object name.
|
|
9
|
+
* The basic format is to have a directory for each schema, and within each directory
|
|
10
|
+
* the file name for each object has this format: <type>.<objectName>.<permissions>.<generated>.sql
|
|
11
|
+
* Where in the above format the <permissions> is only included if the isPermissions flag is true.
|
|
12
|
+
* For example:
|
|
13
|
+
* getDBObjectFileName('view', 'dbo', 'MyView', false, true) => 'dbo/MyView.view.generated.sql'
|
|
14
|
+
* getDBObjectFileName('view', 'dbo', 'MyView', true, true) => 'dbo/MyView.view.permissions.generated.sql'
|
|
15
|
+
* getDBObjectFileName('full_text_search_function', 'dbo', 'tableName', false, true) => 'dbo/tableName.fulltext.generated.sql'
|
|
16
|
+
* @param type
|
|
17
|
+
* @param schema
|
|
18
|
+
* @param objectName
|
|
19
|
+
*/
|
|
20
|
+
getDBObjectFileName(type: 'view' | 'sp' | 'full_text_search_function', schema: string, objectName: string, isPermissions: boolean, isGenerated: boolean): string;
|
|
21
|
+
recompileAllBaseViews(ds: DataSource, excludeSchemas: string[], applyPermissions: boolean): Promise<boolean>;
|
|
22
|
+
recompileSingleBaseView(ds: DataSource, entity: EntityInfo, applyPermissions: boolean): Promise<boolean>;
|
|
23
|
+
executeSQLFile(ds: DataSource, filePath: string, inChunks: boolean): Promise<boolean>;
|
|
24
|
+
executeSQLScript(ds: DataSource, scriptText: string, inChunks: boolean): Promise<boolean>;
|
|
25
|
+
}
|
|
21
26
|
//# sourceMappingURL=sql.d.ts.map
|
package/dist/sql.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../src/sql.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAY,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../src/sql.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAY,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAMrC;;GAEG;AACH,qBACa,cAAc;IAC3B;;;;;;;;;;;;OAYG;IACI,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,2BAA2B,EACxC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,OAAO,EACtB,WAAW,EAAE,OAAO,GAAG,MAAM;IAKpD,qBAAqB,CAAC,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA2B3G,uBAAuB,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAsBxG,cAAc,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtF,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CA6BvG"}
|
package/dist/sql.js
CHANGED
|
@@ -1,110 +1,121 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
2
8
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
9
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
10
|
};
|
|
5
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
12
|
+
exports.SQLUtilityBase = void 0;
|
|
7
13
|
const logging_1 = require("./logging");
|
|
8
14
|
const fs_1 = __importDefault(require("fs"));
|
|
9
15
|
const path_1 = __importDefault(require("path"));
|
|
10
16
|
const core_1 = require("@memberjunction/core");
|
|
11
17
|
const config_1 = require("./config");
|
|
12
18
|
const manageMetadata_1 = require("./manageMetadata");
|
|
19
|
+
const global_1 = require("@memberjunction/global");
|
|
13
20
|
/**
|
|
14
|
-
*
|
|
15
|
-
* The basic format is to have a directory for each schema, and within each directory
|
|
16
|
-
* the file name for each object has this format: <type>.<objectName>.<permissions>.<generated>.sql
|
|
17
|
-
* Where in the above format the <permissions> is only included if the isPermissions flag is true.
|
|
18
|
-
* For example:
|
|
19
|
-
* getDBObjectFileName('view', 'dbo', 'MyView', false, true) => 'dbo/MyView.view.generated.sql'
|
|
20
|
-
* getDBObjectFileName('view', 'dbo', 'MyView', true, true) => 'dbo/MyView.view.permissions.generated.sql'
|
|
21
|
-
* getDBObjectFileName('full_text_search_function', 'dbo', 'tableName', false, true) => 'dbo/tableName.fulltext.generated.sql'
|
|
22
|
-
* @param type
|
|
23
|
-
* @param schema
|
|
24
|
-
* @param objectName
|
|
21
|
+
* Base class for SQL Utility functions, you can sub-class this class to create your own SQL Utility functions/override existing functionality.
|
|
25
22
|
*/
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
23
|
+
let SQLUtilityBase = class SQLUtilityBase {
|
|
24
|
+
/**
|
|
25
|
+
* Returns a file name for a given DB Object given a type, schema and object name.
|
|
26
|
+
* The basic format is to have a directory for each schema, and within each directory
|
|
27
|
+
* the file name for each object has this format: <type>.<objectName>.<permissions>.<generated>.sql
|
|
28
|
+
* Where in the above format the <permissions> is only included if the isPermissions flag is true.
|
|
29
|
+
* For example:
|
|
30
|
+
* getDBObjectFileName('view', 'dbo', 'MyView', false, true) => 'dbo/MyView.view.generated.sql'
|
|
31
|
+
* getDBObjectFileName('view', 'dbo', 'MyView', true, true) => 'dbo/MyView.view.permissions.generated.sql'
|
|
32
|
+
* getDBObjectFileName('full_text_search_function', 'dbo', 'tableName', false, true) => 'dbo/tableName.fulltext.generated.sql'
|
|
33
|
+
* @param type
|
|
34
|
+
* @param schema
|
|
35
|
+
* @param objectName
|
|
36
|
+
*/
|
|
37
|
+
getDBObjectFileName(type, schema, objectName, isPermissions, isGenerated) {
|
|
38
|
+
return path_1.default.join(schema, `${objectName}.${type}${type === 'full_text_search_function' ? '.fulltext' : ''}${isPermissions ? '.permissions' : ''}${isGenerated ? '.generated' : ''}.sql`);
|
|
39
|
+
}
|
|
40
|
+
async recompileAllBaseViews(ds, excludeSchemas, applyPermissions) {
|
|
41
|
+
let bSuccess = true; // start off true
|
|
42
|
+
const md = new core_1.Metadata();
|
|
43
|
+
for (let i = 0; i < md.Entities.length; ++i) {
|
|
44
|
+
if (!excludeSchemas.includes(md.Entities[i].SchemaName)) {
|
|
45
|
+
// do this in two steps to ensure recompile isn't ever short circuited through code optimization
|
|
46
|
+
const e = md.Entities[i];
|
|
47
|
+
if (e.BaseViewGenerated && // only do this for entities that have a base view generated
|
|
48
|
+
e.IncludeInAPI && // only do this for entities that are included in the API
|
|
49
|
+
!e.VirtualEntity && // do not include virtual entities
|
|
50
|
+
!manageMetadata_1.ManageMetadataBase.newEntityList.includes(e.Name)) {
|
|
51
|
+
// only do this if base view generated and for NON-virtual entities,
|
|
52
|
+
// custom base views should be defined in the BEFORE SQL Scripts
|
|
53
|
+
// and NOT for newly created entities
|
|
54
|
+
bSuccess = await this.recompileSingleBaseView(ds, e, applyPermissions) && bSuccess;
|
|
55
|
+
}
|
|
45
56
|
}
|
|
46
57
|
}
|
|
58
|
+
if (!bSuccess) {
|
|
59
|
+
// temp thing for debug, let's dump the new entity list to see what's up
|
|
60
|
+
console.warn('New Entity List:');
|
|
61
|
+
console.warn(' ' + manageMetadata_1.ManageMetadataBase.newEntityList.join('\n '));
|
|
62
|
+
}
|
|
63
|
+
return bSuccess;
|
|
47
64
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const recompileResult = await executeSQLFile(ds, filePath, true);
|
|
61
|
-
if (applyPermissions) {
|
|
62
|
-
// now apply permissions
|
|
63
|
-
const permissionsFile = getDBObjectFileName('view', entity.SchemaName, entity.BaseView, true, entity.BaseViewGenerated);
|
|
64
|
-
const permissionsFilePath = path_1.default.join((0, config_1.outputDir)('SQL', true), permissionsFile);
|
|
65
|
-
if (fs_1.default.existsSync(permissionsFilePath)) {
|
|
66
|
-
return await executeSQLFile(ds, permissionsFilePath, true) && recompileResult;
|
|
65
|
+
async recompileSingleBaseView(ds, entity, applyPermissions) {
|
|
66
|
+
const file = this.getDBObjectFileName('view', entity.SchemaName, entity.BaseView, false, entity.BaseViewGenerated);
|
|
67
|
+
const filePath = path_1.default.join((0, config_1.outputDir)('SQL', true), file);
|
|
68
|
+
if (fs_1.default.existsSync(filePath)) {
|
|
69
|
+
const recompileResult = await this.executeSQLFile(ds, filePath, true);
|
|
70
|
+
if (applyPermissions) {
|
|
71
|
+
// now apply permissions
|
|
72
|
+
const permissionsFile = this.getDBObjectFileName('view', entity.SchemaName, entity.BaseView, true, entity.BaseViewGenerated);
|
|
73
|
+
const permissionsFilePath = path_1.default.join((0, config_1.outputDir)('SQL', true), permissionsFile);
|
|
74
|
+
if (fs_1.default.existsSync(permissionsFilePath)) {
|
|
75
|
+
return await this.executeSQLFile(ds, permissionsFilePath, true) && recompileResult;
|
|
76
|
+
}
|
|
67
77
|
}
|
|
78
|
+
else
|
|
79
|
+
return recompileResult;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
(0, logging_1.logError)(` Error Recompiling Base View: File ${filePath} does not exist`);
|
|
83
|
+
return false;
|
|
68
84
|
}
|
|
69
|
-
else
|
|
70
|
-
return recompileResult;
|
|
71
85
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return
|
|
86
|
+
async executeSQLFile(ds, filePath, inChunks) {
|
|
87
|
+
const scriptSQL = fs_1.default.readFileSync(filePath, 'utf-8');
|
|
88
|
+
return this.executeSQLScript(ds, scriptSQL, inChunks);
|
|
75
89
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
try {
|
|
94
|
-
await ds.query(scriptChunks[i]); // + '\n GO \n');
|
|
90
|
+
async executeSQLScript(ds, scriptText, inChunks) {
|
|
91
|
+
try {
|
|
92
|
+
if (!scriptText || scriptText.length == 0)
|
|
93
|
+
return true; // nothing to do
|
|
94
|
+
let scriptChunks = [scriptText];
|
|
95
|
+
let bSuccess = true;
|
|
96
|
+
if (inChunks)
|
|
97
|
+
scriptChunks = scriptText.split('GO');
|
|
98
|
+
await ds.transaction(async () => {
|
|
99
|
+
for (let i = 0; i < scriptChunks.length; ++i) {
|
|
100
|
+
try {
|
|
101
|
+
await ds.query(scriptChunks[i]); // + '\n GO \n');
|
|
102
|
+
}
|
|
103
|
+
catch (innerE) {
|
|
104
|
+
(0, logging_1.logError)(innerE);
|
|
105
|
+
bSuccess = false;
|
|
106
|
+
}
|
|
95
107
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
catch (e) {
|
|
105
|
-
(0, logging_1.logError)(e);
|
|
106
|
-
return false;
|
|
108
|
+
});
|
|
109
|
+
return bSuccess;
|
|
110
|
+
}
|
|
111
|
+
catch (e) {
|
|
112
|
+
(0, logging_1.logError)(e);
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
107
115
|
}
|
|
108
|
-
}
|
|
109
|
-
exports.
|
|
116
|
+
};
|
|
117
|
+
exports.SQLUtilityBase = SQLUtilityBase;
|
|
118
|
+
exports.SQLUtilityBase = SQLUtilityBase = __decorate([
|
|
119
|
+
(0, global_1.RegisterClass)(SQLUtilityBase)
|
|
120
|
+
], SQLUtilityBase);
|
|
110
121
|
//# sourceMappingURL=sql.js.map
|
package/dist/sql.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../src/sql.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../src/sql.ts"],"names":[],"mappings":"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"}
|