declastruct 1.2.0 → 1.3.1

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 (59) hide show
  1. package/dist/domain.objects/ContextDeclastruct.d.ts +1 -1
  2. package/dist/domain.objects/DeclastructChange.d.ts +1 -1
  3. package/dist/domain.objects/DeclastructChange.js.map +1 -1
  4. package/dist/domain.objects/DeclastructDao.d.ts +2 -2
  5. package/dist/domain.objects/DeclastructPlan.d.ts +2 -2
  6. package/dist/domain.objects/DeclastructProvider.d.ts +1 -1
  7. package/dist/domain.operations/apply/applyChanges.js +8 -3
  8. package/dist/domain.operations/apply/applyChanges.js.map +1 -1
  9. package/dist/domain.operations/plan/computeChange.js +2 -28
  10. package/dist/domain.operations/plan/computeChange.js.map +1 -1
  11. package/dist/domain.operations/plan/getDisplayableDiff.d.ts +10 -0
  12. package/dist/domain.operations/plan/getDisplayableDiff.js +40 -0
  13. package/dist/domain.operations/plan/getDisplayableDiff.js.map +1 -0
  14. package/dist/infra/asIsoTimestamp.d.ts +1 -1
  15. package/license.md +21 -0
  16. package/package.json +19 -9
  17. package/readme.md +52 -32
  18. package/dist/.test/assets/providers/demo.provider.d.ts +0 -32
  19. package/dist/.test/assets/providers/demo.provider.js +0 -101
  20. package/dist/.test/assets/providers/demo.provider.js.map +0 -1
  21. package/dist/contract/cli/apply.integration.test.d.ts +0 -1
  22. package/dist/contract/cli/apply.integration.test.js +0 -215
  23. package/dist/contract/cli/apply.integration.test.js.map +0 -1
  24. package/dist/contract/cli/plan.integration.test.d.ts +0 -1
  25. package/dist/contract/cli/plan.integration.test.js +0 -142
  26. package/dist/contract/cli/plan.integration.test.js.map +0 -1
  27. package/dist/domain.objects/ContextDeclastruct.test.d.ts +0 -1
  28. package/dist/domain.objects/ContextDeclastruct.test.js +0 -41
  29. package/dist/domain.objects/ContextDeclastruct.test.js.map +0 -1
  30. package/dist/domain.objects/DeclastructChange.test.d.ts +0 -1
  31. package/dist/domain.objects/DeclastructChange.test.js +0 -59
  32. package/dist/domain.objects/DeclastructChange.test.js.map +0 -1
  33. package/dist/domain.objects/DeclastructDao.test.d.ts +0 -1
  34. package/dist/domain.objects/DeclastructDao.test.js +0 -78
  35. package/dist/domain.objects/DeclastructDao.test.js.map +0 -1
  36. package/dist/domain.objects/DeclastructPlan.test.d.ts +0 -1
  37. package/dist/domain.objects/DeclastructPlan.test.js +0 -31
  38. package/dist/domain.objects/DeclastructPlan.test.js.map +0 -1
  39. package/dist/domain.objects/DeclastructProvider.test.d.ts +0 -1
  40. package/dist/domain.objects/DeclastructProvider.test.js +0 -80
  41. package/dist/domain.objects/DeclastructProvider.test.js.map +0 -1
  42. package/dist/domain.objects/IsoTimestamp.test.d.ts +0 -1
  43. package/dist/domain.objects/IsoTimestamp.test.js +0 -10
  44. package/dist/domain.objects/IsoTimestamp.test.js.map +0 -1
  45. package/dist/domain.operations/apply/applyChange.test.d.ts +0 -1
  46. package/dist/domain.operations/apply/applyChange.test.js +0 -241
  47. package/dist/domain.operations/apply/applyChange.test.js.map +0 -1
  48. package/dist/domain.operations/apply/applyChanges.integration.test.d.ts +0 -1
  49. package/dist/domain.operations/apply/applyChanges.integration.test.js +0 -291
  50. package/dist/domain.operations/apply/applyChanges.integration.test.js.map +0 -1
  51. package/dist/domain.operations/plan/computeChange.test.d.ts +0 -1
  52. package/dist/domain.operations/plan/computeChange.test.js +0 -153
  53. package/dist/domain.operations/plan/computeChange.test.js.map +0 -1
  54. package/dist/domain.operations/plan/getDaoByResource.test.d.ts +0 -1
  55. package/dist/domain.operations/plan/getDaoByResource.test.js +0 -101
  56. package/dist/domain.operations/plan/getDaoByResource.test.js.map +0 -1
  57. package/dist/domain.operations/plan/planChanges.integration.test.d.ts +0 -1
  58. package/dist/domain.operations/plan/planChanges.integration.test.js +0 -200
  59. package/dist/domain.operations/plan/planChanges.integration.test.js.map +0 -1
@@ -1,200 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const bottleneck_1 = __importDefault(require("bottleneck"));
7
- const path_1 = require("path");
8
- const demo_provider_1 = require("../../.test/assets/providers/demo.provider");
9
- const DeclastructChange_1 = require("../../domain.objects/DeclastructChange");
10
- const planChanges_1 = require("./planChanges");
11
- describe('planChanges', () => {
12
- const wishFilePath = (0, path_1.resolve)(process.cwd(), 'src/.test/assets/wish.fixture.ts');
13
- beforeAll(async () => {
14
- // initialize provider (creates temp directory)
15
- await demo_provider_1.demoProvider.hooks.beforeAll();
16
- });
17
- const createContext = () => ({
18
- bottleneck: new bottleneck_1.default({ maxConcurrent: 10 }),
19
- log: {
20
- info: jest.fn(),
21
- error: jest.fn(),
22
- warn: jest.fn(),
23
- debug: jest.fn(),
24
- },
25
- });
26
- it('should plan CREATE actions for resources that do not exist remotely', async () => {
27
- // define desired resources
28
- const resources = [
29
- (0, demo_provider_1.genSampleDemoResource)({ name: 'First Test' }),
30
- (0, demo_provider_1.genSampleDemoResource)({ name: 'Second Test' }),
31
- ];
32
- // plan changes
33
- const plan = await (0, planChanges_1.planChanges)({
34
- resources,
35
- providers: [demo_provider_1.demoProvider],
36
- wishFilePath,
37
- }, createContext());
38
- // verify plan structure
39
- expect(plan.hash).toBeDefined();
40
- expect(plan.createdAt).toBeDefined();
41
- expect(plan.wish.uri).toBe(wishFilePath);
42
- expect(plan.changes.length).toBe(2);
43
- // verify all changes are CREATE
44
- plan.changes.forEach((change) => {
45
- expect(change.action).toBe(DeclastructChange_1.DeclastructChangeAction.CREATE);
46
- expect(change.forResource.class).toBe('DemoResource');
47
- expect(change.state.desired).toBeDefined();
48
- expect(change.state.remote).toBeNull();
49
- });
50
- // verify specific resources (slug includes full format with hash)
51
- const slugs = plan.changes.map((c) => c.forResource.slug);
52
- expect(slugs[0]).toContain(resources[0].exid);
53
- expect(slugs[1]).toContain(resources[1].exid);
54
- });
55
- it('should plan KEEP actions for resources that exist unchanged remotely', async () => {
56
- // define resources
57
- const resources = [
58
- (0, demo_provider_1.genSampleDemoResource)({ name: 'First Test' }),
59
- (0, demo_provider_1.genSampleDemoResource)({ name: 'Second Test' }),
60
- ];
61
- // create remote state
62
- const dao = demo_provider_1.demoProvider.daos.DemoResource;
63
- await dao.set.finsert(resources[0], {});
64
- await dao.set.finsert(resources[1], {});
65
- // plan changes with spy context
66
- const context = createContext();
67
- const plan = await (0, planChanges_1.planChanges)({
68
- resources,
69
- providers: [demo_provider_1.demoProvider],
70
- wishFilePath,
71
- }, context);
72
- // verify all changes are KEEP
73
- expect(plan.changes.length).toBe(2);
74
- plan.changes.forEach((change) => {
75
- expect(change.action).toBe(DeclastructChange_1.DeclastructChangeAction.KEEP);
76
- expect(change.forResource.class).toBe('DemoResource');
77
- expect(change.state.desired).toBeDefined();
78
- expect(change.state.remote).toBeDefined();
79
- });
80
- // verify success message was logged when everything is in sync
81
- expect(context.log.info).toHaveBeenCalledWith('🎉 everything is in sync!');
82
- });
83
- it('should plan UPDATE actions for resources that changed remotely', async () => {
84
- // create remote state
85
- const remoteResource = (0, demo_provider_1.genSampleDemoResource)({ name: 'Old Name' });
86
- const dao = demo_provider_1.demoProvider.daos.DemoResource;
87
- await dao.set.finsert(remoteResource, {});
88
- // define desired resource with new name (same exid)
89
- const resources = [remoteResource.clone({ name: 'New Name' })];
90
- // plan changes
91
- const plan = await (0, planChanges_1.planChanges)({
92
- resources,
93
- providers: [demo_provider_1.demoProvider],
94
- wishFilePath,
95
- }, createContext());
96
- // verify UPDATE action
97
- expect(plan.changes.length).toBe(1);
98
- const change = plan.changes[0];
99
- expect(change.action).toBe(DeclastructChange_1.DeclastructChangeAction.UPDATE);
100
- expect(change.forResource.class).toBe('DemoResource');
101
- expect(change.forResource.slug).toContain(remoteResource.exid);
102
- expect(change.state.desired.name).toBe('New Name');
103
- expect(change.state.remote?.name).toBe('Old Name');
104
- expect(change.toString()).toBeDefined();
105
- });
106
- it('should plan DELETE actions for resources that exist remotely but not in desired state', async () => {
107
- // create remote state
108
- const resource1 = (0, demo_provider_1.genSampleDemoResource)({ name: 'To Delete' });
109
- const resource2 = (0, demo_provider_1.genSampleDemoResource)({ name: 'To Keep' });
110
- const dao = demo_provider_1.demoProvider.daos.DemoResource;
111
- await dao.set.finsert(resource1, {});
112
- await dao.set.finsert(resource2, {});
113
- // define desired resources (only resource2)
114
- const resources = [resource2];
115
- // Note: planChanges only looks at desired resources, not remote state
116
- // DELETE actions would need to be detected by comparing remote state to desired
117
- // This is a design limitation - planChanges only processes desired resources
118
- const plan = await (0, planChanges_1.planChanges)({
119
- resources,
120
- providers: [demo_provider_1.demoProvider],
121
- wishFilePath,
122
- }, createContext());
123
- // verify only resource2 is in plan
124
- expect(plan.changes.length).toBe(1);
125
- expect(plan.changes[0].forResource.slug).toContain(resource2.exid);
126
- expect(plan.changes[0].action).toBe(DeclastructChange_1.DeclastructChangeAction.KEEP);
127
- });
128
- it('should emit real-time logs as resources are planned', async () => {
129
- // define resources
130
- const resources = [
131
- (0, demo_provider_1.genSampleDemoResource)({ name: 'First Test' }),
132
- (0, demo_provider_1.genSampleDemoResource)({ name: 'Second Test' }),
133
- ];
134
- // plan with spy on log
135
- const context = createContext();
136
- await (0, planChanges_1.planChanges)({
137
- resources,
138
- providers: [demo_provider_1.demoProvider],
139
- wishFilePath,
140
- }, context);
141
- // verify logs were emitted (logs include the full slug with hash)
142
- expect(context.log.info).toHaveBeenCalledWith(expect.stringContaining(`[CREATE] DemoResource.`), {});
143
- expect(context.log.info).toHaveBeenCalled();
144
- });
145
- it('should handle mixed actions in single plan', async () => {
146
- // create remote resources
147
- const resource1 = (0, demo_provider_1.genSampleDemoResource)({ name: 'Unchanged' });
148
- const resource2 = (0, demo_provider_1.genSampleDemoResource)({ name: 'Old Name' });
149
- // create remote state for some resources
150
- const dao = demo_provider_1.demoProvider.daos.DemoResource;
151
- await dao.set.finsert(resource1, {});
152
- await dao.set.finsert(resource2, {});
153
- // define desired resources
154
- const resources = [
155
- resource1, // KEEP
156
- resource2.clone({ name: 'New Name' }), // UPDATE
157
- (0, demo_provider_1.genSampleDemoResource)({ name: 'Brand New' }), // CREATE
158
- ];
159
- // plan changes
160
- const plan = await (0, planChanges_1.planChanges)({
161
- resources,
162
- providers: [demo_provider_1.demoProvider],
163
- wishFilePath,
164
- }, createContext());
165
- // verify mixed actions
166
- expect(plan.changes.length).toBe(3);
167
- // verify we have one of each action
168
- const actions = plan.changes.map((c) => c.action);
169
- expect(actions).toContain(DeclastructChange_1.DeclastructChangeAction.KEEP);
170
- expect(actions).toContain(DeclastructChange_1.DeclastructChangeAction.UPDATE);
171
- expect(actions).toContain(DeclastructChange_1.DeclastructChangeAction.CREATE);
172
- // verify exids are in slugs
173
- const slugString = plan.changes.map((c) => c.forResource.slug).join(',');
174
- expect(slugString).toContain(resource1.exid);
175
- expect(slugString).toContain(resource2.exid);
176
- expect(slugString).toContain(resources[2].exid);
177
- });
178
- it('should produce deterministic plans for same input', async () => {
179
- // define resources
180
- const resources = [
181
- (0, demo_provider_1.genSampleDemoResource)({ name: 'First Test' }),
182
- (0, demo_provider_1.genSampleDemoResource)({ name: 'Second Test' }),
183
- ];
184
- // plan twice
185
- const plan1 = await (0, planChanges_1.planChanges)({
186
- resources,
187
- providers: [demo_provider_1.demoProvider],
188
- wishFilePath,
189
- }, createContext());
190
- const plan2 = await (0, planChanges_1.planChanges)({
191
- resources,
192
- providers: [demo_provider_1.demoProvider],
193
- wishFilePath,
194
- }, createContext());
195
- // verify plans have same hash (deterministic)
196
- expect(plan1.hash).toBe(plan2.hash);
197
- expect(plan1.changes.length).toBe(plan2.changes.length);
198
- });
199
- });
200
- //# sourceMappingURL=planChanges.integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"planChanges.integration.test.js","sourceRoot":"","sources":["../../../src/domain.operations/plan/planChanges.integration.test.ts"],"names":[],"mappings":"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"}