@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
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateOneOf = exports.object = exports.array = exports.validate = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
const util_1 = require("../util");
|
|
6
|
+
const blob_1 = require("./blob");
|
|
7
|
+
const primitives_1 = require("./primitives");
|
|
8
|
+
function validate(lexicons, path, def, value) {
|
|
9
|
+
switch (def.type) {
|
|
10
|
+
case 'boolean':
|
|
11
|
+
return (0, primitives_1.boolean)(lexicons, path, def, value);
|
|
12
|
+
case 'integer':
|
|
13
|
+
return (0, primitives_1.integer)(lexicons, path, def, value);
|
|
14
|
+
case 'string':
|
|
15
|
+
return (0, primitives_1.string)(lexicons, path, def, value);
|
|
16
|
+
case 'bytes':
|
|
17
|
+
return (0, primitives_1.bytes)(lexicons, path, def, value);
|
|
18
|
+
case 'cid-link':
|
|
19
|
+
return (0, primitives_1.cidLink)(lexicons, path, def, value);
|
|
20
|
+
case 'unknown':
|
|
21
|
+
return (0, primitives_1.unknown)(lexicons, path, def, value);
|
|
22
|
+
case 'object':
|
|
23
|
+
return object(lexicons, path, def, value);
|
|
24
|
+
case 'array':
|
|
25
|
+
return array(lexicons, path, def, value);
|
|
26
|
+
case 'blob':
|
|
27
|
+
return (0, blob_1.blob)(lexicons, path, def, value);
|
|
28
|
+
default:
|
|
29
|
+
return {
|
|
30
|
+
success: false,
|
|
31
|
+
error: new types_1.ValidationError(`Unexpected lexicon type: ${def.type}`),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.validate = validate;
|
|
36
|
+
function array(lexicons, path, def, value) {
|
|
37
|
+
// type
|
|
38
|
+
if (!Array.isArray(value)) {
|
|
39
|
+
return {
|
|
40
|
+
success: false,
|
|
41
|
+
error: new types_1.ValidationError(`${path} must be an array`),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// maxLength
|
|
45
|
+
if (typeof def.maxLength === 'number') {
|
|
46
|
+
if (value.length > def.maxLength) {
|
|
47
|
+
return {
|
|
48
|
+
success: false,
|
|
49
|
+
error: new types_1.ValidationError(`${path} must not have more than ${def.maxLength} elements`),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// minLength
|
|
54
|
+
if (typeof def.minLength === 'number') {
|
|
55
|
+
if (value.length < def.minLength) {
|
|
56
|
+
return {
|
|
57
|
+
success: false,
|
|
58
|
+
error: new types_1.ValidationError(`${path} must not have fewer than ${def.minLength} elements`),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// items
|
|
63
|
+
const itemsDef = def.items;
|
|
64
|
+
for (let i = 0; i < value.length; i++) {
|
|
65
|
+
const itemValue = value[i];
|
|
66
|
+
const itemPath = `${path}/${i}`;
|
|
67
|
+
const res = validateOneOf(lexicons, itemPath, itemsDef, itemValue);
|
|
68
|
+
if (!res.success) {
|
|
69
|
+
return res;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return { success: true, value };
|
|
73
|
+
}
|
|
74
|
+
exports.array = array;
|
|
75
|
+
function object(lexicons, path, def, value) {
|
|
76
|
+
def = def;
|
|
77
|
+
// type
|
|
78
|
+
if (!value || typeof value !== 'object') {
|
|
79
|
+
return {
|
|
80
|
+
success: false,
|
|
81
|
+
error: new types_1.ValidationError(`${path} must be an object`),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const requiredProps = new Set(def.required);
|
|
85
|
+
const nullableProps = new Set(def.nullable);
|
|
86
|
+
// properties
|
|
87
|
+
let resultValue = value;
|
|
88
|
+
if (typeof def.properties === 'object') {
|
|
89
|
+
for (const key in def.properties) {
|
|
90
|
+
if (value[key] === null && nullableProps.has(key)) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
const propDef = def.properties[key];
|
|
94
|
+
if (typeof value[key] === 'undefined' && !requiredProps.has(key)) {
|
|
95
|
+
// Fast path for non-required undefined props.
|
|
96
|
+
if (propDef.type === 'integer' ||
|
|
97
|
+
propDef.type === 'boolean' ||
|
|
98
|
+
propDef.type === 'string') {
|
|
99
|
+
if (typeof propDef.default === 'undefined') {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// Other types have no defaults.
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const propPath = `${path}/${key}`;
|
|
109
|
+
const validated = validateOneOf(lexicons, propPath, propDef, value[key]);
|
|
110
|
+
const propValue = validated.success ? validated.value : value[key];
|
|
111
|
+
const propIsUndefined = typeof propValue === 'undefined';
|
|
112
|
+
// Return error for bad validation, giving required rule precedence
|
|
113
|
+
if (propIsUndefined && requiredProps.has(key)) {
|
|
114
|
+
return {
|
|
115
|
+
success: false,
|
|
116
|
+
error: new types_1.ValidationError(`${path} must have the property "${key}"`),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
else if (!propIsUndefined && !validated.success) {
|
|
120
|
+
return validated;
|
|
121
|
+
}
|
|
122
|
+
// Adjust value based on e.g. applied defaults, cloning shallowly if there was a changed value
|
|
123
|
+
if (propValue !== value[key]) {
|
|
124
|
+
if (resultValue === value) {
|
|
125
|
+
// Lazy shallow clone
|
|
126
|
+
resultValue = { ...value };
|
|
127
|
+
}
|
|
128
|
+
resultValue[key] = propValue;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return { success: true, value: resultValue };
|
|
133
|
+
}
|
|
134
|
+
exports.object = object;
|
|
135
|
+
function validateOneOf(lexicons, path, def, value, mustBeObj = false) {
|
|
136
|
+
let error;
|
|
137
|
+
let concreteDefs;
|
|
138
|
+
if (def.type === 'union') {
|
|
139
|
+
if (!(0, types_1.isDiscriminatedObject)(value)) {
|
|
140
|
+
return {
|
|
141
|
+
success: false,
|
|
142
|
+
error: new types_1.ValidationError(`${path} must be an object which includes the "$type" property`),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
if (!refsContainType(def.refs, value.$type)) {
|
|
146
|
+
if (def.closed) {
|
|
147
|
+
return {
|
|
148
|
+
success: false,
|
|
149
|
+
error: new types_1.ValidationError(`${path} $type must be one of ${def.refs.join(', ')}`),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
return { success: true, value };
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
concreteDefs = (0, util_1.toConcreteTypes)(lexicons, {
|
|
156
|
+
type: 'ref',
|
|
157
|
+
ref: value.$type,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
concreteDefs = (0, util_1.toConcreteTypes)(lexicons, def);
|
|
163
|
+
}
|
|
164
|
+
for (const concreteDef of concreteDefs) {
|
|
165
|
+
const result = mustBeObj
|
|
166
|
+
? object(lexicons, path, concreteDef, value)
|
|
167
|
+
: validate(lexicons, path, concreteDef, value);
|
|
168
|
+
if (result.success) {
|
|
169
|
+
return result;
|
|
170
|
+
}
|
|
171
|
+
error ?? (error = result.error);
|
|
172
|
+
}
|
|
173
|
+
if (concreteDefs.length > 1) {
|
|
174
|
+
return {
|
|
175
|
+
success: false,
|
|
176
|
+
error: new types_1.ValidationError(`${path} did not match any of the expected definitions`),
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
return { success: false, error };
|
|
180
|
+
}
|
|
181
|
+
exports.validateOneOf = validateOneOf;
|
|
182
|
+
// to avoid bugs like #0189 this needs to handle both
|
|
183
|
+
// explicit and implicit #main
|
|
184
|
+
const refsContainType = (refs, type) => {
|
|
185
|
+
const lexUri = (0, util_1.toLexUri)(type);
|
|
186
|
+
if (refs.includes(lexUri)) {
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
if (lexUri.endsWith('#main')) {
|
|
190
|
+
return refs.includes(lexUri.replace('#main', ''));
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
return refs.includes(lexUri + '#main');
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
//# sourceMappingURL=complex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"complex.js","sourceRoot":"","sources":["../../src/validators/complex.ts"],"names":[],"mappings":";;;AACA,oCAQiB;AACjB,kCAAmD;AAEnD,iCAA6B;AAC7B,6CAAgF;AAEhF,SAAgB,QAAQ,CACtB,QAAkB,EAClB,IAAY,EACZ,GAAgB,EAChB,KAAc;IAEd,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,IAAA,oBAAO,EAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QAC5C,KAAK,SAAS;YACZ,OAAO,IAAA,oBAAO,EAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QAC5C,KAAK,QAAQ;YACX,OAAO,IAAA,mBAAM,EAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QAC3C,KAAK,OAAO;YACV,OAAO,IAAA,kBAAK,EAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QAC1C,KAAK,UAAU;YACb,OAAO,IAAA,oBAAO,EAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QAC5C,KAAK,SAAS;YACZ,OAAO,IAAA,oBAAO,EAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QAC5C,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QAC3C,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QAC1C,KAAK,MAAM;YACT,OAAO,IAAA,WAAI,EAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QACzC;YACE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,uBAAe,CAAC,4BAA4B,GAAG,CAAC,IAAI,EAAE,CAAC;aACnE,CAAA;IACL,CAAC;AACH,CAAC;AA/BD,4BA+BC;AAED,SAAgB,KAAK,CACnB,QAAkB,EAClB,IAAY,EACZ,GAAa,EACb,KAAc;IAEd,OAAO;IACP,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI,uBAAe,CAAC,GAAG,IAAI,mBAAmB,CAAC;SACvD,CAAA;IACH,CAAC;IAED,YAAY;IACZ,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACtC,IAAK,KAAwB,CAAC,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;YACrD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,uBAAe,CACxB,GAAG,IAAI,4BAA4B,GAAG,CAAC,SAAS,WAAW,CAC5D;aACF,CAAA;QACH,CAAC;IACH,CAAC;IAED,YAAY;IACZ,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACtC,IAAK,KAAwB,CAAC,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;YACrD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,uBAAe,CACxB,GAAG,IAAI,6BAA6B,GAAG,CAAC,SAAS,WAAW,CAC7D;aACF,CAAA;QACH,CAAC;IACH,CAAC;IAED,QAAQ;IACR,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAA;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAI,KAAwB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1D,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QAC1B,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE,CAAA;QAC/B,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;QAClE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,GAAG,CAAA;QACZ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AACjC,CAAC;AAlDD,sBAkDC;AAED,SAAgB,MAAM,CACpB,QAAkB,EAClB,IAAY,EACZ,GAAgB,EAChB,KAAc;IAEd,GAAG,GAAG,GAAgB,CAAA;IAEtB,OAAO;IACP,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI,uBAAe,CAAC,GAAG,IAAI,oBAAoB,CAAC;SACxD,CAAA;IACH,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC3C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAE3C,aAAa;IACb,IAAI,WAAW,GAAG,KAAK,CAAA;IACvB,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClD,SAAQ;YACV,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YACnC,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,WAAW,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjE,8CAA8C;gBAC9C,IACE,OAAO,CAAC,IAAI,KAAK,SAAS;oBAC1B,OAAO,CAAC,IAAI,KAAK,SAAS;oBAC1B,OAAO,CAAC,IAAI,KAAK,QAAQ,EACzB,CAAC;oBACD,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;wBAC3C,SAAQ;oBACV,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,gCAAgC;oBAChC,SAAQ;gBACV,CAAC;YACH,CAAC;YACD,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,CAAA;YACjC,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;YACxE,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAClE,MAAM,eAAe,GAAG,OAAO,SAAS,KAAK,WAAW,CAAA;YACxD,mEAAmE;YACnE,IAAI,eAAe,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9C,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,IAAI,uBAAe,CAAC,GAAG,IAAI,4BAA4B,GAAG,GAAG,CAAC;iBACtE,CAAA;YACH,CAAC;iBAAM,IAAI,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBAClD,OAAO,SAAS,CAAA;YAClB,CAAC;YACD,8FAA8F;YAC9F,IAAI,SAAS,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;oBAC1B,qBAAqB;oBACrB,WAAW,GAAG,EAAE,GAAG,KAAK,EAAE,CAAA;gBAC5B,CAAC;gBACD,WAAW,CAAC,GAAG,CAAC,GAAG,SAAS,CAAA;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,CAAA;AAC9C,CAAC;AAnED,wBAmEC;AAED,SAAgB,aAAa,CAC3B,QAAkB,EAClB,IAAY,EACZ,GAAgC,EAChC,KAAc,EACd,SAAS,GAAG,KAAK;IAEjB,IAAI,KAAK,CAAA;IAET,IAAI,YAAY,CAAA;IAChB,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,IAAA,6BAAqB,EAAC,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,uBAAe,CACxB,GAAG,IAAI,wDAAwD,CAChE;aACF,CAAA;QACH,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,IAAI,uBAAe,CACxB,GAAG,IAAI,yBAAyB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtD;iBACF,CAAA;YACH,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;QACjC,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,IAAA,sBAAe,EAAC,QAAQ,EAAE;gBACvC,IAAI,EAAE,KAAK;gBACX,GAAG,EAAE,KAAK,CAAC,KAAK;aACjB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,YAAY,GAAG,IAAA,sBAAe,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IAC/C,CAAC;IAED,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,SAAS;YACtB,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC;YAC5C,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAA;QAChD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,MAAM,CAAA;QACf,CAAC;QACD,KAAK,KAAL,KAAK,GAAK,MAAM,CAAC,KAAK,EAAA;IACxB,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI,uBAAe,CACxB,GAAG,IAAI,gDAAgD,CACxD;SACF,CAAA;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;AAClC,CAAC;AAzDD,sCAyDC;AAED,qDAAqD;AACrD,8BAA8B;AAC9B,MAAM,eAAe,GAAG,CAAC,IAAc,EAAE,IAAY,EAAE,EAAE;IACvD,MAAM,MAAM,GAAG,IAAA,eAAQ,EAAC,IAAI,CAAC,CAAA;IAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;IACnD,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,CAAA;IACxC,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -8,3 +8,6 @@ export declare function atIdentifier(path: string, value: string): ValidationRes
|
|
|
8
8
|
export declare function nsid(path: string, value: string): ValidationResult;
|
|
9
9
|
export declare function cid(path: string, value: string): ValidationResult;
|
|
10
10
|
export declare function language(path: string, value: string): ValidationResult;
|
|
11
|
+
export declare function tid(path: string, value: string): ValidationResult;
|
|
12
|
+
export declare function recordKey(path: string, value: string): ValidationResult;
|
|
13
|
+
//# sourceMappingURL=formats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formats.d.ts","sourceRoot":"","sources":["../../src/validators/formats.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,UAAU,CAAA;AAW5D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CActE;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CASjE;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAUnE;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAUjE;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAUpE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAY1E;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAUlE;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAUjE;AAGD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAUtE;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAYjE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAUvE"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.recordKey = exports.tid = exports.language = exports.cid = exports.nsid = exports.atIdentifier = exports.handle = exports.did = exports.atUri = exports.uri = exports.datetime = void 0;
|
|
4
|
+
const iso_datestring_validator_1 = require("iso-datestring-validator");
|
|
5
|
+
const cid_1 = require("multiformats/cid");
|
|
6
|
+
const types_1 = require("../types");
|
|
7
|
+
const syntax_1 = require("@atproto/syntax");
|
|
8
|
+
const common_web_1 = require("@atproto/common-web");
|
|
9
|
+
function datetime(path, value) {
|
|
10
|
+
try {
|
|
11
|
+
if (!(0, iso_datestring_validator_1.isValidISODateString)(value)) {
|
|
12
|
+
throw new Error();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return {
|
|
17
|
+
success: false,
|
|
18
|
+
error: new types_1.ValidationError(`${path} must be an valid atproto datetime (both RFC-3339 and ISO-8601)`),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
return { success: true, value };
|
|
22
|
+
}
|
|
23
|
+
exports.datetime = datetime;
|
|
24
|
+
function uri(path, value) {
|
|
25
|
+
const isUri = value.match(/^\w+:(?:\/\/)?[^\s/][^\s]*$/) !== null;
|
|
26
|
+
if (!isUri) {
|
|
27
|
+
return {
|
|
28
|
+
success: false,
|
|
29
|
+
error: new types_1.ValidationError(`${path} must be a uri`),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return { success: true, value };
|
|
33
|
+
}
|
|
34
|
+
exports.uri = uri;
|
|
35
|
+
function atUri(path, value) {
|
|
36
|
+
try {
|
|
37
|
+
(0, syntax_1.ensureValidAtUri)(value);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return {
|
|
41
|
+
success: false,
|
|
42
|
+
error: new types_1.ValidationError(`${path} must be a valid at-uri`),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return { success: true, value };
|
|
46
|
+
}
|
|
47
|
+
exports.atUri = atUri;
|
|
48
|
+
function did(path, value) {
|
|
49
|
+
try {
|
|
50
|
+
(0, syntax_1.ensureValidDid)(value);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return {
|
|
54
|
+
success: false,
|
|
55
|
+
error: new types_1.ValidationError(`${path} must be a valid did`),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return { success: true, value };
|
|
59
|
+
}
|
|
60
|
+
exports.did = did;
|
|
61
|
+
function handle(path, value) {
|
|
62
|
+
try {
|
|
63
|
+
(0, syntax_1.ensureValidHandle)(value);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return {
|
|
67
|
+
success: false,
|
|
68
|
+
error: new types_1.ValidationError(`${path} must be a valid handle`),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return { success: true, value };
|
|
72
|
+
}
|
|
73
|
+
exports.handle = handle;
|
|
74
|
+
function atIdentifier(path, value) {
|
|
75
|
+
const isDid = did(path, value);
|
|
76
|
+
if (!isDid.success) {
|
|
77
|
+
const isHandle = handle(path, value);
|
|
78
|
+
if (!isHandle.success) {
|
|
79
|
+
return {
|
|
80
|
+
success: false,
|
|
81
|
+
error: new types_1.ValidationError(`${path} must be a valid did or a handle`),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return { success: true, value };
|
|
86
|
+
}
|
|
87
|
+
exports.atIdentifier = atIdentifier;
|
|
88
|
+
function nsid(path, value) {
|
|
89
|
+
try {
|
|
90
|
+
(0, syntax_1.ensureValidNsid)(value);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return {
|
|
94
|
+
success: false,
|
|
95
|
+
error: new types_1.ValidationError(`${path} must be a valid nsid`),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return { success: true, value };
|
|
99
|
+
}
|
|
100
|
+
exports.nsid = nsid;
|
|
101
|
+
function cid(path, value) {
|
|
102
|
+
try {
|
|
103
|
+
cid_1.CID.parse(value);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return {
|
|
107
|
+
success: false,
|
|
108
|
+
error: new types_1.ValidationError(`${path} must be a cid string`),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return { success: true, value };
|
|
112
|
+
}
|
|
113
|
+
exports.cid = cid;
|
|
114
|
+
// The language format validates well-formed BCP 47 language tags: https://www.rfc-editor.org/info/bcp47
|
|
115
|
+
function language(path, value) {
|
|
116
|
+
if ((0, common_web_1.validateLanguage)(value)) {
|
|
117
|
+
return { success: true, value };
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
success: false,
|
|
121
|
+
error: new types_1.ValidationError(`${path} must be a well-formed BCP 47 language tag`),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
exports.language = language;
|
|
125
|
+
function tid(path, value) {
|
|
126
|
+
try {
|
|
127
|
+
(0, syntax_1.ensureValidTid)(value);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return {
|
|
131
|
+
success: false,
|
|
132
|
+
error: new types_1.ValidationError(`${path} must be a valid TID (timestamp identifier)`),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return { success: true, value };
|
|
136
|
+
}
|
|
137
|
+
exports.tid = tid;
|
|
138
|
+
function recordKey(path, value) {
|
|
139
|
+
try {
|
|
140
|
+
(0, syntax_1.ensureValidRecordKey)(value);
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return {
|
|
144
|
+
success: false,
|
|
145
|
+
error: new types_1.ValidationError(`${path} must be a valid Record Key`),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
return { success: true, value };
|
|
149
|
+
}
|
|
150
|
+
exports.recordKey = recordKey;
|
|
151
|
+
//# sourceMappingURL=formats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formats.js","sourceRoot":"","sources":["../../src/validators/formats.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,3 +7,4 @@ export declare function string(lexicons: Lexicons, path: string, def: LexUserTyp
|
|
|
7
7
|
export declare function bytes(lexicons: Lexicons, path: string, def: LexUserType, value: unknown): ValidationResult;
|
|
8
8
|
export declare function cidLink(lexicons: Lexicons, path: string, def: LexUserType, value: unknown): ValidationResult;
|
|
9
9
|
export declare function unknown(lexicons: Lexicons, path: string, def: LexUserType, value: unknown): ValidationResult;
|
|
10
|
+
//# sourceMappingURL=primitives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/validators/primitives.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,OAAO,EACL,WAAW,EAIX,gBAAgB,EAGjB,MAAM,UAAU,CAAA;AAEjB,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,GACb,gBAAgB,CAoBlB;AAED,wBAAgB,OAAO,CACrB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,GACb,gBAAgB,CA+BlB;AAED,wBAAgB,OAAO,CACrB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,GACb,gBAAgB,CAmElB;AAED,wBAAgB,MAAM,CACpB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,GACb,gBAAgB,CAqHlB;AAED,wBAAgB,KAAK,CACnB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,GACb,gBAAgB,CAmClB;AAED,wBAAgB,OAAO,CACrB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,GACb,gBAAgB,CASlB;AAED,wBAAgB,OAAO,CACrB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,GACb,gBAAgB,CAUlB"}
|
|
@@ -0,0 +1,293 @@
|
|
|
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.unknown = exports.cidLink = exports.bytes = exports.string = exports.integer = exports.boolean = exports.validate = void 0;
|
|
27
|
+
const common_web_1 = require("@atproto/common-web");
|
|
28
|
+
const cid_1 = require("multiformats/cid");
|
|
29
|
+
const formats = __importStar(require("./formats"));
|
|
30
|
+
const types_1 = require("../types");
|
|
31
|
+
function validate(lexicons, path, def, value) {
|
|
32
|
+
switch (def.type) {
|
|
33
|
+
case 'boolean':
|
|
34
|
+
return boolean(lexicons, path, def, value);
|
|
35
|
+
case 'integer':
|
|
36
|
+
return integer(lexicons, path, def, value);
|
|
37
|
+
case 'string':
|
|
38
|
+
return string(lexicons, path, def, value);
|
|
39
|
+
case 'bytes':
|
|
40
|
+
return bytes(lexicons, path, def, value);
|
|
41
|
+
case 'cid-link':
|
|
42
|
+
return cidLink(lexicons, path, def, value);
|
|
43
|
+
case 'unknown':
|
|
44
|
+
return unknown(lexicons, path, def, value);
|
|
45
|
+
default:
|
|
46
|
+
return {
|
|
47
|
+
success: false,
|
|
48
|
+
error: new types_1.ValidationError(`Unexpected lexicon type: ${def.type}`),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.validate = validate;
|
|
53
|
+
function boolean(lexicons, path, def, value) {
|
|
54
|
+
def = def;
|
|
55
|
+
// type
|
|
56
|
+
const type = typeof value;
|
|
57
|
+
if (type === 'undefined') {
|
|
58
|
+
if (typeof def.default === 'boolean') {
|
|
59
|
+
return { success: true, value: def.default };
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
success: false,
|
|
63
|
+
error: new types_1.ValidationError(`${path} must be a boolean`),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
else if (type !== 'boolean') {
|
|
67
|
+
return {
|
|
68
|
+
success: false,
|
|
69
|
+
error: new types_1.ValidationError(`${path} must be a boolean`),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
// const
|
|
73
|
+
if (typeof def.const === 'boolean') {
|
|
74
|
+
if (value !== def.const) {
|
|
75
|
+
return {
|
|
76
|
+
success: false,
|
|
77
|
+
error: new types_1.ValidationError(`${path} must be ${def.const}`),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return { success: true, value };
|
|
82
|
+
}
|
|
83
|
+
exports.boolean = boolean;
|
|
84
|
+
function integer(lexicons, path, def, value) {
|
|
85
|
+
def = def;
|
|
86
|
+
// type
|
|
87
|
+
const type = typeof value;
|
|
88
|
+
if (type === 'undefined') {
|
|
89
|
+
if (typeof def.default === 'number') {
|
|
90
|
+
return { success: true, value: def.default };
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
success: false,
|
|
94
|
+
error: new types_1.ValidationError(`${path} must be an integer`),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
else if (!Number.isInteger(value)) {
|
|
98
|
+
return {
|
|
99
|
+
success: false,
|
|
100
|
+
error: new types_1.ValidationError(`${path} must be an integer`),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
// const
|
|
104
|
+
if (typeof def.const === 'number') {
|
|
105
|
+
if (value !== def.const) {
|
|
106
|
+
return {
|
|
107
|
+
success: false,
|
|
108
|
+
error: new types_1.ValidationError(`${path} must be ${def.const}`),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// enum
|
|
113
|
+
if (Array.isArray(def.enum)) {
|
|
114
|
+
if (!def.enum.includes(value)) {
|
|
115
|
+
return {
|
|
116
|
+
success: false,
|
|
117
|
+
error: new types_1.ValidationError(`${path} must be one of (${def.enum.join('|')})`),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// maximum
|
|
122
|
+
if (typeof def.maximum === 'number') {
|
|
123
|
+
if (value > def.maximum) {
|
|
124
|
+
return {
|
|
125
|
+
success: false,
|
|
126
|
+
error: new types_1.ValidationError(`${path} can not be greater than ${def.maximum}`),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// minimum
|
|
131
|
+
if (typeof def.minimum === 'number') {
|
|
132
|
+
if (value < def.minimum) {
|
|
133
|
+
return {
|
|
134
|
+
success: false,
|
|
135
|
+
error: new types_1.ValidationError(`${path} can not be less than ${def.minimum}`),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return { success: true, value };
|
|
140
|
+
}
|
|
141
|
+
exports.integer = integer;
|
|
142
|
+
function string(lexicons, path, def, value) {
|
|
143
|
+
def = def;
|
|
144
|
+
// type
|
|
145
|
+
if (typeof value === 'undefined') {
|
|
146
|
+
if (typeof def.default === 'string') {
|
|
147
|
+
return { success: true, value: def.default };
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
success: false,
|
|
151
|
+
error: new types_1.ValidationError(`${path} must be a string`),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
else if (typeof value !== 'string') {
|
|
155
|
+
return {
|
|
156
|
+
success: false,
|
|
157
|
+
error: new types_1.ValidationError(`${path} must be a string`),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
// const
|
|
161
|
+
if (typeof def.const === 'string') {
|
|
162
|
+
if (value !== def.const) {
|
|
163
|
+
return {
|
|
164
|
+
success: false,
|
|
165
|
+
error: new types_1.ValidationError(`${path} must be ${def.const}`),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// enum
|
|
170
|
+
if (Array.isArray(def.enum)) {
|
|
171
|
+
if (!def.enum.includes(value)) {
|
|
172
|
+
return {
|
|
173
|
+
success: false,
|
|
174
|
+
error: new types_1.ValidationError(`${path} must be one of (${def.enum.join('|')})`),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// maxLength
|
|
179
|
+
if (typeof def.maxLength === 'number') {
|
|
180
|
+
if ((0, common_web_1.utf8Len)(value) > def.maxLength) {
|
|
181
|
+
return {
|
|
182
|
+
success: false,
|
|
183
|
+
error: new types_1.ValidationError(`${path} must not be longer than ${def.maxLength} characters`),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// minLength
|
|
188
|
+
if (typeof def.minLength === 'number') {
|
|
189
|
+
if ((0, common_web_1.utf8Len)(value) < def.minLength) {
|
|
190
|
+
return {
|
|
191
|
+
success: false,
|
|
192
|
+
error: new types_1.ValidationError(`${path} must not be shorter than ${def.minLength} characters`),
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// maxGraphemes
|
|
197
|
+
if (typeof def.maxGraphemes === 'number') {
|
|
198
|
+
if ((0, common_web_1.graphemeLen)(value) > def.maxGraphemes) {
|
|
199
|
+
return {
|
|
200
|
+
success: false,
|
|
201
|
+
error: new types_1.ValidationError(`${path} must not be longer than ${def.maxGraphemes} graphemes`),
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// minGraphemes
|
|
206
|
+
if (typeof def.minGraphemes === 'number') {
|
|
207
|
+
if ((0, common_web_1.graphemeLen)(value) < def.minGraphemes) {
|
|
208
|
+
return {
|
|
209
|
+
success: false,
|
|
210
|
+
error: new types_1.ValidationError(`${path} must not be shorter than ${def.minGraphemes} graphemes`),
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (typeof def.format === 'string') {
|
|
215
|
+
switch (def.format) {
|
|
216
|
+
case 'datetime':
|
|
217
|
+
return formats.datetime(path, value);
|
|
218
|
+
case 'uri':
|
|
219
|
+
return formats.uri(path, value);
|
|
220
|
+
case 'at-uri':
|
|
221
|
+
return formats.atUri(path, value);
|
|
222
|
+
case 'did':
|
|
223
|
+
return formats.did(path, value);
|
|
224
|
+
case 'handle':
|
|
225
|
+
return formats.handle(path, value);
|
|
226
|
+
case 'at-identifier':
|
|
227
|
+
return formats.atIdentifier(path, value);
|
|
228
|
+
case 'nsid':
|
|
229
|
+
return formats.nsid(path, value);
|
|
230
|
+
case 'cid':
|
|
231
|
+
return formats.cid(path, value);
|
|
232
|
+
case 'language':
|
|
233
|
+
return formats.language(path, value);
|
|
234
|
+
case 'tid':
|
|
235
|
+
return formats.tid(path, value);
|
|
236
|
+
case 'record-key':
|
|
237
|
+
return formats.recordKey(path, value);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return { success: true, value };
|
|
241
|
+
}
|
|
242
|
+
exports.string = string;
|
|
243
|
+
function bytes(lexicons, path, def, value) {
|
|
244
|
+
def = def;
|
|
245
|
+
if (!value || !(value instanceof Uint8Array)) {
|
|
246
|
+
return {
|
|
247
|
+
success: false,
|
|
248
|
+
error: new types_1.ValidationError(`${path} must be a byte array`),
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
// maxLength
|
|
252
|
+
if (typeof def.maxLength === 'number') {
|
|
253
|
+
if (value.byteLength > def.maxLength) {
|
|
254
|
+
return {
|
|
255
|
+
success: false,
|
|
256
|
+
error: new types_1.ValidationError(`${path} must not be larger than ${def.maxLength} bytes`),
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// minLength
|
|
261
|
+
if (typeof def.minLength === 'number') {
|
|
262
|
+
if (value.byteLength < def.minLength) {
|
|
263
|
+
return {
|
|
264
|
+
success: false,
|
|
265
|
+
error: new types_1.ValidationError(`${path} must not be smaller than ${def.minLength} bytes`),
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return { success: true, value };
|
|
270
|
+
}
|
|
271
|
+
exports.bytes = bytes;
|
|
272
|
+
function cidLink(lexicons, path, def, value) {
|
|
273
|
+
if (cid_1.CID.asCID(value) === null) {
|
|
274
|
+
return {
|
|
275
|
+
success: false,
|
|
276
|
+
error: new types_1.ValidationError(`${path} must be a CID`),
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
return { success: true, value };
|
|
280
|
+
}
|
|
281
|
+
exports.cidLink = cidLink;
|
|
282
|
+
function unknown(lexicons, path, def, value) {
|
|
283
|
+
// type
|
|
284
|
+
if (!value || typeof value !== 'object') {
|
|
285
|
+
return {
|
|
286
|
+
success: false,
|
|
287
|
+
error: new types_1.ValidationError(`${path} must be an object`),
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
return { success: true, value };
|
|
291
|
+
}
|
|
292
|
+
exports.unknown = unknown;
|
|
293
|
+
//# sourceMappingURL=primitives.js.map
|