@atproto/lexicon 0.3.3 → 0.4.1-rc.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/CHANGELOG.md +42 -0
- package/dist/blob-refs.d.ts +5 -4
- package/dist/blob-refs.d.ts.map +1 -0
- package/dist/blob-refs.js +82 -0
- package/dist/blob-refs.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -15097
- package/dist/index.js.map +1 -7
- package/dist/lexicons.d.ts +54 -2
- package/dist/lexicons.d.ts.map +1 -0
- package/dist/lexicons.js +242 -0
- package/dist/lexicons.js.map +1 -0
- package/dist/serialize.d.ts +1 -0
- package/dist/serialize.d.ts.map +1 -0
- package/dist/serialize.js +80 -0
- package/dist/serialize.js.map +1 -0
- package/dist/types.d.ts +4864 -4103
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +333 -0
- package/dist/types.js.map +1 -0
- package/dist/util.d.ts +3 -4
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +65 -0
- package/dist/util.js.map +1 -0
- package/dist/validation.d.ts +1 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +49 -0
- package/dist/validation.js.map +1 -0
- package/dist/validators/blob.d.ts +1 -0
- package/dist/validators/blob.d.ts.map +1 -0
- package/dist/validators/blob.js +17 -0
- package/dist/validators/blob.js.map +1 -0
- package/dist/validators/complex.d.ts +3 -1
- package/dist/validators/complex.d.ts.map +1 -0
- package/dist/validators/complex.js +196 -0
- package/dist/validators/complex.js.map +1 -0
- package/dist/validators/formats.d.ts +3 -0
- package/dist/validators/formats.d.ts.map +1 -0
- package/dist/validators/formats.js +151 -0
- package/dist/validators/formats.js.map +1 -0
- package/dist/validators/primitives.d.ts +1 -0
- package/dist/validators/primitives.d.ts.map +1 -0
- package/dist/validators/primitives.js +293 -0
- package/dist/validators/primitives.js.map +1 -0
- package/dist/validators/xrpc.d.ts +1 -0
- package/dist/validators/xrpc.d.ts.map +1 -0
- package/dist/validators/xrpc.js +67 -0
- package/dist/validators/xrpc.js.map +1 -0
- package/jest.config.js +4 -3
- package/package.json +10 -9
- package/src/lexicons.ts +18 -3
- package/src/types.ts +2 -0
- package/src/util.ts +2 -95
- package/src/validation.ts +18 -5
- package/src/validators/complex.ts +102 -11
- package/src/validators/formats.ts +28 -0
- package/src/validators/primitives.ts +4 -0
- package/tsconfig.build.json +6 -2
- package/tsconfig.json +3 -10
- package/tsconfig.tests.json +7 -0
- package/build.js +0 -14
package/dist/lexicons.d.ts
CHANGED
|
@@ -1,20 +1,72 @@
|
|
|
1
1
|
import { LexiconDoc, LexUserType, ValidationResult } from './types';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* A collection of compiled lexicons.
|
|
4
|
+
*/
|
|
5
|
+
export declare class Lexicons implements Iterable<LexiconDoc> {
|
|
3
6
|
docs: Map<string, LexiconDoc>;
|
|
4
7
|
defs: Map<string, LexUserType>;
|
|
5
|
-
constructor(docs?: LexiconDoc
|
|
8
|
+
constructor(docs?: Iterable<LexiconDoc>);
|
|
9
|
+
/**
|
|
10
|
+
* @example clone a lexicon:
|
|
11
|
+
* ```ts
|
|
12
|
+
* const clone = new Lexicons(originalLexicon)
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @example get docs array:
|
|
16
|
+
* ```ts
|
|
17
|
+
* const docs = Array.from(lexicons)
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
[Symbol.iterator](): Iterator<LexiconDoc>;
|
|
21
|
+
/**
|
|
22
|
+
* Add a lexicon doc.
|
|
23
|
+
*/
|
|
6
24
|
add(doc: LexiconDoc): void;
|
|
25
|
+
/**
|
|
26
|
+
* Remove a lexicon doc.
|
|
27
|
+
*/
|
|
7
28
|
remove(uri: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Get a lexicon doc.
|
|
31
|
+
*/
|
|
8
32
|
get(uri: string): LexiconDoc | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* Get a definition.
|
|
35
|
+
*/
|
|
9
36
|
getDef(uri: string): LexUserType | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Get a def, throw if not found. Throws on not found.
|
|
39
|
+
*/
|
|
10
40
|
getDefOrThrow<T extends LexUserType['type'] = LexUserType['type']>(uri: string, types?: readonly T[]): Extract<LexUserType, {
|
|
11
41
|
type: T;
|
|
12
42
|
}>;
|
|
43
|
+
/**
|
|
44
|
+
* Validate a record or object.
|
|
45
|
+
*/
|
|
13
46
|
validate(lexUri: string, value: unknown): ValidationResult;
|
|
47
|
+
/**
|
|
48
|
+
* Validate a record and throw on any error.
|
|
49
|
+
*/
|
|
14
50
|
assertValidRecord(lexUri: string, value: unknown): unknown;
|
|
51
|
+
/**
|
|
52
|
+
* Validate xrpc query params and throw on any error.
|
|
53
|
+
*/
|
|
15
54
|
assertValidXrpcParams(lexUri: string, value: unknown): unknown;
|
|
55
|
+
/**
|
|
56
|
+
* Validate xrpc input body and throw on any error.
|
|
57
|
+
*/
|
|
16
58
|
assertValidXrpcInput(lexUri: string, value: unknown): unknown;
|
|
59
|
+
/**
|
|
60
|
+
* Validate xrpc output body and throw on any error.
|
|
61
|
+
*/
|
|
17
62
|
assertValidXrpcOutput(lexUri: string, value: unknown): unknown;
|
|
63
|
+
/**
|
|
64
|
+
* Validate xrpc subscription message and throw on any error.
|
|
65
|
+
*/
|
|
18
66
|
assertValidXrpcMessage<T = unknown>(lexUri: string, value: unknown): T;
|
|
67
|
+
/**
|
|
68
|
+
* Resolve a lex uri given a ref
|
|
69
|
+
*/
|
|
19
70
|
resolveLexUri(lexUri: string, ref: string): string;
|
|
20
71
|
}
|
|
72
|
+
//# sourceMappingURL=lexicons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexicons.d.ts","sourceRoot":"","sources":["../src/lexicons.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAEV,WAAW,EAGX,gBAAgB,EAIjB,MAAM,SAAS,CAAA;AAWhB;;GAEG;AACH,qBAAa,QAAS,YAAW,QAAQ,CAAC,UAAU,CAAC;IACnD,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAY;IACzC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAY;gBAE9B,IAAI,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC;IAQvC;;;;;;;;;;OAUG;IACH,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC;IAIzC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;IAiB1B;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM;IAYlB;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAKxC;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAK5C;;OAEG;IACH,aAAa,CAAC,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,EAC/D,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,SAAS,CAAC,EAAE,GACnB,OAAO,CAAC,WAAW,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC;IAiBpC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,gBAAgB;IAgB1D;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAkBhD;;OAEG;IACH,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAUpD;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAMnD;;OAEG;IACH,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAMpD;;OAEG;IACH,sBAAsB,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC;IAMtE;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAI1C"}
|
package/dist/lexicons.js
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.Lexicons = void 0;
|
|
27
|
+
const types_1 = require("./types");
|
|
28
|
+
const validation_1 = require("./validation");
|
|
29
|
+
const util_1 = require("./util");
|
|
30
|
+
const ComplexValidators = __importStar(require("./validators/complex"));
|
|
31
|
+
/**
|
|
32
|
+
* A collection of compiled lexicons.
|
|
33
|
+
*/
|
|
34
|
+
class Lexicons {
|
|
35
|
+
constructor(docs) {
|
|
36
|
+
Object.defineProperty(this, "docs", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
configurable: true,
|
|
39
|
+
writable: true,
|
|
40
|
+
value: new Map()
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(this, "defs", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
configurable: true,
|
|
45
|
+
writable: true,
|
|
46
|
+
value: new Map()
|
|
47
|
+
});
|
|
48
|
+
if (docs) {
|
|
49
|
+
for (const doc of docs) {
|
|
50
|
+
this.add(doc);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* @example clone a lexicon:
|
|
56
|
+
* ```ts
|
|
57
|
+
* const clone = new Lexicons(originalLexicon)
|
|
58
|
+
* ```
|
|
59
|
+
*
|
|
60
|
+
* @example get docs array:
|
|
61
|
+
* ```ts
|
|
62
|
+
* const docs = Array.from(lexicons)
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
[Symbol.iterator]() {
|
|
66
|
+
return this.docs.values();
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Add a lexicon doc.
|
|
70
|
+
*/
|
|
71
|
+
add(doc) {
|
|
72
|
+
const uri = (0, util_1.toLexUri)(doc.id);
|
|
73
|
+
if (this.docs.has(uri)) {
|
|
74
|
+
throw new Error(`${uri} has already been registered`);
|
|
75
|
+
}
|
|
76
|
+
// WARNING
|
|
77
|
+
// mutates the object
|
|
78
|
+
// -prf
|
|
79
|
+
resolveRefUris(doc, uri);
|
|
80
|
+
this.docs.set(uri, doc);
|
|
81
|
+
for (const [defUri, def] of iterDefs(doc)) {
|
|
82
|
+
this.defs.set(defUri, def);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Remove a lexicon doc.
|
|
87
|
+
*/
|
|
88
|
+
remove(uri) {
|
|
89
|
+
uri = (0, util_1.toLexUri)(uri);
|
|
90
|
+
const doc = this.docs.get(uri);
|
|
91
|
+
if (!doc) {
|
|
92
|
+
throw new Error(`Unable to remove "${uri}": does not exist`);
|
|
93
|
+
}
|
|
94
|
+
for (const [defUri, _def] of iterDefs(doc)) {
|
|
95
|
+
this.defs.delete(defUri);
|
|
96
|
+
}
|
|
97
|
+
this.docs.delete(uri);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get a lexicon doc.
|
|
101
|
+
*/
|
|
102
|
+
get(uri) {
|
|
103
|
+
uri = (0, util_1.toLexUri)(uri);
|
|
104
|
+
return this.docs.get(uri);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get a definition.
|
|
108
|
+
*/
|
|
109
|
+
getDef(uri) {
|
|
110
|
+
uri = (0, util_1.toLexUri)(uri);
|
|
111
|
+
return this.defs.get(uri);
|
|
112
|
+
}
|
|
113
|
+
getDefOrThrow(uri, types) {
|
|
114
|
+
const def = this.getDef(uri);
|
|
115
|
+
if (!def) {
|
|
116
|
+
throw new types_1.LexiconDefNotFoundError(`Lexicon not found: ${uri}`);
|
|
117
|
+
}
|
|
118
|
+
if (types && !types.includes(def.type)) {
|
|
119
|
+
throw new types_1.InvalidLexiconError(`Not a ${types.join(' or ')} lexicon: ${uri}`);
|
|
120
|
+
}
|
|
121
|
+
return def;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Validate a record or object.
|
|
125
|
+
*/
|
|
126
|
+
validate(lexUri, value) {
|
|
127
|
+
lexUri = (0, util_1.toLexUri)(lexUri);
|
|
128
|
+
const def = this.getDefOrThrow(lexUri, ['record', 'object']);
|
|
129
|
+
if (!(0, types_1.isObj)(value)) {
|
|
130
|
+
throw new types_1.ValidationError(`Value must be an object`);
|
|
131
|
+
}
|
|
132
|
+
if (def.type === 'record') {
|
|
133
|
+
return ComplexValidators.object(this, 'Record', def.record, value);
|
|
134
|
+
}
|
|
135
|
+
else if (def.type === 'object') {
|
|
136
|
+
return ComplexValidators.object(this, 'Object', def, value);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
// shouldn't happen
|
|
140
|
+
throw new types_1.InvalidLexiconError('Definition must be a record or object');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Validate a record and throw on any error.
|
|
145
|
+
*/
|
|
146
|
+
assertValidRecord(lexUri, value) {
|
|
147
|
+
lexUri = (0, util_1.toLexUri)(lexUri);
|
|
148
|
+
const def = this.getDefOrThrow(lexUri, ['record']);
|
|
149
|
+
if (!(0, types_1.isObj)(value)) {
|
|
150
|
+
throw new types_1.ValidationError(`Record must be an object`);
|
|
151
|
+
}
|
|
152
|
+
if (!(0, types_1.hasProp)(value, '$type') || typeof value.$type !== 'string') {
|
|
153
|
+
throw new types_1.ValidationError(`Record/$type must be a string`);
|
|
154
|
+
}
|
|
155
|
+
const $type = value.$type || '';
|
|
156
|
+
if ((0, util_1.toLexUri)($type) !== lexUri) {
|
|
157
|
+
throw new types_1.ValidationError(`Invalid $type: must be ${lexUri}, got ${$type}`);
|
|
158
|
+
}
|
|
159
|
+
return (0, validation_1.assertValidRecord)(this, def, value);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Validate xrpc query params and throw on any error.
|
|
163
|
+
*/
|
|
164
|
+
assertValidXrpcParams(lexUri, value) {
|
|
165
|
+
lexUri = (0, util_1.toLexUri)(lexUri);
|
|
166
|
+
const def = this.getDefOrThrow(lexUri, [
|
|
167
|
+
'query',
|
|
168
|
+
'procedure',
|
|
169
|
+
'subscription',
|
|
170
|
+
]);
|
|
171
|
+
return (0, validation_1.assertValidXrpcParams)(this, def, value);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Validate xrpc input body and throw on any error.
|
|
175
|
+
*/
|
|
176
|
+
assertValidXrpcInput(lexUri, value) {
|
|
177
|
+
lexUri = (0, util_1.toLexUri)(lexUri);
|
|
178
|
+
const def = this.getDefOrThrow(lexUri, ['procedure']);
|
|
179
|
+
return (0, validation_1.assertValidXrpcInput)(this, def, value);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Validate xrpc output body and throw on any error.
|
|
183
|
+
*/
|
|
184
|
+
assertValidXrpcOutput(lexUri, value) {
|
|
185
|
+
lexUri = (0, util_1.toLexUri)(lexUri);
|
|
186
|
+
const def = this.getDefOrThrow(lexUri, ['query', 'procedure']);
|
|
187
|
+
return (0, validation_1.assertValidXrpcOutput)(this, def, value);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Validate xrpc subscription message and throw on any error.
|
|
191
|
+
*/
|
|
192
|
+
assertValidXrpcMessage(lexUri, value) {
|
|
193
|
+
lexUri = (0, util_1.toLexUri)(lexUri);
|
|
194
|
+
const def = this.getDefOrThrow(lexUri, ['subscription']);
|
|
195
|
+
return (0, validation_1.assertValidXrpcMessage)(this, def, value);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Resolve a lex uri given a ref
|
|
199
|
+
*/
|
|
200
|
+
resolveLexUri(lexUri, ref) {
|
|
201
|
+
lexUri = (0, util_1.toLexUri)(lexUri);
|
|
202
|
+
return (0, util_1.toLexUri)(ref, lexUri);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
exports.Lexicons = Lexicons;
|
|
206
|
+
function* iterDefs(doc) {
|
|
207
|
+
for (const defId in doc.defs) {
|
|
208
|
+
yield [`lex:${doc.id}#${defId}`, doc.defs[defId]];
|
|
209
|
+
if (defId === 'main') {
|
|
210
|
+
yield [`lex:${doc.id}`, doc.defs[defId]];
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// WARNING
|
|
215
|
+
// this method mutates objects
|
|
216
|
+
// -prf
|
|
217
|
+
function resolveRefUris(obj, baseUri) {
|
|
218
|
+
for (const k in obj) {
|
|
219
|
+
if (obj.type === 'ref') {
|
|
220
|
+
obj.ref = (0, util_1.toLexUri)(obj.ref, baseUri);
|
|
221
|
+
}
|
|
222
|
+
else if (obj.type === 'union') {
|
|
223
|
+
obj.refs = obj.refs.map((ref) => (0, util_1.toLexUri)(ref, baseUri));
|
|
224
|
+
}
|
|
225
|
+
else if (Array.isArray(obj[k])) {
|
|
226
|
+
obj[k] = obj[k].map((item) => {
|
|
227
|
+
if (typeof item === 'string') {
|
|
228
|
+
return item.startsWith('#') ? (0, util_1.toLexUri)(item, baseUri) : item;
|
|
229
|
+
}
|
|
230
|
+
else if (item && typeof item === 'object') {
|
|
231
|
+
return resolveRefUris(item, baseUri);
|
|
232
|
+
}
|
|
233
|
+
return item;
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
else if (obj[k] && typeof obj[k] === 'object') {
|
|
237
|
+
obj[k] = resolveRefUris(obj[k], baseUri);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return obj;
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=lexicons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexicons.js","sourceRoot":"","sources":["../src/lexicons.ts"],"names":[],"mappings":"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"}
|
package/dist/serialize.d.ts
CHANGED
|
@@ -10,3 +10,4 @@ export declare const lexToJson: (val: LexValue) => JsonValue;
|
|
|
10
10
|
export declare const stringifyLex: (val: LexValue) => string;
|
|
11
11
|
export declare const jsonToLex: (val: JsonValue) => LexValue;
|
|
12
12
|
export declare const jsonStringToLex: (val: string) => LexValue;
|
|
13
|
+
//# sourceMappingURL=serialize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../src/serialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EAGT,SAAS,EACV,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAA;AAElD,MAAM,MAAM,QAAQ,GAChB,SAAS,GACT,OAAO,GACP,KAAK,CAAC,QAAQ,CAAC,GACf;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;CAAE,CAAA;AAE/B,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AAKjD,eAAO,MAAM,SAAS,QAAS,QAAQ,KAAG,SAwBzC,CAAA;AAED,eAAO,MAAM,SAAS,QAAS,SAAS,KAAG,QA6B1C,CAAA;AAED,eAAO,MAAM,SAAS,QAAS,QAAQ,KAAG,SAEzC,CAAA;AAED,eAAO,MAAM,YAAY,QAAS,QAAQ,KAAG,MAE5C,CAAA;AAED,eAAO,MAAM,SAAS,QAAS,SAAS,KAAG,QAE1C,CAAA;AAED,eAAO,MAAM,eAAe,QAAS,MAAM,KAAG,QAE7C,CAAA"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.jsonStringToLex = exports.jsonToLex = exports.stringifyLex = exports.lexToJson = exports.ipldToLex = exports.lexToIpld = void 0;
|
|
4
|
+
const common_web_1 = require("@atproto/common-web");
|
|
5
|
+
const cid_1 = require("multiformats/cid");
|
|
6
|
+
const blob_refs_1 = require("./blob-refs");
|
|
7
|
+
// @NOTE avoiding use of check.is() here only because it makes
|
|
8
|
+
// these implementations slow, and they often live in hot paths.
|
|
9
|
+
const lexToIpld = (val) => {
|
|
10
|
+
// walk arrays
|
|
11
|
+
if (Array.isArray(val)) {
|
|
12
|
+
return val.map((item) => (0, exports.lexToIpld)(item));
|
|
13
|
+
}
|
|
14
|
+
// objects
|
|
15
|
+
if (val && typeof val === 'object') {
|
|
16
|
+
// convert blobs, leaving the original encoding so that we don't change CIDs on re-encode
|
|
17
|
+
if (val instanceof blob_refs_1.BlobRef) {
|
|
18
|
+
return val.original;
|
|
19
|
+
}
|
|
20
|
+
// retain cids & bytes
|
|
21
|
+
if (cid_1.CID.asCID(val) || val instanceof Uint8Array) {
|
|
22
|
+
return val;
|
|
23
|
+
}
|
|
24
|
+
// walk plain objects
|
|
25
|
+
const toReturn = {};
|
|
26
|
+
for (const key of Object.keys(val)) {
|
|
27
|
+
toReturn[key] = (0, exports.lexToIpld)(val[key]);
|
|
28
|
+
}
|
|
29
|
+
return toReturn;
|
|
30
|
+
}
|
|
31
|
+
// pass through
|
|
32
|
+
return val;
|
|
33
|
+
};
|
|
34
|
+
exports.lexToIpld = lexToIpld;
|
|
35
|
+
const ipldToLex = (val) => {
|
|
36
|
+
// map arrays
|
|
37
|
+
if (Array.isArray(val)) {
|
|
38
|
+
return val.map((item) => (0, exports.ipldToLex)(item));
|
|
39
|
+
}
|
|
40
|
+
// objects
|
|
41
|
+
if (val && typeof val === 'object') {
|
|
42
|
+
// convert blobs, using hints to avoid expensive is() check
|
|
43
|
+
if ((val['$type'] === 'blob' ||
|
|
44
|
+
(typeof val['cid'] === 'string' &&
|
|
45
|
+
typeof val['mimeType'] === 'string')) &&
|
|
46
|
+
common_web_1.check.is(val, blob_refs_1.jsonBlobRef)) {
|
|
47
|
+
return blob_refs_1.BlobRef.fromJsonRef(val);
|
|
48
|
+
}
|
|
49
|
+
// retain cids, bytes
|
|
50
|
+
if (cid_1.CID.asCID(val) || val instanceof Uint8Array) {
|
|
51
|
+
return val;
|
|
52
|
+
}
|
|
53
|
+
// map plain objects
|
|
54
|
+
const toReturn = {};
|
|
55
|
+
for (const key of Object.keys(val)) {
|
|
56
|
+
toReturn[key] = (0, exports.ipldToLex)(val[key]);
|
|
57
|
+
}
|
|
58
|
+
return toReturn;
|
|
59
|
+
}
|
|
60
|
+
// pass through
|
|
61
|
+
return val;
|
|
62
|
+
};
|
|
63
|
+
exports.ipldToLex = ipldToLex;
|
|
64
|
+
const lexToJson = (val) => {
|
|
65
|
+
return (0, common_web_1.ipldToJson)((0, exports.lexToIpld)(val));
|
|
66
|
+
};
|
|
67
|
+
exports.lexToJson = lexToJson;
|
|
68
|
+
const stringifyLex = (val) => {
|
|
69
|
+
return JSON.stringify((0, exports.lexToJson)(val));
|
|
70
|
+
};
|
|
71
|
+
exports.stringifyLex = stringifyLex;
|
|
72
|
+
const jsonToLex = (val) => {
|
|
73
|
+
return (0, exports.ipldToLex)((0, common_web_1.jsonToIpld)(val));
|
|
74
|
+
};
|
|
75
|
+
exports.jsonToLex = jsonToLex;
|
|
76
|
+
const jsonStringToLex = (val) => {
|
|
77
|
+
return (0, exports.jsonToLex)(JSON.parse(val));
|
|
78
|
+
};
|
|
79
|
+
exports.jsonStringToLex = jsonStringToLex;
|
|
80
|
+
//# sourceMappingURL=serialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../src/serialize.ts"],"names":[],"mappings":"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"}
|