@geoprotocol/grc-20 0.1.1 → 0.1.5
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 +5 -13
- package/dist/builder/edit.d.ts.map +1 -1
- package/dist/builder/edit.js +10 -31
- package/dist/builder/edit.js.map +1 -1
- package/dist/builder/entity.d.ts +13 -5
- package/dist/builder/entity.d.ts.map +1 -1
- package/dist/builder/entity.js +27 -7
- package/dist/builder/entity.js.map +1 -1
- package/dist/builder/index.d.ts +1 -0
- package/dist/builder/index.d.ts.map +1 -1
- package/dist/builder/index.js +1 -0
- package/dist/builder/index.js.map +1 -1
- package/dist/builder/relation.d.ts +14 -8
- package/dist/builder/relation.d.ts.map +1 -1
- package/dist/builder/relation.js +28 -14
- package/dist/builder/relation.js.map +1 -1
- package/dist/builder/update-relation.d.ts +64 -0
- package/dist/builder/update-relation.d.ts.map +1 -0
- package/dist/builder/update-relation.js +107 -0
- package/dist/builder/update-relation.js.map +1 -0
- package/dist/builder/update.d.ts +22 -14
- package/dist/builder/update.d.ts.map +1 -1
- package/dist/builder/update.js +52 -32
- package/dist/builder/update.js.map +1 -1
- package/dist/codec/compression.d.ts +132 -0
- package/dist/codec/compression.d.ts.map +1 -0
- package/dist/codec/compression.js +244 -0
- package/dist/codec/compression.js.map +1 -0
- package/dist/codec/edit.js +5 -8
- package/dist/codec/edit.js.map +1 -1
- package/dist/codec/index.d.ts +1 -0
- package/dist/codec/index.d.ts.map +1 -1
- package/dist/codec/index.js +9 -0
- package/dist/codec/index.js.map +1 -1
- package/dist/codec/op.d.ts.map +1 -1
- package/dist/codec/op.js +192 -81
- package/dist/codec/op.js.map +1 -1
- package/dist/codec/value.d.ts.map +1 -1
- package/dist/codec/value.js +92 -16
- package/dist/codec/value.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/test/basic.test.js +154 -31
- package/dist/test/basic.test.js.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/op.d.ts +46 -27
- package/dist/types/op.d.ts.map +1 -1
- package/dist/types/op.js +3 -3
- package/dist/types/op.js.map +1 -1
- package/dist/types/value.d.ts +17 -8
- package/dist/types/value.d.ts.map +1 -1
- package/dist/types/value.js +19 -10
- package/dist/types/value.js.map +1 -1
- package/package.json +5 -1
- package/readme.md +76 -12
package/dist/types/op.d.ts
CHANGED
|
@@ -1,29 +1,24 @@
|
|
|
1
1
|
import type { Id } from "./id.js";
|
|
2
|
-
import type {
|
|
2
|
+
import type { PropertyValue } from "./value.js";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*/
|
|
6
|
-
export type RelationIdMode = {
|
|
7
|
-
type: "unique";
|
|
8
|
-
} | {
|
|
9
|
-
type: "many";
|
|
10
|
-
id: Id;
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* Specifies which language slot to clear for an UnsetProperty.
|
|
4
|
+
* Specifies which language slot to clear for an UnsetValue.
|
|
14
5
|
*/
|
|
15
6
|
export type UnsetLanguage = {
|
|
16
7
|
type: "all";
|
|
17
8
|
} | {
|
|
18
|
-
type: "
|
|
9
|
+
type: "english";
|
|
19
10
|
} | {
|
|
20
11
|
type: "specific";
|
|
21
12
|
language: Id;
|
|
22
13
|
};
|
|
23
14
|
/**
|
|
24
|
-
*
|
|
15
|
+
* Fields that can be unset on a relation.
|
|
16
|
+
*/
|
|
17
|
+
export type UnsetRelationField = "fromSpace" | "fromVersion" | "toSpace" | "toVersion" | "position";
|
|
18
|
+
/**
|
|
19
|
+
* Specifies a value to unset, with optional language targeting (TEXT only).
|
|
25
20
|
*/
|
|
26
|
-
export interface
|
|
21
|
+
export interface UnsetValue {
|
|
27
22
|
property: Id;
|
|
28
23
|
language: UnsetLanguage;
|
|
29
24
|
}
|
|
@@ -42,14 +37,14 @@ export interface CreateEntity {
|
|
|
42
37
|
* Updates an existing entity (spec Section 3.2).
|
|
43
38
|
*
|
|
44
39
|
* Application order within op:
|
|
45
|
-
* 1.
|
|
46
|
-
* 2.
|
|
40
|
+
* 1. unset
|
|
41
|
+
* 2. set
|
|
47
42
|
*/
|
|
48
43
|
export interface UpdateEntity {
|
|
49
44
|
type: "updateEntity";
|
|
50
45
|
id: Id;
|
|
51
|
-
|
|
52
|
-
|
|
46
|
+
set: PropertyValue[];
|
|
47
|
+
unset: UnsetValue[];
|
|
53
48
|
}
|
|
54
49
|
/**
|
|
55
50
|
* Deletes an entity (spec Section 3.2).
|
|
@@ -72,10 +67,14 @@ export interface RestoreEntity {
|
|
|
72
67
|
*/
|
|
73
68
|
export interface CreateRelation {
|
|
74
69
|
type: "createRelation";
|
|
75
|
-
|
|
70
|
+
id: Id;
|
|
76
71
|
relationType: Id;
|
|
77
72
|
from: Id;
|
|
73
|
+
/** If true, `from` is a value ref ID (inline encoding). */
|
|
74
|
+
fromIsValueRef?: boolean;
|
|
78
75
|
to: Id;
|
|
76
|
+
/** If true, `to` is a value ref ID (inline encoding). */
|
|
77
|
+
toIsValueRef?: boolean;
|
|
79
78
|
fromSpace?: Id;
|
|
80
79
|
fromVersion?: Id;
|
|
81
80
|
toSpace?: Id;
|
|
@@ -84,14 +83,24 @@ export interface CreateRelation {
|
|
|
84
83
|
position?: string;
|
|
85
84
|
}
|
|
86
85
|
/**
|
|
87
|
-
* Updates a relation's
|
|
86
|
+
* Updates a relation's mutable fields (spec Section 3.3).
|
|
88
87
|
*
|
|
89
|
-
*
|
|
88
|
+
* The structural fields (entity, type, from, to) are immutable.
|
|
89
|
+
* The space pins, version pins, and position can be updated or unset.
|
|
90
|
+
*
|
|
91
|
+
* Application order within op:
|
|
92
|
+
* 1. unset
|
|
93
|
+
* 2. set fields
|
|
90
94
|
*/
|
|
91
95
|
export interface UpdateRelation {
|
|
92
96
|
type: "updateRelation";
|
|
93
97
|
id: Id;
|
|
98
|
+
fromSpace?: Id;
|
|
99
|
+
fromVersion?: Id;
|
|
100
|
+
toSpace?: Id;
|
|
101
|
+
toVersion?: Id;
|
|
94
102
|
position?: string;
|
|
103
|
+
unset: UnsetRelationField[];
|
|
95
104
|
}
|
|
96
105
|
/**
|
|
97
106
|
* Deletes a relation (spec Section 3.3).
|
|
@@ -108,17 +117,27 @@ export interface RestoreRelation {
|
|
|
108
117
|
id: Id;
|
|
109
118
|
}
|
|
110
119
|
/**
|
|
111
|
-
* Creates a
|
|
120
|
+
* Creates a referenceable ID for a value slot (spec Section 3.4).
|
|
121
|
+
*
|
|
122
|
+
* This enables relations to target specific values for provenance,
|
|
123
|
+
* confidence, attribution, or other qualifiers.
|
|
112
124
|
*/
|
|
113
|
-
export interface
|
|
114
|
-
type: "
|
|
125
|
+
export interface CreateValueRef {
|
|
126
|
+
type: "createValueRef";
|
|
115
127
|
id: Id;
|
|
116
|
-
|
|
128
|
+
/** The entity holding the value. */
|
|
129
|
+
entity: Id;
|
|
130
|
+
/** The property of the value. */
|
|
131
|
+
property: Id;
|
|
132
|
+
/** The language (TEXT values only). */
|
|
133
|
+
language?: Id;
|
|
134
|
+
/** The space containing the value (default: current space). */
|
|
135
|
+
space?: Id;
|
|
117
136
|
}
|
|
118
137
|
/**
|
|
119
138
|
* An atomic operation that modifies graph state (spec Section 3.1).
|
|
120
139
|
*/
|
|
121
|
-
export type Op = CreateEntity | UpdateEntity | DeleteEntity | RestoreEntity | CreateRelation | UpdateRelation | DeleteRelation | RestoreRelation |
|
|
140
|
+
export type Op = CreateEntity | UpdateEntity | DeleteEntity | RestoreEntity | CreateRelation | UpdateRelation | DeleteRelation | RestoreRelation | CreateValueRef;
|
|
122
141
|
/**
|
|
123
142
|
* Op type codes for wire encoding.
|
|
124
143
|
*/
|
|
@@ -130,7 +149,7 @@ export declare const OP_TYPE_CREATE_RELATION = 5;
|
|
|
130
149
|
export declare const OP_TYPE_UPDATE_RELATION = 6;
|
|
131
150
|
export declare const OP_TYPE_DELETE_RELATION = 7;
|
|
132
151
|
export declare const OP_TYPE_RESTORE_RELATION = 8;
|
|
133
|
-
export declare const
|
|
152
|
+
export declare const OP_TYPE_CREATE_VALUE_REF = 9;
|
|
134
153
|
/**
|
|
135
154
|
* Returns the op type code for wire encoding.
|
|
136
155
|
*/
|
package/dist/types/op.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"op.d.ts","sourceRoot":"","sources":["../../src/types/op.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"op.d.ts","sourceRoot":"","sources":["../../src/types/op.ts"],"names":[],"mappings":"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"}
|
package/dist/types/op.js
CHANGED
|
@@ -9,7 +9,7 @@ export const OP_TYPE_CREATE_RELATION = 5;
|
|
|
9
9
|
export const OP_TYPE_UPDATE_RELATION = 6;
|
|
10
10
|
export const OP_TYPE_DELETE_RELATION = 7;
|
|
11
11
|
export const OP_TYPE_RESTORE_RELATION = 8;
|
|
12
|
-
export const
|
|
12
|
+
export const OP_TYPE_CREATE_VALUE_REF = 9;
|
|
13
13
|
/**
|
|
14
14
|
* Returns the op type code for wire encoding.
|
|
15
15
|
*/
|
|
@@ -31,8 +31,8 @@ export function opTypeCode(op) {
|
|
|
31
31
|
return OP_TYPE_DELETE_RELATION;
|
|
32
32
|
case "restoreRelation":
|
|
33
33
|
return OP_TYPE_RESTORE_RELATION;
|
|
34
|
-
case "
|
|
35
|
-
return
|
|
34
|
+
case "createValueRef":
|
|
35
|
+
return OP_TYPE_CREATE_VALUE_REF;
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
/**
|
package/dist/types/op.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"op.js","sourceRoot":"","sources":["../../src/types/op.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"op.js","sourceRoot":"","sources":["../../src/types/op.ts"],"names":[],"mappings":"AAoKA;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACxC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAC1C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,EAAM;IAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,cAAc;YACjB,OAAO,qBAAqB,CAAC;QAC/B,KAAK,cAAc;YACjB,OAAO,qBAAqB,CAAC;QAC/B,KAAK,cAAc;YACjB,OAAO,qBAAqB,CAAC;QAC/B,KAAK,eAAe;YAClB,OAAO,sBAAsB,CAAC;QAChC,KAAK,gBAAgB;YACnB,OAAO,uBAAuB,CAAC;QACjC,KAAK,gBAAgB;YACnB,OAAO,uBAAuB,CAAC;QACjC,KAAK,gBAAgB;YACnB,OAAO,uBAAuB,CAAC;QACjC,KAAK,iBAAiB;YACpB,OAAO,wBAAwB,CAAC;QAClC,KAAK,gBAAgB;YACnB,OAAO,wBAAwB,CAAC;IACpC,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,0BAA0B,CAAC;IACpC,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACpB,OAAO,gCAAgC,CAAC;IAC1C,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,OAAO,wCAAwC,CAAC,EAAE,CAAC;QACrD,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/types/value.d.ts
CHANGED
|
@@ -9,10 +9,12 @@ export declare enum DataType {
|
|
|
9
9
|
Decimal = 4,
|
|
10
10
|
Text = 5,
|
|
11
11
|
Bytes = 6,
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
Date = 7,
|
|
13
|
+
Time = 8,
|
|
14
|
+
Datetime = 9,
|
|
15
|
+
Schedule = 10,
|
|
16
|
+
Point = 11,
|
|
17
|
+
Embedding = 12
|
|
16
18
|
}
|
|
17
19
|
/**
|
|
18
20
|
* Embedding sub-types (spec Section 2.4).
|
|
@@ -65,16 +67,23 @@ export type Value = {
|
|
|
65
67
|
} | {
|
|
66
68
|
type: "bytes";
|
|
67
69
|
value: Uint8Array;
|
|
68
|
-
} | {
|
|
69
|
-
type: "timestamp";
|
|
70
|
-
value: bigint;
|
|
71
70
|
} | {
|
|
72
71
|
type: "date";
|
|
73
72
|
value: string;
|
|
73
|
+
} | {
|
|
74
|
+
type: "time";
|
|
75
|
+
value: string;
|
|
76
|
+
} | {
|
|
77
|
+
type: "datetime";
|
|
78
|
+
value: string;
|
|
79
|
+
} | {
|
|
80
|
+
type: "schedule";
|
|
81
|
+
value: string;
|
|
74
82
|
} | {
|
|
75
83
|
type: "point";
|
|
76
|
-
lat: number;
|
|
77
84
|
lon: number;
|
|
85
|
+
lat: number;
|
|
86
|
+
alt?: number;
|
|
78
87
|
} | {
|
|
79
88
|
type: "embedding";
|
|
80
89
|
subType: EmbeddingSubType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value.d.ts","sourceRoot":"","sources":["../../src/types/value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAElC;;GAEG;AACH,oBAAY,QAAQ;IAClB,IAAI,IAAI;IACR,KAAK,IAAI;IACT,OAAO,IAAI;IACX,OAAO,IAAI;IACX,IAAI,IAAI;IACR,KAAK,IAAI;IACT,
|
|
1
|
+
{"version":3,"file":"value.d.ts","sourceRoot":"","sources":["../../src/types/value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAElC;;GAEG;AACH,oBAAY,QAAQ;IAClB,IAAI,IAAI;IACR,KAAK,IAAI;IACT,OAAO,IAAI;IACX,OAAO,IAAI;IACX,IAAI,IAAI;IACR,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,QAAQ,IAAI;IACZ,QAAQ,KAAK;IACb,KAAK,KAAK;IACV,SAAS,KAAK;CACf;AAED;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,6DAA6D;IAC7D,OAAO,IAAI;IACX,4CAA4C;IAC5C,IAAI,IAAI;IACR,sDAAsD;IACtD,MAAM,IAAI;CACX;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CASrF;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAEvC;;GAEG;AACH,MAAM,MAAM,KAAK,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,EAAE,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,EAAE,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAC;IAAC,IAAI,CAAC,EAAE,EAAE,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAErF;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,CA2BpD;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,EAAE,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,EAAE,CAAC;IACP,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAwD9D"}
|
package/dist/types/value.js
CHANGED
|
@@ -9,10 +9,12 @@ export var DataType;
|
|
|
9
9
|
DataType[DataType["Decimal"] = 4] = "Decimal";
|
|
10
10
|
DataType[DataType["Text"] = 5] = "Text";
|
|
11
11
|
DataType[DataType["Bytes"] = 6] = "Bytes";
|
|
12
|
-
DataType[DataType["
|
|
13
|
-
DataType[DataType["
|
|
14
|
-
DataType[DataType["
|
|
15
|
-
DataType[DataType["
|
|
12
|
+
DataType[DataType["Date"] = 7] = "Date";
|
|
13
|
+
DataType[DataType["Time"] = 8] = "Time";
|
|
14
|
+
DataType[DataType["Datetime"] = 9] = "Datetime";
|
|
15
|
+
DataType[DataType["Schedule"] = 10] = "Schedule";
|
|
16
|
+
DataType[DataType["Point"] = 11] = "Point";
|
|
17
|
+
DataType[DataType["Embedding"] = 12] = "Embedding";
|
|
16
18
|
})(DataType || (DataType = {}));
|
|
17
19
|
/**
|
|
18
20
|
* Embedding sub-types (spec Section 2.4).
|
|
@@ -56,10 +58,14 @@ export function valueDataType(value) {
|
|
|
56
58
|
return DataType.Text;
|
|
57
59
|
case "bytes":
|
|
58
60
|
return DataType.Bytes;
|
|
59
|
-
case "timestamp":
|
|
60
|
-
return DataType.Timestamp;
|
|
61
61
|
case "date":
|
|
62
62
|
return DataType.Date;
|
|
63
|
+
case "time":
|
|
64
|
+
return DataType.Time;
|
|
65
|
+
case "datetime":
|
|
66
|
+
return DataType.Datetime;
|
|
67
|
+
case "schedule":
|
|
68
|
+
return DataType.Schedule;
|
|
63
69
|
case "point":
|
|
64
70
|
return DataType.Point;
|
|
65
71
|
case "embedding":
|
|
@@ -93,15 +99,18 @@ export function validateValue(value) {
|
|
|
93
99
|
break;
|
|
94
100
|
}
|
|
95
101
|
case "point":
|
|
96
|
-
if (value.lat < -90 || value.lat > 90) {
|
|
97
|
-
return "latitude out of range [-90, +90]";
|
|
98
|
-
}
|
|
99
102
|
if (value.lon < -180 || value.lon > 180) {
|
|
100
103
|
return "longitude out of range [-180, +180]";
|
|
101
104
|
}
|
|
102
|
-
if (
|
|
105
|
+
if (value.lat < -90 || value.lat > 90) {
|
|
106
|
+
return "latitude out of range [-90, +90]";
|
|
107
|
+
}
|
|
108
|
+
if (Number.isNaN(value.lon) || Number.isNaN(value.lat)) {
|
|
103
109
|
return "NaN is not allowed in Point coordinates";
|
|
104
110
|
}
|
|
111
|
+
if (value.alt !== undefined && Number.isNaN(value.alt)) {
|
|
112
|
+
return "NaN is not allowed in Point altitude";
|
|
113
|
+
}
|
|
105
114
|
break;
|
|
106
115
|
case "embedding": {
|
|
107
116
|
const expected = embeddingBytesForDims(value.subType, value.dims);
|
package/dist/types/value.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value.js","sourceRoot":"","sources":["../../src/types/value.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"value.js","sourceRoot":"","sources":["../../src/types/value.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geoprotocol/grc-20",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "GRC-20 TypeScript library for binary property graph encoding/decoding",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"test:browser": "vitest run --config vitest.browser.config.ts",
|
|
42
42
|
"test:all": "npm run test && npm run test:browser",
|
|
43
43
|
"bundle:analyze": "node scripts/bundle-analyze.js",
|
|
44
|
+
"benchmark": "node scripts/benchmark.js",
|
|
44
45
|
"demo": "npx serve .",
|
|
45
46
|
"lint": "eslint src --ext .ts",
|
|
46
47
|
"prepublishOnly": "npm run build"
|
|
@@ -54,6 +55,9 @@
|
|
|
54
55
|
],
|
|
55
56
|
"author": "Geo Browser",
|
|
56
57
|
"license": "MIT",
|
|
58
|
+
"dependencies": {
|
|
59
|
+
"@bokuweb/zstd-wasm": "^0.0.27"
|
|
60
|
+
},
|
|
57
61
|
"devDependencies": {
|
|
58
62
|
"@types/node": "^20.11.0",
|
|
59
63
|
"@vitest/browser": "^1.2.0",
|
package/readme.md
CHANGED
|
@@ -42,7 +42,8 @@ const decoded = decodeEdit(bytes);
|
|
|
42
42
|
|
|
43
43
|
- **Type-safe API** - Full TypeScript definitions
|
|
44
44
|
- **Builder pattern** - Fluent API for constructing edits
|
|
45
|
-
- **Binary codec** - Pure TypeScript encoder/decoder
|
|
45
|
+
- **Binary codec** - Pure TypeScript encoder/decoder
|
|
46
|
+
- **Zstd compression** - Optional WASM-based compression (lazy-loaded)
|
|
46
47
|
- **Tree-shakeable** - Separate entry points for minimal bundles
|
|
47
48
|
- **Cross-platform** - Works in Node.js and browsers
|
|
48
49
|
|
|
@@ -50,24 +51,30 @@ const decoded = decodeEdit(bytes);
|
|
|
50
51
|
|
|
51
52
|
| Entry Point | Gzipped |
|
|
52
53
|
|-------------|---------|
|
|
53
|
-
| Full library | ~
|
|
54
|
+
| Full library | ~12 KB |
|
|
54
55
|
| Types only | ~1.4 KB |
|
|
55
56
|
| Builder only | ~1.2 KB |
|
|
56
|
-
| Codec only | ~
|
|
57
|
-
| Genesis IDs | ~1.
|
|
57
|
+
| Codec only | ~8 KB |
|
|
58
|
+
| Genesis IDs | ~1.7 KB |
|
|
58
59
|
| Utilities | ~1.6 KB |
|
|
60
|
+
| Zstd WASM (lazy) | ~81 KB |
|
|
61
|
+
|
|
62
|
+
The Zstd WASM module is only loaded when compression functions are used.
|
|
59
63
|
|
|
60
64
|
### Lazy Loading
|
|
61
65
|
|
|
62
66
|
For optimal initial load, import the codec separately:
|
|
63
67
|
|
|
64
68
|
```typescript
|
|
65
|
-
// Initial load (~4.
|
|
69
|
+
// Initial load (~4.4 KB gzipped)
|
|
66
70
|
import { EditBuilder, randomId, properties } from "@geoprotocol/grc-20/builder";
|
|
67
71
|
import { properties } from "@geoprotocol/grc-20/genesis";
|
|
68
72
|
|
|
69
|
-
// Lazy load codec when needed (~
|
|
73
|
+
// Lazy load codec when needed (~8 KB gzipped)
|
|
70
74
|
const { encodeEdit } = await import("@geoprotocol/grc-20/codec");
|
|
75
|
+
|
|
76
|
+
// WASM only loads if you use compression (~81 KB additional)
|
|
77
|
+
const { encodeEditAuto } = await import("@geoprotocol/grc-20/codec");
|
|
71
78
|
```
|
|
72
79
|
|
|
73
80
|
## API Reference
|
|
@@ -111,7 +118,7 @@ const edit = new EditBuilder(editId)
|
|
|
111
118
|
.bytes(propId, new Uint8Array([1, 2, 3]))
|
|
112
119
|
.point(propId, 40.7128, -74.006)
|
|
113
120
|
.date(propId, "2024-01-15")
|
|
114
|
-
.
|
|
121
|
+
.datetime(propId, "2024-01-15T10:30:00Z")
|
|
115
122
|
)
|
|
116
123
|
.updateEntity(entityId, u => u
|
|
117
124
|
.setText(propId, "new value", undefined)
|
|
@@ -119,10 +126,13 @@ const edit = new EditBuilder(editId)
|
|
|
119
126
|
)
|
|
120
127
|
.deleteEntity(entityId)
|
|
121
128
|
.restoreEntity(entityId)
|
|
122
|
-
.
|
|
123
|
-
|
|
129
|
+
.createRelation(r => r
|
|
130
|
+
.id(relationId)
|
|
131
|
+
.from(fromId)
|
|
132
|
+
.to(toId)
|
|
133
|
+
.relationType(relationTypeId)
|
|
134
|
+
)
|
|
124
135
|
.deleteRelation(relationId)
|
|
125
|
-
.createProperty(propId, DataType.Text)
|
|
126
136
|
.build();
|
|
127
137
|
```
|
|
128
138
|
|
|
@@ -131,14 +141,65 @@ const edit = new EditBuilder(editId)
|
|
|
131
141
|
```typescript
|
|
132
142
|
import { encodeEdit, decodeEdit } from "@geoprotocol/grc-20";
|
|
133
143
|
|
|
134
|
-
// Encode
|
|
144
|
+
// Encode (uncompressed)
|
|
135
145
|
const bytes = encodeEdit(edit);
|
|
136
146
|
const bytesCanonical = encodeEdit(edit, { canonical: true });
|
|
137
147
|
|
|
138
|
-
// Decode
|
|
148
|
+
// Decode (uncompressed)
|
|
139
149
|
const edit = decodeEdit(bytes);
|
|
140
150
|
```
|
|
141
151
|
|
|
152
|
+
### Compression
|
|
153
|
+
|
|
154
|
+
The library supports Zstd compression via a lazy-loaded WASM module. The WASM is only downloaded when compression functions are first used.
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
import {
|
|
158
|
+
preloadCompression,
|
|
159
|
+
isCompressionReady,
|
|
160
|
+
encodeEditAuto,
|
|
161
|
+
decodeEditAuto,
|
|
162
|
+
encodeEditCompressed,
|
|
163
|
+
decodeEditCompressed,
|
|
164
|
+
} from "@geoprotocol/grc-20";
|
|
165
|
+
|
|
166
|
+
// Preload WASM on app startup (recommended)
|
|
167
|
+
await preloadCompression();
|
|
168
|
+
|
|
169
|
+
// Check if compression is ready
|
|
170
|
+
if (isCompressionReady()) {
|
|
171
|
+
console.log("Compression ready!");
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Auto encode/decode (recommended for most use cases)
|
|
175
|
+
// Compresses if data > 256 bytes, otherwise uncompressed
|
|
176
|
+
const data = await encodeEditAuto(edit);
|
|
177
|
+
const decoded = await decodeEditAuto(data);
|
|
178
|
+
|
|
179
|
+
// Control compression threshold
|
|
180
|
+
const data = await encodeEditAuto(edit, { threshold: 0 }); // always compress
|
|
181
|
+
const data = await encodeEditAuto(edit, { threshold: 1024 }); // compress if > 1KB
|
|
182
|
+
const data = await encodeEditAuto(edit, { threshold: Infinity }); // never compress
|
|
183
|
+
|
|
184
|
+
// Explicit compressed encode/decode
|
|
185
|
+
const compressed = await encodeEditCompressed(edit);
|
|
186
|
+
const decoded = await decodeEditCompressed(compressed);
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
#### Browser Usage (without bundler)
|
|
190
|
+
|
|
191
|
+
If using native ES modules without a bundler, add an import map for the WASM dependency:
|
|
192
|
+
|
|
193
|
+
```html
|
|
194
|
+
<script type="importmap">
|
|
195
|
+
{
|
|
196
|
+
"imports": {
|
|
197
|
+
"@bokuweb/zstd-wasm": "https://esm.sh/@bokuweb/zstd-wasm@0.0.27"
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
</script>
|
|
201
|
+
```
|
|
202
|
+
|
|
142
203
|
### ID Utilities
|
|
143
204
|
|
|
144
205
|
```typescript
|
|
@@ -214,6 +275,9 @@ npm run test:all
|
|
|
214
275
|
# Analyze bundle sizes
|
|
215
276
|
npm run bundle:analyze
|
|
216
277
|
|
|
278
|
+
# Run performance benchmark
|
|
279
|
+
npm run benchmark
|
|
280
|
+
|
|
217
281
|
# Run browser demo
|
|
218
282
|
npm run demo
|
|
219
283
|
# Then open http://localhost:3000/examples/browser-demo.html
|