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.
- package/dist/domain.objects/ContextDeclastruct.d.ts +1 -1
- package/dist/domain.objects/DeclastructChange.d.ts +1 -1
- package/dist/domain.objects/DeclastructChange.js.map +1 -1
- package/dist/domain.objects/DeclastructDao.d.ts +2 -2
- package/dist/domain.objects/DeclastructPlan.d.ts +2 -2
- package/dist/domain.objects/DeclastructProvider.d.ts +1 -1
- package/dist/domain.operations/apply/applyChanges.js +8 -3
- package/dist/domain.operations/apply/applyChanges.js.map +1 -1
- package/dist/domain.operations/plan/computeChange.js +2 -28
- package/dist/domain.operations/plan/computeChange.js.map +1 -1
- package/dist/domain.operations/plan/getDisplayableDiff.d.ts +10 -0
- package/dist/domain.operations/plan/getDisplayableDiff.js +40 -0
- package/dist/domain.operations/plan/getDisplayableDiff.js.map +1 -0
- package/dist/infra/asIsoTimestamp.d.ts +1 -1
- package/license.md +21 -0
- package/package.json +19 -9
- package/readme.md +52 -32
- package/dist/.test/assets/providers/demo.provider.d.ts +0 -32
- package/dist/.test/assets/providers/demo.provider.js +0 -101
- package/dist/.test/assets/providers/demo.provider.js.map +0 -1
- package/dist/contract/cli/apply.integration.test.d.ts +0 -1
- package/dist/contract/cli/apply.integration.test.js +0 -215
- package/dist/contract/cli/apply.integration.test.js.map +0 -1
- package/dist/contract/cli/plan.integration.test.d.ts +0 -1
- package/dist/contract/cli/plan.integration.test.js +0 -142
- package/dist/contract/cli/plan.integration.test.js.map +0 -1
- package/dist/domain.objects/ContextDeclastruct.test.d.ts +0 -1
- package/dist/domain.objects/ContextDeclastruct.test.js +0 -41
- package/dist/domain.objects/ContextDeclastruct.test.js.map +0 -1
- package/dist/domain.objects/DeclastructChange.test.d.ts +0 -1
- package/dist/domain.objects/DeclastructChange.test.js +0 -59
- package/dist/domain.objects/DeclastructChange.test.js.map +0 -1
- package/dist/domain.objects/DeclastructDao.test.d.ts +0 -1
- package/dist/domain.objects/DeclastructDao.test.js +0 -78
- package/dist/domain.objects/DeclastructDao.test.js.map +0 -1
- package/dist/domain.objects/DeclastructPlan.test.d.ts +0 -1
- package/dist/domain.objects/DeclastructPlan.test.js +0 -31
- package/dist/domain.objects/DeclastructPlan.test.js.map +0 -1
- package/dist/domain.objects/DeclastructProvider.test.d.ts +0 -1
- package/dist/domain.objects/DeclastructProvider.test.js +0 -80
- package/dist/domain.objects/DeclastructProvider.test.js.map +0 -1
- package/dist/domain.objects/IsoTimestamp.test.d.ts +0 -1
- package/dist/domain.objects/IsoTimestamp.test.js +0 -10
- package/dist/domain.objects/IsoTimestamp.test.js.map +0 -1
- package/dist/domain.operations/apply/applyChange.test.d.ts +0 -1
- package/dist/domain.operations/apply/applyChange.test.js +0 -241
- package/dist/domain.operations/apply/applyChange.test.js.map +0 -1
- package/dist/domain.operations/apply/applyChanges.integration.test.d.ts +0 -1
- package/dist/domain.operations/apply/applyChanges.integration.test.js +0 -291
- package/dist/domain.operations/apply/applyChanges.integration.test.js.map +0 -1
- package/dist/domain.operations/plan/computeChange.test.d.ts +0 -1
- package/dist/domain.operations/plan/computeChange.test.js +0 -153
- package/dist/domain.operations/plan/computeChange.test.js.map +0 -1
- package/dist/domain.operations/plan/getDaoByResource.test.d.ts +0 -1
- package/dist/domain.operations/plan/getDaoByResource.test.js +0 -101
- package/dist/domain.operations/plan/getDaoByResource.test.js.map +0 -1
- package/dist/domain.operations/plan/planChanges.integration.test.d.ts +0 -1
- package/dist/domain.operations/plan/planChanges.integration.test.js +0 -200
- 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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"}
|