@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.
Files changed (194) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +313 -53
  3. package/bin/dev +17 -0
  4. package/bin/dev.cmd +3 -0
  5. package/bin/run +3 -3
  6. package/dist/commands/server/new.d.ts +22 -0
  7. package/dist/commands/server/new.js +100 -0
  8. package/dist/commands/server/scaffold.d.ts +14 -0
  9. package/dist/commands/server/scaffold.js +60 -0
  10. package/dist/index.d.ts +1 -0
  11. package/{lib → dist}/index.js +3 -2
  12. package/dist/lib/apsorc-parser.d.ts +26 -0
  13. package/dist/lib/apsorc-parser.js +65 -0
  14. package/dist/lib/base-command.d.ts +4 -0
  15. package/dist/lib/base-command.js +24 -0
  16. package/dist/lib/controller.d.ts +2 -0
  17. package/dist/lib/controller.js +36 -0
  18. package/dist/lib/dto.d.ts +7 -0
  19. package/dist/lib/dto.js +49 -0
  20. package/dist/lib/entity.d.ts +2 -0
  21. package/dist/lib/entity.js +43 -0
  22. package/dist/lib/enums.d.ts +6 -0
  23. package/dist/lib/enums.js +31 -0
  24. package/dist/lib/gql-dto.d.ts +3 -0
  25. package/dist/lib/gql-dto.js +43 -0
  26. package/dist/lib/index-module.d.ts +2 -0
  27. package/dist/lib/index-module.js +18 -0
  28. package/dist/lib/index.d.ts +10 -0
  29. package/dist/lib/index.js +21 -0
  30. package/dist/lib/module.d.ts +1 -0
  31. package/dist/lib/module.js +28 -0
  32. package/dist/lib/service.d.ts +1 -0
  33. package/dist/lib/service.js +24 -0
  34. package/dist/lib/templates/entities/entity-col-array.eta +12 -0
  35. package/dist/lib/templates/entities/entity-col-bigint.eta +11 -0
  36. package/dist/lib/templates/entities/entity-col-bigserial.eta +12 -0
  37. package/dist/lib/templates/entities/entity-col-boolean.eta +11 -0
  38. package/dist/lib/templates/entities/entity-col-bytea.eta +11 -0
  39. package/dist/lib/templates/entities/entity-col-char.eta +15 -0
  40. package/dist/lib/templates/entities/entity-col-date.eta +8 -0
  41. package/dist/lib/templates/entities/entity-col-decimal.eta +11 -0
  42. package/dist/lib/templates/entities/entity-col-double.eta +11 -0
  43. package/dist/lib/templates/entities/entity-col-enum.eta +12 -0
  44. package/dist/lib/templates/entities/entity-col-float.eta +7 -0
  45. package/dist/lib/templates/entities/entity-col-inet.eta +11 -0
  46. package/dist/lib/templates/entities/entity-col-int4range.eta +34 -0
  47. package/dist/lib/templates/entities/entity-col-integer.eta +11 -0
  48. package/dist/lib/templates/entities/entity-col-interval.eta +11 -0
  49. package/dist/lib/templates/entities/entity-col-json-plain.eta +8 -0
  50. package/dist/lib/templates/entities/entity-col-json.eta +5 -0
  51. package/dist/lib/templates/entities/entity-col-jsonb.eta +5 -0
  52. package/dist/lib/templates/entities/entity-col-money.eta +11 -0
  53. package/dist/lib/templates/entities/entity-col-numeric.eta +11 -0
  54. package/dist/lib/templates/entities/entity-col-point.eta +25 -0
  55. package/dist/lib/templates/entities/entity-col-real.eta +11 -0
  56. package/dist/lib/templates/entities/entity-col-serial.eta +12 -0
  57. package/dist/lib/templates/entities/entity-col-smallint.eta +11 -0
  58. package/dist/lib/templates/entities/entity-col-smallserial.eta +12 -0
  59. package/dist/lib/templates/entities/entity-col-string.eta +23 -0
  60. package/dist/lib/templates/entities/entity-col-text.eta +23 -0
  61. package/dist/lib/templates/entities/entity-col-time.eta +11 -0
  62. package/dist/lib/templates/entities/entity-col-timestamp.eta +4 -0
  63. package/dist/lib/templates/entities/entity-col-timestamptz.eta +4 -0
  64. package/dist/lib/templates/entities/entity-col-timetz.eta +11 -0
  65. package/dist/lib/templates/entities/entity-col-tsvector.eta +11 -0
  66. package/dist/lib/templates/entities/entity-col-uuid.eta +11 -0
  67. package/dist/lib/templates/entities/entity-col-varchar.eta +18 -0
  68. package/dist/lib/templates/entities/entity-col-xml.eta +11 -0
  69. package/dist/lib/templates/entities/entity.eta +116 -0
  70. package/dist/lib/templates/graphql/dto/dto-col-array.eta +4 -0
  71. package/dist/lib/templates/graphql/dto/dto-col-boolean.eta +6 -0
  72. package/dist/lib/templates/graphql/dto/dto-col-date.eta +4 -0
  73. package/dist/lib/templates/graphql/dto/dto-col-enum.eta +5 -0
  74. package/dist/lib/templates/graphql/dto/dto-col-float.eta +4 -0
  75. package/dist/lib/templates/graphql/dto/dto-col-integer.eta +4 -0
  76. package/dist/lib/templates/graphql/dto/dto-col-json-plain.eta +5 -0
  77. package/dist/lib/templates/graphql/dto/dto-col-json.eta +5 -0
  78. package/dist/lib/templates/graphql/dto/dto-col-text.eta +11 -0
  79. package/dist/lib/templates/graphql/dto/dto-col-timestamp.eta +3 -0
  80. package/dist/lib/templates/graphql/dto/dto-col-timestamptz.eta +3 -0
  81. package/dist/lib/templates/graphql/enums-graphql.eta +12 -0
  82. package/dist/lib/templates/graphql/gql-dto-graphql.eta +67 -0
  83. package/dist/lib/templates/graphql/index-module-graphql.eta +26 -0
  84. package/dist/lib/templates/graphql/module-graphql.eta +19 -0
  85. package/dist/lib/templates/header.eta +3 -0
  86. package/dist/lib/templates/rest/controller-rest-spec.eta +77 -0
  87. package/dist/lib/templates/rest/controller-rest.eta +171 -0
  88. package/dist/lib/templates/rest/dto-rest.eta +48 -0
  89. package/dist/lib/templates/rest/enums-rest.eta +7 -0
  90. package/dist/lib/templates/rest/index-module-rest.eta +11 -0
  91. package/dist/lib/templates/rest/module-rest.eta +16 -0
  92. package/dist/lib/templates/rest/ormconfig.eta +9 -0
  93. package/dist/lib/templates/rest/service-rest.eta +25 -0
  94. package/dist/lib/types/constraints.d.ts +4 -0
  95. package/dist/lib/types/constraints.js +2 -0
  96. package/dist/lib/types/entity.d.ts +13 -0
  97. package/dist/lib/types/entity.js +2 -0
  98. package/dist/lib/types/field.d.ts +16 -0
  99. package/dist/lib/types/field.js +2 -0
  100. package/dist/lib/types/index.d.ts +5 -0
  101. package/dist/lib/types/index.js +2 -0
  102. package/dist/lib/types/indices.d.ts +4 -0
  103. package/dist/lib/types/indices.js +2 -0
  104. package/dist/lib/types/json.d.ts +3 -0
  105. package/dist/lib/types/json.js +2 -0
  106. package/dist/lib/types/relationship.d.ts +43 -0
  107. package/dist/lib/types/relationship.js +2 -0
  108. package/dist/lib/utils/casing.d.ts +2 -0
  109. package/dist/lib/utils/casing.js +16 -0
  110. package/dist/lib/utils/field.d.ts +6 -0
  111. package/dist/lib/utils/field.js +65 -0
  112. package/dist/lib/utils/file-system.d.ts +2 -0
  113. package/dist/lib/utils/file-system.js +52 -0
  114. package/dist/lib/utils/relationships/index.d.ts +2 -0
  115. package/dist/lib/utils/relationships/index.js +11 -0
  116. package/dist/lib/utils/relationships/parse-v1.d.ts +4 -0
  117. package/dist/lib/utils/relationships/parse-v1.js +86 -0
  118. package/dist/lib/utils/relationships/parse.d.ts +11 -0
  119. package/dist/lib/utils/relationships/parse.js +192 -0
  120. package/dist/tests/templates/entities/types/array-template.spec.d.ts +1 -0
  121. package/dist/tests/templates/entities/types/array-template.spec.js +82 -0
  122. package/dist/tests/templates/entities/types/bigint-template.spec.d.ts +1 -0
  123. package/dist/tests/templates/entities/types/bigint-template.spec.js +82 -0
  124. package/dist/tests/templates/entities/types/boolean-template.spec.d.ts +1 -0
  125. package/dist/tests/templates/entities/types/boolean-template.spec.js +77 -0
  126. package/dist/tests/templates/entities/types/bytea-template.spec.d.ts +1 -0
  127. package/dist/tests/templates/entities/types/bytea-template.spec.js +68 -0
  128. package/dist/tests/templates/entities/types/char-template.spec.d.ts +1 -0
  129. package/dist/tests/templates/entities/types/char-template.spec.js +68 -0
  130. package/dist/tests/templates/entities/types/date-template.spec.d.ts +1 -0
  131. package/dist/tests/templates/entities/types/date-template.spec.js +56 -0
  132. package/dist/tests/templates/entities/types/decimal-template.spec.d.ts +1 -0
  133. package/dist/tests/templates/entities/types/decimal-template.spec.js +86 -0
  134. package/dist/tests/templates/entities/types/double-template.spec.d.ts +1 -0
  135. package/dist/tests/templates/entities/types/double-template.spec.js +67 -0
  136. package/dist/tests/templates/entities/types/enum-template.spec.d.ts +1 -0
  137. package/dist/tests/templates/entities/types/enum-template.spec.js +85 -0
  138. package/dist/tests/templates/entities/types/float-template.spec.d.ts +1 -0
  139. package/dist/tests/templates/entities/types/float-template.spec.js +67 -0
  140. package/dist/tests/templates/entities/types/inet-template.spec.d.ts +1 -0
  141. package/dist/tests/templates/entities/types/inet-template.spec.js +69 -0
  142. package/dist/tests/templates/entities/types/int4range-template.spec.d.ts +1 -0
  143. package/dist/tests/templates/entities/types/int4range-template.spec.js +60 -0
  144. package/dist/tests/templates/entities/types/integer-template.spec.d.ts +1 -0
  145. package/dist/tests/templates/entities/types/integer-template.spec.js +79 -0
  146. package/dist/tests/templates/entities/types/interval-template.spec.d.ts +1 -0
  147. package/dist/tests/templates/entities/types/interval-template.spec.js +68 -0
  148. package/dist/tests/templates/entities/types/json-plain-template.spec.d.ts +1 -0
  149. package/dist/tests/templates/entities/types/json-plain-template.spec.js +54 -0
  150. package/dist/tests/templates/entities/types/json-template.spec.d.ts +1 -0
  151. package/dist/tests/templates/entities/types/json-template.spec.js +40 -0
  152. package/dist/tests/templates/entities/types/jsonb-template.spec.d.ts +1 -0
  153. package/dist/tests/templates/entities/types/jsonb-template.spec.js +40 -0
  154. package/dist/tests/templates/entities/types/money-template.spec.d.ts +1 -0
  155. package/dist/tests/templates/entities/types/money-template.spec.js +68 -0
  156. package/dist/tests/templates/entities/types/numeric-template.spec.d.ts +1 -0
  157. package/dist/tests/templates/entities/types/numeric-template.spec.js +84 -0
  158. package/dist/tests/templates/entities/types/point-template.spec.d.ts +1 -0
  159. package/dist/tests/templates/entities/types/point-template.spec.js +58 -0
  160. package/dist/tests/templates/entities/types/real-template.spec.d.ts +1 -0
  161. package/dist/tests/templates/entities/types/real-template.spec.js +67 -0
  162. package/dist/tests/templates/entities/types/serial-template.spec.d.ts +1 -0
  163. package/dist/tests/templates/entities/types/serial-template.spec.js +113 -0
  164. package/dist/tests/templates/entities/types/smallint-template.spec.d.ts +1 -0
  165. package/dist/tests/templates/entities/types/smallint-template.spec.js +82 -0
  166. package/dist/tests/templates/entities/types/string-template.spec.d.ts +1 -0
  167. package/dist/tests/templates/entities/types/string-template.spec.js +111 -0
  168. package/dist/tests/templates/entities/types/text-template.spec.d.ts +1 -0
  169. package/dist/tests/templates/entities/types/text-template.spec.js +70 -0
  170. package/dist/tests/templates/entities/types/time-template.spec.d.ts +1 -0
  171. package/dist/tests/templates/entities/types/time-template.spec.js +68 -0
  172. package/dist/tests/templates/entities/types/timestamp-template.spec.d.ts +1 -0
  173. package/dist/tests/templates/entities/types/timestamp-template.spec.js +74 -0
  174. package/dist/tests/templates/entities/types/timetz-template.spec.d.ts +1 -0
  175. package/dist/tests/templates/entities/types/timetz-template.spec.js +68 -0
  176. package/dist/tests/templates/entities/types/tsvector-template.spec.d.ts +1 -0
  177. package/dist/tests/templates/entities/types/tsvector-template.spec.js +55 -0
  178. package/dist/tests/templates/entities/types/uuid-template.spec.d.ts +1 -0
  179. package/dist/tests/templates/entities/types/uuid-template.spec.js +82 -0
  180. package/dist/tests/templates/entities/types/varchar-template.spec.d.ts +1 -0
  181. package/dist/tests/templates/entities/types/varchar-template.spec.js +102 -0
  182. package/dist/tests/templates/entities/types/xml-template.spec.d.ts +1 -0
  183. package/dist/tests/templates/entities/types/xml-template.spec.js +55 -0
  184. package/dist/tests/templates/entities/utils/template-test-utils.d.ts +31 -0
  185. package/dist/tests/templates/entities/utils/template-test-utils.js +50 -0
  186. package/oclif.manifest.json +60 -1
  187. package/package.json +84 -55
  188. package/lib/commands/new.d.ts +0 -22
  189. package/lib/commands/new.js +0 -198
  190. package/lib/commands/scaffold.d.ts +0 -18
  191. package/lib/commands/scaffold.js +0 -106
  192. package/lib/index.d.ts +0 -1
  193. package/lib/lib/scaffold.d.ts +0 -30
  194. package/lib/lib/scaffold.js +0 -566
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const template_test_utils_1 = require("../utils/template-test-utils");
4
+ const globals_1 = require("@jest/globals");
5
+ (0, globals_1.describe)('SmallInt Entity Template Tests', () => {
6
+ // Setup Eta configuration once before all tests
7
+ (0, globals_1.beforeAll)(() => {
8
+ (0, template_test_utils_1.configureEta)();
9
+ });
10
+ const templatePath = './entities/entity-col-smallint';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic smallint field correctly',
14
+ field: {
15
+ name: 'smallCounter',
16
+ dataType: 'number',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@Column({ "type": "smallint"' },
21
+ { type: 'contains', text: 'smallCounter: number;' },
22
+ { type: 'notContains', text: '@Index()' },
23
+ { type: 'notContains', text: '@PrimaryColumn()' }
24
+ ]
25
+ },
26
+ {
27
+ name: 'should render nullable smallint field correctly',
28
+ field: {
29
+ name: 'optionalCounter',
30
+ dataType: 'number',
31
+ nullable: true
32
+ },
33
+ assertions: [
34
+ { type: 'contains', text: '@Column({ "type": "smallint"' },
35
+ { type: 'contains', text: 'optionalCounter: number;' }
36
+ ]
37
+ },
38
+ {
39
+ name: 'should render smallint field with default value correctly',
40
+ field: {
41
+ name: 'defaultCounter',
42
+ dataType: 'number',
43
+ nullable: false,
44
+ default: 0
45
+ },
46
+ assertions: [
47
+ { type: 'contains', text: '@Column({ "type": "smallint"' },
48
+ { type: 'contains', text: 'default: 0' },
49
+ { type: 'contains', text: 'defaultCounter: number;' }
50
+ ]
51
+ },
52
+ {
53
+ name: 'should render indexed smallint field correctly',
54
+ field: {
55
+ name: 'indexedCounter',
56
+ dataType: 'number',
57
+ nullable: false,
58
+ index: true
59
+ },
60
+ assertions: [
61
+ { type: 'contains', text: '@Column({ "type": "smallint"' },
62
+ { type: 'contains', text: '@Index()' },
63
+ { type: 'contains', text: 'indexedCounter: number;' }
64
+ ]
65
+ },
66
+ {
67
+ name: 'should render primary key smallint field correctly',
68
+ field: {
69
+ name: 'id',
70
+ dataType: 'number',
71
+ nullable: false,
72
+ primary: true
73
+ },
74
+ assertions: [
75
+ { type: 'contains', text: '@Column({ "type": "smallint"' },
76
+ { type: 'contains', text: '@PrimaryColumn()' },
77
+ { type: 'contains', text: 'id: number;' }
78
+ ]
79
+ }
80
+ ];
81
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
82
+ });
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const template_test_utils_1 = require("../utils/template-test-utils");
4
+ const globals_1 = require("@jest/globals");
5
+ (0, globals_1.describe)('String Entity Template Tests', () => {
6
+ // Setup Eta configuration once before all tests
7
+ (0, globals_1.beforeAll)(() => {
8
+ (0, template_test_utils_1.configureEta)();
9
+ });
10
+ const templatePath = './entities/entity-col-string';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic string field correctly',
14
+ field: {
15
+ name: 'fullName',
16
+ dataType: 'string',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@IsOptional({ groups: [UPDATE] })' },
21
+ { type: 'contains', text: '@IsNotEmpty({ groups: [CREATE] })' },
22
+ { type: 'contains', text: '@Column({ type: "text", nullable: false' },
23
+ { type: 'contains', text: 'fullName: string;' },
24
+ { type: 'notContains', text: '@Index()' },
25
+ { type: 'notContains', text: '@PrimaryColumn()' },
26
+ { type: 'notContains', text: '@IsEmail' },
27
+ ]
28
+ },
29
+ {
30
+ name: 'should render nullable string field correctly',
31
+ field: {
32
+ name: 'description',
33
+ dataType: 'string',
34
+ nullable: true
35
+ },
36
+ assertions: [
37
+ { type: 'contains', text: '@IsOptional({ groups: [UPDATE] })' },
38
+ { type: 'notContains', text: '@IsNotEmpty({ groups: [CREATE] })' },
39
+ { type: 'contains', text: '@Column({ type: "text", nullable: true' },
40
+ { type: 'contains', text: 'description: string;' }
41
+ ]
42
+ },
43
+ {
44
+ name: 'should render string field with default value correctly',
45
+ field: {
46
+ name: 'status',
47
+ dataType: 'string',
48
+ nullable: false,
49
+ default: 'active'
50
+ },
51
+ assertions: [
52
+ { type: 'contains', text: 'default: \'active\'' },
53
+ { type: 'contains', text: 'status: string;' }
54
+ ]
55
+ },
56
+ {
57
+ name: 'should render indexed string field correctly',
58
+ field: {
59
+ name: 'email',
60
+ dataType: 'string',
61
+ nullable: false,
62
+ index: true
63
+ },
64
+ assertions: [
65
+ { type: 'contains', text: '@Index()' },
66
+ { type: 'contains', text: 'email: string;' }
67
+ ]
68
+ },
69
+ {
70
+ name: 'should render primary key string field correctly',
71
+ field: {
72
+ name: 'id',
73
+ dataType: 'string',
74
+ nullable: false,
75
+ primary: true
76
+ },
77
+ assertions: [
78
+ { type: 'contains', text: '@PrimaryColumn()' },
79
+ { type: 'contains', text: 'id: string;' }
80
+ ]
81
+ },
82
+ {
83
+ name: 'should render unique string field correctly',
84
+ field: {
85
+ name: 'username',
86
+ dataType: 'string',
87
+ nullable: false,
88
+ unique: true
89
+ },
90
+ assertions: [
91
+ { type: 'contains', text: 'unique: true' },
92
+ { type: 'contains', text: 'username: string;' }
93
+ ]
94
+ },
95
+ {
96
+ name: 'should render email field correctly',
97
+ field: {
98
+ name: 'email',
99
+ dataType: 'string',
100
+ nullable: false,
101
+ // eslint-disable-next-line camelcase
102
+ is_email: true
103
+ },
104
+ assertions: [
105
+ { type: 'contains', text: '@IsEmail(' },
106
+ { type: 'contains', text: 'email: string;' }
107
+ ]
108
+ }
109
+ ];
110
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
111
+ });
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const template_test_utils_1 = require("../utils/template-test-utils");
4
+ const globals_1 = require("@jest/globals");
5
+ (0, globals_1.describe)('Text Entity Template Tests', () => {
6
+ // Setup Eta configuration once before all tests
7
+ (0, globals_1.beforeAll)(() => {
8
+ (0, template_test_utils_1.configureEta)();
9
+ });
10
+ const templatePath = './entities/entity-col-text';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic text field correctly',
14
+ field: {
15
+ name: 'content',
16
+ dataType: 'string',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@Column({ type: "text"' },
21
+ { type: 'contains', text: '@IsOptional({ groups: [UPDATE] })' },
22
+ { type: 'contains', text: '@IsNotEmpty({ groups: [CREATE] })' },
23
+ { type: 'contains', text: 'content: string;' },
24
+ { type: 'notContains', text: '@Index()' }
25
+ ]
26
+ },
27
+ {
28
+ name: 'should render nullable text field correctly',
29
+ field: {
30
+ name: 'optionalContent',
31
+ dataType: 'string',
32
+ nullable: true
33
+ },
34
+ assertions: [
35
+ { type: 'contains', text: '@Column({ type: "text"' },
36
+ { type: 'contains', text: 'nullable: true' },
37
+ { type: 'contains', text: '@IsOptional({ groups: [UPDATE] })' },
38
+ { type: 'contains', text: 'optionalContent: string;' }
39
+ ]
40
+ },
41
+ {
42
+ name: 'should render text field with default value correctly',
43
+ field: {
44
+ name: 'defaultContent',
45
+ dataType: 'string',
46
+ nullable: false,
47
+ default: "'empty'"
48
+ },
49
+ assertions: [
50
+ { type: 'contains', text: '@Column({ type: "text"' },
51
+ { type: 'contains', text: 'defaultContent: string;' }
52
+ ]
53
+ },
54
+ {
55
+ name: 'should render indexed text field correctly',
56
+ field: {
57
+ name: 'indexedContent',
58
+ dataType: 'string',
59
+ nullable: false,
60
+ index: true
61
+ },
62
+ assertions: [
63
+ { type: 'contains', text: '@Column({ type: "text"' },
64
+ { type: 'contains', text: '@Index()' },
65
+ { type: 'contains', text: 'indexedContent: string;' }
66
+ ]
67
+ }
68
+ ];
69
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
70
+ });
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const template_test_utils_1 = require("../utils/template-test-utils");
4
+ const globals_1 = require("@jest/globals");
5
+ (0, globals_1.describe)('Time Entity Template Tests', () => {
6
+ // Setup Eta configuration once before all tests
7
+ (0, globals_1.beforeAll)(() => {
8
+ (0, template_test_utils_1.configureEta)();
9
+ });
10
+ const templatePath = './entities/entity-col-time';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic time field correctly',
14
+ field: {
15
+ name: 'startTime',
16
+ dataType: 'string',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@Column({ "type": "time"' },
21
+ { type: 'contains', text: 'startTime: string;' },
22
+ { type: 'notContains', text: '@Index()' },
23
+ { type: 'notContains', text: '@PrimaryColumn()' }
24
+ ]
25
+ },
26
+ {
27
+ name: 'should render nullable time field correctly',
28
+ field: {
29
+ name: 'optionalTime',
30
+ dataType: 'string',
31
+ nullable: true
32
+ },
33
+ assertions: [
34
+ { type: 'contains', text: '@Column({ "type": "time"' },
35
+ { type: 'contains', text: 'optionalTime: string;' }
36
+ ]
37
+ },
38
+ {
39
+ name: 'should render time field with default value correctly',
40
+ field: {
41
+ name: 'defaultTime',
42
+ dataType: 'string',
43
+ nullable: false,
44
+ default: '12:00:00'
45
+ },
46
+ assertions: [
47
+ { type: 'contains', text: '@Column({ "type": "time"' },
48
+ { type: 'contains', text: 'default: 12:00:00' },
49
+ { type: 'contains', text: 'defaultTime: string;' }
50
+ ]
51
+ },
52
+ {
53
+ name: 'should render indexed time field correctly',
54
+ field: {
55
+ name: 'indexedTime',
56
+ dataType: 'string',
57
+ nullable: false,
58
+ index: true
59
+ },
60
+ assertions: [
61
+ { type: 'contains', text: '@Column({ "type": "time"' },
62
+ { type: 'contains', text: '@Index()' },
63
+ { type: 'contains', text: 'indexedTime: string;' }
64
+ ]
65
+ }
66
+ ];
67
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
68
+ });
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const template_test_utils_1 = require("../utils/template-test-utils");
4
+ const globals_1 = require("@jest/globals");
5
+ (0, globals_1.describe)('Timestamp Templates Tests', () => {
6
+ // Setup Eta configuration once before all tests
7
+ (0, globals_1.beforeAll)(() => {
8
+ (0, template_test_utils_1.configureEta)();
9
+ });
10
+ (0, globals_1.describe)('Timestamp Entity Template Tests', () => {
11
+ const templatePath = './entities/entity-col-timestamp';
12
+ const testCases = [
13
+ {
14
+ name: 'should render basic timestamp field correctly',
15
+ field: {
16
+ name: 'createdAt',
17
+ dataType: 'Date',
18
+ nullable: false
19
+ },
20
+ assertions: [
21
+ { type: 'contains', text: "@Column({ type: 'timestamp'" },
22
+ { type: 'contains', text: 'nullable: false' },
23
+ { type: 'contains', text: 'createdAt: Date;' }
24
+ ]
25
+ },
26
+ {
27
+ name: 'should render nullable timestamp field correctly',
28
+ field: {
29
+ name: 'optionalTimestamp',
30
+ dataType: 'Date',
31
+ nullable: true
32
+ },
33
+ assertions: [
34
+ { type: 'contains', text: "@Column({ type: 'timestamp'" },
35
+ { type: 'contains', text: 'nullable: true' },
36
+ { type: 'contains', text: 'optionalTimestamp: Date;' }
37
+ ]
38
+ }
39
+ ];
40
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
41
+ });
42
+ (0, globals_1.describe)('TimestampWithTimeZone Entity Template Tests', () => {
43
+ const templatePath = './entities/entity-col-timestamptz';
44
+ const testCases = [
45
+ {
46
+ name: 'should render basic timestamptz field correctly',
47
+ field: {
48
+ name: 'createdAtUtc',
49
+ dataType: 'Date',
50
+ nullable: false
51
+ },
52
+ assertions: [
53
+ { type: 'contains', text: "@Column({ type: 'timestamptz'" },
54
+ { type: 'contains', text: 'nullable: false' },
55
+ { type: 'contains', text: 'createdAtUtc: Date;' }
56
+ ]
57
+ },
58
+ {
59
+ name: 'should render nullable timestamptz field correctly',
60
+ field: {
61
+ name: 'optionalTimestamptz',
62
+ dataType: 'Date',
63
+ nullable: true
64
+ },
65
+ assertions: [
66
+ { type: 'contains', text: "@Column({ type: 'timestamptz'" },
67
+ { type: 'contains', text: 'nullable: true' },
68
+ { type: 'contains', text: 'optionalTimestamptz: Date;' }
69
+ ]
70
+ }
71
+ ];
72
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
73
+ });
74
+ });
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const template_test_utils_1 = require("../utils/template-test-utils");
4
+ const globals_1 = require("@jest/globals");
5
+ (0, globals_1.describe)('TimeWithTimeZone Entity Template Tests', () => {
6
+ // Setup Eta configuration once before all tests
7
+ (0, globals_1.beforeAll)(() => {
8
+ (0, template_test_utils_1.configureEta)();
9
+ });
10
+ const templatePath = './entities/entity-col-timetz';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic timetz field correctly',
14
+ field: {
15
+ name: 'globalTime',
16
+ dataType: 'string',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@Column({ "type": "timetz"' },
21
+ { type: 'contains', text: 'globalTime: string;' },
22
+ { type: 'notContains', text: '@Index()' },
23
+ { type: 'notContains', text: '@PrimaryColumn()' }
24
+ ]
25
+ },
26
+ {
27
+ name: 'should render nullable timetz field correctly',
28
+ field: {
29
+ name: 'optionalGlobalTime',
30
+ dataType: 'string',
31
+ nullable: true
32
+ },
33
+ assertions: [
34
+ { type: 'contains', text: '@Column({ "type": "timetz"' },
35
+ { type: 'contains', text: 'optionalGlobalTime: string;' }
36
+ ]
37
+ },
38
+ {
39
+ name: 'should render timetz field with default value correctly',
40
+ field: {
41
+ name: 'defaultGlobalTime',
42
+ dataType: 'string',
43
+ nullable: false,
44
+ default: '12:00:00+00'
45
+ },
46
+ assertions: [
47
+ { type: 'contains', text: '@Column({ "type": "timetz"' },
48
+ { type: 'contains', text: 'default: 12:00:00+00' },
49
+ { type: 'contains', text: 'defaultGlobalTime: string;' }
50
+ ]
51
+ },
52
+ {
53
+ name: 'should render indexed timetz field correctly',
54
+ field: {
55
+ name: 'indexedGlobalTime',
56
+ dataType: 'string',
57
+ nullable: false,
58
+ index: true
59
+ },
60
+ assertions: [
61
+ { type: 'contains', text: '@Column({ "type": "timetz"' },
62
+ { type: 'contains', text: '@Index()' },
63
+ { type: 'contains', text: 'indexedGlobalTime: string;' }
64
+ ]
65
+ }
66
+ ];
67
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
68
+ });
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const template_test_utils_1 = require("../utils/template-test-utils");
4
+ const globals_1 = require("@jest/globals");
5
+ (0, globals_1.describe)('TSVector Entity Template Tests', () => {
6
+ // Setup Eta configuration once before all tests
7
+ (0, globals_1.beforeAll)(() => {
8
+ (0, template_test_utils_1.configureEta)();
9
+ });
10
+ const templatePath = './entities/entity-col-tsvector';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic tsvector field correctly',
14
+ field: {
15
+ name: 'searchVector',
16
+ dataType: 'string',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@Column({ "type": "tsvector"' },
21
+ { type: 'contains', text: 'searchVector: string;' },
22
+ { type: 'notContains', text: '@Index()' },
23
+ { type: 'notContains', text: '@PrimaryColumn()' }
24
+ ]
25
+ },
26
+ {
27
+ name: 'should render nullable tsvector field correctly',
28
+ field: {
29
+ name: 'optionalVector',
30
+ dataType: 'string',
31
+ nullable: true
32
+ },
33
+ assertions: [
34
+ { type: 'contains', text: '@Column({ "type": "tsvector"' },
35
+ { type: 'contains', text: 'nullable: true' },
36
+ { type: 'contains', text: 'optionalVector: string;' }
37
+ ]
38
+ },
39
+ {
40
+ name: 'should render indexed tsvector field correctly',
41
+ field: {
42
+ name: 'indexedVector',
43
+ dataType: 'string',
44
+ nullable: false,
45
+ index: true
46
+ },
47
+ assertions: [
48
+ { type: 'contains', text: '@Column({ "type": "tsvector"' },
49
+ { type: 'contains', text: '@Index()' },
50
+ { type: 'contains', text: 'indexedVector: string;' }
51
+ ]
52
+ }
53
+ ];
54
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
55
+ });
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const template_test_utils_1 = require("../utils/template-test-utils");
4
+ const globals_1 = require("@jest/globals");
5
+ (0, globals_1.describe)('UUID Entity Template Tests', () => {
6
+ // Setup Eta configuration once before all tests
7
+ (0, globals_1.beforeAll)(() => {
8
+ (0, template_test_utils_1.configureEta)();
9
+ });
10
+ const templatePath = './entities/entity-col-uuid';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic uuid field correctly',
14
+ field: {
15
+ name: 'id',
16
+ dataType: 'string',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@Column({ "type": "uuid"' },
21
+ { type: 'contains', text: 'id: string;' },
22
+ { type: 'notContains', text: '@Index()' },
23
+ { type: 'notContains', text: '@PrimaryColumn()' }
24
+ ]
25
+ },
26
+ {
27
+ name: 'should render nullable uuid field correctly',
28
+ field: {
29
+ name: 'optionalId',
30
+ dataType: 'string',
31
+ nullable: true
32
+ },
33
+ assertions: [
34
+ { type: 'contains', text: '@Column({ "type": "uuid"' },
35
+ { type: 'contains', text: 'optionalId: string;' }
36
+ ]
37
+ },
38
+ {
39
+ name: 'should render uuid field with default value correctly',
40
+ field: {
41
+ name: 'defaultId',
42
+ dataType: 'string',
43
+ nullable: false,
44
+ default: 'uuid_generate_v4()'
45
+ },
46
+ assertions: [
47
+ { type: 'contains', text: '@Column({ "type": "uuid"' },
48
+ { type: 'contains', text: 'default: uuid_generate_v4()' },
49
+ { type: 'contains', text: 'defaultId: string;' }
50
+ ]
51
+ },
52
+ {
53
+ name: 'should render indexed uuid field correctly',
54
+ field: {
55
+ name: 'indexedId',
56
+ dataType: 'string',
57
+ nullable: false,
58
+ index: true
59
+ },
60
+ assertions: [
61
+ { type: 'contains', text: '@Column({ "type": "uuid"' },
62
+ { type: 'contains', text: '@Index()' },
63
+ { type: 'contains', text: 'indexedId: string;' }
64
+ ]
65
+ },
66
+ {
67
+ name: 'should render primary key uuid field correctly',
68
+ field: {
69
+ name: 'primaryId',
70
+ dataType: 'string',
71
+ nullable: false,
72
+ primary: true
73
+ },
74
+ assertions: [
75
+ { type: 'contains', text: '@Column({ "type": "uuid"' },
76
+ { type: 'contains', text: '@PrimaryColumn()' },
77
+ { type: 'contains', text: 'primaryId: string;' }
78
+ ]
79
+ }
80
+ ];
81
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
82
+ });