@optique/core 1.0.0-dev.701 → 1.0.0-dev.717
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/dependency.cjs +71 -17
- package/dist/dependency.js +71 -17
- package/dist/valueparser.cjs +17 -1
- package/dist/valueparser.d.cts +7 -0
- package/dist/valueparser.d.ts +7 -0
- package/dist/valueparser.js +17 -1
- package/package.json +1 -1
package/dist/dependency.cjs
CHANGED
|
@@ -86,7 +86,7 @@ function dependency(parser) {
|
|
|
86
86
|
return createSyncDerivedParser(id, options);
|
|
87
87
|
},
|
|
88
88
|
deriveAsync(options) {
|
|
89
|
-
return
|
|
89
|
+
return createAsyncDerivedParserFromAsyncFactory(id, options);
|
|
90
90
|
}
|
|
91
91
|
};
|
|
92
92
|
return result;
|
|
@@ -212,8 +212,17 @@ function createSyncDerivedFromParser(sourceId, options) {
|
|
|
212
212
|
[dependencyIds]: alldependencyIds,
|
|
213
213
|
[defaultValues]: options.defaultValues,
|
|
214
214
|
parse(input) {
|
|
215
|
-
|
|
216
|
-
|
|
215
|
+
let derivedParser;
|
|
216
|
+
try {
|
|
217
|
+
const sourceValues = options.defaultValues();
|
|
218
|
+
derivedParser = options.factory(...sourceValues);
|
|
219
|
+
} catch (e) {
|
|
220
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
221
|
+
return {
|
|
222
|
+
success: false,
|
|
223
|
+
error: require_message.message`Derived parser error: ${msg}`
|
|
224
|
+
};
|
|
225
|
+
}
|
|
217
226
|
if (isAsyncModeParser(derivedParser)) return {
|
|
218
227
|
success: false,
|
|
219
228
|
error: require_message.message`Factory returned an async parser where a sync parser is required.`
|
|
@@ -277,9 +286,18 @@ function createAsyncDerivedFromParserFromAsyncFactory(sourceId, options) {
|
|
|
277
286
|
[dependencyIds]: alldependencyIds,
|
|
278
287
|
[defaultValues]: options.defaultValues,
|
|
279
288
|
parse(input) {
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
289
|
+
let derivedParser;
|
|
290
|
+
try {
|
|
291
|
+
const sourceValues = options.defaultValues();
|
|
292
|
+
derivedParser = options.factory(...sourceValues);
|
|
293
|
+
} catch (e) {
|
|
294
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
295
|
+
return Promise.resolve({
|
|
296
|
+
success: false,
|
|
297
|
+
error: require_message.message`Derived parser error: ${msg}`
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
return Promise.resolve(derivedParser.parse(input));
|
|
283
301
|
},
|
|
284
302
|
[parseWithDependency](input, dependencyValue) {
|
|
285
303
|
let derivedParser;
|
|
@@ -292,7 +310,7 @@ function createAsyncDerivedFromParserFromAsyncFactory(sourceId, options) {
|
|
|
292
310
|
error: require_message.message`Factory error: ${msg}`
|
|
293
311
|
});
|
|
294
312
|
}
|
|
295
|
-
return derivedParser.parse(input);
|
|
313
|
+
return Promise.resolve(derivedParser.parse(input));
|
|
296
314
|
},
|
|
297
315
|
format(value) {
|
|
298
316
|
const sourceValues = options.defaultValues();
|
|
@@ -334,8 +352,17 @@ function createAsyncDerivedFromParserFromSyncFactory(sourceId, options) {
|
|
|
334
352
|
[dependencyIds]: alldependencyIds,
|
|
335
353
|
[defaultValues]: options.defaultValues,
|
|
336
354
|
parse(input) {
|
|
337
|
-
|
|
338
|
-
|
|
355
|
+
let derivedParser;
|
|
356
|
+
try {
|
|
357
|
+
const sourceValues = options.defaultValues();
|
|
358
|
+
derivedParser = options.factory(...sourceValues);
|
|
359
|
+
} catch (e) {
|
|
360
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
361
|
+
return Promise.resolve({
|
|
362
|
+
success: false,
|
|
363
|
+
error: require_message.message`Derived parser error: ${msg}`
|
|
364
|
+
});
|
|
365
|
+
}
|
|
339
366
|
return Promise.resolve(derivedParser.parse(input));
|
|
340
367
|
},
|
|
341
368
|
[parseWithDependency](input, dependencyValue) {
|
|
@@ -402,8 +429,17 @@ function createSyncDerivedParser(sourceId, options) {
|
|
|
402
429
|
[derivedValueParserMarker]: true,
|
|
403
430
|
[dependencyId]: sourceId,
|
|
404
431
|
parse(input) {
|
|
405
|
-
|
|
406
|
-
|
|
432
|
+
let derivedParser;
|
|
433
|
+
try {
|
|
434
|
+
const sourceValue = options.defaultValue();
|
|
435
|
+
derivedParser = options.factory(sourceValue);
|
|
436
|
+
} catch (e) {
|
|
437
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
438
|
+
return {
|
|
439
|
+
success: false,
|
|
440
|
+
error: require_message.message`Derived parser error: ${msg}`
|
|
441
|
+
};
|
|
442
|
+
}
|
|
407
443
|
if (isAsyncModeParser(derivedParser)) return {
|
|
408
444
|
success: false,
|
|
409
445
|
error: require_message.message`Factory returned an async parser where a sync parser is required.`
|
|
@@ -463,9 +499,18 @@ function createAsyncDerivedParserFromAsyncFactory(sourceId, options) {
|
|
|
463
499
|
[derivedValueParserMarker]: true,
|
|
464
500
|
[dependencyId]: sourceId,
|
|
465
501
|
parse(input) {
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
502
|
+
let derivedParser;
|
|
503
|
+
try {
|
|
504
|
+
const sourceValue = options.defaultValue();
|
|
505
|
+
derivedParser = options.factory(sourceValue);
|
|
506
|
+
} catch (e) {
|
|
507
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
508
|
+
return Promise.resolve({
|
|
509
|
+
success: false,
|
|
510
|
+
error: require_message.message`Derived parser error: ${msg}`
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
return Promise.resolve(derivedParser.parse(input));
|
|
469
514
|
},
|
|
470
515
|
[parseWithDependency](input, dependencyValue) {
|
|
471
516
|
let derivedParser;
|
|
@@ -478,7 +523,7 @@ function createAsyncDerivedParserFromAsyncFactory(sourceId, options) {
|
|
|
478
523
|
error: require_message.message`Factory error: ${msg}`
|
|
479
524
|
});
|
|
480
525
|
}
|
|
481
|
-
return derivedParser.parse(input);
|
|
526
|
+
return Promise.resolve(derivedParser.parse(input));
|
|
482
527
|
},
|
|
483
528
|
format(value) {
|
|
484
529
|
const sourceValue = options.defaultValue();
|
|
@@ -516,8 +561,17 @@ function createAsyncDerivedParserFromSyncFactory(sourceId, options) {
|
|
|
516
561
|
[derivedValueParserMarker]: true,
|
|
517
562
|
[dependencyId]: sourceId,
|
|
518
563
|
parse(input) {
|
|
519
|
-
|
|
520
|
-
|
|
564
|
+
let derivedParser;
|
|
565
|
+
try {
|
|
566
|
+
const sourceValue = options.defaultValue();
|
|
567
|
+
derivedParser = options.factory(sourceValue);
|
|
568
|
+
} catch (e) {
|
|
569
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
570
|
+
return Promise.resolve({
|
|
571
|
+
success: false,
|
|
572
|
+
error: require_message.message`Derived parser error: ${msg}`
|
|
573
|
+
});
|
|
574
|
+
}
|
|
521
575
|
return Promise.resolve(derivedParser.parse(input));
|
|
522
576
|
},
|
|
523
577
|
[parseWithDependency](input, dependencyValue) {
|
package/dist/dependency.js
CHANGED
|
@@ -86,7 +86,7 @@ function dependency(parser) {
|
|
|
86
86
|
return createSyncDerivedParser(id, options);
|
|
87
87
|
},
|
|
88
88
|
deriveAsync(options) {
|
|
89
|
-
return
|
|
89
|
+
return createAsyncDerivedParserFromAsyncFactory(id, options);
|
|
90
90
|
}
|
|
91
91
|
};
|
|
92
92
|
return result;
|
|
@@ -212,8 +212,17 @@ function createSyncDerivedFromParser(sourceId, options) {
|
|
|
212
212
|
[dependencyIds]: alldependencyIds,
|
|
213
213
|
[defaultValues]: options.defaultValues,
|
|
214
214
|
parse(input) {
|
|
215
|
-
|
|
216
|
-
|
|
215
|
+
let derivedParser;
|
|
216
|
+
try {
|
|
217
|
+
const sourceValues = options.defaultValues();
|
|
218
|
+
derivedParser = options.factory(...sourceValues);
|
|
219
|
+
} catch (e) {
|
|
220
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
221
|
+
return {
|
|
222
|
+
success: false,
|
|
223
|
+
error: message`Derived parser error: ${msg}`
|
|
224
|
+
};
|
|
225
|
+
}
|
|
217
226
|
if (isAsyncModeParser(derivedParser)) return {
|
|
218
227
|
success: false,
|
|
219
228
|
error: message`Factory returned an async parser where a sync parser is required.`
|
|
@@ -277,9 +286,18 @@ function createAsyncDerivedFromParserFromAsyncFactory(sourceId, options) {
|
|
|
277
286
|
[dependencyIds]: alldependencyIds,
|
|
278
287
|
[defaultValues]: options.defaultValues,
|
|
279
288
|
parse(input) {
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
289
|
+
let derivedParser;
|
|
290
|
+
try {
|
|
291
|
+
const sourceValues = options.defaultValues();
|
|
292
|
+
derivedParser = options.factory(...sourceValues);
|
|
293
|
+
} catch (e) {
|
|
294
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
295
|
+
return Promise.resolve({
|
|
296
|
+
success: false,
|
|
297
|
+
error: message`Derived parser error: ${msg}`
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
return Promise.resolve(derivedParser.parse(input));
|
|
283
301
|
},
|
|
284
302
|
[parseWithDependency](input, dependencyValue) {
|
|
285
303
|
let derivedParser;
|
|
@@ -292,7 +310,7 @@ function createAsyncDerivedFromParserFromAsyncFactory(sourceId, options) {
|
|
|
292
310
|
error: message`Factory error: ${msg}`
|
|
293
311
|
});
|
|
294
312
|
}
|
|
295
|
-
return derivedParser.parse(input);
|
|
313
|
+
return Promise.resolve(derivedParser.parse(input));
|
|
296
314
|
},
|
|
297
315
|
format(value) {
|
|
298
316
|
const sourceValues = options.defaultValues();
|
|
@@ -334,8 +352,17 @@ function createAsyncDerivedFromParserFromSyncFactory(sourceId, options) {
|
|
|
334
352
|
[dependencyIds]: alldependencyIds,
|
|
335
353
|
[defaultValues]: options.defaultValues,
|
|
336
354
|
parse(input) {
|
|
337
|
-
|
|
338
|
-
|
|
355
|
+
let derivedParser;
|
|
356
|
+
try {
|
|
357
|
+
const sourceValues = options.defaultValues();
|
|
358
|
+
derivedParser = options.factory(...sourceValues);
|
|
359
|
+
} catch (e) {
|
|
360
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
361
|
+
return Promise.resolve({
|
|
362
|
+
success: false,
|
|
363
|
+
error: message`Derived parser error: ${msg}`
|
|
364
|
+
});
|
|
365
|
+
}
|
|
339
366
|
return Promise.resolve(derivedParser.parse(input));
|
|
340
367
|
},
|
|
341
368
|
[parseWithDependency](input, dependencyValue) {
|
|
@@ -402,8 +429,17 @@ function createSyncDerivedParser(sourceId, options) {
|
|
|
402
429
|
[derivedValueParserMarker]: true,
|
|
403
430
|
[dependencyId]: sourceId,
|
|
404
431
|
parse(input) {
|
|
405
|
-
|
|
406
|
-
|
|
432
|
+
let derivedParser;
|
|
433
|
+
try {
|
|
434
|
+
const sourceValue = options.defaultValue();
|
|
435
|
+
derivedParser = options.factory(sourceValue);
|
|
436
|
+
} catch (e) {
|
|
437
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
438
|
+
return {
|
|
439
|
+
success: false,
|
|
440
|
+
error: message`Derived parser error: ${msg}`
|
|
441
|
+
};
|
|
442
|
+
}
|
|
407
443
|
if (isAsyncModeParser(derivedParser)) return {
|
|
408
444
|
success: false,
|
|
409
445
|
error: message`Factory returned an async parser where a sync parser is required.`
|
|
@@ -463,9 +499,18 @@ function createAsyncDerivedParserFromAsyncFactory(sourceId, options) {
|
|
|
463
499
|
[derivedValueParserMarker]: true,
|
|
464
500
|
[dependencyId]: sourceId,
|
|
465
501
|
parse(input) {
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
502
|
+
let derivedParser;
|
|
503
|
+
try {
|
|
504
|
+
const sourceValue = options.defaultValue();
|
|
505
|
+
derivedParser = options.factory(sourceValue);
|
|
506
|
+
} catch (e) {
|
|
507
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
508
|
+
return Promise.resolve({
|
|
509
|
+
success: false,
|
|
510
|
+
error: message`Derived parser error: ${msg}`
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
return Promise.resolve(derivedParser.parse(input));
|
|
469
514
|
},
|
|
470
515
|
[parseWithDependency](input, dependencyValue) {
|
|
471
516
|
let derivedParser;
|
|
@@ -478,7 +523,7 @@ function createAsyncDerivedParserFromAsyncFactory(sourceId, options) {
|
|
|
478
523
|
error: message`Factory error: ${msg}`
|
|
479
524
|
});
|
|
480
525
|
}
|
|
481
|
-
return derivedParser.parse(input);
|
|
526
|
+
return Promise.resolve(derivedParser.parse(input));
|
|
482
527
|
},
|
|
483
528
|
format(value) {
|
|
484
529
|
const sourceValue = options.defaultValue();
|
|
@@ -516,8 +561,17 @@ function createAsyncDerivedParserFromSyncFactory(sourceId, options) {
|
|
|
516
561
|
[derivedValueParserMarker]: true,
|
|
517
562
|
[dependencyId]: sourceId,
|
|
518
563
|
parse(input) {
|
|
519
|
-
|
|
520
|
-
|
|
564
|
+
let derivedParser;
|
|
565
|
+
try {
|
|
566
|
+
const sourceValue = options.defaultValue();
|
|
567
|
+
derivedParser = options.factory(sourceValue);
|
|
568
|
+
} catch (e) {
|
|
569
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
570
|
+
return Promise.resolve({
|
|
571
|
+
success: false,
|
|
572
|
+
error: message`Derived parser error: ${msg}`
|
|
573
|
+
});
|
|
574
|
+
}
|
|
521
575
|
return Promise.resolve(derivedParser.parse(input));
|
|
522
576
|
},
|
|
523
577
|
[parseWithDependency](input, dependencyValue) {
|
package/dist/valueparser.cjs
CHANGED
|
@@ -308,6 +308,15 @@ function integer(options) {
|
|
|
308
308
|
}
|
|
309
309
|
const metavar = options?.metavar ?? "INTEGER";
|
|
310
310
|
require_nonempty.ensureNonEmptyString(metavar);
|
|
311
|
+
const maxSafe = BigInt(Number.MAX_SAFE_INTEGER);
|
|
312
|
+
const minSafe = BigInt(Number.MIN_SAFE_INTEGER);
|
|
313
|
+
const unsafeIntegerError = options?.errors?.unsafeInteger;
|
|
314
|
+
function makeUnsafeIntegerError(input) {
|
|
315
|
+
return {
|
|
316
|
+
success: false,
|
|
317
|
+
error: unsafeIntegerError ? typeof unsafeIntegerError === "function" ? unsafeIntegerError(input) : unsafeIntegerError : require_message.message`Expected a safe integer between ${require_message.text(Number.MIN_SAFE_INTEGER.toLocaleString("en"))} and ${require_message.text(Number.MAX_SAFE_INTEGER.toLocaleString("en"))}, but got ${input}. Use type: "bigint" for large values.`
|
|
318
|
+
};
|
|
319
|
+
}
|
|
311
320
|
return {
|
|
312
321
|
$mode: "sync",
|
|
313
322
|
metavar,
|
|
@@ -316,7 +325,14 @@ function integer(options) {
|
|
|
316
325
|
success: false,
|
|
317
326
|
error: options?.errors?.invalidInteger ? typeof options.errors.invalidInteger === "function" ? options.errors.invalidInteger(input) : options.errors.invalidInteger : require_message.message`Expected a valid integer, but got ${input}.`
|
|
318
327
|
};
|
|
319
|
-
|
|
328
|
+
let n;
|
|
329
|
+
try {
|
|
330
|
+
n = BigInt(input);
|
|
331
|
+
} catch {
|
|
332
|
+
return makeUnsafeIntegerError(input);
|
|
333
|
+
}
|
|
334
|
+
if (n > maxSafe || n < minSafe) return makeUnsafeIntegerError(input);
|
|
335
|
+
const value = Number(input);
|
|
320
336
|
if (options?.min != null && value < options.min) return {
|
|
321
337
|
success: false,
|
|
322
338
|
error: options.errors?.belowMinimum ? typeof options.errors.belowMinimum === "function" ? options.errors.belowMinimum(value, options.min) : options.errors.belowMinimum : require_message.message`Expected a value greater than or equal to ${require_message.text(options.min.toLocaleString("en"))}, but got ${input}.`
|
package/dist/valueparser.d.cts
CHANGED
|
@@ -279,6 +279,13 @@ interface IntegerOptionsNumber {
|
|
|
279
279
|
* @since 0.5.0
|
|
280
280
|
*/
|
|
281
281
|
invalidInteger?: Message | ((input: string) => Message);
|
|
282
|
+
/**
|
|
283
|
+
* Custom error message when integer is outside the safe integer range
|
|
284
|
+
* (`Number.MIN_SAFE_INTEGER` to `Number.MAX_SAFE_INTEGER`).
|
|
285
|
+
* Can be a static message or a function that receives the input string.
|
|
286
|
+
* @since 1.0.0
|
|
287
|
+
*/
|
|
288
|
+
unsafeInteger?: Message | ((input: string) => Message);
|
|
282
289
|
/**
|
|
283
290
|
* Custom error message when integer is below minimum value.
|
|
284
291
|
* Can be a static message or a function that receives the value and minimum.
|
package/dist/valueparser.d.ts
CHANGED
|
@@ -279,6 +279,13 @@ interface IntegerOptionsNumber {
|
|
|
279
279
|
* @since 0.5.0
|
|
280
280
|
*/
|
|
281
281
|
invalidInteger?: Message | ((input: string) => Message);
|
|
282
|
+
/**
|
|
283
|
+
* Custom error message when integer is outside the safe integer range
|
|
284
|
+
* (`Number.MIN_SAFE_INTEGER` to `Number.MAX_SAFE_INTEGER`).
|
|
285
|
+
* Can be a static message or a function that receives the input string.
|
|
286
|
+
* @since 1.0.0
|
|
287
|
+
*/
|
|
288
|
+
unsafeInteger?: Message | ((input: string) => Message);
|
|
282
289
|
/**
|
|
283
290
|
* Custom error message when integer is below minimum value.
|
|
284
291
|
* Can be a static message or a function that receives the value and minimum.
|
package/dist/valueparser.js
CHANGED
|
@@ -308,6 +308,15 @@ function integer(options) {
|
|
|
308
308
|
}
|
|
309
309
|
const metavar = options?.metavar ?? "INTEGER";
|
|
310
310
|
ensureNonEmptyString(metavar);
|
|
311
|
+
const maxSafe = BigInt(Number.MAX_SAFE_INTEGER);
|
|
312
|
+
const minSafe = BigInt(Number.MIN_SAFE_INTEGER);
|
|
313
|
+
const unsafeIntegerError = options?.errors?.unsafeInteger;
|
|
314
|
+
function makeUnsafeIntegerError(input) {
|
|
315
|
+
return {
|
|
316
|
+
success: false,
|
|
317
|
+
error: unsafeIntegerError ? typeof unsafeIntegerError === "function" ? unsafeIntegerError(input) : unsafeIntegerError : message`Expected a safe integer between ${text(Number.MIN_SAFE_INTEGER.toLocaleString("en"))} and ${text(Number.MAX_SAFE_INTEGER.toLocaleString("en"))}, but got ${input}. Use type: "bigint" for large values.`
|
|
318
|
+
};
|
|
319
|
+
}
|
|
311
320
|
return {
|
|
312
321
|
$mode: "sync",
|
|
313
322
|
metavar,
|
|
@@ -316,7 +325,14 @@ function integer(options) {
|
|
|
316
325
|
success: false,
|
|
317
326
|
error: options?.errors?.invalidInteger ? typeof options.errors.invalidInteger === "function" ? options.errors.invalidInteger(input) : options.errors.invalidInteger : message`Expected a valid integer, but got ${input}.`
|
|
318
327
|
};
|
|
319
|
-
|
|
328
|
+
let n;
|
|
329
|
+
try {
|
|
330
|
+
n = BigInt(input);
|
|
331
|
+
} catch {
|
|
332
|
+
return makeUnsafeIntegerError(input);
|
|
333
|
+
}
|
|
334
|
+
if (n > maxSafe || n < minSafe) return makeUnsafeIntegerError(input);
|
|
335
|
+
const value = Number(input);
|
|
320
336
|
if (options?.min != null && value < options.min) return {
|
|
321
337
|
success: false,
|
|
322
338
|
error: options.errors?.belowMinimum ? typeof options.errors.belowMinimum === "function" ? options.errors.belowMinimum(value, options.min) : options.errors.belowMinimum : message`Expected a value greater than or equal to ${text(options.min.toLocaleString("en"))}, but got ${input}.`
|