@memberjunction/codegen-lib 0.9.2

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 (50) hide show
  1. package/dist/angular_client_codegen.d.ts +2 -0
  2. package/dist/angular_client_codegen.js +360 -0
  3. package/dist/angular_client_codegen.js.map +1 -0
  4. package/dist/config.d.ts +101 -0
  5. package/dist/config.js +55 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/db.d.ts +3 -0
  8. package/dist/db.js +19 -0
  9. package/dist/db.js.map +1 -0
  10. package/dist/dbSchema.d.ts +3 -0
  11. package/dist/dbSchema.js +143 -0
  12. package/dist/dbSchema.js.map +1 -0
  13. package/dist/entity_subclasses_codegen.d.ts +4 -0
  14. package/dist/entity_subclasses_codegen.js +84 -0
  15. package/dist/entity_subclasses_codegen.js.map +1 -0
  16. package/dist/graphql_client_codegen.d.ts +4 -0
  17. package/dist/graphql_client_codegen.js +161 -0
  18. package/dist/graphql_client_codegen.js.map +1 -0
  19. package/dist/graphql_server_codegen.d.ts +5 -0
  20. package/dist/graphql_server_codegen.js +509 -0
  21. package/dist/graphql_server_codegen.js.map +1 -0
  22. package/dist/index.d.ts +15 -0
  23. package/dist/index.js +32 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/logging.d.ts +2 -0
  26. package/dist/logging.js +36 -0
  27. package/dist/logging.js.map +1 -0
  28. package/dist/manageMetadata.d.ts +9 -0
  29. package/dist/manageMetadata.js +603 -0
  30. package/dist/manageMetadata.js.map +1 -0
  31. package/dist/react_client_codegen.d.ts +4 -0
  32. package/dist/react_client_codegen.js +147 -0
  33. package/dist/react_client_codegen.js.map +1 -0
  34. package/dist/runCodeGen.d.ts +1 -0
  35. package/dist/runCodeGen.js +213 -0
  36. package/dist/runCodeGen.js.map +1 -0
  37. package/dist/runCommand.d.ts +9 -0
  38. package/dist/runCommand.js +111 -0
  39. package/dist/runCommand.js.map +1 -0
  40. package/dist/sql.d.ts +6 -0
  41. package/dist/sql.js +78 -0
  42. package/dist/sql.js.map +1 -0
  43. package/dist/sql_codegen.d.ts +11 -0
  44. package/dist/sql_codegen.js +753 -0
  45. package/dist/sql_codegen.js.map +1 -0
  46. package/dist/util.d.ts +4 -0
  47. package/dist/util.js +36 -0
  48. package/dist/util.js.map +1 -0
  49. package/package.json +28 -0
  50. package/readme.md +3 -0
@@ -0,0 +1,147 @@
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.generateReactEntityPagesFile = exports.generateSingleEntityReactFile = exports.generateReactCode = void 0;
7
+ const logging_1 = require("./logging");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ function generateReactCode(entities, directory) {
11
+ try {
12
+ for (let i = 0; i < entities.length; ++i) {
13
+ const entity = entities[i];
14
+ if (entity._hasIdField && entity.IncludeInAPI)
15
+ fs_1.default.writeFileSync(path_1.default.join(directory, `${entity.ClassName}Page.tsx`), generateSingleEntityReactFile(entity));
16
+ }
17
+ const entityPagesOutput = generateReactEntityPagesFile(entities);
18
+ fs_1.default.writeFileSync(path_1.default.join(directory, 'EntityPages.ts'), entityPagesOutput);
19
+ return true;
20
+ }
21
+ catch (err) {
22
+ (0, logging_1.logError)(err);
23
+ return false;
24
+ }
25
+ }
26
+ exports.generateReactCode = generateReactCode;
27
+ function generateSingleEntityReactFile(entity) {
28
+ let lCaseClassName = entity.ClassName.toLowerCase();
29
+ let sOutput = `import { useSingle${entity.ClassName}Query } from '../api';
30
+ import { SingleEntityPage } from '../components/organisms/SingleEntityPage';
31
+ import { DateTime } from 'luxon';
32
+ import { formatCurrency } from '../system/util';
33
+ import { ExternalUrl, Field, useSingleEntity, Email, EntityLink, EntityFieldDisplayName, BodyText } from '../components';
34
+ import { ${entity.ClassName} } from '../api';
35
+
36
+ export const ${entity.ClassName}Page = ({ RecordID }: { RecordID: number }) => {
37
+ return (
38
+ <SingleEntityPage
39
+ RecordID={RecordID}
40
+ EntityName="${entity.Name}"
41
+ queryHook={useSingle${entity.ClassName}Query}
42
+ Details={<${entity.ClassName}Details />}
43
+ />
44
+ );
45
+ };
46
+
47
+ export const ${entity.ClassName}Details = () => {
48
+ const [${lCaseClassName}] = useSingleEntity<${entity.ClassName}>();
49
+ return (
50
+ <div>
51
+ ${generateFormFields(entity)}
52
+ </div>
53
+ );
54
+ };
55
+ `;
56
+ return sOutput;
57
+ }
58
+ exports.generateSingleEntityReactFile = generateSingleEntityReactFile;
59
+ function generateFormFields(entity) {
60
+ let sOutput = '';
61
+ try {
62
+ for (let i = 0; i < entity.Fields.length; ++i) {
63
+ sOutput += (sOutput.length == 0 ? '' : '\n') +
64
+ generateSingleFieldOutput(entity, entity.Fields[i]);
65
+ }
66
+ }
67
+ catch (err) {
68
+ console.error(err);
69
+ }
70
+ finally {
71
+ return sOutput;
72
+ }
73
+ }
74
+ function generateSingleFieldOutput(entity, field) {
75
+ const type = field.Type.toLowerCase().trim();
76
+ const lCaseClassName = entity.ClassName.toLowerCase();
77
+ const label = `label={<EntityFieldDisplayName Entity="${entity.Name}" EntityField="${field.Name}" />}`;
78
+ let value = '';
79
+ if ((type === 'datetime' || field.Type === 'datetimeoffset'))
80
+ value = `${lCaseClassName}?.${field.Name} &&
81
+ DateTime.fromMillis(${lCaseClassName}.${field.Name}).toLocaleString(DateTime.DATETIME_SHORT)`;
82
+ else if (field.ExtendedType !== null && field.ExtendedType.toLowerCase().trim() == 'url') {
83
+ value = `<ExternalUrl>{${lCaseClassName}?.${field.Name}}</ExternalUrl>`;
84
+ }
85
+ else if (field.ExtendedType !== null && field.ExtendedType.toLowerCase().trim() == 'email') {
86
+ value = `<Email>{${lCaseClassName}?.${field.Name}}</Email>`;
87
+ }
88
+ else if (field.RelatedEntityID != null && field.RelatedEntityFieldName != null) {
89
+ value = `<EntityLink Entity="${entity.Name}" EntityField="${field.Name}">{${lCaseClassName}?.${field.Name}}</EntityLink>`;
90
+ }
91
+ else if (((type === 'nvarchar' || type === 'varchar') && field.Length == -1) ||
92
+ (type === 'text' || type === 'ntext')) {
93
+ // nvarchar max
94
+ value = `<BodyText>{${lCaseClassName}?.${field.Name}}</BodyText>`;
95
+ }
96
+ else if (type === 'money') {
97
+ value = `${lCaseClassName}?.${field.Name} !== undefined
98
+ ? formatCurrency(Math.floor(${lCaseClassName}.${field.Name}), {
99
+ hideZeroCents: true,
100
+ }) : undefined`;
101
+ }
102
+ else
103
+ value = `${lCaseClassName}?.${field.Name}`;
104
+ return ` <Field ${label} value={${value}} />`;
105
+ }
106
+ function generateReactEntityPagesFile(entities) {
107
+ const importText = generateReactEntityPageImportText(entities);
108
+ const mapText = generateReactEntityPageMapText(entities);
109
+ return `import { FC } from 'react';
110
+ ${importText}
111
+ export const EntityPages: Record<string, FC<{ RecordID: number }>> = {
112
+ ${mapText}
113
+ };
114
+ `;
115
+ }
116
+ exports.generateReactEntityPagesFile = generateReactEntityPagesFile;
117
+ function generateReactEntityPageImportText(entities) {
118
+ let sOutput = '';
119
+ try {
120
+ for (let i = 0; i < entities.length; ++i) {
121
+ if (entities[i].IncludeInAPI && entities[i]._hasIdField)
122
+ sOutput += `import { ${entities[i].ClassName}Page } from './${entities[i].ClassName}Page';\n`;
123
+ }
124
+ }
125
+ catch (err) {
126
+ console.error(err);
127
+ }
128
+ finally {
129
+ return sOutput;
130
+ }
131
+ }
132
+ function generateReactEntityPageMapText(entities) {
133
+ let sOutput = '';
134
+ try {
135
+ for (let i = 0; i < entities.length; ++i) {
136
+ if (entities[i].IncludeInAPI && entities[i]._hasIdField)
137
+ sOutput += (sOutput.length == 0 ? '' : ',\n') + ` ${entities[i].CodeName}: ${entities[i].ClassName}Page`;
138
+ }
139
+ }
140
+ catch (err) {
141
+ console.error(err);
142
+ }
143
+ finally {
144
+ return sOutput;
145
+ }
146
+ }
147
+ //# sourceMappingURL=react_client_codegen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react_client_codegen.js","sourceRoot":"","sources":["../src/react_client_codegen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function runMemberJunctionCodeGeneration(): Promise<void>;
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.runMemberJunctionCodeGeneration = void 0;
30
+ const dotenv_1 = __importDefault(require("dotenv"));
31
+ dotenv_1.default.config(); // need to do this before the other imports
32
+ const react_client_codegen_1 = require("./react_client_codegen");
33
+ const graphql_server_codegen_1 = require("./graphql_server_codegen");
34
+ const graphql_client_codegen_1 = require("./graphql_client_codegen");
35
+ const sql_codegen_1 = require("./sql_codegen");
36
+ const entity_subclasses_codegen_1 = require("./entity_subclasses_codegen");
37
+ const sqlserver_dataprovider_1 = require("@memberjunction/sqlserver-dataprovider");
38
+ const db_1 = __importDefault(require("./db"));
39
+ const manageMetadata_1 = require("./manageMetadata");
40
+ const config_1 = require("./config");
41
+ const logging_1 = require("./logging");
42
+ const MJ = __importStar(require("@memberjunction/core"));
43
+ const runCommand_1 = require("./runCommand");
44
+ const dbSchema_1 = require("./dbSchema");
45
+ const angular_client_codegen_1 = require("./angular_client_codegen");
46
+ const sqlserver_dataprovider_2 = require("@memberjunction/sqlserver-dataprovider");
47
+ async function runMemberJunctionCodeGeneration() {
48
+ try {
49
+ const startTime = new Date();
50
+ (0, logging_1.logStatus)("\n\nSTARTING MJ CodeGen Run... @ " + startTime.toLocaleString());
51
+ /****************************************************************************************
52
+ // First, setup the data source and make sure the metadata and related stuff for MJCore is initialized
53
+ ****************************************************************************************/
54
+ (0, logging_1.logStatus)("Initializing Data Source...");
55
+ await db_1.default.initialize()
56
+ .then(() => {
57
+ (0, logging_1.logStatus)("Data Source has been initialized!");
58
+ })
59
+ .catch((err) => {
60
+ (0, logging_1.logError)("Error during Data Source initialization", err);
61
+ });
62
+ const config = new sqlserver_dataprovider_2.SQLServerProviderConfigData(db_1.default, '', (0, config_1.mj_core_schema)(), 0);
63
+ await (0, sqlserver_dataprovider_1.setupSQLServerClient)(config);
64
+ // get the entity metadata
65
+ const md = new MJ.Metadata();
66
+ if (md.Entities.length === 0) {
67
+ (0, logging_1.logError)('No entities found in metadata, exiting...'); // TODO: add a way to generate the metadata if it doesn't exist
68
+ process.exit(1);
69
+ }
70
+ /****************************************************************************************
71
+ // STEP 0 --- Precursor Step execute any commands specified in the config file
72
+ ****************************************************************************************/
73
+ const beforeCommands = (0, config_1.commands)('BEFORE');
74
+ if (beforeCommands && beforeCommands.length > 0) {
75
+ (0, logging_1.logStatus)('Executing BEFORE commands...');
76
+ const results = await (0, runCommand_1.runCommands)(beforeCommands);
77
+ if (results.some(r => !r.success))
78
+ (0, logging_1.logError)('ERROR running one or more BEFORE commands');
79
+ }
80
+ /****************************************************************************************
81
+ // STEP 0.1 --- Execute any before SQL Scripts specified in the config file
82
+ ****************************************************************************************/
83
+ if (!await (0, sql_codegen_1.runCustomSQLScripts)(db_1.default, 'before-all'))
84
+ (0, logging_1.logError)('ERROR running before-all SQL Scripts');
85
+ /****************************************************************************************
86
+ // STEP 1 - Manage Metadata - including generating new metadata as required
87
+ ****************************************************************************************/
88
+ (0, logging_1.logStatus)('Managing Metadata...');
89
+ if (!await (0, manageMetadata_1.manageMetadata)(db_1.default))
90
+ (0, logging_1.logError)('ERROR managing metadata');
91
+ /****************************************************************************************
92
+ // STEP 2 - SQL Script Generation
93
+ ****************************************************************************************/
94
+ const sqlOutputDir = (0, config_1.outputDir)('SQL');
95
+ if (sqlOutputDir) {
96
+ (0, logging_1.logStatus)('Managing SQL Scripts and Execution...');
97
+ if (!await (0, sql_codegen_1.manageSQLScriptsAndExecution)(db_1.default, md.Entities, sqlOutputDir))
98
+ (0, logging_1.logError)('Error managing SQL scripts and execution');
99
+ }
100
+ else
101
+ (0, logging_1.logStatus)('SQL output directory NOT found in config file, skipping...');
102
+ /****************************************************************************************
103
+ // STEP 3 - GraphQL Server Code Gen
104
+ ****************************************************************************************/
105
+ const graphqlOutputDir = (0, config_1.outputDir)('GraphQLServer');
106
+ if (graphqlOutputDir) {
107
+ // generate the GraphQL server code
108
+ (0, logging_1.logStatus)('Generating GraphQL Server Code...');
109
+ if (!(0, graphql_server_codegen_1.generateGraphQLServerCode)(md.Entities, graphqlOutputDir))
110
+ (0, logging_1.logError)('Error generating GraphQL server code');
111
+ }
112
+ else
113
+ (0, logging_1.logStatus)('GraphQL server output directory NOT found in config file, skipping...');
114
+ /****************************************************************************************
115
+ // STEP 4 - Core Entity Subclass Code Gen
116
+ ****************************************************************************************/
117
+ const coreEntitySubClassOutputDir = (0, config_1.outputDir)('CoreEntitySubClasses');
118
+ if (coreEntitySubClassOutputDir && coreEntitySubClassOutputDir.length > 0) {
119
+ // generate the entity subclass code
120
+ (0, logging_1.logStatus)('Generating CORE Entity Subclass Code...');
121
+ const coreEntities = md.Entities.filter(e => e.SchemaName.trim().toLowerCase() === config_1.mjCoreSchema.trim().toLowerCase());
122
+ if (!(0, entity_subclasses_codegen_1.generateAllEntitySubClasses)(coreEntities, coreEntitySubClassOutputDir))
123
+ (0, logging_1.logError)('Error generating entity subclass code');
124
+ }
125
+ else
126
+ (0, logging_1.logStatus)('Entity subclass output directory NOT found in config file, skipping...');
127
+ /****************************************************************************************
128
+ // STEP 4.1 - Entity Subclass Code Gen
129
+ ****************************************************************************************/
130
+ const entitySubClassOutputDir = (0, config_1.outputDir)('EntitySubClasses');
131
+ if (entitySubClassOutputDir) {
132
+ // generate the entity subclass code
133
+ (0, logging_1.logStatus)('Generating Entity Subclass Code...');
134
+ const nonCoreEntities = md.Entities.filter(e => e.SchemaName.trim().toLowerCase() !== config_1.mjCoreSchema.trim().toLowerCase());
135
+ if (!(0, entity_subclasses_codegen_1.generateAllEntitySubClasses)(nonCoreEntities, entitySubClassOutputDir))
136
+ (0, logging_1.logError)('Error generating entity subclass code');
137
+ }
138
+ else
139
+ (0, logging_1.logStatus)('Entity subclass output directory NOT found in config file, skipping...');
140
+ /****************************************************************************************
141
+ // STEP 5 - GraphQL Client Code Gen
142
+ ****************************************************************************************/
143
+ const graphqlClientOutputDir = (0, config_1.outputDir)('GraphQLClient');
144
+ if (graphqlClientOutputDir) {
145
+ // generate the GraphQL client code
146
+ (0, logging_1.logStatus)('Generating GraphQL Client Code...');
147
+ if (!(0, graphql_client_codegen_1.generateGraphQLClientCode)(md.Entities, graphqlClientOutputDir))
148
+ (0, logging_1.logError)('Error generating GraphQL client code');
149
+ }
150
+ else
151
+ (0, logging_1.logStatus)('GraphQL client output directory NOT found in config file, skipping...');
152
+ /****************************************************************************************
153
+ // STEP 6 - React Code Gen
154
+ ****************************************************************************************/
155
+ const reactOutputDir = (0, config_1.outputDir)('React');
156
+ if (reactOutputDir) {
157
+ // generate the React
158
+ (0, logging_1.logStatus)('Generating React Code...');
159
+ if (!(0, react_client_codegen_1.generateReactCode)(md.Entities, reactOutputDir))
160
+ (0, logging_1.logError)('Error generating React code');
161
+ }
162
+ else
163
+ (0, logging_1.logStatus)('React output directory NOT found in config file, skipping...');
164
+ /****************************************************************************************
165
+ // STEP 7 - Angular Code Gen
166
+ ****************************************************************************************/
167
+ const angularOutputDir = (0, config_1.outputDir)('Angular');
168
+ if (angularOutputDir) {
169
+ // generate the Angular client code
170
+ (0, logging_1.logStatus)('Generating Angular Code...');
171
+ if (!(0, angular_client_codegen_1.generateAngularCode)(md.Entities, angularOutputDir))
172
+ (0, logging_1.logError)('Error generating Angular code');
173
+ }
174
+ else
175
+ (0, logging_1.logStatus)('Angular output directory NOT found in config file, skipping...');
176
+ /****************************************************************************************
177
+ // STEP 8 - Database Schema Output in JSON - for documentation and can be used by AI/etc.
178
+ ****************************************************************************************/
179
+ const dbSchemaOutputDir = (0, config_1.outputDir)('DBSchemaJSON');
180
+ if (dbSchemaOutputDir) {
181
+ // generate the GraphQL client code
182
+ (0, logging_1.logStatus)('Generating Database Schema JSON Output...');
183
+ if (!(0, dbSchema_1.generateDBSchemaJSONOutput)(md.Entities, dbSchemaOutputDir))
184
+ (0, logging_1.logError)('Error generating Database Schema JSON Output');
185
+ }
186
+ else
187
+ (0, logging_1.logStatus)('DB Schema output directory NOT found in config file, skipping...');
188
+ /****************************************************************************************
189
+ // STEP X --- Finalization Step - execute any AFTER commands specified in the config file
190
+ ****************************************************************************************/
191
+ const afterCommands = (0, config_1.commands)('AFTER');
192
+ if (afterCommands && afterCommands.length > 0) {
193
+ (0, logging_1.logStatus)('Executing AFTER commands...');
194
+ const results = await (0, runCommand_1.runCommands)(afterCommands);
195
+ if (results.some(r => !r.success))
196
+ (0, logging_1.logError)('ERROR running one or more AFTER commands');
197
+ }
198
+ /****************************************************************************************
199
+ // STEP X.1 --- Execute any AFTER SQL Scripts specified in the config file
200
+ ****************************************************************************************/
201
+ if (!await (0, sql_codegen_1.runCustomSQLScripts)(db_1.default, 'after-all'))
202
+ (0, logging_1.logError)('ERROR running after-all SQL Scripts');
203
+ (0, logging_1.logStatus)(md.Entities.length + ' entities processed and outputed to configured directories');
204
+ (0, logging_1.logStatus)("MJ CodeGen Run Complete! @ " + new Date().toLocaleString() + " (" + (new Date().getTime() - startTime.getTime()) / 1000 + " seconds)");
205
+ process.exit(0); // wrap it up, 0 means success
206
+ }
207
+ catch (e) {
208
+ (0, logging_1.logError)(e);
209
+ process.exit(1); // error code
210
+ }
211
+ }
212
+ exports.runMemberJunctionCodeGeneration = runMemberJunctionCodeGeneration;
213
+ //# sourceMappingURL=runCodeGen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runCodeGen.js","sourceRoot":"","sources":["../src/runCodeGen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { CommandInfo } from './config';
2
+ export declare function runCommands(commands: CommandInfo[]): Promise<CommandExecutionResult[]>;
3
+ export type CommandExecutionResult = {
4
+ output: string;
5
+ error: string;
6
+ success: boolean;
7
+ elapsedTime: number;
8
+ };
9
+ export declare function runCommand(command: CommandInfo): Promise<CommandExecutionResult>;
@@ -0,0 +1,111 @@
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.runCommand = exports.runCommands = void 0;
7
+ const child_process_1 = require("child_process");
8
+ const logging_1 = require("./logging");
9
+ const path_1 = __importDefault(require("path"));
10
+ const treeKill = require("tree-kill");
11
+ async function runCommands(commands) {
12
+ try {
13
+ const results = [];
14
+ for (const command of commands) {
15
+ results.push(await runCommand(command));
16
+ }
17
+ return results;
18
+ }
19
+ catch (e) {
20
+ (0, logging_1.logError)(e);
21
+ throw e;
22
+ }
23
+ }
24
+ exports.runCommands = runCommands;
25
+ async function runCommand(command) {
26
+ let cp;
27
+ try {
28
+ let output = '';
29
+ let startTime = new Date();
30
+ let bErrors = false;
31
+ const commandName = command.command + (process.platform.indexOf('win') >= 0 ? '.cmd' : '');
32
+ const absPath = path_1.default.resolve(command.workingDirectory);
33
+ (0, logging_1.logStatus)(`STARTING COMMAND: "${command.command}" in location "${absPath}" with args "${command.args.join(' ')}"`);
34
+ const commandExecution = new Promise((resolve, reject) => {
35
+ cp = (0, child_process_1.spawn)(commandName, command.args, {
36
+ cwd: absPath,
37
+ stdio: 'pipe',
38
+ });
39
+ cp.stdout.on('data', (data) => {
40
+ output += data.toString();
41
+ });
42
+ cp.stderr.on('data', (data) => {
43
+ const elapsedTime = new Date().getTime() - startTime.getTime();
44
+ const message = data.toString();
45
+ output += message;
46
+ if (message.toUpperCase().indexOf('ERROR') >= 0) {
47
+ (0, logging_1.logError)(`COMMAND: "${command.command}" FAILED: ${elapsedTime / 1000} seconds`);
48
+ bErrors = true;
49
+ }
50
+ });
51
+ cp.on('error', (error) => {
52
+ const elapsedTime = new Date().getTime() - startTime.getTime();
53
+ (0, logging_1.logError)(`COMMAND: "${command.command}" FAILED: ${elapsedTime / 1000} seconds`);
54
+ if (!cp.killed)
55
+ treeKill(cp.pid);
56
+ reject(error);
57
+ });
58
+ cp.on('close', (code) => {
59
+ if (code === 0) {
60
+ const elapsedTime = new Date().getTime() - startTime.getTime();
61
+ (0, logging_1.logStatus)(`COMMAND: "${command.command}" COMPLETED SUCCESSFULLY: ${elapsedTime / 1000} seconds`);
62
+ resolve({ output: output,
63
+ error: null,
64
+ success: !bErrors,
65
+ elapsedTime: elapsedTime
66
+ });
67
+ }
68
+ else {
69
+ reject(new Error(`Process exited with code ${code}`));
70
+ }
71
+ });
72
+ });
73
+ if (command.timeout && command.timeout > 0) {
74
+ const timeoutPromise = new Promise((resolve, reject) => {
75
+ setTimeout(() => {
76
+ const elapsedTime = new Date().getTime() - startTime.getTime();
77
+ if (!cp.killed) {
78
+ treeKill(cp.pid);
79
+ (0, logging_1.logStatus)(`COMMAND: "${command.command}" COMPLETED ${bErrors ? ' - FAILED' : ' - SUCCESS'} IN ${elapsedTime / 1000} seconds`);
80
+ output += `Process killed after ${command.timeout} ms`;
81
+ }
82
+ resolve({
83
+ output: output,
84
+ error: null,
85
+ success: !bErrors,
86
+ elapsedTime: elapsedTime
87
+ });
88
+ }, command.timeout);
89
+ });
90
+ return Promise.race([
91
+ commandExecution,
92
+ timeoutPromise,
93
+ ]);
94
+ }
95
+ else
96
+ return commandExecution;
97
+ }
98
+ catch (e) {
99
+ (0, logging_1.logError)(e);
100
+ try {
101
+ if (cp && !cp.killed)
102
+ treeKill(cp.pid);
103
+ }
104
+ catch (e) {
105
+ (0, logging_1.logError)(e);
106
+ }
107
+ throw e;
108
+ }
109
+ }
110
+ exports.runCommand = runCommand;
111
+ //# sourceMappingURL=runCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runCommand.js","sourceRoot":"","sources":["../src/runCommand.ts"],"names":[],"mappings":"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"}
package/dist/sql.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { EntityInfo } from "@memberjunction/core";
2
+ import { DataSource } from "typeorm";
3
+ export declare function recompileAllBaseViews(ds: DataSource): Promise<boolean>;
4
+ export declare function recompileSingleBaseView(ds: DataSource, entity: EntityInfo): Promise<boolean>;
5
+ export declare function executeSQLFile(ds: DataSource, filePath: string, inChunks: boolean): Promise<boolean>;
6
+ export declare function executeSQLScript(ds: DataSource, scriptText: string, inChunks: boolean): Promise<boolean>;
package/dist/sql.js ADDED
@@ -0,0 +1,78 @@
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.executeSQLScript = exports.executeSQLFile = exports.recompileSingleBaseView = exports.recompileAllBaseViews = void 0;
7
+ const logging_1 = require("./logging");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const core_1 = require("@memberjunction/core");
11
+ const config_1 = require("./config");
12
+ const manageMetadata_1 = require("./manageMetadata");
13
+ async function recompileAllBaseViews(ds) {
14
+ let bSuccess = true; // start off true
15
+ const md = new core_1.Metadata();
16
+ for (let i = 0; i < md.Entities.length; ++i) {
17
+ // do this in two steps to ensure recompile isn't ever short circuited through code optimization
18
+ const e = md.Entities[i];
19
+ if (e.BaseViewGenerated &&
20
+ !e.VirtualEntity &&
21
+ !manageMetadata_1.newEntityList.includes(e.Name)) {
22
+ // only do this if base view generated and for NON-virtual entities,
23
+ // custom base views should be defined in the BEFORE SQL Scripts
24
+ // and NOT for newly created entities
25
+ bSuccess = await recompileSingleBaseView(ds, e) && bSuccess;
26
+ }
27
+ }
28
+ if (!bSuccess) {
29
+ // temp thing for debug, let's dump the new entity list to see what's up
30
+ console.warn('New Entity List:');
31
+ console.warn(' ' + manageMetadata_1.newEntityList.join('\n '));
32
+ }
33
+ return bSuccess;
34
+ }
35
+ exports.recompileAllBaseViews = recompileAllBaseViews;
36
+ async function recompileSingleBaseView(ds, entity) {
37
+ const filePath = path_1.default.join((0, config_1.outputDir)('SQL'), `${entity.BaseView}${entity.BaseViewGenerated ? '.generated' : ''}.sql`);
38
+ if (fs_1.default.existsSync(filePath))
39
+ return await executeSQLFile(ds, filePath, true);
40
+ else {
41
+ (0, logging_1.logError)(` Error Recompiling Base View: File ${filePath} does not exist`);
42
+ return false;
43
+ }
44
+ }
45
+ exports.recompileSingleBaseView = recompileSingleBaseView;
46
+ async function executeSQLFile(ds, filePath, inChunks) {
47
+ const scriptSQL = fs_1.default.readFileSync(filePath, 'utf-8');
48
+ return executeSQLScript(ds, scriptSQL, inChunks);
49
+ }
50
+ exports.executeSQLFile = executeSQLFile;
51
+ async function executeSQLScript(ds, scriptText, inChunks) {
52
+ try {
53
+ if (!scriptText || scriptText.length == 0)
54
+ return true; // nothing to do
55
+ let scriptChunks = [scriptText];
56
+ let bSuccess = true;
57
+ if (inChunks)
58
+ scriptChunks = scriptText.split('GO');
59
+ await ds.transaction(async () => {
60
+ for (let i = 0; i < scriptChunks.length; ++i) {
61
+ try {
62
+ await ds.query(scriptChunks[i]); // + '\n GO \n');
63
+ }
64
+ catch (innerE) {
65
+ (0, logging_1.logError)(innerE);
66
+ bSuccess = false;
67
+ }
68
+ }
69
+ });
70
+ return bSuccess;
71
+ }
72
+ catch (e) {
73
+ (0, logging_1.logError)(e);
74
+ return false;
75
+ }
76
+ }
77
+ exports.executeSQLScript = executeSQLScript;
78
+ //# sourceMappingURL=sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql.js","sourceRoot":"","sources":["../src/sql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { EntityInfo } from '@memberjunction/core';
2
+ import { DataSource } from 'typeorm';
3
+ export declare function manageSQLScriptsAndExecution(ds: DataSource, entities: EntityInfo[], directory: string): Promise<boolean>;
4
+ export declare function runCustomSQLScripts(ds: DataSource, when: string): Promise<boolean>;
5
+ export declare function applyPermissions(ds: DataSource, entities: EntityInfo[], directory: string, batchSize?: number): Promise<boolean>;
6
+ export declare function generateAndExecuteAllEntitiesSQLToSeparateFiles(ds: DataSource, entities: EntityInfo[], directory: string, batchSize?: number): Promise<boolean>;
7
+ export declare function generateAndExecuteSingleEntitySQLToSeparateFiles(ds: DataSource, entity: EntityInfo, entities: EntityInfo[], directory: string): Promise<boolean>;
8
+ export declare function generateSingleEntitySQLToSeparateFiles(ds: DataSource, entity: EntityInfo, entities: EntityInfo[], directory: string): Promise<string>;
9
+ export declare function generateEntitySQL(ds: DataSource, entity: EntityInfo, entities: EntityInfo[]): Promise<string>;
10
+ export declare function generateAllEntitiesSQLFileHeader(): string;
11
+ export declare function generateSingleEntitySQLFileHeader(entity: EntityInfo, itemName: string): string;