@geoprotocol/grc-20 0.1.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/builder/edit.d.ts +107 -0
- package/dist/builder/edit.d.ts.map +1 -0
- package/dist/builder/edit.js +221 -0
- package/dist/builder/edit.js.map +1 -0
- package/dist/builder/entity.d.ts +62 -0
- package/dist/builder/entity.d.ts.map +1 -0
- package/dist/builder/entity.js +126 -0
- package/dist/builder/entity.js.map +1 -0
- package/dist/builder/index.d.ts +5 -0
- package/dist/builder/index.d.ts.map +1 -0
- package/dist/builder/index.js +5 -0
- package/dist/builder/index.js.map +1 -0
- package/dist/builder/relation.d.ts +66 -0
- package/dist/builder/relation.d.ts.map +1 -0
- package/dist/builder/relation.js +114 -0
- package/dist/builder/relation.js.map +1 -0
- package/dist/builder/update.d.ts +90 -0
- package/dist/builder/update.d.ts.map +1 -0
- package/dist/builder/update.js +174 -0
- package/dist/builder/update.js.map +1 -0
- package/dist/codec/edit.d.ts +17 -0
- package/dist/codec/edit.d.ts.map +1 -0
- package/dist/codec/edit.js +393 -0
- package/dist/codec/edit.js.map +1 -0
- package/dist/codec/index.d.ts +3 -0
- package/dist/codec/index.d.ts.map +1 -0
- package/dist/codec/index.js +3 -0
- package/dist/codec/index.js.map +1 -0
- package/dist/codec/op.d.ts +27 -0
- package/dist/codec/op.d.ts.map +1 -0
- package/dist/codec/op.js +333 -0
- package/dist/codec/op.js.map +1 -0
- package/dist/codec/primitives.d.ts +138 -0
- package/dist/codec/primitives.d.ts.map +1 -0
- package/dist/codec/primitives.js +285 -0
- package/dist/codec/primitives.js.map +1 -0
- package/dist/codec/value.d.ts +41 -0
- package/dist/codec/value.d.ts.map +1 -0
- package/dist/codec/value.js +202 -0
- package/dist/codec/value.js.map +1 -0
- package/dist/genesis/index.d.ts +109 -0
- package/dist/genesis/index.d.ts.map +1 -0
- package/dist/genesis/index.js +183 -0
- package/dist/genesis/index.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/test/basic.test.d.ts +2 -0
- package/dist/test/basic.test.d.ts.map +1 -0
- package/dist/test/basic.test.js +270 -0
- package/dist/test/basic.test.js.map +1 -0
- package/dist/types/edit.d.ts +46 -0
- package/dist/types/edit.d.ts.map +1 -0
- package/dist/types/edit.js +13 -0
- package/dist/types/edit.js.map +1 -0
- package/dist/types/id.d.ts +32 -0
- package/dist/types/id.d.ts.map +1 -0
- package/dist/types/id.js +45 -0
- package/dist/types/id.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/op.d.ts +147 -0
- package/dist/types/op.d.ts.map +1 -0
- package/dist/types/op.js +60 -0
- package/dist/types/op.js.map +1 -0
- package/dist/types/value.d.ts +107 -0
- package/dist/types/value.d.ts.map +1 -0
- package/dist/types/value.js +126 -0
- package/dist/types/value.js.map +1 -0
- package/dist/util/id.d.ts +51 -0
- package/dist/util/id.d.ts.map +1 -0
- package/dist/util/id.js +215 -0
- package/dist/util/id.js.map +1 -0
- package/dist/util/index.d.ts +2 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/index.js +2 -0
- package/dist/util/index.js.map +1 -0
- package/package.json +68 -0
- package/readme.md +232 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { derivedUuidFromString } from "../util/id.js";
|
|
2
|
+
/**
|
|
3
|
+
* Derives a genesis ID from a name.
|
|
4
|
+
*
|
|
5
|
+
* ```
|
|
6
|
+
* id = derived_uuid("grc20:genesis:" + name)
|
|
7
|
+
* ```
|
|
8
|
+
*/
|
|
9
|
+
export function genesisId(name) {
|
|
10
|
+
return derivedUuidFromString(`grc20:genesis:${name}`);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Derives a language ID from a BCP 47 language code.
|
|
14
|
+
*
|
|
15
|
+
* ```
|
|
16
|
+
* id = derived_uuid("grc20:genesis:language:" + code)
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export function languageId(code) {
|
|
20
|
+
return derivedUuidFromString(`grc20:genesis:language:${code.toLowerCase()}`);
|
|
21
|
+
}
|
|
22
|
+
// =============================================================================
|
|
23
|
+
// CORE PROPERTIES (Section 7.1)
|
|
24
|
+
// =============================================================================
|
|
25
|
+
/**
|
|
26
|
+
* Well-known property IDs from the Genesis Space.
|
|
27
|
+
*/
|
|
28
|
+
export const properties = {
|
|
29
|
+
/** Name property - primary label (TEXT) */
|
|
30
|
+
get NAME() {
|
|
31
|
+
return genesisId("Name");
|
|
32
|
+
},
|
|
33
|
+
/** Description property - summary text (TEXT) */
|
|
34
|
+
get DESCRIPTION() {
|
|
35
|
+
return genesisId("Description");
|
|
36
|
+
},
|
|
37
|
+
/** Avatar property - image URL (TEXT) */
|
|
38
|
+
get AVATAR() {
|
|
39
|
+
return genesisId("Avatar");
|
|
40
|
+
},
|
|
41
|
+
/** URL property - external link (TEXT) */
|
|
42
|
+
get URL() {
|
|
43
|
+
return genesisId("URL");
|
|
44
|
+
},
|
|
45
|
+
/** Created property - creation time (TIMESTAMP) */
|
|
46
|
+
get CREATED() {
|
|
47
|
+
return genesisId("Created");
|
|
48
|
+
},
|
|
49
|
+
/** Modified property - last modification (TIMESTAMP) */
|
|
50
|
+
get MODIFIED() {
|
|
51
|
+
return genesisId("Modified");
|
|
52
|
+
},
|
|
53
|
+
// Helper functions
|
|
54
|
+
name: () => genesisId("Name"),
|
|
55
|
+
description: () => genesisId("Description"),
|
|
56
|
+
avatar: () => genesisId("Avatar"),
|
|
57
|
+
url: () => genesisId("URL"),
|
|
58
|
+
created: () => genesisId("Created"),
|
|
59
|
+
modified: () => genesisId("Modified"),
|
|
60
|
+
};
|
|
61
|
+
// =============================================================================
|
|
62
|
+
// CORE TYPES (Section 7.2)
|
|
63
|
+
// =============================================================================
|
|
64
|
+
/**
|
|
65
|
+
* Well-known type entity IDs from the Genesis Space.
|
|
66
|
+
*/
|
|
67
|
+
export const types = {
|
|
68
|
+
/** Person type - human individual */
|
|
69
|
+
get PERSON() {
|
|
70
|
+
return genesisId("Person");
|
|
71
|
+
},
|
|
72
|
+
/** Organization type - company, DAO, institution */
|
|
73
|
+
get ORGANIZATION() {
|
|
74
|
+
return genesisId("Organization");
|
|
75
|
+
},
|
|
76
|
+
/** Place type - geographic location */
|
|
77
|
+
get PLACE() {
|
|
78
|
+
return genesisId("Place");
|
|
79
|
+
},
|
|
80
|
+
/** Topic type - subject or concept */
|
|
81
|
+
get TOPIC() {
|
|
82
|
+
return genesisId("Topic");
|
|
83
|
+
},
|
|
84
|
+
// Helper functions
|
|
85
|
+
person: () => genesisId("Person"),
|
|
86
|
+
organization: () => genesisId("Organization"),
|
|
87
|
+
place: () => genesisId("Place"),
|
|
88
|
+
topic: () => genesisId("Topic"),
|
|
89
|
+
};
|
|
90
|
+
// =============================================================================
|
|
91
|
+
// CORE RELATION TYPES (Section 7.3)
|
|
92
|
+
// =============================================================================
|
|
93
|
+
/**
|
|
94
|
+
* Well-known relation type IDs from the Genesis Space.
|
|
95
|
+
*/
|
|
96
|
+
export const relationTypes = {
|
|
97
|
+
/** Types relation - type membership */
|
|
98
|
+
get TYPES() {
|
|
99
|
+
return genesisId("Types");
|
|
100
|
+
},
|
|
101
|
+
/** PartOf relation - composition/containment */
|
|
102
|
+
get PART_OF() {
|
|
103
|
+
return genesisId("PartOf");
|
|
104
|
+
},
|
|
105
|
+
/** RelatedTo relation - generic association */
|
|
106
|
+
get RELATED_TO() {
|
|
107
|
+
return genesisId("RelatedTo");
|
|
108
|
+
},
|
|
109
|
+
// Helper functions
|
|
110
|
+
types: () => genesisId("Types"),
|
|
111
|
+
partOf: () => genesisId("PartOf"),
|
|
112
|
+
relatedTo: () => genesisId("RelatedTo"),
|
|
113
|
+
};
|
|
114
|
+
// =============================================================================
|
|
115
|
+
// LANGUAGES (Section 7.4)
|
|
116
|
+
// =============================================================================
|
|
117
|
+
/**
|
|
118
|
+
* Well-known language IDs from the Genesis Space.
|
|
119
|
+
*/
|
|
120
|
+
export const languages = {
|
|
121
|
+
get ENGLISH() {
|
|
122
|
+
return languageId("en");
|
|
123
|
+
},
|
|
124
|
+
get SPANISH() {
|
|
125
|
+
return languageId("es");
|
|
126
|
+
},
|
|
127
|
+
get FRENCH() {
|
|
128
|
+
return languageId("fr");
|
|
129
|
+
},
|
|
130
|
+
get GERMAN() {
|
|
131
|
+
return languageId("de");
|
|
132
|
+
},
|
|
133
|
+
get CHINESE() {
|
|
134
|
+
return languageId("zh");
|
|
135
|
+
},
|
|
136
|
+
get CHINESE_HANS() {
|
|
137
|
+
return languageId("zh-hans");
|
|
138
|
+
},
|
|
139
|
+
get CHINESE_HANT() {
|
|
140
|
+
return languageId("zh-hant");
|
|
141
|
+
},
|
|
142
|
+
get JAPANESE() {
|
|
143
|
+
return languageId("ja");
|
|
144
|
+
},
|
|
145
|
+
get KOREAN() {
|
|
146
|
+
return languageId("ko");
|
|
147
|
+
},
|
|
148
|
+
get PORTUGUESE() {
|
|
149
|
+
return languageId("pt");
|
|
150
|
+
},
|
|
151
|
+
get ITALIAN() {
|
|
152
|
+
return languageId("it");
|
|
153
|
+
},
|
|
154
|
+
get RUSSIAN() {
|
|
155
|
+
return languageId("ru");
|
|
156
|
+
},
|
|
157
|
+
get ARABIC() {
|
|
158
|
+
return languageId("ar");
|
|
159
|
+
},
|
|
160
|
+
get HINDI() {
|
|
161
|
+
return languageId("hi");
|
|
162
|
+
},
|
|
163
|
+
// Helper functions
|
|
164
|
+
english: () => languageId("en"),
|
|
165
|
+
spanish: () => languageId("es"),
|
|
166
|
+
french: () => languageId("fr"),
|
|
167
|
+
german: () => languageId("de"),
|
|
168
|
+
chinese: () => languageId("zh"),
|
|
169
|
+
chineseHans: () => languageId("zh-hans"),
|
|
170
|
+
chineseHant: () => languageId("zh-hant"),
|
|
171
|
+
japanese: () => languageId("ja"),
|
|
172
|
+
korean: () => languageId("ko"),
|
|
173
|
+
portuguese: () => languageId("pt"),
|
|
174
|
+
italian: () => languageId("it"),
|
|
175
|
+
russian: () => languageId("ru"),
|
|
176
|
+
arabic: () => languageId("ar"),
|
|
177
|
+
hindi: () => languageId("hi"),
|
|
178
|
+
/**
|
|
179
|
+
* Returns the language ID for the given BCP 47 code.
|
|
180
|
+
*/
|
|
181
|
+
fromCode: (code) => languageId(code),
|
|
182
|
+
};
|
|
183
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/genesis/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GRC-20 v2 TypeScript SDK
|
|
3
|
+
*
|
|
4
|
+
* Binary property graph format for decentralized knowledge networks.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
export * from "./types/index.js";
|
|
9
|
+
export * from "./builder/index.js";
|
|
10
|
+
export * from "./util/index.js";
|
|
11
|
+
export { genesisId, languageId, properties, types, relationTypes, languages, } from "./genesis/index.js";
|
|
12
|
+
export { encodeEdit, decodeEdit, type EncodeOptions, Writer, Reader, DecodeError, } from "./codec/index.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,cAAc,kBAAkB,CAAC;AAGjC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,iBAAiB,CAAC;AAGhC,OAAO,EACL,SAAS,EACT,UAAU,EACV,UAAU,EACV,KAAK,EACL,aAAa,EACb,SAAS,GACV,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,UAAU,EACV,UAAU,EACV,KAAK,aAAa,EAClB,MAAM,EACN,MAAM,EACN,WAAW,GACZ,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GRC-20 v2 TypeScript SDK
|
|
3
|
+
*
|
|
4
|
+
* Binary property graph format for decentralized knowledge networks.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
// Types
|
|
9
|
+
export * from "./types/index.js";
|
|
10
|
+
// Builders
|
|
11
|
+
export * from "./builder/index.js";
|
|
12
|
+
// Utilities
|
|
13
|
+
export * from "./util/index.js";
|
|
14
|
+
// Genesis (well-known IDs)
|
|
15
|
+
export { genesisId, languageId, properties, types, relationTypes, languages, } from "./genesis/index.js";
|
|
16
|
+
// Codec
|
|
17
|
+
export { encodeEdit, decodeEdit, Writer, Reader, DecodeError, } from "./codec/index.js";
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,QAAQ;AACR,cAAc,kBAAkB,CAAC;AAEjC,WAAW;AACX,cAAc,oBAAoB,CAAC;AAEnC,YAAY;AACZ,cAAc,iBAAiB,CAAC;AAEhC,2BAA2B;AAC3B,OAAO,EACL,SAAS,EACT,UAAU,EACV,UAAU,EACV,KAAK,EACL,aAAa,EACb,SAAS,GACV,MAAM,oBAAoB,CAAC;AAE5B,QAAQ;AACR,OAAO,EACL,UAAU,EACV,UAAU,EAEV,MAAM,EACN,MAAM,EACN,WAAW,GACZ,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic.test.d.ts","sourceRoot":"","sources":["../../src/test/basic.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { EditBuilder, encodeEdit, decodeEdit, parseId, formatId, randomId, derivedUuid, derivedUuidFromString, uniqueRelationId, relationEntityId, properties, relationTypes, languages, DataType, idsEqual, } from "../index.js";
|
|
3
|
+
describe("ID utilities", () => {
|
|
4
|
+
it("formatId produces 32 hex chars", () => {
|
|
5
|
+
const id = randomId();
|
|
6
|
+
const hex = formatId(id);
|
|
7
|
+
expect(hex.length).toBe(32);
|
|
8
|
+
expect(/^[0-9a-f]{32}$/.test(hex)).toBe(true);
|
|
9
|
+
});
|
|
10
|
+
it("parseId roundtrips with formatId", () => {
|
|
11
|
+
const id = randomId();
|
|
12
|
+
const hex = formatId(id);
|
|
13
|
+
const parsed = parseId(hex);
|
|
14
|
+
expect(parsed).toBeDefined();
|
|
15
|
+
expect(idsEqual(id, parsed)).toBe(true);
|
|
16
|
+
});
|
|
17
|
+
it("parseId accepts hyphens", () => {
|
|
18
|
+
const withHyphens = "550e8400-e29b-41d4-a716-446655440000";
|
|
19
|
+
const withoutHyphens = "550e8400e29b41d4a716446655440000";
|
|
20
|
+
const id1 = parseId(withHyphens);
|
|
21
|
+
const id2 = parseId(withoutHyphens);
|
|
22
|
+
expect(id1).toBeDefined();
|
|
23
|
+
expect(id2).toBeDefined();
|
|
24
|
+
expect(idsEqual(id1, id2)).toBe(true);
|
|
25
|
+
});
|
|
26
|
+
it("derivedUuid is deterministic", () => {
|
|
27
|
+
const input = new TextEncoder().encode("test");
|
|
28
|
+
const id1 = derivedUuid(input);
|
|
29
|
+
const id2 = derivedUuid(input);
|
|
30
|
+
expect(idsEqual(id1, id2)).toBe(true);
|
|
31
|
+
});
|
|
32
|
+
it("derivedUuid produces valid UUIDv8", () => {
|
|
33
|
+
const id = derivedUuidFromString("test");
|
|
34
|
+
// Version 8 in byte 6
|
|
35
|
+
expect((id[6] & 0xf0)).toBe(0x80);
|
|
36
|
+
// Variant in byte 8
|
|
37
|
+
expect((id[8] & 0xc0)).toBe(0x80);
|
|
38
|
+
});
|
|
39
|
+
it("uniqueRelationId is deterministic", () => {
|
|
40
|
+
const from = parseId("11111111111111111111111111111111");
|
|
41
|
+
const to = parseId("22222222222222222222222222222222");
|
|
42
|
+
const type = parseId("33333333333333333333333333333333");
|
|
43
|
+
const id1 = uniqueRelationId(from, to, type);
|
|
44
|
+
const id2 = uniqueRelationId(from, to, type);
|
|
45
|
+
expect(idsEqual(id1, id2)).toBe(true);
|
|
46
|
+
// Different from -> different id
|
|
47
|
+
const id3 = uniqueRelationId(to, from, type);
|
|
48
|
+
expect(idsEqual(id1, id3)).toBe(false);
|
|
49
|
+
});
|
|
50
|
+
it("relationEntityId differs from relation id", () => {
|
|
51
|
+
const relationId = randomId();
|
|
52
|
+
const entityId = relationEntityId(relationId);
|
|
53
|
+
expect(idsEqual(relationId, entityId)).toBe(false);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe("Genesis IDs", () => {
|
|
57
|
+
it("properties.NAME is deterministic", () => {
|
|
58
|
+
const id1 = properties.NAME;
|
|
59
|
+
const id2 = properties.name();
|
|
60
|
+
expect(idsEqual(id1, id2)).toBe(true);
|
|
61
|
+
});
|
|
62
|
+
it("relationTypes.TYPES is deterministic", () => {
|
|
63
|
+
const id1 = relationTypes.TYPES;
|
|
64
|
+
const id2 = relationTypes.types();
|
|
65
|
+
expect(idsEqual(id1, id2)).toBe(true);
|
|
66
|
+
});
|
|
67
|
+
it("languages.ENGLISH is deterministic", () => {
|
|
68
|
+
const id1 = languages.ENGLISH;
|
|
69
|
+
const id2 = languages.english();
|
|
70
|
+
const id3 = languages.fromCode("en");
|
|
71
|
+
expect(idsEqual(id1, id2)).toBe(true);
|
|
72
|
+
expect(idsEqual(id1, id3)).toBe(true);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
describe("EditBuilder", () => {
|
|
76
|
+
it("creates a simple edit with entity", () => {
|
|
77
|
+
const editId = randomId();
|
|
78
|
+
const entityId = randomId();
|
|
79
|
+
const authorId = randomId();
|
|
80
|
+
const edit = new EditBuilder(editId)
|
|
81
|
+
.setName("Test Edit")
|
|
82
|
+
.addAuthor(authorId)
|
|
83
|
+
.setCreatedAt(1234567890n)
|
|
84
|
+
.createEntity(entityId, (e) => e.text(properties.name(), "Alice", undefined)
|
|
85
|
+
.int64(parseId("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), 42n, undefined))
|
|
86
|
+
.build();
|
|
87
|
+
expect(idsEqual(edit.id, editId)).toBe(true);
|
|
88
|
+
expect(edit.name).toBe("Test Edit");
|
|
89
|
+
expect(edit.authors.length).toBe(1);
|
|
90
|
+
expect(edit.createdAt).toBe(1234567890n);
|
|
91
|
+
expect(edit.ops.length).toBe(1);
|
|
92
|
+
expect(edit.ops[0].type).toBe("createEntity");
|
|
93
|
+
});
|
|
94
|
+
it("creates relations in unique and many mode", () => {
|
|
95
|
+
const editId = randomId();
|
|
96
|
+
const from = randomId();
|
|
97
|
+
const to = randomId();
|
|
98
|
+
const relId = randomId();
|
|
99
|
+
const edit = new EditBuilder(editId)
|
|
100
|
+
.createEmptyEntity(from)
|
|
101
|
+
.createEmptyEntity(to)
|
|
102
|
+
.createRelationUnique(from, to, relationTypes.types())
|
|
103
|
+
.createRelationMany(relId, from, to, relationTypes.partOf())
|
|
104
|
+
.build();
|
|
105
|
+
expect(edit.ops.length).toBe(4);
|
|
106
|
+
expect(edit.ops[2].type).toBe("createRelation");
|
|
107
|
+
expect(edit.ops[3].type).toBe("createRelation");
|
|
108
|
+
const rel1 = edit.ops[2];
|
|
109
|
+
const rel2 = edit.ops[3];
|
|
110
|
+
if (rel1.type === "createRelation" && rel2.type === "createRelation") {
|
|
111
|
+
expect(rel1.idMode.type).toBe("unique");
|
|
112
|
+
expect(rel2.idMode.type).toBe("many");
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
it("creates update entity operations", () => {
|
|
116
|
+
const editId = randomId();
|
|
117
|
+
const entityId = randomId();
|
|
118
|
+
const propId = randomId();
|
|
119
|
+
const edit = new EditBuilder(editId)
|
|
120
|
+
.updateEntity(entityId, (u) => u.setText(propId, "New value", undefined)
|
|
121
|
+
.unsetAll(properties.description()))
|
|
122
|
+
.build();
|
|
123
|
+
expect(edit.ops.length).toBe(1);
|
|
124
|
+
expect(edit.ops[0].type).toBe("updateEntity");
|
|
125
|
+
const op = edit.ops[0];
|
|
126
|
+
if (op.type === "updateEntity") {
|
|
127
|
+
expect(op.setProperties.length).toBe(1);
|
|
128
|
+
expect(op.unsetProperties.length).toBe(1);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
describe("Codec", () => {
|
|
133
|
+
it("encodes and decodes a simple edit", () => {
|
|
134
|
+
const editId = randomId();
|
|
135
|
+
const entityId = randomId();
|
|
136
|
+
const edit = new EditBuilder(editId)
|
|
137
|
+
.setName("Test Edit")
|
|
138
|
+
.setCreatedAt(1234567890000000n)
|
|
139
|
+
.createEntity(entityId, (e) => e.text(properties.name(), "Alice", undefined)
|
|
140
|
+
.bool(parseId("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"), true))
|
|
141
|
+
.build();
|
|
142
|
+
const encoded = encodeEdit(edit);
|
|
143
|
+
expect(encoded.length).toBeGreaterThan(0);
|
|
144
|
+
// Check magic bytes
|
|
145
|
+
expect(String.fromCharCode(...encoded.slice(0, 4))).toBe("GRC2");
|
|
146
|
+
const decoded = decodeEdit(encoded);
|
|
147
|
+
expect(idsEqual(decoded.id, edit.id)).toBe(true);
|
|
148
|
+
expect(decoded.name).toBe(edit.name);
|
|
149
|
+
expect(decoded.createdAt).toBe(edit.createdAt);
|
|
150
|
+
expect(decoded.ops.length).toBe(edit.ops.length);
|
|
151
|
+
});
|
|
152
|
+
it("encodes and decodes all value types", () => {
|
|
153
|
+
const editId = randomId();
|
|
154
|
+
const entityId = randomId();
|
|
155
|
+
const edit = new EditBuilder(editId)
|
|
156
|
+
.setName("All Types Test")
|
|
157
|
+
.createEntity(entityId, (e) => e.bool(parseId("11111111111111111111111111111111"), true)
|
|
158
|
+
.int64(parseId("22222222222222222222222222222222"), -42n, undefined)
|
|
159
|
+
.float64(parseId("33333333333333333333333333333333"), 3.14159, undefined)
|
|
160
|
+
.text(parseId("44444444444444444444444444444444"), "Hello World", undefined)
|
|
161
|
+
.bytes(parseId("55555555555555555555555555555555"), new Uint8Array([1, 2, 3, 4]))
|
|
162
|
+
.timestamp(parseId("66666666666666666666666666666666"), 1704067200000000n)
|
|
163
|
+
.date(parseId("77777777777777777777777777777777"), "2024-01-15")
|
|
164
|
+
.point(parseId("88888888888888888888888888888888"), 40.7128, -74.006))
|
|
165
|
+
.build();
|
|
166
|
+
const encoded = encodeEdit(edit);
|
|
167
|
+
const decoded = decodeEdit(encoded);
|
|
168
|
+
expect(decoded.ops.length).toBe(1);
|
|
169
|
+
const op = decoded.ops[0];
|
|
170
|
+
expect(op.type).toBe("createEntity");
|
|
171
|
+
if (op.type === "createEntity") {
|
|
172
|
+
expect(op.values.length).toBe(8);
|
|
173
|
+
// Check each value type
|
|
174
|
+
const boolVal = op.values.find(v => v.value.type === "bool");
|
|
175
|
+
expect(boolVal?.value).toEqual({ type: "bool", value: true });
|
|
176
|
+
const intVal = op.values.find(v => v.value.type === "int64");
|
|
177
|
+
expect(intVal?.value).toEqual({ type: "int64", value: -42n, unit: undefined });
|
|
178
|
+
const floatVal = op.values.find(v => v.value.type === "float64");
|
|
179
|
+
if (floatVal?.value.type === "float64") {
|
|
180
|
+
expect(floatVal.value.value).toBeCloseTo(3.14159, 5);
|
|
181
|
+
}
|
|
182
|
+
const textVal = op.values.find(v => v.value.type === "text");
|
|
183
|
+
expect(textVal?.value).toEqual({ type: "text", value: "Hello World", language: undefined });
|
|
184
|
+
const pointVal = op.values.find(v => v.value.type === "point");
|
|
185
|
+
if (pointVal?.value.type === "point") {
|
|
186
|
+
expect(pointVal.value.lat).toBeCloseTo(40.7128, 4);
|
|
187
|
+
expect(pointVal.value.lon).toBeCloseTo(-74.006, 3);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
it("encodes and decodes relations", () => {
|
|
192
|
+
const editId = randomId();
|
|
193
|
+
const from = randomId();
|
|
194
|
+
const to = randomId();
|
|
195
|
+
const edit = new EditBuilder(editId)
|
|
196
|
+
.createEmptyEntity(from)
|
|
197
|
+
.createEmptyEntity(to)
|
|
198
|
+
.createRelationUnique(from, to, relationTypes.types())
|
|
199
|
+
.build();
|
|
200
|
+
const encoded = encodeEdit(edit);
|
|
201
|
+
const decoded = decodeEdit(encoded);
|
|
202
|
+
expect(decoded.ops.length).toBe(3);
|
|
203
|
+
const rel = decoded.ops[2];
|
|
204
|
+
expect(rel.type).toBe("createRelation");
|
|
205
|
+
if (rel.type === "createRelation") {
|
|
206
|
+
expect(rel.idMode.type).toBe("unique");
|
|
207
|
+
expect(idsEqual(rel.from, from)).toBe(true);
|
|
208
|
+
expect(idsEqual(rel.to, to)).toBe(true);
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
it("encodes and decodes update/delete/restore operations", () => {
|
|
212
|
+
const editId = randomId();
|
|
213
|
+
const entityId = randomId();
|
|
214
|
+
const relationId = randomId();
|
|
215
|
+
const propId = randomId();
|
|
216
|
+
const edit = new EditBuilder(editId)
|
|
217
|
+
.updateEntity(entityId, (u) => u.setText(propId, "Updated", undefined))
|
|
218
|
+
.deleteEntity(entityId)
|
|
219
|
+
.restoreEntity(entityId)
|
|
220
|
+
.updateRelation(relationId, "abc")
|
|
221
|
+
.deleteRelation(relationId)
|
|
222
|
+
.restoreRelation(relationId)
|
|
223
|
+
.build();
|
|
224
|
+
const encoded = encodeEdit(edit);
|
|
225
|
+
const decoded = decodeEdit(encoded);
|
|
226
|
+
expect(decoded.ops.length).toBe(6);
|
|
227
|
+
expect(decoded.ops[0].type).toBe("updateEntity");
|
|
228
|
+
expect(decoded.ops[1].type).toBe("deleteEntity");
|
|
229
|
+
expect(decoded.ops[2].type).toBe("restoreEntity");
|
|
230
|
+
expect(decoded.ops[3].type).toBe("updateRelation");
|
|
231
|
+
expect(decoded.ops[4].type).toBe("deleteRelation");
|
|
232
|
+
expect(decoded.ops[5].type).toBe("restoreRelation");
|
|
233
|
+
const updateRel = decoded.ops[3];
|
|
234
|
+
if (updateRel.type === "updateRelation") {
|
|
235
|
+
expect(updateRel.position).toBe("abc");
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
it("encodes and decodes createProperty", () => {
|
|
239
|
+
const editId = randomId();
|
|
240
|
+
const propId = randomId();
|
|
241
|
+
const edit = new EditBuilder(editId)
|
|
242
|
+
.createProperty(propId, DataType.Text)
|
|
243
|
+
.build();
|
|
244
|
+
const encoded = encodeEdit(edit);
|
|
245
|
+
const decoded = decodeEdit(encoded);
|
|
246
|
+
expect(decoded.ops.length).toBe(1);
|
|
247
|
+
expect(decoded.ops[0].type).toBe("createProperty");
|
|
248
|
+
const op = decoded.ops[0];
|
|
249
|
+
if (op.type === "createProperty") {
|
|
250
|
+
expect(idsEqual(op.id, propId)).toBe(true);
|
|
251
|
+
expect(op.dataType).toBe(DataType.Text);
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
it("canonical encoding is deterministic", () => {
|
|
255
|
+
const editId = parseId("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
256
|
+
const entityId = parseId("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
|
|
257
|
+
const edit = new EditBuilder(editId)
|
|
258
|
+
.setName("Canonical Test")
|
|
259
|
+
.setCreatedAt(1000000n)
|
|
260
|
+
.createEntity(entityId, (e) => e.text(properties.name(), "Test", undefined))
|
|
261
|
+
.build();
|
|
262
|
+
const encoded1 = encodeEdit(edit, { canonical: true });
|
|
263
|
+
const encoded2 = encodeEdit(edit, { canonical: true });
|
|
264
|
+
expect(encoded1.length).toBe(encoded2.length);
|
|
265
|
+
for (let i = 0; i < encoded1.length; i++) {
|
|
266
|
+
expect(encoded1[i]).toBe(encoded2[i]);
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
//# sourceMappingURL=basic.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic.test.js","sourceRoot":"","sources":["../../src/test/basic.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { Id } from "./id.js";
|
|
2
|
+
import type { Op } from "./op.js";
|
|
3
|
+
import type { DataType } from "./value.js";
|
|
4
|
+
/**
|
|
5
|
+
* A batch of operations with metadata (spec Section 4.1).
|
|
6
|
+
*
|
|
7
|
+
* Edits are standalone patches. They contain no parent references;
|
|
8
|
+
* ordering is provided by on-chain governance.
|
|
9
|
+
*/
|
|
10
|
+
export interface Edit {
|
|
11
|
+
/** The edit's unique identifier. */
|
|
12
|
+
id: Id;
|
|
13
|
+
/** Optional human-readable name (may be empty string). */
|
|
14
|
+
name: string;
|
|
15
|
+
/** Author entity IDs. */
|
|
16
|
+
authors: Id[];
|
|
17
|
+
/** Creation timestamp in microseconds since Unix epoch (metadata only). */
|
|
18
|
+
createdAt: bigint;
|
|
19
|
+
/** Operations in this edit. */
|
|
20
|
+
ops: Op[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Wire-format dictionaries for encoding/decoding.
|
|
24
|
+
*
|
|
25
|
+
* These dictionaries map between full IDs and compact indices within an edit.
|
|
26
|
+
*/
|
|
27
|
+
export interface WireDictionaries {
|
|
28
|
+
/** Properties dictionary: (ID, DataType) pairs. */
|
|
29
|
+
properties: Array<{
|
|
30
|
+
id: Id;
|
|
31
|
+
dataType: DataType;
|
|
32
|
+
}>;
|
|
33
|
+
/** Relation type IDs. */
|
|
34
|
+
relationTypes: Id[];
|
|
35
|
+
/** Language entity IDs for localized TEXT values. */
|
|
36
|
+
languages: Id[];
|
|
37
|
+
/** Unit entity IDs for numerical values. */
|
|
38
|
+
units: Id[];
|
|
39
|
+
/** Object IDs (entities and relations). */
|
|
40
|
+
objects: Id[];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Creates empty wire dictionaries.
|
|
44
|
+
*/
|
|
45
|
+
export declare function createWireDictionaries(): WireDictionaries;
|
|
46
|
+
//# sourceMappingURL=edit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../src/types/edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,WAAW,IAAI;IACnB,oCAAoC;IACpC,EAAE,EAAE,EAAE,CAAC;IACP,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,OAAO,EAAE,EAAE,EAAE,CAAC;IACd,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,GAAG,EAAE,EAAE,EAAE,CAAC;CACX;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mDAAmD;IACnD,UAAU,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,EAAE,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;IAClD,yBAAyB;IACzB,aAAa,EAAE,EAAE,EAAE,CAAC;IACpB,qDAAqD;IACrD,SAAS,EAAE,EAAE,EAAE,CAAC;IAChB,4CAA4C;IAC5C,KAAK,EAAE,EAAE,EAAE,CAAC;IACZ,2CAA2C;IAC3C,OAAO,EAAE,EAAE,EAAE,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAQzD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/types/edit.ts"],"names":[],"mappings":"AAyCA;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,UAAU,EAAE,EAAE;QACd,aAAa,EAAE,EAAE;QACjB,SAAS,EAAE,EAAE;QACb,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A 16-byte UUID identifier.
|
|
3
|
+
*
|
|
4
|
+
* This is the universal identifier type for entities, relations, properties,
|
|
5
|
+
* types, spaces, authors, and all other objects in GRC-20.
|
|
6
|
+
*/
|
|
7
|
+
export type Id = Uint8Array & {
|
|
8
|
+
readonly __brand: unique symbol;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Creates an Id from a Uint8Array.
|
|
12
|
+
* @throws Error if the array is not exactly 16 bytes.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createId(bytes: Uint8Array): Id;
|
|
15
|
+
/**
|
|
16
|
+
* Creates a copy of an Id.
|
|
17
|
+
*/
|
|
18
|
+
export declare function copyId(id: Id): Id;
|
|
19
|
+
/**
|
|
20
|
+
* The nil/zero UUID.
|
|
21
|
+
*/
|
|
22
|
+
export declare const NIL_ID: Id;
|
|
23
|
+
/**
|
|
24
|
+
* Compares two Ids for equality.
|
|
25
|
+
*/
|
|
26
|
+
export declare function idsEqual(a: Id, b: Id): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Compares two Ids lexicographically.
|
|
29
|
+
* Returns negative if a < b, 0 if a === b, positive if a > b.
|
|
30
|
+
*/
|
|
31
|
+
export declare function compareIds(a: Id, b: Id): number;
|
|
32
|
+
//# sourceMappingURL=id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/types/id.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,EAAE,GAAG,UAAU,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,MAAM,CAAA;CAAE,CAAC;AAElE;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,EAAE,CAK9C;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAIjC;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,EAAiC,CAAC;AAEvD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,OAAO,CAK9C;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,CAO/C"}
|