@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.
- package/dist/angular_client_codegen.d.ts +2 -0
- package/dist/angular_client_codegen.js +360 -0
- package/dist/angular_client_codegen.js.map +1 -0
- package/dist/config.d.ts +101 -0
- package/dist/config.js +55 -0
- package/dist/config.js.map +1 -0
- package/dist/db.d.ts +3 -0
- package/dist/db.js +19 -0
- package/dist/db.js.map +1 -0
- package/dist/dbSchema.d.ts +3 -0
- package/dist/dbSchema.js +143 -0
- package/dist/dbSchema.js.map +1 -0
- package/dist/entity_subclasses_codegen.d.ts +4 -0
- package/dist/entity_subclasses_codegen.js +84 -0
- package/dist/entity_subclasses_codegen.js.map +1 -0
- package/dist/graphql_client_codegen.d.ts +4 -0
- package/dist/graphql_client_codegen.js +161 -0
- package/dist/graphql_client_codegen.js.map +1 -0
- package/dist/graphql_server_codegen.d.ts +5 -0
- package/dist/graphql_server_codegen.js +509 -0
- package/dist/graphql_server_codegen.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/logging.d.ts +2 -0
- package/dist/logging.js +36 -0
- package/dist/logging.js.map +1 -0
- package/dist/manageMetadata.d.ts +9 -0
- package/dist/manageMetadata.js +603 -0
- package/dist/manageMetadata.js.map +1 -0
- package/dist/react_client_codegen.d.ts +4 -0
- package/dist/react_client_codegen.js +147 -0
- package/dist/react_client_codegen.js.map +1 -0
- package/dist/runCodeGen.d.ts +1 -0
- package/dist/runCodeGen.js +213 -0
- package/dist/runCodeGen.js.map +1 -0
- package/dist/runCommand.d.ts +9 -0
- package/dist/runCommand.js +111 -0
- package/dist/runCommand.js.map +1 -0
- package/dist/sql.d.ts +6 -0
- package/dist/sql.js +78 -0
- package/dist/sql.js.map +1 -0
- package/dist/sql_codegen.d.ts +11 -0
- package/dist/sql_codegen.js +753 -0
- package/dist/sql_codegen.js.map +1 -0
- package/dist/util.d.ts +4 -0
- package/dist/util.js +36 -0
- package/dist/util.js.map +1 -0
- package/package.json +28 -0
- 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
|
package/dist/sql.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../src/sql.ts"],"names":[],"mappings":";;;;;;AAAA,uCAAqC;AACrC,4CAAoB;AACpB,gDAAwB;AACxB,+CAA4D;AAE5D,qCAAqC;AACrC,qDAAiD;AAG1C,KAAK,UAAU,qBAAqB,CAAC,EAAc;IACtD,IAAI,QAAQ,GAAY,IAAI,CAAC,CAAC,iBAAiB;IAC/C,MAAM,EAAE,GAAa,IAAI,eAAQ,EAAE,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QAC1C,gGAAgG;QACjG,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzB,IAAK,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,CAAC,aAAa;YAChB,CAAC,8BAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YACnC,qEAAqE;YACrE,iEAAiE;YACjE,8CAA8C;YAC9C,QAAQ,GAAG,MAAM,uBAAuB,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC;SAC9D;KACF;IAED,IAAI,CAAC,QAAQ,EAAE;QACV,wEAAwE;QACxE,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,8BAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;KACxD;IACD,OAAO,QAAQ,CAAC;AACnB,CAAC;AAtBF,sDAsBE;AAEM,KAAK,UAAU,uBAAuB,CAAC,EAAc,EAAE,MAAkB;IAC7E,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAA,kBAAS,EAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACtH,IAAI,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QACzB,OAAO,MAAM,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;SAC7C;QACF,IAAA,kBAAQ,EAAC,0CAA0C,QAAQ,iBAAiB,CAAC,CAAA;QAC7E,OAAO,KAAK,CAAA;KACd;AACH,CAAC;AARD,0DAQC;AAEM,KAAK,UAAU,cAAc,CAAC,EAAc,EAAE,QAAgB,EAAE,QAAkB;IACtF,MAAM,SAAS,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrD,OAAO,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACpD,CAAC;AAHD,wCAGC;AAEM,KAAK,UAAU,gBAAgB,CAAC,EAAc,EAAE,UAAkB,EAAE,QAAkB;IAC1F,IAAI;QACF,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC;YACtC,OAAO,IAAI,CAAC,CAAC,gBAAgB;QAE/B,IAAI,YAAY,GAAG,CAAC,UAAU,CAAC,CAAC;QAChC,IAAI,QAAQ,GAAY,IAAI,CAAC;QAE7B,IAAI,QAAQ;YACT,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEzC,MAAM,EAAE,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBAC5C,IAAI;oBACD,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,iBAAiB;iBACnD;gBACD,OAAO,MAAM,EAAE;oBACZ,IAAA,kBAAQ,EAAC,MAAM,CAAC,CAAC;oBACjB,QAAQ,GAAG,KAAK,CAAC;iBACnB;aACF;QACJ,CAAC,CAAC,CAAA;QACF,OAAO,QAAQ,CAAC;KAClB;IACD,OAAO,CAAC,EAAE;QACP,IAAA,kBAAQ,EAAC,CAAC,CAAC,CAAC;QACZ,OAAO,KAAK,CAAC;KACf;AACJ,CAAC;AA5BD,4CA4BC"}
|
|
@@ -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;
|