@naturalcycles/nodejs-lib 15.64.0 → 15.65.1
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/validation/ajv/ajvSchema.js +1 -1
- package/dist/validation/ajv/getAjv.d.ts +2 -2
- package/dist/validation/ajv/getAjv.js +2 -2
- package/dist/validation/ajv/jsonSchemaBuilder.d.ts +12 -0
- package/dist/validation/ajv/jsonSchemaBuilder.js +15 -0
- package/package.json +2 -2
- package/src/stream/ndjson/ndjsonMap.ts +1 -2
- package/src/stream/transform/transformLogProgress.ts +1 -2
- package/src/validation/ajv/ajvSchema.ts +1 -1
- package/src/validation/ajv/getAjv.ts +3 -3
- package/src/validation/ajv/jsonSchemaBuilder.ts +32 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Ajv2020, type Options } from 'ajv/dist/2020.js';
|
|
2
2
|
/**
|
|
3
3
|
* Return cached instance of Ajv with default (recommended) options.
|
|
4
4
|
*
|
|
@@ -27,4 +27,4 @@ export declare const getCoercingAjv: any;
|
|
|
27
27
|
*
|
|
28
28
|
* https://ajv.js.org/options.html
|
|
29
29
|
*/
|
|
30
|
-
export declare function createAjv(opt?: Options):
|
|
30
|
+
export declare function createAjv(opt?: Options): Ajv2020;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { _isBetween, _lazyValue } from '@naturalcycles/js-lib';
|
|
2
2
|
import { Set2 } from '@naturalcycles/js-lib/object';
|
|
3
3
|
import { _substringAfterLast } from '@naturalcycles/js-lib/string';
|
|
4
|
-
import {
|
|
4
|
+
import { Ajv2020 } from 'ajv/dist/2020.js';
|
|
5
5
|
import { validTLDs } from '../tlds.js';
|
|
6
6
|
/* eslint-disable @typescript-eslint/prefer-string-starts-ends-with */
|
|
7
7
|
// oxlint-disable unicorn/prefer-code-point
|
|
@@ -52,7 +52,7 @@ export const getCoercingAjv = _lazyValue(() => createAjv(AJV_MUTATING_COERCING_O
|
|
|
52
52
|
* https://ajv.js.org/options.html
|
|
53
53
|
*/
|
|
54
54
|
export function createAjv(opt) {
|
|
55
|
-
const ajv = new
|
|
55
|
+
const ajv = new Ajv2020({
|
|
56
56
|
...AJV_OPTIONS,
|
|
57
57
|
...opt,
|
|
58
58
|
});
|
|
@@ -45,6 +45,7 @@ export declare const j: {
|
|
|
45
45
|
withRegexKeys: typeof withRegexKeys;
|
|
46
46
|
};
|
|
47
47
|
array<IN, OUT, Opt>(itemSchema: JsonSchemaAnyBuilder<IN, OUT, Opt>): JsonSchemaArrayBuilder<IN, OUT, Opt>;
|
|
48
|
+
tuple<const S extends JsonSchemaAnyBuilder<any, any, any>[]>(items: S): JsonSchemaTupleBuilder<S>;
|
|
48
49
|
set<IN, OUT, Opt>(itemSchema: JsonSchemaAnyBuilder<IN, OUT, Opt>): JsonSchemaSet2Builder<IN, OUT, Opt>;
|
|
49
50
|
buffer(): JsonSchemaBufferBuilder;
|
|
50
51
|
enum<const T extends readonly (string | number | boolean | null)[] | StringEnum | NumberEnum>(input: T, opt?: JsonBuilderRuleOpt): JsonSchemaEnumBuilder<T extends readonly (infer U)[] ? U : T extends StringEnum ? T[keyof T] : T extends NumberEnum ? T[keyof T] : never>;
|
|
@@ -331,6 +332,10 @@ export declare class JsonSchemaEnumBuilder<IN extends string | number | boolean
|
|
|
331
332
|
constructor(enumValues: readonly IN[], baseType: EnumBaseType, opt?: JsonBuilderRuleOpt);
|
|
332
333
|
branded<B extends IN>(): JsonSchemaEnumBuilder<B | IN, B, Opt>;
|
|
333
334
|
}
|
|
335
|
+
export declare class JsonSchemaTupleBuilder<ITEMS extends JsonSchemaAnyBuilder<any, any, any>[]> extends JsonSchemaAnyBuilder<TupleIn<ITEMS>, TupleOut<ITEMS>, false> {
|
|
336
|
+
private readonly _items;
|
|
337
|
+
constructor(items: ITEMS);
|
|
338
|
+
}
|
|
334
339
|
type EnumBaseType = 'string' | 'number' | 'other';
|
|
335
340
|
export interface JsonSchema<IN = unknown, OUT = IN> {
|
|
336
341
|
readonly in?: IN;
|
|
@@ -344,6 +349,7 @@ export interface JsonSchema<IN = unknown, OUT = IN> {
|
|
|
344
349
|
writeOnly?: boolean;
|
|
345
350
|
type?: string | string[];
|
|
346
351
|
items?: JsonSchema;
|
|
352
|
+
prefixItems?: JsonSchema[];
|
|
347
353
|
properties?: {
|
|
348
354
|
[K in keyof IN & keyof OUT]: JsonSchema<IN[K], OUT[K]>;
|
|
349
355
|
};
|
|
@@ -460,4 +466,10 @@ type EnumKeyUnion<T> = T extends readonly (infer U)[] ? U : T extends StringEnum
|
|
|
460
466
|
type SchemaIn<S> = S extends JsonSchemaAnyBuilder<infer IN, any, any> ? IN : never;
|
|
461
467
|
type SchemaOut<S> = S extends JsonSchemaAnyBuilder<any, infer OUT, any> ? OUT : never;
|
|
462
468
|
type SchemaOpt<S> = S extends JsonSchemaAnyBuilder<any, any, infer Opt> ? (Opt extends true ? true : false) : false;
|
|
469
|
+
type TupleIn<T extends readonly JsonSchemaAnyBuilder<any, any, any>[]> = {
|
|
470
|
+
[K in keyof T]: T[K] extends JsonSchemaAnyBuilder<infer I, any, any> ? I : never;
|
|
471
|
+
};
|
|
472
|
+
type TupleOut<T extends readonly JsonSchemaAnyBuilder<any, any, any>[]> = {
|
|
473
|
+
[K in keyof T]: T[K] extends JsonSchemaAnyBuilder<any, infer O, any> ? O : never;
|
|
474
|
+
};
|
|
463
475
|
export {};
|
|
@@ -71,6 +71,9 @@ export const j = {
|
|
|
71
71
|
array(itemSchema) {
|
|
72
72
|
return new JsonSchemaArrayBuilder(itemSchema);
|
|
73
73
|
},
|
|
74
|
+
tuple(items) {
|
|
75
|
+
return new JsonSchemaTupleBuilder(items);
|
|
76
|
+
},
|
|
74
77
|
set(itemSchema) {
|
|
75
78
|
return new JsonSchemaSet2Builder(itemSchema);
|
|
76
79
|
},
|
|
@@ -754,6 +757,18 @@ export class JsonSchemaEnumBuilder extends JsonSchemaAnyBuilder {
|
|
|
754
757
|
return this;
|
|
755
758
|
}
|
|
756
759
|
}
|
|
760
|
+
export class JsonSchemaTupleBuilder extends JsonSchemaAnyBuilder {
|
|
761
|
+
_items;
|
|
762
|
+
constructor(items) {
|
|
763
|
+
super({
|
|
764
|
+
type: 'array',
|
|
765
|
+
prefixItems: items.map(i => i.build()),
|
|
766
|
+
minItems: items.length,
|
|
767
|
+
maxItems: items.length,
|
|
768
|
+
});
|
|
769
|
+
this._items = items;
|
|
770
|
+
}
|
|
771
|
+
}
|
|
757
772
|
function object(props) {
|
|
758
773
|
return new JsonSchemaObjectBuilder(props);
|
|
759
774
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@naturalcycles/nodejs-lib",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "15.
|
|
4
|
+
"version": "15.65.1",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@naturalcycles/js-lib": "^15",
|
|
7
7
|
"@types/js-yaml": "^4",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
23
|
"@types/through2-concurrent": "^2",
|
|
24
|
-
"@naturalcycles/dev-lib": "
|
|
24
|
+
"@naturalcycles/dev-lib": "20.12.10"
|
|
25
25
|
},
|
|
26
26
|
"exports": {
|
|
27
27
|
".": "./dist/index.js",
|
|
@@ -4,8 +4,7 @@ import type { TransformLogProgressOptions, TransformMapOptions } from '../index.
|
|
|
4
4
|
import { Pipeline } from '../pipeline.js'
|
|
5
5
|
|
|
6
6
|
export interface NDJSONMapOptions<IN = any, OUT = IN>
|
|
7
|
-
extends TransformMapOptions<IN, OUT>,
|
|
8
|
-
TransformLogProgressOptions<IN> {
|
|
7
|
+
extends TransformMapOptions<IN, OUT>, TransformLogProgressOptions<IN> {
|
|
9
8
|
inputFilePath: string
|
|
10
9
|
outputFilePath: string
|
|
11
10
|
|
|
@@ -4,8 +4,7 @@ import { progressLogger } from '../progressLogger.js'
|
|
|
4
4
|
import type { TransformOptions, TransformTyped } from '../stream.model.js'
|
|
5
5
|
|
|
6
6
|
export interface TransformLogProgressOptions<IN = any>
|
|
7
|
-
extends ProgressLoggerCfg<IN>,
|
|
8
|
-
TransformOptions {}
|
|
7
|
+
extends ProgressLoggerCfg<IN>, TransformOptions {}
|
|
9
8
|
|
|
10
9
|
/**
|
|
11
10
|
* Pass-through transform that optionally logs progress.
|
|
@@ -100,7 +100,7 @@ export class AjvSchema<IN = unknown, OUT = IN> {
|
|
|
100
100
|
schema: T,
|
|
101
101
|
): AjvSchema<T['_input'], T['_output']> {
|
|
102
102
|
const jsonSchema = z.toJSONSchema(schema, {
|
|
103
|
-
target: 'draft-
|
|
103
|
+
target: 'draft-2020-12',
|
|
104
104
|
}) as unknown as JsonSchema<T['_input'], T['_output']>
|
|
105
105
|
|
|
106
106
|
return AjvSchema.create(jsonSchema)
|
|
@@ -2,7 +2,7 @@ import { _isBetween, _lazyValue } from '@naturalcycles/js-lib'
|
|
|
2
2
|
import { Set2 } from '@naturalcycles/js-lib/object'
|
|
3
3
|
import { _substringAfterLast } from '@naturalcycles/js-lib/string'
|
|
4
4
|
import type { AnyObject } from '@naturalcycles/js-lib/types'
|
|
5
|
-
import {
|
|
5
|
+
import { Ajv2020, type Options, type ValidateFunction } from 'ajv/dist/2020.js'
|
|
6
6
|
import { validTLDs } from '../tlds.js'
|
|
7
7
|
import type {
|
|
8
8
|
JsonSchemaIsoDateOptions,
|
|
@@ -65,8 +65,8 @@ export const getCoercingAjv = _lazyValue(() => createAjv(AJV_MUTATING_COERCING_O
|
|
|
65
65
|
*
|
|
66
66
|
* https://ajv.js.org/options.html
|
|
67
67
|
*/
|
|
68
|
-
export function createAjv(opt?: Options):
|
|
69
|
-
const ajv = new
|
|
68
|
+
export function createAjv(opt?: Options): Ajv2020 {
|
|
69
|
+
const ajv = new Ajv2020({
|
|
70
70
|
...AJV_OPTIONS,
|
|
71
71
|
...opt,
|
|
72
72
|
})
|
|
@@ -126,6 +126,12 @@ export const j = {
|
|
|
126
126
|
return new JsonSchemaArrayBuilder(itemSchema)
|
|
127
127
|
},
|
|
128
128
|
|
|
129
|
+
tuple<const S extends JsonSchemaAnyBuilder<any, any, any>[]>(
|
|
130
|
+
items: S,
|
|
131
|
+
): JsonSchemaTupleBuilder<S> {
|
|
132
|
+
return new JsonSchemaTupleBuilder<S>(items)
|
|
133
|
+
},
|
|
134
|
+
|
|
129
135
|
set<IN, OUT, Opt>(
|
|
130
136
|
itemSchema: JsonSchemaAnyBuilder<IN, OUT, Opt>,
|
|
131
137
|
): JsonSchemaSet2Builder<IN, OUT, Opt> {
|
|
@@ -1139,6 +1145,23 @@ export class JsonSchemaEnumBuilder<
|
|
|
1139
1145
|
}
|
|
1140
1146
|
}
|
|
1141
1147
|
|
|
1148
|
+
export class JsonSchemaTupleBuilder<
|
|
1149
|
+
ITEMS extends JsonSchemaAnyBuilder<any, any, any>[],
|
|
1150
|
+
> extends JsonSchemaAnyBuilder<TupleIn<ITEMS>, TupleOut<ITEMS>, false> {
|
|
1151
|
+
private readonly _items: ITEMS
|
|
1152
|
+
|
|
1153
|
+
constructor(items: ITEMS) {
|
|
1154
|
+
super({
|
|
1155
|
+
type: 'array',
|
|
1156
|
+
prefixItems: items.map(i => i.build()),
|
|
1157
|
+
minItems: items.length,
|
|
1158
|
+
maxItems: items.length,
|
|
1159
|
+
})
|
|
1160
|
+
|
|
1161
|
+
this._items = items
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1142
1165
|
type EnumBaseType = 'string' | 'number' | 'other'
|
|
1143
1166
|
|
|
1144
1167
|
export interface JsonSchema<IN = unknown, OUT = IN> {
|
|
@@ -1156,6 +1179,7 @@ export interface JsonSchema<IN = unknown, OUT = IN> {
|
|
|
1156
1179
|
|
|
1157
1180
|
type?: string | string[]
|
|
1158
1181
|
items?: JsonSchema
|
|
1182
|
+
prefixItems?: JsonSchema[]
|
|
1159
1183
|
properties?: {
|
|
1160
1184
|
[K in keyof IN & keyof OUT]: JsonSchema<IN[K], OUT[K]>
|
|
1161
1185
|
}
|
|
@@ -1421,3 +1445,11 @@ type SchemaIn<S> = S extends JsonSchemaAnyBuilder<infer IN, any, any> ? IN : nev
|
|
|
1421
1445
|
type SchemaOut<S> = S extends JsonSchemaAnyBuilder<any, infer OUT, any> ? OUT : never
|
|
1422
1446
|
type SchemaOpt<S> =
|
|
1423
1447
|
S extends JsonSchemaAnyBuilder<any, any, infer Opt> ? (Opt extends true ? true : false) : false
|
|
1448
|
+
|
|
1449
|
+
type TupleIn<T extends readonly JsonSchemaAnyBuilder<any, any, any>[]> = {
|
|
1450
|
+
[K in keyof T]: T[K] extends JsonSchemaAnyBuilder<infer I, any, any> ? I : never
|
|
1451
|
+
}
|
|
1452
|
+
|
|
1453
|
+
type TupleOut<T extends readonly JsonSchemaAnyBuilder<any, any, any>[]> = {
|
|
1454
|
+
[K in keyof T]: T[K] extends JsonSchemaAnyBuilder<any, infer O, any> ? O : never
|
|
1455
|
+
}
|