@fuman/fetch 0.0.10 → 0.0.12

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.
@@ -1,11 +1,16 @@
1
1
  export interface FfetchTypeProvider {
2
2
  readonly schema: unknown;
3
3
  readonly parsed: unknown;
4
+ readonly safeParsed: unknown;
4
5
  }
5
6
  export interface FfetchParser<TypeProvider extends FfetchTypeProvider> {
6
7
  readonly _provider: TypeProvider;
7
8
  parse: (schema: unknown, value: unknown) => unknown | Promise<unknown>;
9
+ safeParse: (schema: unknown, value: unknown) => unknown | Promise<unknown>;
8
10
  }
9
11
  export type CallTypeProvider<TypeProvider extends FfetchTypeProvider, Schema> = (TypeProvider & {
10
12
  schema: Schema;
11
13
  })['parsed'];
14
+ export type CallSafeTypeProvider<TypeProvider extends FfetchTypeProvider, Schema> = (TypeProvider & {
15
+ schema: Schema;
16
+ })['safeParsed'];
@@ -1,11 +1,16 @@
1
1
  export interface FfetchTypeProvider {
2
2
  readonly schema: unknown;
3
3
  readonly parsed: unknown;
4
+ readonly safeParsed: unknown;
4
5
  }
5
6
  export interface FfetchParser<TypeProvider extends FfetchTypeProvider> {
6
7
  readonly _provider: TypeProvider;
7
8
  parse: (schema: unknown, value: unknown) => unknown | Promise<unknown>;
9
+ safeParse: (schema: unknown, value: unknown) => unknown | Promise<unknown>;
8
10
  }
9
11
  export type CallTypeProvider<TypeProvider extends FfetchTypeProvider, Schema> = (TypeProvider & {
10
12
  schema: Schema;
11
13
  })['parsed'];
14
+ export type CallSafeTypeProvider<TypeProvider extends FfetchTypeProvider, Schema> = (TypeProvider & {
15
+ schema: Schema;
16
+ })['safeParsed'];
@@ -1,7 +1,8 @@
1
- import { BaseIssue, BaseSchema, BaseSchemaAsync, Config, InferOutput } from 'valibot';
1
+ import { BaseIssue, BaseSchema, BaseSchemaAsync, Config, InferOutput, SafeParseResult } from 'valibot';
2
2
  import { FfetchParser, FfetchTypeProvider } from '../_types.js';
3
3
  export interface ValibotTypeProvider extends FfetchTypeProvider {
4
4
  readonly parsed: this['schema'] extends (BaseSchema<unknown, unknown, BaseIssue<unknown>> | BaseSchemaAsync<unknown, unknown, BaseIssue<unknown>>) ? InferOutput<this['schema']> : never;
5
+ readonly safeParsed: this['schema'] extends (BaseSchema<unknown, unknown, BaseIssue<unknown>> | BaseSchemaAsync<unknown, unknown, BaseIssue<unknown>>) ? SafeParseResult<this['schema']> : never;
5
6
  }
6
7
  export declare function ffetchValibotAdapter({ async, ...rest }?: Partial<Config<BaseIssue<unknown>>> & {
7
8
  async?: boolean;
@@ -1,7 +1,8 @@
1
- import { BaseIssue, BaseSchema, BaseSchemaAsync, Config, InferOutput } from 'valibot';
1
+ import { BaseIssue, BaseSchema, BaseSchemaAsync, Config, InferOutput, SafeParseResult } from 'valibot';
2
2
  import { FfetchParser, FfetchTypeProvider } from '../_types.js';
3
3
  export interface ValibotTypeProvider extends FfetchTypeProvider {
4
4
  readonly parsed: this['schema'] extends (BaseSchema<unknown, unknown, BaseIssue<unknown>> | BaseSchemaAsync<unknown, unknown, BaseIssue<unknown>>) ? InferOutput<this['schema']> : never;
5
+ readonly safeParsed: this['schema'] extends (BaseSchema<unknown, unknown, BaseIssue<unknown>> | BaseSchemaAsync<unknown, unknown, BaseIssue<unknown>>) ? SafeParseResult<this['schema']> : never;
5
6
  }
6
7
  export declare function ffetchValibotAdapter({ async, ...rest }?: Partial<Config<BaseIssue<unknown>>> & {
7
8
  async?: boolean;
@@ -2,6 +2,7 @@ import { FfetchParser, FfetchTypeProvider } from '../_types.js';
2
2
  import type * as v from '@badrap/valita';
3
3
  export interface ValitaTypeProvider extends FfetchTypeProvider {
4
4
  readonly parsed: this['schema'] extends v.Type<any> ? v.Infer<this['schema']> : never;
5
+ readonly safeParsed: this['schema'] extends v.Type<any> ? v.ValitaResult<v.Infer<this['schema']>> : never;
5
6
  }
6
7
  type ParseOptions = NonNullable<Parameters<v.Type<any>['parse']>[1]>;
7
8
  export declare function ffetchValitaAdapter(options?: ParseOptions): FfetchParser<ValitaTypeProvider>;
@@ -2,6 +2,7 @@ import { FfetchParser, FfetchTypeProvider } from '../_types.js';
2
2
  import type * as v from '@badrap/valita';
3
3
  export interface ValitaTypeProvider extends FfetchTypeProvider {
4
4
  readonly parsed: this['schema'] extends v.Type<any> ? v.Infer<this['schema']> : never;
5
+ readonly safeParsed: this['schema'] extends v.Type<any> ? v.ValitaResult<v.Infer<this['schema']>> : never;
5
6
  }
6
7
  type ParseOptions = NonNullable<Parameters<v.Type<any>['parse']>[1]>;
7
8
  export declare function ffetchValitaAdapter(options?: ParseOptions): FfetchParser<ValitaTypeProvider>;
@@ -1,7 +1,15 @@
1
- import { CastOptions, InferType, ISchema, ValidateOptions } from 'yup';
1
+ import { CastOptions, InferType, ISchema, ValidateOptions, ValidationError } from 'yup';
2
2
  import { FfetchParser, FfetchTypeProvider } from '../_types.js';
3
+ type YupSafeParseResult<R> = {
4
+ success: true;
5
+ data: R;
6
+ } | {
7
+ success: false;
8
+ error: ValidationError;
9
+ };
3
10
  export interface YupTypeProvider extends FfetchTypeProvider {
4
11
  readonly parsed: this['schema'] extends ISchema<any, any> ? InferType<this['schema']> : never;
12
+ readonly safeParsed: this['schema'] extends ISchema<any, any> ? YupSafeParseResult<InferType<this['schema']>> : never;
5
13
  }
6
14
  export type FfetchYupAdapterOptions = {
7
15
  action: 'cast';
@@ -11,3 +19,4 @@ export type FfetchYupAdapterOptions = {
11
19
  options?: ValidateOptions;
12
20
  };
13
21
  export declare function ffetchYupAdapter({ action, options, }?: FfetchYupAdapterOptions): FfetchParser<YupTypeProvider>;
22
+ export {};
@@ -1,7 +1,15 @@
1
- import { CastOptions, InferType, ISchema, ValidateOptions } from 'yup';
1
+ import { CastOptions, InferType, ISchema, ValidateOptions, ValidationError } from 'yup';
2
2
  import { FfetchParser, FfetchTypeProvider } from '../_types.js';
3
+ type YupSafeParseResult<R> = {
4
+ success: true;
5
+ data: R;
6
+ } | {
7
+ success: false;
8
+ error: ValidationError;
9
+ };
3
10
  export interface YupTypeProvider extends FfetchTypeProvider {
4
11
  readonly parsed: this['schema'] extends ISchema<any, any> ? InferType<this['schema']> : never;
12
+ readonly safeParsed: this['schema'] extends ISchema<any, any> ? YupSafeParseResult<InferType<this['schema']>> : never;
5
13
  }
6
14
  export type FfetchYupAdapterOptions = {
7
15
  action: 'cast';
@@ -11,3 +19,4 @@ export type FfetchYupAdapterOptions = {
11
19
  options?: ValidateOptions;
12
20
  };
13
21
  export declare function ffetchYupAdapter({ action, options, }?: FfetchYupAdapterOptions): FfetchParser<YupTypeProvider>;
22
+ export {};
@@ -1,6 +1,7 @@
1
- import { ParseParams, z } from 'zod';
1
+ import { ParseParams, SafeParseReturnType, z } from 'zod';
2
2
  import { FfetchParser, FfetchTypeProvider } from '../_types.js';
3
3
  export interface ZodTypeProvider extends FfetchTypeProvider {
4
4
  readonly parsed: this['schema'] extends z.ZodTypeAny ? z.infer<this['schema']> : never;
5
+ readonly safeParsed: this['schema'] extends z.ZodTypeAny ? SafeParseReturnType<this['schema'], z.infer<this['schema']>> : never;
5
6
  }
6
7
  export declare function ffetchZodAdapter({ async, ...rest }?: Partial<ParseParams>): FfetchParser<ZodTypeProvider>;
@@ -1,6 +1,7 @@
1
- import { ParseParams, z } from 'zod';
1
+ import { ParseParams, SafeParseReturnType, z } from 'zod';
2
2
  import { FfetchParser, FfetchTypeProvider } from '../_types.js';
3
3
  export interface ZodTypeProvider extends FfetchTypeProvider {
4
4
  readonly parsed: this['schema'] extends z.ZodTypeAny ? z.infer<this['schema']> : never;
5
+ readonly safeParsed: this['schema'] extends z.ZodTypeAny ? SafeParseReturnType<this['schema'], z.infer<this['schema']>> : never;
5
6
  }
6
7
  export declare function ffetchZodAdapter({ async, ...rest }?: Partial<ParseParams>): FfetchParser<ZodTypeProvider>;
@@ -5,6 +5,9 @@ function parser(parser2) {
5
5
  response: {
6
6
  async parsedJson(schema) {
7
7
  return parser2.parse(schema, await this.json());
8
+ },
9
+ async safelyParsedJson(schema) {
10
+ return parser2.safeParse(schema, await this.json());
8
11
  }
9
12
  }
10
13
  };
@@ -1,6 +1,7 @@
1
1
  import { FfetchAddon } from '../types.js';
2
- import { CallTypeProvider, FfetchParser, FfetchTypeProvider } from './_types.js';
2
+ import { CallSafeTypeProvider, CallTypeProvider, FfetchParser, FfetchTypeProvider } from './_types.js';
3
3
  export { FfetchParser, FfetchTypeProvider };
4
4
  export declare function parser<TypeProvider extends FfetchTypeProvider>(parser: FfetchParser<TypeProvider>): FfetchAddon<object, {
5
5
  parsedJson: <Schema>(schema: Schema) => Promise<CallTypeProvider<TypeProvider, Schema>>;
6
+ safelyParsedJson: <Schema>(schema: Schema) => Promise<CallSafeTypeProvider<TypeProvider, Schema>>;
6
7
  }>;
@@ -1,6 +1,7 @@
1
1
  import { FfetchAddon } from '../types.js';
2
- import { CallTypeProvider, FfetchParser, FfetchTypeProvider } from './_types.js';
2
+ import { CallSafeTypeProvider, CallTypeProvider, FfetchParser, FfetchTypeProvider } from './_types.js';
3
3
  export { FfetchParser, FfetchTypeProvider };
4
4
  export declare function parser<TypeProvider extends FfetchTypeProvider>(parser: FfetchParser<TypeProvider>): FfetchAddon<object, {
5
5
  parsedJson: <Schema>(schema: Schema) => Promise<CallTypeProvider<TypeProvider, Schema>>;
6
+ safelyParsedJson: <Schema>(schema: Schema) => Promise<CallSafeTypeProvider<TypeProvider, Schema>>;
6
7
  }>;
@@ -3,6 +3,9 @@ function parser(parser2) {
3
3
  response: {
4
4
  async parsedJson(schema) {
5
5
  return parser2.parse(schema, await this.json());
6
+ },
7
+ async safelyParsedJson(schema) {
8
+ return parser2.safeParse(schema, await this.json());
6
9
  }
7
10
  }
8
11
  };
package/ffetch.cjs CHANGED
@@ -194,6 +194,7 @@ function createFfetch(baseOptions = {}) {
194
194
  }
195
195
  }
196
196
  init.headers = headers;
197
+ options.validateResponse ??= baseOptions.validateResponse;
197
198
  return new FfetchResultInner(fetcher, url, init, headers, options, stack);
198
199
  };
199
200
  const fn = fn_;
package/ffetch.js CHANGED
@@ -192,6 +192,7 @@ function createFfetch(baseOptions = {}) {
192
192
  }
193
193
  }
194
194
  init.headers = headers;
195
+ options.validateResponse ??= baseOptions.validateResponse;
195
196
  return new FfetchResultInner(fetcher, url, init, headers, options, stack);
196
197
  };
197
198
  const fn = fn_;
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@fuman/fetch",
3
3
  "type": "module",
4
- "version": "0.0.10",
4
+ "version": "0.0.12",
5
5
  "description": "tiny wrapper over fetch",
6
6
  "license": "MIT",
7
7
  "dependencies": {
8
- "@fuman/utils": "^0.0.10"
8
+ "@fuman/utils": "^0.0.11"
9
9
  },
10
10
  "peerDependencies": {
11
11
  "@badrap/valita": ">=0.4.0",
package/valibot.cjs CHANGED
@@ -8,9 +8,15 @@ function ffetchValibotAdapter({ async, ...rest } = {}) {
8
8
  } : function(schema, value) {
9
9
  return valibot.parse(schema, value, rest);
10
10
  };
11
+ const safeParser = async ? async function(schema, value) {
12
+ return valibot.safeParseAsync(schema, value, rest);
13
+ } : function(schema, value) {
14
+ return valibot.safeParse(schema, value, rest);
15
+ };
11
16
  return {
12
17
  _provider,
13
- parse: parser
18
+ parse: parser,
19
+ safeParse: safeParser
14
20
  };
15
21
  }
16
22
  exports.ffetchValibotAdapter = ffetchValibotAdapter;
package/valibot.js CHANGED
@@ -1,4 +1,4 @@
1
- import { parseAsync, parse } from "valibot";
1
+ import { parseAsync, parse, safeParseAsync, safeParse } from "valibot";
2
2
  function ffetchValibotAdapter({ async, ...rest } = {}) {
3
3
  const _provider = null;
4
4
  const parser = async ? async function(schema, value) {
@@ -6,9 +6,15 @@ function ffetchValibotAdapter({ async, ...rest } = {}) {
6
6
  } : function(schema, value) {
7
7
  return parse(schema, value, rest);
8
8
  };
9
+ const safeParser = async ? async function(schema, value) {
10
+ return safeParseAsync(schema, value, rest);
11
+ } : function(schema, value) {
12
+ return safeParse(schema, value, rest);
13
+ };
9
14
  return {
10
15
  _provider,
11
- parse: parser
16
+ parse: parser,
17
+ safeParse: safeParser
12
18
  };
13
19
  }
14
20
  export {
package/valita.cjs CHANGED
@@ -6,6 +6,9 @@ function ffetchValitaAdapter(options) {
6
6
  _provider,
7
7
  parse(schema, value) {
8
8
  return schema.parse(value, options);
9
+ },
10
+ safeParse(schema, value) {
11
+ return schema.try(value, options);
9
12
  }
10
13
  };
11
14
  }
package/valita.js CHANGED
@@ -4,6 +4,9 @@ function ffetchValitaAdapter(options) {
4
4
  _provider,
5
5
  parse(schema, value) {
6
6
  return schema.parse(value, options);
7
+ },
8
+ safeParse(schema, value) {
9
+ return schema.try(value, options);
7
10
  }
8
11
  };
9
12
  }
package/yup.cjs CHANGED
@@ -5,14 +5,30 @@ function ffetchYupAdapter({
5
5
  options
6
6
  } = { action: "validate" }) {
7
7
  const _provider = null;
8
- const parse = action === "cast" ? async function(schema, value) {
8
+ const parse = action === "cast" ? function(schema, value) {
9
9
  return schema.cast(value, options);
10
- } : function(schema, value) {
10
+ } : async function(schema, value) {
11
11
  return schema.validate(value, options);
12
12
  };
13
+ const safeParse = action === "cast" ? function(schema, value) {
14
+ try {
15
+ const data = schema.cast(value, options);
16
+ return { success: true, data };
17
+ } catch (e) {
18
+ return { success: false, error: e };
19
+ }
20
+ } : async function(schema, value) {
21
+ try {
22
+ const data = await schema.validate(value, options);
23
+ return { success: true, data };
24
+ } catch (e) {
25
+ return { success: false, error: e };
26
+ }
27
+ };
13
28
  return {
14
29
  _provider,
15
- parse
30
+ parse,
31
+ safeParse
16
32
  };
17
33
  }
18
34
  exports.ffetchYupAdapter = ffetchYupAdapter;
package/yup.js CHANGED
@@ -3,14 +3,30 @@ function ffetchYupAdapter({
3
3
  options
4
4
  } = { action: "validate" }) {
5
5
  const _provider = null;
6
- const parse = action === "cast" ? async function(schema, value) {
6
+ const parse = action === "cast" ? function(schema, value) {
7
7
  return schema.cast(value, options);
8
- } : function(schema, value) {
8
+ } : async function(schema, value) {
9
9
  return schema.validate(value, options);
10
10
  };
11
+ const safeParse = action === "cast" ? function(schema, value) {
12
+ try {
13
+ const data = schema.cast(value, options);
14
+ return { success: true, data };
15
+ } catch (e) {
16
+ return { success: false, error: e };
17
+ }
18
+ } : async function(schema, value) {
19
+ try {
20
+ const data = await schema.validate(value, options);
21
+ return { success: true, data };
22
+ } catch (e) {
23
+ return { success: false, error: e };
24
+ }
25
+ };
11
26
  return {
12
27
  _provider,
13
- parse
28
+ parse,
29
+ safeParse
14
30
  };
15
31
  }
16
32
  export {
package/zod.cjs CHANGED
@@ -7,9 +7,15 @@ function ffetchZodAdapter({ async, ...rest } = {}) {
7
7
  } : function(schema, value) {
8
8
  return schema.parse(value, rest);
9
9
  };
10
+ const safeParse = async ? async function(schema, value) {
11
+ return schema.safeParseAsync(value, rest);
12
+ } : function(schema, value) {
13
+ return schema.safeParse(value, rest);
14
+ };
10
15
  return {
11
16
  _provider,
12
- parse
17
+ parse,
18
+ safeParse
13
19
  };
14
20
  }
15
21
  exports.ffetchZodAdapter = ffetchZodAdapter;
package/zod.js CHANGED
@@ -5,9 +5,15 @@ function ffetchZodAdapter({ async, ...rest } = {}) {
5
5
  } : function(schema, value) {
6
6
  return schema.parse(value, rest);
7
7
  };
8
+ const safeParse = async ? async function(schema, value) {
9
+ return schema.safeParseAsync(value, rest);
10
+ } : function(schema, value) {
11
+ return schema.safeParse(value, rest);
12
+ };
8
13
  return {
9
14
  _provider,
10
- parse
15
+ parse,
16
+ safeParse
11
17
  };
12
18
  }
13
19
  export {