@apso/cli 0.0.5 → 0.0.44
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/LICENSE +21 -0
- package/README.md +313 -53
- package/bin/dev +17 -0
- package/bin/dev.cmd +3 -0
- package/bin/run +3 -3
- package/dist/commands/server/new.d.ts +22 -0
- package/dist/commands/server/new.js +100 -0
- package/dist/commands/server/scaffold.d.ts +14 -0
- package/dist/commands/server/scaffold.js +60 -0
- package/dist/index.d.ts +1 -0
- package/{lib → dist}/index.js +3 -2
- package/dist/lib/apsorc-parser.d.ts +26 -0
- package/dist/lib/apsorc-parser.js +65 -0
- package/dist/lib/base-command.d.ts +4 -0
- package/dist/lib/base-command.js +24 -0
- package/dist/lib/controller.d.ts +2 -0
- package/dist/lib/controller.js +36 -0
- package/dist/lib/dto.d.ts +7 -0
- package/dist/lib/dto.js +49 -0
- package/dist/lib/entity.d.ts +2 -0
- package/dist/lib/entity.js +43 -0
- package/dist/lib/enums.d.ts +6 -0
- package/dist/lib/enums.js +31 -0
- package/dist/lib/gql-dto.d.ts +3 -0
- package/dist/lib/gql-dto.js +43 -0
- package/dist/lib/index-module.d.ts +2 -0
- package/dist/lib/index-module.js +18 -0
- package/dist/lib/index.d.ts +10 -0
- package/dist/lib/index.js +21 -0
- package/dist/lib/module.d.ts +1 -0
- package/dist/lib/module.js +28 -0
- package/dist/lib/service.d.ts +1 -0
- package/dist/lib/service.js +24 -0
- package/dist/lib/templates/entities/entity-col-array.eta +12 -0
- package/dist/lib/templates/entities/entity-col-bigint.eta +11 -0
- package/dist/lib/templates/entities/entity-col-bigserial.eta +12 -0
- package/dist/lib/templates/entities/entity-col-boolean.eta +11 -0
- package/dist/lib/templates/entities/entity-col-bytea.eta +11 -0
- package/dist/lib/templates/entities/entity-col-char.eta +15 -0
- package/dist/lib/templates/entities/entity-col-date.eta +8 -0
- package/dist/lib/templates/entities/entity-col-decimal.eta +11 -0
- package/dist/lib/templates/entities/entity-col-double.eta +11 -0
- package/dist/lib/templates/entities/entity-col-enum.eta +12 -0
- package/dist/lib/templates/entities/entity-col-float.eta +7 -0
- package/dist/lib/templates/entities/entity-col-inet.eta +11 -0
- package/dist/lib/templates/entities/entity-col-int4range.eta +34 -0
- package/dist/lib/templates/entities/entity-col-integer.eta +11 -0
- package/dist/lib/templates/entities/entity-col-interval.eta +11 -0
- package/dist/lib/templates/entities/entity-col-json-plain.eta +8 -0
- package/dist/lib/templates/entities/entity-col-json.eta +5 -0
- package/dist/lib/templates/entities/entity-col-jsonb.eta +5 -0
- package/dist/lib/templates/entities/entity-col-money.eta +11 -0
- package/dist/lib/templates/entities/entity-col-numeric.eta +11 -0
- package/dist/lib/templates/entities/entity-col-point.eta +25 -0
- package/dist/lib/templates/entities/entity-col-real.eta +11 -0
- package/dist/lib/templates/entities/entity-col-serial.eta +12 -0
- package/dist/lib/templates/entities/entity-col-smallint.eta +11 -0
- package/dist/lib/templates/entities/entity-col-smallserial.eta +12 -0
- package/dist/lib/templates/entities/entity-col-string.eta +23 -0
- package/dist/lib/templates/entities/entity-col-text.eta +23 -0
- package/dist/lib/templates/entities/entity-col-time.eta +11 -0
- package/dist/lib/templates/entities/entity-col-timestamp.eta +4 -0
- package/dist/lib/templates/entities/entity-col-timestamptz.eta +4 -0
- package/dist/lib/templates/entities/entity-col-timetz.eta +11 -0
- package/dist/lib/templates/entities/entity-col-tsvector.eta +11 -0
- package/dist/lib/templates/entities/entity-col-uuid.eta +11 -0
- package/dist/lib/templates/entities/entity-col-varchar.eta +18 -0
- package/dist/lib/templates/entities/entity-col-xml.eta +11 -0
- package/dist/lib/templates/entities/entity.eta +116 -0
- package/dist/lib/templates/graphql/dto/dto-col-array.eta +4 -0
- package/dist/lib/templates/graphql/dto/dto-col-boolean.eta +6 -0
- package/dist/lib/templates/graphql/dto/dto-col-date.eta +4 -0
- package/dist/lib/templates/graphql/dto/dto-col-enum.eta +5 -0
- package/dist/lib/templates/graphql/dto/dto-col-float.eta +4 -0
- package/dist/lib/templates/graphql/dto/dto-col-integer.eta +4 -0
- package/dist/lib/templates/graphql/dto/dto-col-json-plain.eta +5 -0
- package/dist/lib/templates/graphql/dto/dto-col-json.eta +5 -0
- package/dist/lib/templates/graphql/dto/dto-col-text.eta +11 -0
- package/dist/lib/templates/graphql/dto/dto-col-timestamp.eta +3 -0
- package/dist/lib/templates/graphql/dto/dto-col-timestamptz.eta +3 -0
- package/dist/lib/templates/graphql/enums-graphql.eta +12 -0
- package/dist/lib/templates/graphql/gql-dto-graphql.eta +67 -0
- package/dist/lib/templates/graphql/index-module-graphql.eta +26 -0
- package/dist/lib/templates/graphql/module-graphql.eta +19 -0
- package/dist/lib/templates/header.eta +3 -0
- package/dist/lib/templates/rest/controller-rest-spec.eta +77 -0
- package/dist/lib/templates/rest/controller-rest.eta +171 -0
- package/dist/lib/templates/rest/dto-rest.eta +48 -0
- package/dist/lib/templates/rest/enums-rest.eta +7 -0
- package/dist/lib/templates/rest/index-module-rest.eta +11 -0
- package/dist/lib/templates/rest/module-rest.eta +16 -0
- package/dist/lib/templates/rest/ormconfig.eta +9 -0
- package/dist/lib/templates/rest/service-rest.eta +25 -0
- package/dist/lib/types/constraints.d.ts +4 -0
- package/dist/lib/types/constraints.js +2 -0
- package/dist/lib/types/entity.d.ts +13 -0
- package/dist/lib/types/entity.js +2 -0
- package/dist/lib/types/field.d.ts +16 -0
- package/dist/lib/types/field.js +2 -0
- package/dist/lib/types/index.d.ts +5 -0
- package/dist/lib/types/index.js +2 -0
- package/dist/lib/types/indices.d.ts +4 -0
- package/dist/lib/types/indices.js +2 -0
- package/dist/lib/types/json.d.ts +3 -0
- package/dist/lib/types/json.js +2 -0
- package/dist/lib/types/relationship.d.ts +43 -0
- package/dist/lib/types/relationship.js +2 -0
- package/dist/lib/utils/casing.d.ts +2 -0
- package/dist/lib/utils/casing.js +16 -0
- package/dist/lib/utils/field.d.ts +6 -0
- package/dist/lib/utils/field.js +65 -0
- package/dist/lib/utils/file-system.d.ts +2 -0
- package/dist/lib/utils/file-system.js +52 -0
- package/dist/lib/utils/relationships/index.d.ts +2 -0
- package/dist/lib/utils/relationships/index.js +11 -0
- package/dist/lib/utils/relationships/parse-v1.d.ts +4 -0
- package/dist/lib/utils/relationships/parse-v1.js +86 -0
- package/dist/lib/utils/relationships/parse.d.ts +11 -0
- package/dist/lib/utils/relationships/parse.js +192 -0
- package/dist/tests/templates/entities/types/array-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/array-template.spec.js +82 -0
- package/dist/tests/templates/entities/types/bigint-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/bigint-template.spec.js +82 -0
- package/dist/tests/templates/entities/types/boolean-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/boolean-template.spec.js +77 -0
- package/dist/tests/templates/entities/types/bytea-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/bytea-template.spec.js +68 -0
- package/dist/tests/templates/entities/types/char-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/char-template.spec.js +68 -0
- package/dist/tests/templates/entities/types/date-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/date-template.spec.js +56 -0
- package/dist/tests/templates/entities/types/decimal-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/decimal-template.spec.js +86 -0
- package/dist/tests/templates/entities/types/double-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/double-template.spec.js +67 -0
- package/dist/tests/templates/entities/types/enum-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/enum-template.spec.js +85 -0
- package/dist/tests/templates/entities/types/float-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/float-template.spec.js +67 -0
- package/dist/tests/templates/entities/types/inet-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/inet-template.spec.js +69 -0
- package/dist/tests/templates/entities/types/int4range-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/int4range-template.spec.js +60 -0
- package/dist/tests/templates/entities/types/integer-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/integer-template.spec.js +79 -0
- package/dist/tests/templates/entities/types/interval-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/interval-template.spec.js +68 -0
- package/dist/tests/templates/entities/types/json-plain-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/json-plain-template.spec.js +54 -0
- package/dist/tests/templates/entities/types/json-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/json-template.spec.js +40 -0
- package/dist/tests/templates/entities/types/jsonb-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/jsonb-template.spec.js +40 -0
- package/dist/tests/templates/entities/types/money-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/money-template.spec.js +68 -0
- package/dist/tests/templates/entities/types/numeric-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/numeric-template.spec.js +84 -0
- package/dist/tests/templates/entities/types/point-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/point-template.spec.js +58 -0
- package/dist/tests/templates/entities/types/real-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/real-template.spec.js +67 -0
- package/dist/tests/templates/entities/types/serial-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/serial-template.spec.js +113 -0
- package/dist/tests/templates/entities/types/smallint-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/smallint-template.spec.js +82 -0
- package/dist/tests/templates/entities/types/string-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/string-template.spec.js +111 -0
- package/dist/tests/templates/entities/types/text-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/text-template.spec.js +70 -0
- package/dist/tests/templates/entities/types/time-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/time-template.spec.js +68 -0
- package/dist/tests/templates/entities/types/timestamp-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/timestamp-template.spec.js +74 -0
- package/dist/tests/templates/entities/types/timetz-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/timetz-template.spec.js +68 -0
- package/dist/tests/templates/entities/types/tsvector-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/tsvector-template.spec.js +55 -0
- package/dist/tests/templates/entities/types/uuid-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/uuid-template.spec.js +82 -0
- package/dist/tests/templates/entities/types/varchar-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/varchar-template.spec.js +102 -0
- package/dist/tests/templates/entities/types/xml-template.spec.d.ts +1 -0
- package/dist/tests/templates/entities/types/xml-template.spec.js +55 -0
- package/dist/tests/templates/entities/utils/template-test-utils.d.ts +31 -0
- package/dist/tests/templates/entities/utils/template-test-utils.js +50 -0
- package/oclif.manifest.json +60 -1
- package/package.json +84 -55
- package/lib/commands/new.d.ts +0 -22
- package/lib/commands/new.js +0 -198
- package/lib/commands/scaffold.d.ts +0 -18
- package/lib/commands/scaffold.js +0 -106
- package/lib/index.d.ts +0 -1
- package/lib/lib/scaffold.d.ts +0 -30
- package/lib/lib/scaffold.js +0 -566
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ApsorcRelationship, Entity, RelationshipMap } from "./types";
|
|
2
|
+
export declare enum ApiType {
|
|
3
|
+
Graphql = "graphql",
|
|
4
|
+
Rest = "rest"
|
|
5
|
+
}
|
|
6
|
+
export type ApsorcType = {
|
|
7
|
+
version: number;
|
|
8
|
+
rootFolder: string;
|
|
9
|
+
entities: Entity[];
|
|
10
|
+
apiType: ApiType;
|
|
11
|
+
relationships: ApsorcRelationship[];
|
|
12
|
+
};
|
|
13
|
+
type ParsedApsorcData = {
|
|
14
|
+
entities: Entity[];
|
|
15
|
+
relationshipMap: RelationshipMap;
|
|
16
|
+
};
|
|
17
|
+
type ParsedApsorc = {
|
|
18
|
+
rootFolder: string;
|
|
19
|
+
apiType: string;
|
|
20
|
+
entities: Entity[];
|
|
21
|
+
relationshipMap: RelationshipMap;
|
|
22
|
+
};
|
|
23
|
+
export declare const parseApsorcV1: (apsorc: ApsorcType) => ParsedApsorcData;
|
|
24
|
+
export declare const parseApsorcV2: (apsorc: ApsorcType) => ParsedApsorcData;
|
|
25
|
+
export declare const parseApsorc: () => ParsedApsorc;
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseApsorc = exports.parseApsorcV2 = exports.parseApsorcV1 = exports.ApiType = void 0;
|
|
4
|
+
const rc = require("rc");
|
|
5
|
+
const relationships_1 = require("./utils/relationships");
|
|
6
|
+
var ApiType;
|
|
7
|
+
(function (ApiType) {
|
|
8
|
+
ApiType["Graphql"] = "graphql";
|
|
9
|
+
ApiType["Rest"] = "rest";
|
|
10
|
+
})(ApiType = exports.ApiType || (exports.ApiType = {}));
|
|
11
|
+
const parseApsorcV1 = (apsorc) => {
|
|
12
|
+
const { entities } = apsorc;
|
|
13
|
+
const relationshipMap = (0, relationships_1.parseV1Relationships)(entities);
|
|
14
|
+
for (const entity of entities) {
|
|
15
|
+
delete entity.associations;
|
|
16
|
+
}
|
|
17
|
+
return { entities, relationshipMap };
|
|
18
|
+
};
|
|
19
|
+
exports.parseApsorcV1 = parseApsorcV1;
|
|
20
|
+
const parseApsorcV2 = (apsorc) => {
|
|
21
|
+
const { entities, relationships: apsoRelationships } = apsorc;
|
|
22
|
+
const relationshipMap = (0, relationships_1.parseRelationships)(apsoRelationships);
|
|
23
|
+
return { entities, relationshipMap };
|
|
24
|
+
};
|
|
25
|
+
exports.parseApsorcV2 = parseApsorcV2;
|
|
26
|
+
const parseRc = () => {
|
|
27
|
+
const apsoConfig = rc("apso");
|
|
28
|
+
const rootFolder = apsoConfig.rootFolder || "src";
|
|
29
|
+
const apiType = apsoConfig.apiType || "Rest";
|
|
30
|
+
const version = apsoConfig.version || 1;
|
|
31
|
+
const entities = apsoConfig.entities || [];
|
|
32
|
+
const relationships = apsoConfig.relationships || [];
|
|
33
|
+
return {
|
|
34
|
+
rootFolder,
|
|
35
|
+
apiType,
|
|
36
|
+
version,
|
|
37
|
+
entities,
|
|
38
|
+
relationships,
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
const parseApsorc = () => {
|
|
42
|
+
const apsoConfig = parseRc();
|
|
43
|
+
if (apsoConfig.version === 1 &&
|
|
44
|
+
(apsoConfig === null || apsoConfig === void 0 ? void 0 : apsoConfig.apiType.toLowerCase()) !== ApiType.Rest.toLowerCase()) {
|
|
45
|
+
throw new Error(`Graphql is not supported for apsorc version 1. In order to use Graphql make sure your apsorc file is version 2 compatible.`);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
switch (apsoConfig.version) {
|
|
49
|
+
case 1:
|
|
50
|
+
return {
|
|
51
|
+
rootFolder: apsoConfig.rootFolder,
|
|
52
|
+
apiType: apsoConfig.apiType,
|
|
53
|
+
...(0, exports.parseApsorcV1)(apsoConfig),
|
|
54
|
+
};
|
|
55
|
+
case 2:
|
|
56
|
+
return {
|
|
57
|
+
rootFolder: apsoConfig.rootFolder,
|
|
58
|
+
apiType: apsoConfig.apiType,
|
|
59
|
+
...(0, exports.parseApsorcV2)(apsoConfig),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
throw new Error(`Invalid apsorc config version: ${apsoConfig.version}`);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
exports.parseApsorc = parseApsorc;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
class BaseCommand extends core_1.Command {
|
|
6
|
+
async runNpmCommand(args) {
|
|
7
|
+
return new Promise((resolve, reject) => {
|
|
8
|
+
const command = "npm";
|
|
9
|
+
const cmdStr = `${command} ${args.join(" ")}`;
|
|
10
|
+
this.log(cmdStr);
|
|
11
|
+
const child = (0, child_process_1.spawn)(command, args, { stdio: "inherit" });
|
|
12
|
+
child.on("close", (code) => {
|
|
13
|
+
if (code !== 0) {
|
|
14
|
+
reject({
|
|
15
|
+
command: cmdStr,
|
|
16
|
+
});
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
resolve();
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.default = BaseCommand;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const Eta = tslib_1.__importStar(require("eta"));
|
|
6
|
+
const path = tslib_1.__importStar(require("path"));
|
|
7
|
+
const file_system_1 = require("./utils/file-system");
|
|
8
|
+
const relationships_1 = require("./utils/relationships");
|
|
9
|
+
const createController = async (apiBaseDir, entity, relationshipMap) => {
|
|
10
|
+
const { name: entityName } = entity;
|
|
11
|
+
const File = path.join(apiBaseDir, `${entityName}.controller.ts`);
|
|
12
|
+
const testFile = path.join(apiBaseDir, `${entityName}.controller.spec.ts`);
|
|
13
|
+
// Dependencies
|
|
14
|
+
const svcName = `${entityName}Service`;
|
|
15
|
+
const ctrlName = `${entityName}Controller`;
|
|
16
|
+
const pluralEntityName = `${entityName}s`;
|
|
17
|
+
const relationships = (0, relationships_1.getRelationshipForTemplate)(entityName, relationshipMap[entityName]);
|
|
18
|
+
const nestedRelationships = (0, relationships_1.getNestedRelationships)(entityName, relationshipMap);
|
|
19
|
+
const data = {
|
|
20
|
+
svcName,
|
|
21
|
+
ctrlName,
|
|
22
|
+
entityName,
|
|
23
|
+
pluralEntityName,
|
|
24
|
+
// ensure uniqueness
|
|
25
|
+
associations: [...new Set(relationships)],
|
|
26
|
+
nestedAssociations: [...new Set(nestedRelationships)],
|
|
27
|
+
};
|
|
28
|
+
Eta.configure({
|
|
29
|
+
views: path.join(__dirname, "templates"),
|
|
30
|
+
});
|
|
31
|
+
const content = await Eta.renderFileAsync("./rest/controller-rest", data);
|
|
32
|
+
(0, file_system_1.createFile)(File, content);
|
|
33
|
+
const testContent = await Eta.renderFileAsync("./rest/controller-rest-spec", data);
|
|
34
|
+
(0, file_system_1.createFile)(testFile, testContent);
|
|
35
|
+
};
|
|
36
|
+
exports.createController = createController;
|
package/dist/lib/dto.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDto = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const Eta = tslib_1.__importStar(require("eta"));
|
|
6
|
+
const path = tslib_1.__importStar(require("path"));
|
|
7
|
+
const file_system_1 = require("./utils/file-system");
|
|
8
|
+
const field_1 = require("./utils/field");
|
|
9
|
+
const relationships_1 = require("./utils/relationships");
|
|
10
|
+
const createDto = async (apiBaseDir, entity, relationships) => {
|
|
11
|
+
const { name, fields = [] } = entity;
|
|
12
|
+
const Dir = path.join(apiBaseDir, "dtos");
|
|
13
|
+
const File = path.join(Dir, `${name}.dto.ts`);
|
|
14
|
+
const relationshipFields = relationships
|
|
15
|
+
.filter((relationship) => relationship.type === "ManyToOne")
|
|
16
|
+
.map((relationship) => (0, relationships_1.getRelationshipIdField)(relationship));
|
|
17
|
+
const columns = [
|
|
18
|
+
...fields.map((field) => ({
|
|
19
|
+
name: field.name,
|
|
20
|
+
type: field.type,
|
|
21
|
+
primary: field.primary,
|
|
22
|
+
dataType: field.type === "enum"
|
|
23
|
+
? (0, field_1.fieldToEnumType)(field.name, name)
|
|
24
|
+
: (0, field_1.getJsTypeFromFieldType)(field.type),
|
|
25
|
+
})),
|
|
26
|
+
...relationshipFields.map((fieldName) => ({
|
|
27
|
+
name: fieldName,
|
|
28
|
+
dataType: "number",
|
|
29
|
+
})),
|
|
30
|
+
];
|
|
31
|
+
const primaryKeyColumns = columns.filter((column) => column.primary === true);
|
|
32
|
+
const addDefaultPKProperty = primaryKeyColumns.length === 0;
|
|
33
|
+
const createdAt = entity.created_at;
|
|
34
|
+
const updatedAt = entity.updated_at;
|
|
35
|
+
const data = {
|
|
36
|
+
name: entity.name,
|
|
37
|
+
addDefaultPKProperty,
|
|
38
|
+
createdAt,
|
|
39
|
+
updatedAt,
|
|
40
|
+
columns,
|
|
41
|
+
importEnums: (0, field_1.typeExistsInEntity)(entity, "enum") !== -1,
|
|
42
|
+
};
|
|
43
|
+
Eta.configure({
|
|
44
|
+
views: path.join(__dirname, "templates"),
|
|
45
|
+
});
|
|
46
|
+
const content = await Eta.renderFileAsync("./rest/dto-rest", data);
|
|
47
|
+
(0, file_system_1.createFile)(File, content);
|
|
48
|
+
};
|
|
49
|
+
exports.createDto = createDto;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createEntity = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const Eta = tslib_1.__importStar(require("eta"));
|
|
6
|
+
const path = tslib_1.__importStar(require("path"));
|
|
7
|
+
const pluralize_1 = tslib_1.__importDefault(require("pluralize"));
|
|
8
|
+
const file_system_1 = require("./utils/file-system");
|
|
9
|
+
const casing_1 = require("./utils/casing");
|
|
10
|
+
const field_1 = require("./utils/field");
|
|
11
|
+
const relationships_1 = require("./utils/relationships");
|
|
12
|
+
const createEntity = async (apiBaseDir, entity, relationshipsNew, apiType) => {
|
|
13
|
+
const { name, fields = [], indexes, uniques } = entity;
|
|
14
|
+
const File = path.join(apiBaseDir, `${name}.entity.ts`);
|
|
15
|
+
const columns = (0, field_1.getFieldForTemplate)(fields, name);
|
|
16
|
+
const createPrimaryKey = columns.filter((column) => column.primary === true)
|
|
17
|
+
.length === 0;
|
|
18
|
+
const createdAt = entity.created_at;
|
|
19
|
+
const updatedAt = entity.updated_at;
|
|
20
|
+
const relationships = (0, relationships_1.getRelationshipForTemplate)(name, relationshipsNew);
|
|
21
|
+
const entitiesToImport = (0, relationships_1.getRelationshipsForImport)(name, relationships);
|
|
22
|
+
const data = {
|
|
23
|
+
name,
|
|
24
|
+
indexes: indexes || [],
|
|
25
|
+
uniques: uniques || [],
|
|
26
|
+
createPrimaryKey,
|
|
27
|
+
snakeCasedName: (0, casing_1.snakeCase)(name),
|
|
28
|
+
createdAt,
|
|
29
|
+
updatedAt,
|
|
30
|
+
pluralizedName: (0, pluralize_1.default)((0, casing_1.camelCase)(name)),
|
|
31
|
+
columns,
|
|
32
|
+
associations: [...new Set(relationships)],
|
|
33
|
+
entitiesToImport,
|
|
34
|
+
importEnums: (0, field_1.typeExistsInEntity)(entity, "enum") !== -1,
|
|
35
|
+
apiType,
|
|
36
|
+
};
|
|
37
|
+
Eta.configure({
|
|
38
|
+
views: path.join(__dirname, "templates"),
|
|
39
|
+
});
|
|
40
|
+
const content = await Eta.renderFileAsync("./entities/entity", data);
|
|
41
|
+
(0, file_system_1.createFile)(File, content);
|
|
42
|
+
};
|
|
43
|
+
exports.createEntity = createEntity;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createEnums = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const Eta = tslib_1.__importStar(require("eta"));
|
|
6
|
+
const path = tslib_1.__importStar(require("path"));
|
|
7
|
+
const file_system_1 = require("./utils/file-system");
|
|
8
|
+
const field_1 = require("./utils/field");
|
|
9
|
+
const createEnums = async (apiBaseDir, entities, apiType) => {
|
|
10
|
+
if (entities.length > 0) {
|
|
11
|
+
const outputFile = path.join(apiBaseDir, "enums.ts");
|
|
12
|
+
const allEnumsFields = entities
|
|
13
|
+
.flatMap((entity) => (entity.fields || []).map((field) => {
|
|
14
|
+
if (field.type === "enum") {
|
|
15
|
+
return { ...field, name: (0, field_1.fieldToEnumType)(field.name, entity.name) };
|
|
16
|
+
}
|
|
17
|
+
return null;
|
|
18
|
+
}))
|
|
19
|
+
.filter(Boolean);
|
|
20
|
+
if (allEnumsFields.length > 0) {
|
|
21
|
+
Eta.configure({
|
|
22
|
+
views: path.join(__dirname, "templates"),
|
|
23
|
+
});
|
|
24
|
+
const content = await Eta.renderFileAsync(`./${apiType}/enums-${apiType}`, {
|
|
25
|
+
allEnumsFields,
|
|
26
|
+
});
|
|
27
|
+
(0, file_system_1.createFile)(outputFile, content);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
exports.createEnums = createEnums;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createGqlDTO = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const Eta = tslib_1.__importStar(require("eta"));
|
|
6
|
+
const path = tslib_1.__importStar(require("path"));
|
|
7
|
+
const pluralize_1 = tslib_1.__importDefault(require("pluralize"));
|
|
8
|
+
const field_1 = require("./utils/field");
|
|
9
|
+
const relationships_1 = require("./utils/relationships");
|
|
10
|
+
const casing_1 = require("./utils/casing");
|
|
11
|
+
const file_system_1 = require("./utils/file-system");
|
|
12
|
+
const createGqlDTO = async (apiBaseDir, entity, relationshipsNew) => {
|
|
13
|
+
const { name, fields = [], indexes } = entity;
|
|
14
|
+
const Dir = path.join(apiBaseDir, "dtos");
|
|
15
|
+
const File = path.join(Dir, `${name}.dto.ts`);
|
|
16
|
+
const columns = (0, field_1.getFieldForTemplate)(fields, name);
|
|
17
|
+
const createPrimaryKey = columns.filter((column) => column.primary === true)
|
|
18
|
+
.length === 0;
|
|
19
|
+
const createdAt = entity.created_at;
|
|
20
|
+
const updatedAt = entity.updated_at;
|
|
21
|
+
const relationships = (0, relationships_1.getRelationshipForTemplate)(name, relationshipsNew);
|
|
22
|
+
const entitiesToImport = (0, relationships_1.getRelationshipsForImport)(name, relationships);
|
|
23
|
+
const data = {
|
|
24
|
+
name,
|
|
25
|
+
indexes: indexes || [],
|
|
26
|
+
createPrimaryKey,
|
|
27
|
+
snakeCasedName: (0, casing_1.snakeCase)(name),
|
|
28
|
+
createdAt,
|
|
29
|
+
updatedAt,
|
|
30
|
+
pluralizedName: (0, pluralize_1.default)((0, casing_1.camelCase)(name)),
|
|
31
|
+
columns,
|
|
32
|
+
associations: relationships,
|
|
33
|
+
entitiesToImport,
|
|
34
|
+
importEnums: (0, field_1.typeExistsInEntity)(entity, "enum") !== -1,
|
|
35
|
+
};
|
|
36
|
+
Eta.configure({
|
|
37
|
+
// This tells Eta to look for templates in the /templates directory
|
|
38
|
+
views: path.join(__dirname, "templates"),
|
|
39
|
+
});
|
|
40
|
+
const contentEntity = await Eta.renderFileAsync("./graphql/gql-dto-graphql", data);
|
|
41
|
+
(0, file_system_1.createFile)(File, contentEntity);
|
|
42
|
+
};
|
|
43
|
+
exports.createGqlDTO = createGqlDTO;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createIndexAppModule = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const file_system_1 = require("./utils/file-system");
|
|
6
|
+
const Eta = tslib_1.__importStar(require("eta"));
|
|
7
|
+
const path = tslib_1.__importStar(require("path"));
|
|
8
|
+
const createIndexAppModule = async (apiBaseDir, entities, apiType) => {
|
|
9
|
+
const File = path.join(apiBaseDir, `index.ts`);
|
|
10
|
+
Eta.configure({
|
|
11
|
+
views: path.join(__dirname, "templates"),
|
|
12
|
+
});
|
|
13
|
+
const content = await Eta.renderFileAsync(`./${apiType}/index-module-${apiType}`, {
|
|
14
|
+
entities,
|
|
15
|
+
});
|
|
16
|
+
(0, file_system_1.createFile)(File, content);
|
|
17
|
+
};
|
|
18
|
+
exports.createIndexAppModule = createIndexAppModule;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { Entity, RelationshipMap } from "./types";
|
|
2
|
+
export { parseApsorc } from "./apsorc-parser";
|
|
3
|
+
export { createEntity } from "./entity";
|
|
4
|
+
export { createController } from "./controller";
|
|
5
|
+
export { createService } from "./service";
|
|
6
|
+
export { createModule } from "./module";
|
|
7
|
+
export { createIndexAppModule } from "./index-module";
|
|
8
|
+
export { createDto } from "./dto";
|
|
9
|
+
export { createEnums } from "./enums";
|
|
10
|
+
export { createGqlDTO } from "./gql-dto";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createGqlDTO = exports.createEnums = exports.createDto = exports.createIndexAppModule = exports.createModule = exports.createService = exports.createController = exports.createEntity = exports.parseApsorc = void 0;
|
|
4
|
+
var apsorc_parser_1 = require("./apsorc-parser");
|
|
5
|
+
Object.defineProperty(exports, "parseApsorc", { enumerable: true, get: function () { return apsorc_parser_1.parseApsorc; } });
|
|
6
|
+
var entity_1 = require("./entity");
|
|
7
|
+
Object.defineProperty(exports, "createEntity", { enumerable: true, get: function () { return entity_1.createEntity; } });
|
|
8
|
+
var controller_1 = require("./controller");
|
|
9
|
+
Object.defineProperty(exports, "createController", { enumerable: true, get: function () { return controller_1.createController; } });
|
|
10
|
+
var service_1 = require("./service");
|
|
11
|
+
Object.defineProperty(exports, "createService", { enumerable: true, get: function () { return service_1.createService; } });
|
|
12
|
+
var module_1 = require("./module");
|
|
13
|
+
Object.defineProperty(exports, "createModule", { enumerable: true, get: function () { return module_1.createModule; } });
|
|
14
|
+
var index_module_1 = require("./index-module");
|
|
15
|
+
Object.defineProperty(exports, "createIndexAppModule", { enumerable: true, get: function () { return index_module_1.createIndexAppModule; } });
|
|
16
|
+
var dto_1 = require("./dto");
|
|
17
|
+
Object.defineProperty(exports, "createDto", { enumerable: true, get: function () { return dto_1.createDto; } });
|
|
18
|
+
var enums_1 = require("./enums");
|
|
19
|
+
Object.defineProperty(exports, "createEnums", { enumerable: true, get: function () { return enums_1.createEnums; } });
|
|
20
|
+
var gql_dto_1 = require("./gql-dto");
|
|
21
|
+
Object.defineProperty(exports, "createGqlDTO", { enumerable: true, get: function () { return gql_dto_1.createGqlDTO; } });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createModule: (apiBaseDir: string, entityName: string, apiType: string) => Promise<void>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createModule = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const Eta = tslib_1.__importStar(require("eta"));
|
|
6
|
+
const path = tslib_1.__importStar(require("path"));
|
|
7
|
+
const file_system_1 = require("./utils/file-system");
|
|
8
|
+
const createModule = async (apiBaseDir, entityName, apiType) => {
|
|
9
|
+
const File = path.join(apiBaseDir, `${entityName}.module.ts`);
|
|
10
|
+
// Dependencies
|
|
11
|
+
const svcName = `${entityName}Service`;
|
|
12
|
+
const ctrlName = `${entityName}Controller`;
|
|
13
|
+
const modName = `${entityName}Module`;
|
|
14
|
+
const pluralEntityName = `${entityName}s`;
|
|
15
|
+
const data = {
|
|
16
|
+
svcName,
|
|
17
|
+
ctrlName,
|
|
18
|
+
modName,
|
|
19
|
+
entityName,
|
|
20
|
+
pluralEntityName,
|
|
21
|
+
};
|
|
22
|
+
Eta.configure({
|
|
23
|
+
views: path.join(__dirname, "templates"),
|
|
24
|
+
});
|
|
25
|
+
const content = await Eta.renderFileAsync(`./${apiType}/module-${apiType}`, data);
|
|
26
|
+
(0, file_system_1.createFile)(File, content);
|
|
27
|
+
};
|
|
28
|
+
exports.createModule = createModule;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createService: (apiBaseDir: string, entityName: string) => Promise<void>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const file_system_1 = require("./utils/file-system");
|
|
6
|
+
const Eta = tslib_1.__importStar(require("eta"));
|
|
7
|
+
const path = tslib_1.__importStar(require("path"));
|
|
8
|
+
const createService = async (apiBaseDir, entityName) => {
|
|
9
|
+
const File = path.join(apiBaseDir, `${entityName}.service.ts`);
|
|
10
|
+
// Dependencies
|
|
11
|
+
const svcName = `${entityName}Service`;
|
|
12
|
+
const pluralEntityName = `${entityName}s`;
|
|
13
|
+
const data = {
|
|
14
|
+
svcName,
|
|
15
|
+
entityName,
|
|
16
|
+
pluralEntityName,
|
|
17
|
+
};
|
|
18
|
+
Eta.configure({
|
|
19
|
+
views: path.join(__dirname, "templates"),
|
|
20
|
+
});
|
|
21
|
+
const content = await Eta.renderFileAsync("./rest/service-rest", data);
|
|
22
|
+
(0, file_system_1.createFile)(File, content);
|
|
23
|
+
};
|
|
24
|
+
exports.createService = createService;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<% const {field} = it; %>
|
|
2
|
+
|
|
3
|
+
@Column({
|
|
4
|
+
type: "<%= field.elementType || 'text' %>",
|
|
5
|
+
array: true<% if (field.nullable) {%>,
|
|
6
|
+
nullable: true<% } %>
|
|
7
|
+
})
|
|
8
|
+
<% if (field.index ) {%>
|
|
9
|
+
@Index()
|
|
10
|
+
<% } %>
|
|
11
|
+
|
|
12
|
+
<%= field.name %>: <%= field.elementType === 'int' || field.elementType === 'smallint' || field.elementType === 'decimal' || field.elementType === 'numeric' || field.elementType === 'real' || field.elementType === 'float8' ? 'number' : 'string' %>[];
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<% const {field} = it; %>
|
|
2
|
+
|
|
3
|
+
@Column({ "type": "bigint"<% if (field.default !== null) {%>, default: <%= field.default %><% } %> })
|
|
4
|
+
<% if (field.index ) {%>
|
|
5
|
+
@Index()
|
|
6
|
+
<% } %>
|
|
7
|
+
<% if (field.primary ) {%>
|
|
8
|
+
@PrimaryColumn()
|
|
9
|
+
<% } %>
|
|
10
|
+
|
|
11
|
+
<%= field.name %>: string;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<% const {field} = it; %>
|
|
2
|
+
|
|
3
|
+
@IsOptional({ groups: [CREATE, UPDATE] })
|
|
4
|
+
@IsBoolean({ always: true })
|
|
5
|
+
|
|
6
|
+
@Column({ type: 'boolean', default: <%= Boolean(field.default) || false %> })
|
|
7
|
+
<% if (field.index ) {%>
|
|
8
|
+
@Index()
|
|
9
|
+
<% } %>
|
|
10
|
+
|
|
11
|
+
<%= field.name %>!: <%= field.dataType %>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<% const {field} = it; %>
|
|
2
|
+
|
|
3
|
+
@Column({ "type": "bytea"<% if (field.default !== null) {%>, default: <%= field.default %><% } %> })
|
|
4
|
+
<% if (field.index ) {%>
|
|
5
|
+
@Index()
|
|
6
|
+
<% } %>
|
|
7
|
+
<% if (field.primary ) {%>
|
|
8
|
+
@PrimaryColumn()
|
|
9
|
+
<% } %>
|
|
10
|
+
|
|
11
|
+
<%= field.name %>: Buffer;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<% const {field} = it; %>
|
|
2
|
+
|
|
3
|
+
@IsOptional({ groups: [UPDATE] })
|
|
4
|
+
<% if (!field.nullable && !field.auto) { %>
|
|
5
|
+
@IsNotEmpty({ groups: [CREATE] })
|
|
6
|
+
<% } %>
|
|
7
|
+
<% if (field.index ) {%>
|
|
8
|
+
@Index()
|
|
9
|
+
<% } %>
|
|
10
|
+
@Column({ type: "char", length: <%= field.length || 1 %>, nullable: <%= Boolean(field.nullable) %><% if (field.unique) {%>, unique: true <% } %><% if (field.default !== null) {%>, default: '<%= field.default %>'<% } %> })
|
|
11
|
+
<% if (field.primary ) {%>
|
|
12
|
+
@PrimaryColumn()
|
|
13
|
+
<% } %>
|
|
14
|
+
|
|
15
|
+
<%= field.name %>: string;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<% const {field} = it; %>
|
|
2
|
+
|
|
3
|
+
@Column({ "type": "decimal", precision: <%= field.precision || 10 %>, scale: <%= field.scale || 2 %><% if (field.default !== null) {%>, default: <%= field.default %><% } %> })
|
|
4
|
+
<% if (field.index ) {%>
|
|
5
|
+
@Index()
|
|
6
|
+
<% } %>
|
|
7
|
+
<% if (field.primary ) {%>
|
|
8
|
+
@PrimaryColumn()
|
|
9
|
+
<% } %>
|
|
10
|
+
|
|
11
|
+
<%= field.name %>: number;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<% const {field} = it; %>
|
|
2
|
+
|
|
3
|
+
@Column({ "type": "float8"<% if (field.default !== null) {%>, default: <%= field.default %><% } %> })
|
|
4
|
+
<% if (field.index ) {%>
|
|
5
|
+
@Index()
|
|
6
|
+
<% } %>
|
|
7
|
+
<% if (field.primary ) {%>
|
|
8
|
+
@PrimaryColumn()
|
|
9
|
+
<% } %>
|
|
10
|
+
|
|
11
|
+
<%= field.name %>: number;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<% const {field} = it; %>
|
|
2
|
+
|
|
3
|
+
@Column({
|
|
4
|
+
type: 'enum',
|
|
5
|
+
enum: enums.<%= field.dataType%>,
|
|
6
|
+
default: enums.<%= field.dataType%>.<%= field.default %>
|
|
7
|
+
})
|
|
8
|
+
<% if (field.index ) {%>
|
|
9
|
+
@Index()
|
|
10
|
+
<% } %>
|
|
11
|
+
|
|
12
|
+
<%= field.name %>!: enums.<%= field.dataType%>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<% const {field} = it; %>
|
|
2
|
+
|
|
3
|
+
@Column({ "type": "inet"<% if (field.default !== null) {%>, default: <%= field.default %><% } %><% if (field.nullable) {%>, nullable: true<% } %> })
|
|
4
|
+
<% if (field.index ) {%>
|
|
5
|
+
@Index()
|
|
6
|
+
<% } %>
|
|
7
|
+
<% if (field.primary ) {%>
|
|
8
|
+
@PrimaryColumn()
|
|
9
|
+
<% } %>
|
|
10
|
+
|
|
11
|
+
<%= field.name %>: string;
|