@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,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)('Interval 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-interval';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic interval field correctly',
14
+ field: {
15
+ name: 'duration',
16
+ dataType: 'string',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@Column({ "type": "interval"' },
21
+ { type: 'contains', text: 'duration: string;' },
22
+ { type: 'notContains', text: '@Index()' },
23
+ { type: 'notContains', text: '@PrimaryColumn()' }
24
+ ]
25
+ },
26
+ {
27
+ name: 'should render nullable interval field correctly',
28
+ field: {
29
+ name: 'optionalDuration',
30
+ dataType: 'string',
31
+ nullable: true
32
+ },
33
+ assertions: [
34
+ { type: 'contains', text: '@Column({ "type": "interval"' },
35
+ { type: 'contains', text: 'optionalDuration: string;' }
36
+ ]
37
+ },
38
+ {
39
+ name: 'should render interval field with default value correctly',
40
+ field: {
41
+ name: 'defaultDuration',
42
+ dataType: 'string',
43
+ nullable: false,
44
+ default: '1 day'
45
+ },
46
+ assertions: [
47
+ { type: 'contains', text: '@Column({ "type": "interval"' },
48
+ { type: 'contains', text: 'default: 1 day' },
49
+ { type: 'contains', text: 'defaultDuration: string;' }
50
+ ]
51
+ },
52
+ {
53
+ name: 'should render indexed interval field correctly',
54
+ field: {
55
+ name: 'indexedDuration',
56
+ dataType: 'string',
57
+ nullable: false,
58
+ index: true
59
+ },
60
+ assertions: [
61
+ { type: 'contains', text: '@Column({ "type": "interval"' },
62
+ { type: 'contains', text: '@Index()' },
63
+ { type: 'contains', text: 'indexedDuration: string;' }
64
+ ]
65
+ }
66
+ ];
67
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
68
+ });
@@ -0,0 +1,54 @@
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)('Plain JSON 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-json-plain';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic plain JSON field correctly',
14
+ field: {
15
+ name: 'metadata',
16
+ dataType: 'Record<string, any>',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: "@Column('json'" },
21
+ { type: 'contains', text: 'metadata: JSON;' },
22
+ { type: 'notContains', text: '@Index()' },
23
+ { type: 'notContains', text: '@PrimaryColumn()' }
24
+ ]
25
+ },
26
+ {
27
+ name: 'should render nullable plain JSON field correctly',
28
+ field: {
29
+ name: 'optionalMeta',
30
+ dataType: 'Record<string, any>',
31
+ nullable: true
32
+ },
33
+ assertions: [
34
+ { type: 'contains', text: "@Column('json'" },
35
+ { type: 'contains', text: 'nullable: true' },
36
+ { type: 'contains', text: 'optionalMeta: JSON;' }
37
+ ]
38
+ },
39
+ {
40
+ name: 'should render plain JSON field with default value correctly',
41
+ field: {
42
+ name: 'defaultMeta',
43
+ dataType: 'Record<string, any>',
44
+ nullable: false,
45
+ default: '{}'
46
+ },
47
+ assertions: [
48
+ { type: 'contains', text: "@Column('json'" },
49
+ { type: 'contains', text: 'defaultMeta: JSON;' }
50
+ ]
51
+ }
52
+ ];
53
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
54
+ });
@@ -0,0 +1,40 @@
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)('JSON 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-json';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic json field correctly',
14
+ field: {
15
+ name: 'jsonData',
16
+ dataType: 'json',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: "@Column('json'" },
21
+ { type: 'contains', text: 'nullable: false' },
22
+ { type: 'contains', text: 'jsonData: JSON;' }
23
+ ]
24
+ },
25
+ {
26
+ name: 'should render nullable json field correctly',
27
+ field: {
28
+ name: 'optionalJsonData',
29
+ dataType: 'json',
30
+ nullable: true
31
+ },
32
+ assertions: [
33
+ { type: 'contains', text: "@Column('json'" },
34
+ { type: 'contains', text: 'nullable: true' },
35
+ { type: 'contains', text: 'optionalJsonData: JSON;' }
36
+ ]
37
+ }
38
+ ];
39
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
40
+ });
@@ -0,0 +1,40 @@
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)('JSONB 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-jsonb';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic jsonb field correctly',
14
+ field: {
15
+ name: 'jsonData',
16
+ dataType: 'jsonb',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: "@Column('jsonb'" },
21
+ { type: 'contains', text: 'nullable: false' },
22
+ { type: 'contains', text: 'jsonData: any;' }
23
+ ]
24
+ },
25
+ {
26
+ name: 'should render nullable jsonb field correctly',
27
+ field: {
28
+ name: 'optionalJsonData',
29
+ dataType: 'jsonb',
30
+ nullable: true
31
+ },
32
+ assertions: [
33
+ { type: 'contains', text: "@Column('jsonb'" },
34
+ { type: 'contains', text: 'nullable: true' },
35
+ { type: 'contains', text: 'optionalJsonData: any;' }
36
+ ]
37
+ }
38
+ ];
39
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
40
+ });
@@ -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)('Money 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-money';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic money field correctly',
14
+ field: {
15
+ name: 'price',
16
+ dataType: 'string',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@Column({ "type": "money"' },
21
+ { type: 'contains', text: 'price: string;' },
22
+ { type: 'notContains', text: '@Index()' },
23
+ { type: 'notContains', text: '@PrimaryColumn()' }
24
+ ]
25
+ },
26
+ {
27
+ name: 'should render nullable money field correctly',
28
+ field: {
29
+ name: 'optionalPrice',
30
+ dataType: 'string',
31
+ nullable: true
32
+ },
33
+ assertions: [
34
+ { type: 'contains', text: '@Column({ "type": "money"' },
35
+ { type: 'contains', text: 'optionalPrice: string;' }
36
+ ]
37
+ },
38
+ {
39
+ name: 'should render money field with default value correctly',
40
+ field: {
41
+ name: 'defaultPrice',
42
+ dataType: 'string',
43
+ nullable: false,
44
+ default: '0.00'
45
+ },
46
+ assertions: [
47
+ { type: 'contains', text: '@Column({ "type": "money"' },
48
+ { type: 'contains', text: 'default: 0.00' },
49
+ { type: 'contains', text: 'defaultPrice: string;' }
50
+ ]
51
+ },
52
+ {
53
+ name: 'should render indexed money field correctly',
54
+ field: {
55
+ name: 'indexedPrice',
56
+ dataType: 'string',
57
+ nullable: false,
58
+ index: true
59
+ },
60
+ assertions: [
61
+ { type: 'contains', text: '@Column({ "type": "money"' },
62
+ { type: 'contains', text: '@Index()' },
63
+ { type: 'contains', text: 'indexedPrice: string;' }
64
+ ]
65
+ }
66
+ ];
67
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
68
+ });
@@ -0,0 +1,84 @@
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)('Numeric 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-numeric';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic numeric field correctly',
14
+ field: {
15
+ name: 'numericValue',
16
+ dataType: 'number',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@Column({ "type": "numeric"' },
21
+ { type: 'contains', text: 'numericValue: number;' },
22
+ { type: 'notContains', text: '@Index()' },
23
+ { type: 'notContains', text: '@PrimaryColumn()' }
24
+ ]
25
+ },
26
+ {
27
+ name: 'should render nullable numeric field correctly',
28
+ field: {
29
+ name: 'optionalValue',
30
+ dataType: 'number',
31
+ nullable: true
32
+ },
33
+ assertions: [
34
+ { type: 'contains', text: '@Column({ "type": "numeric"' },
35
+ { type: 'contains', text: 'optionalValue: number;' }
36
+ ]
37
+ },
38
+ {
39
+ name: 'should render numeric field with precision and scale correctly',
40
+ field: {
41
+ name: 'preciseValue',
42
+ dataType: 'number',
43
+ nullable: false,
44
+ precision: 12,
45
+ scale: 4
46
+ },
47
+ assertions: [
48
+ { type: 'contains', text: '@Column({ "type": "numeric"' },
49
+ { type: 'contains', text: 'precision: 12' },
50
+ { type: 'contains', text: 'scale: 4' },
51
+ { type: 'contains', text: 'preciseValue: number;' }
52
+ ]
53
+ },
54
+ {
55
+ name: 'should render numeric field with default value correctly',
56
+ field: {
57
+ name: 'defaultValue',
58
+ dataType: 'number',
59
+ nullable: false,
60
+ default: 0
61
+ },
62
+ assertions: [
63
+ { type: 'contains', text: '@Column({ "type": "numeric"' },
64
+ { type: 'contains', text: 'default: 0' },
65
+ { type: 'contains', text: 'defaultValue: number;' }
66
+ ]
67
+ },
68
+ {
69
+ name: 'should render indexed numeric field correctly',
70
+ field: {
71
+ name: 'indexedValue',
72
+ dataType: 'number',
73
+ nullable: false,
74
+ index: true
75
+ },
76
+ assertions: [
77
+ { type: 'contains', text: '@Column({ "type": "numeric"' },
78
+ { type: 'contains', text: '@Index()' },
79
+ { type: 'contains', text: 'indexedValue: number;' }
80
+ ]
81
+ }
82
+ ];
83
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
84
+ });
@@ -0,0 +1,58 @@
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)('Point 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-point';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic point field correctly',
14
+ field: {
15
+ name: 'location',
16
+ dataType: '{ x: number, y: number }',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@Column({' },
21
+ { type: 'contains', text: '"type": "point"' },
22
+ { type: 'contains', text: 'transformer: {' },
23
+ { type: 'contains', text: 'to: (point: {x: number, y: number} | null) => {' },
24
+ { type: 'contains', text: 'from: (pgPoint: string | null) => {' },
25
+ { type: 'contains', text: 'location: { x: number, y: number };' },
26
+ { type: 'notContains', text: 'nullable: true' }
27
+ ]
28
+ },
29
+ {
30
+ name: 'should render nullable point field correctly',
31
+ field: {
32
+ name: 'optionalLocation',
33
+ dataType: '{ x: number, y: number }',
34
+ nullable: true
35
+ },
36
+ assertions: [
37
+ { type: 'contains', text: '@Column({' },
38
+ { type: 'contains', text: '"type": "point"' },
39
+ { type: 'contains', text: 'nullable: true' },
40
+ { type: 'contains', text: 'optionalLocation: { x: number, y: number };' }
41
+ ]
42
+ },
43
+ {
44
+ name: 'should render indexed point field correctly',
45
+ field: {
46
+ name: 'coordinates',
47
+ dataType: '{ x: number, y: number }',
48
+ nullable: false,
49
+ index: true
50
+ },
51
+ assertions: [
52
+ { type: 'contains', text: '@Index()' },
53
+ { type: 'contains', text: 'coordinates: { x: number, y: number };' }
54
+ ]
55
+ }
56
+ ];
57
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
58
+ });
@@ -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)('Real 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-real';
11
+ const testCases = [
12
+ {
13
+ name: 'should render basic real field correctly',
14
+ field: {
15
+ name: 'measurement',
16
+ dataType: 'number',
17
+ nullable: false
18
+ },
19
+ assertions: [
20
+ { type: 'contains', text: '@Column({ "type": "real"' },
21
+ { type: 'contains', text: 'measurement: number;' },
22
+ { type: 'notContains', text: '@Index()' },
23
+ { type: 'notContains', text: '@PrimaryColumn()' }
24
+ ]
25
+ },
26
+ {
27
+ name: 'should render nullable real field correctly',
28
+ field: {
29
+ name: 'optionalMeasure',
30
+ dataType: 'number',
31
+ nullable: true
32
+ },
33
+ assertions: [
34
+ { type: 'contains', text: '@Column({ "type": "real"' },
35
+ { type: 'contains', text: 'optionalMeasure: number;' }
36
+ ]
37
+ },
38
+ {
39
+ name: 'should render real field with default value correctly',
40
+ field: {
41
+ name: 'defaultMeasure',
42
+ dataType: 'number',
43
+ nullable: false,
44
+ default: 0
45
+ },
46
+ assertions: [
47
+ { type: 'contains', text: '@Column({ "type": "real", default: 0 })' },
48
+ { type: 'contains', text: 'defaultMeasure: number;' }
49
+ ]
50
+ },
51
+ {
52
+ name: 'should render indexed real field correctly',
53
+ field: {
54
+ name: 'indexedMeasure',
55
+ dataType: 'number',
56
+ nullable: false,
57
+ index: true
58
+ },
59
+ assertions: [
60
+ { type: 'contains', text: '@Column({ "type": "real"' },
61
+ { type: 'contains', text: '@Index()' },
62
+ { type: 'contains', text: 'indexedMeasure: number;' }
63
+ ]
64
+ }
65
+ ];
66
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
67
+ });
@@ -0,0 +1,113 @@
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)('Serial 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
+ (0, globals_1.describe)('serial', () => {
11
+ const templatePath = './entities/entity-col-serial';
12
+ const testCases = [
13
+ {
14
+ name: 'should render basic serial field correctly',
15
+ field: {
16
+ name: 'id',
17
+ dataType: 'number',
18
+ nullable: false
19
+ },
20
+ assertions: [
21
+ { type: 'contains', text: '@Column({ "type": "int" })' },
22
+ { type: 'contains', text: '@Generated("increment")' },
23
+ { type: 'contains', text: 'id: number;' },
24
+ { type: 'notContains', text: 'default:' }
25
+ ]
26
+ },
27
+ {
28
+ name: 'should render indexed serial field correctly',
29
+ field: {
30
+ name: 'recordId',
31
+ dataType: 'number',
32
+ nullable: false,
33
+ index: true
34
+ },
35
+ assertions: [
36
+ { type: 'contains', text: '@Column({ "type": "int" })' },
37
+ { type: 'contains', text: '@Generated("increment")' },
38
+ { type: 'contains', text: '@Index()' },
39
+ { type: 'contains', text: 'recordId: number;' }
40
+ ]
41
+ },
42
+ {
43
+ name: 'should render primary key serial field correctly',
44
+ field: {
45
+ name: 'id',
46
+ dataType: 'number',
47
+ nullable: false,
48
+ primary: true
49
+ },
50
+ assertions: [
51
+ { type: 'contains', text: '@Column({ "type": "int" })' },
52
+ { type: 'contains', text: '@Generated("increment")' },
53
+ { type: 'contains', text: '@PrimaryColumn()' },
54
+ { type: 'contains', text: 'id: number;' }
55
+ ]
56
+ }
57
+ ];
58
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
59
+ });
60
+ (0, globals_1.describe)('bigserial', () => {
61
+ const templatePath = './entities/entity-col-bigserial';
62
+ const testCases = [
63
+ {
64
+ name: 'should render basic bigserial field correctly',
65
+ field: {
66
+ name: 'id',
67
+ dataType: 'string',
68
+ nullable: false
69
+ },
70
+ assertions: [
71
+ { type: 'contains', text: '@Column({ "type": "bigint" })' },
72
+ { type: 'contains', text: '@Generated("increment")' },
73
+ { type: 'contains', text: 'id: string;' }
74
+ ]
75
+ },
76
+ {
77
+ name: 'should render primary key bigserial field correctly',
78
+ field: {
79
+ name: 'id',
80
+ dataType: 'string',
81
+ nullable: false,
82
+ primary: true
83
+ },
84
+ assertions: [
85
+ { type: 'contains', text: '@Column({ "type": "bigint" })' },
86
+ { type: 'contains', text: '@Generated("increment")' },
87
+ { type: 'contains', text: '@PrimaryColumn()' },
88
+ { type: 'contains', text: 'id: string;' }
89
+ ]
90
+ }
91
+ ];
92
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
93
+ });
94
+ (0, globals_1.describe)('smallserial', () => {
95
+ const templatePath = './entities/entity-col-smallserial';
96
+ const testCases = [
97
+ {
98
+ name: 'should render basic smallserial field correctly',
99
+ field: {
100
+ name: 'id',
101
+ dataType: 'number',
102
+ nullable: false
103
+ },
104
+ assertions: [
105
+ { type: 'contains', text: '@Column({ "type": "smallint" })' },
106
+ { type: 'contains', text: '@Generated("increment")' },
107
+ { type: 'contains', text: 'id: number;' }
108
+ ]
109
+ }
110
+ ];
111
+ (0, template_test_utils_1.runTemplateTests)(templatePath, testCases);
112
+ });
113
+ });