@memberjunction/codegen-lib 2.12.1 → 2.13.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/Misc/logging.d.ts +43 -0
- package/dist/Misc/logging.d.ts.map +1 -0
- package/dist/Misc/logging.js +115 -0
- package/dist/Misc/logging.js.map +1 -0
- package/dist/action_subclasses_codegen.d.ts +23 -0
- package/dist/action_subclasses_codegen.d.ts.map +1 -0
- package/dist/action_subclasses_codegen.js +135 -0
- package/dist/action_subclasses_codegen.js.map +1 -0
- package/dist/entity_subclasses_codegen.d.ts +17 -0
- package/dist/entity_subclasses_codegen.d.ts.map +1 -0
- package/dist/entity_subclasses_codegen.js +227 -0
- package/dist/entity_subclasses_codegen.js.map +1 -0
- package/dist/entity_types_codegen.d.ts +15 -0
- package/dist/entity_types_codegen.d.ts.map +1 -0
- package/dist/entity_types_codegen.js +106 -0
- package/dist/entity_types_codegen.js.map +1 -0
- package/dist/graphql_server_codegen.d.ts +29 -0
- package/dist/graphql_server_codegen.d.ts.map +1 -0
- package/dist/graphql_server_codegen.js +546 -0
- package/dist/graphql_server_codegen.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,106 @@
|
|
|
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
|
+
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.EntityTypeGeneratorBase = void 0;
|
|
13
|
+
const core_1 = require("@memberjunction/core");
|
|
14
|
+
const fs_1 = __importDefault(require("fs"));
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const util_1 = require("./Misc/util");
|
|
17
|
+
const global_1 = require("@memberjunction/global");
|
|
18
|
+
const logging_1 = require("./Misc/logging");
|
|
19
|
+
/**
|
|
20
|
+
* Base class for generating type definitions for entity sub-classes, you can sub-class this class to modify/extend your own entity sub-class generator logic
|
|
21
|
+
*/
|
|
22
|
+
let EntityTypeGeneratorBase = class EntityTypeGeneratorBase {
|
|
23
|
+
generateAllEntityTypeDefinitions(entities, directory) {
|
|
24
|
+
try {
|
|
25
|
+
const sortedEntities = entities.sort((a, b) => a.Name.localeCompare(b.Name));
|
|
26
|
+
const sContent = this.generateTypeDefinitionHeader() + sortedEntities.map((entity) => this.generateEntitySubClass(entity)).join('');
|
|
27
|
+
(0, logging_1.logStatus)(`Generating entity sub-class types file in ${directory}`);
|
|
28
|
+
(0, util_1.makeDir)(directory);
|
|
29
|
+
fs_1.default.writeFileSync(path_1.default.join(directory, 'entity_type_definitions.ts'), sContent);
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
console.error(err);
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
generateTypeDefinitionHeader() {
|
|
38
|
+
return `/*************************************************
|
|
39
|
+
* GENERATED CODE - DO NOT MODIFY
|
|
40
|
+
* Generated by MemberJunction CodeGen at ${new Date().toLocaleString()}
|
|
41
|
+
**************************************************/`;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
*
|
|
45
|
+
* @param entity
|
|
46
|
+
* @param includeFileHeader
|
|
47
|
+
*/
|
|
48
|
+
generateEntitySubClass(entity) {
|
|
49
|
+
if (entity.PrimaryKeys.length === 0) {
|
|
50
|
+
(0, logging_1.logStatus)(`Entity ${entity.Name} has no primary keys. Skipping.`);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const fields = entity.Fields.map(e => {
|
|
54
|
+
let values = '';
|
|
55
|
+
let valueList = '';
|
|
56
|
+
if (e.ValueListType &&
|
|
57
|
+
e.ValueListType.length > 0 &&
|
|
58
|
+
e.ValueListType.trim().toLowerCase() !== 'none') {
|
|
59
|
+
values = e.EntityFieldValues.map(v => `\n * * ${v.Value}${v.Description && v.Description.length > 0 ? ' - ' + v.Description : ''}`).join('');
|
|
60
|
+
valueList = `\n * * Value List Type: ${e.ValueListType}\n * * Possible Values ` + values;
|
|
61
|
+
}
|
|
62
|
+
let typeString = (0, core_1.TypeScriptTypeFromSQLType)(e.Type) + (e.AllowsNull ? ' | null' : '');
|
|
63
|
+
if (e.ValueListTypeEnum !== core_1.EntityFieldValueListType.None && e.EntityFieldValues && e.EntityFieldValues.length > 0) {
|
|
64
|
+
// construct a typeString that is a union of the possible values
|
|
65
|
+
const quotes = e.NeedsQuotes ? "'" : '';
|
|
66
|
+
typeString = e.EntityFieldValues.map(v => `${quotes}${v.Value}${quotes}`).join(' | ');
|
|
67
|
+
if (e.ValueListTypeEnum === core_1.EntityFieldValueListType.ListOrUserEntry) {
|
|
68
|
+
// special case becuase a user can enter whatever they want
|
|
69
|
+
typeString += ' | ' + (0, core_1.TypeScriptTypeFromSQLType)(e.Type);
|
|
70
|
+
}
|
|
71
|
+
// finally, add the null type if it allows null
|
|
72
|
+
if (e.AllowsNull) {
|
|
73
|
+
typeString += ' | null';
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
let sRet = ` /**
|
|
77
|
+
* * Field Name: ${e.Name}${e.DisplayName && e.DisplayName.length > 0 ? '\n * * Display Name: ' + e.DisplayName : ''}
|
|
78
|
+
* * SQL Data Type: ${e.SQLFullType}${e.RelatedEntity ? '\n * * Related Entity/Foreign Key: ' + e.RelatedEntity + ' (' + e.RelatedEntityBaseView + '.' + e.RelatedEntityFieldName + ')' : ''}${e.DefaultValue && e.DefaultValue.length > 0 ? '\n * * Default Value: ' + e.DefaultValue : ''}${valueList}${e.Description && e.Description.length > 0 ? '\n * * Description: ' + e.Description : ''}
|
|
79
|
+
*/
|
|
80
|
+
${e.CodeName}: ${typeString}`;
|
|
81
|
+
return sRet;
|
|
82
|
+
}).join('\n\n');
|
|
83
|
+
const sClassName = `${entity.ClassName}Object`;
|
|
84
|
+
let sRet = `
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Type definition for the entity ${entity.Name}
|
|
88
|
+
* * Schema: ${entity.SchemaName}
|
|
89
|
+
* * Base Table: ${entity.BaseTable}
|
|
90
|
+
* * Base View: ${entity.BaseView}${entity.Description && entity.Description.length > 0 ? '\n * * @description ' + entity.Description : ''}
|
|
91
|
+
* * Primary Key${entity.PrimaryKeys.length > 1 ? 's' : ''}: ${entity.PrimaryKeys.map(f => f.Name).join(', ')}
|
|
92
|
+
*/
|
|
93
|
+
export type ${sClassName} = {
|
|
94
|
+
|
|
95
|
+
${fields}
|
|
96
|
+
}
|
|
97
|
+
`;
|
|
98
|
+
return sRet;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
exports.EntityTypeGeneratorBase = EntityTypeGeneratorBase;
|
|
103
|
+
exports.EntityTypeGeneratorBase = EntityTypeGeneratorBase = __decorate([
|
|
104
|
+
(0, global_1.RegisterClass)(EntityTypeGeneratorBase)
|
|
105
|
+
], EntityTypeGeneratorBase);
|
|
106
|
+
//# sourceMappingURL=entity_types_codegen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity_types_codegen.js","sourceRoot":"","sources":["../src/entity_types_codegen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { EntityInfo, EntityFieldInfo, EntityRelationshipInfo, Metadata } from '@memberjunction/core';
|
|
2
|
+
/**
|
|
3
|
+
* This class is responsible for generating the GraphQL Server resolvers and types for the entities, you can sub-class this class to extend/modify the logic, make sure to use @memberjunction/global RegisterClass decorator
|
|
4
|
+
* so that your class is used.
|
|
5
|
+
*/
|
|
6
|
+
export declare class GraphQLServerGeneratorBase {
|
|
7
|
+
generateGraphQLServerCode(entities: EntityInfo[], outputDirectory: string, generatedEntitiesImportLibrary: string, excludeRelatedEntitiesExternalToSchema: boolean): boolean;
|
|
8
|
+
protected _graphQLTypeSuffix: string;
|
|
9
|
+
/**
|
|
10
|
+
* The suffix to append to the GraphQL Type name, default is an underscore, override this property in your sub-class to change the suffix
|
|
11
|
+
*/
|
|
12
|
+
get GraphQLTypeSuffix(): string;
|
|
13
|
+
generateServerEntityString(entity: EntityInfo, includeFileHeader: boolean, generatedEntitiesImportLibrary: string, excludeRelatedEntitiesExternalToSchema: boolean): string;
|
|
14
|
+
generateAllEntitiesServerFileHeader(entities: EntityInfo[], importLibrary: string, isInternal: boolean): string;
|
|
15
|
+
generateEntitySpecificServerFileHeader(entity: EntityInfo, importLibrary: string, excludeRelatedEntitiesExternalToSchema: boolean): string;
|
|
16
|
+
protected generateServerEntityHeader(entity: EntityInfo, serverGraphQLTypeName: string): string;
|
|
17
|
+
protected generateServerEntityFooter(entity: EntityInfo): string;
|
|
18
|
+
protected generateServerField(fieldInfo: EntityFieldInfo): string;
|
|
19
|
+
protected getTypeGraphQLFieldString(fieldInfo: EntityFieldInfo): string;
|
|
20
|
+
protected generateServerRelationship(md: Metadata, r: EntityRelationshipInfo, isInternal: boolean): string;
|
|
21
|
+
protected generateServerGraphQLResolver(entity: EntityInfo, serverGraphQLTypeName: string, excludeRelatedEntitiesExternalToSchema: boolean, isInternal: boolean): string;
|
|
22
|
+
protected schemaName(entity: EntityInfo): string;
|
|
23
|
+
protected generateServerGraphQLInputType(entity: EntityInfo): string;
|
|
24
|
+
protected generateServerGraphQLInputTypeInner(entity: EntityInfo, isUpdate: boolean, classPrefix: string): string;
|
|
25
|
+
protected generateServerGraphQLMutations(entity: EntityInfo, serverGraphQLTypeName: string): string;
|
|
26
|
+
protected generateOneToManyFieldResolver(entity: EntityInfo, r: EntityRelationshipInfo, isInternal: boolean): string;
|
|
27
|
+
protected generateManyToManyFieldResolver(entity: EntityInfo, r: EntityRelationshipInfo): string;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=graphql_server_codegen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql_server_codegen.d.ts","sourceRoot":"","sources":["../src/graphql_server_codegen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,sBAAsB,EAA6B,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAQhI;;;GAGG;AACH,qBACa,0BAA0B;IAC9B,yBAAyB,CAC9B,QAAQ,EAAE,UAAU,EAAE,EACtB,eAAe,EAAE,MAAM,EACvB,8BAA8B,EAAE,MAAM,EACtC,sCAAsC,EAAE,OAAO,GAC9C,OAAO;IAmBV,SAAS,CAAC,kBAAkB,SAAO;IACnC;;OAEG;IACH,IAAW,iBAAiB,IAAI,MAAM,CAErC;IAEM,0BAA0B,CAC/B,MAAM,EAAE,UAAU,EAClB,iBAAiB,EAAE,OAAO,EAC1B,8BAA8B,EAAE,MAAM,EACtC,sCAAsC,EAAE,OAAO,GAC9C,MAAM;IAqDF,mCAAmC,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM;IA+B/G,sCAAsC,CAC3C,MAAM,EAAE,UAAU,EAClB,aAAa,EAAE,MAAM,EACrB,sCAAsC,EAAE,OAAO,GAC9C,MAAM;IA6BT,SAAS,CAAC,0BAA0B,CAAC,MAAM,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,GAAG,MAAM;IAa/F,SAAS,CAAC,0BAA0B,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAMhE,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM;IAejE,SAAS,CAAC,yBAAyB,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM;IAiCvE,SAAS,CAAC,0BAA0B,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,sBAAsB,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM;IAuB1G,SAAS,CAAC,6BAA6B,CACrC,MAAM,EAAE,UAAU,EAClB,qBAAqB,EAAE,MAAM,EAC7B,sCAAsC,EAAE,OAAO,EAC/C,UAAU,EAAE,OAAO,GAClB,MAAM;IA2HT,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAMhD,SAAS,CAAC,8BAA8B,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAOpE,SAAS,CAAC,mCAAmC,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAuCjH,SAAS,CAAC,8BAA8B,CAAC,MAAM,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,GAAG,MAAM;IAqEnG,SAAS,CAAC,8BAA8B,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,sBAAsB,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM;IA+CpH,SAAS,CAAC,+BAA+B,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,sBAAsB,GAAG,MAAM;CA6CjG"}
|