@geoprotocol/geo-sdk 0.16.0 → 0.18.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 (53) hide show
  1. package/README.md +173 -8
  2. package/dist/src/core/ids/system.d.ts +22 -0
  3. package/dist/src/core/ids/system.d.ts.map +1 -1
  4. package/dist/src/core/ids/system.js +26 -0
  5. package/dist/src/core/ids/system.js.map +1 -1
  6. package/dist/src/full-flow-test.test.js +146 -2
  7. package/dist/src/full-flow-test.test.js.map +1 -1
  8. package/dist/src/graph/comment-utils.d.ts +5 -0
  9. package/dist/src/graph/comment-utils.d.ts.map +1 -0
  10. package/dist/src/graph/comment-utils.js +23 -0
  11. package/dist/src/graph/comment-utils.js.map +1 -0
  12. package/dist/src/graph/create-comment.d.ts +28 -0
  13. package/dist/src/graph/create-comment.d.ts.map +1 -0
  14. package/dist/src/graph/create-comment.js +142 -0
  15. package/dist/src/graph/create-comment.js.map +1 -0
  16. package/dist/src/graph/create-comment.test.d.ts +2 -0
  17. package/dist/src/graph/create-comment.test.d.ts.map +1 -0
  18. package/dist/src/graph/create-comment.test.js +262 -0
  19. package/dist/src/graph/create-comment.test.js.map +1 -0
  20. package/dist/src/graph/create-proposal-review.d.ts +32 -0
  21. package/dist/src/graph/create-proposal-review.d.ts.map +1 -0
  22. package/dist/src/graph/create-proposal-review.js +62 -0
  23. package/dist/src/graph/create-proposal-review.js.map +1 -0
  24. package/dist/src/graph/create-proposal-review.test.d.ts +2 -0
  25. package/dist/src/graph/create-proposal-review.test.d.ts.map +1 -0
  26. package/dist/src/graph/create-proposal-review.test.js +162 -0
  27. package/dist/src/graph/create-proposal-review.test.js.map +1 -0
  28. package/dist/src/graph/index.d.ts +4 -0
  29. package/dist/src/graph/index.d.ts.map +1 -1
  30. package/dist/src/graph/index.js +4 -0
  31. package/dist/src/graph/index.js.map +1 -1
  32. package/dist/src/graph/update-comment.d.ts +20 -0
  33. package/dist/src/graph/update-comment.d.ts.map +1 -0
  34. package/dist/src/graph/update-comment.js +45 -0
  35. package/dist/src/graph/update-comment.js.map +1 -0
  36. package/dist/src/graph/update-comment.test.d.ts +2 -0
  37. package/dist/src/graph/update-comment.test.d.ts.map +1 -0
  38. package/dist/src/graph/update-comment.test.js +110 -0
  39. package/dist/src/graph/update-comment.test.js.map +1 -0
  40. package/dist/src/graph/update-proposal-review.d.ts +31 -0
  41. package/dist/src/graph/update-proposal-review.d.ts.map +1 -0
  42. package/dist/src/graph/update-proposal-review.js +49 -0
  43. package/dist/src/graph/update-proposal-review.js.map +1 -0
  44. package/dist/src/graph/update-proposal-review.test.d.ts +2 -0
  45. package/dist/src/graph/update-proposal-review.test.d.ts.map +1 -0
  46. package/dist/src/graph/update-proposal-review.test.js +95 -0
  47. package/dist/src/graph/update-proposal-review.test.js.map +1 -0
  48. package/dist/src/ipfs.d.ts +1 -1
  49. package/dist/src/ipfs.d.ts.map +1 -1
  50. package/dist/src/types.d.ts +46 -0
  51. package/dist/src/types.d.ts.map +1 -1
  52. package/dist/src/types.js.map +1 -1
  53. package/package.json +1 -1
@@ -0,0 +1,162 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { ACCURACY_RATING_PROPERTY, BOUNTY_REVIEW_TYPE, COMPLETENESS_RATING_PROPERTY, EFFORT_RATING_PROPERTY, NAME_PROPERTY, PASS_PROPERTY, PROPOSALS_PROPERTY, SKILL_RATING_PROPERTY, TYPES_PROPERTY, } from '../core/ids/system.js';
3
+ import { Id } from '../id.js';
4
+ import { toGrcId } from '../id-utils.js';
5
+ import { createProposalReview } from './create-proposal-review.js';
6
+ const proposalId = Id('3af3e22d21694a078681516710b7ecf1');
7
+ const proposalName = 'Test Proposal';
8
+ describe('createProposalReview', () => {
9
+ it('creates a review with pass only (low difficulty)', () => {
10
+ const { id, ops } = createProposalReview({
11
+ proposal: { id: proposalId, name: proposalName },
12
+ pass: true,
13
+ });
14
+ expect(id).toBeDefined();
15
+ expect(typeof id).toBe('string');
16
+ // createEntity op
17
+ const entityOp = ops[0];
18
+ expect(entityOp.type).toBe('createEntity');
19
+ expect(entityOp.id).toEqual(toGrcId(id));
20
+ // Name should match proposal name
21
+ const nameValue = entityOp.values.find(v => v.property.every((b, i) => b === toGrcId(NAME_PROPERTY)[i]));
22
+ expect(nameValue).toBeDefined();
23
+ expect(nameValue?.value.type).toBe('text');
24
+ if (nameValue?.value.type === 'text') {
25
+ expect(nameValue?.value.value).toBe(proposalName);
26
+ }
27
+ // Pass value
28
+ const passValue = entityOp.values.find(v => v.property.every((b, i) => b === toGrcId(PASS_PROPERTY)[i]));
29
+ expect(passValue).toBeDefined();
30
+ expect(passValue?.value.type).toBe('boolean');
31
+ if (passValue?.value.type === 'boolean') {
32
+ expect(passValue?.value.value).toBe(true);
33
+ }
34
+ // Should NOT have rating values
35
+ const completenessValue = entityOp.values.find(v => v.property.every((b, i) => b === toGrcId(COMPLETENESS_RATING_PROPERTY)[i]));
36
+ expect(completenessValue).toBeUndefined();
37
+ const accuracyValue = entityOp.values.find(v => v.property.every((b, i) => b === toGrcId(ACCURACY_RATING_PROPERTY)[i]));
38
+ expect(accuracyValue).toBeUndefined();
39
+ const skillValue = entityOp.values.find(v => v.property.every((b, i) => b === toGrcId(SKILL_RATING_PROPERTY)[i]));
40
+ expect(skillValue).toBeUndefined();
41
+ const effortValue = entityOp.values.find(v => v.property.every((b, i) => b === toGrcId(EFFORT_RATING_PROPERTY)[i]));
42
+ expect(effortValue).toBeUndefined();
43
+ // Type relation to BOUNTY_REVIEW_TYPE
44
+ const typeRel = ops.find(op => op.type === 'createRelation' &&
45
+ op.relationType.every((b, i) => b === toGrcId(TYPES_PROPERTY)[i]));
46
+ expect(typeRel).toBeDefined();
47
+ expect(typeRel.from).toEqual(toGrcId(id));
48
+ expect(typeRel.to).toEqual(toGrcId(BOUNTY_REVIEW_TYPE));
49
+ // Proposals relation
50
+ const proposalRel = ops.find(op => op.type === 'createRelation' &&
51
+ op.relationType.every((b, i) => b === toGrcId(PROPOSALS_PROPERTY)[i]));
52
+ expect(proposalRel).toBeDefined();
53
+ expect(proposalRel.from).toEqual(toGrcId(id));
54
+ expect(proposalRel.to).toEqual(toGrcId(proposalId));
55
+ });
56
+ it('creates a review with pass false (low difficulty reject)', () => {
57
+ const { ops } = createProposalReview({
58
+ proposal: { id: proposalId, name: proposalName },
59
+ pass: false,
60
+ });
61
+ const entityOp = ops[0];
62
+ const passValue = entityOp.values.find(v => v.property.every((b, i) => b === toGrcId(PASS_PROPERTY)[i]));
63
+ expect(passValue).toBeDefined();
64
+ expect(passValue?.value.type).toBe('boolean');
65
+ if (passValue?.value.type === 'boolean') {
66
+ expect(passValue?.value.value).toBe(false);
67
+ }
68
+ });
69
+ it('creates a review with all ratings (medium/hard difficulty)', () => {
70
+ const { id, ops } = createProposalReview({
71
+ proposal: { id: proposalId, name: proposalName },
72
+ pass: false,
73
+ completeness: 0.8,
74
+ accuracy: 1,
75
+ skill: 0.6,
76
+ effort: 0.4,
77
+ });
78
+ expect(id).toBeDefined();
79
+ const entityOp = ops[0];
80
+ expect(entityOp.type).toBe('createEntity');
81
+ // Pass value
82
+ const passValue = entityOp.values.find(v => v.property.every((b, i) => b === toGrcId(PASS_PROPERTY)[i]));
83
+ expect(passValue).toBeDefined();
84
+ expect(passValue?.value.type).toBe('boolean');
85
+ if (passValue?.value.type === 'boolean') {
86
+ expect(passValue?.value.value).toBe(false);
87
+ }
88
+ // Completeness
89
+ const completenessValue = entityOp.values.find(v => v.property.every((b, i) => b === toGrcId(COMPLETENESS_RATING_PROPERTY)[i]));
90
+ expect(completenessValue).toBeDefined();
91
+ expect(completenessValue?.value.type).toBe('float');
92
+ if (completenessValue?.value.type === 'float') {
93
+ expect(completenessValue?.value.value).toBe(0.8);
94
+ }
95
+ // Accuracy
96
+ const accuracyValue = entityOp.values.find(v => v.property.every((b, i) => b === toGrcId(ACCURACY_RATING_PROPERTY)[i]));
97
+ expect(accuracyValue).toBeDefined();
98
+ expect(accuracyValue?.value.type).toBe('float');
99
+ if (accuracyValue?.value.type === 'float') {
100
+ expect(accuracyValue?.value.value).toBe(1);
101
+ }
102
+ // Skill
103
+ const skillValue = entityOp.values.find(v => v.property.every((b, i) => b === toGrcId(SKILL_RATING_PROPERTY)[i]));
104
+ expect(skillValue).toBeDefined();
105
+ expect(skillValue?.value.type).toBe('float');
106
+ if (skillValue?.value.type === 'float') {
107
+ expect(skillValue?.value.value).toBe(0.6);
108
+ }
109
+ // Effort
110
+ const effortValue = entityOp.values.find(v => v.property.every((b, i) => b === toGrcId(EFFORT_RATING_PROPERTY)[i]));
111
+ expect(effortValue).toBeDefined();
112
+ expect(effortValue?.value.type).toBe('float');
113
+ if (effortValue?.value.type === 'float') {
114
+ expect(effortValue?.value.value).toBe(0.4);
115
+ }
116
+ // Verify emission order: entity, type relation, proposals relation
117
+ expect(ops[0]?.type).toBe('createEntity');
118
+ expect(ops[1].relationType).toEqual(toGrcId(TYPES_PROPERTY));
119
+ expect(ops[2].relationType).toEqual(toGrcId(PROPOSALS_PROPERTY));
120
+ });
121
+ it('creates a review with zero ratings', () => {
122
+ const { ops } = createProposalReview({
123
+ proposal: { id: proposalId, name: proposalName },
124
+ pass: true,
125
+ completeness: 0,
126
+ accuracy: 0,
127
+ skill: 0,
128
+ effort: 0,
129
+ });
130
+ const entityOp = ops[0];
131
+ const completenessValue = entityOp.values.find(v => v.property.every((b, i) => b === toGrcId(COMPLETENESS_RATING_PROPERTY)[i]));
132
+ expect(completenessValue).toBeDefined();
133
+ if (completenessValue?.value.type === 'float') {
134
+ expect(completenessValue?.value.value).toBe(0);
135
+ }
136
+ });
137
+ it('throws for invalid proposal id', () => {
138
+ expect(() => createProposalReview({
139
+ proposal: { id: 'invalid', name: proposalName },
140
+ pass: true,
141
+ })).toThrow('Invalid id: "invalid" for `proposal.id` in `createProposalReview`');
142
+ });
143
+ it('uses the provided id when given', () => {
144
+ const providedId = Id('bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb');
145
+ const { id, ops } = createProposalReview({
146
+ id: providedId,
147
+ proposal: { id: proposalId, name: proposalName },
148
+ pass: true,
149
+ });
150
+ expect(id).toBe(providedId);
151
+ const entityOp = ops[0];
152
+ expect(entityOp.id).toEqual(toGrcId(providedId));
153
+ });
154
+ it('throws for invalid id', () => {
155
+ expect(() => createProposalReview({
156
+ id: 'invalid',
157
+ proposal: { id: proposalId, name: proposalName },
158
+ pass: true,
159
+ })).toThrow('Invalid id: "invalid" for `id` in `createProposalReview`');
160
+ });
161
+ });
162
+ //# sourceMappingURL=create-proposal-review.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-proposal-review.test.js","sourceRoot":"","sources":["../../../src/graph/create-proposal-review.test.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,16 @@
1
1
  export type { Network } from '../types.js';
2
2
  export { getApiOrigin, TESTNET_API_ORIGIN, } from './constants.js';
3
+ export * from './create-comment.js';
3
4
  export * from './create-entity.js';
4
5
  export * from './create-image.js';
5
6
  export * from './create-property.js';
7
+ export * from './create-proposal-review.js';
6
8
  export * from './create-relation.js';
7
9
  export * from './create-type.js';
8
10
  export * from './delete-entity.js';
9
11
  export * from './delete-relation.js';
12
+ export * from './update-comment.js';
10
13
  export * from './update-entity.js';
14
+ export * from './update-proposal-review.js';
11
15
  export * from './update-relation.js';
12
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/graph/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/graph/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC"}
@@ -1,11 +1,15 @@
1
1
  export { getApiOrigin, TESTNET_API_ORIGIN, } from './constants.js';
2
+ export * from './create-comment.js';
2
3
  export * from './create-entity.js';
3
4
  export * from './create-image.js';
4
5
  export * from './create-property.js';
6
+ export * from './create-proposal-review.js';
5
7
  export * from './create-relation.js';
6
8
  export * from './create-type.js';
7
9
  export * from './delete-entity.js';
8
10
  export * from './delete-relation.js';
11
+ export * from './update-comment.js';
9
12
  export * from './update-entity.js';
13
+ export * from './update-proposal-review.js';
10
14
  export * from './update-relation.js';
11
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/graph/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/graph/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { CreateResult, UpdateCommentParams } from '../types.js';
2
+ /**
3
+ * Updates a comment entity. Only the provided fields are updated.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * import { Graph } from '@geoprotocol/geo-sdk';
8
+ *
9
+ * const { id, ops } = Graph.updateComment({
10
+ * id: commentId,
11
+ * content: 'Updated content', // optional, only updated if provided
12
+ * resolved: true, // optional, only updated if provided
13
+ * });
14
+ * ```
15
+ *
16
+ * @param params – {@link UpdateCommentParams}
17
+ * @returns – {@link CreateResult}
18
+ */
19
+ export declare const updateComment: ({ id, content, resolved }: UpdateCommentParams) => CreateResult;
20
+ //# sourceMappingURL=update-comment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-comment.d.ts","sourceRoot":"","sources":["../../../src/graph/update-comment.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAmB,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAItF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,GAAI,2BAA2B,mBAAmB,KAAG,YA0B9E,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { MARKDOWN_CONTENT, RESOLVED_PROPERTY } from '../core/ids/system.js';
2
+ import { assertValid } from '../id-utils.js';
3
+ import { deriveCommentName } from './comment-utils.js';
4
+ import { updateEntity } from './update-entity.js';
5
+ /**
6
+ * Updates a comment entity. Only the provided fields are updated.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { Graph } from '@geoprotocol/geo-sdk';
11
+ *
12
+ * const { id, ops } = Graph.updateComment({
13
+ * id: commentId,
14
+ * content: 'Updated content', // optional, only updated if provided
15
+ * resolved: true, // optional, only updated if provided
16
+ * });
17
+ * ```
18
+ *
19
+ * @param params – {@link UpdateCommentParams}
20
+ * @returns – {@link CreateResult}
21
+ */
22
+ export const updateComment = ({ id, content, resolved }) => {
23
+ assertValid(id, '`id` in `updateComment`');
24
+ const values = [];
25
+ if (content !== undefined) {
26
+ values.push({
27
+ property: MARKDOWN_CONTENT,
28
+ type: 'text',
29
+ value: content,
30
+ });
31
+ }
32
+ if (resolved !== undefined) {
33
+ values.push({
34
+ property: RESOLVED_PROPERTY,
35
+ type: 'boolean',
36
+ value: resolved,
37
+ });
38
+ }
39
+ return updateEntity({
40
+ id,
41
+ name: content !== undefined ? deriveCommentName(content) : undefined,
42
+ values,
43
+ });
44
+ };
45
+ //# sourceMappingURL=update-comment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-comment.js","sourceRoot":"","sources":["../../../src/graph/update-comment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAuB,EAAgB,EAAE;IAC5F,WAAW,CAAC,EAAE,EAAE,yBAAyB,CAAC,CAAC;IAE3C,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,gBAAgB;YAC1B,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,OAAO;SACf,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,iBAAiB;YAC3B,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,YAAY,CAAC;QAClB,EAAE;QACF,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;QACpE,MAAM;KACP,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=update-comment.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-comment.test.d.ts","sourceRoot":"","sources":["../../../src/graph/update-comment.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,110 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { MARKDOWN_CONTENT, NAME_PROPERTY, RESOLVED_PROPERTY } from '../core/ids/system.js';
3
+ import { Id } from '../id.js';
4
+ import { toGrcId } from '../id-utils.js';
5
+ import { updateComment } from './update-comment.js';
6
+ const commentId = Id('3af3e22d21694a078681516710b7ecf1');
7
+ describe('updateComment', () => {
8
+ it('updates content and name', () => {
9
+ const { id, ops } = updateComment({
10
+ id: commentId,
11
+ content: 'Updated content',
12
+ });
13
+ expect(id).toBe(commentId);
14
+ expect(ops).toHaveLength(1);
15
+ const op = ops[0];
16
+ expect(op.type).toBe('updateEntity');
17
+ expect(op.id).toEqual(toGrcId(commentId));
18
+ // Name should be derived from content
19
+ const nameValue = op.set.find(v => {
20
+ const propBytes = v.property;
21
+ return propBytes.every((b, i) => b === toGrcId(NAME_PROPERTY)[i]);
22
+ });
23
+ expect(nameValue).toBeDefined();
24
+ if (nameValue?.value.type === 'text') {
25
+ expect(nameValue.value.value).toBe('Updated content');
26
+ }
27
+ // Markdown content
28
+ const markdownValue = op.set.find(v => {
29
+ const propBytes = v.property;
30
+ return propBytes.every((b, i) => b === toGrcId(MARKDOWN_CONTENT)[i]);
31
+ });
32
+ expect(markdownValue).toBeDefined();
33
+ if (markdownValue?.value.type === 'text') {
34
+ expect(markdownValue.value.value).toBe('Updated content');
35
+ }
36
+ });
37
+ it('updates resolved only', () => {
38
+ const { id, ops } = updateComment({
39
+ id: commentId,
40
+ resolved: true,
41
+ });
42
+ expect(id).toBe(commentId);
43
+ expect(ops).toHaveLength(1);
44
+ const op = ops[0];
45
+ expect(op.type).toBe('updateEntity');
46
+ // Should not have name or markdown content
47
+ const nameValue = op.set.find(v => {
48
+ const propBytes = v.property;
49
+ return propBytes.every((b, i) => b === toGrcId(NAME_PROPERTY)[i]);
50
+ });
51
+ expect(nameValue).toBeUndefined();
52
+ const markdownValue = op.set.find(v => {
53
+ const propBytes = v.property;
54
+ return propBytes.every((b, i) => b === toGrcId(MARKDOWN_CONTENT)[i]);
55
+ });
56
+ expect(markdownValue).toBeUndefined();
57
+ // Should have resolved
58
+ const resolvedValue = op.set.find(v => {
59
+ const propBytes = v.property;
60
+ return propBytes.every((b, i) => b === toGrcId(RESOLVED_PROPERTY)[i]);
61
+ });
62
+ expect(resolvedValue).toBeDefined();
63
+ if (resolvedValue?.value.type === 'boolean') {
64
+ expect(resolvedValue.value.value).toBe(true);
65
+ }
66
+ });
67
+ it('updates both content and resolved', () => {
68
+ const { ops } = updateComment({
69
+ id: commentId,
70
+ content: 'New content',
71
+ resolved: false,
72
+ });
73
+ const op = ops[0];
74
+ const markdownValue = op.set.find(v => {
75
+ const propBytes = v.property;
76
+ return propBytes.every((b, i) => b === toGrcId(MARKDOWN_CONTENT)[i]);
77
+ });
78
+ expect(markdownValue).toBeDefined();
79
+ const resolvedValue = op.set.find(v => {
80
+ const propBytes = v.property;
81
+ return propBytes.every((b, i) => b === toGrcId(RESOLVED_PROPERTY)[i]);
82
+ });
83
+ expect(resolvedValue).toBeDefined();
84
+ if (resolvedValue?.value.type === 'boolean') {
85
+ expect(resolvedValue.value.value).toBe(false);
86
+ }
87
+ });
88
+ it('strips markdown from name and truncates to 20 chars', () => {
89
+ const { ops } = updateComment({
90
+ id: commentId,
91
+ content: '## Lorem ipsum dolor sit amet, consectetur adipiscing',
92
+ });
93
+ const op = ops[0];
94
+ const nameValue = op.set.find(v => {
95
+ const propBytes = v.property;
96
+ return propBytes.every((b, i) => b === toGrcId(NAME_PROPERTY)[i]);
97
+ });
98
+ expect(nameValue).toBeDefined();
99
+ if (nameValue?.value.type === 'text') {
100
+ expect(nameValue.value.value).toBe('Lorem ipsum dolor si');
101
+ }
102
+ });
103
+ it('throws for invalid id', () => {
104
+ expect(() => updateComment({
105
+ id: 'invalid',
106
+ content: 'Test',
107
+ })).toThrow('Invalid id: "invalid" for `id` in `updateComment`');
108
+ });
109
+ });
110
+ //# sourceMappingURL=update-comment.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-comment.test.js","sourceRoot":"","sources":["../../../src/graph/update-comment.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { CreateResult, UpdateProposalReviewParams } from '../types.js';
2
+ /**
3
+ * Updates a proposal review entity. Pass is always required.
4
+ * For medium/hard bounties, all ratings must also be provided.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * import { Graph } from '@geoprotocol/geo-sdk';
9
+ *
10
+ * // Update pass only (low difficulty)
11
+ * const { id, ops } = Graph.updateProposalReview({
12
+ * proposalReviewId: reviewId,
13
+ * pass: false,
14
+ * });
15
+ *
16
+ * // Update with ratings (medium/hard difficulty)
17
+ * const { id, ops } = Graph.updateProposalReview({
18
+ * proposalReviewId: reviewId,
19
+ * pass: true,
20
+ * completeness: 0.8,
21
+ * accuracy: 1,
22
+ * skill: 0.6,
23
+ * effort: 0.4,
24
+ * });
25
+ * ```
26
+ *
27
+ * @param params – {@link UpdateProposalReviewParams}
28
+ * @returns – {@link CreateResult}
29
+ */
30
+ export declare const updateProposalReview: (params: UpdateProposalReviewParams) => CreateResult;
31
+ //# sourceMappingURL=update-proposal-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-proposal-review.d.ts","sourceRoot":"","sources":["../../../src/graph/update-proposal-review.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAmB,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAG7F;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,oBAAoB,GAAI,QAAQ,0BAA0B,KAAG,YAwBzE,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { ACCURACY_RATING_PROPERTY, COMPLETENESS_RATING_PROPERTY, EFFORT_RATING_PROPERTY, PASS_PROPERTY, SKILL_RATING_PROPERTY, } from '../core/ids/system.js';
2
+ import { assertValid } from '../id-utils.js';
3
+ import { updateEntity } from './update-entity.js';
4
+ /**
5
+ * Updates a proposal review entity. Pass is always required.
6
+ * For medium/hard bounties, all ratings must also be provided.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { Graph } from '@geoprotocol/geo-sdk';
11
+ *
12
+ * // Update pass only (low difficulty)
13
+ * const { id, ops } = Graph.updateProposalReview({
14
+ * proposalReviewId: reviewId,
15
+ * pass: false,
16
+ * });
17
+ *
18
+ * // Update with ratings (medium/hard difficulty)
19
+ * const { id, ops } = Graph.updateProposalReview({
20
+ * proposalReviewId: reviewId,
21
+ * pass: true,
22
+ * completeness: 0.8,
23
+ * accuracy: 1,
24
+ * skill: 0.6,
25
+ * effort: 0.4,
26
+ * });
27
+ * ```
28
+ *
29
+ * @param params – {@link UpdateProposalReviewParams}
30
+ * @returns – {@link CreateResult}
31
+ */
32
+ export const updateProposalReview = (params) => {
33
+ assertValid(params.proposalReviewId, '`proposalReviewId` in `updateProposalReview`');
34
+ const values = [
35
+ {
36
+ property: PASS_PROPERTY,
37
+ type: 'boolean',
38
+ value: params.pass,
39
+ },
40
+ ];
41
+ if ('completeness' in params) {
42
+ values.push({ property: COMPLETENESS_RATING_PROPERTY, type: 'float', value: params.completeness }, { property: ACCURACY_RATING_PROPERTY, type: 'float', value: params.accuracy }, { property: SKILL_RATING_PROPERTY, type: 'float', value: params.skill }, { property: EFFORT_RATING_PROPERTY, type: 'float', value: params.effort });
43
+ }
44
+ return updateEntity({
45
+ id: params.proposalReviewId,
46
+ values,
47
+ });
48
+ };
49
+ //# sourceMappingURL=update-proposal-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-proposal-review.js","sourceRoot":"","sources":["../../../src/graph/update-proposal-review.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,sBAAsB,EACtB,aAAa,EACb,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAkC,EAAgB,EAAE;IACvF,WAAW,CAAC,MAAM,CAAC,gBAAgB,EAAE,8CAA8C,CAAC,CAAC;IAErF,MAAM,MAAM,GAAoB;QAC9B;YACE,QAAQ,EAAE,aAAa;YACvB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,MAAM,CAAC,IAAI;SACnB;KACF,CAAC;IAEF,IAAI,cAAc,IAAI,MAAM,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CACT,EAAE,QAAQ,EAAE,4BAA4B,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE,EACrF,EAAE,QAAQ,EAAE,wBAAwB,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,EAC7E,EAAE,QAAQ,EAAE,qBAAqB,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EACvE,EAAE,QAAQ,EAAE,sBAAsB,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAC1E,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC;QAClB,EAAE,EAAE,MAAM,CAAC,gBAAgB;QAC3B,MAAM;KACP,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=update-proposal-review.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-proposal-review.test.d.ts","sourceRoot":"","sources":["../../../src/graph/update-proposal-review.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,95 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { ACCURACY_RATING_PROPERTY, COMPLETENESS_RATING_PROPERTY, EFFORT_RATING_PROPERTY, NAME_PROPERTY, PASS_PROPERTY, SKILL_RATING_PROPERTY, } from '../core/ids/system.js';
3
+ import { Id } from '../id.js';
4
+ import { toGrcId } from '../id-utils.js';
5
+ import { updateProposalReview } from './update-proposal-review.js';
6
+ const reviewId = Id('3af3e22d21694a078681516710b7ecf1');
7
+ describe('updateProposalReview', () => {
8
+ it('updates pass only (low difficulty)', () => {
9
+ const { id, ops } = updateProposalReview({
10
+ proposalReviewId: reviewId,
11
+ pass: false,
12
+ });
13
+ expect(id).toBe(reviewId);
14
+ expect(ops).toHaveLength(1);
15
+ const op = ops[0];
16
+ expect(op.type).toBe('updateEntity');
17
+ expect(op.id).toEqual(toGrcId(reviewId));
18
+ // Pass value
19
+ const passValue = op.set.find(v => v.property.every((b, i) => b === toGrcId(PASS_PROPERTY)[i]));
20
+ expect(passValue).toBeDefined();
21
+ expect(passValue?.value.type).toBe('boolean');
22
+ if (passValue?.value.type === 'boolean') {
23
+ expect(passValue?.value.value).toBe(false);
24
+ }
25
+ // Should not have rating values
26
+ const completenessValue = op.set.find(v => v.property.every((b, i) => b === toGrcId(COMPLETENESS_RATING_PROPERTY)[i]));
27
+ expect(completenessValue).toBeUndefined();
28
+ const accuracyValue = op.set.find(v => v.property.every((b, i) => b === toGrcId(ACCURACY_RATING_PROPERTY)[i]));
29
+ expect(accuracyValue).toBeUndefined();
30
+ const skillValue = op.set.find(v => v.property.every((b, i) => b === toGrcId(SKILL_RATING_PROPERTY)[i]));
31
+ expect(skillValue).toBeUndefined();
32
+ const effortValue = op.set.find(v => v.property.every((b, i) => b === toGrcId(EFFORT_RATING_PROPERTY)[i]));
33
+ expect(effortValue).toBeUndefined();
34
+ // Should not have name
35
+ const nameValue = op.set.find(v => v.property.every((b, i) => b === toGrcId(NAME_PROPERTY)[i]));
36
+ expect(nameValue).toBeUndefined();
37
+ });
38
+ it('updates pass with all ratings (medium/hard difficulty)', () => {
39
+ const { id, ops } = updateProposalReview({
40
+ proposalReviewId: reviewId,
41
+ pass: true,
42
+ completeness: 0.8,
43
+ accuracy: 1,
44
+ skill: 0.6,
45
+ effort: 0.4,
46
+ });
47
+ expect(id).toBe(reviewId);
48
+ expect(ops).toHaveLength(1);
49
+ const op = ops[0];
50
+ expect(op.type).toBe('updateEntity');
51
+ expect(op.id).toEqual(toGrcId(reviewId));
52
+ // Pass
53
+ const passValue = op.set.find(v => v.property.every((b, i) => b === toGrcId(PASS_PROPERTY)[i]));
54
+ expect(passValue).toBeDefined();
55
+ expect(passValue?.value.type).toBe('boolean');
56
+ if (passValue?.value.type === 'boolean') {
57
+ expect(passValue?.value.value).toBe(true);
58
+ }
59
+ // Completeness
60
+ const completenessValue = op.set.find(v => v.property.every((b, i) => b === toGrcId(COMPLETENESS_RATING_PROPERTY)[i]));
61
+ expect(completenessValue).toBeDefined();
62
+ expect(completenessValue?.value.type).toBe('float');
63
+ if (completenessValue?.value.type === 'float') {
64
+ expect(completenessValue?.value.value).toBe(0.8);
65
+ }
66
+ // Accuracy
67
+ const accuracyValue = op.set.find(v => v.property.every((b, i) => b === toGrcId(ACCURACY_RATING_PROPERTY)[i]));
68
+ expect(accuracyValue).toBeDefined();
69
+ expect(accuracyValue?.value.type).toBe('float');
70
+ if (accuracyValue?.value.type === 'float') {
71
+ expect(accuracyValue?.value.value).toBe(1);
72
+ }
73
+ // Skill
74
+ const skillValue = op.set.find(v => v.property.every((b, i) => b === toGrcId(SKILL_RATING_PROPERTY)[i]));
75
+ expect(skillValue).toBeDefined();
76
+ expect(skillValue?.value.type).toBe('float');
77
+ if (skillValue?.value.type === 'float') {
78
+ expect(skillValue?.value.value).toBe(0.6);
79
+ }
80
+ // Effort
81
+ const effortValue = op.set.find(v => v.property.every((b, i) => b === toGrcId(EFFORT_RATING_PROPERTY)[i]));
82
+ expect(effortValue).toBeDefined();
83
+ expect(effortValue?.value.type).toBe('float');
84
+ if (effortValue?.value.type === 'float') {
85
+ expect(effortValue?.value.value).toBe(0.4);
86
+ }
87
+ });
88
+ it('throws for invalid proposalReviewId', () => {
89
+ expect(() => updateProposalReview({
90
+ proposalReviewId: 'invalid',
91
+ pass: true,
92
+ })).toThrow('Invalid id: "invalid" for `proposalReviewId` in `updateProposalReview`');
93
+ });
94
+ });
95
+ //# sourceMappingURL=update-proposal-review.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-proposal-review.test.js","sourceRoot":"","sources":["../../../src/graph/update-proposal-review.test.ts"],"names":[],"mappings":"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"}