@carlonicora/nestjs-neo4jsonapi 1.31.2 → 1.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/dist/common/helpers/define-entity.d.ts +29 -0
  2. package/dist/common/helpers/define-entity.d.ts.map +1 -1
  3. package/dist/common/helpers/define-entity.js +42 -1
  4. package/dist/common/helpers/define-entity.js.map +1 -1
  5. package/dist/common/interfaces/entity.descriptor.interface.d.ts +2 -2
  6. package/dist/common/interfaces/entity.descriptor.interface.d.ts.map +1 -1
  7. package/dist/common/interfaces/entity.descriptor.interface.js +2 -1
  8. package/dist/common/interfaces/entity.descriptor.interface.js.map +1 -1
  9. package/dist/common/interfaces/entity.schema.interface.d.ts +19 -1
  10. package/dist/common/interfaces/entity.schema.interface.d.ts.map +1 -1
  11. package/dist/core/email/templates/en/paymentFailure.hbs +56 -0
  12. package/dist/core/email/templates/en/paymentSuccessAdmin.hbs +31 -0
  13. package/dist/core/email/templates/en/paymentSuccessCustomer.hbs +51 -0
  14. package/dist/core/email/templates/en/subscriptionStatusChange.hbs +48 -0
  15. package/dist/core/jsonapi/serialisers/descriptor.based.serialiser.d.ts.map +1 -1
  16. package/dist/core/jsonapi/serialisers/descriptor.based.serialiser.js +13 -0
  17. package/dist/core/jsonapi/serialisers/descriptor.based.serialiser.js.map +1 -1
  18. package/dist/core/jsonapi/serialisers/jsonapi.paginator.d.ts +3 -0
  19. package/dist/core/jsonapi/serialisers/jsonapi.paginator.d.ts.map +1 -1
  20. package/dist/core/jsonapi/serialisers/jsonapi.paginator.js +6 -0
  21. package/dist/core/jsonapi/serialisers/jsonapi.paginator.js.map +1 -1
  22. package/dist/core/jsonapi/services/jsonapi.service.d.ts.map +1 -1
  23. package/dist/core/jsonapi/services/jsonapi.service.js +6 -0
  24. package/dist/core/jsonapi/services/jsonapi.service.js.map +1 -1
  25. package/dist/core/neo4j/abstracts/abstract.service.d.ts +2 -0
  26. package/dist/core/neo4j/abstracts/abstract.service.d.ts.map +1 -1
  27. package/dist/core/neo4j/abstracts/abstract.service.js +8 -4
  28. package/dist/core/neo4j/abstracts/abstract.service.js.map +1 -1
  29. package/dist/core/neo4j/services/neo4j.service.d.ts +9 -0
  30. package/dist/core/neo4j/services/neo4j.service.d.ts.map +1 -1
  31. package/dist/core/neo4j/services/neo4j.service.js +95 -1
  32. package/dist/core/neo4j/services/neo4j.service.js.map +1 -1
  33. package/dist/foundations/audit/entities/audit.entity.d.ts +1 -1
  34. package/dist/foundations/audit/entities/audit.entity.d.ts.map +1 -1
  35. package/dist/foundations/audit/serialisers/audit.serialiser.js +2 -2
  36. package/dist/foundations/audit/serialisers/audit.serialiser.js.map +1 -1
  37. package/dist/foundations/auth/entities/auth.entity.d.ts +1 -1
  38. package/dist/foundations/auth/entities/auth.entity.d.ts.map +1 -1
  39. package/dist/foundations/auth/repositories/auth.repository.d.ts +1 -1
  40. package/dist/foundations/auth/repositories/auth.repository.d.ts.map +1 -1
  41. package/dist/foundations/auth/repositories/auth.repository.js +31 -13
  42. package/dist/foundations/auth/repositories/auth.repository.js.map +1 -1
  43. package/dist/foundations/auth/serialisers/auth.serialiser.js +2 -2
  44. package/dist/foundations/auth/serialisers/auth.serialiser.js.map +1 -1
  45. package/dist/foundations/auth/services/auth.service.d.ts +1 -1
  46. package/dist/foundations/auth/services/auth.service.d.ts.map +1 -1
  47. package/dist/foundations/company/company.module.d.ts.map +1 -1
  48. package/dist/foundations/company/company.module.js +9 -5
  49. package/dist/foundations/company/company.module.js.map +1 -1
  50. package/dist/foundations/company/entities/company.d.ts +44 -0
  51. package/dist/foundations/company/entities/company.d.ts.map +1 -0
  52. package/dist/foundations/company/entities/company.js +47 -0
  53. package/dist/foundations/company/entities/company.js.map +1 -0
  54. package/dist/foundations/company/entities/company.meta.d.ts +1 -1
  55. package/dist/foundations/company/entities/company.meta.d.ts.map +1 -1
  56. package/dist/foundations/company/index.d.ts +1 -2
  57. package/dist/foundations/company/index.d.ts.map +1 -1
  58. package/dist/foundations/company/index.js +3 -3
  59. package/dist/foundations/company/index.js.map +1 -1
  60. package/dist/foundations/company/repositories/company.repository.d.ts +26 -1
  61. package/dist/foundations/company/repositories/company.repository.d.ts.map +1 -1
  62. package/dist/foundations/company/repositories/company.repository.js +67 -11
  63. package/dist/foundations/company/repositories/company.repository.js.map +1 -1
  64. package/dist/foundations/company/services/company.service.d.ts +4 -1
  65. package/dist/foundations/company/services/company.service.d.ts.map +1 -1
  66. package/dist/foundations/company/services/company.service.js +11 -6
  67. package/dist/foundations/company/services/company.service.js.map +1 -1
  68. package/dist/foundations/content/entities/content.entity.d.ts +1 -1
  69. package/dist/foundations/content/entities/content.entity.d.ts.map +1 -1
  70. package/dist/foundations/content/serialisers/content.serialiser.js +3 -3
  71. package/dist/foundations/content/serialisers/content.serialiser.js.map +1 -1
  72. package/dist/foundations/module/queries/feature.module.query.d.ts +3 -1
  73. package/dist/foundations/module/queries/feature.module.query.d.ts.map +1 -1
  74. package/dist/foundations/module/queries/feature.module.query.js +27 -15
  75. package/dist/foundations/module/queries/feature.module.query.js.map +1 -1
  76. package/dist/foundations/notification/entities/notification.entity.d.ts +1 -1
  77. package/dist/foundations/notification/entities/notification.entity.d.ts.map +1 -1
  78. package/dist/foundations/notification/serialisers/notifications.serialiser.js +2 -2
  79. package/dist/foundations/notification/serialisers/notifications.serialiser.js.map +1 -1
  80. package/dist/foundations/oauth/entities/oauth.client.entity.d.ts +2 -2
  81. package/dist/foundations/oauth/entities/oauth.client.entity.d.ts.map +1 -1
  82. package/dist/foundations/relevancy/repositories/relevancy.repository.d.ts.map +1 -1
  83. package/dist/foundations/relevancy/repositories/relevancy.repository.js +1 -1
  84. package/dist/foundations/relevancy/repositories/relevancy.repository.js.map +1 -1
  85. package/dist/foundations/relevancy/services/relevancy.service.js +1 -1
  86. package/dist/foundations/relevancy/services/relevancy.service.js.map +1 -1
  87. package/dist/foundations/role/entities/role.d.ts +28 -0
  88. package/dist/foundations/role/entities/role.d.ts.map +1 -0
  89. package/dist/foundations/role/entities/role.js +33 -0
  90. package/dist/foundations/role/entities/role.js.map +1 -0
  91. package/dist/foundations/role/entities/role.meta.d.ts +1 -1
  92. package/dist/foundations/role/entities/role.meta.d.ts.map +1 -1
  93. package/dist/foundations/role/repositories/role.repository.d.ts +1 -1
  94. package/dist/foundations/role/repositories/role.repository.d.ts.map +1 -1
  95. package/dist/foundations/role/repositories/role.repository.js +7 -7
  96. package/dist/foundations/role/repositories/role.repository.js.map +1 -1
  97. package/dist/foundations/role/role.module.d.ts.map +1 -1
  98. package/dist/foundations/role/role.module.js +3 -4
  99. package/dist/foundations/role/role.module.js.map +1 -1
  100. package/dist/foundations/role/services/role.service.js +5 -5
  101. package/dist/foundations/role/services/role.service.js.map +1 -1
  102. package/dist/foundations/stripe-customer/entities/stripe-customer.entity.d.ts +1 -1
  103. package/dist/foundations/stripe-customer/entities/stripe-customer.entity.d.ts.map +1 -1
  104. package/dist/foundations/stripe-price/dtos/stripe-price.dto.d.ts +12 -0
  105. package/dist/foundations/stripe-price/dtos/stripe-price.dto.d.ts.map +1 -1
  106. package/dist/foundations/stripe-price/dtos/stripe-price.dto.js +47 -1
  107. package/dist/foundations/stripe-price/dtos/stripe-price.dto.js.map +1 -1
  108. package/dist/foundations/stripe-price/entities/stripe-price.entity.d.ts +2 -0
  109. package/dist/foundations/stripe-price/entities/stripe-price.entity.d.ts.map +1 -1
  110. package/dist/foundations/stripe-price/entities/stripe-price.map.d.ts.map +1 -1
  111. package/dist/foundations/stripe-price/entities/stripe-price.map.js +1 -0
  112. package/dist/foundations/stripe-price/entities/stripe-price.map.js.map +1 -1
  113. package/dist/foundations/stripe-price/entities/stripe-price.model.d.ts.map +1 -1
  114. package/dist/foundations/stripe-price/entities/stripe-price.model.js +2 -1
  115. package/dist/foundations/stripe-price/entities/stripe-price.model.js.map +1 -1
  116. package/dist/foundations/stripe-price/repositories/stripe-price.repository.d.ts +3 -0
  117. package/dist/foundations/stripe-price/repositories/stripe-price.repository.d.ts.map +1 -1
  118. package/dist/foundations/stripe-price/repositories/stripe-price.repository.js +64 -4
  119. package/dist/foundations/stripe-price/repositories/stripe-price.repository.js.map +1 -1
  120. package/dist/foundations/stripe-price/serialisers/stripe-price.serialiser.d.ts.map +1 -1
  121. package/dist/foundations/stripe-price/serialisers/stripe-price.serialiser.js +5 -0
  122. package/dist/foundations/stripe-price/serialisers/stripe-price.serialiser.js.map +1 -1
  123. package/dist/foundations/stripe-price/services/stripe-price-admin.service.d.ts.map +1 -1
  124. package/dist/foundations/stripe-price/services/stripe-price-admin.service.js +10 -0
  125. package/dist/foundations/stripe-price/services/stripe-price-admin.service.js.map +1 -1
  126. package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.d.ts +11 -0
  127. package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.d.ts.map +1 -1
  128. package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.js +22 -0
  129. package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.js.map +1 -1
  130. package/dist/foundations/stripe-subscription/services/feature-sync.service.d.ts +33 -0
  131. package/dist/foundations/stripe-subscription/services/feature-sync.service.d.ts.map +1 -0
  132. package/dist/foundations/stripe-subscription/services/feature-sync.service.js +155 -0
  133. package/dist/foundations/stripe-subscription/services/feature-sync.service.js.map +1 -0
  134. package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.d.ts.map +1 -1
  135. package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.js +11 -0
  136. package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.js.map +1 -1
  137. package/dist/foundations/stripe-subscription/stripe-subscription.module.d.ts.map +1 -1
  138. package/dist/foundations/stripe-subscription/stripe-subscription.module.js +3 -0
  139. package/dist/foundations/stripe-subscription/stripe-subscription.module.js.map +1 -1
  140. package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.d.ts +3 -1
  141. package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.d.ts.map +1 -1
  142. package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.js +79 -9
  143. package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.js.map +1 -1
  144. package/dist/foundations/stripe-webhook/services/stripe-webhook-notification.service.d.ts +26 -1
  145. package/dist/foundations/stripe-webhook/services/stripe-webhook-notification.service.d.ts.map +1 -1
  146. package/dist/foundations/stripe-webhook/services/stripe-webhook-notification.service.js +124 -2
  147. package/dist/foundations/stripe-webhook/services/stripe-webhook-notification.service.js.map +1 -1
  148. package/dist/foundations/stripe-webhook/stripe-webhook.module.d.ts.map +1 -1
  149. package/dist/foundations/stripe-webhook/stripe-webhook.module.js +2 -0
  150. package/dist/foundations/stripe-webhook/stripe-webhook.module.js.map +1 -1
  151. package/dist/foundations/tokenusage/entities/tokenusage.entity.d.ts +1 -1
  152. package/dist/foundations/tokenusage/entities/tokenusage.entity.d.ts.map +1 -1
  153. package/dist/foundations/user/controllers/user.controller.d.ts +1 -1
  154. package/dist/foundations/user/controllers/user.controller.d.ts.map +1 -1
  155. package/dist/foundations/user/entities/user.d.ts +124 -0
  156. package/dist/foundations/user/entities/user.d.ts.map +1 -0
  157. package/dist/foundations/user/entities/user.js +81 -0
  158. package/dist/foundations/user/entities/user.js.map +1 -0
  159. package/dist/foundations/user/entities/user.meta.d.ts +1 -1
  160. package/dist/foundations/user/entities/user.meta.d.ts.map +1 -1
  161. package/dist/foundations/user/index.d.ts +1 -4
  162. package/dist/foundations/user/index.d.ts.map +1 -1
  163. package/dist/foundations/user/index.js +6 -23
  164. package/dist/foundations/user/index.js.map +1 -1
  165. package/dist/foundations/user/repositories/user.repository.d.ts +13 -1
  166. package/dist/foundations/user/repositories/user.repository.d.ts.map +1 -1
  167. package/dist/foundations/user/repositories/user.repository.js +85 -21
  168. package/dist/foundations/user/repositories/user.repository.js.map +1 -1
  169. package/dist/foundations/user/services/user.service.d.ts.map +1 -1
  170. package/dist/foundations/user/services/user.service.js +12 -12
  171. package/dist/foundations/user/services/user.service.js.map +1 -1
  172. package/dist/foundations/user/user.module.d.ts.map +1 -1
  173. package/dist/foundations/user/user.module.js +7 -8
  174. package/dist/foundations/user/user.module.js.map +1 -1
  175. package/dist/openapi/factories/entity-schema.factory.js +12 -0
  176. package/dist/openapi/factories/entity-schema.factory.js.map +1 -1
  177. package/dist/openapi/schemas/jsonapi-base.schemas.d.ts +1 -0
  178. package/dist/openapi/schemas/jsonapi-base.schemas.d.ts.map +1 -1
  179. package/dist/openapi/schemas/jsonapi-base.schemas.js.map +1 -1
  180. package/dist/tools/migrate-entity/__tests__/ast-parser.spec.js +331 -0
  181. package/dist/tools/migrate-entity/__tests__/descriptor-generator.spec.js +482 -0
  182. package/dist/tools/migrate-entity/__tests__/file-discovery.spec.js +190 -0
  183. package/dist/tools/migrate-entity/__tests__/integration.spec.js +261 -0
  184. package/dist/tools/migrate-entity/index.js +2 -2
  185. package/dist/tools/migrate-entity/lib/ast-parser.js +255 -10
  186. package/dist/tools/migrate-entity/lib/descriptor-generator.js +384 -55
  187. package/dist/tools/migrate-entity/lib/entity-migrator.js +112 -9
  188. package/dist/tools/migrate-entity/lib/module-updater.js +25 -9
  189. package/dist/tools/migrate-entity/lib/reference-updater.js +110 -24
  190. package/package.json +2 -2
  191. package/dist/foundations/company/entities/company.entity.d.ts +0 -18
  192. package/dist/foundations/company/entities/company.entity.d.ts.map +0 -1
  193. package/dist/foundations/company/entities/company.entity.js +0 -3
  194. package/dist/foundations/company/entities/company.entity.js.map +0 -1
  195. package/dist/foundations/company/entities/company.map.d.ts +0 -8
  196. package/dist/foundations/company/entities/company.map.d.ts.map +0 -1
  197. package/dist/foundations/company/entities/company.map.js +0 -23
  198. package/dist/foundations/company/entities/company.map.js.map +0 -1
  199. package/dist/foundations/company/entities/company.model.d.ts +0 -4
  200. package/dist/foundations/company/entities/company.model.d.ts.map +0 -1
  201. package/dist/foundations/company/entities/company.model.js +0 -17
  202. package/dist/foundations/company/entities/company.model.js.map +0 -1
  203. package/dist/foundations/company/serialisers/company.serialiser.d.ts +0 -14
  204. package/dist/foundations/company/serialisers/company.serialiser.d.ts.map +0 -1
  205. package/dist/foundations/company/serialisers/company.serialiser.js +0 -76
  206. package/dist/foundations/company/serialisers/company.serialiser.js.map +0 -1
  207. package/dist/foundations/role/entities/role.entity.d.ts +0 -9
  208. package/dist/foundations/role/entities/role.entity.d.ts.map +0 -1
  209. package/dist/foundations/role/entities/role.entity.js +0 -3
  210. package/dist/foundations/role/entities/role.entity.js.map +0 -1
  211. package/dist/foundations/role/entities/role.map.d.ts +0 -8
  212. package/dist/foundations/role/entities/role.map.d.ts.map +0 -1
  213. package/dist/foundations/role/entities/role.map.js +0 -15
  214. package/dist/foundations/role/entities/role.map.js.map +0 -1
  215. package/dist/foundations/role/entities/role.model.d.ts +0 -4
  216. package/dist/foundations/role/entities/role.model.d.ts.map +0 -1
  217. package/dist/foundations/role/entities/role.model.js +0 -15
  218. package/dist/foundations/role/entities/role.model.js.map +0 -1
  219. package/dist/foundations/role/serialisers/role.serialiser.d.ts +0 -12
  220. package/dist/foundations/role/serialisers/role.serialiser.d.ts.map +0 -1
  221. package/dist/foundations/role/serialisers/role.serialiser.js +0 -46
  222. package/dist/foundations/role/serialisers/role.serialiser.js.map +0 -1
  223. package/dist/foundations/user/entities/user.entity.d.ts +0 -26
  224. package/dist/foundations/user/entities/user.entity.d.ts.map +0 -1
  225. package/dist/foundations/user/entities/user.entity.js +0 -3
  226. package/dist/foundations/user/entities/user.entity.js.map +0 -1
  227. package/dist/foundations/user/entities/user.map.d.ts +0 -8
  228. package/dist/foundations/user/entities/user.map.d.ts.map +0 -1
  229. package/dist/foundations/user/entities/user.map.js +0 -27
  230. package/dist/foundations/user/entities/user.map.js.map +0 -1
  231. package/dist/foundations/user/entities/user.model.d.ts +0 -7
  232. package/dist/foundations/user/entities/user.model.d.ts.map +0 -1
  233. package/dist/foundations/user/entities/user.model.js +0 -30
  234. package/dist/foundations/user/entities/user.model.js.map +0 -1
  235. package/dist/foundations/user/serialisers/user.serialiser.d.ts +0 -14
  236. package/dist/foundations/user/serialisers/user.serialiser.d.ts.map +0 -1
  237. package/dist/foundations/user/serialisers/user.serialiser.js +0 -80
  238. package/dist/foundations/user/serialisers/user.serialiser.js.map +0 -1
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ /**
3
+ * File Discovery Unit Tests
4
+ *
5
+ * Tests the file discovery functions that locate old-style entity files.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ const vitest_1 = require("vitest");
42
+ const path = __importStar(require("path"));
43
+ const file_discovery_1 = require("../lib/file-discovery");
44
+ const FIXTURES_DIR = path.resolve(__dirname, "../__fixtures__");
45
+ (0, vitest_1.describe)("file-discovery", () => {
46
+ (0, vitest_1.describe)("discoverOldFiles", () => {
47
+ (0, vitest_1.it)("should find all 5 entity files by meta.ts", async () => {
48
+ const results = await (0, file_discovery_1.discoverOldFiles)(path.join(FIXTURES_DIR, "entities"));
49
+ (0, vitest_1.expect)(results.length).toBe(1);
50
+ const testEntity = results[0];
51
+ (0, vitest_1.expect)(testEntity.entityName).toBe("test-entity");
52
+ (0, vitest_1.expect)(testEntity.meta).toContain("test-entity.meta.ts");
53
+ (0, vitest_1.expect)(testEntity.entity).toContain("test-entity.ts");
54
+ (0, vitest_1.expect)(testEntity.model).toContain("test-entity.model.ts");
55
+ (0, vitest_1.expect)(testEntity.map).toContain("test-entity.map.ts");
56
+ (0, vitest_1.expect)(testEntity.serialiser).toContain("test-entity.serialiser.ts");
57
+ });
58
+ (0, vitest_1.it)("should handle missing optional files", async () => {
59
+ // Create a temporary entity with only meta file to test missing files handling
60
+ // For this test, we'll use migrated-entity which only has meta + entity
61
+ const results = await (0, file_discovery_1.discoverOldFiles)(path.join(FIXTURES_DIR, "migrated-entity"));
62
+ (0, vitest_1.expect)(results.length).toBe(1);
63
+ const migratedEntity = results[0];
64
+ (0, vitest_1.expect)(migratedEntity.entityName).toBe("migrated-entity");
65
+ (0, vitest_1.expect)(migratedEntity.meta).not.toBeNull();
66
+ (0, vitest_1.expect)(migratedEntity.entity).not.toBeNull();
67
+ (0, vitest_1.expect)(migratedEntity.model).toBeNull(); // No model file
68
+ (0, vitest_1.expect)(migratedEntity.map).toBeNull(); // No map file
69
+ (0, vitest_1.expect)(migratedEntity.serialiser).toBeNull(); // No serialiser file
70
+ });
71
+ (0, vitest_1.it)("should filter by entity name when provided", async () => {
72
+ // Should find test-entity when filtering
73
+ const results = await (0, file_discovery_1.discoverOldFiles)(FIXTURES_DIR, "test-entity");
74
+ (0, vitest_1.expect)(results.length).toBe(1);
75
+ (0, vitest_1.expect)(results[0].entityName).toBe("test-entity");
76
+ });
77
+ (0, vitest_1.it)("should return empty array when entity not found", async () => {
78
+ const results = await (0, file_discovery_1.discoverOldFiles)(FIXTURES_DIR, "nonexistent-entity");
79
+ (0, vitest_1.expect)(results.length).toBe(0);
80
+ });
81
+ (0, vitest_1.it)("should discover multiple entities in fixtures directory", async () => {
82
+ const results = await (0, file_discovery_1.discoverOldFiles)(FIXTURES_DIR);
83
+ // Should find: test-entity, simple-entity, complex-entity, migrated-entity
84
+ (0, vitest_1.expect)(results.length).toBeGreaterThanOrEqual(4);
85
+ const entityNames = results.map((r) => r.entityName);
86
+ (0, vitest_1.expect)(entityNames).toContain("test-entity");
87
+ (0, vitest_1.expect)(entityNames).toContain("simple-entity");
88
+ (0, vitest_1.expect)(entityNames).toContain("complex-entity");
89
+ (0, vitest_1.expect)(entityNames).toContain("migrated-entity");
90
+ });
91
+ (0, vitest_1.it)("should discover simple-entity files", async () => {
92
+ const results = await (0, file_discovery_1.discoverOldFiles)(path.join(FIXTURES_DIR, "simple-entity"));
93
+ (0, vitest_1.expect)(results.length).toBe(1);
94
+ const simpleEntity = results[0];
95
+ (0, vitest_1.expect)(simpleEntity.entityName).toBe("simple-entity");
96
+ (0, vitest_1.expect)(simpleEntity.meta).not.toBeNull();
97
+ (0, vitest_1.expect)(simpleEntity.entity).not.toBeNull();
98
+ (0, vitest_1.expect)(simpleEntity.model).not.toBeNull();
99
+ (0, vitest_1.expect)(simpleEntity.map).not.toBeNull();
100
+ (0, vitest_1.expect)(simpleEntity.serialiser).not.toBeNull();
101
+ });
102
+ (0, vitest_1.it)("should discover complex-entity files", async () => {
103
+ const results = await (0, file_discovery_1.discoverOldFiles)(path.join(FIXTURES_DIR, "complex-entity"));
104
+ (0, vitest_1.expect)(results.length).toBe(1);
105
+ const complexEntity = results[0];
106
+ (0, vitest_1.expect)(complexEntity.entityName).toBe("complex-entity");
107
+ (0, vitest_1.expect)(complexEntity.meta).not.toBeNull();
108
+ (0, vitest_1.expect)(complexEntity.entity).not.toBeNull();
109
+ (0, vitest_1.expect)(complexEntity.model).not.toBeNull();
110
+ (0, vitest_1.expect)(complexEntity.map).not.toBeNull();
111
+ (0, vitest_1.expect)(complexEntity.serialiser).not.toBeNull();
112
+ });
113
+ });
114
+ (0, vitest_1.describe)("isAlreadyMigrated", () => {
115
+ (0, vitest_1.it)("should return true if entity contains defineEntity<", () => {
116
+ const files = {
117
+ entityName: "migrated-entity",
118
+ entityDir: path.join(FIXTURES_DIR, "migrated-entity"),
119
+ entity: path.join(FIXTURES_DIR, "migrated-entity/migrated-entity.ts"),
120
+ meta: path.join(FIXTURES_DIR, "migrated-entity/migrated-entity.meta.ts"),
121
+ model: null,
122
+ map: null,
123
+ serialiser: null,
124
+ };
125
+ const result = (0, file_discovery_1.isAlreadyMigrated)(files);
126
+ (0, vitest_1.expect)(result).toBe(true);
127
+ });
128
+ (0, vitest_1.it)("should return false for old-style entities", () => {
129
+ const files = {
130
+ entityName: "test-entity",
131
+ entityDir: path.join(FIXTURES_DIR, "entities"),
132
+ entity: path.join(FIXTURES_DIR, "entities/test-entity.ts"),
133
+ meta: path.join(FIXTURES_DIR, "entities/test-entity.meta.ts"),
134
+ model: path.join(FIXTURES_DIR, "entities/test-entity.model.ts"),
135
+ map: path.join(FIXTURES_DIR, "entities/test-entity.map.ts"),
136
+ serialiser: path.join(FIXTURES_DIR, "entities/test-entity.serialiser.ts"),
137
+ };
138
+ const result = (0, file_discovery_1.isAlreadyMigrated)(files);
139
+ (0, vitest_1.expect)(result).toBe(false);
140
+ });
141
+ (0, vitest_1.it)("should return false if entity file is null", () => {
142
+ const files = {
143
+ entityName: "test-entity",
144
+ entityDir: path.join(FIXTURES_DIR, "entities"),
145
+ entity: null,
146
+ meta: path.join(FIXTURES_DIR, "entities/test-entity.meta.ts"),
147
+ model: null,
148
+ map: null,
149
+ serialiser: null,
150
+ };
151
+ const result = (0, file_discovery_1.isAlreadyMigrated)(files);
152
+ (0, vitest_1.expect)(result).toBe(false);
153
+ });
154
+ (0, vitest_1.it)("should return false for simple-entity (old-style)", () => {
155
+ const files = {
156
+ entityName: "simple-entity",
157
+ entityDir: path.join(FIXTURES_DIR, "simple-entity"),
158
+ entity: path.join(FIXTURES_DIR, "simple-entity/simple-entity.ts"),
159
+ meta: path.join(FIXTURES_DIR, "simple-entity/simple-entity.meta.ts"),
160
+ model: path.join(FIXTURES_DIR, "simple-entity/simple-entity.model.ts"),
161
+ map: path.join(FIXTURES_DIR, "simple-entity/simple-entity.map.ts"),
162
+ serialiser: path.join(FIXTURES_DIR, "simple-entity/simple-entity.serialiser.ts"),
163
+ };
164
+ const result = (0, file_discovery_1.isAlreadyMigrated)(files);
165
+ (0, vitest_1.expect)(result).toBe(false);
166
+ });
167
+ });
168
+ (0, vitest_1.describe)("getModulePath", () => {
169
+ (0, vitest_1.it)("should extract module path from features path", () => {
170
+ const filePath = "src/features/article/entities/article.meta.ts";
171
+ const result = (0, file_discovery_1.getModulePath)(filePath);
172
+ (0, vitest_1.expect)(result).toBe("src/features/article");
173
+ });
174
+ (0, vitest_1.it)("should extract module path from foundations path", () => {
175
+ const filePath = "src/foundations/user/entities/user.meta.ts";
176
+ const result = (0, file_discovery_1.getModulePath)(filePath);
177
+ (0, vitest_1.expect)(result).toBe("src/foundations/user");
178
+ });
179
+ (0, vitest_1.it)("should return dirname when no standard pattern matches", () => {
180
+ const filePath = "/custom/path/entities/custom.meta.ts";
181
+ const result = (0, file_discovery_1.getModulePath)(filePath);
182
+ (0, vitest_1.expect)(result).toBe("/custom/path/entities");
183
+ });
184
+ (0, vitest_1.it)("should handle nested feature paths", () => {
185
+ const filePath = "src/features/my-feature/deep/nested/entity.meta.ts";
186
+ const result = (0, file_discovery_1.getModulePath)(filePath);
187
+ (0, vitest_1.expect)(result).toBe("src/features/my-feature");
188
+ });
189
+ });
190
+ });
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ /**
3
+ * Integration Tests
4
+ *
5
+ * Tests the full migration pipeline from old-style entities to new descriptors.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ const vitest_1 = require("vitest");
42
+ const path = __importStar(require("path"));
43
+ const ts = __importStar(require("typescript"));
44
+ const file_discovery_1 = require("../lib/file-discovery");
45
+ const ast_parser_1 = require("../lib/ast-parser");
46
+ const descriptor_generator_1 = require("../lib/descriptor-generator");
47
+ const FIXTURES_DIR = path.resolve(__dirname, "../__fixtures__");
48
+ /**
49
+ * Helper to check if TypeScript code is syntactically valid
50
+ */
51
+ function isValidTypeScript(code) {
52
+ const sourceFile = ts.createSourceFile("test.ts", code, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
53
+ const errors = [];
54
+ // Check for parse errors by looking at the source file's internal diagnostics
55
+ // Note: This only checks syntax, not type errors
56
+ function visit(node) {
57
+ // Look for any node with a kind that indicates a parsing error
58
+ if (node.kind === ts.SyntaxKind.Unknown) {
59
+ errors.push(`Unknown syntax at position ${node.pos}`);
60
+ }
61
+ ts.forEachChild(node, visit);
62
+ }
63
+ visit(sourceFile);
64
+ // Also check that we can re-emit the code
65
+ const printer = ts.createPrinter();
66
+ try {
67
+ printer.printFile(sourceFile);
68
+ }
69
+ catch (e) {
70
+ errors.push(`Printer error: ${e.message}`);
71
+ }
72
+ return {
73
+ valid: errors.length === 0,
74
+ errors,
75
+ };
76
+ }
77
+ (0, vitest_1.describe)("migration integration", () => {
78
+ (0, vitest_1.describe)("full migration pipeline - test-entity", () => {
79
+ (0, vitest_1.it)("should discover, parse, and generate valid output", async () => {
80
+ // Step 1: Discover files
81
+ const discovered = await (0, file_discovery_1.discoverOldFiles)(path.join(FIXTURES_DIR, "entities"));
82
+ (0, vitest_1.expect)(discovered.length).toBe(1);
83
+ const files = discovered[0];
84
+ (0, vitest_1.expect)(files.entityName).toBe("test-entity");
85
+ // Step 2: Check not already migrated
86
+ const migrated = (0, file_discovery_1.isAlreadyMigrated)(files);
87
+ (0, vitest_1.expect)(migrated).toBe(false);
88
+ // Step 3: Parse old files
89
+ const parsed = (0, ast_parser_1.parseOldFiles)(files);
90
+ (0, vitest_1.expect)(parsed.meta.labelName).toBe("TestEntity");
91
+ (0, vitest_1.expect)(parsed.entityType.name).toBe("TestEntity");
92
+ // Step 4: Generate new entity file
93
+ const entityFile = (0, descriptor_generator_1.generateEntityFile)(parsed, files.entityDir);
94
+ (0, vitest_1.expect)(entityFile).toContain("defineEntity<TestEntity>()");
95
+ // Step 5: Generate new meta file
96
+ const metaFile = (0, descriptor_generator_1.generateMetaFile)(parsed.meta);
97
+ (0, vitest_1.expect)(metaFile).toContain("testEntityMeta");
98
+ // Step 6: Verify TypeScript syntax is valid
99
+ const entityValidation = isValidTypeScript(entityFile);
100
+ (0, vitest_1.expect)(entityValidation.valid).toBe(true);
101
+ const metaValidation = isValidTypeScript(metaFile);
102
+ (0, vitest_1.expect)(metaValidation.valid).toBe(true);
103
+ });
104
+ (0, vitest_1.it)("should include S3Service injection", async () => {
105
+ const discovered = await (0, file_discovery_1.discoverOldFiles)(path.join(FIXTURES_DIR, "entities"));
106
+ const files = discovered[0];
107
+ const parsed = (0, ast_parser_1.parseOldFiles)(files);
108
+ const entityFile = (0, descriptor_generator_1.generateEntityFile)(parsed, files.entityDir);
109
+ (0, vitest_1.expect)(entityFile).toContain("injectServices: [S3Service]");
110
+ (0, vitest_1.expect)(entityFile).toContain("S3Service");
111
+ });
112
+ (0, vitest_1.it)("should include URL transforms", async () => {
113
+ const discovered = await (0, file_discovery_1.discoverOldFiles)(path.join(FIXTURES_DIR, "entities"));
114
+ const files = discovered[0];
115
+ const parsed = (0, ast_parser_1.parseOldFiles)(files);
116
+ const entityFile = (0, descriptor_generator_1.generateEntityFile)(parsed, files.entityDir);
117
+ // Single URL transform
118
+ (0, vitest_1.expect)(entityFile).toContain("transform: async (data, services) => {");
119
+ (0, vitest_1.expect)(entityFile).toContain("services.S3Service.generateSignedUrl");
120
+ // Array URL transform
121
+ (0, vitest_1.expect)(entityFile).toContain("Promise.all");
122
+ });
123
+ (0, vitest_1.it)("should preserve entity type definition", async () => {
124
+ const discovered = await (0, file_discovery_1.discoverOldFiles)(path.join(FIXTURES_DIR, "entities"));
125
+ const files = discovered[0];
126
+ const parsed = (0, ast_parser_1.parseOldFiles)(files);
127
+ const entityFile = (0, descriptor_generator_1.generateEntityFile)(parsed, files.entityDir);
128
+ (0, vitest_1.expect)(entityFile).toContain("export type TestEntity = Entity & {");
129
+ (0, vitest_1.expect)(entityFile).toContain("name: string;");
130
+ (0, vitest_1.expect)(entityFile).toContain("description?: string;");
131
+ (0, vitest_1.expect)(entityFile).toContain("url?: string;");
132
+ });
133
+ });
134
+ (0, vitest_1.describe)("full migration pipeline - simple-entity", () => {
135
+ (0, vitest_1.it)("should migrate simple entity without S3 or relationships", async () => {
136
+ const discovered = await (0, file_discovery_1.discoverOldFiles)(path.join(FIXTURES_DIR, "simple-entity"));
137
+ (0, vitest_1.expect)(discovered.length).toBe(1);
138
+ const files = discovered[0];
139
+ const migrated = (0, file_discovery_1.isAlreadyMigrated)(files);
140
+ (0, vitest_1.expect)(migrated).toBe(false);
141
+ const parsed = (0, ast_parser_1.parseOldFiles)(files);
142
+ (0, vitest_1.expect)(parsed.meta.labelName).toBe("SimpleEntity");
143
+ const entityFile = (0, descriptor_generator_1.generateEntityFile)(parsed, files.entityDir);
144
+ // Should NOT have S3 stuff
145
+ (0, vitest_1.expect)(entityFile).not.toContain("injectServices");
146
+ (0, vitest_1.expect)(entityFile).not.toContain("S3Service");
147
+ // Should NOT have relationships
148
+ (0, vitest_1.expect)(entityFile).not.toContain("relationships:");
149
+ // Should have fields
150
+ (0, vitest_1.expect)(entityFile).toContain("fields:");
151
+ (0, vitest_1.expect)(entityFile).toContain('title: { type: "string"');
152
+ (0, vitest_1.expect)(entityFile).toContain('count: { type: "number"');
153
+ (0, vitest_1.expect)(entityFile).toContain('isActive: { type: "boolean"');
154
+ // Should be valid TypeScript
155
+ const validation = isValidTypeScript(entityFile);
156
+ (0, vitest_1.expect)(validation.valid).toBe(true);
157
+ });
158
+ });
159
+ (0, vitest_1.describe)("full migration pipeline - complex-entity", () => {
160
+ (0, vitest_1.it)("should migrate complex entity with relationships and computed fields", async () => {
161
+ const discovered = await (0, file_discovery_1.discoverOldFiles)(path.join(FIXTURES_DIR, "complex-entity"));
162
+ (0, vitest_1.expect)(discovered.length).toBe(1);
163
+ const files = discovered[0];
164
+ const migrated = (0, file_discovery_1.isAlreadyMigrated)(files);
165
+ (0, vitest_1.expect)(migrated).toBe(false);
166
+ const parsed = (0, ast_parser_1.parseOldFiles)(files);
167
+ (0, vitest_1.expect)(parsed.meta.labelName).toBe("ComplexEntity");
168
+ const entityFile = (0, descriptor_generator_1.generateEntityFile)(parsed, files.entityDir);
169
+ // Should have relationships
170
+ (0, vitest_1.expect)(entityFile).toContain("relationships:");
171
+ (0, vitest_1.expect)(entityFile).toContain("author:");
172
+ (0, vitest_1.expect)(entityFile).toContain("company:");
173
+ (0, vitest_1.expect)(entityFile).toContain("items:");
174
+ // Should have computed fields
175
+ (0, vitest_1.expect)(entityFile).toContain("computed:");
176
+ (0, vitest_1.expect)(entityFile).toContain("totalScore:");
177
+ (0, vitest_1.expect)(entityFile).toContain("itemCount:");
178
+ // Should have meta fields
179
+ (0, vitest_1.expect)(entityFile).toContain("meta: true");
180
+ // Should be valid TypeScript
181
+ const validation = isValidTypeScript(entityFile);
182
+ (0, vitest_1.expect)(validation.valid).toBe(true);
183
+ });
184
+ });
185
+ (0, vitest_1.describe)("already migrated detection", () => {
186
+ (0, vitest_1.it)("should detect already-migrated entity", async () => {
187
+ const discovered = await (0, file_discovery_1.discoverOldFiles)(path.join(FIXTURES_DIR, "migrated-entity"));
188
+ (0, vitest_1.expect)(discovered.length).toBe(1);
189
+ const files = discovered[0];
190
+ const migrated = (0, file_discovery_1.isAlreadyMigrated)(files);
191
+ (0, vitest_1.expect)(migrated).toBe(true);
192
+ });
193
+ });
194
+ (0, vitest_1.describe)("migration output validation", () => {
195
+ (0, vitest_1.it)("should generate meta file with correct export", async () => {
196
+ const discovered = await (0, file_discovery_1.discoverOldFiles)(path.join(FIXTURES_DIR, "entities"));
197
+ const files = discovered[0];
198
+ const parsed = (0, ast_parser_1.parseOldFiles)(files);
199
+ const metaFile = (0, descriptor_generator_1.generateMetaFile)(parsed.meta);
200
+ (0, vitest_1.expect)(metaFile).toContain('import { DataMeta } from "@carlonicora/nestjs-neo4jsonapi"');
201
+ (0, vitest_1.expect)(metaFile).toContain("export const testEntityMeta: DataMeta = {");
202
+ (0, vitest_1.expect)(metaFile).toContain('type: "test-entities"');
203
+ (0, vitest_1.expect)(metaFile).toContain('endpoint: "test-entities"');
204
+ (0, vitest_1.expect)(metaFile).toContain('nodeName: "testEntity"');
205
+ (0, vitest_1.expect)(metaFile).toContain('labelName: "TestEntity"');
206
+ });
207
+ (0, vitest_1.it)("should generate entity file with correct structure", async () => {
208
+ const discovered = await (0, file_discovery_1.discoverOldFiles)(path.join(FIXTURES_DIR, "entities"));
209
+ const files = discovered[0];
210
+ const parsed = (0, ast_parser_1.parseOldFiles)(files);
211
+ const entityFile = (0, descriptor_generator_1.generateEntityFile)(parsed, files.entityDir);
212
+ // Check order: imports -> type -> descriptor -> type export
213
+ const importIndex = entityFile.indexOf("import");
214
+ const typeIndex = entityFile.indexOf("export type TestEntity");
215
+ const descriptorIndex = entityFile.indexOf("export const TestEntityDescriptor");
216
+ const typeExportIndex = entityFile.indexOf("export type TestEntityDescriptorType");
217
+ (0, vitest_1.expect)(importIndex).toBeLessThan(typeIndex);
218
+ (0, vitest_1.expect)(typeIndex).toBeLessThan(descriptorIndex);
219
+ (0, vitest_1.expect)(descriptorIndex).toBeLessThan(typeExportIndex);
220
+ });
221
+ (0, vitest_1.it)("should include defineEntity call", async () => {
222
+ const discovered = await (0, file_discovery_1.discoverOldFiles)(path.join(FIXTURES_DIR, "entities"));
223
+ const files = discovered[0];
224
+ const parsed = (0, ast_parser_1.parseOldFiles)(files);
225
+ const entityFile = (0, descriptor_generator_1.generateEntityFile)(parsed, files.entityDir);
226
+ (0, vitest_1.expect)(entityFile).toContain("defineEntity<TestEntity>()({");
227
+ (0, vitest_1.expect)(entityFile).toContain("...testEntityMeta,");
228
+ });
229
+ });
230
+ (0, vitest_1.describe)("multiple fixtures migration", () => {
231
+ (0, vitest_1.it)("should discover all fixtures in the directory", async () => {
232
+ const discovered = await (0, file_discovery_1.discoverOldFiles)(FIXTURES_DIR);
233
+ // Should find all 7 fixtures (4 original + 3 from relationship-entity folder)
234
+ const entityNames = discovered.map((d) => d.entityName);
235
+ (0, vitest_1.expect)(entityNames).toContain("test-entity");
236
+ (0, vitest_1.expect)(entityNames).toContain("simple-entity");
237
+ (0, vitest_1.expect)(entityNames).toContain("complex-entity");
238
+ (0, vitest_1.expect)(entityNames).toContain("migrated-entity");
239
+ (0, vitest_1.expect)(entityNames).toContain("relationship-entity");
240
+ (0, vitest_1.expect)(entityNames).toContain("feature");
241
+ (0, vitest_1.expect)(entityNames).toContain("module");
242
+ });
243
+ (0, vitest_1.it)("should correctly identify which entities need migration", async () => {
244
+ const discovered = await (0, file_discovery_1.discoverOldFiles)(FIXTURES_DIR);
245
+ const needsMigration = discovered.filter((f) => !(0, file_discovery_1.isAlreadyMigrated)(f));
246
+ const alreadyMigrated = discovered.filter((f) => (0, file_discovery_1.isAlreadyMigrated)(f));
247
+ // 6 need migration (3 original + 3 from relationship-entity folder), 1 already migrated
248
+ (0, vitest_1.expect)(needsMigration.length).toBe(6);
249
+ (0, vitest_1.expect)(alreadyMigrated.length).toBe(1);
250
+ const needsMigrationNames = needsMigration.map((f) => f.entityName);
251
+ (0, vitest_1.expect)(needsMigrationNames).toContain("test-entity");
252
+ (0, vitest_1.expect)(needsMigrationNames).toContain("simple-entity");
253
+ (0, vitest_1.expect)(needsMigrationNames).toContain("complex-entity");
254
+ (0, vitest_1.expect)(needsMigrationNames).toContain("relationship-entity");
255
+ (0, vitest_1.expect)(needsMigrationNames).toContain("feature");
256
+ (0, vitest_1.expect)(needsMigrationNames).toContain("module");
257
+ const alreadyMigratedNames = alreadyMigrated.map((f) => f.entityName);
258
+ (0, vitest_1.expect)(alreadyMigratedNames).toContain("migrated-entity");
259
+ });
260
+ });
261
+ });
@@ -22,7 +22,7 @@ program
22
22
  .option("-e, --entity <name>", "Entity name if module has multiple (e.g., auth.code)")
23
23
  .option("-a, --all", "Migrate all entities in codebase")
24
24
  .option("-d, --dry-run", "Preview changes without writing files")
25
- .option("--skip-backup", "Skip creating backup files")
25
+ .option("--backup", "Create .bak backup files before overwriting")
26
26
  .option("-v, --verbose", "Verbose output")
27
27
  .parse();
28
28
  async function main() {
@@ -37,7 +37,7 @@ async function main() {
37
37
  entity: options.entity,
38
38
  all: options.all,
39
39
  dryRun: options.dryRun,
40
- skipBackup: options.skipBackup,
40
+ skipBackup: !options.backup,
41
41
  verbose: options.verbose,
42
42
  });
43
43
  let result;