@apso/cli 0.0.4 → 0.0.43

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 +105 -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,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)('Char 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-char';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic char field correctly',
14
+ field: {
15
+ name: 'charCode',
16
+ dataType: 'string',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@Column({ type: "char", length: 1' },
21
+ { type: 'contains', text: 'charCode: string;' },
22
+ { type: 'notContains', text: '@Index()' },
23
+ { type: 'notContains', text: '@PrimaryColumn()' }
24
+ ]
25
+ },
26
+ {
27
+ name: 'should render nullable char field correctly',
28
+ field: {
29
+ name: 'optionalChar',
30
+ dataType: 'string',
31
+ nullable: true
32
+ },
33
+ assertions: [
34
+ { type: 'contains', text: '@Column({ type: "char"' },
35
+ { type: 'contains', text: 'nullable: true' },
36
+ { type: 'contains', text: 'optionalChar: string;' }
37
+ ]
38
+ },
39
+ {
40
+ name: 'should render char field with custom length correctly',
41
+ field: {
42
+ name: 'fixedCode',
43
+ dataType: 'string',
44
+ nullable: false,
45
+ length: 5
46
+ },
47
+ assertions: [
48
+ { type: 'contains', text: '@Column({ type: "char", length: 5' },
49
+ { type: 'contains', text: 'fixedCode: string;' }
50
+ ]
51
+ },
52
+ {
53
+ name: 'should render indexed char field correctly',
54
+ field: {
55
+ name: 'indexedChar',
56
+ dataType: 'string',
57
+ nullable: false,
58
+ index: true
59
+ },
60
+ assertions: [
61
+ { type: 'contains', text: '@Column({ type: "char"' },
62
+ { type: 'contains', text: '@Index()' },
63
+ { type: 'contains', text: 'indexedChar: string;' }
64
+ ]
65
+ }
66
+ ];
67
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
68
+ });
@@ -0,0 +1,56 @@
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)('Date 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-date';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic date field correctly',
14
+ field: {
15
+ name: 'birthDate',
16
+ dataType: 'Date',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: "@Column({ type: 'date'" },
21
+ { type: 'contains', text: 'nullable: false' },
22
+ { type: 'contains', text: 'birthDate: string;' },
23
+ { type: 'notContains', text: '@Index()' }
24
+ ]
25
+ },
26
+ {
27
+ name: 'should render nullable date field correctly',
28
+ field: {
29
+ name: 'optionalDate',
30
+ dataType: 'Date',
31
+ nullable: true
32
+ },
33
+ assertions: [
34
+ { type: 'contains', text: "@Column({ type: 'date'" },
35
+ { type: 'contains', text: 'nullable: true' },
36
+ { type: 'contains', text: 'optionalDate: string;' }
37
+ ]
38
+ },
39
+ {
40
+ name: 'should render indexed date field correctly',
41
+ field: {
42
+ name: 'indexedDate',
43
+ dataType: 'Date',
44
+ nullable: false,
45
+ index: true
46
+ },
47
+ assertions: [
48
+ { type: 'contains', text: "@Column({ type: 'date'" },
49
+ { type: 'contains', text: 'nullable: false' },
50
+ { type: 'contains', text: '@Index()' },
51
+ { type: 'contains', text: 'indexedDate: string;' }
52
+ ]
53
+ }
54
+ ];
55
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
56
+ });
@@ -0,0 +1,86 @@
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)('Decimal 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-decimal';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic decimal field correctly',
14
+ field: {
15
+ name: 'price',
16
+ dataType: 'number',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@Column({ "type": "decimal"' },
21
+ { type: 'contains', text: 'precision: 10' },
22
+ { type: 'contains', text: 'scale: 2' },
23
+ { type: 'contains', text: 'price: number;' },
24
+ { type: 'notContains', text: '@Index()' },
25
+ { type: 'notContains', text: '@PrimaryColumn()' }
26
+ ]
27
+ },
28
+ {
29
+ name: 'should render nullable decimal field correctly',
30
+ field: {
31
+ name: 'optionalPrice',
32
+ dataType: 'number',
33
+ nullable: true
34
+ },
35
+ assertions: [
36
+ { type: 'contains', text: '@Column({ "type": "decimal"' },
37
+ { type: 'contains', text: 'optionalPrice: number;' }
38
+ ]
39
+ },
40
+ {
41
+ name: 'should render decimal field with custom precision and scale',
42
+ field: {
43
+ name: 'amount',
44
+ dataType: 'number',
45
+ nullable: false,
46
+ precision: 16,
47
+ scale: 6
48
+ },
49
+ assertions: [
50
+ { type: 'contains', text: '@Column({ "type": "decimal"' },
51
+ { type: 'contains', text: 'precision: 16' },
52
+ { type: 'contains', text: 'scale: 6' },
53
+ { type: 'contains', text: 'amount: number;' }
54
+ ]
55
+ },
56
+ {
57
+ name: 'should render decimal field with default value correctly',
58
+ field: {
59
+ name: 'defaultPrice',
60
+ dataType: 'number',
61
+ nullable: false,
62
+ default: '0.00'
63
+ },
64
+ assertions: [
65
+ { type: 'contains', text: '@Column({ "type": "decimal"' },
66
+ { type: 'contains', text: 'default: 0.00' },
67
+ { type: 'contains', text: 'defaultPrice: number;' }
68
+ ]
69
+ },
70
+ {
71
+ name: 'should render indexed decimal field correctly',
72
+ field: {
73
+ name: 'indexedPrice',
74
+ dataType: 'number',
75
+ nullable: false,
76
+ index: true
77
+ },
78
+ assertions: [
79
+ { type: 'contains', text: '@Column({ "type": "decimal"' },
80
+ { type: 'contains', text: '@Index()' },
81
+ { type: 'contains', text: 'indexedPrice: number;' }
82
+ ]
83
+ }
84
+ ];
85
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
86
+ });
@@ -0,0 +1,67 @@
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)('Double 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-double';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic double field correctly',
14
+ field: {
15
+ name: 'doubleValue',
16
+ dataType: 'number',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@Column({ "type": "float8"' },
21
+ { type: 'contains', text: 'doubleValue: number;' },
22
+ { type: 'notContains', text: '@Index()' },
23
+ { type: 'notContains', text: '@PrimaryColumn()' }
24
+ ]
25
+ },
26
+ {
27
+ name: 'should render nullable double field correctly',
28
+ field: {
29
+ name: 'optionalDouble',
30
+ dataType: 'number',
31
+ nullable: true
32
+ },
33
+ assertions: [
34
+ { type: 'contains', text: '@Column({ "type": "float8"' },
35
+ { type: 'contains', text: 'optionalDouble: number;' }
36
+ ]
37
+ },
38
+ {
39
+ name: 'should render double field with default value correctly',
40
+ field: {
41
+ name: 'defaultDouble',
42
+ dataType: 'number',
43
+ nullable: false,
44
+ default: 0
45
+ },
46
+ assertions: [
47
+ { type: 'contains', text: '@Column({ "type": "float8", default: 0 })' },
48
+ { type: 'contains', text: 'defaultDouble: number;' }
49
+ ]
50
+ },
51
+ {
52
+ name: 'should render indexed double field correctly',
53
+ field: {
54
+ name: 'indexedDouble',
55
+ dataType: 'number',
56
+ nullable: false,
57
+ index: true
58
+ },
59
+ assertions: [
60
+ { type: 'contains', text: '@Column({ "type": "float8"' },
61
+ { type: 'contains', text: '@Index()' },
62
+ { type: 'contains', text: 'indexedDouble: number;' }
63
+ ]
64
+ }
65
+ ];
66
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
67
+ });
@@ -0,0 +1,85 @@
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)('Enum 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-enum';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic enum field correctly',
14
+ field: {
15
+ name: 'status',
16
+ dataType: 'enum',
17
+ nullable: false,
18
+ // eslint-disable-next-line camelcase
19
+ enum_name: 'UserStatus',
20
+ // eslint-disable-next-line camelcase
21
+ enum_values: ['ACTIVE', 'INACTIVE', 'PENDING']
22
+ },
23
+ assertions: [
24
+ { type: 'contains', text: "type: 'enum'" },
25
+ { type: 'contains', text: 'enum: enums.enum' },
26
+ { type: 'contains', text: 'status!: enums.enum;' },
27
+ { type: 'notContains', text: '@Index()' },
28
+ { type: 'notContains', text: '@PrimaryColumn()' }
29
+ ]
30
+ },
31
+ {
32
+ name: 'should render nullable enum field correctly',
33
+ field: {
34
+ name: 'optionalStatus',
35
+ dataType: 'enum',
36
+ nullable: true,
37
+ // eslint-disable-next-line camelcase
38
+ enum_name: 'UserStatus',
39
+ // eslint-disable-next-line camelcase
40
+ enum_values: ['ACTIVE', 'INACTIVE', 'PENDING']
41
+ },
42
+ assertions: [
43
+ { type: 'contains', text: "type: 'enum'" },
44
+ { type: 'contains', text: 'optionalStatus!: enums.enum;' }
45
+ ]
46
+ },
47
+ {
48
+ name: 'should render enum field with default value correctly',
49
+ field: {
50
+ name: 'defaultStatus',
51
+ dataType: 'enum',
52
+ nullable: false,
53
+ // eslint-disable-next-line camelcase
54
+ enum_name: 'UserStatus',
55
+ // eslint-disable-next-line camelcase
56
+ enum_values: ['ACTIVE', 'INACTIVE', 'PENDING'],
57
+ default: 'UserStatus.INACTIVE'
58
+ },
59
+ assertions: [
60
+ { type: 'contains', text: "type: 'enum'" },
61
+ { type: 'contains', text: 'default: enums.enum.UserStatus.INACTIVE' },
62
+ { type: 'contains', text: 'defaultStatus!: enums.enum;' }
63
+ ]
64
+ },
65
+ {
66
+ name: 'should render indexed enum field correctly',
67
+ field: {
68
+ name: 'indexedStatus',
69
+ dataType: 'enum',
70
+ nullable: false,
71
+ // eslint-disable-next-line camelcase
72
+ enum_name: 'UserStatus',
73
+ // eslint-disable-next-line camelcase
74
+ enum_values: ['ACTIVE', 'INACTIVE', 'PENDING'],
75
+ index: true
76
+ },
77
+ assertions: [
78
+ { type: 'contains', text: "type: 'enum'" },
79
+ { type: 'contains', text: '@Index()' },
80
+ { type: 'contains', text: 'indexedStatus!: enums.enum;' }
81
+ ]
82
+ }
83
+ ];
84
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
85
+ });
@@ -0,0 +1,67 @@
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)('Float 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-float';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic float field correctly',
14
+ field: {
15
+ name: 'floatValue',
16
+ dataType: 'number',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@Column({ "type": "decimal"' },
21
+ { type: 'contains', text: 'floatValue: number;' },
22
+ { type: 'notContains', text: '@Index()' },
23
+ { type: 'notContains', text: '@PrimaryColumn()' }
24
+ ]
25
+ },
26
+ {
27
+ name: 'should render nullable float field correctly',
28
+ field: {
29
+ name: 'optionalFloat',
30
+ dataType: 'number',
31
+ nullable: true
32
+ },
33
+ assertions: [
34
+ { type: 'contains', text: '@Column({ "type": "decimal"' },
35
+ { type: 'contains', text: 'optionalFloat: number;' }
36
+ ]
37
+ },
38
+ {
39
+ name: 'should render float field with default value correctly',
40
+ field: {
41
+ name: 'defaultFloat',
42
+ dataType: 'number',
43
+ nullable: false,
44
+ default: 0
45
+ },
46
+ assertions: [
47
+ { type: 'contains', text: '@Column({ "type": "decimal", default: 0 })' },
48
+ { type: 'contains', text: 'defaultFloat: number;' }
49
+ ]
50
+ },
51
+ {
52
+ name: 'should render indexed float field correctly',
53
+ field: {
54
+ name: 'indexedFloat',
55
+ dataType: 'number',
56
+ nullable: false,
57
+ index: true
58
+ },
59
+ assertions: [
60
+ { type: 'contains', text: '@Column({ "type": "decimal"' },
61
+ { type: 'contains', text: '@Index()' },
62
+ { type: 'contains', text: 'indexedFloat: number;' }
63
+ ]
64
+ }
65
+ ];
66
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
67
+ });
@@ -0,0 +1,69 @@
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)('Inet 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-inet';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic inet field correctly',
14
+ field: {
15
+ name: 'ipAddress',
16
+ dataType: 'string',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@Column({ "type": "inet"' },
21
+ { type: 'contains', text: 'ipAddress: string;' },
22
+ { type: 'notContains', text: '@Index()' },
23
+ { type: 'notContains', text: '@PrimaryColumn()' }
24
+ ]
25
+ },
26
+ {
27
+ name: 'should render nullable inet field correctly',
28
+ field: {
29
+ name: 'optionalIp',
30
+ dataType: 'string',
31
+ nullable: true
32
+ },
33
+ assertions: [
34
+ { type: 'contains', text: '@Column({ "type": "inet"' },
35
+ { type: 'contains', text: 'nullable: true' },
36
+ { type: 'contains', text: 'optionalIp: string;' }
37
+ ]
38
+ },
39
+ {
40
+ name: 'should render inet field with default value correctly',
41
+ field: {
42
+ name: 'defaultIp',
43
+ dataType: 'string',
44
+ nullable: false,
45
+ default: '127.0.0.1'
46
+ },
47
+ assertions: [
48
+ { type: 'contains', text: '@Column({ "type": "inet"' },
49
+ { type: 'contains', text: 'default: 127.0.0.1' },
50
+ { type: 'contains', text: 'defaultIp: string;' }
51
+ ]
52
+ },
53
+ {
54
+ name: 'should render indexed inet field correctly',
55
+ field: {
56
+ name: 'indexedIp',
57
+ dataType: 'string',
58
+ nullable: false,
59
+ index: true
60
+ },
61
+ assertions: [
62
+ { type: 'contains', text: '@Column({ "type": "inet"' },
63
+ { type: 'contains', text: '@Index()' },
64
+ { type: 'contains', text: 'indexedIp: string;' }
65
+ ]
66
+ }
67
+ ];
68
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
69
+ });
@@ -0,0 +1,60 @@
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)('Int4Range 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-int4range';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic int4range field correctly',
14
+ field: {
15
+ name: 'ageRange',
16
+ dataType: '{lower: number, upper: number, lowerInclusive: boolean, upperInclusive: boolean}',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@Column({' },
21
+ { type: 'contains', text: '"type": "int4range"' },
22
+ { type: 'contains', text: 'transformer: {' },
23
+ { type: 'contains', text: 'to: (range: {lower: number, upper: number, lowerInclusive: boolean, upperInclusive: boolean}' },
24
+ { type: 'contains', text: 'from: (pgRange: string | null)' },
25
+ { type: 'contains', text: 'const lowerInclusive = pgRange.startsWith' },
26
+ { type: 'contains', text: 'const upperInclusive = pgRange.endsWith' },
27
+ { type: 'contains', text: 'ageRange: {lower: number, upper: number, lowerInclusive: boolean, upperInclusive: boolean};' },
28
+ { type: 'notContains', text: 'nullable: true' }
29
+ ]
30
+ },
31
+ {
32
+ name: 'should render nullable int4range field correctly',
33
+ field: {
34
+ name: 'optionalRange',
35
+ dataType: '{lower: number, upper: number, lowerInclusive: boolean, upperInclusive: boolean}',
36
+ nullable: true
37
+ },
38
+ assertions: [
39
+ { type: 'contains', text: '@Column({' },
40
+ { type: 'contains', text: '"type": "int4range"' },
41
+ { type: 'contains', text: 'nullable: true' },
42
+ { type: 'contains', text: 'optionalRange: {lower: number, upper: number, lowerInclusive: boolean, upperInclusive: boolean};' }
43
+ ]
44
+ },
45
+ {
46
+ name: 'should render indexed int4range field correctly',
47
+ field: {
48
+ name: 'valueRange',
49
+ dataType: '{lower: number, upper: number, lowerInclusive: boolean, upperInclusive: boolean}',
50
+ nullable: false,
51
+ index: true
52
+ },
53
+ assertions: [
54
+ { type: 'contains', text: '@Index()' },
55
+ { type: 'contains', text: 'valueRange: {lower: number, upper: number, lowerInclusive: boolean, upperInclusive: boolean};' }
56
+ ]
57
+ }
58
+ ];
59
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
60
+ });
@@ -0,0 +1,79 @@
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)('Integer 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-integer';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic integer field correctly',
14
+ field: {
15
+ name: 'count',
16
+ dataType: 'number',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@Column({ "type": "int"' },
21
+ { type: 'contains', text: 'count: number;' },
22
+ { type: 'notContains', text: '@Index()' },
23
+ { type: 'notContains', text: '@PrimaryColumn()' },
24
+ ]
25
+ },
26
+ {
27
+ name: 'should render nullable integer field correctly',
28
+ field: {
29
+ name: 'optionalCount',
30
+ dataType: 'number',
31
+ nullable: true
32
+ },
33
+ assertions: [
34
+ { type: 'contains', text: '@Column({ "type": "int"' },
35
+ { type: 'contains', text: 'optionalCount: number;' }
36
+ ]
37
+ },
38
+ {
39
+ name: 'should render integer field with default value correctly',
40
+ field: {
41
+ name: 'quantity',
42
+ dataType: 'number',
43
+ nullable: false,
44
+ default: 0
45
+ },
46
+ assertions: [
47
+ { type: 'contains', text: 'default: 0' },
48
+ { type: 'contains', text: 'quantity: number;' }
49
+ ]
50
+ },
51
+ {
52
+ name: 'should render indexed integer field correctly',
53
+ field: {
54
+ name: 'userId',
55
+ dataType: 'number',
56
+ nullable: false,
57
+ index: true
58
+ },
59
+ assertions: [
60
+ { type: 'contains', text: '@Index()' },
61
+ { type: 'contains', text: 'userId: number;' }
62
+ ]
63
+ },
64
+ {
65
+ name: 'should render primary key integer field correctly',
66
+ field: {
67
+ name: 'id',
68
+ dataType: 'number',
69
+ nullable: false,
70
+ primary: true
71
+ },
72
+ assertions: [
73
+ { type: 'contains', text: '@PrimaryColumn()' },
74
+ { type: 'contains', text: 'id: number;' }
75
+ ]
76
+ }
77
+ ];
78
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
79
+ });