declastruct 1.1.9 → 1.1.10
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.
|
@@ -38,5 +38,41 @@ describe('DeclastructDao', () => {
|
|
|
38
38
|
expect(dao.set.upsert).toBeDefined();
|
|
39
39
|
expect(dao.set.delete).toBeDefined();
|
|
40
40
|
});
|
|
41
|
+
describe('resource with optional primary key', () => {
|
|
42
|
+
class DemoResourceWithOptionalPrimary extends domain_objects_1.DomainEntity {
|
|
43
|
+
}
|
|
44
|
+
DemoResourceWithOptionalPrimary.primary = ['uuid'];
|
|
45
|
+
DemoResourceWithOptionalPrimary.unique = ['name'];
|
|
46
|
+
it('RefByPrimary should require uuid (not optional)', () => {
|
|
47
|
+
// type test: this should compile
|
|
48
|
+
const ref = {
|
|
49
|
+
uuid: 'test-uuid',
|
|
50
|
+
};
|
|
51
|
+
// verify ref has uuid
|
|
52
|
+
expect(ref.uuid).toBe('test-uuid');
|
|
53
|
+
// note: the following would fail type check (but we can't test that at runtime)
|
|
54
|
+
// @ts-expect-error - uuid should be required, empty object should fail
|
|
55
|
+
const badRef = {};
|
|
56
|
+
expect(badRef).toBeDefined(); // suppress unused var warning
|
|
57
|
+
});
|
|
58
|
+
it('dao.get.byPrimary should accept RefByPrimary with required uuid', () => {
|
|
59
|
+
// type verification: byPrimary input should have uuid as required (not optional)
|
|
60
|
+
const dao = {
|
|
61
|
+
get: {
|
|
62
|
+
byUnique: async () => null,
|
|
63
|
+
byPrimary: async (input) => {
|
|
64
|
+
// input.uuid should be string (not string | undefined)
|
|
65
|
+
// this assignment would fail if uuid were optional
|
|
66
|
+
const uuid = input.uuid;
|
|
67
|
+
expect(uuid).toBeDefined();
|
|
68
|
+
return null;
|
|
69
|
+
},
|
|
70
|
+
byRef: async () => null,
|
|
71
|
+
},
|
|
72
|
+
set: { finsert: async (r) => r },
|
|
73
|
+
};
|
|
74
|
+
expect(dao.get.byPrimary).toBeDefined();
|
|
75
|
+
});
|
|
76
|
+
});
|
|
41
77
|
});
|
|
42
78
|
//# sourceMappingURL=DeclastructDao.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeclastructDao.test.js","sourceRoot":"","sources":["../../src/domain.objects/DeclastructDao.test.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"DeclastructDao.test.js","sourceRoot":"","sources":["../../src/domain.objects/DeclastructDao.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,10 +10,10 @@ const DeclastructChange_1 = require("../../domain.objects/DeclastructChange");
|
|
|
10
10
|
* .why = determines whether a resource needs to be updated
|
|
11
11
|
* .note = uses deterministic serialization for deep equality check, ignoring metadata
|
|
12
12
|
*/
|
|
13
|
-
const
|
|
13
|
+
const checkAreResourcesEquivalent = (input) => {
|
|
14
14
|
// serialize both deterministically for deep comparison, omitting metadata
|
|
15
|
-
const remoteSerialized = (0, domain_objects_1.serialize)((0, domain_objects_1.omitMetadataValues)(remote));
|
|
16
|
-
const desiredSerialized = (0, domain_objects_1.serialize)((0, domain_objects_1.omitMetadataValues)(desired));
|
|
15
|
+
const remoteSerialized = (0, domain_objects_1.serialize)((0, domain_objects_1.omitMetadataValues)(input.remote));
|
|
16
|
+
const desiredSerialized = (0, domain_objects_1.serialize)((0, domain_objects_1.omitMetadataValues)(input.desired));
|
|
17
17
|
return remoteSerialized === desiredSerialized;
|
|
18
18
|
};
|
|
19
19
|
/**
|
|
@@ -57,7 +57,17 @@ const computeChange = ({ desired, remote, }) => {
|
|
|
57
57
|
if (!desired)
|
|
58
58
|
return DeclastructChange_1.DeclastructChangeAction.DESTROY;
|
|
59
59
|
// no changes needed
|
|
60
|
-
|
|
60
|
+
const areResourcesEquivalent = helpful_errors_1.UnexpectedCodePathError.wrap(() => checkAreResourcesEquivalent({ remote, desired }), {
|
|
61
|
+
message: 'failed to checkAreResourcesEquivalent',
|
|
62
|
+
metadata: {
|
|
63
|
+
input: { desired, remote },
|
|
64
|
+
ctors: {
|
|
65
|
+
desired: desired?.constructor.name,
|
|
66
|
+
remote: remote?.constructor.name,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
})();
|
|
70
|
+
if (areResourcesEquivalent)
|
|
61
71
|
return DeclastructChange_1.DeclastructChangeAction.KEEP;
|
|
62
72
|
// resource exists and needs updating
|
|
63
73
|
return DeclastructChange_1.DeclastructChangeAction.UPDATE;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computeChange.js","sourceRoot":"","sources":["../../../src/domain.operations/plan/computeChange.ts"],"names":[],"mappings":";;;AAAA,mDAKwB;AACxB,mDAAyD;AACzD,yCAAiC;AAEjC,8EAGgD;AAEhD;;;;GAIG;AACH,MAAM,
|
|
1
|
+
{"version":3,"file":"computeChange.js","sourceRoot":"","sources":["../../../src/domain.operations/plan/computeChange.ts"],"names":[],"mappings":"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"}
|
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.10",
|
|
6
6
|
"repository": "ehmpathy/declastruct",
|
|
7
7
|
"homepage": "https://github.com/ehmpathy/declastruct",
|
|
8
8
|
"keywords": [
|
|
@@ -59,11 +59,12 @@
|
|
|
59
59
|
"helpful-errors": "1.5.3",
|
|
60
60
|
"jest-diff": "30.0.2",
|
|
61
61
|
"simple-log-methods": "0.6.2",
|
|
62
|
+
"tsx": "4.20.6",
|
|
62
63
|
"type-fns": "1.19.0",
|
|
63
64
|
"uuid-fns": "1.0.2"
|
|
64
65
|
},
|
|
65
66
|
"peerDependencies": {
|
|
66
|
-
"domain-objects": ">=0.29.
|
|
67
|
+
"domain-objects": ">=0.29.4"
|
|
67
68
|
},
|
|
68
69
|
"devDependencies": {
|
|
69
70
|
"@commitlint/cli": "19.3.0",
|
|
@@ -89,7 +90,6 @@
|
|
|
89
90
|
"rhachet": "1.12.1",
|
|
90
91
|
"rhachet-roles-ehmpathy": "1.9.1",
|
|
91
92
|
"ts-jest": "29.1.3",
|
|
92
|
-
"ts-node": "10.9.2",
|
|
93
93
|
"typescript": "5.4.5"
|
|
94
94
|
},
|
|
95
95
|
"config": {
|