feat: Reinitialize frontend with SvelteKit and TypeScript

- Delete old Vite+Svelte frontend
- Initialize new SvelteKit project with TypeScript
- Configure Tailwind CSS v4 + DaisyUI
- Implement JWT authentication with auto-refresh
- Create login page with form validation (Zod)
- Add protected route guards
- Update Docker configuration for single-stage build
- Add E2E tests with Playwright (6/11 passing)
- Fix Svelte 5 reactivity with $state() runes

Known issues:
- 5 E2E tests failing (timing/async issues)
- Token refresh implementation needs debugging
- Validation error display timing
This commit is contained in:
2026-02-17 16:19:59 -05:00
parent 54df6018f5
commit de2d83092e
28274 changed files with 3816354 additions and 90 deletions

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=deserializationPattern.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"deserializationPattern.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=extendedJsonSchema.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"extendedJsonSchema.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=fromSchemaOptions.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"fromSchemaOptions.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"index.js"}

View File

@@ -0,0 +1,17 @@
export var $JSONSchema = Symbol("$JSONSchema");
/**
* Symbol used to make extended JSON schemas actually extend the JSONSchema type constraint at all time
*/
/**
* JSON Schema type
*/
/**
* JSON Schema type constraint
*/
/**
* JSON Schema with reference type constraint
*/
//# sourceMappingURL=jsonSchema.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,11 @@
export { wrapCompilerAsTypeGuard, wrapValidatorAsTypeGuard, asConst } from "./utils";
/**
* Given a JSON schema defined with the `as const` statement, infers the type of valid instances
* @param SCHEMA JSON schema
*/
/**
* Given an extended JSON schema defined with the `as const` statement, infers the type of valid instances
* @param SCHEMA JSON schema
*/
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../src/index.ts"],"names":["wrapCompilerAsTypeGuard","wrapValidatorAsTypeGuard","asConst"],"mappings":"AAwBA,SACEA,uBADF,EAEEC,wBAFF,EAGEC,OAHF;AAMA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA","sourcesContent":["import type { M } from \"ts-algebra\";\n\nimport type {\n ExtendedJSONSchema,\n FromExtendedSchemaOptions,\n FromSchemaDefaultOptions,\n FromSchemaOptions,\n JSONSchema,\n JSONSchemaExtension,\n UnextendJSONSchema,\n} from \"./definitions\";\nimport type { ParseOptions } from \"./parse-options\";\nimport type { ParseSchema } from \"./parse-schema\";\n\nexport type {\n ExtendedJSONSchema,\n DeserializationPattern,\n FromSchemaOptions,\n FromExtendedSchemaOptions,\n FromSchemaDefaultOptions,\n JSONSchemaExtension,\n JSONSchema,\n} from \"./definitions\";\nexport type { $Compiler, Compiler, $Validator, Validator } from \"./utils\";\nexport {\n wrapCompilerAsTypeGuard,\n wrapValidatorAsTypeGuard,\n asConst,\n} from \"./utils\";\n\n/**\n * Given a JSON schema defined with the `as const` statement, infers the type of valid instances\n * @param SCHEMA JSON schema\n */\nexport type FromSchema<\n SCHEMA extends JSONSchema,\n OPTIONS extends FromSchemaOptions = FromSchemaDefaultOptions,\n> = M.$Resolve<ParseSchema<SCHEMA, ParseOptions<SCHEMA, OPTIONS>>>;\n\n/**\n * Given an extended JSON schema defined with the `as const` statement, infers the type of valid instances\n * @param SCHEMA JSON schema\n */\nexport type FromExtendedSchema<\n EXTENSION extends JSONSchemaExtension,\n SCHEMA extends ExtendedJSONSchema<EXTENSION>,\n OPTIONS extends\n FromExtendedSchemaOptions<EXTENSION> = FromSchemaDefaultOptions,\n UNEXTENDED_SCHEMA = UnextendJSONSchema<EXTENSION, SCHEMA>,\n> = UNEXTENDED_SCHEMA extends JSONSchema\n ? FromSchema<UNEXTENDED_SCHEMA, OPTIONS>\n : never;\n"],"file":"index.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=parse-options.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"parse-options.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=allOf.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"allOf.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=anyOf.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"anyOf.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=array.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"array.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=const.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"const.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=deserialize.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"deserialize.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=enum.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"enum.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=ifThenElse.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"ifThenElse.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"index.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=multipleTypes.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"multipleTypes.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=not.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"not.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=nullable.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"nullable.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=object.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"object.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=oneOf.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"oneOf.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=external.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"external.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"index.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=internal.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"internal.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=utils.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"utils.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=singleType.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"singleType.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=utils.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"utils.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=and.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"and.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=extends.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"extends.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=get.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"get.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=if.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"if.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"index.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=join.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"join.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=key.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"key.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=narrow.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"narrow.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=not.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"not.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=pop.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"pop.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=split.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"split.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=tail.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"tail.js"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=writable.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"writable.js"}

View File

@@ -0,0 +1,17 @@
/**
* Returns the input parameter without muting it, but narrowing its inferred type. Similar to using the `as const` statement functionnally.
* @param input Input
* @returns Input, narrowly typed
*
* ```ts
* const object = { foo: "bar" }
* // { foo: string }
*
* const narrowedObject = asConst({ foo: "bar "})
* // => { foo: "bar" }
* ```
*/
export var asConst = function asConst(input) {
return input;
};
//# sourceMappingURL=asConst.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/utils/asConst.ts"],"names":["asConst","input"],"mappings":"AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMA,OAAO,GAAG,SAAVA,OAAU,CAAQC,KAAR;AAAA,SAAgDA,KAAhD;AAAA,CAAhB","sourcesContent":["import type { Narrow } from \"~/type-utils\";\n\n/**\n * Returns the input parameter without muting it, but narrowing its inferred type. Similar to using the `as const` statement functionnally.\n * @param input Input\n * @returns Input, narrowly typed\n *\n * ```ts\n * const object = { foo: \"bar\" }\n * // { foo: string }\n *\n * const narrowedObject = asConst({ foo: \"bar \"})\n * // => { foo: \"bar\" }\n * ```\n */\nexport const asConst = <INPUT>(input: Narrow<INPUT>): Narrow<INPUT> => input;\n"],"file":"asConst.js"}

View File

@@ -0,0 +1,3 @@
export { wrapCompilerAsTypeGuard, wrapValidatorAsTypeGuard } from "./type-guards";
export { asConst } from "./asConst";
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/utils/index.ts"],"names":["wrapCompilerAsTypeGuard","wrapValidatorAsTypeGuard","asConst"],"mappings":"AACA,SACEA,uBADF,EAEEC,wBAFF;AAIA,SAASC,OAAT","sourcesContent":["export type { $Compiler, Compiler, $Validator, Validator } from \"./type-guards\";\nexport {\n wrapCompilerAsTypeGuard,\n wrapValidatorAsTypeGuard,\n} from \"./type-guards\";\nexport { asConst } from \"./asConst\";\n"],"file":"index.js"}

View File

@@ -0,0 +1,43 @@
/**
* Any compiler function type (non type-guarding)
*/
/**
* Adds type guarding to a validator function
*
* ```ts
* const compiler: Compiler = <S extends JSONSchema, T = FromSchema<S>>(
* schema: S,
* ) => (data: unknown): data is T => {
* const isDataValid: boolean = ... // Implement validation here
* return isDataValid;
* };
* ```
*/
/**
* Type definition for `wrapCompilerAsTypeGuard`
*/
/**
* Adds type guarding to any compiler function (doesn't modify it)
* @param compiler Compiler function
* @returns Compiler function with type guarding
*/
export var wrapCompilerAsTypeGuard = function wrapCompilerAsTypeGuard(compiler) {
return function (schema) {
for (var _len = arguments.length, compilingOptions = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
compilingOptions[_key - 1] = arguments[_key];
}
var validator = compiler.apply(void 0, [schema].concat(compilingOptions));
return function (data) {
for (var _len2 = arguments.length, validationOptions = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
validationOptions[_key2 - 1] = arguments[_key2];
}
return validator.apply(void 0, [data].concat(validationOptions));
};
};
};
//# sourceMappingURL=compiler.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/utils/type-guards/compiler.ts"],"names":["wrapCompilerAsTypeGuard","compiler","schema","compilingOptions","validator","data","validationOptions"],"mappings":"AAOA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMA,uBAAwC,GACnD,SADWA,uBACX,CAKEC,QALF;AAAA,SAOA,UACEC,MADF,EAGK;AAAA,sCADAC,gBACA;AADAA,MAAAA,gBACA;AAAA;;AACH,QAAMC,SAAS,GAAGH,QAAQ,MAAR,UAASC,MAAT,SAAoBC,gBAApB,EAAlB;AAEA,WAAO,UAACE,IAAD;AAAA,yCAAmBC,iBAAnB;AAAmBA,QAAAA,iBAAnB;AAAA;;AAAA,aACLF,SAAS,MAAT,UAAUC,IAAV,SAAmBC,iBAAnB,EADK;AAAA,KAAP;AAED,GAfD;AAAA,CADK","sourcesContent":["import type {\n FromSchema,\n FromSchemaDefaultOptions,\n FromSchemaOptions,\n JSONSchema,\n} from \"~/index\";\n\n/**\n * Any compiler function type (non type-guarding)\n */\nexport type $Compiler<C extends unknown[] = [], V extends unknown[] = []> = (\n schema: JSONSchema,\n ...compilingOptions: C\n) => (data: unknown, ...validationOptions: V) => boolean;\n\n/**\n * Adds type guarding to a validator function\n *\n * ```ts\n * const compiler: Compiler = <S extends JSONSchema, T = FromSchema<S>>(\n * schema: S,\n * ) => (data: unknown): data is T => {\n * const isDataValid: boolean = ... // Implement validation here\n * return isDataValid;\n * };\n * ```\n */\nexport type Compiler<\n O extends FromSchemaOptions = FromSchemaDefaultOptions,\n C extends unknown[] = [],\n V extends unknown[] = [],\n> = <S extends JSONSchema, T = FromSchema<S, O>>(\n schema: S,\n ...compilingOptions: C\n) => (data: unknown, ...validationOptions: V) => data is T;\n\n/**\n * Type definition for `wrapCompilerAsTypeGuard`\n */\ntype CompilerWrapper = <\n O extends FromSchemaOptions = FromSchemaDefaultOptions,\n C extends unknown[] = [],\n V extends unknown[] = [],\n>(\n compiler: $Compiler<C, V>,\n) => Compiler<O, C, V>;\n\n/**\n * Adds type guarding to any compiler function (doesn't modify it)\n * @param compiler Compiler function\n * @returns Compiler function with type guarding\n */\nexport const wrapCompilerAsTypeGuard: CompilerWrapper =\n <\n O extends FromSchemaOptions = FromSchemaDefaultOptions,\n C extends unknown[] = [],\n V extends unknown[] = [],\n >(\n compiler: $Compiler<C, V>,\n ) =>\n <S extends JSONSchema, T = FromSchema<S, O>>(\n schema: S,\n ...compilingOptions: C\n ) => {\n const validator = compiler(schema, ...compilingOptions);\n\n return (data: unknown, ...validationOptions: V): data is T =>\n validator(data, ...validationOptions);\n };\n"],"file":"compiler.js"}

View File

@@ -0,0 +1,3 @@
export { wrapCompilerAsTypeGuard } from "./compiler";
export { wrapValidatorAsTypeGuard } from "./validator";
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/utils/type-guards/index.ts"],"names":["wrapCompilerAsTypeGuard","wrapValidatorAsTypeGuard"],"mappings":"AACA,SAASA,uBAAT;AAEA,SAASC,wBAAT","sourcesContent":["export type { $Compiler, Compiler } from \"./compiler\";\nexport { wrapCompilerAsTypeGuard } from \"./compiler\";\nexport type { $Validator, Validator } from \"./validator\";\nexport { wrapValidatorAsTypeGuard } from \"./validator\";\n"],"file":"index.js"}

View File

@@ -0,0 +1,37 @@
/**
* Any validator function type (non type-guarding)
*/
/**
* Adds type guarding to a validator function
*
* ```ts
* const validate: Validator = <S extends JSONSchema, T = FromSchema<S>>(
* schema: S,
* data: unknown
* ): data is T => {
* const isDataValid: boolean = ... // Implement validation here
* return isDataValid;
* };
* ```
*/
/**
* Type definition for wrapValidatorAsTypeGuard
*/
/**
* Adds type guarding to any validator function (doesn't modify it)
* @param validator Validator function
* @returns Validator function with type guarding
*/
export var wrapValidatorAsTypeGuard = function wrapValidatorAsTypeGuard(validator) {
return function (schema, data) {
for (var _len = arguments.length, validationOptions = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
validationOptions[_key - 2] = arguments[_key];
}
return validator.apply(void 0, [schema, data].concat(validationOptions));
};
};
//# sourceMappingURL=validator.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/utils/type-guards/validator.ts"],"names":["wrapValidatorAsTypeGuard","validator","schema","data","validationOptions"],"mappings":"AAOA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMA,wBAA0C,GACrD,SADWA,wBACX,CAIEC,SAJF;AAAA,SAMA,UACEC,MADF,EAEEC,IAFF;AAAA,sCAGKC,iBAHL;AAGKA,MAAAA,iBAHL;AAAA;;AAAA,WAKEH,SAAS,MAAT,UAAUC,MAAV,EAAkBC,IAAlB,SAA2BC,iBAA3B,EALF;AAAA,GANA;AAAA,CADK","sourcesContent":["import type {\n FromSchema,\n FromSchemaDefaultOptions,\n FromSchemaOptions,\n JSONSchema,\n} from \"~/index\";\n\n/**\n * Any validator function type (non type-guarding)\n */\nexport type $Validator<V extends unknown[] = []> = (\n schema: JSONSchema,\n data: unknown,\n ...validationOptions: V\n) => boolean;\n\n/**\n * Adds type guarding to a validator function\n *\n * ```ts\n * const validate: Validator = <S extends JSONSchema, T = FromSchema<S>>(\n * schema: S,\n * data: unknown\n * ): data is T => {\n * const isDataValid: boolean = ... // Implement validation here\n * return isDataValid;\n * };\n * ```\n */\nexport type Validator<\n O extends FromSchemaOptions = FromSchemaDefaultOptions,\n V extends unknown[] = [],\n> = <S extends JSONSchema, T = FromSchema<S, O>>(\n schema: S,\n data: unknown,\n ...validationOptions: V\n) => data is T;\n\n/**\n * Type definition for wrapValidatorAsTypeGuard\n */\ntype ValidatorWrapper = <\n O extends FromSchemaOptions = FromSchemaDefaultOptions,\n V extends unknown[] = [],\n>(\n validator: $Validator<V>,\n) => Validator<O, V>;\n\n/**\n * Adds type guarding to any validator function (doesn't modify it)\n * @param validator Validator function\n * @returns Validator function with type guarding\n */\nexport const wrapValidatorAsTypeGuard: ValidatorWrapper =\n <\n O extends FromSchemaOptions = FromSchemaDefaultOptions,\n V extends unknown[] = [],\n >(\n validator: $Validator<V>,\n ) =>\n <S extends JSONSchema, T = FromSchema<S, O>>(\n schema: S,\n data: unknown,\n ...validationOptions: V\n ): data is T =>\n validator(schema, data, ...validationOptions);\n"],"file":"validator.js"}