teyit 1.0.0 → 1.0.2
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/README.md +10 -7
- package/dist/main.d.mts +47 -6
- package/dist/main.d.ts +47 -6
- package/dist/main.js +4 -5
- package/dist/main.mjs +4 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
<!---->
|
|
25
25
|
|
|
26
26
|
[AnyObject]: ./src/types/AnyObject.type.ts
|
|
27
|
+
[InferSchema]: ./src/types/InferSchema.type.ts
|
|
27
28
|
[JSONSchema]: ./src/types/JSONSchema.type.ts
|
|
28
29
|
[Schema]: ./src/types/Schema.type.ts
|
|
29
30
|
[TeyitOptions]: ./src/types/TeyitOptions.type.ts
|
|
@@ -119,6 +120,7 @@ teyit
|
|
|
119
120
|
│ └── Username
|
|
120
121
|
│
|
|
121
122
|
├── type AnyObject
|
|
123
|
+
├── type InferSchema
|
|
122
124
|
├── type JSONSchema
|
|
123
125
|
├── type Schema
|
|
124
126
|
├── type TeyitOptions
|
|
@@ -156,17 +158,17 @@ Teyit schema builder.
|
|
|
156
158
|
|
|
157
159
|
Validate the properties with your Teyit schema.
|
|
158
160
|
|
|
159
|
-
> | Parameter | Type
|
|
160
|
-
> | ------------ |
|
|
161
|
-
> | `schema` | [Schema]
|
|
162
|
-
> | `properties` | [
|
|
161
|
+
> | Parameter | Type | Default | Description |
|
|
162
|
+
> | ------------ | ----------- | ------- | -------------------------- |
|
|
163
|
+
> | `schema` | [Schema] | | Teyit schema. |
|
|
164
|
+
> | `properties` | [AnyObject] | | Properties to be validate. |
|
|
163
165
|
>
|
|
164
|
-
> returns [Promise]<[
|
|
166
|
+
> returns [Promise]<[InferSchema<Schema>]>
|
|
165
167
|
>
|
|
166
168
|
> Example:
|
|
167
169
|
>
|
|
168
170
|
> ```typescript
|
|
169
|
-
> const schema
|
|
171
|
+
> const schema = {
|
|
170
172
|
> display_name: {
|
|
171
173
|
> type: 'string',
|
|
172
174
|
> max: 32,
|
|
@@ -210,7 +212,7 @@ Validate the properties with your Teyit schema.
|
|
|
210
212
|
> required: true
|
|
211
213
|
> }
|
|
212
214
|
> ]
|
|
213
|
-
> };
|
|
215
|
+
> } as const satisfies Schema;
|
|
214
216
|
>
|
|
215
217
|
> const properties = {
|
|
216
218
|
> display_name: 'Fırat',
|
|
@@ -350,6 +352,7 @@ Convert your Teyit schema into [JSON Schema](https://json-schema.org).
|
|
|
350
352
|
| Type |
|
|
351
353
|
| ----------------- |
|
|
352
354
|
| [AnyObject] |
|
|
355
|
+
| [InferSchema] |
|
|
353
356
|
| [JSONSchema] |
|
|
354
357
|
| [Schema] |
|
|
355
358
|
| [TeyitOptions] |
|
package/dist/main.d.mts
CHANGED
|
@@ -35,7 +35,7 @@ type Boolean = {
|
|
|
35
35
|
nullable: boolean;
|
|
36
36
|
required: boolean;
|
|
37
37
|
};
|
|
38
|
-
type Date = {
|
|
38
|
+
type Date$1 = {
|
|
39
39
|
type: 'date';
|
|
40
40
|
min?: string;
|
|
41
41
|
max?: string;
|
|
@@ -59,7 +59,7 @@ type Array = {
|
|
|
59
59
|
nullable: boolean;
|
|
60
60
|
required: boolean;
|
|
61
61
|
};
|
|
62
|
-
type TypeSingle = String | Number | Boolean | Date | Object$1 | Array;
|
|
62
|
+
type TypeSingle = String | Number | Boolean | Date$1 | Object$1 | Array;
|
|
63
63
|
type TypeUnion = [TypeSingle, TypeSingle, ...TypeSingle[]];
|
|
64
64
|
type Type = TypeSingle | TypeUnion;
|
|
65
65
|
type SchemaSingle = Record<string, Type>;
|
|
@@ -113,13 +113,11 @@ type TeyitOptions = {
|
|
|
113
113
|
};
|
|
114
114
|
};
|
|
115
115
|
|
|
116
|
-
type UnknownObject = Record<string, unknown>;
|
|
117
|
-
|
|
118
116
|
declare class Teyit {
|
|
119
117
|
private readonly options;
|
|
120
118
|
constructor(options?: TeyitOptions);
|
|
121
119
|
private cleanupTypesDir;
|
|
122
|
-
validate(schema:
|
|
120
|
+
validate<const _Schema extends Schema>(schema: _Schema, properties: AnyObject): Promise<InferSchema<_Schema>>;
|
|
123
121
|
declare(schema: Schema, name: string): Promise<void>;
|
|
124
122
|
convertToJSONSchema(schema: Schema): JSONSchema;
|
|
125
123
|
}
|
|
@@ -146,6 +144,49 @@ declare namespace Patterns_export {
|
|
|
146
144
|
export { Patterns_export_Domain as Domain, Patterns_export_Email as Email, Patterns_export_HTTP as HTTP, Patterns_export_PhoneNumber as PhoneNumber, Patterns_export_URI as URI, Patterns_export_Username as Username };
|
|
147
145
|
}
|
|
148
146
|
|
|
147
|
+
type Prettify<Type> = {
|
|
148
|
+
[Key in keyof Type]: Type[Key];
|
|
149
|
+
} & {};
|
|
150
|
+
type InferBaseType<Type> = Type extends {
|
|
151
|
+
type: 'string';
|
|
152
|
+
} ? string : Type extends {
|
|
153
|
+
type: 'number';
|
|
154
|
+
} ? number : Type extends {
|
|
155
|
+
type: 'boolean';
|
|
156
|
+
} ? boolean : Type extends {
|
|
157
|
+
type: 'date';
|
|
158
|
+
} ? Date : Type extends {
|
|
159
|
+
type: 'object';
|
|
160
|
+
properties: infer Properties;
|
|
161
|
+
} ? InferSchema<Properties> : Type extends {
|
|
162
|
+
type: 'array';
|
|
163
|
+
items: infer Items;
|
|
164
|
+
} ? InferType<Items>[] : never;
|
|
165
|
+
type ApplyNullable<Type, Definition> = Definition extends {
|
|
166
|
+
nullable: true;
|
|
167
|
+
} ? Type | null : Type;
|
|
168
|
+
type InferTypeSingle<Type> = Type extends unknown ? ApplyNullable<InferBaseType<Type>, Type> : never;
|
|
169
|
+
type InferType<Type> = Type extends readonly unknown[] ? InferTypeSingle<Type[number]> : InferTypeSingle<Type>;
|
|
170
|
+
type IsOptional<Type> = Type extends {
|
|
171
|
+
required: false;
|
|
172
|
+
} ? true : Type extends readonly (infer Union)[] ? (Union extends {
|
|
173
|
+
required: false;
|
|
174
|
+
} ? true : false) : false;
|
|
175
|
+
type RequiredKeys<Schema> = {
|
|
176
|
+
[Key in keyof Schema]: IsOptional<Schema[Key]> extends true ? never : Key;
|
|
177
|
+
}[keyof Schema];
|
|
178
|
+
type OptionalKeys<Schema> = {
|
|
179
|
+
[Key in keyof Schema]: IsOptional<Schema[Key]> extends true ? Key : never;
|
|
180
|
+
}[keyof Schema];
|
|
181
|
+
type InferSchemaSingle<Schema> = Prettify<{
|
|
182
|
+
[Key in RequiredKeys<Schema>]: InferType<Schema[Key]>;
|
|
183
|
+
} & {
|
|
184
|
+
[Key in OptionalKeys<Schema>]?: InferType<Schema[Key]>;
|
|
185
|
+
}>;
|
|
186
|
+
type InferSchema<Schema> = Schema extends readonly unknown[] ? InferSchemaSingle<Schema[number]> : InferSchemaSingle<Schema>;
|
|
187
|
+
|
|
188
|
+
type UnknownObject = Record<string, unknown>;
|
|
189
|
+
|
|
149
190
|
declare class ValidationError extends Error {
|
|
150
191
|
errors: {
|
|
151
192
|
message: string;
|
|
@@ -160,4 +201,4 @@ declare class ValidationError extends Error {
|
|
|
160
201
|
});
|
|
161
202
|
}
|
|
162
203
|
|
|
163
|
-
export { type AnyObject, type JSONSchema, Patterns_export as Patterns, type Schema, Teyit, type TeyitOptions, type UnknownObject, ValidationError };
|
|
204
|
+
export { type AnyObject, type InferSchema, type JSONSchema, Patterns_export as Patterns, type Schema, Teyit, type TeyitOptions, type UnknownObject, ValidationError };
|
package/dist/main.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ type Boolean = {
|
|
|
35
35
|
nullable: boolean;
|
|
36
36
|
required: boolean;
|
|
37
37
|
};
|
|
38
|
-
type Date = {
|
|
38
|
+
type Date$1 = {
|
|
39
39
|
type: 'date';
|
|
40
40
|
min?: string;
|
|
41
41
|
max?: string;
|
|
@@ -59,7 +59,7 @@ type Array = {
|
|
|
59
59
|
nullable: boolean;
|
|
60
60
|
required: boolean;
|
|
61
61
|
};
|
|
62
|
-
type TypeSingle = String | Number | Boolean | Date | Object$1 | Array;
|
|
62
|
+
type TypeSingle = String | Number | Boolean | Date$1 | Object$1 | Array;
|
|
63
63
|
type TypeUnion = [TypeSingle, TypeSingle, ...TypeSingle[]];
|
|
64
64
|
type Type = TypeSingle | TypeUnion;
|
|
65
65
|
type SchemaSingle = Record<string, Type>;
|
|
@@ -113,13 +113,11 @@ type TeyitOptions = {
|
|
|
113
113
|
};
|
|
114
114
|
};
|
|
115
115
|
|
|
116
|
-
type UnknownObject = Record<string, unknown>;
|
|
117
|
-
|
|
118
116
|
declare class Teyit {
|
|
119
117
|
private readonly options;
|
|
120
118
|
constructor(options?: TeyitOptions);
|
|
121
119
|
private cleanupTypesDir;
|
|
122
|
-
validate(schema:
|
|
120
|
+
validate<const _Schema extends Schema>(schema: _Schema, properties: AnyObject): Promise<InferSchema<_Schema>>;
|
|
123
121
|
declare(schema: Schema, name: string): Promise<void>;
|
|
124
122
|
convertToJSONSchema(schema: Schema): JSONSchema;
|
|
125
123
|
}
|
|
@@ -146,6 +144,49 @@ declare namespace Patterns_export {
|
|
|
146
144
|
export { Patterns_export_Domain as Domain, Patterns_export_Email as Email, Patterns_export_HTTP as HTTP, Patterns_export_PhoneNumber as PhoneNumber, Patterns_export_URI as URI, Patterns_export_Username as Username };
|
|
147
145
|
}
|
|
148
146
|
|
|
147
|
+
type Prettify<Type> = {
|
|
148
|
+
[Key in keyof Type]: Type[Key];
|
|
149
|
+
} & {};
|
|
150
|
+
type InferBaseType<Type> = Type extends {
|
|
151
|
+
type: 'string';
|
|
152
|
+
} ? string : Type extends {
|
|
153
|
+
type: 'number';
|
|
154
|
+
} ? number : Type extends {
|
|
155
|
+
type: 'boolean';
|
|
156
|
+
} ? boolean : Type extends {
|
|
157
|
+
type: 'date';
|
|
158
|
+
} ? Date : Type extends {
|
|
159
|
+
type: 'object';
|
|
160
|
+
properties: infer Properties;
|
|
161
|
+
} ? InferSchema<Properties> : Type extends {
|
|
162
|
+
type: 'array';
|
|
163
|
+
items: infer Items;
|
|
164
|
+
} ? InferType<Items>[] : never;
|
|
165
|
+
type ApplyNullable<Type, Definition> = Definition extends {
|
|
166
|
+
nullable: true;
|
|
167
|
+
} ? Type | null : Type;
|
|
168
|
+
type InferTypeSingle<Type> = Type extends unknown ? ApplyNullable<InferBaseType<Type>, Type> : never;
|
|
169
|
+
type InferType<Type> = Type extends readonly unknown[] ? InferTypeSingle<Type[number]> : InferTypeSingle<Type>;
|
|
170
|
+
type IsOptional<Type> = Type extends {
|
|
171
|
+
required: false;
|
|
172
|
+
} ? true : Type extends readonly (infer Union)[] ? (Union extends {
|
|
173
|
+
required: false;
|
|
174
|
+
} ? true : false) : false;
|
|
175
|
+
type RequiredKeys<Schema> = {
|
|
176
|
+
[Key in keyof Schema]: IsOptional<Schema[Key]> extends true ? never : Key;
|
|
177
|
+
}[keyof Schema];
|
|
178
|
+
type OptionalKeys<Schema> = {
|
|
179
|
+
[Key in keyof Schema]: IsOptional<Schema[Key]> extends true ? Key : never;
|
|
180
|
+
}[keyof Schema];
|
|
181
|
+
type InferSchemaSingle<Schema> = Prettify<{
|
|
182
|
+
[Key in RequiredKeys<Schema>]: InferType<Schema[Key]>;
|
|
183
|
+
} & {
|
|
184
|
+
[Key in OptionalKeys<Schema>]?: InferType<Schema[Key]>;
|
|
185
|
+
}>;
|
|
186
|
+
type InferSchema<Schema> = Schema extends readonly unknown[] ? InferSchemaSingle<Schema[number]> : InferSchemaSingle<Schema>;
|
|
187
|
+
|
|
188
|
+
type UnknownObject = Record<string, unknown>;
|
|
189
|
+
|
|
149
190
|
declare class ValidationError extends Error {
|
|
150
191
|
errors: {
|
|
151
192
|
message: string;
|
|
@@ -160,4 +201,4 @@ declare class ValidationError extends Error {
|
|
|
160
201
|
});
|
|
161
202
|
}
|
|
162
203
|
|
|
163
|
-
export { type AnyObject, type JSONSchema, Patterns_export as Patterns, type Schema, Teyit, type TeyitOptions, type UnknownObject, ValidationError };
|
|
204
|
+
export { type AnyObject, type InferSchema, type JSONSchema, Patterns_export as Patterns, type Schema, Teyit, type TeyitOptions, type UnknownObject, ValidationError };
|
package/dist/main.js
CHANGED
|
@@ -252,11 +252,10 @@ var validate = (schema, properties, options) => {
|
|
|
252
252
|
if (equivalent.lowercase === true) this.update(property.toLowerCase());
|
|
253
253
|
if (equivalent.uppercase === true) this.update(property.toUpperCase());
|
|
254
254
|
if (equivalent.enum !== void 0 && !equivalent.enum.map((item) => {
|
|
255
|
-
|
|
256
|
-
if (equivalent.
|
|
257
|
-
if (equivalent.
|
|
258
|
-
|
|
259
|
-
return mappedItem;
|
|
255
|
+
if (equivalent.trim !== false) item = item.trim();
|
|
256
|
+
if (equivalent.lowercase === true) item = item.toLowerCase();
|
|
257
|
+
if (equivalent.uppercase === true) item = item.toUpperCase();
|
|
258
|
+
return item;
|
|
260
259
|
}).includes(property))
|
|
261
260
|
reportError({ message: (options.error_messages?.string?.enum ?? "").replaceAll("{path}", path2), parts: { path: path2 } });
|
|
262
261
|
if (equivalent.pattern !== void 0 && !new RegExp(equivalent.pattern).test(property)) {
|
package/dist/main.mjs
CHANGED
|
@@ -220,11 +220,10 @@ var validate = (schema, properties, options) => {
|
|
|
220
220
|
if (equivalent.lowercase === true) this.update(property.toLowerCase());
|
|
221
221
|
if (equivalent.uppercase === true) this.update(property.toUpperCase());
|
|
222
222
|
if (equivalent.enum !== void 0 && !equivalent.enum.map((item) => {
|
|
223
|
-
|
|
224
|
-
if (equivalent.
|
|
225
|
-
if (equivalent.
|
|
226
|
-
|
|
227
|
-
return mappedItem;
|
|
223
|
+
if (equivalent.trim !== false) item = item.trim();
|
|
224
|
+
if (equivalent.lowercase === true) item = item.toLowerCase();
|
|
225
|
+
if (equivalent.uppercase === true) item = item.toUpperCase();
|
|
226
|
+
return item;
|
|
228
227
|
}).includes(property))
|
|
229
228
|
reportError({ message: (options.error_messages?.string?.enum ?? "").replaceAll("{path}", path2), parts: { path: path2 } });
|
|
230
229
|
if (equivalent.pattern !== void 0 && !new RegExp(equivalent.pattern).test(property)) {
|