declastruct 1.1.1 → 1.1.3
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/bin/run +4 -0
- package/dist/contract/cli/plan.integration.test.js +78 -43
- package/dist/contract/cli/plan.integration.test.js.map +1 -1
- package/dist/contract/sdk/index.d.ts +0 -9
- package/dist/contract/sdk/index.js +1 -22
- package/dist/contract/sdk/index.js.map +1 -1
- package/dist/domain.operations/apply/applyChange.d.ts +2 -3
- package/dist/domain.operations/apply/applyChange.js +17 -11
- package/dist/domain.operations/apply/applyChange.js.map +1 -1
- package/dist/domain.operations/apply/applyChange.test.js +0 -6
- package/dist/domain.operations/apply/applyChange.test.js.map +1 -1
- package/dist/domain.operations/apply/applyChanges.js +0 -1
- package/dist/domain.operations/apply/applyChanges.js.map +1 -1
- package/dist/domain.operations/plan/getDaoByResource.d.ts +6 -3
- package/dist/domain.operations/plan/getDaoByResource.js +12 -11
- package/dist/domain.operations/plan/getDaoByResource.js.map +1 -1
- package/dist/domain.operations/plan/getDaoByResource.test.js +5 -3
- package/dist/domain.operations/plan/getDaoByResource.test.js.map +1 -1
- package/dist/domain.operations/plan/planChanges.js +4 -4
- package/dist/domain.operations/plan/planChanges.js.map +1 -1
- package/package.json +6 -1
package/bin/run
ADDED
|
@@ -1,43 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
3
|
const fs_1 = require("fs");
|
|
27
4
|
const promises_1 = require("fs/promises");
|
|
28
5
|
const path_1 = require("path");
|
|
6
|
+
const uuid_fns_1 = require("uuid-fns");
|
|
29
7
|
const DeclastructPlan_1 = require("../../domain.objects/DeclastructPlan");
|
|
30
8
|
const plan_1 = require("./plan");
|
|
9
|
+
/**
|
|
10
|
+
* .what = generates unique temp directory for test run
|
|
11
|
+
* .why = enables isolated test artifacts without cleanup
|
|
12
|
+
*/
|
|
13
|
+
const genTempDir = async () => {
|
|
14
|
+
const testUuid = (0, uuid_fns_1.getUuid)();
|
|
15
|
+
const tempDir = (0, path_1.resolve)(process.cwd(), `src/.test/assets/.temp/${testUuid}`);
|
|
16
|
+
await (0, promises_1.mkdir)(tempDir, { recursive: true });
|
|
17
|
+
return tempDir;
|
|
18
|
+
};
|
|
31
19
|
describe('executePlanCommand', () => {
|
|
32
20
|
const wishFilePath = (0, path_1.resolve)(process.cwd(), 'src/.test/assets/wish.fixture.ts');
|
|
33
|
-
const planFilePath = (0, path_1.resolve)(process.cwd(), 'src/.test/assets/plan.test.json');
|
|
34
|
-
afterEach(async () => {
|
|
35
|
-
// cleanup plan file after each test
|
|
36
|
-
if ((0, fs_1.existsSync)(planFilePath)) {
|
|
37
|
-
await (0, promises_1.rm)(planFilePath);
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
21
|
it('should generate a plan file with changes based on wish file', async () => {
|
|
22
|
+
const tempDir = await genTempDir();
|
|
23
|
+
const planFilePath = (0, path_1.resolve)(tempDir, 'plan.json');
|
|
41
24
|
// execute plan command
|
|
42
25
|
await (0, plan_1.executePlanCommand)({ wishFilePath, planFilePath });
|
|
43
26
|
// verify plan file was created
|
|
@@ -65,31 +48,33 @@ describe('executePlanCommand', () => {
|
|
|
65
48
|
expect(slugs[0]).not.toBe(slugs[1]);
|
|
66
49
|
});
|
|
67
50
|
it('should throw when wish file does not exist', async () => {
|
|
68
|
-
const
|
|
51
|
+
const tempDir = await genTempDir();
|
|
52
|
+
const nonexistentWishPath = (0, path_1.resolve)(tempDir, 'nonexistent.ts');
|
|
53
|
+
const planFilePath = (0, path_1.resolve)(tempDir, 'plan.json');
|
|
69
54
|
await expect((0, plan_1.executePlanCommand)({
|
|
70
55
|
wishFilePath: nonexistentWishPath,
|
|
71
56
|
planFilePath,
|
|
72
57
|
})).rejects.toThrow('Wish file not found');
|
|
73
58
|
});
|
|
74
59
|
it('should throw when wish file does not export getResources', async () => {
|
|
75
|
-
const
|
|
60
|
+
const tempDir = await genTempDir();
|
|
61
|
+
const badWishPath = (0, path_1.resolve)(tempDir, 'bad-wish.ts');
|
|
62
|
+
const planFilePath = (0, path_1.resolve)(tempDir, 'plan.json');
|
|
76
63
|
// create bad wish file
|
|
77
|
-
|
|
78
|
-
await writeFile(badWishPath, 'export const getProviders = async () => [];', 'utf-8');
|
|
64
|
+
await (0, promises_1.writeFile)(badWishPath, 'export const getProviders = async () => [];', 'utf-8');
|
|
79
65
|
await expect((0, plan_1.executePlanCommand)({ wishFilePath: badWishPath, planFilePath })).rejects.toThrow('Wish file must export getResources() function');
|
|
80
|
-
// cleanup
|
|
81
|
-
await (0, promises_1.rm)(badWishPath);
|
|
82
66
|
});
|
|
83
67
|
it('should throw when wish file does not export getProviders', async () => {
|
|
84
|
-
const
|
|
68
|
+
const tempDir = await genTempDir();
|
|
69
|
+
const badWishPath = (0, path_1.resolve)(tempDir, 'bad-wish.ts');
|
|
70
|
+
const planFilePath = (0, path_1.resolve)(tempDir, 'plan.json');
|
|
85
71
|
// create bad wish file
|
|
86
|
-
|
|
87
|
-
await writeFile(badWishPath, 'export const getResources = async () => [];', 'utf-8');
|
|
72
|
+
await (0, promises_1.writeFile)(badWishPath, 'export const getResources = async () => [];', 'utf-8');
|
|
88
73
|
await expect((0, plan_1.executePlanCommand)({ wishFilePath: badWishPath, planFilePath })).rejects.toThrow('Wish file must export getProviders() function');
|
|
89
|
-
// cleanup
|
|
90
|
-
await (0, promises_1.rm)(badWishPath);
|
|
91
74
|
});
|
|
92
75
|
it('should detect KEEP action when resource already exists remotely', async () => {
|
|
76
|
+
const tempDir = await genTempDir();
|
|
77
|
+
const planFilePath = (0, path_1.resolve)(tempDir, 'plan.json');
|
|
93
78
|
// first run - create resources
|
|
94
79
|
await (0, plan_1.executePlanCommand)({ wishFilePath, planFilePath });
|
|
95
80
|
// read first plan
|
|
@@ -97,11 +82,61 @@ describe('executePlanCommand', () => {
|
|
|
97
82
|
const firstPlan = new DeclastructPlan_1.DeclastructPlan(JSON.parse(firstPlanJson));
|
|
98
83
|
// verify all CREATE
|
|
99
84
|
expect(firstPlan.changes.every((c) => c.action === 'CREATE')).toBe(true);
|
|
100
|
-
// cleanup and run again
|
|
101
|
-
await (0, promises_1.rm)(planFilePath);
|
|
102
85
|
// Note: In a real integration test, we would need to actually apply the changes
|
|
103
86
|
// to populate remote state. For now, this test just verifies the basic flow.
|
|
104
87
|
// A more complete test would require mocking or actual provider state.
|
|
105
88
|
});
|
|
89
|
+
it('should pass provider context through to DAO operations', async () => {
|
|
90
|
+
const tempDir = await genTempDir();
|
|
91
|
+
const authWishFilePath = (0, path_1.resolve)(process.cwd(), 'src/.test/assets/wish-with-auth.fixture.ts');
|
|
92
|
+
const authPlanFilePath = (0, path_1.resolve)(tempDir, 'plan.json');
|
|
93
|
+
// execute plan command with auth provider
|
|
94
|
+
await (0, plan_1.executePlanCommand)({
|
|
95
|
+
wishFilePath: authWishFilePath,
|
|
96
|
+
planFilePath: authPlanFilePath,
|
|
97
|
+
});
|
|
98
|
+
// verify plan file was created successfully
|
|
99
|
+
expect((0, fs_1.existsSync)(authPlanFilePath)).toBe(true);
|
|
100
|
+
// read and parse plan
|
|
101
|
+
const planJson = await (0, promises_1.readFile)(authPlanFilePath, 'utf-8');
|
|
102
|
+
const plan = new DeclastructPlan_1.DeclastructPlan(JSON.parse(planJson));
|
|
103
|
+
// verify plan was generated (context was passed through)
|
|
104
|
+
expect(plan.changes.length).toBe(2);
|
|
105
|
+
expect(plan.changes[0]?.forResource.class).toBe('DemoAuthResource');
|
|
106
|
+
// verify context enabled DAO operations (if this passes, context was properly passed)
|
|
107
|
+
expect(plan.changes[0]?.state.desired).toBeDefined();
|
|
108
|
+
});
|
|
109
|
+
it('should throw when provider context is missing required auth token', async () => {
|
|
110
|
+
const tempDir = await genTempDir();
|
|
111
|
+
const badAuthWishPath = (0, path_1.resolve)(tempDir, 'bad-auth-wish.ts');
|
|
112
|
+
const badAuthPlanPath = (0, path_1.resolve)(tempDir, 'plan.json');
|
|
113
|
+
// create wish file with provider missing auth token
|
|
114
|
+
await (0, promises_1.writeFile)(badAuthWishPath, `
|
|
115
|
+
import { DomainEntity } from 'domain-objects';
|
|
116
|
+
import { DeclastructProvider } from '${(0, path_1.resolve)(process.cwd(), 'src/domain.objects/DeclastructProvider')}';
|
|
117
|
+
import {
|
|
118
|
+
DemoAuthResource,
|
|
119
|
+
genSampleDemoAuthResource,
|
|
120
|
+
demoAuthProvider,
|
|
121
|
+
} from '${(0, path_1.resolve)(process.cwd(), 'src/.test/assets/providers/demo-with-auth.provider')}';
|
|
122
|
+
|
|
123
|
+
export const getResources = async (): Promise<DomainEntity<any>[]> => {
|
|
124
|
+
return [genSampleDemoAuthResource({ name: 'Test' })];
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
export const getProviders = async (): Promise<DeclastructProvider<any, any>[]> => {
|
|
128
|
+
// return provider with invalid context (missing demoAuthToken)
|
|
129
|
+
return [new DeclastructProvider({
|
|
130
|
+
...demoAuthProvider,
|
|
131
|
+
context: {} as any, // invalid context - missing required demoAuthToken
|
|
132
|
+
})];
|
|
133
|
+
};
|
|
134
|
+
`, 'utf-8');
|
|
135
|
+
// attempt to execute plan command
|
|
136
|
+
await expect((0, plan_1.executePlanCommand)({
|
|
137
|
+
wishFilePath: badAuthWishPath,
|
|
138
|
+
planFilePath: badAuthPlanPath,
|
|
139
|
+
})).rejects.toThrow('demoAuthToken required in context');
|
|
140
|
+
});
|
|
106
141
|
});
|
|
107
142
|
//# sourceMappingURL=plan.integration.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.integration.test.js","sourceRoot":"","sources":["../../../src/contract/cli/plan.integration.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plan.integration.test.js","sourceRoot":"","sources":["../../../src/contract/cli/plan.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,12 +4,3 @@ export { DeclastructDao } from '../../domain.objects/DeclastructDao';
|
|
|
4
4
|
export { DeclastructProvider } from '../../domain.objects/DeclastructProvider';
|
|
5
5
|
export { DeclastructPlan } from '../../domain.objects/DeclastructPlan';
|
|
6
6
|
export { ContextDeclastruct } from '../../domain.objects/ContextDeclastruct';
|
|
7
|
-
export { getDaoByResource } from '../../domain.operations/plan/getDaoByResource';
|
|
8
|
-
export { computeChange } from '../../domain.operations/plan/computeChange';
|
|
9
|
-
export { planChanges } from '../../domain.operations/plan/planChanges';
|
|
10
|
-
export { assertPlanStillValid } from '../../domain.operations/plan/validate';
|
|
11
|
-
export { hashChanges } from '../../domain.operations/plan/hashChanges';
|
|
12
|
-
export { extractResourcesFromPlan } from '../../domain.operations/plan/extractResourcesFromPlan';
|
|
13
|
-
export { asIsoTimestamp } from '../../infra/asIsoTimestamp';
|
|
14
|
-
export { applyChange } from '../../domain.operations/apply/applyChange';
|
|
15
|
-
export { applyChanges } from '../../domain.operations/apply/applyChanges';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.DeclastructPlan = exports.DeclastructProvider = exports.DeclastructDao = exports.DeclastructChangeAction = exports.DeclastructChange = void 0;
|
|
4
4
|
var DeclastructChange_1 = require("../../domain.objects/DeclastructChange");
|
|
5
5
|
Object.defineProperty(exports, "DeclastructChange", { enumerable: true, get: function () { return DeclastructChange_1.DeclastructChange; } });
|
|
6
6
|
Object.defineProperty(exports, "DeclastructChangeAction", { enumerable: true, get: function () { return DeclastructChange_1.DeclastructChangeAction; } });
|
|
@@ -10,25 +10,4 @@ var DeclastructProvider_1 = require("../../domain.objects/DeclastructProvider");
|
|
|
10
10
|
Object.defineProperty(exports, "DeclastructProvider", { enumerable: true, get: function () { return DeclastructProvider_1.DeclastructProvider; } });
|
|
11
11
|
var DeclastructPlan_1 = require("../../domain.objects/DeclastructPlan");
|
|
12
12
|
Object.defineProperty(exports, "DeclastructPlan", { enumerable: true, get: function () { return DeclastructPlan_1.DeclastructPlan; } });
|
|
13
|
-
// domain operations - plan
|
|
14
|
-
var getDaoByResource_1 = require("../../domain.operations/plan/getDaoByResource");
|
|
15
|
-
Object.defineProperty(exports, "getDaoByResource", { enumerable: true, get: function () { return getDaoByResource_1.getDaoByResource; } });
|
|
16
|
-
var computeChange_1 = require("../../domain.operations/plan/computeChange");
|
|
17
|
-
Object.defineProperty(exports, "computeChange", { enumerable: true, get: function () { return computeChange_1.computeChange; } });
|
|
18
|
-
var planChanges_1 = require("../../domain.operations/plan/planChanges");
|
|
19
|
-
Object.defineProperty(exports, "planChanges", { enumerable: true, get: function () { return planChanges_1.planChanges; } });
|
|
20
|
-
var validate_1 = require("../../domain.operations/plan/validate");
|
|
21
|
-
Object.defineProperty(exports, "assertPlanStillValid", { enumerable: true, get: function () { return validate_1.assertPlanStillValid; } });
|
|
22
|
-
var hashChanges_1 = require("../../domain.operations/plan/hashChanges");
|
|
23
|
-
Object.defineProperty(exports, "hashChanges", { enumerable: true, get: function () { return hashChanges_1.hashChanges; } });
|
|
24
|
-
var extractResourcesFromPlan_1 = require("../../domain.operations/plan/extractResourcesFromPlan");
|
|
25
|
-
Object.defineProperty(exports, "extractResourcesFromPlan", { enumerable: true, get: function () { return extractResourcesFromPlan_1.extractResourcesFromPlan; } });
|
|
26
|
-
// infra
|
|
27
|
-
var asIsoTimestamp_1 = require("../../infra/asIsoTimestamp");
|
|
28
|
-
Object.defineProperty(exports, "asIsoTimestamp", { enumerable: true, get: function () { return asIsoTimestamp_1.asIsoTimestamp; } });
|
|
29
|
-
// domain operations - apply
|
|
30
|
-
var applyChange_1 = require("../../domain.operations/apply/applyChange");
|
|
31
|
-
Object.defineProperty(exports, "applyChange", { enumerable: true, get: function () { return applyChange_1.applyChange; } });
|
|
32
|
-
var applyChanges_1 = require("../../domain.operations/apply/applyChanges");
|
|
33
|
-
Object.defineProperty(exports, "applyChanges", { enumerable: true, get: function () { return applyChanges_1.applyChanges; } });
|
|
34
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contract/sdk/index.ts"],"names":[],"mappings":";;;AAEA,4EAGgD;AAF9C,sHAAA,iBAAiB,OAAA;AACjB,4HAAA,uBAAuB,OAAA;AAEzB,sEAAqE;AAA5D,gHAAA,cAAc,OAAA;AACvB,gFAA+E;AAAtE,0HAAA,mBAAmB,OAAA;AAC5B,wEAAuE;AAA9D,kHAAA,eAAe,OAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contract/sdk/index.ts"],"names":[],"mappings":";;;AAEA,4EAGgD;AAF9C,sHAAA,iBAAiB,OAAA;AACjB,4HAAA,uBAAuB,OAAA;AAEzB,sEAAqE;AAA5D,gHAAA,cAAc,OAAA;AACvB,gFAA+E;AAAtE,0HAAA,mBAAmB,OAAA;AAC5B,wEAAuE;AAA9D,kHAAA,eAAe,OAAA"}
|
|
@@ -6,9 +6,8 @@ import { DeclastructProvider } from '../../domain.objects/DeclastructProvider';
|
|
|
6
6
|
* .why = executes the actual infrastructure modification
|
|
7
7
|
* .note = different actions require different DAO methods; fails fast if method not available
|
|
8
8
|
*/
|
|
9
|
-
export declare const applyChange:
|
|
9
|
+
export declare const applyChange: ({ resource, change, providers, }: {
|
|
10
10
|
resource: DomainEntity<any>;
|
|
11
11
|
change: DeclastructChange;
|
|
12
|
-
providers: DeclastructProvider<any,
|
|
13
|
-
context: TContext;
|
|
12
|
+
providers: DeclastructProvider<any, any>[];
|
|
14
13
|
}) => Promise<DeclastructChange>;
|
|
@@ -9,50 +9,56 @@ const getDaoByResource_1 = require("../plan/getDaoByResource");
|
|
|
9
9
|
* .why = executes the actual infrastructure modification
|
|
10
10
|
* .note = different actions require different DAO methods; fails fast if method not available
|
|
11
11
|
*/
|
|
12
|
-
const applyChange = async ({ resource, change, providers,
|
|
12
|
+
const applyChange = async ({ resource, change, providers, }) => {
|
|
13
13
|
// skip KEEP actions immediately
|
|
14
14
|
if (change.action === DeclastructChange_1.DeclastructChangeAction.KEEP)
|
|
15
15
|
return change;
|
|
16
16
|
// validate that the name of the resource and on the change is the same
|
|
17
17
|
if (resource.constructor.name !== change.forResource.class)
|
|
18
18
|
throw new helpful_errors_1.UnexpectedCodePathError('why were we asked to apply a change on an unrelated resource?', { resource, change });
|
|
19
|
-
|
|
19
|
+
// find DAO and provider context for this resource
|
|
20
|
+
const { dao, context: providerContext } = (0, getDaoByResource_1.getDaoByResource)({
|
|
20
21
|
resource,
|
|
21
22
|
providers,
|
|
22
23
|
});
|
|
23
24
|
// execute action based on change type
|
|
24
25
|
switch (change.action) {
|
|
25
26
|
case DeclastructChange_1.DeclastructChangeAction.CREATE:
|
|
26
|
-
// create new resource
|
|
27
|
-
await dao.set.finsert(change.state.desired
|
|
27
|
+
// create new resource using provider context
|
|
28
|
+
await dao.set.finsert(change.state.desired ??
|
|
29
|
+
helpful_errors_1.UnexpectedCodePathError.throw('expected change.state.desired for CREATE', { change }), providerContext);
|
|
28
30
|
return change;
|
|
29
31
|
case DeclastructChange_1.DeclastructChangeAction.UPDATE:
|
|
30
|
-
// update existing resource
|
|
32
|
+
// update existing resource using provider context
|
|
31
33
|
if (!dao.set.upsert) {
|
|
32
34
|
throw new helpful_errors_1.UnexpectedCodePathError('DAO does not support updates', {
|
|
33
35
|
resourceClassName: change.forResource.class,
|
|
34
36
|
});
|
|
35
37
|
}
|
|
36
|
-
await dao.set.upsert(change.state.desired
|
|
38
|
+
await dao.set.upsert(change.state.desired ??
|
|
39
|
+
helpful_errors_1.UnexpectedCodePathError.throw('expected change.state.desired for UPDATE', { change }), providerContext);
|
|
37
40
|
return change;
|
|
38
41
|
case DeclastructChange_1.DeclastructChangeAction.DESTROY:
|
|
39
|
-
// delete resource
|
|
42
|
+
// delete resource using provider context
|
|
40
43
|
if (!dao.set.delete) {
|
|
41
44
|
throw new helpful_errors_1.UnexpectedCodePathError('DAO does not support deletes', {
|
|
42
45
|
resourceClassName: change.forResource.class,
|
|
43
46
|
});
|
|
44
47
|
}
|
|
45
|
-
await dao.set.delete(change.state.remote
|
|
48
|
+
await dao.set.delete(change.state.remote ??
|
|
49
|
+
helpful_errors_1.UnexpectedCodePathError.throw('expected change.state.remote for DESTROY', { change }), providerContext);
|
|
46
50
|
return change;
|
|
47
51
|
case DeclastructChange_1.DeclastructChangeAction.REPLACE:
|
|
48
|
-
// delete then create
|
|
52
|
+
// delete then create using provider context
|
|
49
53
|
if (!dao.set.delete) {
|
|
50
54
|
throw new helpful_errors_1.UnexpectedCodePathError('DAO does not support deletes', {
|
|
51
55
|
resourceClassName: change.forResource.class,
|
|
52
56
|
});
|
|
53
57
|
}
|
|
54
|
-
await dao.set.delete(change.state.remote
|
|
55
|
-
|
|
58
|
+
await dao.set.delete(change.state.remote ??
|
|
59
|
+
helpful_errors_1.UnexpectedCodePathError.throw('expected change.state.remote for REPLACE', { change }), providerContext);
|
|
60
|
+
await dao.set.finsert(change.state.desired ??
|
|
61
|
+
helpful_errors_1.UnexpectedCodePathError.throw('expected change.state.desired for REPLACE', { change }), providerContext);
|
|
56
62
|
return change;
|
|
57
63
|
default:
|
|
58
64
|
throw new helpful_errors_1.UnexpectedCodePathError('unknown change action', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applyChange.js","sourceRoot":"","sources":["../../../src/domain.operations/apply/applyChange.ts"],"names":[],"mappings":";;;AACA,mDAAyD;AAEzD,8EAGgD;AAEhD,+DAA4D;AAE5D;;;;GAIG;AACI,MAAM,WAAW,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"applyChange.js","sourceRoot":"","sources":["../../../src/domain.operations/apply/applyChange.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,7 +27,6 @@ describe('applyChange', () => {
|
|
|
27
27
|
resource,
|
|
28
28
|
change,
|
|
29
29
|
providers: [],
|
|
30
|
-
context: {},
|
|
31
30
|
});
|
|
32
31
|
expect(result).toBe(change);
|
|
33
32
|
});
|
|
@@ -68,7 +67,6 @@ describe('applyChange', () => {
|
|
|
68
67
|
resource,
|
|
69
68
|
change,
|
|
70
69
|
providers: [provider],
|
|
71
|
-
context: {},
|
|
72
70
|
});
|
|
73
71
|
expect(finsertSpy).toHaveBeenCalledWith(resource, {});
|
|
74
72
|
});
|
|
@@ -111,7 +109,6 @@ describe('applyChange', () => {
|
|
|
111
109
|
resource: desired,
|
|
112
110
|
change,
|
|
113
111
|
providers: [provider],
|
|
114
|
-
context: {},
|
|
115
112
|
});
|
|
116
113
|
expect(upsertSpy).toHaveBeenCalledWith(desired, {});
|
|
117
114
|
});
|
|
@@ -152,7 +149,6 @@ describe('applyChange', () => {
|
|
|
152
149
|
resource: desired,
|
|
153
150
|
change,
|
|
154
151
|
providers: [provider],
|
|
155
|
-
context: {},
|
|
156
152
|
}));
|
|
157
153
|
expect(error.message).toContain('DAO does not support updates');
|
|
158
154
|
});
|
|
@@ -194,7 +190,6 @@ describe('applyChange', () => {
|
|
|
194
190
|
resource,
|
|
195
191
|
change,
|
|
196
192
|
providers: [provider],
|
|
197
|
-
context: {},
|
|
198
193
|
});
|
|
199
194
|
expect(deleteSpy).toHaveBeenCalledWith(resource, {});
|
|
200
195
|
});
|
|
@@ -238,7 +233,6 @@ describe('applyChange', () => {
|
|
|
238
233
|
resource: desired,
|
|
239
234
|
change,
|
|
240
235
|
providers: [provider],
|
|
241
|
-
context: {},
|
|
242
236
|
});
|
|
243
237
|
expect(deleteSpy).toHaveBeenCalledWith(remote, {});
|
|
244
238
|
expect(finsertSpy).toHaveBeenCalledWith(desired, {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applyChange.test.js","sourceRoot":"","sources":["../../../src/domain.operations/apply/applyChange.test.ts"],"names":[],"mappings":";;AAAA,mDAA8C;AAC9C,mDAA0C;AAE1C,8EAGgD;AAEhD,kFAA+E;AAC/E,+CAA4C;AAE5C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAM3B,MAAM,YACJ,SAAQ,6BAA0B;;IAGpB,mBAAM,GAAG,CAAC,IAAI,CAAU,CAAC;IAGzC,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG,IAAI,qCAAiB,CAAC;YACnC,WAAW,EAAE;gBACX,KAAK,EAAE,YAAY,CAAC,IAAI;gBACxB,IAAI,EAAE,QAAQ;aACf;YACD,MAAM,EAAE,2CAAuB,CAAC,IAAI;YACpC,KAAK,EAAE;gBACL,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,QAAQ;gBAChB,UAAU,EAAE,IAAI;aACjB;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAW,EAAC;YAC/B,QAAQ;YACR,MAAM;YACN,SAAS,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"applyChange.test.js","sourceRoot":"","sources":["../../../src/domain.operations/apply/applyChange.test.ts"],"names":[],"mappings":";;AAAA,mDAA8C;AAC9C,mDAA0C;AAE1C,8EAGgD;AAEhD,kFAA+E;AAC/E,+CAA4C;AAE5C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAM3B,MAAM,YACJ,SAAQ,6BAA0B;;IAGpB,mBAAM,GAAG,CAAC,IAAI,CAAU,CAAC;IAGzC,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG,IAAI,qCAAiB,CAAC;YACnC,WAAW,EAAE;gBACX,KAAK,EAAE,YAAY,CAAC,IAAI;gBACxB,IAAI,EAAE,QAAQ;aACf;YACD,MAAM,EAAE,2CAAuB,CAAC,IAAI;YACpC,KAAK,EAAE;gBACL,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,QAAQ;gBAChB,UAAU,EAAE,IAAI;aACjB;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAW,EAAC;YAC/B,QAAQ;YACR,MAAM;YACN,SAAS,EAAE,EAAE;SACd,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAEzD,MAAM,GAAG,GAA2D;YAClE,GAAG,EAAE;gBACH,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;gBAC1B,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;aACxB;YACD,GAAG,EAAE;gBACH,OAAO,EAAE,UAAU;aACpB;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,yCAAmB,CAAC;YACvC,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE;YAC3B,OAAO,EAAE,EAAE;YACX,KAAK,EAAE;gBACL,SAAS,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;gBACzB,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;aACzB;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,qCAAiB,CAAC;YACnC,WAAW,EAAE;gBACX,KAAK,EAAE,YAAY,CAAC,IAAI;gBACxB,IAAI,EAAE,UAAU;aACjB;YACD,MAAM,EAAE,2CAAuB,CAAC,MAAM;YACtC,KAAK,EAAE;gBACL,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,WAAW;aACxB;SACF,CAAC,CAAC;QAEH,MAAM,IAAA,yBAAW,EAAC;YAChB,QAAQ;YACR,MAAM;YACN,SAAS,EAAE,CAAC,QAAQ,CAAC;SACtB,CAAC,CAAC;QAEH,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAEvD,MAAM,GAAG,GAA2D;YAClE,GAAG,EAAE;gBACH,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;gBAC1B,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;aACxB;YACD,GAAG,EAAE;gBACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAY;gBACtC,MAAM,EAAE,SAAS;aAClB;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,yCAAmB,CAAC;YACvC,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE;YAC3B,OAAO,EAAE,EAAE;YACX,KAAK,EAAE;gBACL,SAAS,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;gBACzB,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;aACzB;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,qCAAiB,CAAC;YACnC,WAAW,EAAE;gBACX,KAAK,EAAE,YAAY,CAAC,IAAI;gBACxB,IAAI,EAAE,UAAU;aACjB;YACD,MAAM,EAAE,2CAAuB,CAAC,MAAM;YACtC,KAAK,EAAE;gBACL,OAAO;gBACP,MAAM;gBACN,UAAU,EAAE,WAAW;aACxB;SACF,CAAC,CAAC;QAEH,MAAM,IAAA,yBAAW,EAAC;YAChB,QAAQ,EAAE,OAAO;YACjB,MAAM;YACN,SAAS,EAAE,CAAC,QAAQ,CAAC;SACtB,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAEvE,MAAM,GAAG,GAA2D;YAClE,GAAG,EAAE;gBACH,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;gBAC1B,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;aACxB;YACD,GAAG,EAAE;gBACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAY;aACvC;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,yCAAmB,CAAC;YACvC,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE;YAC3B,OAAO,EAAE,EAAE;YACX,KAAK,EAAE;gBACL,SAAS,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;gBACzB,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;aACzB;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,qCAAiB,CAAC;YACnC,WAAW,EAAE;gBACX,KAAK,EAAE,YAAY,CAAC,IAAI;gBACxB,IAAI,EAAE,UAAU;aACjB;YACD,MAAM,EAAE,2CAAuB,CAAC,MAAM;YACtC,KAAK,EAAE;gBACL,OAAO;gBACP,MAAM;gBACN,UAAU,EAAE,WAAW;aACxB;SACF,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,MAAM,IAAA,yBAAQ,EAAC,GAAG,EAAE,CAChC,IAAA,yBAAW,EAAC;YACV,QAAQ,EAAE,OAAO;YACjB,MAAM;YACN,SAAS,EAAE,CAAC,QAAQ,CAAC;SACtB,CAAC,CACH,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAEzD,MAAM,GAAG,GAA2D;YAClE,GAAG,EAAE;gBACH,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;gBAC1B,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;aACxB;YACD,GAAG,EAAE;gBACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAY;gBACtC,MAAM,EAAE,SAAS;aAClB;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,yCAAmB,CAAC;YACvC,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE;YAC3B,OAAO,EAAE,EAAE;YACX,KAAK,EAAE;gBACL,SAAS,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;gBACzB,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;aACzB;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,qCAAiB,CAAC;YACnC,WAAW,EAAE;gBACX,KAAK,EAAE,YAAY,CAAC,IAAI;gBACxB,IAAI,EAAE,WAAW;aAClB;YACD,MAAM,EAAE,2CAAuB,CAAC,OAAO;YACvC,KAAK,EAAE;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,QAAQ;gBAChB,UAAU,EAAE,WAAW;aACxB;SACF,CAAC,CAAC;QAEH,MAAM,IAAA,yBAAW,EAAC;YAChB,QAAQ;YACR,MAAM;YACN,SAAS,EAAE,CAAC,QAAQ,CAAC;SACtB,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAExD,MAAM,GAAG,GAA2D;YAClE,GAAG,EAAE;gBACH,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;gBAC1B,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;aACxB;YACD,GAAG,EAAE;gBACH,OAAO,EAAE,UAAU;gBACnB,MAAM,EAAE,SAAS;aAClB;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,yCAAmB,CAAC;YACvC,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE;YAC3B,OAAO,EAAE,EAAE;YACX,KAAK,EAAE;gBACL,SAAS,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;gBACzB,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;aACzB;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,qCAAiB,CAAC;YACnC,WAAW,EAAE;gBACX,KAAK,EAAE,YAAY,CAAC,IAAI;gBACxB,IAAI,EAAE,WAAW;aAClB;YACD,MAAM,EAAE,2CAAuB,CAAC,OAAO;YACvC,KAAK,EAAE;gBACL,OAAO;gBACP,MAAM;gBACN,UAAU,EAAE,WAAW;aACxB;SACF,CAAC,CAAC;QAEH,MAAM,IAAA,yBAAW,EAAC;YAChB,QAAQ,EAAE,OAAO;YACjB,MAAM;YACN,SAAS,EAAE,CAAC,QAAQ,CAAC;SACtB,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applyChanges.js","sourceRoot":"","sources":["../../../src/domain.operations/apply/applyChanges.ts"],"names":[],"mappings":";;;AAAA,mDAAuE;AACvE,mDAAyD;AAIzD,8EAGgD;AAGhD,qDAAkD;AAClD,+CAAwD;AACxD,+CAA4C;AAE5C;;;;GAIG;AACI,MAAM,YAAY,GAAG,KAAK,EAC/B,KAIC,EACD,OAA6C,EACK,EAAE;IACpD,uCAAuC;IACvC,MAAM,WAAW,GAAG,MAAM,IAAA,yBAAW,EACnC;QACE,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;KAClC,EACD,OAAO,CACR,CAAC;IAEF,sCAAsC;IACtC,IAAA,+BAAoB,EAAC;QACnB,YAAY,EAAE,KAAK,CAAC,IAAI;QACxB,WAAW;KACZ,CAAC,CAAC;IAEH,2CAA2C;IAC3C,MAAM,cAAc,GAAwB,EAAE,CAAC;IAE/C,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACxC,4BAA4B;QAC5B,IAAI,MAAM,CAAC,MAAM,KAAK,2CAAuB,CAAC,IAAI,EAAE,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5D,SAAS;QACX,CAAC;QAED,4BAA4B;QAC5B,MAAM,aAAa,GACjB,KAAK,CAAC,SAAS,CAAC,IAAI,CAClB,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,WAAW,CAAC,IAAI,KAAK,MAAM,CAAC,WAAW,CAAC,KAAK;YACvD,IAAA,wCAAuB,EAAC,SAAS,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,IAAI,CACjE;YACD,wCAAuB,CAAC,KAAK,CAC3B,wFAAwF,EACxF,EAAE,MAAM,EAAE,CACX,CAAC;QAEJ,mBAAmB;QACnB,MAAM,OAAO,GAAG,MAAM,IAAA,yBAAW,EAAC;YAChC,MAAM;YACN,QAAQ,EAAE,aAAa;YACvB,SAAS,EAAE,KAAK,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"applyChanges.js","sourceRoot":"","sources":["../../../src/domain.operations/apply/applyChanges.ts"],"names":[],"mappings":";;;AAAA,mDAAuE;AACvE,mDAAyD;AAIzD,8EAGgD;AAGhD,qDAAkD;AAClD,+CAAwD;AACxD,+CAA4C;AAE5C;;;;GAIG;AACI,MAAM,YAAY,GAAG,KAAK,EAC/B,KAIC,EACD,OAA6C,EACK,EAAE;IACpD,uCAAuC;IACvC,MAAM,WAAW,GAAG,MAAM,IAAA,yBAAW,EACnC;QACE,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;KAClC,EACD,OAAO,CACR,CAAC;IAEF,sCAAsC;IACtC,IAAA,+BAAoB,EAAC;QACnB,YAAY,EAAE,KAAK,CAAC,IAAI;QACxB,WAAW;KACZ,CAAC,CAAC;IAEH,2CAA2C;IAC3C,MAAM,cAAc,GAAwB,EAAE,CAAC;IAE/C,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACxC,4BAA4B;QAC5B,IAAI,MAAM,CAAC,MAAM,KAAK,2CAAuB,CAAC,IAAI,EAAE,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5D,SAAS;QACX,CAAC;QAED,4BAA4B;QAC5B,MAAM,aAAa,GACjB,KAAK,CAAC,SAAS,CAAC,IAAI,CAClB,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,WAAW,CAAC,IAAI,KAAK,MAAM,CAAC,WAAW,CAAC,KAAK;YACvD,IAAA,wCAAuB,EAAC,SAAS,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,IAAI,CACjE;YACD,wCAAuB,CAAC,KAAK,CAC3B,wFAAwF,EACxF,EAAE,MAAM,EAAE,CACX,CAAC;QAEJ,mBAAmB;QACnB,MAAM,OAAO,GAAG,MAAM,IAAA,yBAAW,EAAC;YAChC,MAAM;YACN,QAAQ,EAAE,aAAa;YACvB,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;QAEH,0BAA0B;QAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAE1E,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAC5B,CAAC,CAAC;AA5DW,QAAA,YAAY,gBA4DvB"}
|
|
@@ -2,11 +2,14 @@ import { DomainEntity } from 'domain-objects';
|
|
|
2
2
|
import { DeclastructDao } from '../../domain.objects/DeclastructDao';
|
|
3
3
|
import { DeclastructProvider } from '../../domain.objects/DeclastructProvider';
|
|
4
4
|
/**
|
|
5
|
-
* .what = gets the DAO for a given resource from available providers
|
|
6
|
-
* .why = enables automatic routing of operations to the correct provider
|
|
5
|
+
* .what = gets the DAO and provider context for a given resource from available providers
|
|
6
|
+
* .why = enables automatic routing of operations to the correct provider with proper context
|
|
7
7
|
* .note = fails fast if multiple providers support same resource or if no provider is found
|
|
8
8
|
*/
|
|
9
9
|
export declare const getDaoByResource: ({ resource, providers, }: {
|
|
10
10
|
resource: DomainEntity<any>;
|
|
11
11
|
providers: DeclastructProvider<any, any>[];
|
|
12
|
-
}) =>
|
|
12
|
+
}) => {
|
|
13
|
+
dao: DeclastructDao<DomainEntity<any>, any, any>;
|
|
14
|
+
context: any;
|
|
15
|
+
};
|
|
@@ -3,30 +3,31 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getDaoByResource = void 0;
|
|
4
4
|
const helpful_errors_1 = require("helpful-errors");
|
|
5
5
|
/**
|
|
6
|
-
* .what = gets the DAO for a given resource from available providers
|
|
7
|
-
* .why = enables automatic routing of operations to the correct provider
|
|
6
|
+
* .what = gets the DAO and provider context for a given resource from available providers
|
|
7
|
+
* .why = enables automatic routing of operations to the correct provider with proper context
|
|
8
8
|
* .note = fails fast if multiple providers support same resource or if no provider is found
|
|
9
9
|
*/
|
|
10
10
|
const getDaoByResource = ({ resource, providers, }) => {
|
|
11
11
|
// get resource class name
|
|
12
12
|
const resourceClassName = resource.constructor.name;
|
|
13
|
-
// find all
|
|
14
|
-
const
|
|
13
|
+
// find all providers applicable to this resource
|
|
14
|
+
const providersApplicable = providers
|
|
15
15
|
.map((provider) => ({
|
|
16
|
-
|
|
16
|
+
name: provider.name,
|
|
17
17
|
dao: provider.daos[resourceClassName],
|
|
18
|
+
context: provider.context,
|
|
18
19
|
}))
|
|
19
20
|
.filter((match) => match.dao);
|
|
20
21
|
// reject if multiple providers support same resource
|
|
21
|
-
if (
|
|
22
|
+
if (providersApplicable.length > 1) {
|
|
22
23
|
throw new helpful_errors_1.UnexpectedCodePathError('multiple providers support same resource', {
|
|
23
24
|
resource: resourceClassName,
|
|
24
|
-
providers:
|
|
25
|
+
providers: providersApplicable.map((m) => m.name),
|
|
25
26
|
});
|
|
26
27
|
}
|
|
27
|
-
// reject if no
|
|
28
|
-
const [
|
|
29
|
-
if (!
|
|
28
|
+
// reject if no provider found
|
|
29
|
+
const [matchedProvider] = providersApplicable;
|
|
30
|
+
if (!matchedProvider) {
|
|
30
31
|
throw new helpful_errors_1.UnexpectedCodePathError('no DAO found for resource', {
|
|
31
32
|
resourceClassName,
|
|
32
33
|
availableProviders: providers.map((p) => ({
|
|
@@ -35,7 +36,7 @@ const getDaoByResource = ({ resource, providers, }) => {
|
|
|
35
36
|
})),
|
|
36
37
|
});
|
|
37
38
|
}
|
|
38
|
-
return
|
|
39
|
+
return { dao: matchedProvider.dao, context: matchedProvider.context };
|
|
39
40
|
};
|
|
40
41
|
exports.getDaoByResource = getDaoByResource;
|
|
41
42
|
//# sourceMappingURL=getDaoByResource.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDaoByResource.js","sourceRoot":"","sources":["../../../src/domain.operations/plan/getDaoByResource.ts"],"names":[],"mappings":";;;AACA,mDAAyD;AAKzD;;;;GAIG;AACI,MAAM,gBAAgB,GAAG,CAAC,EAC/B,QAAQ,EACR,SAAS,GAIV,
|
|
1
|
+
{"version":3,"file":"getDaoByResource.js","sourceRoot":"","sources":["../../../src/domain.operations/plan/getDaoByResource.ts"],"names":[],"mappings":";;;AACA,mDAAyD;AAKzD;;;;GAIG;AACI,MAAM,gBAAgB,GAAG,CAAC,EAC/B,QAAQ,EACR,SAAS,GAIV,EAGC,EAAE;IACF,0BAA0B;IAC1B,MAAM,iBAAiB,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;IAEpD,iDAAiD;IACjD,MAAM,mBAAmB,GAAG,SAAS;SAClC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACrC,OAAO,EAAE,QAAQ,CAAC,OAAO;KAC1B,CAAC,CAAC;SACF,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEhC,qDAAqD;IACrD,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,wCAAuB,CAC/B,0CAA0C,EAC1C;YACE,QAAQ,EAAE,iBAAiB;YAC3B,SAAS,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClD,CACF,CAAC;IACJ,CAAC;IAED,8BAA8B;IAC9B,MAAM,CAAC,eAAe,CAAC,GAAG,mBAAmB,CAAC;IAC9C,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,wCAAuB,CAAC,2BAA2B,EAAE;YAC7D,iBAAiB;YACjB,kBAAkB,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;aACxC,CAAC,CAAC;SACJ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE,CAAC;AACxE,CAAC,CAAC;AA9CW,QAAA,gBAAgB,oBA8C3B"}
|
|
@@ -8,7 +8,7 @@ describe('getDaoByResource', () => {
|
|
|
8
8
|
class DemoResource extends domain_objects_1.DomainEntity {
|
|
9
9
|
}
|
|
10
10
|
DemoResource.unique = ['id'];
|
|
11
|
-
it('should return DAO when exactly one provider matches', () => {
|
|
11
|
+
it('should return DAO and context when exactly one provider matches', () => {
|
|
12
12
|
const demoDao = {
|
|
13
13
|
get: {
|
|
14
14
|
byUnique: async () => null,
|
|
@@ -18,10 +18,11 @@ describe('getDaoByResource', () => {
|
|
|
18
18
|
finsert: async (input) => input,
|
|
19
19
|
},
|
|
20
20
|
};
|
|
21
|
+
const providerContext = { testKey: 'testValue' };
|
|
21
22
|
const provider = new DeclastructProvider_1.DeclastructProvider({
|
|
22
23
|
name: 'test-provider',
|
|
23
24
|
daos: { DemoResource: demoDao },
|
|
24
|
-
context:
|
|
25
|
+
context: providerContext,
|
|
25
26
|
hooks: {
|
|
26
27
|
beforeAll: async () => { },
|
|
27
28
|
afterAll: async () => { },
|
|
@@ -32,7 +33,8 @@ describe('getDaoByResource', () => {
|
|
|
32
33
|
resource,
|
|
33
34
|
providers: [provider],
|
|
34
35
|
});
|
|
35
|
-
expect(result).toBe(demoDao);
|
|
36
|
+
expect(result.dao).toBe(demoDao);
|
|
37
|
+
expect(result.context).toBe(providerContext);
|
|
36
38
|
});
|
|
37
39
|
it('should throw UnexpectedCodePathError when multiple providers support same resource', () => {
|
|
38
40
|
const dao1 = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDaoByResource.test.js","sourceRoot":"","sources":["../../../src/domain.operations/plan/getDaoByResource.test.ts"],"names":[],"mappings":";;AAAA,mDAA8C;AAC9C,mDAA0C;AAG1C,kFAA+E;AAC/E,yDAAsD;AAEtD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAMhC,MAAM,YACJ,SAAQ,6BAA0B;;IAGpB,mBAAM,GAAG,CAAC,IAAI,CAAU,CAAC;IAGzC,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"getDaoByResource.test.js","sourceRoot":"","sources":["../../../src/domain.operations/plan/getDaoByResource.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,13 +19,13 @@ const planChanges = async (input, context) => {
|
|
|
19
19
|
: context.bottleneck;
|
|
20
20
|
// compute change for each resource with real-time logging
|
|
21
21
|
const changes = await Promise.all(input.resources.map((resource) => bottleneck.schedule(async () => {
|
|
22
|
-
// find DAO for this resource
|
|
23
|
-
const dao = (0, getDaoByResource_1.getDaoByResource)({
|
|
22
|
+
// find DAO and provider context for this resource
|
|
23
|
+
const { dao, context: providerContext } = (0, getDaoByResource_1.getDaoByResource)({
|
|
24
24
|
resource,
|
|
25
25
|
providers: input.providers,
|
|
26
26
|
});
|
|
27
|
-
// fetch current remote state
|
|
28
|
-
const remoteState = await dao.get.byUnique(resource,
|
|
27
|
+
// fetch current remote state using provider context
|
|
28
|
+
const remoteState = await dao.get.byUnique(resource, providerContext);
|
|
29
29
|
// compute change
|
|
30
30
|
const change = (0, computeChange_1.computeChange)({
|
|
31
31
|
desired: resource,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planChanges.js","sourceRoot":"","sources":["../../../src/domain.operations/plan/planChanges.ts"],"names":[],"mappings":";;;AAIA,8EAAiF;AACjF,0EAAuE;AAEvE,+DAA4D;AAC5D,mDAAgD;AAChD,yDAAsD;AACtD,+CAA4C;AAE5C;;;;GAIG;AACI,MAAM,WAAW,GAAG,KAAK,EAC9B,KAIC,EACD,OAA6C,EACnB,EAAE;IAC5B,kCAAkC;IAClC,MAAM,UAAU,GACd,QAAQ,IAAI,OAAO,CAAC,UAAU;QAC5B,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM;QAC3B,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAEzB,0DAA0D;IAC1D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC/B,UAAU,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;QAC7B,
|
|
1
|
+
{"version":3,"file":"planChanges.js","sourceRoot":"","sources":["../../../src/domain.operations/plan/planChanges.ts"],"names":[],"mappings":";;;AAIA,8EAAiF;AACjF,0EAAuE;AAEvE,+DAA4D;AAC5D,mDAAgD;AAChD,yDAAsD;AACtD,+CAA4C;AAE5C;;;;GAIG;AACI,MAAM,WAAW,GAAG,KAAK,EAC9B,KAIC,EACD,OAA6C,EACnB,EAAE;IAC5B,kCAAkC;IAClC,MAAM,UAAU,GACd,QAAQ,IAAI,OAAO,CAAC,UAAU;QAC5B,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM;QAC3B,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAEzB,0DAA0D;IAC1D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC/B,UAAU,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;QAC7B,kDAAkD;QAClD,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,IAAA,mCAAgB,EAAC;YACzD,QAAQ;YACR,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;QAEH,oDAAoD;QACpD,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAEtE,iBAAiB;QACjB,MAAM,MAAM,GAAG,IAAA,6BAAa,EAAC;YAC3B,OAAO,EAAE,QAAQ;YACjB,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC;QAEH,8BAA8B;QAC9B,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,KAAK,2CAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,IAAI,CACd,GAAG,MAAM,KAAK,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EACzD,EAAE,CACH,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CACH,CACF,CAAC;IAEF,cAAc;IACd,OAAO,IAAI,iCAAe,CAAC;QACzB,IAAI,EAAE,IAAA,yBAAW,EAAC,OAAO,CAAC;QAC1B,SAAS,EAAE,IAAA,+BAAc,EAAC,IAAI,IAAI,EAAE,CAAC;QACrC,IAAI,EAAE;YACJ,GAAG,EAAE,KAAK,CAAC,YAAY;SACxB;QACD,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC;AAvDW,QAAA,WAAW,eAuDtB"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "declastruct",
|
|
3
3
|
"author": "ehmpathy",
|
|
4
4
|
"description": "Add declarative control to any resource constructs. Declare, plan, and apply within an observable pit-of-success.",
|
|
5
|
-
"version": "1.1.
|
|
5
|
+
"version": "1.1.3",
|
|
6
6
|
"repository": "ehmpathy/declastruct",
|
|
7
7
|
"homepage": "https://github.com/ehmpathy/declastruct",
|
|
8
8
|
"keywords": [
|
|
@@ -17,7 +17,12 @@
|
|
|
17
17
|
"engines": {
|
|
18
18
|
"node": ">=8.0.0"
|
|
19
19
|
},
|
|
20
|
+
"types": "dist/index.d.ts",
|
|
21
|
+
"bin": {
|
|
22
|
+
"declastruct": "./bin/run"
|
|
23
|
+
},
|
|
20
24
|
"files": [
|
|
25
|
+
"/bin",
|
|
21
26
|
"/dist"
|
|
22
27
|
],
|
|
23
28
|
"scripts": {
|