@graphprotocol/grc-20 0.28.0 → 0.30.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.
- package/dist/contracts.d.ts +2 -2
- package/dist/contracts.js +2 -2
- package/dist/examples/ranks/create-ordinal-rank.d.ts +8 -0
- package/dist/examples/ranks/create-ordinal-rank.d.ts.map +1 -0
- package/dist/examples/ranks/create-ordinal-rank.js +42 -0
- package/dist/examples/ranks/create-ordinal-rank.js.map +1 -0
- package/dist/examples/ranks/create-weighted-rank.d.ts +8 -0
- package/dist/examples/ranks/create-weighted-rank.d.ts.map +1 -0
- package/dist/examples/ranks/create-weighted-rank.js +42 -0
- package/dist/examples/ranks/create-weighted-rank.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/scripts/setup-rank-types.d.ts +15 -0
- package/dist/scripts/setup-rank-types.d.ts.map +1 -0
- package/dist/scripts/setup-rank-types.js +62 -0
- package/dist/scripts/setup-rank-types.js.map +1 -0
- package/dist/src/abis/dao-space-factory.d.ts +12 -4
- package/dist/src/abis/dao-space-factory.d.ts.map +1 -1
- package/dist/src/abis/dao-space-factory.js +14 -4
- package/dist/src/abis/dao-space-factory.js.map +1 -1
- package/dist/src/abis/dao-space.d.ts +42 -46
- package/dist/src/abis/dao-space.d.ts.map +1 -1
- package/dist/src/abis/dao-space.js +42 -47
- package/dist/src/abis/dao-space.js.map +1 -1
- package/dist/src/abis/space-registry.d.ts +11 -7
- package/dist/src/abis/space-registry.d.ts.map +1 -1
- package/dist/src/abis/space-registry.js +13 -7
- package/dist/src/abis/space-registry.js.map +1 -1
- package/dist/src/core/ids/system.d.ts +6 -0
- package/dist/src/core/ids/system.d.ts.map +1 -1
- package/dist/src/core/ids/system.js +6 -0
- package/dist/src/core/ids/system.js.map +1 -1
- package/dist/src/encodings/get-create-dao-space-calldata.d.ts +9 -7
- package/dist/src/encodings/get-create-dao-space-calldata.d.ts.map +1 -1
- package/dist/src/encodings/get-create-dao-space-calldata.js +18 -11
- package/dist/src/encodings/get-create-dao-space-calldata.js.map +1 -1
- package/dist/src/encodings/get-create-dao-space-calldata.test.js +9 -10
- package/dist/src/encodings/get-create-dao-space-calldata.test.js.map +1 -1
- package/dist/src/ranks/create-rank.d.ts +42 -0
- package/dist/src/ranks/create-rank.d.ts.map +1 -0
- package/dist/src/ranks/create-rank.js +139 -0
- package/dist/src/ranks/create-rank.js.map +1 -0
- package/dist/src/ranks/create-rank.test.d.ts +2 -0
- package/dist/src/ranks/create-rank.test.d.ts.map +1 -0
- package/dist/src/ranks/create-rank.test.js +246 -0
- package/dist/src/ranks/create-rank.test.js.map +1 -0
- package/dist/src/ranks/index.d.ts +3 -0
- package/dist/src/ranks/index.d.ts.map +1 -0
- package/dist/src/ranks/index.js +3 -0
- package/dist/src/ranks/index.js.map +1 -0
- package/dist/src/ranks/types.d.ts +30 -0
- package/dist/src/ranks/types.d.ts.map +1 -0
- package/dist/src/ranks/types.js +2 -0
- package/dist/src/ranks/types.js.map +1 -0
- package/package.json +1 -1
|
@@ -99,12 +99,12 @@ describe('getCreateDaoSpaceCalldata', () => {
|
|
|
99
99
|
quorum: 1,
|
|
100
100
|
durationInDays: 7,
|
|
101
101
|
},
|
|
102
|
-
|
|
103
|
-
'
|
|
104
|
-
'
|
|
105
|
-
'
|
|
102
|
+
initialEditorSpaceIds: [
|
|
103
|
+
'0x12345678901234567890123456789012',
|
|
104
|
+
'0x22345678901234567890123456789012',
|
|
105
|
+
'0x32345678901234567890123456789012',
|
|
106
106
|
],
|
|
107
|
-
|
|
107
|
+
initialMemberSpaceIds: ['0xabcdefabcdefabcdefabcdefabcdefab'],
|
|
108
108
|
};
|
|
109
109
|
it('should generate valid calldata', () => {
|
|
110
110
|
const calldata = getCreateDaoSpaceCalldata(validArgs);
|
|
@@ -112,8 +112,8 @@ describe('getCreateDaoSpaceCalldata', () => {
|
|
|
112
112
|
expect(calldata.startsWith('0x')).toBe(true);
|
|
113
113
|
});
|
|
114
114
|
it('should throw if no initial editors provided', () => {
|
|
115
|
-
const args = { ...validArgs,
|
|
116
|
-
expect(() => getCreateDaoSpaceCalldata(args)).toThrow('At least one initial editor is required');
|
|
115
|
+
const args = { ...validArgs, initialEditorSpaceIds: [] };
|
|
116
|
+
expect(() => getCreateDaoSpaceCalldata(args)).toThrow('At least one initial editor space ID is required');
|
|
117
117
|
});
|
|
118
118
|
it('should throw if voting settings are invalid', () => {
|
|
119
119
|
const args = {
|
|
@@ -130,13 +130,12 @@ describe('getCreateDaoSpaceCalldata', () => {
|
|
|
130
130
|
expect(() => getCreateDaoSpaceCalldata(args)).toThrow(`durationInDays must be at least ${MINIMUM_VOTING_DURATION_DAYS} days`);
|
|
131
131
|
});
|
|
132
132
|
it('should accept empty initial members', () => {
|
|
133
|
-
const args = { ...validArgs,
|
|
133
|
+
const args = { ...validArgs, initialMemberSpaceIds: [] };
|
|
134
134
|
const calldata = getCreateDaoSpaceCalldata(args);
|
|
135
135
|
expect(calldata).toBeTypeOf('string');
|
|
136
136
|
expect(calldata.startsWith('0x')).toBe(true);
|
|
137
137
|
});
|
|
138
|
-
it('should
|
|
139
|
-
// Should not throw with lowercase addresses - uses validArgs which has 3 editors
|
|
138
|
+
it('should accept space IDs', () => {
|
|
140
139
|
const calldata = getCreateDaoSpaceCalldata(validArgs);
|
|
141
140
|
expect(calldata).toBeTypeOf('string');
|
|
142
141
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-create-dao-space-calldata.test.js","sourceRoot":"","sources":["../../../src/encodings/get-create-dao-space-calldata.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"get-create-dao-space-calldata.test.js","sourceRoot":"","sources":["../../../src/encodings/get-create-dao-space-calldata.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { CreateRankParams, CreateRankResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a rank entity with the given name, description, rankType, and votes.
|
|
4
|
+
* All IDs passed to this function are validated. If any invalid ID is provided,
|
|
5
|
+
* the function will throw an error.
|
|
6
|
+
*
|
|
7
|
+
* For ORDINAL ranks, the position is derived from the array order and fractional
|
|
8
|
+
* indexing strings are generated internally.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* // Create an ordinal rank (ordered list) - position derived from array order
|
|
13
|
+
* const { id, ops, voteIds } = createRank({
|
|
14
|
+
* id: rankId, // optional, will be generated if not provided
|
|
15
|
+
* name: 'My Favorite Movies',
|
|
16
|
+
* description: 'A ranked list of my favorite movies', // optional
|
|
17
|
+
* rankType: 'ORDINAL',
|
|
18
|
+
* votes: [
|
|
19
|
+
* { entityId: movie1Id }, // 1st place
|
|
20
|
+
* { entityId: movie2Id }, // 2nd place
|
|
21
|
+
* { entityId: movie3Id }, // 3rd place
|
|
22
|
+
* ],
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // Create a weighted rank (scored list)
|
|
26
|
+
* const { id, ops, voteIds } = createRank({
|
|
27
|
+
* name: 'Restaurant Ratings',
|
|
28
|
+
* rankType: 'WEIGHTED',
|
|
29
|
+
* votes: [
|
|
30
|
+
* { entityId: restaurant1Id, value: 4.5 }, // numeric score
|
|
31
|
+
* { entityId: restaurant2Id, value: 3.8 },
|
|
32
|
+
* ],
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* @param params – {@link CreateRankParams}
|
|
37
|
+
* @returns – {@link CreateRankResult}
|
|
38
|
+
* @throws Will throw an error if any provided ID is invalid
|
|
39
|
+
* @throws Will throw an error if any entityId is duplicated in votes
|
|
40
|
+
*/
|
|
41
|
+
export declare const createRank: ({ id: providedId, name, description, rankType, votes, }: CreateRankParams) => CreateRankResult;
|
|
42
|
+
//# sourceMappingURL=create-rank.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-rank.d.ts","sourceRoot":"","sources":["../../../src/ranks/create-rank.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAgB,MAAM,YAAY,CAAC;AAEnF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,eAAO,MAAM,UAAU,GAAI,yDAMxB,gBAAgB,KAAG,gBA2GrB,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { generateNJitteredKeysBetween } from 'fractional-indexing-jittered';
|
|
2
|
+
import { DESCRIPTION_PROPERTY, NAME_PROPERTY, RANK_TYPE, RANK_TYPE_PROPERTY, RANK_VOTES_RELATION_TYPE, TYPES_PROPERTY, VOTE_ORDINAL_VALUE_PROPERTY, VOTE_WEIGHTED_VALUE_PROPERTY, } from '../core/ids/system.js';
|
|
3
|
+
import { serializeNumber } from '../graph/serialize.js';
|
|
4
|
+
import { Id } from '../id.js';
|
|
5
|
+
import { assertValid, generate } from '../id-utils.js';
|
|
6
|
+
/**
|
|
7
|
+
* Creates a rank entity with the given name, description, rankType, and votes.
|
|
8
|
+
* All IDs passed to this function are validated. If any invalid ID is provided,
|
|
9
|
+
* the function will throw an error.
|
|
10
|
+
*
|
|
11
|
+
* For ORDINAL ranks, the position is derived from the array order and fractional
|
|
12
|
+
* indexing strings are generated internally.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* // Create an ordinal rank (ordered list) - position derived from array order
|
|
17
|
+
* const { id, ops, voteIds } = createRank({
|
|
18
|
+
* id: rankId, // optional, will be generated if not provided
|
|
19
|
+
* name: 'My Favorite Movies',
|
|
20
|
+
* description: 'A ranked list of my favorite movies', // optional
|
|
21
|
+
* rankType: 'ORDINAL',
|
|
22
|
+
* votes: [
|
|
23
|
+
* { entityId: movie1Id }, // 1st place
|
|
24
|
+
* { entityId: movie2Id }, // 2nd place
|
|
25
|
+
* { entityId: movie3Id }, // 3rd place
|
|
26
|
+
* ],
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* // Create a weighted rank (scored list)
|
|
30
|
+
* const { id, ops, voteIds } = createRank({
|
|
31
|
+
* name: 'Restaurant Ratings',
|
|
32
|
+
* rankType: 'WEIGHTED',
|
|
33
|
+
* votes: [
|
|
34
|
+
* { entityId: restaurant1Id, value: 4.5 }, // numeric score
|
|
35
|
+
* { entityId: restaurant2Id, value: 3.8 },
|
|
36
|
+
* ],
|
|
37
|
+
* });
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @param params – {@link CreateRankParams}
|
|
41
|
+
* @returns – {@link CreateRankResult}
|
|
42
|
+
* @throws Will throw an error if any provided ID is invalid
|
|
43
|
+
* @throws Will throw an error if any entityId is duplicated in votes
|
|
44
|
+
*/
|
|
45
|
+
export const createRank = ({ id: providedId, name, description, rankType, votes, }) => {
|
|
46
|
+
// Validate all input IDs
|
|
47
|
+
if (providedId) {
|
|
48
|
+
assertValid(providedId, '`id` in `createRank`');
|
|
49
|
+
}
|
|
50
|
+
for (const vote of votes) {
|
|
51
|
+
assertValid(vote.entityId, '`entityId` in `votes` in `createRank`');
|
|
52
|
+
}
|
|
53
|
+
// Validate no duplicate entity IDs in votes
|
|
54
|
+
const seenEntityIds = new Set();
|
|
55
|
+
for (const vote of votes) {
|
|
56
|
+
const entityId = String(vote.entityId);
|
|
57
|
+
if (seenEntityIds.has(entityId)) {
|
|
58
|
+
throw new Error(`Duplicate entityId in votes: "${entityId}". Each entity can only be voted once per rank.`);
|
|
59
|
+
}
|
|
60
|
+
seenEntityIds.add(entityId);
|
|
61
|
+
}
|
|
62
|
+
const id = providedId ?? generate();
|
|
63
|
+
const ops = [];
|
|
64
|
+
const voteIds = [];
|
|
65
|
+
// Create rank entity values
|
|
66
|
+
const rankValues = [
|
|
67
|
+
{
|
|
68
|
+
property: NAME_PROPERTY,
|
|
69
|
+
value: name,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
property: RANK_TYPE_PROPERTY,
|
|
73
|
+
value: rankType,
|
|
74
|
+
},
|
|
75
|
+
];
|
|
76
|
+
if (description) {
|
|
77
|
+
rankValues.push({
|
|
78
|
+
property: DESCRIPTION_PROPERTY,
|
|
79
|
+
value: description,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
// Create UPDATE_ENTITY op for the rank
|
|
83
|
+
ops.push({
|
|
84
|
+
type: 'UPDATE_ENTITY',
|
|
85
|
+
entity: {
|
|
86
|
+
id: Id(id),
|
|
87
|
+
values: rankValues,
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
// Create relation linking rank to RANK_TYPE (type relation)
|
|
91
|
+
ops.push({
|
|
92
|
+
type: 'CREATE_RELATION',
|
|
93
|
+
relation: {
|
|
94
|
+
id: generate(),
|
|
95
|
+
entity: generate(),
|
|
96
|
+
fromEntity: Id(id),
|
|
97
|
+
toEntity: RANK_TYPE,
|
|
98
|
+
type: TYPES_PROPERTY,
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
// Generate fractional indices for ordinal ranks
|
|
102
|
+
const fractionalIndices = rankType === 'ORDINAL' ? generateNJitteredKeysBetween(null, null, votes.length) : [];
|
|
103
|
+
// Create votes
|
|
104
|
+
votes.forEach((vote, i) => {
|
|
105
|
+
const voteEntityId = generate();
|
|
106
|
+
const relationId = generate();
|
|
107
|
+
voteIds.push(voteEntityId);
|
|
108
|
+
// Create relation from rank to voted entity
|
|
109
|
+
ops.push({
|
|
110
|
+
type: 'CREATE_RELATION',
|
|
111
|
+
relation: {
|
|
112
|
+
id: relationId,
|
|
113
|
+
entity: voteEntityId,
|
|
114
|
+
fromEntity: Id(id),
|
|
115
|
+
toEntity: Id(vote.entityId),
|
|
116
|
+
type: RANK_VOTES_RELATION_TYPE,
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
// Create vote entity with the appropriate value property
|
|
120
|
+
const voteValue = rankType === 'ORDINAL'
|
|
121
|
+
? {
|
|
122
|
+
property: VOTE_ORDINAL_VALUE_PROPERTY,
|
|
123
|
+
value: fractionalIndices[i],
|
|
124
|
+
}
|
|
125
|
+
: {
|
|
126
|
+
property: VOTE_WEIGHTED_VALUE_PROPERTY,
|
|
127
|
+
value: serializeNumber(vote.value),
|
|
128
|
+
};
|
|
129
|
+
ops.push({
|
|
130
|
+
type: 'UPDATE_ENTITY',
|
|
131
|
+
entity: {
|
|
132
|
+
id: voteEntityId,
|
|
133
|
+
values: [voteValue],
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
return { id: Id(id), ops, voteIds };
|
|
138
|
+
};
|
|
139
|
+
//# sourceMappingURL=create-rank.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-rank.js","sourceRoot":"","sources":["../../../src/ranks/create-rank.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-rank.test.d.ts","sourceRoot":"","sources":["../../../src/ranks/create-rank.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { DESCRIPTION_PROPERTY, NAME_PROPERTY, RANK_TYPE, RANK_TYPE_PROPERTY, RANK_VOTES_RELATION_TYPE, TYPES_PROPERTY, VOTE_ORDINAL_VALUE_PROPERTY, VOTE_WEIGHTED_VALUE_PROPERTY, } from '../core/ids/system.js';
|
|
3
|
+
import { Id, isValid } from '../id.js';
|
|
4
|
+
import { createRank } from './create-rank.js';
|
|
5
|
+
describe('createRank', () => {
|
|
6
|
+
const movie1Id = Id('f47ac10b-58cc-4372-a567-0e02b2c3d479');
|
|
7
|
+
const movie2Id = Id('550e8400-e29b-41d4-a716-446655440000');
|
|
8
|
+
const movie3Id = Id('6ba7b810-9dad-11d1-80b4-00c04fd430c8');
|
|
9
|
+
describe('ordinal ranks', () => {
|
|
10
|
+
it('creates a basic ordinal rank with one vote', () => {
|
|
11
|
+
const rank = createRank({
|
|
12
|
+
name: 'My Favorite Movie',
|
|
13
|
+
rankType: 'ORDINAL',
|
|
14
|
+
votes: [{ entityId: movie1Id }],
|
|
15
|
+
});
|
|
16
|
+
expect(rank).toBeDefined();
|
|
17
|
+
expect(typeof rank.id).toBe('string');
|
|
18
|
+
expect(rank.ops).toBeDefined();
|
|
19
|
+
expect(rank.voteIds).toHaveLength(1);
|
|
20
|
+
// 1 UPDATE_ENTITY (rank) + 1 CREATE_RELATION (type) + 1 CREATE_RELATION (vote) + 1 UPDATE_ENTITY (vote value)
|
|
21
|
+
expect(rank.ops).toHaveLength(4);
|
|
22
|
+
// Check rank entity creation
|
|
23
|
+
expect(rank.ops[0]).toMatchObject({
|
|
24
|
+
type: 'UPDATE_ENTITY',
|
|
25
|
+
entity: {
|
|
26
|
+
id: rank.id,
|
|
27
|
+
values: expect.arrayContaining([
|
|
28
|
+
{ property: NAME_PROPERTY, value: 'My Favorite Movie' },
|
|
29
|
+
{ property: RANK_TYPE_PROPERTY, value: 'ORDINAL' },
|
|
30
|
+
]),
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
// Check type relation to RANK_TYPE
|
|
34
|
+
expect(rank.ops[1]).toMatchObject({
|
|
35
|
+
type: 'CREATE_RELATION',
|
|
36
|
+
relation: {
|
|
37
|
+
fromEntity: rank.id,
|
|
38
|
+
toEntity: RANK_TYPE,
|
|
39
|
+
type: TYPES_PROPERTY,
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
// Check vote relation
|
|
43
|
+
expect(rank.ops[2]).toMatchObject({
|
|
44
|
+
type: 'CREATE_RELATION',
|
|
45
|
+
relation: {
|
|
46
|
+
fromEntity: rank.id,
|
|
47
|
+
toEntity: movie1Id,
|
|
48
|
+
type: RANK_VOTES_RELATION_TYPE,
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
// Check vote entity with ordinal value
|
|
52
|
+
expect(rank.ops[3]).toMatchObject({
|
|
53
|
+
type: 'UPDATE_ENTITY',
|
|
54
|
+
entity: {
|
|
55
|
+
id: rank.voteIds[0],
|
|
56
|
+
values: [
|
|
57
|
+
{
|
|
58
|
+
property: VOTE_ORDINAL_VALUE_PROPERTY,
|
|
59
|
+
value: expect.any(String), // fractional index
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
it('creates an ordinal rank with multiple votes in order', () => {
|
|
66
|
+
const rank = createRank({
|
|
67
|
+
name: 'Top 3 Movies',
|
|
68
|
+
rankType: 'ORDINAL',
|
|
69
|
+
votes: [{ entityId: movie1Id }, { entityId: movie2Id }, { entityId: movie3Id }],
|
|
70
|
+
});
|
|
71
|
+
expect(rank.voteIds).toHaveLength(3);
|
|
72
|
+
// 1 UPDATE_ENTITY + 1 type relation + 3 vote relations + 3 vote entities = 8 ops
|
|
73
|
+
expect(rank.ops).toHaveLength(8);
|
|
74
|
+
// Verify fractional indices are in ascending order
|
|
75
|
+
const ordinalValue1 = rank.ops[3].entity.values[0]?.value;
|
|
76
|
+
const ordinalValue2 = rank.ops[5].entity.values[0]?.value;
|
|
77
|
+
const ordinalValue3 = rank.ops[7].entity.values[0]?.value;
|
|
78
|
+
expect(ordinalValue1 && ordinalValue2 && ordinalValue1 < ordinalValue2).toBe(true);
|
|
79
|
+
expect(ordinalValue2 && ordinalValue3 && ordinalValue2 < ordinalValue3).toBe(true);
|
|
80
|
+
});
|
|
81
|
+
it('creates an ordinal rank with optional description', () => {
|
|
82
|
+
const rank = createRank({
|
|
83
|
+
name: 'My Movies',
|
|
84
|
+
description: 'A ranked list of my favorite movies',
|
|
85
|
+
rankType: 'ORDINAL',
|
|
86
|
+
votes: [{ entityId: movie1Id }],
|
|
87
|
+
});
|
|
88
|
+
expect(rank.ops[0]).toMatchObject({
|
|
89
|
+
type: 'UPDATE_ENTITY',
|
|
90
|
+
entity: {
|
|
91
|
+
id: rank.id,
|
|
92
|
+
values: expect.arrayContaining([
|
|
93
|
+
{ property: NAME_PROPERTY, value: 'My Movies' },
|
|
94
|
+
{ property: RANK_TYPE_PROPERTY, value: 'ORDINAL' },
|
|
95
|
+
{ property: DESCRIPTION_PROPERTY, value: 'A ranked list of my favorite movies' },
|
|
96
|
+
]),
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
describe('weighted ranks', () => {
|
|
102
|
+
it('creates a basic weighted rank with one vote', () => {
|
|
103
|
+
const rank = createRank({
|
|
104
|
+
name: 'Restaurant Rating',
|
|
105
|
+
rankType: 'WEIGHTED',
|
|
106
|
+
votes: [{ entityId: movie1Id, value: 4.5 }],
|
|
107
|
+
});
|
|
108
|
+
expect(rank).toBeDefined();
|
|
109
|
+
expect(rank.voteIds).toHaveLength(1);
|
|
110
|
+
expect(rank.ops).toHaveLength(4);
|
|
111
|
+
// Check rank entity has WEIGHTED type
|
|
112
|
+
expect(rank.ops[0]).toMatchObject({
|
|
113
|
+
type: 'UPDATE_ENTITY',
|
|
114
|
+
entity: {
|
|
115
|
+
values: expect.arrayContaining([{ property: RANK_TYPE_PROPERTY, value: 'WEIGHTED' }]),
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
// Check vote entity with weighted value (serialized as string)
|
|
119
|
+
expect(rank.ops[3]).toMatchObject({
|
|
120
|
+
type: 'UPDATE_ENTITY',
|
|
121
|
+
entity: {
|
|
122
|
+
id: rank.voteIds[0],
|
|
123
|
+
values: [
|
|
124
|
+
{
|
|
125
|
+
property: VOTE_WEIGHTED_VALUE_PROPERTY,
|
|
126
|
+
value: '4.5', // serialized number
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
it('creates a weighted rank with multiple votes', () => {
|
|
133
|
+
const rank = createRank({
|
|
134
|
+
name: 'Movie Scores',
|
|
135
|
+
rankType: 'WEIGHTED',
|
|
136
|
+
votes: [
|
|
137
|
+
{ entityId: movie1Id, value: 9.2 },
|
|
138
|
+
{ entityId: movie2Id, value: 8.5 },
|
|
139
|
+
{ entityId: movie3Id, value: 7.8 },
|
|
140
|
+
],
|
|
141
|
+
});
|
|
142
|
+
expect(rank.voteIds).toHaveLength(3);
|
|
143
|
+
expect(rank.ops).toHaveLength(8);
|
|
144
|
+
// Verify weighted values are correct
|
|
145
|
+
expect(rank.ops[3]).toMatchObject({
|
|
146
|
+
type: 'UPDATE_ENTITY',
|
|
147
|
+
entity: {
|
|
148
|
+
values: [{ property: VOTE_WEIGHTED_VALUE_PROPERTY, value: '9.2' }],
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
expect(rank.ops[5]).toMatchObject({
|
|
152
|
+
type: 'UPDATE_ENTITY',
|
|
153
|
+
entity: {
|
|
154
|
+
values: [{ property: VOTE_WEIGHTED_VALUE_PROPERTY, value: '8.5' }],
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
expect(rank.ops[7]).toMatchObject({
|
|
158
|
+
type: 'UPDATE_ENTITY',
|
|
159
|
+
entity: {
|
|
160
|
+
values: [{ property: VOTE_WEIGHTED_VALUE_PROPERTY, value: '7.8' }],
|
|
161
|
+
},
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
it('handles integer weighted values', () => {
|
|
165
|
+
const rank = createRank({
|
|
166
|
+
name: 'Star Ratings',
|
|
167
|
+
rankType: 'WEIGHTED',
|
|
168
|
+
votes: [{ entityId: movie1Id, value: 5 }],
|
|
169
|
+
});
|
|
170
|
+
expect(rank.ops[3]).toMatchObject({
|
|
171
|
+
type: 'UPDATE_ENTITY',
|
|
172
|
+
entity: {
|
|
173
|
+
values: [{ property: VOTE_WEIGHTED_VALUE_PROPERTY, value: '5' }],
|
|
174
|
+
},
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
describe('provided id', () => {
|
|
179
|
+
it('uses provided id when specified', () => {
|
|
180
|
+
const providedId = Id('b1dc6e5c-63e1-43ba-b3d4-755b251a4ea1');
|
|
181
|
+
const rank = createRank({
|
|
182
|
+
id: providedId,
|
|
183
|
+
name: 'My Rank',
|
|
184
|
+
rankType: 'ORDINAL',
|
|
185
|
+
votes: [{ entityId: movie1Id }],
|
|
186
|
+
});
|
|
187
|
+
expect(rank.id).toBe(providedId);
|
|
188
|
+
});
|
|
189
|
+
it('generates id when not provided', () => {
|
|
190
|
+
const rank = createRank({
|
|
191
|
+
name: 'My Rank',
|
|
192
|
+
rankType: 'ORDINAL',
|
|
193
|
+
votes: [{ entityId: movie1Id }],
|
|
194
|
+
});
|
|
195
|
+
expect(typeof rank.id).toBe('string');
|
|
196
|
+
expect(isValid(rank.id)).toBe(true);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
describe('error handling', () => {
|
|
200
|
+
it('throws an error if the provided id is invalid', () => {
|
|
201
|
+
expect(() => createRank({
|
|
202
|
+
id: 'invalid',
|
|
203
|
+
name: 'My Rank',
|
|
204
|
+
rankType: 'ORDINAL',
|
|
205
|
+
votes: [{ entityId: movie1Id }],
|
|
206
|
+
})).toThrow('Invalid id: "invalid" for `id` in `createRank`');
|
|
207
|
+
});
|
|
208
|
+
it('throws an error if a vote entityId is invalid', () => {
|
|
209
|
+
expect(() => createRank({
|
|
210
|
+
name: 'My Rank',
|
|
211
|
+
rankType: 'ORDINAL',
|
|
212
|
+
votes: [{ entityId: 'invalid-entity-id' }],
|
|
213
|
+
})).toThrow('Invalid id: "invalid-entity-id" for `entityId` in `votes` in `createRank`');
|
|
214
|
+
});
|
|
215
|
+
it('throws an error if duplicate entity IDs are in votes', () => {
|
|
216
|
+
expect(() => createRank({
|
|
217
|
+
name: 'My Rank',
|
|
218
|
+
rankType: 'ORDINAL',
|
|
219
|
+
votes: [{ entityId: movie1Id }, { entityId: movie2Id }, { entityId: movie1Id }],
|
|
220
|
+
})).toThrow(`Duplicate entityId in votes: "${movie1Id}". Each entity can only be voted once per rank.`);
|
|
221
|
+
});
|
|
222
|
+
it('throws an error for duplicate entity IDs in weighted ranks', () => {
|
|
223
|
+
expect(() => createRank({
|
|
224
|
+
name: 'My Scores',
|
|
225
|
+
rankType: 'WEIGHTED',
|
|
226
|
+
votes: [
|
|
227
|
+
{ entityId: movie1Id, value: 5 },
|
|
228
|
+
{ entityId: movie1Id, value: 3 },
|
|
229
|
+
],
|
|
230
|
+
})).toThrow(`Duplicate entityId in votes: "${movie1Id}". Each entity can only be voted once per rank.`);
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
describe('empty votes', () => {
|
|
234
|
+
it('creates a rank with no votes', () => {
|
|
235
|
+
const rank = createRank({
|
|
236
|
+
name: 'Empty Rank',
|
|
237
|
+
rankType: 'ORDINAL',
|
|
238
|
+
votes: [],
|
|
239
|
+
});
|
|
240
|
+
expect(rank.voteIds).toHaveLength(0);
|
|
241
|
+
// Only UPDATE_ENTITY (rank) + CREATE_RELATION (type)
|
|
242
|
+
expect(rank.ops).toHaveLength(2);
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
//# sourceMappingURL=create-rank.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-rank.test.js","sourceRoot":"","sources":["../../../src/ranks/create-rank.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ranks/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ranks/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Id } from '../id.js';
|
|
2
|
+
import type { CreateResult } from '../types.js';
|
|
3
|
+
export type RankType = 'ORDINAL' | 'WEIGHTED';
|
|
4
|
+
/**
|
|
5
|
+
* Vote with ordinal positioning.
|
|
6
|
+
* Position is derived from the array order; fractional indexing is generated internally.
|
|
7
|
+
*/
|
|
8
|
+
export type VoteOrdinal = {
|
|
9
|
+
entityId: Id | string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Vote with weighted numeric scoring.
|
|
13
|
+
* Used for ranked lists where the magnitude of the score matters.
|
|
14
|
+
*/
|
|
15
|
+
export type VoteWeighted = {
|
|
16
|
+
entityId: Id | string;
|
|
17
|
+
value: number;
|
|
18
|
+
};
|
|
19
|
+
export type Vote = VoteOrdinal | VoteWeighted;
|
|
20
|
+
export type CreateRankParams = {
|
|
21
|
+
id?: Id | string;
|
|
22
|
+
name: string;
|
|
23
|
+
description?: string;
|
|
24
|
+
rankType: RankType;
|
|
25
|
+
votes: Vote[];
|
|
26
|
+
};
|
|
27
|
+
export type CreateRankResult = CreateResult & {
|
|
28
|
+
voteIds: Id[];
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ranks/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAE9C;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,EAAE,GAAG,MAAM,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,EAAE,GAAG,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG,WAAW,GAAG,YAAY,CAAC;AAE9C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG;IAC5C,OAAO,EAAE,EAAE,EAAE,CAAC;CACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ranks/types.ts"],"names":[],"mappings":""}
|