@tma.js/transformers 1.1.0 → 1.1.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.
@@ -5,7 +5,7 @@ export type ParseInitDataQueryError = ValiError<InitDataGenSchema>;
5
5
  export type ParseLaunchParamsQueryError = ValiError<LaunchParamsGenSchema>;
6
6
  export declare function parseInitDataQueryFp(value: string | URLSearchParams): E.Either<ParseInitDataQueryError, InitDataGenType>;
7
7
  export declare function parseLaunchParamsQueryFp(value: string | URLSearchParams): E.Either<ParseLaunchParamsQueryError, LaunchParamsGenType>;
8
- export declare const parseInitDataQuery: (value: string | URLSearchParams) => {
8
+ export declare const parseInitDataQuery: ((value: string | URLSearchParams) => {
9
9
  auth_date: Date;
10
10
  can_send_after?: number | undefined;
11
11
  chat?: ({
@@ -53,8 +53,8 @@ export declare const parseInitDataQuery: (value: string | URLSearchParams) => {
53
53
  }) | undefined;
54
54
  } & {
55
55
  [key: string]: unknown;
56
- };
57
- export declare const parseLaunchParamsQuery: (value: string | URLSearchParams) => {
56
+ }) & {};
57
+ export declare const parseLaunchParamsQuery: ((value: string | URLSearchParams) => {
58
58
  tgWebAppBotInline?: boolean | undefined;
59
59
  tgWebAppData?: ({
60
60
  auth_date: Date;
@@ -146,4 +146,4 @@ export declare const parseLaunchParamsQuery: (value: string | URLSearchParams) =
146
146
  tgWebAppVersion: string;
147
147
  } & {
148
148
  [key: string]: unknown;
149
- };
149
+ }) & {};
@@ -3,8 +3,7 @@ import { TransformJsonToSchemaAction, TransformQueryToSchemaAction } from './tra
3
3
  type RequiredSchema = BaseSchema<any, any, BaseIssue<any>>;
4
4
  export type JsonToSchemaPipe<Schema extends RequiredSchema> = SchemaWithPipe<readonly [
5
5
  StringSchema<undefined>,
6
- TransformJsonToSchemaAction,
7
- Schema
6
+ TransformJsonToSchemaAction<Schema>
8
7
  ]>;
9
8
  export type QueryToSchemaPipe<Schema extends RequiredSchema> = SchemaWithPipe<readonly [
10
9
  UnionSchema<[
package/dist/dts/rgb.d.ts CHANGED
@@ -50,8 +50,8 @@ export declare function toRGBFp(value: string): E.Either<Error, RGB>;
50
50
  * @see toRGBFp
51
51
  * @deprecated This function cuts the RGB's alpha channel. Use the `toRGBFull` function instead.
52
52
  */
53
- export declare const toRGB: (value: string) => `#${string}`;
53
+ export declare const toRGB: ((value: string) => `#${string}`) & {};
54
54
  /**
55
55
  * @see toRGBFullFp
56
56
  */
57
- export declare const toRGBFull: (value: string) => `#${string}`;
57
+ export declare const toRGBFull: ((value: string) => `#${string}`) & {};
@@ -1,10 +1,22 @@
1
- import { BaseIssue, BaseSchema, InferOutput, TransformAction } from 'valibot';
1
+ import { BaseIssue, BaseSchema, CheckAction, InferOutput, InstanceSchema, SchemaWithPipe, StringSchema, TransformAction, UnionSchema } from 'valibot';
2
2
  type RequiredSchema = BaseSchema<any, any, BaseIssue<any>>;
3
- export type TransformJsonToSchemaAction = TransformAction<string, unknown>;
4
- export type TransformQueryToSchemaAction<Schema extends RequiredSchema> = TransformAction<string | URLSearchParams, InferOutput<Schema>>;
3
+ export type TransformJsonToSchemaAction<Schema extends RequiredSchema> = SchemaWithPipe<readonly [
4
+ StringSchema<any>,
5
+ CheckAction<string, string>,
6
+ TransformAction<string, unknown>,
7
+ Schema
8
+ ]>;
9
+ export type TransformQueryToSchemaAction<Schema extends RequiredSchema> = SchemaWithPipe<readonly [
10
+ UnionSchema<[
11
+ StringSchema<undefined>,
12
+ InstanceSchema<typeof URLSearchParams, undefined>
13
+ ], undefined>,
14
+ CheckAction<string | URLSearchParams, string>,
15
+ TransformAction<string | URLSearchParams, InferOutput<Schema>>
16
+ ]>;
5
17
  export declare function transformQueryToSchema<Schema extends RequiredSchema>(schema: Schema): TransformQueryToSchemaAction<Schema>;
6
18
  /**
7
19
  * @returns A transformer applying `JSON.parse` to the input.
8
20
  */
9
- export declare function transformJsonToSchema(): TransformJsonToSchemaAction;
21
+ export declare function transformJsonToSchema<Schema extends RequiredSchema>(schema: Schema): TransformJsonToSchemaAction<Schema>;
10
22
  export {};
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("@tma.js/toolkit"),t=require("valibot");function J(r,n,e,i,a,o,l,_,j){switch(arguments.length){case 1:return r;case 2:return n(r);case 3:return e(n(r));case 4:return i(e(n(r)));case 5:return a(i(e(n(r))));case 6:return o(a(i(e(n(r)))));case 7:return l(o(a(i(e(n(r))))));case 8:return _(l(o(a(i(e(n(r)))))));case 9:return j(_(l(o(a(i(e(n(r))))))));default:{for(var f=arguments[0],g=1;g<arguments.length;g++)f=arguments[g](f);return f}}}var z=function(r){return r._tag==="Left"},N=function(r){return{_tag:"Left",left:r}},U=function(r){return{_tag:"Right",right:r}},B=N,s=U,q=function(r){return function(n){return E(n)?n:s(r(n.right))}},E=z,Q=function(r,n){try{return s(r())}catch(e){return B(n(e))}};function M(r){return t.transform(n=>{const e={};return new URLSearchParams(n).forEach((i,a)=>{const o=e[a];Array.isArray(o)?o.push(i):o===void 0?e[a]=i:e[a]=[o,i]}),t.parse(r,e)})}function V(){return t.transform(JSON.parse)}function u(r){return t.pipe(t.string(),V(),r)}function y(r){return t.pipe(t.union([t.string(),t.instance(URLSearchParams)]),M(r))}function c(r){return n=>r.test(n)}const b=c(/^#[\da-f]{3}$/i),P=c(/^#[\da-f]{4}$/i),D=c(/^#[\da-f]{6}$/i),L=c(/^#[\da-f]{8}$/i);function G(r){return[D,L,b,P].some(n=>n(r))}function R(r){let n="#";for(let e=0;e<r.length-1;e+=1)n+=r[1+e].repeat(2);return n}function d(r){const n=r.replace(/\s/g,"").toLowerCase();if(/^#[\da-f]{3}$/i.test(n))return s(R(n.toLowerCase()+"f"));if(/^#[\da-f]{4}$/i.test(n))return s(R(n.toLowerCase()));if(/^#[\da-f]{6}$/i.test(n))return s(n.toLowerCase()+"ff");if(/^#[\da-f]{8}$/i.test(n))return s(n.toLowerCase());const e=n.match(/^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)$/)||n.match(/^rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(\d{1,3})\)$/);return e?s(e.slice(1).reduce((i,a)=>i+parseInt(a,10).toString(16).padStart(2,"0"),"#").padEnd(9,"f")):B(new Error(`Value "${r}" does not satisfy any of known RGB formats.`))}function F(r){return J(d(r),q(n=>n.slice(0,7)))}const v=p.eitherFnToSimple(F),x=p.eitherFnToSimple(d);function w(){return t.looseObject({id:t.number(),photo_url:t.optional(t.string()),type:t.string(),title:t.string(),username:t.optional(t.string())})}function h(){return t.looseObject({added_to_attachment_menu:t.optional(t.boolean()),allows_write_to_pm:t.optional(t.boolean()),first_name:t.string(),id:t.number(),is_bot:t.optional(t.boolean()),is_premium:t.optional(t.boolean()),last_name:t.optional(t.string()),language_code:t.optional(t.string()),photo_url:t.optional(t.string()),username:t.optional(t.string())})}function T(){return t.looseObject({auth_date:t.pipe(t.string(),t.transform(r=>new Date(Number(r)*1e3)),t.date()),can_send_after:t.optional(t.pipe(t.string(),t.transform(Number),t.integer())),chat:t.optional(u(w())),chat_type:t.optional(t.string()),chat_instance:t.optional(t.string()),hash:t.string(),query_id:t.optional(t.string()),receiver:t.optional(u(h())),start_param:t.optional(t.string()),signature:t.string(),user:t.optional(u(h()))})}function S(){return y(T())}function m(){return t.record(t.string(),t.pipe(t.union([t.string(),t.number()]),t.transform(r=>typeof r=="number"?`#${(r&16777215).toString(16).padStart(6,"0")}`:r),t.check(G)))}function $(){const r=t.optional(t.pipe(t.string(),t.transform(n=>n==="1")));return t.looseObject({tgWebAppBotInline:r,tgWebAppData:t.optional(S()),tgWebAppDefaultColors:t.optional(u(m())),tgWebAppFullscreen:r,tgWebAppPlatform:t.string(),tgWebAppShowSettings:r,tgWebAppStartParam:t.optional(t.string()),tgWebAppThemeParams:u(m()),tgWebAppVersion:t.string()})}function A(){return y($())}function k(r){try{return t.is(A(),r)}catch{return!1}}function H(){return t.looseObject({eventType:t.string(),eventData:t.optional(t.unknown())})}function O(r){return Q(()=>t.parse(S(),r),n=>n)}function W(r){return Q(()=>t.parse(A(),r),n=>n)}const K=p.eitherFnToSimple(O),X=p.eitherFnToSimple(W);function C(r,n){return n||(n=(e,i)=>JSON.stringify(i)),new URLSearchParams(Object.entries(r).reduce((e,[i,a])=>(Array.isArray(a)?e.push(...a.map(o=>[i,String(o)])):a!=null&&e.push([i,a instanceof Date?(a.getTime()/1e3|0).toString():typeof a=="string"||typeof a=="number"?String(a):typeof a=="boolean"?a?"1":"0":n(i,a)]),e),[])).toString()}function I(r){return C(r)}function Y(r){return C(r,(n,e)=>n==="tgWebAppData"?I(e):JSON.stringify(e))}exports.initData=T;exports.initDataChat=w;exports.initDataQuery=S;exports.initDataUser=h;exports.isAnyRGB=G;exports.isLaunchParamsQuery=k;exports.isRGB=D;exports.isRGBA=L;exports.isRGBAShort=P;exports.isRGBShort=b;exports.launchParams=$;exports.launchParamsQuery=A;exports.miniAppsMessage=H;exports.parseInitDataQuery=K;exports.parseInitDataQueryFp=O;exports.parseLaunchParamsQuery=X;exports.parseLaunchParamsQueryFp=W;exports.pipeJsonToSchema=u;exports.pipeQueryToSchema=y;exports.serializeInitDataQuery=I;exports.serializeLaunchParamsQuery=Y;exports.themeParams=m;exports.toRGB=v;exports.toRGBFp=F;exports.toRGBFull=x;exports.toRGBFullFp=d;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("@tma.js/toolkit"),t=require("valibot");function N(r,n,e,i,a,o,s,_,J){switch(arguments.length){case 1:return r;case 2:return n(r);case 3:return e(n(r));case 4:return i(e(n(r)));case 5:return a(i(e(n(r))));case 6:return o(a(i(e(n(r)))));case 7:return s(o(a(i(e(n(r))))));case 8:return _(s(o(a(i(e(n(r)))))));case 9:return J(_(s(o(a(i(e(n(r))))))));default:{for(var f=arguments[0],g=1;g<arguments.length;g++)f=arguments[g](f);return f}}}var j=function(r){return r._tag==="Left"},U=function(r){return{_tag:"Left",left:r}},z=function(r){return{_tag:"Right",right:r}},B=U,u=z,q=function(r){return function(n){return v(n)?n:u(r(n.right))}},v=j,P=function(r,n){try{return u(r())}catch(e){return B(n(e))}};function E(r){const n=e=>{const i={};return new URLSearchParams(e).forEach((a,o)=>{const s=i[o];Array.isArray(s)?s.push(a):s===void 0?i[o]=a:i[o]=[s,a]}),t.parse(r,i)};return t.pipe(t.union([t.string(),t.instance(URLSearchParams)]),t.check(e=>{try{return n(e),!0}catch{return!1}},"The value doesn't match required schema"),t.transform(n))}function M(r){return t.pipe(t.string(),t.check(n=>{try{return JSON.parse(n),!0}catch{return!1}},"Input is not a valid JSON value"),t.transform(JSON.parse),r)}function p(r){return t.pipe(t.string(),M(r))}function y(r){return t.pipe(t.union([t.string(),t.instance(URLSearchParams)]),E(r))}function l(r){return n=>r.test(n)}const Q=l(/^#[\da-f]{3}$/i),b=l(/^#[\da-f]{4}$/i),F=l(/^#[\da-f]{6}$/i),L=l(/^#[\da-f]{8}$/i);function D(r){return[F,L,Q,b].some(n=>n(r))}function R(r){let n="#";for(let e=0;e<r.length-1;e+=1)n+=r[1+e].repeat(2);return n}function d(r){const n=r.replace(/\s/g,"").toLowerCase();if(/^#[\da-f]{3}$/i.test(n))return u(R(n.toLowerCase()+"f"));if(/^#[\da-f]{4}$/i.test(n))return u(R(n.toLowerCase()));if(/^#[\da-f]{6}$/i.test(n))return u(n.toLowerCase()+"ff");if(/^#[\da-f]{8}$/i.test(n))return u(n.toLowerCase());const e=n.match(/^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)$/)||n.match(/^rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(\d{1,3})\)$/);return e?u(e.slice(1).reduce((i,a)=>i+parseInt(a,10).toString(16).padStart(2,"0"),"#").padEnd(9,"f")):B(new Error(`Value "${r}" does not satisfy any of known RGB formats.`))}function w(r){return N(d(r),q(n=>n.slice(0,7)))}const V=c.throwifyFpFn(w),k=c.throwifyFpFn(d);function G(){return t.looseObject({id:t.number(),photo_url:t.optional(t.string()),type:t.string(),title:t.string(),username:t.optional(t.string())})}function h(){return t.looseObject({added_to_attachment_menu:t.optional(t.boolean()),allows_write_to_pm:t.optional(t.boolean()),first_name:t.string(),id:t.number(),is_bot:t.optional(t.boolean()),is_premium:t.optional(t.boolean()),last_name:t.optional(t.string()),language_code:t.optional(t.string()),photo_url:t.optional(t.string()),username:t.optional(t.string())})}function $(){return t.looseObject({auth_date:t.pipe(t.string(),t.transform(r=>new Date(Number(r)*1e3)),t.date()),can_send_after:t.optional(t.pipe(t.string(),t.transform(Number),t.integer())),chat:t.optional(p(G())),chat_type:t.optional(t.string()),chat_instance:t.optional(t.string()),hash:t.string(),query_id:t.optional(t.string()),receiver:t.optional(p(h())),start_param:t.optional(t.string()),signature:t.string(),user:t.optional(p(h()))})}function S(){return y($())}function m(){return t.record(t.string(),t.pipe(t.union([t.string(),t.number()]),t.transform(r=>typeof r=="number"?`#${(r&16777215).toString(16).padStart(6,"0")}`:r),t.check(D)))}function O(){const r=t.optional(t.pipe(t.string(),t.transform(n=>n==="1")));return t.looseObject({tgWebAppBotInline:r,tgWebAppData:t.optional(S()),tgWebAppDefaultColors:t.optional(p(m())),tgWebAppFullscreen:r,tgWebAppPlatform:t.string(),tgWebAppShowSettings:r,tgWebAppStartParam:t.optional(t.string()),tgWebAppThemeParams:p(m()),tgWebAppVersion:t.string()})}function A(){return y(O())}function x(r){try{return t.is(A(),r)}catch{return!1}}function H(){return t.looseObject({eventType:t.string(),eventData:t.optional(t.unknown())})}function T(r){return P(()=>t.parse(S(),r),n=>n)}function W(r){return P(()=>t.parse(A(),r),n=>n)}const K=c.throwifyFpFn(T),X=c.throwifyFpFn(W);function C(r,n){return n||(n=(e,i)=>JSON.stringify(i)),new URLSearchParams(Object.entries(r).reduce((e,[i,a])=>(Array.isArray(a)?e.push(...a.map(o=>[i,String(o)])):a!=null&&e.push([i,a instanceof Date?(a.getTime()/1e3|0).toString():typeof a=="string"||typeof a=="number"?String(a):typeof a=="boolean"?a?"1":"0":n(i,a)]),e),[])).toString()}function I(r){return C(r)}function Y(r){return C(r,(n,e)=>n==="tgWebAppData"?I(e):JSON.stringify(e))}exports.initData=$;exports.initDataChat=G;exports.initDataQuery=S;exports.initDataUser=h;exports.isAnyRGB=D;exports.isLaunchParamsQuery=x;exports.isRGB=F;exports.isRGBA=L;exports.isRGBAShort=b;exports.isRGBShort=Q;exports.launchParams=O;exports.launchParamsQuery=A;exports.miniAppsMessage=H;exports.parseInitDataQuery=K;exports.parseInitDataQueryFp=T;exports.parseLaunchParamsQuery=X;exports.parseLaunchParamsQueryFp=W;exports.pipeJsonToSchema=p;exports.pipeQueryToSchema=y;exports.serializeInitDataQuery=I;exports.serializeLaunchParamsQuery=Y;exports.themeParams=m;exports.toRGB=V;exports.toRGBFp=w;exports.toRGBFull=k;exports.toRGBFullFp=d;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../node_modules/.pnpm/fp-ts@2.16.11/node_modules/fp-ts/es6/function.js","../../../node_modules/.pnpm/fp-ts@2.16.11/node_modules/fp-ts/es6/internal.js","../../../node_modules/.pnpm/fp-ts@2.16.11/node_modules/fp-ts/es6/Either.js","../src/transformers.ts","../src/pipes.ts","../src/rgb.ts","../src/structures.ts","../src/parsers.ts","../src/serializers.ts"],"sourcesContent":["var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n// -------------------------------------------------------------------------------------\n// instances\n// -------------------------------------------------------------------------------------\n/**\n * @category instances\n * @since 2.10.0\n */\nexport var getBooleanAlgebra = function (B) {\n return function () { return ({\n meet: function (x, y) { return function (a) { return B.meet(x(a), y(a)); }; },\n join: function (x, y) { return function (a) { return B.join(x(a), y(a)); }; },\n zero: function () { return B.zero; },\n one: function () { return B.one; },\n implies: function (x, y) { return function (a) { return B.implies(x(a), y(a)); }; },\n not: function (x) { return function (a) { return B.not(x(a)); }; }\n }); };\n};\n/**\n * Unary functions form a semigroup as long as you can provide a semigroup for the codomain.\n *\n * @example\n * import { Predicate, getSemigroup } from 'fp-ts/function'\n * import * as B from 'fp-ts/boolean'\n *\n * const f: Predicate<number> = (n) => n <= 2\n * const g: Predicate<number> = (n) => n >= 0\n *\n * const S1 = getSemigroup(B.SemigroupAll)<number>()\n *\n * assert.deepStrictEqual(S1.concat(f, g)(1), true)\n * assert.deepStrictEqual(S1.concat(f, g)(3), false)\n *\n * const S2 = getSemigroup(B.SemigroupAny)<number>()\n *\n * assert.deepStrictEqual(S2.concat(f, g)(1), true)\n * assert.deepStrictEqual(S2.concat(f, g)(3), true)\n *\n * @category instances\n * @since 2.10.0\n */\nexport var getSemigroup = function (S) {\n return function () { return ({\n concat: function (f, g) { return function (a) { return S.concat(f(a), g(a)); }; }\n }); };\n};\n/**\n * Unary functions form a monoid as long as you can provide a monoid for the codomain.\n *\n * @example\n * import { Predicate } from 'fp-ts/Predicate'\n * import { getMonoid } from 'fp-ts/function'\n * import * as B from 'fp-ts/boolean'\n *\n * const f: Predicate<number> = (n) => n <= 2\n * const g: Predicate<number> = (n) => n >= 0\n *\n * const M1 = getMonoid(B.MonoidAll)<number>()\n *\n * assert.deepStrictEqual(M1.concat(f, g)(1), true)\n * assert.deepStrictEqual(M1.concat(f, g)(3), false)\n *\n * const M2 = getMonoid(B.MonoidAny)<number>()\n *\n * assert.deepStrictEqual(M2.concat(f, g)(1), true)\n * assert.deepStrictEqual(M2.concat(f, g)(3), true)\n *\n * @category instances\n * @since 2.10.0\n */\nexport var getMonoid = function (M) {\n var getSemigroupM = getSemigroup(M);\n return function () { return ({\n concat: getSemigroupM().concat,\n empty: function () { return M.empty; }\n }); };\n};\n/**\n * @category instances\n * @since 2.10.0\n */\nexport var getSemiring = function (S) { return ({\n add: function (f, g) { return function (x) { return S.add(f(x), g(x)); }; },\n zero: function () { return S.zero; },\n mul: function (f, g) { return function (x) { return S.mul(f(x), g(x)); }; },\n one: function () { return S.one; }\n}); };\n/**\n * @category instances\n * @since 2.10.0\n */\nexport var getRing = function (R) {\n var S = getSemiring(R);\n return {\n add: S.add,\n mul: S.mul,\n one: S.one,\n zero: S.zero,\n sub: function (f, g) { return function (x) { return R.sub(f(x), g(x)); }; }\n };\n};\n// -------------------------------------------------------------------------------------\n// utils\n// -------------------------------------------------------------------------------------\n/**\n * @since 2.11.0\n */\nexport var apply = function (a) {\n return function (f) {\n return f(a);\n };\n};\n/**\n * @since 2.0.0\n */\nexport function identity(a) {\n return a;\n}\n/**\n * @since 2.0.0\n */\nexport var unsafeCoerce = identity;\n/**\n * @since 2.0.0\n */\nexport function constant(a) {\n return function () { return a; };\n}\n/**\n * A thunk that returns always `true`.\n *\n * @since 2.0.0\n */\nexport var constTrue = /*#__PURE__*/ constant(true);\n/**\n * A thunk that returns always `false`.\n *\n * @since 2.0.0\n */\nexport var constFalse = /*#__PURE__*/ constant(false);\n/**\n * A thunk that returns always `null`.\n *\n * @since 2.0.0\n */\nexport var constNull = /*#__PURE__*/ constant(null);\n/**\n * A thunk that returns always `undefined`.\n *\n * @since 2.0.0\n */\nexport var constUndefined = /*#__PURE__*/ constant(undefined);\n/**\n * A thunk that returns always `void`.\n *\n * @since 2.0.0\n */\nexport var constVoid = constUndefined;\nexport function flip(f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (args.length > 1) {\n return f(args[1], args[0]);\n }\n return function (a) { return f(a)(args[0]); };\n };\n}\nexport function flow(ab, bc, cd, de, ef, fg, gh, hi, ij) {\n switch (arguments.length) {\n case 1:\n return ab;\n case 2:\n return function () {\n return bc(ab.apply(this, arguments));\n };\n case 3:\n return function () {\n return cd(bc(ab.apply(this, arguments)));\n };\n case 4:\n return function () {\n return de(cd(bc(ab.apply(this, arguments))));\n };\n case 5:\n return function () {\n return ef(de(cd(bc(ab.apply(this, arguments)))));\n };\n case 6:\n return function () {\n return fg(ef(de(cd(bc(ab.apply(this, arguments))))));\n };\n case 7:\n return function () {\n return gh(fg(ef(de(cd(bc(ab.apply(this, arguments)))))));\n };\n case 8:\n return function () {\n return hi(gh(fg(ef(de(cd(bc(ab.apply(this, arguments))))))));\n };\n case 9:\n return function () {\n return ij(hi(gh(fg(ef(de(cd(bc(ab.apply(this, arguments)))))))));\n };\n }\n return;\n}\n/**\n * @since 2.0.0\n */\nexport function tuple() {\n var t = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n t[_i] = arguments[_i];\n }\n return t;\n}\n/**\n * @since 2.0.0\n */\nexport function increment(n) {\n return n + 1;\n}\n/**\n * @since 2.0.0\n */\nexport function decrement(n) {\n return n - 1;\n}\n/**\n * @since 2.0.0\n */\nexport function absurd(_) {\n throw new Error('Called `absurd` function which should be uncallable');\n}\n/**\n * Creates a tupled version of this function: instead of `n` arguments, it accepts a single tuple argument.\n *\n * @example\n * import { tupled } from 'fp-ts/function'\n *\n * const add = tupled((x: number, y: number): number => x + y)\n *\n * assert.strictEqual(add([1, 2]), 3)\n *\n * @since 2.4.0\n */\nexport function tupled(f) {\n return function (a) { return f.apply(void 0, a); };\n}\n/**\n * Inverse function of `tupled`\n *\n * @since 2.4.0\n */\nexport function untupled(f) {\n return function () {\n var a = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n a[_i] = arguments[_i];\n }\n return f(a);\n };\n}\nexport function pipe(a, ab, bc, cd, de, ef, fg, gh, hi) {\n switch (arguments.length) {\n case 1:\n return a;\n case 2:\n return ab(a);\n case 3:\n return bc(ab(a));\n case 4:\n return cd(bc(ab(a)));\n case 5:\n return de(cd(bc(ab(a))));\n case 6:\n return ef(de(cd(bc(ab(a)))));\n case 7:\n return fg(ef(de(cd(bc(ab(a))))));\n case 8:\n return gh(fg(ef(de(cd(bc(ab(a)))))));\n case 9:\n return hi(gh(fg(ef(de(cd(bc(ab(a))))))));\n default: {\n var ret = arguments[0];\n for (var i = 1; i < arguments.length; i++) {\n ret = arguments[i](ret);\n }\n return ret;\n }\n }\n}\n/**\n * Type hole simulation\n *\n * @since 2.7.0\n */\nexport var hole = absurd;\n/**\n * @since 2.11.0\n */\nexport var SK = function (_, b) { return b; };\n/**\n * Use `Predicate` module instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport function not(predicate) {\n return function (a) { return !predicate(a); };\n}\n/**\n * Use `Endomorphism` module instead.\n *\n * @category zone of death\n * @since 2.10.0\n * @deprecated\n */\nexport var getEndomorphismMonoid = function () { return ({\n concat: function (first, second) { return flow(first, second); },\n empty: identity\n}); };\n/** @internal */\nexport var dual = function (arity, body) {\n var isDataFirst = typeof arity === 'number' ? function (args) { return args.length >= arity; } : arity;\n return function () {\n var args = Array.from(arguments);\n if (isDataFirst(arguments)) {\n return body.apply(this, args);\n }\n return function (self) { return body.apply(void 0, __spreadArray([self], args, false)); };\n };\n};\n","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { dual } from './function';\n// -------------------------------------------------------------------------------------\n// Option\n// -------------------------------------------------------------------------------------\n/** @internal */\nexport var isNone = function (fa) { return fa._tag === 'None'; };\n/** @internal */\nexport var isSome = function (fa) { return fa._tag === 'Some'; };\n/** @internal */\nexport var none = { _tag: 'None' };\n/** @internal */\nexport var some = function (a) { return ({ _tag: 'Some', value: a }); };\n// -------------------------------------------------------------------------------------\n// Either\n// -------------------------------------------------------------------------------------\n/** @internal */\nexport var isLeft = function (ma) { return ma._tag === 'Left'; };\n/** @internal */\nexport var isRight = function (ma) { return ma._tag === 'Right'; };\n/** @internal */\nexport var left = function (e) { return ({ _tag: 'Left', left: e }); };\n/** @internal */\nexport var right = function (a) { return ({ _tag: 'Right', right: a }); };\n// -------------------------------------------------------------------------------------\n// ReadonlyNonEmptyArray\n// -------------------------------------------------------------------------------------\n/** @internal */\nexport var singleton = function (a) { return [a]; };\n/** @internal */\nexport var isNonEmpty = function (as) { return as.length > 0; };\n/** @internal */\nexport var head = function (as) { return as[0]; };\n/** @internal */\nexport var tail = function (as) { return as.slice(1); };\n// -------------------------------------------------------------------------------------\n// empty\n// -------------------------------------------------------------------------------------\n/** @internal */\nexport var emptyReadonlyArray = [];\n/** @internal */\nexport var emptyRecord = {};\n// -------------------------------------------------------------------------------------\n// Record\n// -------------------------------------------------------------------------------------\n/** @internal */\nexport var has = Object.prototype.hasOwnProperty;\n// -------------------------------------------------------------------------------------\n// NonEmptyArray\n// -------------------------------------------------------------------------------------\n/** @internal */\nexport var fromReadonlyNonEmptyArray = function (as) { return __spreadArray([as[0]], as.slice(1), true); };\n/** @internal */\nexport var liftNullable = function (F) {\n return function (f, onNullable) {\n return function () {\n var a = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n a[_i] = arguments[_i];\n }\n var o = f.apply(void 0, a);\n return F.fromEither(o == null ? left(onNullable.apply(void 0, a)) : right(o));\n };\n };\n};\n/** @internal */\nexport var liftOption = function (F) {\n return function (f, onNone) {\n return function () {\n var a = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n a[_i] = arguments[_i];\n }\n var o = f.apply(void 0, a);\n return F.fromEither(isNone(o) ? left(onNone.apply(void 0, a)) : right(o.value));\n };\n };\n};\n/** @internal */\nexport var flatMapNullable = function (F, M) {\n return /*#__PURE__*/ dual(3, function (self, f, onNullable) {\n return M.flatMap(self, liftNullable(F)(f, onNullable));\n });\n};\n/** @internal */\nexport var flatMapOption = function (F, M) {\n return /*#__PURE__*/ dual(3, function (self, f, onNone) { return M.flatMap(self, liftOption(F)(f, onNone)); });\n};\n/** @internal */\nexport var flatMapEither = function (F, M) {\n return /*#__PURE__*/ dual(2, function (self, f) {\n return M.flatMap(self, function (a) { return F.fromEither(f(a)); });\n });\n};\n/** @internal */\nexport var flatMapIO = function (F, M) {\n return /*#__PURE__*/ dual(2, function (self, f) {\n return M.flatMap(self, function (a) { return F.fromIO(f(a)); });\n });\n};\n/** @internal */\nexport var flatMapTask = function (F, M) {\n return /*#__PURE__*/ dual(2, function (self, f) {\n return M.flatMap(self, function (a) { return F.fromTask(f(a)); });\n });\n};\n/** @internal */\nexport var flatMapReader = function (F, M) {\n return /*#__PURE__*/ dual(2, function (self, f) {\n return M.flatMap(self, function (a) { return F.fromReader(f(a)); });\n });\n};\n","import { getApplicativeMonoid } from './Applicative';\nimport { apFirst as apFirst_, apS as apS_, apSecond as apSecond_, getApplySemigroup as getApplySemigroup_ } from './Apply';\nimport * as chainable from './Chain';\nimport { tailRec } from './ChainRec';\nimport { chainOptionK as chainOptionK_, filterOrElse as filterOrElse_, fromOption as fromOption_, fromOptionK as fromOptionK_, fromPredicate as fromPredicate_ } from './FromEither';\nimport { dual, flow, identity, pipe } from './function';\nimport { as as as_, asUnit as asUnit_, bindTo as bindTo_, flap as flap_, let as let__ } from './Functor';\nimport * as _ from './internal';\nimport { separated } from './Separated';\nimport { wiltDefault, witherDefault } from './Witherable';\n// -------------------------------------------------------------------------------------\n// constructors\n// -------------------------------------------------------------------------------------\n/**\n * Constructs a new `Either` holding a `Left` value. This usually represents a failure, due to the right-bias of this\n * structure.\n *\n * @category constructors\n * @since 2.0.0\n */\nexport var left = _.left;\n/**\n * Constructs a new `Either` holding a `Right` value. This usually represents a successful value due to the right bias\n * of this structure.\n *\n * @category constructors\n * @since 2.0.0\n */\nexport var right = _.right;\n/**\n * @category sequencing\n * @since 2.14.0\n */\nexport var flatMap = /*#__PURE__*/ dual(2, function (ma, f) { return (isLeft(ma) ? ma : f(ma.right)); });\nvar _map = function (fa, f) { return pipe(fa, map(f)); };\nvar _ap = function (fab, fa) { return pipe(fab, ap(fa)); };\n/* istanbul ignore next */\nvar _reduce = function (fa, b, f) { return pipe(fa, reduce(b, f)); };\n/* istanbul ignore next */\nvar _foldMap = function (M) { return function (fa, f) {\n var foldMapM = foldMap(M);\n return pipe(fa, foldMapM(f));\n}; };\n/* istanbul ignore next */\nvar _reduceRight = function (fa, b, f) { return pipe(fa, reduceRight(b, f)); };\nvar _traverse = function (F) {\n var traverseF = traverse(F);\n return function (ta, f) { return pipe(ta, traverseF(f)); };\n};\nvar _bimap = function (fa, f, g) { return pipe(fa, bimap(f, g)); };\nvar _mapLeft = function (fa, f) { return pipe(fa, mapLeft(f)); };\n/* istanbul ignore next */\nvar _alt = function (fa, that) { return pipe(fa, alt(that)); };\n/* istanbul ignore next */\nvar _extend = function (wa, f) { return pipe(wa, extend(f)); };\nvar _chainRec = function (a, f) {\n return tailRec(f(a), function (e) {\n return isLeft(e) ? right(left(e.left)) : isLeft(e.right) ? left(f(e.right.left)) : right(right(e.right.right));\n });\n};\n/**\n * @category type lambdas\n * @since 2.0.0\n */\nexport var URI = 'Either';\n/**\n * @category instances\n * @since 2.0.0\n */\nexport var getShow = function (SE, SA) { return ({\n show: function (ma) { return (isLeft(ma) ? \"left(\".concat(SE.show(ma.left), \")\") : \"right(\".concat(SA.show(ma.right), \")\")); }\n}); };\n/**\n * @category instances\n * @since 2.0.0\n */\nexport var getEq = function (EL, EA) { return ({\n equals: function (x, y) {\n return x === y || (isLeft(x) ? isLeft(y) && EL.equals(x.left, y.left) : isRight(y) && EA.equals(x.right, y.right));\n }\n}); };\n/**\n * Semigroup returning the left-most non-`Left` value. If both operands are `Right`s then the inner values are\n * concatenated using the provided `Semigroup`\n *\n * @example\n * import { getSemigroup, left, right } from 'fp-ts/Either'\n * import { SemigroupSum } from 'fp-ts/number'\n *\n * const S = getSemigroup<string, number>(SemigroupSum)\n * assert.deepStrictEqual(S.concat(left('a'), left('b')), left('a'))\n * assert.deepStrictEqual(S.concat(left('a'), right(2)), right(2))\n * assert.deepStrictEqual(S.concat(right(1), left('b')), right(1))\n * assert.deepStrictEqual(S.concat(right(1), right(2)), right(3))\n *\n * @category instances\n * @since 2.0.0\n */\nexport var getSemigroup = function (S) { return ({\n concat: function (x, y) { return (isLeft(y) ? x : isLeft(x) ? y : right(S.concat(x.right, y.right))); }\n}); };\n/**\n * Builds a `Compactable` instance for `Either` given `Monoid` for the left side.\n *\n * @category filtering\n * @since 2.10.0\n */\nexport var getCompactable = function (M) {\n var empty = left(M.empty);\n return {\n URI: URI,\n _E: undefined,\n compact: function (ma) { return (isLeft(ma) ? ma : ma.right._tag === 'None' ? empty : right(ma.right.value)); },\n separate: function (ma) {\n return isLeft(ma)\n ? separated(ma, ma)\n : isLeft(ma.right)\n ? separated(right(ma.right.left), empty)\n : separated(empty, right(ma.right.right));\n }\n };\n};\n/**\n * Builds a `Filterable` instance for `Either` given `Monoid` for the left side\n *\n * @category filtering\n * @since 2.10.0\n */\nexport var getFilterable = function (M) {\n var empty = left(M.empty);\n var _a = getCompactable(M), compact = _a.compact, separate = _a.separate;\n var filter = function (ma, predicate) {\n return isLeft(ma) ? ma : predicate(ma.right) ? ma : empty;\n };\n var partition = function (ma, p) {\n return isLeft(ma)\n ? separated(ma, ma)\n : p(ma.right)\n ? separated(empty, right(ma.right))\n : separated(right(ma.right), empty);\n };\n return {\n URI: URI,\n _E: undefined,\n map: _map,\n compact: compact,\n separate: separate,\n filter: filter,\n filterMap: function (ma, f) {\n if (isLeft(ma)) {\n return ma;\n }\n var ob = f(ma.right);\n return ob._tag === 'None' ? empty : right(ob.value);\n },\n partition: partition,\n partitionMap: function (ma, f) {\n if (isLeft(ma)) {\n return separated(ma, ma);\n }\n var e = f(ma.right);\n return isLeft(e) ? separated(right(e.left), empty) : separated(empty, right(e.right));\n }\n };\n};\n/**\n * Builds `Witherable` instance for `Either` given `Monoid` for the left side\n *\n * @category filtering\n * @since 2.0.0\n */\nexport var getWitherable = function (M) {\n var F_ = getFilterable(M);\n var C = getCompactable(M);\n return {\n URI: URI,\n _E: undefined,\n map: _map,\n compact: F_.compact,\n separate: F_.separate,\n filter: F_.filter,\n filterMap: F_.filterMap,\n partition: F_.partition,\n partitionMap: F_.partitionMap,\n traverse: _traverse,\n sequence: sequence,\n reduce: _reduce,\n foldMap: _foldMap,\n reduceRight: _reduceRight,\n wither: witherDefault(Traversable, C),\n wilt: wiltDefault(Traversable, C)\n };\n};\n/**\n * The default [`Applicative`](#applicative) instance returns the first error, if you want to\n * get all errors you need to provide a way to concatenate them via a `Semigroup`.\n *\n * @example\n * import * as A from 'fp-ts/Apply'\n * import * as E from 'fp-ts/Either'\n * import { pipe } from 'fp-ts/function'\n * import * as S from 'fp-ts/Semigroup'\n * import * as string from 'fp-ts/string'\n *\n * const parseString = (u: unknown): E.Either<string, string> =>\n * typeof u === 'string' ? E.right(u) : E.left('not a string')\n *\n * const parseNumber = (u: unknown): E.Either<string, number> =>\n * typeof u === 'number' ? E.right(u) : E.left('not a number')\n *\n * interface Person {\n * readonly name: string\n * readonly age: number\n * }\n *\n * const parsePerson = (\n * input: Record<string, unknown>\n * ): E.Either<string, Person> =>\n * pipe(\n * E.Do,\n * E.apS('name', parseString(input.name)),\n * E.apS('age', parseNumber(input.age))\n * )\n *\n * assert.deepStrictEqual(parsePerson({}), E.left('not a string')) // <= first error\n *\n * const Applicative = E.getApplicativeValidation(\n * pipe(string.Semigroup, S.intercalate(', '))\n * )\n *\n * const apS = A.apS(Applicative)\n *\n * const parsePersonAll = (\n * input: Record<string, unknown>\n * ): E.Either<string, Person> =>\n * pipe(\n * E.Do,\n * apS('name', parseString(input.name)),\n * apS('age', parseNumber(input.age))\n * )\n *\n * assert.deepStrictEqual(parsePersonAll({}), E.left('not a string, not a number')) // <= all errors\n *\n * @category error handling\n * @since 2.7.0\n */\nexport var getApplicativeValidation = function (SE) { return ({\n URI: URI,\n _E: undefined,\n map: _map,\n ap: function (fab, fa) {\n return isLeft(fab)\n ? isLeft(fa)\n ? left(SE.concat(fab.left, fa.left))\n : fab\n : isLeft(fa)\n ? fa\n : right(fab.right(fa.right));\n },\n of: of\n}); };\n/**\n * The default [`Alt`](#alt) instance returns the last error, if you want to\n * get all errors you need to provide a way to concatenate them via a `Semigroup`.\n *\n * @example\n * import * as E from 'fp-ts/Either'\n * import { pipe } from 'fp-ts/function'\n * import * as S from 'fp-ts/Semigroup'\n * import * as string from 'fp-ts/string'\n *\n * const parseString = (u: unknown): E.Either<string, string> =>\n * typeof u === 'string' ? E.right(u) : E.left('not a string')\n *\n * const parseNumber = (u: unknown): E.Either<string, number> =>\n * typeof u === 'number' ? E.right(u) : E.left('not a number')\n *\n * const parse = (u: unknown): E.Either<string, string | number> =>\n * pipe(\n * parseString(u),\n * E.alt<string, string | number>(() => parseNumber(u))\n * )\n *\n * assert.deepStrictEqual(parse(true), E.left('not a number')) // <= last error\n *\n * const Alt = E.getAltValidation(pipe(string.Semigroup, S.intercalate(', ')))\n *\n * const parseAll = (u: unknown): E.Either<string, string | number> =>\n * Alt.alt<string | number>(parseString(u), () => parseNumber(u))\n *\n * assert.deepStrictEqual(parseAll(true), E.left('not a string, not a number')) // <= all errors\n *\n * @category error handling\n * @since 2.7.0\n */\nexport var getAltValidation = function (SE) { return ({\n URI: URI,\n _E: undefined,\n map: _map,\n alt: function (me, that) {\n if (isRight(me)) {\n return me;\n }\n var ea = that();\n return isLeft(ea) ? left(SE.concat(me.left, ea.left)) : ea;\n }\n}); };\n/**\n * @category mapping\n * @since 2.0.0\n */\nexport var map = function (f) { return function (fa) {\n return isLeft(fa) ? fa : right(f(fa.right));\n}; };\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var Functor = {\n URI: URI,\n map: _map\n};\n/**\n * Maps the `Right` value of this `Either` to the specified constant value.\n *\n * @category mapping\n * @since 2.16.0\n */\nexport var as = dual(2, as_(Functor));\n/**\n * Maps the `Right` value of this `Either` to the void constant value.\n *\n * @category mapping\n * @since 2.16.0\n */\nexport var asUnit = asUnit_(Functor);\n/**\n * @category constructors\n * @since 2.7.0\n */\nexport var of = right;\n/**\n * @category instances\n * @since 2.10.0\n */\nexport var Pointed = {\n URI: URI,\n of: of\n};\n/**\n * Less strict version of [`ap`](#ap).\n *\n * The `W` suffix (short for **W**idening) means that the error types will be merged.\n *\n * @since 2.8.0\n */\nexport var apW = function (fa) { return function (fab) {\n return isLeft(fab) ? fab : isLeft(fa) ? fa : right(fab.right(fa.right));\n}; };\n/**\n * @since 2.0.0\n */\nexport var ap = apW;\n/**\n * @category instances\n * @since 2.10.0\n */\nexport var Apply = {\n URI: URI,\n map: _map,\n ap: _ap\n};\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var Applicative = {\n URI: URI,\n map: _map,\n ap: _ap,\n of: of\n};\n/**\n * @category instances\n * @since 2.10.0\n */\nexport var Chain = {\n URI: URI,\n map: _map,\n ap: _ap,\n chain: flatMap\n};\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var Monad = {\n URI: URI,\n map: _map,\n ap: _ap,\n of: of,\n chain: flatMap\n};\n/**\n * Left-associative fold of a structure.\n *\n * @example\n * import { pipe } from 'fp-ts/function'\n * import * as E from 'fp-ts/Either'\n *\n * const startWith = 'prefix'\n * const concat = (a: string, b: string) => `${a}:${b}`\n *\n * assert.deepStrictEqual(\n * pipe(E.right('a'), E.reduce(startWith, concat)),\n * 'prefix:a'\n * )\n *\n * assert.deepStrictEqual(\n * pipe(E.left('e'), E.reduce(startWith, concat)),\n * 'prefix'\n * )\n *\n * @category folding\n * @since 2.0.0\n */\nexport var reduce = function (b, f) { return function (fa) {\n return isLeft(fa) ? b : f(b, fa.right);\n}; };\n/**\n * Map each element of the structure to a monoid, and combine the results.\n *\n * @example\n * import { pipe } from 'fp-ts/function'\n * import * as E from 'fp-ts/Either'\n * import * as S from 'fp-ts/string'\n *\n * const yell = (a: string) => `${a}!`\n *\n * assert.deepStrictEqual(\n * pipe(E.right('a'), E.foldMap(S.Monoid)(yell)),\n * 'a!'\n * )\n *\n * assert.deepStrictEqual(\n * pipe(E.left('e'), E.foldMap(S.Monoid)(yell)),\n * S.Monoid.empty\n * )\n *\n * @category folding\n * @since 2.0.0\n */\nexport var foldMap = function (M) { return function (f) { return function (fa) {\n return isLeft(fa) ? M.empty : f(fa.right);\n}; }; };\n/**\n * Right-associative fold of a structure.\n *\n * @example\n * import { pipe } from 'fp-ts/function'\n * import * as E from 'fp-ts/Either'\n *\n * const startWith = 'postfix'\n * const concat = (a: string, b: string) => `${a}:${b}`\n *\n * assert.deepStrictEqual(\n * pipe(E.right('a'), E.reduceRight(startWith, concat)),\n * 'a:postfix'\n * )\n *\n * assert.deepStrictEqual(\n * pipe(E.left('e'), E.reduceRight(startWith, concat)),\n * 'postfix'\n * )\n *\n * @category folding\n * @since 2.0.0\n */\nexport var reduceRight = function (b, f) { return function (fa) {\n return isLeft(fa) ? b : f(fa.right, b);\n}; };\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var Foldable = {\n URI: URI,\n reduce: _reduce,\n foldMap: _foldMap,\n reduceRight: _reduceRight\n};\n/**\n * Map each element of a structure to an action, evaluate these actions from left to right, and collect the results.\n *\n * @example\n * import { pipe } from 'fp-ts/function'\n * import * as RA from 'fp-ts/ReadonlyArray'\n * import * as E from 'fp-ts/Either'\n * import * as O from 'fp-ts/Option'\n *\n * assert.deepStrictEqual(\n * pipe(E.right(['a']), E.traverse(O.Applicative)(RA.head)),\n * O.some(E.right('a'))\n * )\n *\n * assert.deepStrictEqual(\n * pipe(E.right([]), E.traverse(O.Applicative)(RA.head)),\n * O.none\n * )\n *\n * @category traversing\n * @since 2.6.3\n */\nexport var traverse = function (F) {\n return function (f) {\n return function (ta) {\n return isLeft(ta) ? F.of(left(ta.left)) : F.map(f(ta.right), right);\n };\n };\n};\n/**\n * Evaluate each monadic action in the structure from left to right, and collect the results.\n *\n * @example\n * import { pipe } from 'fp-ts/function'\n * import * as E from 'fp-ts/Either'\n * import * as O from 'fp-ts/Option'\n *\n * assert.deepStrictEqual(\n * pipe(E.right(O.some('a')), E.sequence(O.Applicative)),\n * O.some(E.right('a'))\n * )\n *\n * assert.deepStrictEqual(\n * pipe(E.right(O.none), E.sequence(O.Applicative)),\n * O.none\n * )\n *\n * @category traversing\n * @since 2.6.3\n */\nexport var sequence = function (F) {\n return function (ma) {\n return isLeft(ma) ? F.of(left(ma.left)) : F.map(ma.right, right);\n };\n};\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var Traversable = {\n URI: URI,\n map: _map,\n reduce: _reduce,\n foldMap: _foldMap,\n reduceRight: _reduceRight,\n traverse: _traverse,\n sequence: sequence\n};\n/**\n * Map a pair of functions over the two type arguments of the bifunctor.\n *\n * @category mapping\n * @since 2.0.0\n */\nexport var bimap = function (f, g) { return function (fa) {\n return isLeft(fa) ? left(f(fa.left)) : right(g(fa.right));\n}; };\n/**\n * Map a function over the first type argument of a bifunctor.\n *\n * @category error handling\n * @since 2.0.0\n */\nexport var mapLeft = function (f) { return function (fa) {\n return isLeft(fa) ? left(f(fa.left)) : fa;\n}; };\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var Bifunctor = {\n URI: URI,\n bimap: _bimap,\n mapLeft: _mapLeft\n};\n/**\n * Less strict version of [`alt`](#alt).\n *\n * The `W` suffix (short for **W**idening) means that the error and the return types will be merged.\n *\n * @category error handling\n * @since 2.9.0\n */\nexport var altW = function (that) { return function (fa) {\n return isLeft(fa) ? that() : fa;\n}; };\n/**\n * Identifies an associative operation on a type constructor. It is similar to `Semigroup`, except that it applies to\n * types of kind `* -> *`.\n *\n * In case of `Either` returns the left-most non-`Left` value (or the right-most `Left` value if both values are `Left`).\n *\n * | x | y | pipe(x, alt(() => y) |\n * | -------- | -------- | -------------------- |\n * | left(a) | left(b) | left(b) |\n * | left(a) | right(2) | right(2) |\n * | right(1) | left(b) | right(1) |\n * | right(1) | right(2) | right(1) |\n *\n * @example\n * import * as E from 'fp-ts/Either'\n * import { pipe } from 'fp-ts/function'\n *\n * assert.deepStrictEqual(\n * pipe(\n * E.left('a'),\n * E.alt(() => E.left('b'))\n * ),\n * E.left('b')\n * )\n * assert.deepStrictEqual(\n * pipe(\n * E.left('a'),\n * E.alt(() => E.right(2))\n * ),\n * E.right(2)\n * )\n * assert.deepStrictEqual(\n * pipe(\n * E.right(1),\n * E.alt(() => E.left('b'))\n * ),\n * E.right(1)\n * )\n * assert.deepStrictEqual(\n * pipe(\n * E.right(1),\n * E.alt(() => E.right(2))\n * ),\n * E.right(1)\n * )\n *\n * @category error handling\n * @since 2.0.0\n */\nexport var alt = altW;\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var Alt = {\n URI: URI,\n map: _map,\n alt: _alt\n};\n/**\n * @since 2.0.0\n */\nexport var extend = function (f) { return function (wa) {\n return isLeft(wa) ? wa : right(f(wa));\n}; };\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var Extend = {\n URI: URI,\n map: _map,\n extend: _extend\n};\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var ChainRec = {\n URI: URI,\n map: _map,\n ap: _ap,\n chain: flatMap,\n chainRec: _chainRec\n};\n/**\n * @since 2.6.3\n */\nexport var throwError = left;\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var MonadThrow = {\n URI: URI,\n map: _map,\n ap: _ap,\n of: of,\n chain: flatMap,\n throwError: throwError\n};\n/**\n * @category instances\n * @since 2.10.0\n */\nexport var FromEither = {\n URI: URI,\n fromEither: identity\n};\n/**\n * @example\n * import { fromPredicate, left, right } from 'fp-ts/Either'\n * import { pipe } from 'fp-ts/function'\n *\n * assert.deepStrictEqual(\n * pipe(\n * 1,\n * fromPredicate(\n * (n) => n > 0,\n * () => 'error'\n * )\n * ),\n * right(1)\n * )\n * assert.deepStrictEqual(\n * pipe(\n * -1,\n * fromPredicate(\n * (n) => n > 0,\n * () => 'error'\n * )\n * ),\n * left('error')\n * )\n *\n * @category lifting\n * @since 2.0.0\n */\nexport var fromPredicate = /*#__PURE__*/ fromPredicate_(FromEither);\n// -------------------------------------------------------------------------------------\n// conversions\n// -------------------------------------------------------------------------------------\n/**\n * @example\n * import * as E from 'fp-ts/Either'\n * import { pipe } from 'fp-ts/function'\n * import * as O from 'fp-ts/Option'\n *\n * assert.deepStrictEqual(\n * pipe(\n * O.some(1),\n * E.fromOption(() => 'error')\n * ),\n * E.right(1)\n * )\n * assert.deepStrictEqual(\n * pipe(\n * O.none,\n * E.fromOption(() => 'error')\n * ),\n * E.left('error')\n * )\n *\n * @category conversions\n * @since 2.0.0\n */\nexport var fromOption = \n/*#__PURE__*/ fromOption_(FromEither);\n// -------------------------------------------------------------------------------------\n// refinements\n// -------------------------------------------------------------------------------------\n/**\n * Returns `true` if the either is an instance of `Left`, `false` otherwise.\n *\n * @category refinements\n * @since 2.0.0\n */\nexport var isLeft = _.isLeft;\n/**\n * Returns `true` if the either is an instance of `Right`, `false` otherwise.\n *\n * @category refinements\n * @since 2.0.0\n */\nexport var isRight = _.isRight;\n/**\n * Less strict version of [`match`](#match).\n *\n * The `W` suffix (short for **W**idening) means that the handler return types will be merged.\n *\n * @category pattern matching\n * @since 2.10.0\n */\nexport var matchW = function (onLeft, onRight) {\n return function (ma) {\n return isLeft(ma) ? onLeft(ma.left) : onRight(ma.right);\n };\n};\n/**\n * Alias of [`matchW`](#matchw).\n *\n * @category pattern matching\n * @since 2.10.0\n */\nexport var foldW = matchW;\n/**\n * Takes two functions and an `Either` value, if the value is a `Left` the inner value is applied to the first function,\n * if the value is a `Right` the inner value is applied to the second function.\n *\n * @example\n * import { match, left, right } from 'fp-ts/Either'\n * import { pipe } from 'fp-ts/function'\n *\n * function onLeft(errors: Array<string>): string {\n * return `Errors: ${errors.join(', ')}`\n * }\n *\n * function onRight(value: number): string {\n * return `Ok: ${value}`\n * }\n *\n * assert.strictEqual(\n * pipe(\n * right(1),\n * match(onLeft, onRight)\n * ),\n * 'Ok: 1'\n * )\n * assert.strictEqual(\n * pipe(\n * left(['error 1', 'error 2']),\n * match(onLeft, onRight)\n * ),\n * 'Errors: error 1, error 2'\n * )\n *\n * @category pattern matching\n * @since 2.10.0\n */\nexport var match = matchW;\n/**\n * Alias of [`match`](#match).\n *\n * @category pattern matching\n * @since 2.0.0\n */\nexport var fold = match;\n/**\n * Less strict version of [`getOrElse`](#getorelse).\n *\n * The `W` suffix (short for **W**idening) means that the handler return type will be merged.\n *\n * @category error handling\n * @since 2.6.0\n */\nexport var getOrElseW = function (onLeft) {\n return function (ma) {\n return isLeft(ma) ? onLeft(ma.left) : ma.right;\n };\n};\n/**\n * Returns the wrapped value if it's a `Right` or a default value if is a `Left`.\n *\n * @example\n * import { getOrElse, left, right } from 'fp-ts/Either'\n * import { pipe } from 'fp-ts/function'\n *\n * assert.deepStrictEqual(\n * pipe(\n * right(1),\n * getOrElse(() => 0)\n * ),\n * 1\n * )\n * assert.deepStrictEqual(\n * pipe(\n * left('error'),\n * getOrElse(() => 0)\n * ),\n * 0\n * )\n *\n * @category error handling\n * @since 2.0.0\n */\nexport var getOrElse = getOrElseW;\n// -------------------------------------------------------------------------------------\n// combinators\n// -------------------------------------------------------------------------------------\n/**\n * @category mapping\n * @since 2.10.0\n */\nexport var flap = /*#__PURE__*/ flap_(Functor);\n/**\n * Combine two effectful actions, keeping only the result of the first.\n *\n * @since 2.0.0\n */\nexport var apFirst = /*#__PURE__*/ apFirst_(Apply);\n/**\n * Less strict version of [`apFirst`](#apfirst)\n *\n * The `W` suffix (short for **W**idening) means that the error types will be merged.\n *\n * @since 2.12.0\n */\nexport var apFirstW = apFirst;\n/**\n * Combine two effectful actions, keeping only the result of the second.\n *\n * @since 2.0.0\n */\nexport var apSecond = /*#__PURE__*/ apSecond_(Apply);\n/**\n * Less strict version of [`apSecond`](#apsecond)\n *\n * The `W` suffix (short for **W**idening) means that the error types will be merged.\n *\n * @since 2.12.0\n */\nexport var apSecondW = apSecond;\n/**\n * Composes computations in sequence, using the return value of one computation to determine the next computation and\n * keeping only the result of the first.\n *\n * @category combinators\n * @since 2.15.0\n */\nexport var tap = /*#__PURE__*/ dual(2, chainable.tap(Chain));\n/**\n * Less strict version of [`flatten`](#flatten).\n *\n * The `W` suffix (short for **W**idening) means that the error types will be merged.\n *\n * @category sequencing\n * @since 2.11.0\n */\nexport var flattenW = \n/*#__PURE__*/ flatMap(identity);\n/**\n * The `flatten` function is the conventional monad join operator. It is used to remove one level of monadic structure, projecting its bound argument into the outer level.\n *\n * @example\n * import * as E from 'fp-ts/Either'\n *\n * assert.deepStrictEqual(E.flatten(E.right(E.right('a'))), E.right('a'))\n * assert.deepStrictEqual(E.flatten(E.right(E.left('e'))), E.left('e'))\n * assert.deepStrictEqual(E.flatten(E.left('e')), E.left('e'))\n *\n * @category sequencing\n * @since 2.0.0\n */\nexport var flatten = flattenW;\n/**\n * @since 2.0.0\n */\nexport var duplicate = /*#__PURE__*/ extend(identity);\n/**\n * Use `liftOption`.\n *\n * @category legacy\n * @since 2.10.0\n */\nexport var fromOptionK = \n/*#__PURE__*/ fromOptionK_(FromEither);\n/**\n * Use `flatMapOption`.\n *\n * @category legacy\n * @since 2.11.0\n */\nexport var chainOptionK = /*#__PURE__*/ chainOptionK_(FromEither, Chain);\n/**\n * Use `flatMapOption`.\n *\n * @category legacy\n * @since 2.13.2\n */\nexport var chainOptionKW = chainOptionK;\n/** @internal */\nvar _FromEither = {\n fromEither: FromEither.fromEither\n};\n/**\n * @category lifting\n * @since 2.15.0\n */\nexport var liftNullable = /*#__PURE__*/ _.liftNullable(_FromEither);\n/**\n * @category lifting\n * @since 2.15.0\n */\nexport var liftOption = /*#__PURE__*/ _.liftOption(_FromEither);\n/** @internal */\nvar _FlatMap = {\n flatMap: flatMap\n};\n/**\n * @category sequencing\n * @since 2.15.0\n */\nexport var flatMapNullable = /*#__PURE__*/ _.flatMapNullable(_FromEither, _FlatMap);\n/**\n * @category sequencing\n * @since 2.15.0\n */\nexport var flatMapOption = /*#__PURE__*/ _.flatMapOption(_FromEither, _FlatMap);\n/**\n * @example\n * import * as E from 'fp-ts/Either'\n * import { pipe } from 'fp-ts/function'\n *\n * assert.deepStrictEqual(\n * pipe(\n * E.right(1),\n * E.filterOrElse(\n * (n) => n > 0,\n * () => 'error'\n * )\n * ),\n * E.right(1)\n * )\n * assert.deepStrictEqual(\n * pipe(\n * E.right(-1),\n * E.filterOrElse(\n * (n) => n > 0,\n * () => 'error'\n * )\n * ),\n * E.left('error')\n * )\n * assert.deepStrictEqual(\n * pipe(\n * E.left('a'),\n * E.filterOrElse(\n * (n) => n > 0,\n * () => 'error'\n * )\n * ),\n * E.left('a')\n * )\n *\n * @category filtering\n * @since 2.0.0\n */\nexport var filterOrElse = /*#__PURE__*/ filterOrElse_(FromEither, Chain);\n/**\n * Less strict version of [`filterOrElse`](#filterorelse).\n *\n * The `W` suffix (short for **W**idening) means that the error types will be merged.\n *\n * @category filtering\n * @since 2.9.0\n */\nexport var filterOrElseW = filterOrElse;\n/**\n * Returns a `Right` if is a `Left` (and vice versa).\n *\n * @since 2.0.0\n */\nexport var swap = function (ma) { return (isLeft(ma) ? right(ma.left) : left(ma.right)); };\n/**\n * Less strict version of [`orElse`](#orelse).\n *\n * The `W` suffix (short for **W**idening) means that the return types will be merged.\n *\n * @category error handling\n * @since 2.10.0\n */\nexport var orElseW = function (onLeft) {\n return function (ma) {\n return isLeft(ma) ? onLeft(ma.left) : ma;\n };\n};\n/**\n * Useful for recovering from errors.\n *\n * @category error handling\n * @since 2.0.0\n */\nexport var orElse = orElseW;\n/**\n * Takes a default and a nullable value, if the value is not nully, turn it into a `Right`, if the value is nully use\n * the provided default as a `Left`.\n *\n * @example\n * import { fromNullable, left, right } from 'fp-ts/Either'\n *\n * const parse = fromNullable('nully')\n *\n * assert.deepStrictEqual(parse(1), right(1))\n * assert.deepStrictEqual(parse(null), left('nully'))\n *\n * @category conversions\n * @since 2.0.0\n */\nexport var fromNullable = function (e) {\n return function (a) {\n return a == null ? left(e) : right(a);\n };\n};\n/**\n * Constructs a new `Either` from a function that might throw.\n *\n * See also [`tryCatchK`](#trycatchk).\n *\n * @example\n * import * as E from 'fp-ts/Either'\n *\n * const unsafeHead = <A>(as: ReadonlyArray<A>): A => {\n * if (as.length > 0) {\n * return as[0]\n * } else {\n * throw new Error('empty array')\n * }\n * }\n *\n * const head = <A>(as: ReadonlyArray<A>): E.Either<Error, A> =>\n * E.tryCatch(() => unsafeHead(as), e => (e instanceof Error ? e : new Error('unknown error')))\n *\n * assert.deepStrictEqual(head([]), E.left(new Error('empty array')))\n * assert.deepStrictEqual(head([1, 2, 3]), E.right(1))\n *\n * @category interop\n * @since 2.0.0\n */\nexport var tryCatch = function (f, onThrow) {\n try {\n return right(f());\n }\n catch (e) {\n return left(onThrow(e));\n }\n};\n/**\n * Converts a function that may throw to one returning a `Either`.\n *\n * @category interop\n * @since 2.10.0\n */\nexport var tryCatchK = function (f, onThrow) {\n return function () {\n var a = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n a[_i] = arguments[_i];\n }\n return tryCatch(function () { return f.apply(void 0, a); }, onThrow);\n };\n};\n/**\n * Use `liftNullable`.\n *\n * @category legacy\n * @since 2.9.0\n */\nexport var fromNullableK = function (e) {\n var from = fromNullable(e);\n return function (f) { return flow(f, from); };\n};\n/**\n * Use `flatMapNullable`.\n *\n * @category legacy\n * @since 2.9.0\n */\nexport var chainNullableK = function (e) {\n var from = fromNullableK(e);\n return function (f) { return flatMap(from(f)); };\n};\n/**\n * @category conversions\n * @since 2.10.0\n */\nexport var toUnion = /*#__PURE__*/ foldW(identity, identity);\n// -------------------------------------------------------------------------------------\n// utils\n// -------------------------------------------------------------------------------------\n/**\n * Default value for the `onError` argument of `tryCatch`\n *\n * @since 2.0.0\n */\nexport function toError(e) {\n try {\n return e instanceof Error ? e : new Error(String(e));\n }\n catch (error) {\n return new Error();\n }\n}\nexport function elem(E) {\n return function (a, ma) {\n if (ma === undefined) {\n var elemE_1 = elem(E);\n return function (ma) { return elemE_1(a, ma); };\n }\n return isLeft(ma) ? false : E.equals(a, ma.right);\n };\n}\n/**\n * Returns `false` if `Left` or returns the result of the application of the given predicate to the `Right` value.\n *\n * @example\n * import { exists, left, right } from 'fp-ts/Either'\n *\n * const gt2 = exists((n: number) => n > 2)\n *\n * assert.strictEqual(gt2(left('a')), false)\n * assert.strictEqual(gt2(right(1)), false)\n * assert.strictEqual(gt2(right(3)), true)\n *\n * @since 2.0.0\n */\nexport var exists = function (predicate) {\n return function (ma) {\n return isLeft(ma) ? false : predicate(ma.right);\n };\n};\n// -------------------------------------------------------------------------------------\n// do notation\n// -------------------------------------------------------------------------------------\n/**\n * @category do notation\n * @since 2.9.0\n */\nexport var Do = /*#__PURE__*/ of(_.emptyRecord);\n/**\n * @category do notation\n * @since 2.8.0\n */\nexport var bindTo = /*#__PURE__*/ bindTo_(Functor);\nvar let_ = /*#__PURE__*/ let__(Functor);\nexport { \n/**\n * @category do notation\n * @since 2.13.0\n */\nlet_ as let };\n/**\n * @category do notation\n * @since 2.8.0\n */\nexport var bind = /*#__PURE__*/ chainable.bind(Chain);\n/**\n * The `W` suffix (short for **W**idening) means that the error types will be merged.\n *\n * @category do notation\n * @since 2.8.0\n */\nexport var bindW = bind;\n/**\n * @category do notation\n * @since 2.8.0\n */\nexport var apS = /*#__PURE__*/ apS_(Apply);\n/**\n * Less strict version of [`apS`](#aps).\n *\n * The `W` suffix (short for **W**idening) means that the error types will be merged.\n *\n * @category do notation\n * @since 2.8.0\n */\nexport var apSW = apS;\n/**\n * @since 2.11.0\n */\nexport var ApT = /*#__PURE__*/ of(_.emptyReadonlyArray);\n// -------------------------------------------------------------------------------------\n// array utils\n// -------------------------------------------------------------------------------------\n/**\n * Equivalent to `ReadonlyNonEmptyArray#traverseWithIndex(Applicative)`.\n *\n * @category traversing\n * @since 2.11.0\n */\nexport var traverseReadonlyNonEmptyArrayWithIndex = function (f) {\n return function (as) {\n var e = f(0, _.head(as));\n if (isLeft(e)) {\n return e;\n }\n var out = [e.right];\n for (var i = 1; i < as.length; i++) {\n var e_1 = f(i, as[i]);\n if (isLeft(e_1)) {\n return e_1;\n }\n out.push(e_1.right);\n }\n return right(out);\n };\n};\n/**\n * Equivalent to `ReadonlyArray#traverseWithIndex(Applicative)`.\n *\n * @category traversing\n * @since 2.11.0\n */\nexport var traverseReadonlyArrayWithIndex = function (f) {\n var g = traverseReadonlyNonEmptyArrayWithIndex(f);\n return function (as) { return (_.isNonEmpty(as) ? g(as) : ApT); };\n};\n/**\n * Equivalent to `ReadonlyArray#traverseWithIndex(Applicative)`.\n *\n * @category traversing\n * @since 2.9.0\n */\nexport var traverseArrayWithIndex = traverseReadonlyArrayWithIndex;\n/**\n * Equivalent to `ReadonlyArray#traverse(Applicative)`.\n *\n * @category traversing\n * @since 2.9.0\n */\nexport var traverseArray = function (f) { return traverseReadonlyArrayWithIndex(function (_, a) { return f(a); }); };\n/**\n * Equivalent to `ReadonlyArray#sequence(Applicative)`.\n *\n * @category traversing\n * @since 2.9.0\n */\nexport var sequenceArray = \n/*#__PURE__*/ traverseArray(identity);\n// -------------------------------------------------------------------------------------\n// legacy\n// -------------------------------------------------------------------------------------\n/**\n * Alias of `flatMap`.\n *\n * @category legacy\n * @since 2.6.0\n */\nexport var chainW = flatMap;\n/**\n * Alias of `flatMap`.\n *\n * @category legacy\n * @since 2.0.0\n */\nexport var chain = flatMap;\n/**\n * Alias of `tap`.\n *\n * @category legacy\n * @since 2.0.0\n */\nexport var chainFirst = tap;\n/**\n * Alias of `tap`.\n *\n * @category legacy\n * @since 2.8.0\n */\nexport var chainFirstW = tap;\n/**\n * Use [`parse`](./Json.ts.html#parse) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport function parseJSON(s, onError) {\n return tryCatch(function () { return JSON.parse(s); }, onError);\n}\n/**\n * Use [`stringify`](./Json.ts.html#stringify) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var stringifyJSON = function (u, onError) {\n return tryCatch(function () {\n var s = JSON.stringify(u);\n if (typeof s !== 'string') {\n throw new Error('Converting unsupported structure to JSON');\n }\n return s;\n }, onError);\n};\n/**\n * This instance is deprecated, use small, specific instances instead.\n * For example if a function needs a `Functor` instance, pass `E.Functor` instead of `E.either`\n * (where `E` is from `import E from 'fp-ts/Either'`)\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var either = {\n URI: URI,\n map: _map,\n of: of,\n ap: _ap,\n chain: flatMap,\n reduce: _reduce,\n foldMap: _foldMap,\n reduceRight: _reduceRight,\n traverse: _traverse,\n sequence: sequence,\n bimap: _bimap,\n mapLeft: _mapLeft,\n alt: _alt,\n extend: _extend,\n chainRec: _chainRec,\n throwError: throwError\n};\n/**\n * Use [`getApplySemigroup`](./Apply.ts.html#getapplysemigroup) instead.\n *\n * Semigroup returning the left-most `Left` value. If both operands are `Right`s then the inner values\n * are concatenated using the provided `Semigroup`\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var getApplySemigroup = \n/*#__PURE__*/ getApplySemigroup_(Apply);\n/**\n * Use [`getApplicativeMonoid`](./Applicative.ts.html#getapplicativemonoid) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var getApplyMonoid = \n/*#__PURE__*/ getApplicativeMonoid(Applicative);\n/**\n * Use [`getApplySemigroup`](./Apply.ts.html#getapplysemigroup) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var getValidationSemigroup = function (SE, SA) {\n return getApplySemigroup_(getApplicativeValidation(SE))(SA);\n};\n/**\n * Use [`getApplicativeMonoid`](./Applicative.ts.html#getapplicativemonoid) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var getValidationMonoid = function (SE, MA) {\n return getApplicativeMonoid(getApplicativeValidation(SE))(MA);\n};\n/**\n * Use [`getApplicativeValidation`](#getapplicativevalidation) and [`getAltValidation`](#getaltvalidation) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport function getValidation(SE) {\n var ap = getApplicativeValidation(SE).ap;\n var alt = getAltValidation(SE).alt;\n return {\n URI: URI,\n _E: undefined,\n map: _map,\n of: of,\n chain: flatMap,\n bimap: _bimap,\n mapLeft: _mapLeft,\n reduce: _reduce,\n foldMap: _foldMap,\n reduceRight: _reduceRight,\n extend: _extend,\n traverse: _traverse,\n sequence: sequence,\n chainRec: _chainRec,\n throwError: throwError,\n ap: ap,\n alt: alt\n };\n}\n","import {\n type BaseIssue,\n type BaseSchema,\n type InferOutput,\n parse,\n transform,\n type TransformAction,\n} from 'valibot';\n\ntype RequiredSchema = BaseSchema<any, any, BaseIssue<any>>;\n\nexport type TransformJsonToSchemaAction = TransformAction<string, unknown>;\n\nexport type TransformQueryToSchemaAction<Schema extends RequiredSchema> =\n TransformAction<string | URLSearchParams, InferOutput<Schema>>;\n\nexport function transformQueryToSchema<Schema extends RequiredSchema>(\n schema: Schema,\n): TransformQueryToSchemaAction<Schema> {\n return transform(input => {\n const result: Record<string, string | string[]> = {};\n\n new URLSearchParams(input).forEach((value, key) => {\n const accValue = result[key];\n if (Array.isArray(accValue)) {\n accValue.push(value);\n } else if (accValue === undefined) {\n result[key] = value;\n } else {\n result[key] = [accValue, value];\n }\n });\n\n return parse(schema, result);\n });\n}\n\n/**\n * @returns A transformer applying `JSON.parse` to the input.\n */\nexport function transformJsonToSchema(): TransformJsonToSchemaAction {\n return transform(JSON.parse);\n}\n","import {\n type BaseIssue,\n type BaseSchema,\n instance,\n type InstanceSchema,\n pipe,\n type SchemaWithPipe,\n string,\n type StringSchema,\n union,\n type UnionSchema,\n} from 'valibot';\n\nimport {\n transformJsonToSchema,\n type TransformJsonToSchemaAction,\n transformQueryToSchema,\n type TransformQueryToSchemaAction,\n} from './transformers.js';\n\ntype RequiredSchema = BaseSchema<any, any, BaseIssue<any>>;\n\nexport type JsonToSchemaPipe<Schema extends RequiredSchema> = SchemaWithPipe<readonly [\n StringSchema<undefined>,\n TransformJsonToSchemaAction,\n Schema,\n]>;\n\nexport type QueryToSchemaPipe<Schema extends RequiredSchema> = SchemaWithPipe<readonly [\n UnionSchema<[\n StringSchema<undefined>,\n InstanceSchema<typeof URLSearchParams, undefined>,\n ], undefined>,\n TransformQueryToSchemaAction<Schema>,\n]>;\n\nexport function pipeJsonToSchema<Schema extends RequiredSchema>(\n schema: Schema,\n): JsonToSchemaPipe<Schema> {\n return pipe(string(), transformJsonToSchema(), schema);\n}\n\nexport function pipeQueryToSchema<Schema extends RequiredSchema>(\n schema: Schema,\n): QueryToSchemaPipe<Schema> {\n return pipe(\n union([string(), instance(URLSearchParams)]),\n transformQueryToSchema(schema),\n );\n}\n","import { eitherFnToSimple } from '@tma.js/toolkit';\nimport type { RGB } from '@tma.js/types';\nimport * as E from 'fp-ts/Either';\nimport { pipe } from 'fp-ts/function';\n\nfunction guardBasedOn(re: RegExp) {\n return (value: string): value is RGB => re.test(value);\n}\n\n/**\n * @returns True if the value has the #RGB format.\n */\nexport const isRGBShort = guardBasedOn(/^#[\\da-f]{3}$/i);\n\n/**\n * @returns True if the value has the #RGBA format.\n */\nexport const isRGBAShort = guardBasedOn(/^#[\\da-f]{4}$/i);\n\n/**\n * @returns True if the value has the #RRGGBB format.\n */\nexport const isRGB = guardBasedOn(/^#[\\da-f]{6}$/i);\n\n/**\n * @returns True if the value has the #RRGGBBAA format.\n */\nexport const isRGBA = guardBasedOn(/^#[\\da-f]{8}$/i);\n\n/**\n * @returns True if the value has any known RGB format.\n * @param value - value to check.\n */\nexport function isAnyRGB(value: string): value is RGB {\n return [isRGB, isRGBA, isRGBShort, isRGBAShort].some(fn => fn(value));\n}\n\n/**\n * Converts a short version of RGB (#RGB) to a complete one (#RRGGBB).\n * @param value\n */\nfunction expandRgb(value: RGB): RGB {\n let color: RGB = '#';\n for (let i = 0; i < value.length - 1; i += 1) {\n color += value[1 + i].repeat(2);\n }\n return color;\n}\n\n/**\n * Converts passed value to #RRGGBBAA format. Accepts the following color formats:\n * - `#RGB`\n * - `#RGBA`\n * - `#RRGGBB`\n * - `#RRGGBBAA`\n * - `rgb(1,2,3)`\n * - `rgba(1,2,3,4)`\n * @param value - a value to convert.\n * @returns A value in the #RRGGBBAA format.\n */\nexport function toRGBFullFp(value: string): E.Either<Error, RGB> {\n const clean = value.replace(/\\s/g, '').toLowerCase();\n if (/^#[\\da-f]{3}$/i.test(clean)) {\n return E.right(expandRgb(clean.toLowerCase() + 'f' as RGB));\n }\n\n if (/^#[\\da-f]{4}$/i.test(clean)) {\n return E.right(expandRgb(clean.toLowerCase() as RGB));\n }\n\n if (/^#[\\da-f]{6}$/i.test(clean)) {\n return E.right(clean.toLowerCase() + 'ff' as RGB);\n }\n\n if (/^#[\\da-f]{8}$/i.test(clean)) {\n return E.right(clean.toLowerCase() as RGB);\n }\n\n // Example valid values: rgb(0,3,10) rgba(32,114,8,0)\n const match = clean.match(/^rgb\\((\\d{1,3}),(\\d{1,3}),(\\d{1,3})\\)$/)\n || clean.match(/^rgba\\((\\d{1,3}),(\\d{1,3}),(\\d{1,3}),(\\d{1,3})\\)$/);\n\n // If this didn't work as well, we can't extract RGB color from passed text.\n if (!match) {\n return E.left(new Error(`Value \"${value}\" does not satisfy any of known RGB formats.`));\n }\n\n // Otherwise, take R, G and B components, convert to hex and create #RRGGBB string.\n return E.right(\n match\n .slice(1)\n .reduce(\n (acc, component) => {\n return acc + parseInt(component, 10)\n .toString(16)\n .padStart(2, '0');\n }, '#',\n )\n // We are adding f-s here to match the pattern: #RRGGBBAA\n .padEnd(9, 'f') as RGB,\n );\n}\n\n/**\n * Converts passed value to #RRGGBB format. Accepts the following color formats:\n * - `#RGB`\n * - `#RGBA`\n * - `#RRGGBB`\n * - `#RRGGBBAA`\n * - `rgb(1,2,3)`\n * - `rgba(1,2,3,4)`\n * @param value - a value to convert.\n * @returns A value in the #RRGGBB format.\n * @deprecated This function cuts the RGB's alpha channel. Use the `toRGBFullFp` function instead.\n */\nexport function toRGBFp(value: string): E.Either<Error, RGB> {\n return pipe(\n toRGBFullFp(value),\n E.map(rgb => rgb.slice(0, 7) as RGB),\n );\n}\n\n/**\n * @see toRGBFp\n * @deprecated This function cuts the RGB's alpha channel. Use the `toRGBFull` function instead.\n */\nexport const toRGB = eitherFnToSimple(toRGBFp);\n\n/**\n * @see toRGBFullFp\n */\nexport const toRGBFull = eitherFnToSimple(toRGBFullFp);\n","import type {\n Chat,\n InitData,\n KnownThemeParamsKey,\n LaunchParams,\n RGB,\n User,\n} from '@tma.js/types';\nimport {\n type BaseSchema,\n boolean,\n check,\n type CheckAction,\n date,\n type InferOutput,\n integer,\n is,\n looseObject,\n number,\n type NumberSchema,\n optional,\n pipe,\n record,\n type RecordSchema,\n type SchemaWithPipe,\n string,\n type StringSchema,\n transform,\n type TransformAction,\n union,\n type UnionSchema,\n unknown,\n} from 'valibot';\n\nimport { pipeJsonToSchema, pipeQueryToSchema } from './pipes.js';\nimport { isAnyRGB } from './rgb.js';\n\nexport type InitDataGenSchema = ReturnType<typeof initData>;\nexport type InitDataGenType = InferOutput<InitDataGenSchema>;\n\nexport type LaunchParamsGenSchema = ReturnType<typeof launchParams>;\nexport type LaunchParamsGenType = InferOutput<LaunchParamsGenSchema>;\n\nexport type MiniAppsMessageGenSchema = ReturnType<typeof miniAppsMessage>;\nexport type MiniAppsMessageGenType = InferOutput<MiniAppsMessageGenSchema>;\n\nexport function initDataChat() {\n return looseObject({\n id: number(),\n photo_url: optional(string()),\n type: string(),\n title: string(),\n username: optional(string()),\n } satisfies { [K in keyof Chat]-?: BaseSchema<unknown, Chat[K], any> });\n}\n\nexport function initDataUser() {\n return looseObject({\n added_to_attachment_menu: optional(boolean()),\n allows_write_to_pm: optional(boolean()),\n first_name: string(),\n id: number(),\n is_bot: optional(boolean()),\n is_premium: optional(boolean()),\n last_name: optional(string()),\n language_code: optional(string()),\n photo_url: optional(string()),\n username: optional(string()),\n } satisfies { [K in keyof User]-?: BaseSchema<unknown, User[K], any> });\n}\n\nexport function initData() {\n return looseObject({\n auth_date: pipe(\n string(),\n transform(input => new Date(Number(input) * 1000)),\n date(),\n ),\n can_send_after: optional(pipe(string(), transform(Number), integer())),\n chat: optional(pipeJsonToSchema(initDataChat())),\n chat_type: optional(string()),\n chat_instance: optional(string()),\n hash: string(),\n query_id: optional(string()),\n receiver: optional(pipeJsonToSchema(initDataUser())),\n start_param: optional(string()),\n signature: string(),\n user: optional(pipeJsonToSchema(initDataUser())),\n } satisfies { [K in keyof InitData]-?: unknown });\n}\n\nexport function initDataQuery() {\n return pipeQueryToSchema(initData());\n}\n\nexport function themeParams() {\n return record(\n string(),\n pipe(\n union([string(), number()]),\n transform(value => {\n return typeof value === 'number'\n ? `#${(value & 0x00FFFFFF).toString(16).padStart(6, '0')}`\n : value;\n }),\n check(isAnyRGB),\n ),\n ) as RecordSchema<\n SchemaWithPipe<[\n StringSchema<undefined>,\n TransformAction<string, KnownThemeParamsKey>,\n ]>,\n SchemaWithPipe<[\n UnionSchema<[StringSchema<undefined>, NumberSchema<undefined>], any>,\n TransformAction<string | number, string>,\n CheckAction<RGB, undefined>,\n ]>,\n undefined\n >;\n}\n\nexport function launchParams() {\n const optBool = optional(pipe(string(), transform(v => v === '1')));\n\n return looseObject({\n tgWebAppBotInline: optBool,\n tgWebAppData: optional(initDataQuery()),\n tgWebAppDefaultColors: optional(pipeJsonToSchema(themeParams())),\n tgWebAppFullscreen: optBool,\n tgWebAppPlatform: string(),\n tgWebAppShowSettings: optBool,\n tgWebAppStartParam: optional(string()),\n tgWebAppThemeParams: pipeJsonToSchema(themeParams()),\n tgWebAppVersion: string(),\n } satisfies { [K in keyof LaunchParams]-?: BaseSchema<any, LaunchParams[K], any> });\n}\n\nexport function launchParamsQuery() {\n return pipeQueryToSchema(launchParams());\n}\n\n/**\n * @returns True if the passed value contains valid launch parameters query.\n */\nexport function isLaunchParamsQuery(value: string | URLSearchParams): boolean {\n try {\n return is(launchParamsQuery(), value);\n } catch {\n return false;\n }\n}\n\nexport function miniAppsMessage() {\n return looseObject({\n eventType: string(),\n eventData: optional(unknown()),\n });\n}\n","import { eitherFnToSimple } from '@tma.js/toolkit';\nimport * as E from 'fp-ts/Either';\nimport { parse, type ValiError } from 'valibot';\n\nimport {\n type InitDataGenSchema,\n type InitDataGenType,\n initDataQuery,\n type LaunchParamsGenSchema,\n type LaunchParamsGenType,\n launchParamsQuery,\n} from './structures.js';\n\nexport type ParseInitDataQueryError = ValiError<InitDataGenSchema>;\nexport type ParseLaunchParamsQueryError = ValiError<LaunchParamsGenSchema>;\n\nexport function parseInitDataQueryFp(value: string | URLSearchParams): E.Either<\n ParseInitDataQueryError,\n InitDataGenType\n> {\n return E.tryCatch(\n () => parse(initDataQuery(), value),\n e => e as ValiError<InitDataGenSchema>,\n );\n}\n\nexport function parseLaunchParamsQueryFp(value: string | URLSearchParams): E.Either<\n ParseLaunchParamsQueryError,\n LaunchParamsGenType\n> {\n return E.tryCatch(\n () => parse(launchParamsQuery(), value),\n e => e as ValiError<LaunchParamsGenSchema>,\n );\n}\n\nexport const parseInitDataQuery = eitherFnToSimple(parseInitDataQueryFp);\nexport const parseLaunchParamsQuery = eitherFnToSimple(parseLaunchParamsQueryFp);\n","import type { InitData, LaunchParams } from '@tma.js/types';\nimport type { InferOutput } from 'valibot';\n\nimport type { initData, launchParams } from './structures.js';\n\nexport type InitDataLike = Partial<InferOutput<ReturnType<typeof initData>> | InitData>;\nexport type LaunchParamsLike = Partial<InferOutput<ReturnType<typeof launchParams>> | LaunchParams>;\n\n/**\n * Converts the passed object to query parameters.\n * @param value - value to serialize.\n * @param onObject - function returning serialized object value.\n */\nfunction serializeToQuery(\n value: object,\n onObject?: (key: string, value: object) => string,\n): string {\n onObject ||= (_, value) => JSON.stringify(value);\n\n return new URLSearchParams(\n Object\n .entries(value)\n .reduce<[string, string][]>((acc, [key, value]) => {\n if (Array.isArray(value)) {\n acc.push(...value.map(v => [key, String(v)] as [string, string]));\n } else {\n if (value !== null && value !== undefined) {\n acc.push([\n key,\n value instanceof Date\n ? (value.getTime() / 1000 | 0).toString()\n : typeof value === 'string' || typeof value === 'number'\n ? String(value)\n : typeof value === 'boolean'\n ? value ? '1' : '0'\n : onObject(key, value),\n ]);\n }\n }\n return acc;\n }, []),\n ).toString();\n}\n\n/**\n * Serializes the InitDataQuery shape.\n * @param value - value to serialize.\n */\nexport function serializeInitDataQuery(value: InitDataLike): string {\n return serializeToQuery(value);\n}\n\n/**\n * Serializes the LaunchParamsQuery shape.\n * @param value - value to serialize.\n */\nexport function serializeLaunchParamsQuery(value: LaunchParamsLike): string {\n return serializeToQuery(value, (k, v) => {\n return k === 'tgWebAppData' ? serializeInitDataQuery(v as any) : JSON.stringify(v);\n });\n}\n"],"names":["pipe","a","ab","bc","cd","de","ef","fg","gh","hi","ret","i","isLeft","ma","left","e","right","_.left","_.right","map","f","fa","_.isLeft","tryCatch","onThrow","transformQueryToSchema","schema","transform","input","result","value","key","accValue","parse","transformJsonToSchema","pipeJsonToSchema","string","pipeQueryToSchema","union","instance","guardBasedOn","re","isRGBShort","isRGBAShort","isRGB","isRGBA","isAnyRGB","fn","expandRgb","color","toRGBFullFp","clean","E.right","match","acc","component","E.left","toRGBFp","E.map","rgb","toRGB","eitherFnToSimple","toRGBFull","initDataChat","looseObject","number","optional","initDataUser","boolean","initData","date","integer","initDataQuery","themeParams","record","check","launchParams","optBool","v","launchParamsQuery","isLaunchParamsQuery","is","miniAppsMessage","unknown","parseInitDataQueryFp","E.tryCatch","parseLaunchParamsQueryFp","parseInitDataQuery","parseLaunchParamsQuery","serializeToQuery","onObject","_","serializeInitDataQuery","serializeLaunchParamsQuery","k"],"mappings":"wIAkRO,SAASA,EAAKC,EAAGC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAI,CACpD,OAAQ,UAAU,OAAM,CACpB,IAAK,GACD,OAAOR,EACX,IAAK,GACD,OAAOC,EAAGD,CAAC,EACf,IAAK,GACD,OAAOE,EAAGD,EAAGD,CAAC,CAAC,EACnB,IAAK,GACD,OAAOG,EAAGD,EAAGD,EAAGD,CAAC,CAAC,CAAC,EACvB,IAAK,GACD,OAAOI,EAAGD,EAAGD,EAAGD,EAAGD,CAAC,CAAC,CAAC,CAAC,EAC3B,IAAK,GACD,OAAOK,EAAGD,EAAGD,EAAGD,EAAGD,EAAGD,CAAC,CAAC,CAAC,CAAC,CAAC,EAC/B,IAAK,GACD,OAAOM,EAAGD,EAAGD,EAAGD,EAAGD,EAAGD,EAAGD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACnC,IAAK,GACD,OAAOO,EAAGD,EAAGD,EAAGD,EAAGD,EAAGD,EAAGD,EAAGD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACvC,IAAK,GACD,OAAOQ,EAAGD,EAAGD,EAAGD,EAAGD,EAAGD,EAAGD,EAAGD,EAAGD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC3C,QAAS,CAEL,QADIS,EAAM,UAAU,CAAC,EACZC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAClCD,EAAM,UAAUC,CAAC,EAAED,CAAG,EAE1B,OAAOA,CACnB,CACA,CACA,CCrRO,IAAIE,EAAS,SAAUC,EAAI,CAAE,OAAOA,EAAG,OAAS,MAAS,EAIrDC,EAAO,SAAUC,EAAG,CAAE,MAAQ,CAAE,KAAM,OAAQ,KAAMA,CAAC,CAAM,EAE3DC,EAAQ,SAAUf,EAAG,CAAE,MAAQ,CAAE,KAAM,QAAS,MAAOA,CAAC,CAAM,ECX9Da,EAAOG,EAQPD,EAAQE,EA2RRC,EAAM,SAAUC,EAAG,CAAE,OAAO,SAAUC,EAAI,CACjD,OAAOT,EAAOS,CAAE,EAAIA,EAAKL,EAAMI,EAAEC,EAAG,KAAK,CAAC,CAC9C,CAAI,EA6cOT,EAASU,EA+VTC,EAAW,SAAUH,EAAGI,EAAS,CACxC,GAAI,CACA,OAAOR,EAAMI,GAAG,CACxB,OACW,EAAG,CACN,OAAON,EAAKU,EAAQ,CAAC,CAAC,CAC9B,CACA,EC5lCO,SAASC,EACdC,EACsC,CACtC,OAAOC,EAAAA,UAAmBC,GAAA,CACxB,MAAMC,EAA4C,CAAC,EAEnD,WAAI,gBAAgBD,CAAK,EAAE,QAAQ,CAACE,EAAOC,IAAQ,CAC3C,MAAAC,EAAWH,EAAOE,CAAG,EACvB,MAAM,QAAQC,CAAQ,EACxBA,EAAS,KAAKF,CAAK,EACVE,IAAa,OACtBH,EAAOE,CAAG,EAAID,EAEdD,EAAOE,CAAG,EAAI,CAACC,EAAUF,CAAK,CAChC,CACD,EAEMG,EAAA,MAAMP,EAAQG,CAAM,CAAA,CAC5B,CACH,CAKO,SAASK,GAAqD,CAC5D,OAAAP,EAAA,UAAU,KAAK,KAAK,CAC7B,CCNO,SAASQ,EACdT,EAC0B,CAC1B,OAAO1B,EAAK,KAAAoC,EAAA,OAAA,EAAUF,EAAA,EAAyBR,CAAM,CACvD,CAEO,SAASW,EACdX,EAC2B,CACpB,OAAA1B,EAAA,KACLsC,EAAAA,MAAM,CAACF,EAAA,OAAA,EAAUG,EAAAA,SAAS,eAAe,CAAC,CAAC,EAC3Cd,EAAuBC,CAAM,CAC/B,CACF,CC5CA,SAASc,EAAaC,EAAY,CAChC,OAAQX,GAAgCW,EAAG,KAAKX,CAAK,CACvD,CAKa,MAAAY,EAAaF,EAAa,gBAAgB,EAK1CG,EAAcH,EAAa,gBAAgB,EAK3CI,EAAQJ,EAAa,gBAAgB,EAKrCK,EAASL,EAAa,gBAAgB,EAM5C,SAASM,EAAShB,EAA6B,CAC7C,MAAA,CAACc,EAAOC,EAAQH,EAAYC,CAAW,EAAE,KAAKI,GAAMA,EAAGjB,CAAK,CAAC,CACtE,CAMA,SAASkB,EAAUlB,EAAiB,CAClC,IAAImB,EAAa,IACjB,QAAStC,EAAI,EAAGA,EAAImB,EAAM,OAAS,EAAGnB,GAAK,EACzCsC,GAASnB,EAAM,EAAInB,CAAC,EAAE,OAAO,CAAC,EAEzB,OAAAsC,CACT,CAaO,SAASC,EAAYpB,EAAqC,CAC/D,MAAMqB,EAAQrB,EAAM,QAAQ,MAAO,EAAE,EAAE,YAAY,EAC/C,GAAA,iBAAiB,KAAKqB,CAAK,EAC7B,OAAOC,EAAQJ,EAAUG,EAAM,YAAY,EAAI,GAAU,CAAC,EAGxD,GAAA,iBAAiB,KAAKA,CAAK,EAC7B,OAAOC,EAAQJ,EAAUG,EAAM,YAAoB,CAAA,CAAC,EAGlD,GAAA,iBAAiB,KAAKA,CAAK,EAC7B,OAAOC,EAAQD,EAAM,YAAA,EAAgB,IAAW,EAG9C,GAAA,iBAAiB,KAAKA,CAAK,EAC7B,OAAOC,EAAQD,EAAM,aAAoB,EAI3C,MAAME,EAAQF,EAAM,MAAM,wCAAwC,GAC7DA,EAAM,MAAM,mDAAmD,EAGpE,OAAKE,EAKED,EACLC,EACG,MAAM,CAAC,EACP,OACC,CAACC,EAAKC,IACGD,EAAM,SAASC,EAAW,EAAE,EAChC,SAAS,EAAE,EACX,SAAS,EAAG,GAAG,EACjB,GAAA,EAGJ,OAAO,EAAG,GAAG,CAClB,EAhBSC,EAAO,IAAI,MAAM,UAAU1B,CAAK,8CAA8C,CAAC,CAiB1F,CAcO,SAAS2B,EAAQ3B,EAAqC,CACpD,OAAA9B,EACLkD,EAAYpB,CAAK,EACjB4B,EAAMC,GAAOA,EAAI,MAAM,EAAG,CAAC,CAAQ,CACrC,CACF,CAMa,MAAAC,EAAQC,mBAAiBJ,CAAO,EAKhCK,EAAYD,mBAAiBX,CAAW,ECrF9C,SAASa,GAAe,CAC7B,OAAOC,cAAY,CACjB,GAAIC,EAAAA,OAAO,EACX,UAAWC,EAAAA,SAAS9B,EAAAA,QAAQ,EAC5B,KAAMA,EAAAA,OAAO,EACb,MAAOA,EAAAA,OAAO,EACd,SAAU8B,EAAS,SAAA9B,SAAQ,CAAA,CAAA,CACyC,CACxE,CAEO,SAAS+B,GAAe,CAC7B,OAAOH,cAAY,CACjB,yBAA0BE,EAAAA,SAASE,EAAAA,SAAS,EAC5C,mBAAoBF,EAAAA,SAASE,EAAAA,SAAS,EACtC,WAAYhC,EAAAA,OAAO,EACnB,GAAI6B,EAAAA,OAAO,EACX,OAAQC,EAAAA,SAASE,EAAAA,SAAS,EAC1B,WAAYF,EAAAA,SAASE,EAAAA,SAAS,EAC9B,UAAWF,EAAAA,SAAS9B,EAAAA,QAAQ,EAC5B,cAAe8B,EAAAA,SAAS9B,EAAAA,QAAQ,EAChC,UAAW8B,EAAAA,SAAS9B,EAAAA,QAAQ,EAC5B,SAAU8B,EAAS,SAAA9B,SAAQ,CAAA,CAAA,CACyC,CACxE,CAEO,SAASiC,GAAW,CACzB,OAAOL,cAAY,CACjB,UAAWhE,EAAA,KACToC,SAAO,EACPT,EAAA,aAAmB,IAAI,KAAK,OAAOC,CAAK,EAAI,GAAI,CAAC,EACjD0C,EAAK,KAAA,CACP,EACA,eAAgBJ,EAAAA,SAASlE,EAAAA,KAAKoC,EAAO,OAAA,EAAGT,EAAAA,UAAU,MAAM,EAAG4C,EAAQ,QAAA,CAAC,CAAC,EACrE,KAAML,EAAA,SAAS/B,EAAiB4B,EAAc,CAAA,CAAC,EAC/C,UAAWG,EAAAA,SAAS9B,EAAAA,QAAQ,EAC5B,cAAe8B,EAAAA,SAAS9B,EAAAA,QAAQ,EAChC,KAAMA,EAAAA,OAAO,EACb,SAAU8B,EAAAA,SAAS9B,EAAAA,QAAQ,EAC3B,SAAU8B,EAAA,SAAS/B,EAAiBgC,EAAc,CAAA,CAAC,EACnD,YAAaD,EAAAA,SAAS9B,EAAAA,QAAQ,EAC9B,UAAWA,EAAAA,OAAO,EAClB,KAAM8B,EAAA,SAAS/B,EAAiBgC,GAAc,CAAC,CAAA,CACD,CAClD,CAEO,SAASK,GAAgB,CACvB,OAAAnC,EAAkBgC,GAAU,CACrC,CAEO,SAASI,GAAc,CACrB,OAAAC,EAAA,OACLtC,SAAO,EACPpC,EAAA,KACEsC,EAAAA,MAAM,CAACF,EAAAA,SAAU6B,EAAAA,OAAQ,CAAA,CAAC,EAC1BtC,YAAmBG,GACV,OAAOA,GAAU,SACpB,KAAKA,EAAQ,UAAY,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,GACtDA,CACL,EACD6C,EAAAA,MAAM7B,CAAQ,CAAA,CAElB,CAYF,CAEO,SAAS8B,GAAe,CACvB,MAAAC,EAAUX,EAAAA,SAASlE,EAAA,KAAKoC,SAAO,EAAGT,YAAemD,GAAAA,IAAM,GAAG,CAAC,CAAC,EAElE,OAAOd,cAAY,CACjB,kBAAmBa,EACnB,aAAcX,EAAAA,SAASM,GAAe,EACtC,sBAAuBN,EAAA,SAAS/B,EAAiBsC,EAAa,CAAA,CAAC,EAC/D,mBAAoBI,EACpB,iBAAkBzC,EAAAA,OAAO,EACzB,qBAAsByC,EACtB,mBAAoBX,EAAAA,SAAS9B,EAAAA,QAAQ,EACrC,oBAAqBD,EAAiBsC,GAAa,EACnD,gBAAiBrC,EAAO,OAAA,CAAA,CACwD,CACpF,CAEO,SAAS2C,GAAoB,CAC3B,OAAA1C,EAAkBuC,GAAc,CACzC,CAKO,SAASI,EAAoBlD,EAA0C,CACxE,GAAA,CACK,OAAAmD,EAAA,GAAGF,EAAkB,EAAGjD,CAAK,CAAA,MAC9B,CACC,MAAA,EAAA,CAEX,CAEO,SAASoD,GAAkB,CAChC,OAAOlB,cAAY,CACjB,UAAW5B,EAAAA,OAAO,EAClB,UAAW8B,EAAS,SAAAiB,UAAS,CAAA,CAAA,CAC9B,CACH,CC7IO,SAASC,EAAqBtD,EAGnC,CACA,OAAOuD,EACL,IAAMpD,EAAA,MAAMuC,EAAc,EAAG1C,CAAK,EAC7Bf,GAAAA,CACP,CACF,CAEO,SAASuE,EAAyBxD,EAGvC,CACA,OAAOuD,EACL,IAAMpD,EAAA,MAAM8C,EAAkB,EAAGjD,CAAK,EACjCf,GAAAA,CACP,CACF,CAEa,MAAAwE,EAAqB1B,mBAAiBuB,CAAoB,EAC1DI,EAAyB3B,mBAAiByB,CAAwB,ECxB/E,SAASG,EACP3D,EACA4D,EACQ,CACR,OAAAA,MAAa,CAACC,EAAG7D,IAAU,KAAK,UAAUA,CAAK,GAExC,IAAI,gBACT,OACG,QAAQA,CAAK,EACb,OAA2B,CAACwB,EAAK,CAACvB,EAAKD,CAAK,KACvC,MAAM,QAAQA,CAAK,EACjBwB,EAAA,KAAK,GAAGxB,EAAM,IAAIgD,GAAK,CAAC/C,EAAK,OAAO+C,CAAC,CAAC,CAAqB,CAAC,EAE5DhD,GAAU,MACZwB,EAAI,KAAK,CACPvB,EACAD,aAAiB,MACZA,EAAM,QAAQ,EAAI,IAAO,GAAG,SAAS,EACtC,OAAOA,GAAU,UAAY,OAAOA,GAAU,SAC5C,OAAOA,CAAK,EACZ,OAAOA,GAAU,UACfA,EAAQ,IAAM,IACd4D,EAAS3D,EAAKD,CAAK,CAAA,CAC5B,EAGEwB,GACN,CAAE,CAAA,GACP,SAAS,CACb,CAMO,SAASsC,EAAuB9D,EAA6B,CAClE,OAAO2D,EAAiB3D,CAAK,CAC/B,CAMO,SAAS+D,EAA2B/D,EAAiC,CAC1E,OAAO2D,EAAiB3D,EAAO,CAACgE,EAAGhB,IAC1BgB,IAAM,eAAiBF,EAAuBd,CAAQ,EAAI,KAAK,UAAUA,CAAC,CAClF,CACH","x_google_ignoreList":[0,1,2]}
1
+ {"version":3,"file":"index.cjs","sources":["../../../node_modules/.pnpm/fp-ts@2.16.11/node_modules/fp-ts/es6/function.js","../../../node_modules/.pnpm/fp-ts@2.16.11/node_modules/fp-ts/es6/internal.js","../../../node_modules/.pnpm/fp-ts@2.16.11/node_modules/fp-ts/es6/Either.js","../src/transformers.ts","../src/pipes.ts","../src/rgb.ts","../src/structures.ts","../src/parsers.ts","../src/serializers.ts"],"sourcesContent":["var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n// -------------------------------------------------------------------------------------\n// instances\n// -------------------------------------------------------------------------------------\n/**\n * @category instances\n * @since 2.10.0\n */\nexport var getBooleanAlgebra = function (B) {\n return function () { return ({\n meet: function (x, y) { return function (a) { return B.meet(x(a), y(a)); }; },\n join: function (x, y) { return function (a) { return B.join(x(a), y(a)); }; },\n zero: function () { return B.zero; },\n one: function () { return B.one; },\n implies: function (x, y) { return function (a) { return B.implies(x(a), y(a)); }; },\n not: function (x) { return function (a) { return B.not(x(a)); }; }\n }); };\n};\n/**\n * Unary functions form a semigroup as long as you can provide a semigroup for the codomain.\n *\n * @example\n * import { Predicate, getSemigroup } from 'fp-ts/function'\n * import * as B from 'fp-ts/boolean'\n *\n * const f: Predicate<number> = (n) => n <= 2\n * const g: Predicate<number> = (n) => n >= 0\n *\n * const S1 = getSemigroup(B.SemigroupAll)<number>()\n *\n * assert.deepStrictEqual(S1.concat(f, g)(1), true)\n * assert.deepStrictEqual(S1.concat(f, g)(3), false)\n *\n * const S2 = getSemigroup(B.SemigroupAny)<number>()\n *\n * assert.deepStrictEqual(S2.concat(f, g)(1), true)\n * assert.deepStrictEqual(S2.concat(f, g)(3), true)\n *\n * @category instances\n * @since 2.10.0\n */\nexport var getSemigroup = function (S) {\n return function () { return ({\n concat: function (f, g) { return function (a) { return S.concat(f(a), g(a)); }; }\n }); };\n};\n/**\n * Unary functions form a monoid as long as you can provide a monoid for the codomain.\n *\n * @example\n * import { Predicate } from 'fp-ts/Predicate'\n * import { getMonoid } from 'fp-ts/function'\n * import * as B from 'fp-ts/boolean'\n *\n * const f: Predicate<number> = (n) => n <= 2\n * const g: Predicate<number> = (n) => n >= 0\n *\n * const M1 = getMonoid(B.MonoidAll)<number>()\n *\n * assert.deepStrictEqual(M1.concat(f, g)(1), true)\n * assert.deepStrictEqual(M1.concat(f, g)(3), false)\n *\n * const M2 = getMonoid(B.MonoidAny)<number>()\n *\n * assert.deepStrictEqual(M2.concat(f, g)(1), true)\n * assert.deepStrictEqual(M2.concat(f, g)(3), true)\n *\n * @category instances\n * @since 2.10.0\n */\nexport var getMonoid = function (M) {\n var getSemigroupM = getSemigroup(M);\n return function () { return ({\n concat: getSemigroupM().concat,\n empty: function () { return M.empty; }\n }); };\n};\n/**\n * @category instances\n * @since 2.10.0\n */\nexport var getSemiring = function (S) { return ({\n add: function (f, g) { return function (x) { return S.add(f(x), g(x)); }; },\n zero: function () { return S.zero; },\n mul: function (f, g) { return function (x) { return S.mul(f(x), g(x)); }; },\n one: function () { return S.one; }\n}); };\n/**\n * @category instances\n * @since 2.10.0\n */\nexport var getRing = function (R) {\n var S = getSemiring(R);\n return {\n add: S.add,\n mul: S.mul,\n one: S.one,\n zero: S.zero,\n sub: function (f, g) { return function (x) { return R.sub(f(x), g(x)); }; }\n };\n};\n// -------------------------------------------------------------------------------------\n// utils\n// -------------------------------------------------------------------------------------\n/**\n * @since 2.11.0\n */\nexport var apply = function (a) {\n return function (f) {\n return f(a);\n };\n};\n/**\n * @since 2.0.0\n */\nexport function identity(a) {\n return a;\n}\n/**\n * @since 2.0.0\n */\nexport var unsafeCoerce = identity;\n/**\n * @since 2.0.0\n */\nexport function constant(a) {\n return function () { return a; };\n}\n/**\n * A thunk that returns always `true`.\n *\n * @since 2.0.0\n */\nexport var constTrue = /*#__PURE__*/ constant(true);\n/**\n * A thunk that returns always `false`.\n *\n * @since 2.0.0\n */\nexport var constFalse = /*#__PURE__*/ constant(false);\n/**\n * A thunk that returns always `null`.\n *\n * @since 2.0.0\n */\nexport var constNull = /*#__PURE__*/ constant(null);\n/**\n * A thunk that returns always `undefined`.\n *\n * @since 2.0.0\n */\nexport var constUndefined = /*#__PURE__*/ constant(undefined);\n/**\n * A thunk that returns always `void`.\n *\n * @since 2.0.0\n */\nexport var constVoid = constUndefined;\nexport function flip(f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (args.length > 1) {\n return f(args[1], args[0]);\n }\n return function (a) { return f(a)(args[0]); };\n };\n}\nexport function flow(ab, bc, cd, de, ef, fg, gh, hi, ij) {\n switch (arguments.length) {\n case 1:\n return ab;\n case 2:\n return function () {\n return bc(ab.apply(this, arguments));\n };\n case 3:\n return function () {\n return cd(bc(ab.apply(this, arguments)));\n };\n case 4:\n return function () {\n return de(cd(bc(ab.apply(this, arguments))));\n };\n case 5:\n return function () {\n return ef(de(cd(bc(ab.apply(this, arguments)))));\n };\n case 6:\n return function () {\n return fg(ef(de(cd(bc(ab.apply(this, arguments))))));\n };\n case 7:\n return function () {\n return gh(fg(ef(de(cd(bc(ab.apply(this, arguments)))))));\n };\n case 8:\n return function () {\n return hi(gh(fg(ef(de(cd(bc(ab.apply(this, arguments))))))));\n };\n case 9:\n return function () {\n return ij(hi(gh(fg(ef(de(cd(bc(ab.apply(this, arguments)))))))));\n };\n }\n return;\n}\n/**\n * @since 2.0.0\n */\nexport function tuple() {\n var t = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n t[_i] = arguments[_i];\n }\n return t;\n}\n/**\n * @since 2.0.0\n */\nexport function increment(n) {\n return n + 1;\n}\n/**\n * @since 2.0.0\n */\nexport function decrement(n) {\n return n - 1;\n}\n/**\n * @since 2.0.0\n */\nexport function absurd(_) {\n throw new Error('Called `absurd` function which should be uncallable');\n}\n/**\n * Creates a tupled version of this function: instead of `n` arguments, it accepts a single tuple argument.\n *\n * @example\n * import { tupled } from 'fp-ts/function'\n *\n * const add = tupled((x: number, y: number): number => x + y)\n *\n * assert.strictEqual(add([1, 2]), 3)\n *\n * @since 2.4.0\n */\nexport function tupled(f) {\n return function (a) { return f.apply(void 0, a); };\n}\n/**\n * Inverse function of `tupled`\n *\n * @since 2.4.0\n */\nexport function untupled(f) {\n return function () {\n var a = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n a[_i] = arguments[_i];\n }\n return f(a);\n };\n}\nexport function pipe(a, ab, bc, cd, de, ef, fg, gh, hi) {\n switch (arguments.length) {\n case 1:\n return a;\n case 2:\n return ab(a);\n case 3:\n return bc(ab(a));\n case 4:\n return cd(bc(ab(a)));\n case 5:\n return de(cd(bc(ab(a))));\n case 6:\n return ef(de(cd(bc(ab(a)))));\n case 7:\n return fg(ef(de(cd(bc(ab(a))))));\n case 8:\n return gh(fg(ef(de(cd(bc(ab(a)))))));\n case 9:\n return hi(gh(fg(ef(de(cd(bc(ab(a))))))));\n default: {\n var ret = arguments[0];\n for (var i = 1; i < arguments.length; i++) {\n ret = arguments[i](ret);\n }\n return ret;\n }\n }\n}\n/**\n * Type hole simulation\n *\n * @since 2.7.0\n */\nexport var hole = absurd;\n/**\n * @since 2.11.0\n */\nexport var SK = function (_, b) { return b; };\n/**\n * Use `Predicate` module instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport function not(predicate) {\n return function (a) { return !predicate(a); };\n}\n/**\n * Use `Endomorphism` module instead.\n *\n * @category zone of death\n * @since 2.10.0\n * @deprecated\n */\nexport var getEndomorphismMonoid = function () { return ({\n concat: function (first, second) { return flow(first, second); },\n empty: identity\n}); };\n/** @internal */\nexport var dual = function (arity, body) {\n var isDataFirst = typeof arity === 'number' ? function (args) { return args.length >= arity; } : arity;\n return function () {\n var args = Array.from(arguments);\n if (isDataFirst(arguments)) {\n return body.apply(this, args);\n }\n return function (self) { return body.apply(void 0, __spreadArray([self], args, false)); };\n };\n};\n","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { dual } from './function';\n// -------------------------------------------------------------------------------------\n// Option\n// -------------------------------------------------------------------------------------\n/** @internal */\nexport var isNone = function (fa) { return fa._tag === 'None'; };\n/** @internal */\nexport var isSome = function (fa) { return fa._tag === 'Some'; };\n/** @internal */\nexport var none = { _tag: 'None' };\n/** @internal */\nexport var some = function (a) { return ({ _tag: 'Some', value: a }); };\n// -------------------------------------------------------------------------------------\n// Either\n// -------------------------------------------------------------------------------------\n/** @internal */\nexport var isLeft = function (ma) { return ma._tag === 'Left'; };\n/** @internal */\nexport var isRight = function (ma) { return ma._tag === 'Right'; };\n/** @internal */\nexport var left = function (e) { return ({ _tag: 'Left', left: e }); };\n/** @internal */\nexport var right = function (a) { return ({ _tag: 'Right', right: a }); };\n// -------------------------------------------------------------------------------------\n// ReadonlyNonEmptyArray\n// -------------------------------------------------------------------------------------\n/** @internal */\nexport var singleton = function (a) { return [a]; };\n/** @internal */\nexport var isNonEmpty = function (as) { return as.length > 0; };\n/** @internal */\nexport var head = function (as) { return as[0]; };\n/** @internal */\nexport var tail = function (as) { return as.slice(1); };\n// -------------------------------------------------------------------------------------\n// empty\n// -------------------------------------------------------------------------------------\n/** @internal */\nexport var emptyReadonlyArray = [];\n/** @internal */\nexport var emptyRecord = {};\n// -------------------------------------------------------------------------------------\n// Record\n// -------------------------------------------------------------------------------------\n/** @internal */\nexport var has = Object.prototype.hasOwnProperty;\n// -------------------------------------------------------------------------------------\n// NonEmptyArray\n// -------------------------------------------------------------------------------------\n/** @internal */\nexport var fromReadonlyNonEmptyArray = function (as) { return __spreadArray([as[0]], as.slice(1), true); };\n/** @internal */\nexport var liftNullable = function (F) {\n return function (f, onNullable) {\n return function () {\n var a = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n a[_i] = arguments[_i];\n }\n var o = f.apply(void 0, a);\n return F.fromEither(o == null ? left(onNullable.apply(void 0, a)) : right(o));\n };\n };\n};\n/** @internal */\nexport var liftOption = function (F) {\n return function (f, onNone) {\n return function () {\n var a = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n a[_i] = arguments[_i];\n }\n var o = f.apply(void 0, a);\n return F.fromEither(isNone(o) ? left(onNone.apply(void 0, a)) : right(o.value));\n };\n };\n};\n/** @internal */\nexport var flatMapNullable = function (F, M) {\n return /*#__PURE__*/ dual(3, function (self, f, onNullable) {\n return M.flatMap(self, liftNullable(F)(f, onNullable));\n });\n};\n/** @internal */\nexport var flatMapOption = function (F, M) {\n return /*#__PURE__*/ dual(3, function (self, f, onNone) { return M.flatMap(self, liftOption(F)(f, onNone)); });\n};\n/** @internal */\nexport var flatMapEither = function (F, M) {\n return /*#__PURE__*/ dual(2, function (self, f) {\n return M.flatMap(self, function (a) { return F.fromEither(f(a)); });\n });\n};\n/** @internal */\nexport var flatMapIO = function (F, M) {\n return /*#__PURE__*/ dual(2, function (self, f) {\n return M.flatMap(self, function (a) { return F.fromIO(f(a)); });\n });\n};\n/** @internal */\nexport var flatMapTask = function (F, M) {\n return /*#__PURE__*/ dual(2, function (self, f) {\n return M.flatMap(self, function (a) { return F.fromTask(f(a)); });\n });\n};\n/** @internal */\nexport var flatMapReader = function (F, M) {\n return /*#__PURE__*/ dual(2, function (self, f) {\n return M.flatMap(self, function (a) { return F.fromReader(f(a)); });\n });\n};\n","import { getApplicativeMonoid } from './Applicative';\nimport { apFirst as apFirst_, apS as apS_, apSecond as apSecond_, getApplySemigroup as getApplySemigroup_ } from './Apply';\nimport * as chainable from './Chain';\nimport { tailRec } from './ChainRec';\nimport { chainOptionK as chainOptionK_, filterOrElse as filterOrElse_, fromOption as fromOption_, fromOptionK as fromOptionK_, fromPredicate as fromPredicate_ } from './FromEither';\nimport { dual, flow, identity, pipe } from './function';\nimport { as as as_, asUnit as asUnit_, bindTo as bindTo_, flap as flap_, let as let__ } from './Functor';\nimport * as _ from './internal';\nimport { separated } from './Separated';\nimport { wiltDefault, witherDefault } from './Witherable';\n// -------------------------------------------------------------------------------------\n// constructors\n// -------------------------------------------------------------------------------------\n/**\n * Constructs a new `Either` holding a `Left` value. This usually represents a failure, due to the right-bias of this\n * structure.\n *\n * @category constructors\n * @since 2.0.0\n */\nexport var left = _.left;\n/**\n * Constructs a new `Either` holding a `Right` value. This usually represents a successful value due to the right bias\n * of this structure.\n *\n * @category constructors\n * @since 2.0.0\n */\nexport var right = _.right;\n/**\n * @category sequencing\n * @since 2.14.0\n */\nexport var flatMap = /*#__PURE__*/ dual(2, function (ma, f) { return (isLeft(ma) ? ma : f(ma.right)); });\nvar _map = function (fa, f) { return pipe(fa, map(f)); };\nvar _ap = function (fab, fa) { return pipe(fab, ap(fa)); };\n/* istanbul ignore next */\nvar _reduce = function (fa, b, f) { return pipe(fa, reduce(b, f)); };\n/* istanbul ignore next */\nvar _foldMap = function (M) { return function (fa, f) {\n var foldMapM = foldMap(M);\n return pipe(fa, foldMapM(f));\n}; };\n/* istanbul ignore next */\nvar _reduceRight = function (fa, b, f) { return pipe(fa, reduceRight(b, f)); };\nvar _traverse = function (F) {\n var traverseF = traverse(F);\n return function (ta, f) { return pipe(ta, traverseF(f)); };\n};\nvar _bimap = function (fa, f, g) { return pipe(fa, bimap(f, g)); };\nvar _mapLeft = function (fa, f) { return pipe(fa, mapLeft(f)); };\n/* istanbul ignore next */\nvar _alt = function (fa, that) { return pipe(fa, alt(that)); };\n/* istanbul ignore next */\nvar _extend = function (wa, f) { return pipe(wa, extend(f)); };\nvar _chainRec = function (a, f) {\n return tailRec(f(a), function (e) {\n return isLeft(e) ? right(left(e.left)) : isLeft(e.right) ? left(f(e.right.left)) : right(right(e.right.right));\n });\n};\n/**\n * @category type lambdas\n * @since 2.0.0\n */\nexport var URI = 'Either';\n/**\n * @category instances\n * @since 2.0.0\n */\nexport var getShow = function (SE, SA) { return ({\n show: function (ma) { return (isLeft(ma) ? \"left(\".concat(SE.show(ma.left), \")\") : \"right(\".concat(SA.show(ma.right), \")\")); }\n}); };\n/**\n * @category instances\n * @since 2.0.0\n */\nexport var getEq = function (EL, EA) { return ({\n equals: function (x, y) {\n return x === y || (isLeft(x) ? isLeft(y) && EL.equals(x.left, y.left) : isRight(y) && EA.equals(x.right, y.right));\n }\n}); };\n/**\n * Semigroup returning the left-most non-`Left` value. If both operands are `Right`s then the inner values are\n * concatenated using the provided `Semigroup`\n *\n * @example\n * import { getSemigroup, left, right } from 'fp-ts/Either'\n * import { SemigroupSum } from 'fp-ts/number'\n *\n * const S = getSemigroup<string, number>(SemigroupSum)\n * assert.deepStrictEqual(S.concat(left('a'), left('b')), left('a'))\n * assert.deepStrictEqual(S.concat(left('a'), right(2)), right(2))\n * assert.deepStrictEqual(S.concat(right(1), left('b')), right(1))\n * assert.deepStrictEqual(S.concat(right(1), right(2)), right(3))\n *\n * @category instances\n * @since 2.0.0\n */\nexport var getSemigroup = function (S) { return ({\n concat: function (x, y) { return (isLeft(y) ? x : isLeft(x) ? y : right(S.concat(x.right, y.right))); }\n}); };\n/**\n * Builds a `Compactable` instance for `Either` given `Monoid` for the left side.\n *\n * @category filtering\n * @since 2.10.0\n */\nexport var getCompactable = function (M) {\n var empty = left(M.empty);\n return {\n URI: URI,\n _E: undefined,\n compact: function (ma) { return (isLeft(ma) ? ma : ma.right._tag === 'None' ? empty : right(ma.right.value)); },\n separate: function (ma) {\n return isLeft(ma)\n ? separated(ma, ma)\n : isLeft(ma.right)\n ? separated(right(ma.right.left), empty)\n : separated(empty, right(ma.right.right));\n }\n };\n};\n/**\n * Builds a `Filterable` instance for `Either` given `Monoid` for the left side\n *\n * @category filtering\n * @since 2.10.0\n */\nexport var getFilterable = function (M) {\n var empty = left(M.empty);\n var _a = getCompactable(M), compact = _a.compact, separate = _a.separate;\n var filter = function (ma, predicate) {\n return isLeft(ma) ? ma : predicate(ma.right) ? ma : empty;\n };\n var partition = function (ma, p) {\n return isLeft(ma)\n ? separated(ma, ma)\n : p(ma.right)\n ? separated(empty, right(ma.right))\n : separated(right(ma.right), empty);\n };\n return {\n URI: URI,\n _E: undefined,\n map: _map,\n compact: compact,\n separate: separate,\n filter: filter,\n filterMap: function (ma, f) {\n if (isLeft(ma)) {\n return ma;\n }\n var ob = f(ma.right);\n return ob._tag === 'None' ? empty : right(ob.value);\n },\n partition: partition,\n partitionMap: function (ma, f) {\n if (isLeft(ma)) {\n return separated(ma, ma);\n }\n var e = f(ma.right);\n return isLeft(e) ? separated(right(e.left), empty) : separated(empty, right(e.right));\n }\n };\n};\n/**\n * Builds `Witherable` instance for `Either` given `Monoid` for the left side\n *\n * @category filtering\n * @since 2.0.0\n */\nexport var getWitherable = function (M) {\n var F_ = getFilterable(M);\n var C = getCompactable(M);\n return {\n URI: URI,\n _E: undefined,\n map: _map,\n compact: F_.compact,\n separate: F_.separate,\n filter: F_.filter,\n filterMap: F_.filterMap,\n partition: F_.partition,\n partitionMap: F_.partitionMap,\n traverse: _traverse,\n sequence: sequence,\n reduce: _reduce,\n foldMap: _foldMap,\n reduceRight: _reduceRight,\n wither: witherDefault(Traversable, C),\n wilt: wiltDefault(Traversable, C)\n };\n};\n/**\n * The default [`Applicative`](#applicative) instance returns the first error, if you want to\n * get all errors you need to provide a way to concatenate them via a `Semigroup`.\n *\n * @example\n * import * as A from 'fp-ts/Apply'\n * import * as E from 'fp-ts/Either'\n * import { pipe } from 'fp-ts/function'\n * import * as S from 'fp-ts/Semigroup'\n * import * as string from 'fp-ts/string'\n *\n * const parseString = (u: unknown): E.Either<string, string> =>\n * typeof u === 'string' ? E.right(u) : E.left('not a string')\n *\n * const parseNumber = (u: unknown): E.Either<string, number> =>\n * typeof u === 'number' ? E.right(u) : E.left('not a number')\n *\n * interface Person {\n * readonly name: string\n * readonly age: number\n * }\n *\n * const parsePerson = (\n * input: Record<string, unknown>\n * ): E.Either<string, Person> =>\n * pipe(\n * E.Do,\n * E.apS('name', parseString(input.name)),\n * E.apS('age', parseNumber(input.age))\n * )\n *\n * assert.deepStrictEqual(parsePerson({}), E.left('not a string')) // <= first error\n *\n * const Applicative = E.getApplicativeValidation(\n * pipe(string.Semigroup, S.intercalate(', '))\n * )\n *\n * const apS = A.apS(Applicative)\n *\n * const parsePersonAll = (\n * input: Record<string, unknown>\n * ): E.Either<string, Person> =>\n * pipe(\n * E.Do,\n * apS('name', parseString(input.name)),\n * apS('age', parseNumber(input.age))\n * )\n *\n * assert.deepStrictEqual(parsePersonAll({}), E.left('not a string, not a number')) // <= all errors\n *\n * @category error handling\n * @since 2.7.0\n */\nexport var getApplicativeValidation = function (SE) { return ({\n URI: URI,\n _E: undefined,\n map: _map,\n ap: function (fab, fa) {\n return isLeft(fab)\n ? isLeft(fa)\n ? left(SE.concat(fab.left, fa.left))\n : fab\n : isLeft(fa)\n ? fa\n : right(fab.right(fa.right));\n },\n of: of\n}); };\n/**\n * The default [`Alt`](#alt) instance returns the last error, if you want to\n * get all errors you need to provide a way to concatenate them via a `Semigroup`.\n *\n * @example\n * import * as E from 'fp-ts/Either'\n * import { pipe } from 'fp-ts/function'\n * import * as S from 'fp-ts/Semigroup'\n * import * as string from 'fp-ts/string'\n *\n * const parseString = (u: unknown): E.Either<string, string> =>\n * typeof u === 'string' ? E.right(u) : E.left('not a string')\n *\n * const parseNumber = (u: unknown): E.Either<string, number> =>\n * typeof u === 'number' ? E.right(u) : E.left('not a number')\n *\n * const parse = (u: unknown): E.Either<string, string | number> =>\n * pipe(\n * parseString(u),\n * E.alt<string, string | number>(() => parseNumber(u))\n * )\n *\n * assert.deepStrictEqual(parse(true), E.left('not a number')) // <= last error\n *\n * const Alt = E.getAltValidation(pipe(string.Semigroup, S.intercalate(', ')))\n *\n * const parseAll = (u: unknown): E.Either<string, string | number> =>\n * Alt.alt<string | number>(parseString(u), () => parseNumber(u))\n *\n * assert.deepStrictEqual(parseAll(true), E.left('not a string, not a number')) // <= all errors\n *\n * @category error handling\n * @since 2.7.0\n */\nexport var getAltValidation = function (SE) { return ({\n URI: URI,\n _E: undefined,\n map: _map,\n alt: function (me, that) {\n if (isRight(me)) {\n return me;\n }\n var ea = that();\n return isLeft(ea) ? left(SE.concat(me.left, ea.left)) : ea;\n }\n}); };\n/**\n * @category mapping\n * @since 2.0.0\n */\nexport var map = function (f) { return function (fa) {\n return isLeft(fa) ? fa : right(f(fa.right));\n}; };\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var Functor = {\n URI: URI,\n map: _map\n};\n/**\n * Maps the `Right` value of this `Either` to the specified constant value.\n *\n * @category mapping\n * @since 2.16.0\n */\nexport var as = dual(2, as_(Functor));\n/**\n * Maps the `Right` value of this `Either` to the void constant value.\n *\n * @category mapping\n * @since 2.16.0\n */\nexport var asUnit = asUnit_(Functor);\n/**\n * @category constructors\n * @since 2.7.0\n */\nexport var of = right;\n/**\n * @category instances\n * @since 2.10.0\n */\nexport var Pointed = {\n URI: URI,\n of: of\n};\n/**\n * Less strict version of [`ap`](#ap).\n *\n * The `W` suffix (short for **W**idening) means that the error types will be merged.\n *\n * @since 2.8.0\n */\nexport var apW = function (fa) { return function (fab) {\n return isLeft(fab) ? fab : isLeft(fa) ? fa : right(fab.right(fa.right));\n}; };\n/**\n * @since 2.0.0\n */\nexport var ap = apW;\n/**\n * @category instances\n * @since 2.10.0\n */\nexport var Apply = {\n URI: URI,\n map: _map,\n ap: _ap\n};\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var Applicative = {\n URI: URI,\n map: _map,\n ap: _ap,\n of: of\n};\n/**\n * @category instances\n * @since 2.10.0\n */\nexport var Chain = {\n URI: URI,\n map: _map,\n ap: _ap,\n chain: flatMap\n};\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var Monad = {\n URI: URI,\n map: _map,\n ap: _ap,\n of: of,\n chain: flatMap\n};\n/**\n * Left-associative fold of a structure.\n *\n * @example\n * import { pipe } from 'fp-ts/function'\n * import * as E from 'fp-ts/Either'\n *\n * const startWith = 'prefix'\n * const concat = (a: string, b: string) => `${a}:${b}`\n *\n * assert.deepStrictEqual(\n * pipe(E.right('a'), E.reduce(startWith, concat)),\n * 'prefix:a'\n * )\n *\n * assert.deepStrictEqual(\n * pipe(E.left('e'), E.reduce(startWith, concat)),\n * 'prefix'\n * )\n *\n * @category folding\n * @since 2.0.0\n */\nexport var reduce = function (b, f) { return function (fa) {\n return isLeft(fa) ? b : f(b, fa.right);\n}; };\n/**\n * Map each element of the structure to a monoid, and combine the results.\n *\n * @example\n * import { pipe } from 'fp-ts/function'\n * import * as E from 'fp-ts/Either'\n * import * as S from 'fp-ts/string'\n *\n * const yell = (a: string) => `${a}!`\n *\n * assert.deepStrictEqual(\n * pipe(E.right('a'), E.foldMap(S.Monoid)(yell)),\n * 'a!'\n * )\n *\n * assert.deepStrictEqual(\n * pipe(E.left('e'), E.foldMap(S.Monoid)(yell)),\n * S.Monoid.empty\n * )\n *\n * @category folding\n * @since 2.0.0\n */\nexport var foldMap = function (M) { return function (f) { return function (fa) {\n return isLeft(fa) ? M.empty : f(fa.right);\n}; }; };\n/**\n * Right-associative fold of a structure.\n *\n * @example\n * import { pipe } from 'fp-ts/function'\n * import * as E from 'fp-ts/Either'\n *\n * const startWith = 'postfix'\n * const concat = (a: string, b: string) => `${a}:${b}`\n *\n * assert.deepStrictEqual(\n * pipe(E.right('a'), E.reduceRight(startWith, concat)),\n * 'a:postfix'\n * )\n *\n * assert.deepStrictEqual(\n * pipe(E.left('e'), E.reduceRight(startWith, concat)),\n * 'postfix'\n * )\n *\n * @category folding\n * @since 2.0.0\n */\nexport var reduceRight = function (b, f) { return function (fa) {\n return isLeft(fa) ? b : f(fa.right, b);\n}; };\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var Foldable = {\n URI: URI,\n reduce: _reduce,\n foldMap: _foldMap,\n reduceRight: _reduceRight\n};\n/**\n * Map each element of a structure to an action, evaluate these actions from left to right, and collect the results.\n *\n * @example\n * import { pipe } from 'fp-ts/function'\n * import * as RA from 'fp-ts/ReadonlyArray'\n * import * as E from 'fp-ts/Either'\n * import * as O from 'fp-ts/Option'\n *\n * assert.deepStrictEqual(\n * pipe(E.right(['a']), E.traverse(O.Applicative)(RA.head)),\n * O.some(E.right('a'))\n * )\n *\n * assert.deepStrictEqual(\n * pipe(E.right([]), E.traverse(O.Applicative)(RA.head)),\n * O.none\n * )\n *\n * @category traversing\n * @since 2.6.3\n */\nexport var traverse = function (F) {\n return function (f) {\n return function (ta) {\n return isLeft(ta) ? F.of(left(ta.left)) : F.map(f(ta.right), right);\n };\n };\n};\n/**\n * Evaluate each monadic action in the structure from left to right, and collect the results.\n *\n * @example\n * import { pipe } from 'fp-ts/function'\n * import * as E from 'fp-ts/Either'\n * import * as O from 'fp-ts/Option'\n *\n * assert.deepStrictEqual(\n * pipe(E.right(O.some('a')), E.sequence(O.Applicative)),\n * O.some(E.right('a'))\n * )\n *\n * assert.deepStrictEqual(\n * pipe(E.right(O.none), E.sequence(O.Applicative)),\n * O.none\n * )\n *\n * @category traversing\n * @since 2.6.3\n */\nexport var sequence = function (F) {\n return function (ma) {\n return isLeft(ma) ? F.of(left(ma.left)) : F.map(ma.right, right);\n };\n};\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var Traversable = {\n URI: URI,\n map: _map,\n reduce: _reduce,\n foldMap: _foldMap,\n reduceRight: _reduceRight,\n traverse: _traverse,\n sequence: sequence\n};\n/**\n * Map a pair of functions over the two type arguments of the bifunctor.\n *\n * @category mapping\n * @since 2.0.0\n */\nexport var bimap = function (f, g) { return function (fa) {\n return isLeft(fa) ? left(f(fa.left)) : right(g(fa.right));\n}; };\n/**\n * Map a function over the first type argument of a bifunctor.\n *\n * @category error handling\n * @since 2.0.0\n */\nexport var mapLeft = function (f) { return function (fa) {\n return isLeft(fa) ? left(f(fa.left)) : fa;\n}; };\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var Bifunctor = {\n URI: URI,\n bimap: _bimap,\n mapLeft: _mapLeft\n};\n/**\n * Less strict version of [`alt`](#alt).\n *\n * The `W` suffix (short for **W**idening) means that the error and the return types will be merged.\n *\n * @category error handling\n * @since 2.9.0\n */\nexport var altW = function (that) { return function (fa) {\n return isLeft(fa) ? that() : fa;\n}; };\n/**\n * Identifies an associative operation on a type constructor. It is similar to `Semigroup`, except that it applies to\n * types of kind `* -> *`.\n *\n * In case of `Either` returns the left-most non-`Left` value (or the right-most `Left` value if both values are `Left`).\n *\n * | x | y | pipe(x, alt(() => y) |\n * | -------- | -------- | -------------------- |\n * | left(a) | left(b) | left(b) |\n * | left(a) | right(2) | right(2) |\n * | right(1) | left(b) | right(1) |\n * | right(1) | right(2) | right(1) |\n *\n * @example\n * import * as E from 'fp-ts/Either'\n * import { pipe } from 'fp-ts/function'\n *\n * assert.deepStrictEqual(\n * pipe(\n * E.left('a'),\n * E.alt(() => E.left('b'))\n * ),\n * E.left('b')\n * )\n * assert.deepStrictEqual(\n * pipe(\n * E.left('a'),\n * E.alt(() => E.right(2))\n * ),\n * E.right(2)\n * )\n * assert.deepStrictEqual(\n * pipe(\n * E.right(1),\n * E.alt(() => E.left('b'))\n * ),\n * E.right(1)\n * )\n * assert.deepStrictEqual(\n * pipe(\n * E.right(1),\n * E.alt(() => E.right(2))\n * ),\n * E.right(1)\n * )\n *\n * @category error handling\n * @since 2.0.0\n */\nexport var alt = altW;\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var Alt = {\n URI: URI,\n map: _map,\n alt: _alt\n};\n/**\n * @since 2.0.0\n */\nexport var extend = function (f) { return function (wa) {\n return isLeft(wa) ? wa : right(f(wa));\n}; };\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var Extend = {\n URI: URI,\n map: _map,\n extend: _extend\n};\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var ChainRec = {\n URI: URI,\n map: _map,\n ap: _ap,\n chain: flatMap,\n chainRec: _chainRec\n};\n/**\n * @since 2.6.3\n */\nexport var throwError = left;\n/**\n * @category instances\n * @since 2.7.0\n */\nexport var MonadThrow = {\n URI: URI,\n map: _map,\n ap: _ap,\n of: of,\n chain: flatMap,\n throwError: throwError\n};\n/**\n * @category instances\n * @since 2.10.0\n */\nexport var FromEither = {\n URI: URI,\n fromEither: identity\n};\n/**\n * @example\n * import { fromPredicate, left, right } from 'fp-ts/Either'\n * import { pipe } from 'fp-ts/function'\n *\n * assert.deepStrictEqual(\n * pipe(\n * 1,\n * fromPredicate(\n * (n) => n > 0,\n * () => 'error'\n * )\n * ),\n * right(1)\n * )\n * assert.deepStrictEqual(\n * pipe(\n * -1,\n * fromPredicate(\n * (n) => n > 0,\n * () => 'error'\n * )\n * ),\n * left('error')\n * )\n *\n * @category lifting\n * @since 2.0.0\n */\nexport var fromPredicate = /*#__PURE__*/ fromPredicate_(FromEither);\n// -------------------------------------------------------------------------------------\n// conversions\n// -------------------------------------------------------------------------------------\n/**\n * @example\n * import * as E from 'fp-ts/Either'\n * import { pipe } from 'fp-ts/function'\n * import * as O from 'fp-ts/Option'\n *\n * assert.deepStrictEqual(\n * pipe(\n * O.some(1),\n * E.fromOption(() => 'error')\n * ),\n * E.right(1)\n * )\n * assert.deepStrictEqual(\n * pipe(\n * O.none,\n * E.fromOption(() => 'error')\n * ),\n * E.left('error')\n * )\n *\n * @category conversions\n * @since 2.0.0\n */\nexport var fromOption = \n/*#__PURE__*/ fromOption_(FromEither);\n// -------------------------------------------------------------------------------------\n// refinements\n// -------------------------------------------------------------------------------------\n/**\n * Returns `true` if the either is an instance of `Left`, `false` otherwise.\n *\n * @category refinements\n * @since 2.0.0\n */\nexport var isLeft = _.isLeft;\n/**\n * Returns `true` if the either is an instance of `Right`, `false` otherwise.\n *\n * @category refinements\n * @since 2.0.0\n */\nexport var isRight = _.isRight;\n/**\n * Less strict version of [`match`](#match).\n *\n * The `W` suffix (short for **W**idening) means that the handler return types will be merged.\n *\n * @category pattern matching\n * @since 2.10.0\n */\nexport var matchW = function (onLeft, onRight) {\n return function (ma) {\n return isLeft(ma) ? onLeft(ma.left) : onRight(ma.right);\n };\n};\n/**\n * Alias of [`matchW`](#matchw).\n *\n * @category pattern matching\n * @since 2.10.0\n */\nexport var foldW = matchW;\n/**\n * Takes two functions and an `Either` value, if the value is a `Left` the inner value is applied to the first function,\n * if the value is a `Right` the inner value is applied to the second function.\n *\n * @example\n * import { match, left, right } from 'fp-ts/Either'\n * import { pipe } from 'fp-ts/function'\n *\n * function onLeft(errors: Array<string>): string {\n * return `Errors: ${errors.join(', ')}`\n * }\n *\n * function onRight(value: number): string {\n * return `Ok: ${value}`\n * }\n *\n * assert.strictEqual(\n * pipe(\n * right(1),\n * match(onLeft, onRight)\n * ),\n * 'Ok: 1'\n * )\n * assert.strictEqual(\n * pipe(\n * left(['error 1', 'error 2']),\n * match(onLeft, onRight)\n * ),\n * 'Errors: error 1, error 2'\n * )\n *\n * @category pattern matching\n * @since 2.10.0\n */\nexport var match = matchW;\n/**\n * Alias of [`match`](#match).\n *\n * @category pattern matching\n * @since 2.0.0\n */\nexport var fold = match;\n/**\n * Less strict version of [`getOrElse`](#getorelse).\n *\n * The `W` suffix (short for **W**idening) means that the handler return type will be merged.\n *\n * @category error handling\n * @since 2.6.0\n */\nexport var getOrElseW = function (onLeft) {\n return function (ma) {\n return isLeft(ma) ? onLeft(ma.left) : ma.right;\n };\n};\n/**\n * Returns the wrapped value if it's a `Right` or a default value if is a `Left`.\n *\n * @example\n * import { getOrElse, left, right } from 'fp-ts/Either'\n * import { pipe } from 'fp-ts/function'\n *\n * assert.deepStrictEqual(\n * pipe(\n * right(1),\n * getOrElse(() => 0)\n * ),\n * 1\n * )\n * assert.deepStrictEqual(\n * pipe(\n * left('error'),\n * getOrElse(() => 0)\n * ),\n * 0\n * )\n *\n * @category error handling\n * @since 2.0.0\n */\nexport var getOrElse = getOrElseW;\n// -------------------------------------------------------------------------------------\n// combinators\n// -------------------------------------------------------------------------------------\n/**\n * @category mapping\n * @since 2.10.0\n */\nexport var flap = /*#__PURE__*/ flap_(Functor);\n/**\n * Combine two effectful actions, keeping only the result of the first.\n *\n * @since 2.0.0\n */\nexport var apFirst = /*#__PURE__*/ apFirst_(Apply);\n/**\n * Less strict version of [`apFirst`](#apfirst)\n *\n * The `W` suffix (short for **W**idening) means that the error types will be merged.\n *\n * @since 2.12.0\n */\nexport var apFirstW = apFirst;\n/**\n * Combine two effectful actions, keeping only the result of the second.\n *\n * @since 2.0.0\n */\nexport var apSecond = /*#__PURE__*/ apSecond_(Apply);\n/**\n * Less strict version of [`apSecond`](#apsecond)\n *\n * The `W` suffix (short for **W**idening) means that the error types will be merged.\n *\n * @since 2.12.0\n */\nexport var apSecondW = apSecond;\n/**\n * Composes computations in sequence, using the return value of one computation to determine the next computation and\n * keeping only the result of the first.\n *\n * @category combinators\n * @since 2.15.0\n */\nexport var tap = /*#__PURE__*/ dual(2, chainable.tap(Chain));\n/**\n * Less strict version of [`flatten`](#flatten).\n *\n * The `W` suffix (short for **W**idening) means that the error types will be merged.\n *\n * @category sequencing\n * @since 2.11.0\n */\nexport var flattenW = \n/*#__PURE__*/ flatMap(identity);\n/**\n * The `flatten` function is the conventional monad join operator. It is used to remove one level of monadic structure, projecting its bound argument into the outer level.\n *\n * @example\n * import * as E from 'fp-ts/Either'\n *\n * assert.deepStrictEqual(E.flatten(E.right(E.right('a'))), E.right('a'))\n * assert.deepStrictEqual(E.flatten(E.right(E.left('e'))), E.left('e'))\n * assert.deepStrictEqual(E.flatten(E.left('e')), E.left('e'))\n *\n * @category sequencing\n * @since 2.0.0\n */\nexport var flatten = flattenW;\n/**\n * @since 2.0.0\n */\nexport var duplicate = /*#__PURE__*/ extend(identity);\n/**\n * Use `liftOption`.\n *\n * @category legacy\n * @since 2.10.0\n */\nexport var fromOptionK = \n/*#__PURE__*/ fromOptionK_(FromEither);\n/**\n * Use `flatMapOption`.\n *\n * @category legacy\n * @since 2.11.0\n */\nexport var chainOptionK = /*#__PURE__*/ chainOptionK_(FromEither, Chain);\n/**\n * Use `flatMapOption`.\n *\n * @category legacy\n * @since 2.13.2\n */\nexport var chainOptionKW = chainOptionK;\n/** @internal */\nvar _FromEither = {\n fromEither: FromEither.fromEither\n};\n/**\n * @category lifting\n * @since 2.15.0\n */\nexport var liftNullable = /*#__PURE__*/ _.liftNullable(_FromEither);\n/**\n * @category lifting\n * @since 2.15.0\n */\nexport var liftOption = /*#__PURE__*/ _.liftOption(_FromEither);\n/** @internal */\nvar _FlatMap = {\n flatMap: flatMap\n};\n/**\n * @category sequencing\n * @since 2.15.0\n */\nexport var flatMapNullable = /*#__PURE__*/ _.flatMapNullable(_FromEither, _FlatMap);\n/**\n * @category sequencing\n * @since 2.15.0\n */\nexport var flatMapOption = /*#__PURE__*/ _.flatMapOption(_FromEither, _FlatMap);\n/**\n * @example\n * import * as E from 'fp-ts/Either'\n * import { pipe } from 'fp-ts/function'\n *\n * assert.deepStrictEqual(\n * pipe(\n * E.right(1),\n * E.filterOrElse(\n * (n) => n > 0,\n * () => 'error'\n * )\n * ),\n * E.right(1)\n * )\n * assert.deepStrictEqual(\n * pipe(\n * E.right(-1),\n * E.filterOrElse(\n * (n) => n > 0,\n * () => 'error'\n * )\n * ),\n * E.left('error')\n * )\n * assert.deepStrictEqual(\n * pipe(\n * E.left('a'),\n * E.filterOrElse(\n * (n) => n > 0,\n * () => 'error'\n * )\n * ),\n * E.left('a')\n * )\n *\n * @category filtering\n * @since 2.0.0\n */\nexport var filterOrElse = /*#__PURE__*/ filterOrElse_(FromEither, Chain);\n/**\n * Less strict version of [`filterOrElse`](#filterorelse).\n *\n * The `W` suffix (short for **W**idening) means that the error types will be merged.\n *\n * @category filtering\n * @since 2.9.0\n */\nexport var filterOrElseW = filterOrElse;\n/**\n * Returns a `Right` if is a `Left` (and vice versa).\n *\n * @since 2.0.0\n */\nexport var swap = function (ma) { return (isLeft(ma) ? right(ma.left) : left(ma.right)); };\n/**\n * Less strict version of [`orElse`](#orelse).\n *\n * The `W` suffix (short for **W**idening) means that the return types will be merged.\n *\n * @category error handling\n * @since 2.10.0\n */\nexport var orElseW = function (onLeft) {\n return function (ma) {\n return isLeft(ma) ? onLeft(ma.left) : ma;\n };\n};\n/**\n * Useful for recovering from errors.\n *\n * @category error handling\n * @since 2.0.0\n */\nexport var orElse = orElseW;\n/**\n * Takes a default and a nullable value, if the value is not nully, turn it into a `Right`, if the value is nully use\n * the provided default as a `Left`.\n *\n * @example\n * import { fromNullable, left, right } from 'fp-ts/Either'\n *\n * const parse = fromNullable('nully')\n *\n * assert.deepStrictEqual(parse(1), right(1))\n * assert.deepStrictEqual(parse(null), left('nully'))\n *\n * @category conversions\n * @since 2.0.0\n */\nexport var fromNullable = function (e) {\n return function (a) {\n return a == null ? left(e) : right(a);\n };\n};\n/**\n * Constructs a new `Either` from a function that might throw.\n *\n * See also [`tryCatchK`](#trycatchk).\n *\n * @example\n * import * as E from 'fp-ts/Either'\n *\n * const unsafeHead = <A>(as: ReadonlyArray<A>): A => {\n * if (as.length > 0) {\n * return as[0]\n * } else {\n * throw new Error('empty array')\n * }\n * }\n *\n * const head = <A>(as: ReadonlyArray<A>): E.Either<Error, A> =>\n * E.tryCatch(() => unsafeHead(as), e => (e instanceof Error ? e : new Error('unknown error')))\n *\n * assert.deepStrictEqual(head([]), E.left(new Error('empty array')))\n * assert.deepStrictEqual(head([1, 2, 3]), E.right(1))\n *\n * @category interop\n * @since 2.0.0\n */\nexport var tryCatch = function (f, onThrow) {\n try {\n return right(f());\n }\n catch (e) {\n return left(onThrow(e));\n }\n};\n/**\n * Converts a function that may throw to one returning a `Either`.\n *\n * @category interop\n * @since 2.10.0\n */\nexport var tryCatchK = function (f, onThrow) {\n return function () {\n var a = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n a[_i] = arguments[_i];\n }\n return tryCatch(function () { return f.apply(void 0, a); }, onThrow);\n };\n};\n/**\n * Use `liftNullable`.\n *\n * @category legacy\n * @since 2.9.0\n */\nexport var fromNullableK = function (e) {\n var from = fromNullable(e);\n return function (f) { return flow(f, from); };\n};\n/**\n * Use `flatMapNullable`.\n *\n * @category legacy\n * @since 2.9.0\n */\nexport var chainNullableK = function (e) {\n var from = fromNullableK(e);\n return function (f) { return flatMap(from(f)); };\n};\n/**\n * @category conversions\n * @since 2.10.0\n */\nexport var toUnion = /*#__PURE__*/ foldW(identity, identity);\n// -------------------------------------------------------------------------------------\n// utils\n// -------------------------------------------------------------------------------------\n/**\n * Default value for the `onError` argument of `tryCatch`\n *\n * @since 2.0.0\n */\nexport function toError(e) {\n try {\n return e instanceof Error ? e : new Error(String(e));\n }\n catch (error) {\n return new Error();\n }\n}\nexport function elem(E) {\n return function (a, ma) {\n if (ma === undefined) {\n var elemE_1 = elem(E);\n return function (ma) { return elemE_1(a, ma); };\n }\n return isLeft(ma) ? false : E.equals(a, ma.right);\n };\n}\n/**\n * Returns `false` if `Left` or returns the result of the application of the given predicate to the `Right` value.\n *\n * @example\n * import { exists, left, right } from 'fp-ts/Either'\n *\n * const gt2 = exists((n: number) => n > 2)\n *\n * assert.strictEqual(gt2(left('a')), false)\n * assert.strictEqual(gt2(right(1)), false)\n * assert.strictEqual(gt2(right(3)), true)\n *\n * @since 2.0.0\n */\nexport var exists = function (predicate) {\n return function (ma) {\n return isLeft(ma) ? false : predicate(ma.right);\n };\n};\n// -------------------------------------------------------------------------------------\n// do notation\n// -------------------------------------------------------------------------------------\n/**\n * @category do notation\n * @since 2.9.0\n */\nexport var Do = /*#__PURE__*/ of(_.emptyRecord);\n/**\n * @category do notation\n * @since 2.8.0\n */\nexport var bindTo = /*#__PURE__*/ bindTo_(Functor);\nvar let_ = /*#__PURE__*/ let__(Functor);\nexport { \n/**\n * @category do notation\n * @since 2.13.0\n */\nlet_ as let };\n/**\n * @category do notation\n * @since 2.8.0\n */\nexport var bind = /*#__PURE__*/ chainable.bind(Chain);\n/**\n * The `W` suffix (short for **W**idening) means that the error types will be merged.\n *\n * @category do notation\n * @since 2.8.0\n */\nexport var bindW = bind;\n/**\n * @category do notation\n * @since 2.8.0\n */\nexport var apS = /*#__PURE__*/ apS_(Apply);\n/**\n * Less strict version of [`apS`](#aps).\n *\n * The `W` suffix (short for **W**idening) means that the error types will be merged.\n *\n * @category do notation\n * @since 2.8.0\n */\nexport var apSW = apS;\n/**\n * @since 2.11.0\n */\nexport var ApT = /*#__PURE__*/ of(_.emptyReadonlyArray);\n// -------------------------------------------------------------------------------------\n// array utils\n// -------------------------------------------------------------------------------------\n/**\n * Equivalent to `ReadonlyNonEmptyArray#traverseWithIndex(Applicative)`.\n *\n * @category traversing\n * @since 2.11.0\n */\nexport var traverseReadonlyNonEmptyArrayWithIndex = function (f) {\n return function (as) {\n var e = f(0, _.head(as));\n if (isLeft(e)) {\n return e;\n }\n var out = [e.right];\n for (var i = 1; i < as.length; i++) {\n var e_1 = f(i, as[i]);\n if (isLeft(e_1)) {\n return e_1;\n }\n out.push(e_1.right);\n }\n return right(out);\n };\n};\n/**\n * Equivalent to `ReadonlyArray#traverseWithIndex(Applicative)`.\n *\n * @category traversing\n * @since 2.11.0\n */\nexport var traverseReadonlyArrayWithIndex = function (f) {\n var g = traverseReadonlyNonEmptyArrayWithIndex(f);\n return function (as) { return (_.isNonEmpty(as) ? g(as) : ApT); };\n};\n/**\n * Equivalent to `ReadonlyArray#traverseWithIndex(Applicative)`.\n *\n * @category traversing\n * @since 2.9.0\n */\nexport var traverseArrayWithIndex = traverseReadonlyArrayWithIndex;\n/**\n * Equivalent to `ReadonlyArray#traverse(Applicative)`.\n *\n * @category traversing\n * @since 2.9.0\n */\nexport var traverseArray = function (f) { return traverseReadonlyArrayWithIndex(function (_, a) { return f(a); }); };\n/**\n * Equivalent to `ReadonlyArray#sequence(Applicative)`.\n *\n * @category traversing\n * @since 2.9.0\n */\nexport var sequenceArray = \n/*#__PURE__*/ traverseArray(identity);\n// -------------------------------------------------------------------------------------\n// legacy\n// -------------------------------------------------------------------------------------\n/**\n * Alias of `flatMap`.\n *\n * @category legacy\n * @since 2.6.0\n */\nexport var chainW = flatMap;\n/**\n * Alias of `flatMap`.\n *\n * @category legacy\n * @since 2.0.0\n */\nexport var chain = flatMap;\n/**\n * Alias of `tap`.\n *\n * @category legacy\n * @since 2.0.0\n */\nexport var chainFirst = tap;\n/**\n * Alias of `tap`.\n *\n * @category legacy\n * @since 2.8.0\n */\nexport var chainFirstW = tap;\n/**\n * Use [`parse`](./Json.ts.html#parse) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport function parseJSON(s, onError) {\n return tryCatch(function () { return JSON.parse(s); }, onError);\n}\n/**\n * Use [`stringify`](./Json.ts.html#stringify) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var stringifyJSON = function (u, onError) {\n return tryCatch(function () {\n var s = JSON.stringify(u);\n if (typeof s !== 'string') {\n throw new Error('Converting unsupported structure to JSON');\n }\n return s;\n }, onError);\n};\n/**\n * This instance is deprecated, use small, specific instances instead.\n * For example if a function needs a `Functor` instance, pass `E.Functor` instead of `E.either`\n * (where `E` is from `import E from 'fp-ts/Either'`)\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var either = {\n URI: URI,\n map: _map,\n of: of,\n ap: _ap,\n chain: flatMap,\n reduce: _reduce,\n foldMap: _foldMap,\n reduceRight: _reduceRight,\n traverse: _traverse,\n sequence: sequence,\n bimap: _bimap,\n mapLeft: _mapLeft,\n alt: _alt,\n extend: _extend,\n chainRec: _chainRec,\n throwError: throwError\n};\n/**\n * Use [`getApplySemigroup`](./Apply.ts.html#getapplysemigroup) instead.\n *\n * Semigroup returning the left-most `Left` value. If both operands are `Right`s then the inner values\n * are concatenated using the provided `Semigroup`\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var getApplySemigroup = \n/*#__PURE__*/ getApplySemigroup_(Apply);\n/**\n * Use [`getApplicativeMonoid`](./Applicative.ts.html#getapplicativemonoid) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var getApplyMonoid = \n/*#__PURE__*/ getApplicativeMonoid(Applicative);\n/**\n * Use [`getApplySemigroup`](./Apply.ts.html#getapplysemigroup) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var getValidationSemigroup = function (SE, SA) {\n return getApplySemigroup_(getApplicativeValidation(SE))(SA);\n};\n/**\n * Use [`getApplicativeMonoid`](./Applicative.ts.html#getapplicativemonoid) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var getValidationMonoid = function (SE, MA) {\n return getApplicativeMonoid(getApplicativeValidation(SE))(MA);\n};\n/**\n * Use [`getApplicativeValidation`](#getapplicativevalidation) and [`getAltValidation`](#getaltvalidation) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport function getValidation(SE) {\n var ap = getApplicativeValidation(SE).ap;\n var alt = getAltValidation(SE).alt;\n return {\n URI: URI,\n _E: undefined,\n map: _map,\n of: of,\n chain: flatMap,\n bimap: _bimap,\n mapLeft: _mapLeft,\n reduce: _reduce,\n foldMap: _foldMap,\n reduceRight: _reduceRight,\n extend: _extend,\n traverse: _traverse,\n sequence: sequence,\n chainRec: _chainRec,\n throwError: throwError,\n ap: ap,\n alt: alt\n };\n}\n","import {\n type BaseIssue,\n type BaseSchema,\n check,\n type CheckAction,\n type InferOutput,\n instance,\n type InstanceSchema,\n parse, pipe,\n type SchemaWithPipe,\n string,\n type StringSchema,\n transform,\n type TransformAction,\n union,\n type UnionSchema,\n} from 'valibot';\n\ntype RequiredSchema = BaseSchema<any, any, BaseIssue<any>>;\n\nexport type TransformJsonToSchemaAction<Schema extends RequiredSchema> = SchemaWithPipe<readonly [\n StringSchema<any>,\n CheckAction<string, string>,\n TransformAction<string, unknown>,\n Schema,\n]>;\n\nexport type TransformQueryToSchemaAction<Schema extends RequiredSchema> = SchemaWithPipe<readonly [\n UnionSchema<[\n StringSchema<undefined>,\n InstanceSchema<typeof URLSearchParams, undefined>,\n ], undefined>,\n CheckAction<string | URLSearchParams, string>,\n TransformAction<string | URLSearchParams, InferOutput<Schema>>,\n]>;\n\nexport function transformQueryToSchema<Schema extends RequiredSchema>(\n schema: Schema,\n): TransformQueryToSchemaAction<Schema> {\n const transformer = (input: string | URLSearchParams) => {\n const result: Record<string, string | string[]> = {};\n\n new URLSearchParams(input).forEach((value, key) => {\n const accValue = result[key];\n if (Array.isArray(accValue)) {\n accValue.push(value);\n } else if (accValue === undefined) {\n result[key] = value;\n } else {\n result[key] = [accValue, value];\n }\n });\n\n return parse(schema, result);\n };\n\n return pipe(\n union([string(), instance(URLSearchParams)]),\n check(input => {\n try {\n transformer(input);\n return true;\n } catch {\n return false;\n }\n }, 'The value doesn\\'t match required schema'),\n transform(transformer),\n );\n}\n\n/**\n * @returns A transformer applying `JSON.parse` to the input.\n */\nexport function transformJsonToSchema<Schema extends RequiredSchema>(\n schema: Schema,\n): TransformJsonToSchemaAction<Schema> {\n return pipe(\n string(),\n check(input => {\n try {\n JSON.parse(input);\n return true;\n } catch {\n return false;\n }\n }, 'Input is not a valid JSON value'),\n transform(JSON.parse),\n schema,\n );\n}\n","import {\n type BaseIssue,\n type BaseSchema,\n instance,\n type InstanceSchema,\n pipe,\n type SchemaWithPipe,\n string,\n type StringSchema,\n union,\n type UnionSchema,\n} from 'valibot';\n\nimport {\n transformJsonToSchema,\n type TransformJsonToSchemaAction,\n transformQueryToSchema,\n type TransformQueryToSchemaAction,\n} from './transformers.js';\n\ntype RequiredSchema = BaseSchema<any, any, BaseIssue<any>>;\n\nexport type JsonToSchemaPipe<Schema extends RequiredSchema> = SchemaWithPipe<readonly [\n StringSchema<undefined>,\n TransformJsonToSchemaAction<Schema>,\n]>;\n\nexport type QueryToSchemaPipe<Schema extends RequiredSchema> = SchemaWithPipe<readonly [\n UnionSchema<[\n StringSchema<undefined>,\n InstanceSchema<typeof URLSearchParams, undefined>,\n ], undefined>,\n TransformQueryToSchemaAction<Schema>,\n]>;\n\nexport function pipeJsonToSchema<Schema extends RequiredSchema>(\n schema: Schema,\n): JsonToSchemaPipe<Schema> {\n return pipe(string(), transformJsonToSchema(schema));\n}\n\nexport function pipeQueryToSchema<Schema extends RequiredSchema>(\n schema: Schema,\n): QueryToSchemaPipe<Schema> {\n return pipe(\n union([string(), instance(URLSearchParams)]),\n transformQueryToSchema(schema),\n );\n}\n","import { throwifyFpFn } from '@tma.js/toolkit';\nimport type { RGB } from '@tma.js/types';\nimport * as E from 'fp-ts/Either';\nimport { pipe } from 'fp-ts/function';\n\nfunction guardBasedOn(re: RegExp) {\n return (value: string): value is RGB => re.test(value);\n}\n\n/**\n * @returns True if the value has the #RGB format.\n */\nexport const isRGBShort = guardBasedOn(/^#[\\da-f]{3}$/i);\n\n/**\n * @returns True if the value has the #RGBA format.\n */\nexport const isRGBAShort = guardBasedOn(/^#[\\da-f]{4}$/i);\n\n/**\n * @returns True if the value has the #RRGGBB format.\n */\nexport const isRGB = guardBasedOn(/^#[\\da-f]{6}$/i);\n\n/**\n * @returns True if the value has the #RRGGBBAA format.\n */\nexport const isRGBA = guardBasedOn(/^#[\\da-f]{8}$/i);\n\n/**\n * @returns True if the value has any known RGB format.\n * @param value - value to check.\n */\nexport function isAnyRGB(value: string): value is RGB {\n return [isRGB, isRGBA, isRGBShort, isRGBAShort].some(fn => fn(value));\n}\n\n/**\n * Converts a short version of RGB (#RGB) to a complete one (#RRGGBB).\n * @param value\n */\nfunction expandRgb(value: RGB): RGB {\n let color: RGB = '#';\n for (let i = 0; i < value.length - 1; i += 1) {\n color += value[1 + i].repeat(2);\n }\n return color;\n}\n\n/**\n * Converts passed value to #RRGGBBAA format. Accepts the following color formats:\n * - `#RGB`\n * - `#RGBA`\n * - `#RRGGBB`\n * - `#RRGGBBAA`\n * - `rgb(1,2,3)`\n * - `rgba(1,2,3,4)`\n * @param value - a value to convert.\n * @returns A value in the #RRGGBBAA format.\n */\nexport function toRGBFullFp(value: string): E.Either<Error, RGB> {\n const clean = value.replace(/\\s/g, '').toLowerCase();\n if (/^#[\\da-f]{3}$/i.test(clean)) {\n return E.right(expandRgb(clean.toLowerCase() + 'f' as RGB));\n }\n\n if (/^#[\\da-f]{4}$/i.test(clean)) {\n return E.right(expandRgb(clean.toLowerCase() as RGB));\n }\n\n if (/^#[\\da-f]{6}$/i.test(clean)) {\n return E.right(clean.toLowerCase() + 'ff' as RGB);\n }\n\n if (/^#[\\da-f]{8}$/i.test(clean)) {\n return E.right(clean.toLowerCase() as RGB);\n }\n\n // Example valid values: rgb(0,3,10) rgba(32,114,8,0)\n const match = clean.match(/^rgb\\((\\d{1,3}),(\\d{1,3}),(\\d{1,3})\\)$/)\n || clean.match(/^rgba\\((\\d{1,3}),(\\d{1,3}),(\\d{1,3}),(\\d{1,3})\\)$/);\n\n // If this didn't work as well, we can't extract RGB color from passed text.\n if (!match) {\n return E.left(new Error(`Value \"${value}\" does not satisfy any of known RGB formats.`));\n }\n\n // Otherwise, take R, G and B components, convert to hex and create #RRGGBB string.\n return E.right(\n match\n .slice(1)\n .reduce(\n (acc, component) => {\n return acc + parseInt(component, 10)\n .toString(16)\n .padStart(2, '0');\n }, '#',\n )\n // We are adding f-s here to match the pattern: #RRGGBBAA\n .padEnd(9, 'f') as RGB,\n );\n}\n\n/**\n * Converts passed value to #RRGGBB format. Accepts the following color formats:\n * - `#RGB`\n * - `#RGBA`\n * - `#RRGGBB`\n * - `#RRGGBBAA`\n * - `rgb(1,2,3)`\n * - `rgba(1,2,3,4)`\n * @param value - a value to convert.\n * @returns A value in the #RRGGBB format.\n * @deprecated This function cuts the RGB's alpha channel. Use the `toRGBFullFp` function instead.\n */\nexport function toRGBFp(value: string): E.Either<Error, RGB> {\n return pipe(\n toRGBFullFp(value),\n E.map(rgb => rgb.slice(0, 7) as RGB),\n );\n}\n\n/**\n * @see toRGBFp\n * @deprecated This function cuts the RGB's alpha channel. Use the `toRGBFull` function instead.\n */\nexport const toRGB = throwifyFpFn(toRGBFp);\n\n/**\n * @see toRGBFullFp\n */\nexport const toRGBFull = throwifyFpFn(toRGBFullFp);\n","import type {\n Chat,\n InitData,\n KnownThemeParamsKey,\n LaunchParams,\n RGB,\n User,\n} from '@tma.js/types';\nimport {\n type BaseSchema,\n boolean,\n check,\n type CheckAction,\n date,\n type InferOutput,\n integer,\n is,\n looseObject,\n number,\n type NumberSchema,\n optional,\n pipe,\n record,\n type RecordSchema,\n type SchemaWithPipe,\n string,\n type StringSchema,\n transform,\n type TransformAction,\n union,\n type UnionSchema,\n unknown,\n} from 'valibot';\n\nimport { pipeJsonToSchema, pipeQueryToSchema } from './pipes.js';\nimport { isAnyRGB } from './rgb.js';\n\nexport type InitDataGenSchema = ReturnType<typeof initData>;\nexport type InitDataGenType = InferOutput<InitDataGenSchema>;\n\nexport type LaunchParamsGenSchema = ReturnType<typeof launchParams>;\nexport type LaunchParamsGenType = InferOutput<LaunchParamsGenSchema>;\n\nexport type MiniAppsMessageGenSchema = ReturnType<typeof miniAppsMessage>;\nexport type MiniAppsMessageGenType = InferOutput<MiniAppsMessageGenSchema>;\n\nexport function initDataChat() {\n return looseObject({\n id: number(),\n photo_url: optional(string()),\n type: string(),\n title: string(),\n username: optional(string()),\n } satisfies { [K in keyof Chat]-?: BaseSchema<unknown, Chat[K], any> });\n}\n\nexport function initDataUser() {\n return looseObject({\n added_to_attachment_menu: optional(boolean()),\n allows_write_to_pm: optional(boolean()),\n first_name: string(),\n id: number(),\n is_bot: optional(boolean()),\n is_premium: optional(boolean()),\n last_name: optional(string()),\n language_code: optional(string()),\n photo_url: optional(string()),\n username: optional(string()),\n } satisfies { [K in keyof User]-?: BaseSchema<unknown, User[K], any> });\n}\n\nexport function initData() {\n return looseObject({\n auth_date: pipe(\n string(),\n transform(input => new Date(Number(input) * 1000)),\n date(),\n ),\n can_send_after: optional(pipe(string(), transform(Number), integer())),\n chat: optional(pipeJsonToSchema(initDataChat())),\n chat_type: optional(string()),\n chat_instance: optional(string()),\n hash: string(),\n query_id: optional(string()),\n receiver: optional(pipeJsonToSchema(initDataUser())),\n start_param: optional(string()),\n signature: string(),\n user: optional(pipeJsonToSchema(initDataUser())),\n } satisfies { [K in keyof InitData]-?: unknown });\n}\n\nexport function initDataQuery() {\n return pipeQueryToSchema(initData());\n}\n\nexport function themeParams() {\n return record(\n string(),\n pipe(\n union([string(), number()]),\n transform(value => {\n return typeof value === 'number'\n ? `#${(value & 0x00FFFFFF).toString(16).padStart(6, '0')}`\n : value;\n }),\n check(isAnyRGB),\n ),\n ) as RecordSchema<\n SchemaWithPipe<[\n StringSchema<undefined>,\n TransformAction<string, KnownThemeParamsKey>,\n ]>,\n SchemaWithPipe<[\n UnionSchema<[StringSchema<undefined>, NumberSchema<undefined>], any>,\n TransformAction<string | number, string>,\n CheckAction<RGB, undefined>,\n ]>,\n undefined\n >;\n}\n\nexport function launchParams() {\n const optBool = optional(pipe(string(), transform(v => v === '1')));\n\n return looseObject({\n tgWebAppBotInline: optBool,\n tgWebAppData: optional(initDataQuery()),\n tgWebAppDefaultColors: optional(pipeJsonToSchema(themeParams())),\n tgWebAppFullscreen: optBool,\n tgWebAppPlatform: string(),\n tgWebAppShowSettings: optBool,\n tgWebAppStartParam: optional(string()),\n tgWebAppThemeParams: pipeJsonToSchema(themeParams()),\n tgWebAppVersion: string(),\n } satisfies { [K in keyof LaunchParams]-?: BaseSchema<any, LaunchParams[K], any> });\n}\n\nexport function launchParamsQuery() {\n return pipeQueryToSchema(launchParams());\n}\n\n/**\n * @returns True if the passed value contains valid launch parameters query.\n */\nexport function isLaunchParamsQuery(value: string | URLSearchParams): boolean {\n try {\n return is(launchParamsQuery(), value);\n } catch {\n return false;\n }\n}\n\nexport function miniAppsMessage() {\n return looseObject({\n eventType: string(),\n eventData: optional(unknown()),\n });\n}\n","import { throwifyFpFn } from '@tma.js/toolkit';\nimport * as E from 'fp-ts/Either';\nimport { parse, type ValiError } from 'valibot';\n\nimport {\n type InitDataGenSchema,\n type InitDataGenType,\n initDataQuery,\n type LaunchParamsGenSchema,\n type LaunchParamsGenType,\n launchParamsQuery,\n} from './structures.js';\n\nexport type ParseInitDataQueryError = ValiError<InitDataGenSchema>;\nexport type ParseLaunchParamsQueryError = ValiError<LaunchParamsGenSchema>;\n\nexport function parseInitDataQueryFp(value: string | URLSearchParams): E.Either<\n ParseInitDataQueryError,\n InitDataGenType\n> {\n return E.tryCatch(\n () => parse(initDataQuery(), value),\n e => e as ValiError<InitDataGenSchema>,\n );\n}\n\nexport function parseLaunchParamsQueryFp(value: string | URLSearchParams): E.Either<\n ParseLaunchParamsQueryError,\n LaunchParamsGenType\n> {\n return E.tryCatch(\n () => parse(launchParamsQuery(), value),\n e => e as ValiError<LaunchParamsGenSchema>,\n );\n}\n\nexport const parseInitDataQuery = throwifyFpFn(parseInitDataQueryFp);\nexport const parseLaunchParamsQuery = throwifyFpFn(parseLaunchParamsQueryFp);\n","import type { InitData, LaunchParams } from '@tma.js/types';\nimport type { InferOutput } from 'valibot';\n\nimport type { initData, launchParams } from './structures.js';\n\nexport type InitDataLike = Partial<InferOutput<ReturnType<typeof initData>> | InitData>;\nexport type LaunchParamsLike = Partial<InferOutput<ReturnType<typeof launchParams>> | LaunchParams>;\n\n/**\n * Converts the passed object to query parameters.\n * @param value - value to serialize.\n * @param onObject - function returning serialized object value.\n */\nfunction serializeToQuery(\n value: object,\n onObject?: (key: string, value: object) => string,\n): string {\n onObject ||= (_, value) => JSON.stringify(value);\n\n return new URLSearchParams(\n Object\n .entries(value)\n .reduce<[string, string][]>((acc, [key, value]) => {\n if (Array.isArray(value)) {\n acc.push(...value.map(v => [key, String(v)] as [string, string]));\n } else {\n if (value !== null && value !== undefined) {\n acc.push([\n key,\n value instanceof Date\n ? (value.getTime() / 1000 | 0).toString()\n : typeof value === 'string' || typeof value === 'number'\n ? String(value)\n : typeof value === 'boolean'\n ? value ? '1' : '0'\n : onObject(key, value),\n ]);\n }\n }\n return acc;\n }, []),\n ).toString();\n}\n\n/**\n * Serializes the InitDataQuery shape.\n * @param value - value to serialize.\n */\nexport function serializeInitDataQuery(value: InitDataLike): string {\n return serializeToQuery(value);\n}\n\n/**\n * Serializes the LaunchParamsQuery shape.\n * @param value - value to serialize.\n */\nexport function serializeLaunchParamsQuery(value: LaunchParamsLike): string {\n return serializeToQuery(value, (k, v) => {\n return k === 'tgWebAppData' ? serializeInitDataQuery(v as any) : JSON.stringify(v);\n });\n}\n"],"names":["pipe","a","ab","bc","cd","de","ef","fg","gh","hi","ret","i","isLeft","ma","left","e","right","_.left","_.right","map","f","fa","_.isLeft","tryCatch","onThrow","transformQueryToSchema","schema","transformer","input","result","value","key","accValue","parse","union","string","instance","check","transform","transformJsonToSchema","pipeJsonToSchema","pipeQueryToSchema","guardBasedOn","re","isRGBShort","isRGBAShort","isRGB","isRGBA","isAnyRGB","fn","expandRgb","color","toRGBFullFp","clean","E.right","match","acc","component","E.left","toRGBFp","E.map","rgb","toRGB","throwifyFpFn","toRGBFull","initDataChat","looseObject","number","optional","initDataUser","boolean","initData","date","integer","initDataQuery","themeParams","record","launchParams","optBool","v","launchParamsQuery","isLaunchParamsQuery","is","miniAppsMessage","unknown","parseInitDataQueryFp","E.tryCatch","parseLaunchParamsQueryFp","parseInitDataQuery","parseLaunchParamsQuery","serializeToQuery","onObject","_","serializeInitDataQuery","serializeLaunchParamsQuery","k"],"mappings":"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","x_google_ignoreList":[0,1,2]}