@tempots/std 0.25.0 → 0.25.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/async-result.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s={notAsked:{type:"NotAsked"},loading(e=void 0){return{type:"Loading",previousValue:e}},success(e){return{type:"AsyncSuccess",value:e}},failure(e){return{type:"AsyncFailure",error:e}},isSuccess(e){return e.type==="AsyncSuccess"},isFailure(e){return e.type==="AsyncFailure"},isNotAsked(e){return e.type==="NotAsked"},isLoading(e){return e.type==="Loading"},getOrElse(e,r){return s.isSuccess(e)?e.value:r},getOrElseLazy(e,r){return s.isSuccess(e)?e.value:r()},getOrNull(e){return s.isSuccess(e)?e.value:null},getOrUndefined(e){return s.isSuccess(e)?e.value:void 0},getUnsafe:e=>{if(s.isSuccess(e))return e.value;throw s.isFailure(e)?e.error:new Error("Cannot get value from a not-asked or loading result")},match:(e,{success:r,failure:u,loading:a,notAsked:i=a})=>s.isSuccess(e)?r(e.value):s.isFailure(e)?u(e.error):s.isNotAsked(e)?i():a(e.previousValue),whenSuccess:(e,r)=>(s.isSuccess(e)&&r(e.value),e),whenFailure:(e,r)=>(s.isFailure(e)&&r(e.error),e),equals:(e,r,u={valueEquals:(a,i)=>a===i,errorEquals:(a,i)=>a===i})=>e.type==="AsyncSuccess"&&r.type==="AsyncSuccess"?u.valueEquals(e.value,r.value):e.type==="AsyncFailure"&&r.type==="AsyncFailure"?u.errorEquals(e.error,r.error):e.type==="Loading"&&r.type==="Loading"?u.valueEquals(e.previousValue,r.previousValue):e.type==="NotAsked"&&r.type==="NotAsked",all:e=>{const r=[];for(const u of e)if(s.isSuccess(u))r.push(u.value);else return u;return s.success(r)},ofPromise:async e=>{try{const r=await e;return s.success(r)}catch(r){return s.failure(r instanceof Error?r:new Error(String(r)))}},map:(e,r)=>{switch(e.type){case"AsyncSuccess":return s.success(r(e.value));case"NotAsked":return s.notAsked;case"AsyncFailure":return s.failure(e.error);case"Loading":return s.loading(e.previousValue!=null?r(e.previousValue):void 0)}},flatMap:(e,r)=>{switch(e.type){case"AsyncSuccess":return r(e.value);case"NotAsked":return s.notAsked;case"AsyncFailure":return s.failure(e.error);case"Loading":return s.loading()}},mapError:(e,r)=>{switch(e.type){case"AsyncSuccess":return s.success(e.value);case"NotAsked":return s.notAsked;case"AsyncFailure":return s.failure(r(e.error));case"Loading":return s.loading(e.previousValue)}},flatMapError:(e,r)=>{switch(e.type){case"AsyncSuccess":return s.success(e.value);case"NotAsked":return s.notAsked;case"AsyncFailure":return r(e.error);case"Loading":return s.loading(e.previousValue)}},toResult:e=>{switch(e.type){case"AsyncSuccess":return{type:"Success",value:e.value};case"AsyncFailure":return{type:"Failure",error:e.error};case"NotAsked":case"Loading":return}},isSettled(e){return e.type==="AsyncSuccess"||e.type==="AsyncFailure"},recover:(e,r)=>{switch(e.type){case"AsyncSuccess":return s.success(e.value);case"NotAsked":return s.notAsked;case"AsyncFailure":return s.success(r(e.error));case"Loading":return s.loading(e.previousValue)}},ap:(e,r)=>s.isSuccess(e)&&s.isSuccess(r)?s.success(e.value(r.value)):s.isFailure(e)?s.failure(e.error):s.isFailure(r)?s.failure(r.error):s.isLoading(e)||s.isLoading(r)?s.loading():s.notAsked,map2:(e,r,u)=>s.isSuccess(e)&&s.isSuccess(r)?s.success(u(e.value,r.value)):s.isFailure(e)?s.failure(e.error):s.isFailure(r)?s.failure(r.error):s.isLoading(e)||s.isLoading(r)?s.loading():s.notAsked,map3:(e,r,u,a)=>s.isSuccess(e)&&s.isSuccess(r)&&s.isSuccess(u)?s.success(a(e.value,r.value,u.value)):s.isFailure(e)?s.failure(e.error):s.isFailure(r)?s.failure(r.error):s.isFailure(u)?s.failure(u.error):s.isLoading(e)||s.isLoading(r)||s.isLoading(u)?s.loading():s.notAsked};exports.AsyncResult=s;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s={notAsked:{type:"NotAsked"},loading(e=void 0){return{type:"Loading",previousValue:e}},success(e){return{type:"AsyncSuccess",value:e}},failure(e){return{type:"AsyncFailure",error:e}},isSuccess(e){return e.type==="AsyncSuccess"},isFailure(e){return e.type==="AsyncFailure"},isNotAsked(e){return e.type==="NotAsked"},isLoading(e){return e.type==="Loading"},getOrElse(e,r){return s.isSuccess(e)?e.value:r},getOrElseLazy(e,r){return s.isSuccess(e)?e.value:r()},getOrNull(e){return s.isSuccess(e)?e.value:null},getOrUndefined(e){return s.isSuccess(e)?e.value:void 0},getUnsafe:e=>{if(s.isSuccess(e))return e.value;throw s.isFailure(e)?e.error:new Error("Cannot get value from a not-asked or loading result")},match:(e,{success:r,failure:u,loading:i,notAsked:c=i})=>s.isSuccess(e)?r(e.value):s.isFailure(e)?u(e.error):s.isNotAsked(e)?c():i(e.previousValue),effect:(e,r)=>{switch(e.type){case"AsyncSuccess":r.success?r.success(e.value):r.else?.();break;case"AsyncFailure":r.failure?r.failure(e.error):r.else?.();break;case"Loading":r.loading?r.loading(e.previousValue):r.else?.();break;case"NotAsked":r.notAsked?r.notAsked():r.else?.();break}return e},whenSuccess:(e,r)=>(s.isSuccess(e)&&r(e.value),e),whenFailure:(e,r)=>(s.isFailure(e)&&r(e.error),e),equals:(e,r,u={valueEquals:(i,c)=>i===c,errorEquals:(i,c)=>i===c})=>e.type==="AsyncSuccess"&&r.type==="AsyncSuccess"?u.valueEquals(e.value,r.value):e.type==="AsyncFailure"&&r.type==="AsyncFailure"?u.errorEquals(e.error,r.error):e.type==="Loading"&&r.type==="Loading"?u.valueEquals(e.previousValue,r.previousValue):e.type==="NotAsked"&&r.type==="NotAsked",all:e=>{const r=[];for(const u of e)if(s.isSuccess(u))r.push(u.value);else return u;return s.success(r)},ofPromise:async e=>{try{const r=await e;return s.success(r)}catch(r){return s.failure(r instanceof Error?r:new Error(String(r)))}},map:(e,r)=>{switch(e.type){case"AsyncSuccess":return s.success(r(e.value));case"NotAsked":return s.notAsked;case"AsyncFailure":return s.failure(e.error);case"Loading":return s.loading(e.previousValue!=null?r(e.previousValue):void 0)}},flatMap:(e,r)=>{switch(e.type){case"AsyncSuccess":return r(e.value);case"NotAsked":return s.notAsked;case"AsyncFailure":return s.failure(e.error);case"Loading":return s.loading()}},mapError:(e,r)=>{switch(e.type){case"AsyncSuccess":return s.success(e.value);case"NotAsked":return s.notAsked;case"AsyncFailure":return s.failure(r(e.error));case"Loading":return s.loading(e.previousValue)}},flatMapError:(e,r)=>{switch(e.type){case"AsyncSuccess":return s.success(e.value);case"NotAsked":return s.notAsked;case"AsyncFailure":return r(e.error);case"Loading":return s.loading(e.previousValue)}},toResult:e=>{switch(e.type){case"AsyncSuccess":return{type:"Success",value:e.value};case"AsyncFailure":return{type:"Failure",error:e.error};case"NotAsked":case"Loading":return}},isSettled(e){return e.type==="AsyncSuccess"||e.type==="AsyncFailure"},recover:(e,r)=>{switch(e.type){case"AsyncSuccess":return s.success(e.value);case"NotAsked":return s.notAsked;case"AsyncFailure":return s.success(r(e.error));case"Loading":return s.loading(e.previousValue)}},ap:(e,r)=>s.isSuccess(e)&&s.isSuccess(r)?s.success(e.value(r.value)):s.isFailure(e)?s.failure(e.error):s.isFailure(r)?s.failure(r.error):s.isLoading(e)||s.isLoading(r)?s.loading():s.notAsked,map2:(e,r,u)=>s.isSuccess(e)&&s.isSuccess(r)?s.success(u(e.value,r.value)):s.isFailure(e)?s.failure(e.error):s.isFailure(r)?s.failure(r.error):s.isLoading(e)||s.isLoading(r)?s.loading():s.notAsked,map3:(e,r,u,i)=>s.isSuccess(e)&&s.isSuccess(r)&&s.isSuccess(u)?s.success(i(e.value,r.value,u.value)):s.isFailure(e)?s.failure(e.error):s.isFailure(r)?s.failure(r.error):s.isFailure(u)?s.failure(u.error):s.isLoading(e)||s.isLoading(r)||s.isLoading(u)?s.loading():s.notAsked};exports.AsyncResult=s;
package/async-result.d.ts CHANGED
@@ -169,6 +169,22 @@ export declare const AsyncResult: {
169
169
  loading: (previousValue?: V1) => V2;
170
170
  notAsked: () => V2;
171
171
  }) => V2;
172
+ /**
173
+ * Executes side effects based on the state of the result.
174
+ * Unlike `match`, all handlers are optional, allowing you to react only to specific states.
175
+ * The `else` handler is called when no specific handler is provided for the current state.
176
+ * @param r - The result.
177
+ * @param handlers - An object with optional handlers for each state and an optional `else` fallback.
178
+ * @returns The result that was passed in, allowing for chaining.
179
+ * @public
180
+ */
181
+ effect: <V, E>(r: AsyncResult<V, E>, handlers: {
182
+ success?: (value: V) => void;
183
+ failure?: (error: E) => void;
184
+ loading?: (previousValue?: V) => void;
185
+ notAsked?: () => void;
186
+ else?: () => void;
187
+ }) => AsyncResult<V, E>;
172
188
  /**
173
189
  * When the result is a success, it applies the function to the value.
174
190
  *
package/async-result.js CHANGED
@@ -130,9 +130,35 @@ const s = {
130
130
  match: (e, {
131
131
  success: r,
132
132
  failure: u,
133
- loading: a,
134
- notAsked: i = a
135
- }) => s.isSuccess(e) ? r(e.value) : s.isFailure(e) ? u(e.error) : s.isNotAsked(e) ? i() : a(e.previousValue),
133
+ loading: i,
134
+ notAsked: c = i
135
+ }) => s.isSuccess(e) ? r(e.value) : s.isFailure(e) ? u(e.error) : s.isNotAsked(e) ? c() : i(e.previousValue),
136
+ /**
137
+ * Executes side effects based on the state of the result.
138
+ * Unlike `match`, all handlers are optional, allowing you to react only to specific states.
139
+ * The `else` handler is called when no specific handler is provided for the current state.
140
+ * @param r - The result.
141
+ * @param handlers - An object with optional handlers for each state and an optional `else` fallback.
142
+ * @returns The result that was passed in, allowing for chaining.
143
+ * @public
144
+ */
145
+ effect: (e, r) => {
146
+ switch (e.type) {
147
+ case "AsyncSuccess":
148
+ r.success ? r.success(e.value) : r.else?.();
149
+ break;
150
+ case "AsyncFailure":
151
+ r.failure ? r.failure(e.error) : r.else?.();
152
+ break;
153
+ case "Loading":
154
+ r.loading ? r.loading(e.previousValue) : r.else?.();
155
+ break;
156
+ case "NotAsked":
157
+ r.notAsked ? r.notAsked() : r.else?.();
158
+ break;
159
+ }
160
+ return e;
161
+ },
136
162
  /**
137
163
  * When the result is a success, it applies the function to the value.
138
164
  *
@@ -159,8 +185,8 @@ const s = {
159
185
  * @returns `true` if the results are equal, `false` otherwise.
160
186
  */
161
187
  equals: (e, r, u = {
162
- valueEquals: (a, i) => a === i,
163
- errorEquals: (a, i) => a === i
188
+ valueEquals: (i, c) => i === c,
189
+ errorEquals: (i, c) => i === c
164
190
  }) => e.type === "AsyncSuccess" && r.type === "AsyncSuccess" ? u.valueEquals(e.value, r.value) : e.type === "AsyncFailure" && r.type === "AsyncFailure" ? u.errorEquals(e.error, r.error) : e.type === "Loading" && r.type === "Loading" ? u.valueEquals(e.previousValue, r.previousValue) : e.type === "NotAsked" && r.type === "NotAsked",
165
191
  /**
166
192
  * Combines multiple results into a single result.
@@ -345,7 +371,7 @@ const s = {
345
371
  * @returns A new `AsyncResult` with the result of applying the function to all three values.
346
372
  * @public
347
373
  */
348
- map3: (e, r, u, a) => s.isSuccess(e) && s.isSuccess(r) && s.isSuccess(u) ? s.success(a(e.value, r.value, u.value)) : s.isFailure(e) ? s.failure(e.error) : s.isFailure(r) ? s.failure(r.error) : s.isFailure(u) ? s.failure(u.error) : s.isLoading(e) || s.isLoading(r) || s.isLoading(u) ? s.loading() : s.notAsked
374
+ map3: (e, r, u, i) => s.isSuccess(e) && s.isSuccess(r) && s.isSuccess(u) ? s.success(i(e.value, r.value, u.value)) : s.isFailure(e) ? s.failure(e.error) : s.isFailure(r) ? s.failure(r.error) : s.isFailure(u) ? s.failure(u.error) : s.isLoading(e) || s.isLoading(r) || s.isLoading(u) ? s.loading() : s.notAsked
349
375
  };
350
376
  export {
351
377
  s as AsyncResult
package/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./array.cjs"),b=require("./async-result.cjs"),a=require("./bigint.cjs"),u=require("./boolean.cjs"),t=require("./date.cjs"),A=require("./deferred.cjs"),g=require("./equal.cjs"),p=require("./function.cjs"),l=require("./iterator.cjs"),y=require("./json.cjs"),m=require("./map.cjs"),i=require("./number.cjs"),s=require("./object.cjs"),S=require("./promise.cjs"),c=require("./random.cjs"),C=require("./regexp.cjs"),f=require("./result-cY1uEC-G.cjs"),n=require("./set.cjs"),e=require("./string.cjs"),d=require("./timer.cjs"),o=require("./url.cjs");exports.applyArrayDiffOperations=r.applyArrayDiffOperations;exports.areArraysEqual=r.areArraysEqual;exports.arrayDiffOperations=r.arrayDiffOperations;exports.arrayHasValues=r.arrayHasValues;exports.arrayHead=r.arrayHead;exports.arrayTail=r.arrayTail;exports.buildArray=r.buildArray;exports.chunk=r.chunk;exports.compareArrays=r.compareArrays;exports.fillArray=r.fillArray;exports.filterMapArray=r.filterMapArray;exports.filterNullsFromArray=r.filterNullsFromArray;exports.groupBy=r.groupBy;exports.isArrayEmpty=r.isArrayEmpty;exports.joinArrayWithConjunction=r.joinArrayWithConjunction;exports.partition=r.partition;exports.range=r.range;exports.rankArray=r.rankArray;exports.removeAllFromArray=r.removeAllFromArray;exports.removeAllFromArrayByPredicate=r.removeAllFromArrayByPredicate;exports.removeOneFromArray=r.removeOneFromArray;exports.removeOneFromArrayByPredicate=r.removeOneFromArrayByPredicate;exports.uniqueByPrimitive=r.uniqueByPrimitive;exports.AsyncResult=b.AsyncResult;exports.biAbs=a.biAbs;exports.biCeilDiv=a.biCeilDiv;exports.biCompare=a.biCompare;exports.biFloorDiv=a.biFloorDiv;exports.biGcd=a.biGcd;exports.biIsEven=a.biIsEven;exports.biIsNegative=a.biIsNegative;exports.biIsOdd=a.biIsOdd;exports.biIsOne=a.biIsOne;exports.biIsPositive=a.biIsPositive;exports.biIsPrime=a.biIsPrime;exports.biIsZero=a.biIsZero;exports.biLcm=a.biLcm;exports.biMax=a.biMax;exports.biMin=a.biMin;exports.biNextPrime=a.biNextPrime;exports.biPow=a.biPow;exports.biPrevPrime=a.biPrevPrime;exports.booleanToInt=u.booleanToInt;exports.canParseBoolean=u.canParseBoolean;exports.compareBooleans=u.compareBooleans;exports.parseBoolean=u.parseBoolean;exports.xorBoolean=u.xorBoolean;exports.addDays=t.addDays;exports.addHours=t.addHours;exports.addMinutes=t.addMinutes;exports.compareDates=t.compareDates;exports.diffInDays=t.diffInDays;exports.diffInHours=t.diffInHours;exports.endOfDay=t.endOfDay;exports.endOfWeek=t.endOfWeek;exports.isSameDay=t.isSameDay;exports.isSameHour=t.isSameHour;exports.isSameMinute=t.isSameMinute;exports.isSameMonth=t.isSameMonth;exports.isSameSecond=t.isSameSecond;exports.isSameWeek=t.isSameWeek;exports.isSameYear=t.isSameYear;exports.isValidDate=t.isValidDate;exports.isWeekend=t.isWeekend;exports.startOfDay=t.startOfDay;exports.startOfWeek=t.startOfWeek;exports.deferred=A.deferred;exports.deepEqual=g.deepEqual;exports.looseEqual=g.looseEqual;exports.strictEqual=g.strictEqual;exports.compose=p.compose;exports.curryLeft=p.curryLeft;exports.flip=p.flip;exports.identity=p.identity;exports.memoize=p.memoize;exports.negate=p.negate;exports.once=p.once;exports.partial=p.partial;exports.pipe=p.pipe;exports.chain=l.chain;exports.every=l.every;exports.filter=l.filter;exports.find=l.find;exports.map=l.map;exports.reduce=l.reduce;exports.skip=l.skip;exports.some=l.some;exports.take=l.take;exports.toArray=l.toArray;exports.isJSON=y.isJSON;exports.isJSONArray=y.isJSONArray;exports.isJSONObject=y.isJSONObject;exports.isJSONPrimitive=y.isJSONPrimitive;exports.parseJSON=y.parseJSON;exports.mapEntries=m.mapEntries;exports.mapFilter=m.mapFilter;exports.mapFromEntries=m.mapFromEntries;exports.mapGroupBy=m.mapGroupBy;exports.mapIsEmpty=m.mapIsEmpty;exports.mapKeys=m.mapKeys;exports.mapMap=m.mapMap;exports.mapMerge=m.mapMerge;exports.mapToObject=m.mapToObject;exports.mapValues=m.mapValues;exports.EPSILON=i.EPSILON;exports.angleDifference=i.angleDifference;exports.ceilTo=i.ceilTo;exports.clamp=i.clamp;exports.clampInt=i.clampInt;exports.clampSym=i.clampSym;exports.compareNumbers=i.compareNumbers;exports.floorTo=i.floorTo;exports.interpolate=i.interpolate;exports.interpolateAngle=i.interpolateAngle;exports.interpolateAngleCCW=i.interpolateAngleCCW;exports.interpolateAngleCW=i.interpolateAngleCW;exports.interpolateWidestAngle=i.interpolateWidestAngle;exports.nearEqual=i.nearEqual;exports.nearEqualAngles=i.nearEqualAngles;exports.nearZero=i.nearZero;exports.root=i.root;exports.roundTo=i.roundTo;exports.toHex=i.toHex;exports.widestAngleDifference=i.widestAngleDifference;exports.wrap=i.wrap;exports.wrapCircular=i.wrapCircular;exports.deepClone=s.deepClone;exports.isEmptyObject=s.isEmptyObject;exports.isObject=s.isObject;exports.mergeObjects=s.mergeObjects;exports.objectEntries=s.objectEntries;exports.objectFromEntries=s.objectFromEntries;exports.objectKeys=s.objectKeys;exports.objectValues=s.objectValues;exports.omit=s.omit;exports.pick=s.pick;exports.removeObjectFields=s.removeObjectFields;exports.sameObjectKeys=s.sameObjectKeys;exports.sleep=S.sleep;exports.randomBytes=c.randomBytes;exports.randomChoice=c.randomChoice;exports.randomChoices=c.randomChoices;exports.randomFloat=c.randomFloat;exports.randomHex=c.randomHex;exports.randomInt=c.randomInt;exports.randomUuid=c.randomUuid;exports.seedRandom=c.seedRandom;exports.shuffle=c.shuffle;exports.shuffled=c.shuffled;exports.mapRegExp=C.mapRegExp;exports.Result=f.Result;exports.Validation=f.Validation;exports.setDifference=n.setDifference;exports.setFilter=n.setFilter;exports.setFromArray=n.setFromArray;exports.setIntersection=n.setIntersection;exports.setIsEmpty=n.setIsEmpty;exports.setIsSubset=n.setIsSubset;exports.setIsSuperset=n.setIsSuperset;exports.setMap=n.setMap;exports.setSymmetricDifference=n.setSymmetricDifference;exports.setToArray=n.setToArray;exports.setUnion=n.setUnion;exports.canonicalizeNewlines=e.canonicalizeNewlines;exports.capitalize=e.capitalize;exports.capitalizeWords=e.capitalizeWords;exports.chunkString=e.chunkString;exports.collapseText=e.collapseText;exports.compareCaseInsensitive=e.compareCaseInsensitive;exports.compareStrings=e.compareStrings;exports.containsAllText=e.containsAllText;exports.containsAllTextCaseInsensitive=e.containsAllTextCaseInsensitive;exports.containsAnyText=e.containsAnyText;exports.containsAnyTextCaseInsensitive=e.containsAnyTextCaseInsensitive;exports.countStringOccurrences=e.countStringOccurrences;exports.dasherize=e.dasherize;exports.decodeBase64=e.decodeBase64;exports.deleteFirstFromString=e.deleteFirstFromString;exports.deleteStringAfter=e.deleteStringAfter;exports.deleteStringBefore=e.deleteStringBefore;exports.deleteSubstring=e.deleteSubstring;exports.ellipsis=e.ellipsis;exports.ellipsisMiddle=e.ellipsisMiddle;exports.encodeBase64=e.encodeBase64;exports.filterCharcodes=e.filterCharcodes;exports.filterChars=e.filterChars;exports.humanize=e.humanize;exports.ifEmptyString=e.ifEmptyString;exports.isAlpha=e.isAlpha;exports.isAlphaNum=e.isAlphaNum;exports.isBreakingWhitespace=e.isBreakingWhitespace;exports.isDigitsOnly=e.isDigitsOnly;exports.isEmptyString=e.isEmptyString;exports.isLowerCase=e.isLowerCase;exports.isSpaceAt=e.isSpaceAt;exports.isUpperCase=e.isUpperCase;exports.jsQuote=e.jsQuote;exports.lowerCaseFirst=e.lowerCaseFirst;exports.lpad=e.lpad;exports.mapChars=e.mapChars;exports.quote=e.quote;exports.randomStringSequence=e.randomStringSequence;exports.randomStringSequenceBase64=e.randomStringSequenceBase64;exports.randomSubString=e.randomSubString;exports.reverseString=e.reverseString;exports.rpad=e.rpad;exports.smartQuote=e.smartQuote;exports.splitStringOnFirst=e.splitStringOnFirst;exports.splitStringOnLast=e.splitStringOnLast;exports.splitStringOnce=e.splitStringOnce;exports.stringEndsWithAny=e.stringEndsWithAny;exports.stringHasContent=e.stringHasContent;exports.stringHashCode=e.stringHashCode;exports.stringStartsWithAny=e.stringStartsWithAny;exports.stringToCharcodes=e.stringToCharcodes;exports.stringsDifferAtIndex=e.stringsDifferAtIndex;exports.substringAfter=e.substringAfter;exports.substringAfterLast=e.substringAfterLast;exports.substringBefore=e.substringBefore;exports.substringBeforeLast=e.substringBeforeLast;exports.surroundString=e.surroundString;exports.textContainsCaseInsensitive=e.textContainsCaseInsensitive;exports.textEndsWithAnyCaseInsensitive=e.textEndsWithAnyCaseInsensitive;exports.textEndsWithCaseInsensitive=e.textEndsWithCaseInsensitive;exports.textStartsWithAnyCaseInsensitive=e.textStartsWithAnyCaseInsensitive;exports.textStartsWithCaseInsensitive=e.textStartsWithCaseInsensitive;exports.textToLines=e.textToLines;exports.trimChars=e.trimChars;exports.trimCharsLeft=e.trimCharsLeft;exports.trimCharsRight=e.trimCharsRight;exports.trimStringSlice=e.trimStringSlice;exports.underscore=e.underscore;exports.upperCaseFirst=e.upperCaseFirst;exports.wrapColumns=e.wrapColumns;exports.wrapLine=e.wrapLine;exports.debounce=d.debounce;exports.delayed=d.delayed;exports.delayedAnimationFrame=d.delayedAnimationFrame;exports.interval=d.interval;exports.intervalAnimationFrame=d.intervalAnimationFrame;exports.throttle=d.throttle;exports.buildUrl=o.buildUrl;exports.getBaseName=o.getBaseName;exports.getFileExtension=o.getFileExtension;exports.getFileName=o.getFileName;exports.getQueryParams=o.getQueryParams;exports.isValidUrl=o.isValidUrl;exports.joinPaths=o.joinPaths;exports.normalizePath=o.normalizePath;exports.parseUrl=o.parseUrl;exports.removeQueryParam=o.removeQueryParam;exports.setQueryParam=o.setQueryParam;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./array.cjs"),b=require("./async-result.cjs"),a=require("./bigint.cjs"),u=require("./boolean.cjs"),t=require("./date.cjs"),A=require("./deferred.cjs"),g=require("./equal.cjs"),p=require("./function.cjs"),l=require("./iterator.cjs"),y=require("./json.cjs"),m=require("./map.cjs"),i=require("./number.cjs"),s=require("./object.cjs"),S=require("./promise.cjs"),c=require("./random.cjs"),C=require("./regexp.cjs"),f=require("./result-DBJ3htTg.cjs"),n=require("./set.cjs"),e=require("./string.cjs"),d=require("./timer.cjs"),o=require("./url.cjs");exports.applyArrayDiffOperations=r.applyArrayDiffOperations;exports.areArraysEqual=r.areArraysEqual;exports.arrayDiffOperations=r.arrayDiffOperations;exports.arrayHasValues=r.arrayHasValues;exports.arrayHead=r.arrayHead;exports.arrayTail=r.arrayTail;exports.buildArray=r.buildArray;exports.chunk=r.chunk;exports.compareArrays=r.compareArrays;exports.fillArray=r.fillArray;exports.filterMapArray=r.filterMapArray;exports.filterNullsFromArray=r.filterNullsFromArray;exports.groupBy=r.groupBy;exports.isArrayEmpty=r.isArrayEmpty;exports.joinArrayWithConjunction=r.joinArrayWithConjunction;exports.partition=r.partition;exports.range=r.range;exports.rankArray=r.rankArray;exports.removeAllFromArray=r.removeAllFromArray;exports.removeAllFromArrayByPredicate=r.removeAllFromArrayByPredicate;exports.removeOneFromArray=r.removeOneFromArray;exports.removeOneFromArrayByPredicate=r.removeOneFromArrayByPredicate;exports.uniqueByPrimitive=r.uniqueByPrimitive;exports.AsyncResult=b.AsyncResult;exports.biAbs=a.biAbs;exports.biCeilDiv=a.biCeilDiv;exports.biCompare=a.biCompare;exports.biFloorDiv=a.biFloorDiv;exports.biGcd=a.biGcd;exports.biIsEven=a.biIsEven;exports.biIsNegative=a.biIsNegative;exports.biIsOdd=a.biIsOdd;exports.biIsOne=a.biIsOne;exports.biIsPositive=a.biIsPositive;exports.biIsPrime=a.biIsPrime;exports.biIsZero=a.biIsZero;exports.biLcm=a.biLcm;exports.biMax=a.biMax;exports.biMin=a.biMin;exports.biNextPrime=a.biNextPrime;exports.biPow=a.biPow;exports.biPrevPrime=a.biPrevPrime;exports.booleanToInt=u.booleanToInt;exports.canParseBoolean=u.canParseBoolean;exports.compareBooleans=u.compareBooleans;exports.parseBoolean=u.parseBoolean;exports.xorBoolean=u.xorBoolean;exports.addDays=t.addDays;exports.addHours=t.addHours;exports.addMinutes=t.addMinutes;exports.compareDates=t.compareDates;exports.diffInDays=t.diffInDays;exports.diffInHours=t.diffInHours;exports.endOfDay=t.endOfDay;exports.endOfWeek=t.endOfWeek;exports.isSameDay=t.isSameDay;exports.isSameHour=t.isSameHour;exports.isSameMinute=t.isSameMinute;exports.isSameMonth=t.isSameMonth;exports.isSameSecond=t.isSameSecond;exports.isSameWeek=t.isSameWeek;exports.isSameYear=t.isSameYear;exports.isValidDate=t.isValidDate;exports.isWeekend=t.isWeekend;exports.startOfDay=t.startOfDay;exports.startOfWeek=t.startOfWeek;exports.deferred=A.deferred;exports.deepEqual=g.deepEqual;exports.looseEqual=g.looseEqual;exports.strictEqual=g.strictEqual;exports.compose=p.compose;exports.curryLeft=p.curryLeft;exports.flip=p.flip;exports.identity=p.identity;exports.memoize=p.memoize;exports.negate=p.negate;exports.once=p.once;exports.partial=p.partial;exports.pipe=p.pipe;exports.chain=l.chain;exports.every=l.every;exports.filter=l.filter;exports.find=l.find;exports.map=l.map;exports.reduce=l.reduce;exports.skip=l.skip;exports.some=l.some;exports.take=l.take;exports.toArray=l.toArray;exports.isJSON=y.isJSON;exports.isJSONArray=y.isJSONArray;exports.isJSONObject=y.isJSONObject;exports.isJSONPrimitive=y.isJSONPrimitive;exports.parseJSON=y.parseJSON;exports.mapEntries=m.mapEntries;exports.mapFilter=m.mapFilter;exports.mapFromEntries=m.mapFromEntries;exports.mapGroupBy=m.mapGroupBy;exports.mapIsEmpty=m.mapIsEmpty;exports.mapKeys=m.mapKeys;exports.mapMap=m.mapMap;exports.mapMerge=m.mapMerge;exports.mapToObject=m.mapToObject;exports.mapValues=m.mapValues;exports.EPSILON=i.EPSILON;exports.angleDifference=i.angleDifference;exports.ceilTo=i.ceilTo;exports.clamp=i.clamp;exports.clampInt=i.clampInt;exports.clampSym=i.clampSym;exports.compareNumbers=i.compareNumbers;exports.floorTo=i.floorTo;exports.interpolate=i.interpolate;exports.interpolateAngle=i.interpolateAngle;exports.interpolateAngleCCW=i.interpolateAngleCCW;exports.interpolateAngleCW=i.interpolateAngleCW;exports.interpolateWidestAngle=i.interpolateWidestAngle;exports.nearEqual=i.nearEqual;exports.nearEqualAngles=i.nearEqualAngles;exports.nearZero=i.nearZero;exports.root=i.root;exports.roundTo=i.roundTo;exports.toHex=i.toHex;exports.widestAngleDifference=i.widestAngleDifference;exports.wrap=i.wrap;exports.wrapCircular=i.wrapCircular;exports.deepClone=s.deepClone;exports.isEmptyObject=s.isEmptyObject;exports.isObject=s.isObject;exports.mergeObjects=s.mergeObjects;exports.objectEntries=s.objectEntries;exports.objectFromEntries=s.objectFromEntries;exports.objectKeys=s.objectKeys;exports.objectValues=s.objectValues;exports.omit=s.omit;exports.pick=s.pick;exports.removeObjectFields=s.removeObjectFields;exports.sameObjectKeys=s.sameObjectKeys;exports.sleep=S.sleep;exports.randomBytes=c.randomBytes;exports.randomChoice=c.randomChoice;exports.randomChoices=c.randomChoices;exports.randomFloat=c.randomFloat;exports.randomHex=c.randomHex;exports.randomInt=c.randomInt;exports.randomUuid=c.randomUuid;exports.seedRandom=c.seedRandom;exports.shuffle=c.shuffle;exports.shuffled=c.shuffled;exports.mapRegExp=C.mapRegExp;exports.Result=f.Result;exports.Validation=f.Validation;exports.setDifference=n.setDifference;exports.setFilter=n.setFilter;exports.setFromArray=n.setFromArray;exports.setIntersection=n.setIntersection;exports.setIsEmpty=n.setIsEmpty;exports.setIsSubset=n.setIsSubset;exports.setIsSuperset=n.setIsSuperset;exports.setMap=n.setMap;exports.setSymmetricDifference=n.setSymmetricDifference;exports.setToArray=n.setToArray;exports.setUnion=n.setUnion;exports.canonicalizeNewlines=e.canonicalizeNewlines;exports.capitalize=e.capitalize;exports.capitalizeWords=e.capitalizeWords;exports.chunkString=e.chunkString;exports.collapseText=e.collapseText;exports.compareCaseInsensitive=e.compareCaseInsensitive;exports.compareStrings=e.compareStrings;exports.containsAllText=e.containsAllText;exports.containsAllTextCaseInsensitive=e.containsAllTextCaseInsensitive;exports.containsAnyText=e.containsAnyText;exports.containsAnyTextCaseInsensitive=e.containsAnyTextCaseInsensitive;exports.countStringOccurrences=e.countStringOccurrences;exports.dasherize=e.dasherize;exports.decodeBase64=e.decodeBase64;exports.deleteFirstFromString=e.deleteFirstFromString;exports.deleteStringAfter=e.deleteStringAfter;exports.deleteStringBefore=e.deleteStringBefore;exports.deleteSubstring=e.deleteSubstring;exports.ellipsis=e.ellipsis;exports.ellipsisMiddle=e.ellipsisMiddle;exports.encodeBase64=e.encodeBase64;exports.filterCharcodes=e.filterCharcodes;exports.filterChars=e.filterChars;exports.humanize=e.humanize;exports.ifEmptyString=e.ifEmptyString;exports.isAlpha=e.isAlpha;exports.isAlphaNum=e.isAlphaNum;exports.isBreakingWhitespace=e.isBreakingWhitespace;exports.isDigitsOnly=e.isDigitsOnly;exports.isEmptyString=e.isEmptyString;exports.isLowerCase=e.isLowerCase;exports.isSpaceAt=e.isSpaceAt;exports.isUpperCase=e.isUpperCase;exports.jsQuote=e.jsQuote;exports.lowerCaseFirst=e.lowerCaseFirst;exports.lpad=e.lpad;exports.mapChars=e.mapChars;exports.quote=e.quote;exports.randomStringSequence=e.randomStringSequence;exports.randomStringSequenceBase64=e.randomStringSequenceBase64;exports.randomSubString=e.randomSubString;exports.reverseString=e.reverseString;exports.rpad=e.rpad;exports.smartQuote=e.smartQuote;exports.splitStringOnFirst=e.splitStringOnFirst;exports.splitStringOnLast=e.splitStringOnLast;exports.splitStringOnce=e.splitStringOnce;exports.stringEndsWithAny=e.stringEndsWithAny;exports.stringHasContent=e.stringHasContent;exports.stringHashCode=e.stringHashCode;exports.stringStartsWithAny=e.stringStartsWithAny;exports.stringToCharcodes=e.stringToCharcodes;exports.stringsDifferAtIndex=e.stringsDifferAtIndex;exports.substringAfter=e.substringAfter;exports.substringAfterLast=e.substringAfterLast;exports.substringBefore=e.substringBefore;exports.substringBeforeLast=e.substringBeforeLast;exports.surroundString=e.surroundString;exports.textContainsCaseInsensitive=e.textContainsCaseInsensitive;exports.textEndsWithAnyCaseInsensitive=e.textEndsWithAnyCaseInsensitive;exports.textEndsWithCaseInsensitive=e.textEndsWithCaseInsensitive;exports.textStartsWithAnyCaseInsensitive=e.textStartsWithAnyCaseInsensitive;exports.textStartsWithCaseInsensitive=e.textStartsWithCaseInsensitive;exports.textToLines=e.textToLines;exports.trimChars=e.trimChars;exports.trimCharsLeft=e.trimCharsLeft;exports.trimCharsRight=e.trimCharsRight;exports.trimStringSlice=e.trimStringSlice;exports.underscore=e.underscore;exports.upperCaseFirst=e.upperCaseFirst;exports.wrapColumns=e.wrapColumns;exports.wrapLine=e.wrapLine;exports.debounce=d.debounce;exports.delayed=d.delayed;exports.delayedAnimationFrame=d.delayedAnimationFrame;exports.interval=d.interval;exports.intervalAnimationFrame=d.intervalAnimationFrame;exports.throttle=d.throttle;exports.buildUrl=o.buildUrl;exports.getBaseName=o.getBaseName;exports.getFileExtension=o.getFileExtension;exports.getFileName=o.getFileName;exports.getQueryParams=o.getQueryParams;exports.isValidUrl=o.isValidUrl;exports.joinPaths=o.joinPaths;exports.normalizePath=o.normalizePath;exports.parseUrl=o.parseUrl;exports.removeQueryParam=o.removeQueryParam;exports.setQueryParam=o.setQueryParam;
package/index.js CHANGED
@@ -14,7 +14,7 @@ import { deepClone as jr, isEmptyObject as Nr, isObject as Tr, mergeObjects as k
14
14
  import { sleep as Jr } from "./promise.js";
15
15
  import { randomBytes as Kr, randomChoice as Gr, randomChoices as Zr, randomFloat as Yr, randomHex as Xr, randomInt as _r, randomUuid as $r, seedRandom as et, shuffle as rt, shuffled as tt } from "./random.js";
16
16
  import { mapRegExp as at } from "./regexp.js";
17
- import { R as nt, V as ot } from "./result-BrVFeaNO.js";
17
+ import { R as nt, V as ot } from "./result-BYto972d.js";
18
18
  import { setDifference as lt, setFilter as pt, setFromArray as dt, setIntersection as ct, setIsEmpty as ft, setIsSubset as yt, setIsSuperset as ut, setMap as gt, setSymmetricDifference as At, setToArray as St, setUnion as bt } from "./set.js";
19
19
  import { canonicalizeNewlines as Ct, capitalize as ht, capitalizeWords as Ot, chunkString as It, collapseText as vt, compareCaseInsensitive as Et, compareStrings as Ft, containsAllText as Bt, containsAllTextCaseInsensitive as Dt, containsAnyText as Pt, containsAnyTextCaseInsensitive as Wt, countStringOccurrences as jt, dasherize as Nt, decodeBase64 as Tt, deleteFirstFromString as kt, deleteStringAfter as qt, deleteStringBefore as Lt, deleteSubstring as Mt, ellipsis as wt, ellipsisMiddle as Ht, encodeBase64 as zt, filterCharcodes as Vt, filterChars as Rt, humanize as Ut, ifEmptyString as Jt, isAlpha as Qt, isAlphaNum as Kt, isBreakingWhitespace as Gt, isDigitsOnly as Zt, isEmptyString as Yt, isLowerCase as Xt, isSpaceAt as _t, isUpperCase as $t, jsQuote as ei, lowerCaseFirst as ri, lpad as ti, mapChars as ii, quote as ai, randomStringSequence as si, randomStringSequenceBase64 as ni, randomSubString as oi, reverseString as mi, rpad as li, smartQuote as pi, splitStringOnFirst as di, splitStringOnLast as ci, splitStringOnce as fi, stringEndsWithAny as yi, stringHasContent as ui, stringHashCode as gi, stringStartsWithAny as Ai, stringToCharcodes as Si, stringsDifferAtIndex as bi, substringAfter as xi, substringAfterLast as Ci, substringBefore as hi, substringBeforeLast as Oi, surroundString as Ii, textContainsCaseInsensitive as vi, textEndsWithAnyCaseInsensitive as Ei, textEndsWithCaseInsensitive as Fi, textStartsWithAnyCaseInsensitive as Bi, textStartsWithCaseInsensitive as Di, textToLines as Pi, trimChars as Wi, trimCharsLeft as ji, trimCharsRight as Ni, trimStringSlice as Ti, underscore as ki, upperCaseFirst as qi, wrapColumns as Li, wrapLine as Mi } from "./string.js";
20
20
  import { debounce as Hi, delayed as zi, delayedAnimationFrame as Vi, interval as Ri, intervalAnimationFrame as Ui, throttle as Ji } from "./timer.js";
package/json.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./result-cY1uEC-G.cjs"),e=r=>typeof r=="object"&&!Array.isArray(r)&&r!=null&&Object.values(r).every(t),i=r=>Array.isArray(r)&&r.every(t),t=r=>o(r)||e(r)||i(r),o=r=>typeof r=="string"||typeof r=="boolean"||typeof r=="number"||r==null,n=r=>{try{return s.Result.success(JSON.parse(r))}catch(c){return s.Result.failure(c)}};exports.isJSON=t;exports.isJSONArray=i;exports.isJSONObject=e;exports.isJSONPrimitive=o;exports.parseJSON=n;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./result-DBJ3htTg.cjs"),e=r=>typeof r=="object"&&!Array.isArray(r)&&r!=null&&Object.values(r).every(t),i=r=>Array.isArray(r)&&r.every(t),t=r=>o(r)||e(r)||i(r),o=r=>typeof r=="string"||typeof r=="boolean"||typeof r=="number"||r==null,n=r=>{try{return s.Result.success(JSON.parse(r))}catch(c){return s.Result.failure(c)}};exports.isJSON=t;exports.isJSONArray=i;exports.isJSONObject=e;exports.isJSONPrimitive=o;exports.parseJSON=n;
package/json.js CHANGED
@@ -1,4 +1,4 @@
1
- import { R as t } from "./result-BrVFeaNO.js";
1
+ import { R as t } from "./result-BYto972d.js";
2
2
  const e = (r) => typeof r == "object" && !Array.isArray(r) && r != null && Object.values(r).every(s), c = (r) => Array.isArray(r) && r.every(s), s = (r) => i(r) || e(r) || c(r), i = (r) => typeof r == "string" || typeof r == "boolean" || typeof r == "number" || r == null, y = (r) => {
3
3
  try {
4
4
  return t.success(JSON.parse(r));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tempots/std",
3
- "version": "0.25.0",
3
+ "version": "0.25.2",
4
4
  "priority": 8,
5
5
  "description": "Std library for TypeScript. Natural complement to the Tempo libraries.",
6
6
  "keywords": [
@@ -49,6 +49,16 @@ const i = {
49
49
  () => s.success(r),
50
50
  (u) => s.failure(u)
51
51
  ),
52
+ /**
53
+ * Executes side effects based on the state of the validation.
54
+ * Unlike `match`, all handlers are optional, allowing you to react only to specific states.
55
+ * The `else` handler is called when no specific handler is provided for the current state.
56
+ * @param v - The validation.
57
+ * @param handlers - An object with optional handlers for each state and an optional `else` fallback.
58
+ * @returns The validation that was passed in, allowing for chaining.
59
+ * @public
60
+ */
61
+ effect: (e, r) => (e.type === "valid" ? r.valid ? r.valid() : r.else?.() : r.invalid ? r.invalid(e.error) : r.else?.(), e),
52
62
  /**
53
63
  * Execute a function when the `Validation` is valid.
54
64
  *
@@ -293,6 +303,16 @@ const i = {
293
303
  * @public
294
304
  */
295
305
  match: (e, r, u) => s.isSuccess(e) ? r(e.value) : u(e.error),
306
+ /**
307
+ * Executes side effects based on the state of the result.
308
+ * Unlike `match`, all handlers are optional, allowing you to react only to specific states.
309
+ * The `else` handler is called when no specific handler is provided for the current state.
310
+ * @param r - The result.
311
+ * @param handlers - An object with optional handlers for each state and an optional `else` fallback.
312
+ * @returns The result that was passed in, allowing for chaining.
313
+ * @public
314
+ */
315
+ effect: (e, r) => (e.type === "Success" ? r.success ? r.success(e.value) : r.else?.() : r.failure ? r.failure(e.error) : r.else?.(), e),
296
316
  /**
297
317
  * Calls the provided function if the result is a success.
298
318
  * @param apply - The function to call if the result is a success.
@@ -300,6 +320,12 @@ const i = {
300
320
  * @public
301
321
  */
302
322
  whenSuccess: (e, r) => (s.isSuccess(e) && r(e.value), e),
323
+ /**
324
+ * Calls the provided function if the result is a failure.
325
+ * @param apply - The function to call if the result is a failure.
326
+ * @returns The result that was passed in.
327
+ * @public
328
+ */
303
329
  whenFailure: (e, r) => (s.isFailure(e) && r(e.error), e),
304
330
  /**
305
331
  * Combines two results into a single result.
@@ -0,0 +1 @@
1
+ "use strict";const n=require("./async-result.cjs"),i={valid:{type:"valid"},invalid(e){return{type:"invalid",error:e}},isValid(e){return e.type==="valid"},isInvalid(e){return e.type==="invalid"},match:(e,r,u)=>i.isValid(e)?r():u(e.error),toResult:(e,r)=>i.match(e,()=>s.success(r),u=>s.failure(u)),effect:(e,r)=>(e.type==="valid"?r.valid?r.valid():r.else?.():r.invalid?r.invalid(e.error):r.else?.(),e),whenValid:(e,r)=>(i.isValid(e)&&r(),e),whenInvalid:(e,r)=>(i.isInvalid(e)&&r(e.error),e),mapError:(e,r)=>e.type==="invalid"?i.invalid(r(e.error)):e,flatMapError:(e,r)=>e.type==="invalid"?r(e.error):e,combine:(e,r,u)=>i.isValid(e)&&i.isValid(r)?i.valid:i.isInvalid(e)&&i.isInvalid(r)?i.invalid(u(e.error,r.error)):i.isInvalid(e)?e:r,all:e=>{for(const r of e)if(i.isInvalid(r))return r;return i.valid},allErrors:e=>{const r=[];for(const u of e)i.isInvalid(u)&&r.push(u.error);return r.length>0?i.invalid(r):i.valid},equals:(e,r,u=(t,l)=>t===l)=>e.type==="valid"&&r.type==="valid"?!0:e.type==="invalid"&&r.type==="invalid"?u(e.error,r.error):!1,recover:e=>i.valid,getError:e=>{if(i.isInvalid(e))return e.error},getErrorOrElse:(e,r)=>i.isInvalid(e)?e.error:r},s={success(e){return{type:"Success",value:e}},failure(e){return{type:"Failure",error:e}},map:(e,r)=>e.type==="Success"?s.success(r(e.value)):e,flatMap:(e,r)=>e.type==="Success"?r(e.value):e,toAsync(e){return s.match(e,r=>n.AsyncResult.success(r),r=>n.AsyncResult.failure(r))},toValidation(e){return s.match(e,()=>i.valid,r=>i.invalid(r))},isSuccess(e){return e.type==="Success"},isFailure(e){return e.type==="Failure"},getOrElse(e,r){return s.isSuccess(e)?e.value:r},getOrElseLazy(e,r){return s.isSuccess(e)?e.value:r()},getOrNull(e){return s.isSuccess(e)?e.value:null},getOrUndefined(e){return s.isSuccess(e)?e.value:void 0},getUnsafe:e=>{if(s.isSuccess(e))return e.value;throw e.error},match:(e,r,u)=>s.isSuccess(e)?r(e.value):u(e.error),effect:(e,r)=>(e.type==="Success"?r.success?r.success(e.value):r.else?.():r.failure?r.failure(e.error):r.else?.(),e),whenSuccess:(e,r)=>(s.isSuccess(e)&&r(e.value),e),whenFailure:(e,r)=>(s.isFailure(e)&&r(e.error),e),combine:(e,r,u,t)=>s.match(e,l=>s.match(r,a=>s.success(u(l,a)),a=>s.failure(a)),l=>s.match(r,a=>s.failure(l),a=>s.failure(t(l,a)))),equals:(e,r,u={valueEquals:(t,l)=>t===l,errorEquals:(t,l)=>t===l})=>e.type==="Success"&&r.type==="Success"?u.valueEquals(e.value,r.value):e.type==="Failure"&&r.type==="Failure"?u.errorEquals(e.error,r.error):!1,all:e=>{const r=[];for(const u of e)if(s.isSuccess(u))r.push(u.value);else return u;return s.success(r)},mapError:(e,r)=>e.type==="Failure"?s.failure(r(e.error)):e,flatMapError:(e,r)=>e.type==="Failure"?r(e.error):e,recover:(e,r)=>e.type==="Failure"?{type:"Success",value:r(e.error)}:e,ap:(e,r)=>s.isSuccess(e)&&s.isSuccess(r)?s.success(e.value(r.value)):s.isFailure(e)?s.failure(e.error):s.failure(r.error),map2:(e,r,u)=>s.isSuccess(e)&&s.isSuccess(r)?s.success(u(e.value,r.value)):s.isFailure(e)?s.failure(e.error):s.failure(r.error),map3:(e,r,u,t)=>s.isSuccess(e)&&s.isSuccess(r)&&s.isSuccess(u)?s.success(t(e.value,r.value,u.value)):s.isFailure(e)?s.failure(e.error):s.isFailure(r)?s.failure(r.error):s.failure(u.error),ofPromise:async e=>{try{const r=await e;return s.success(r)}catch(r){return s.failure(r instanceof Error?r:new Error(String(r)))}},swap:e=>s.isSuccess(e)?s.failure(e.value):s.success(e.error),fromNullable:(e,r)=>e==null?s.failure(r):s.success(e),fromNullableLazy:(e,r)=>e==null?s.failure(r()):s.success(e),tryCatch:e=>{try{return s.success(e())}catch(r){return s.failure(r instanceof Error?r:new Error(String(r)))}}};exports.Result=s;exports.Validation=i;
package/result.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("./async-result.cjs");const e=require("./result-cY1uEC-G.cjs");exports.Result=e.Result;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("./async-result.cjs");const e=require("./result-DBJ3htTg.cjs");exports.Result=e.Result;
package/result.d.ts CHANGED
@@ -140,6 +140,20 @@ export declare const Result: {
140
140
  * @public
141
141
  */
142
142
  match: <V1, V2, E>(r: Result<V1, E>, success: (value: V1) => V2, failure: (error: E) => V2) => V2;
143
+ /**
144
+ * Executes side effects based on the state of the result.
145
+ * Unlike `match`, all handlers are optional, allowing you to react only to specific states.
146
+ * The `else` handler is called when no specific handler is provided for the current state.
147
+ * @param r - The result.
148
+ * @param handlers - An object with optional handlers for each state and an optional `else` fallback.
149
+ * @returns The result that was passed in, allowing for chaining.
150
+ * @public
151
+ */
152
+ effect: <V, E>(r: Result<V, E>, handlers: {
153
+ success?: (value: V) => void;
154
+ failure?: (error: E) => void;
155
+ else?: () => void;
156
+ }) => Result<V, E>;
143
157
  /**
144
158
  * Calls the provided function if the result is a success.
145
159
  * @param apply - The function to call if the result is a success.
@@ -147,6 +161,12 @@ export declare const Result: {
147
161
  * @public
148
162
  */
149
163
  whenSuccess: <V, E>(r: Result<V, E>, apply: (v: V) => void) => Result<V, E>;
164
+ /**
165
+ * Calls the provided function if the result is a failure.
166
+ * @param apply - The function to call if the result is a failure.
167
+ * @returns The result that was passed in.
168
+ * @public
169
+ */
150
170
  whenFailure: <V, E>(r: Result<V, E>, apply: (e: E) => void) => Result<V, E>;
151
171
  /**
152
172
  * Combines two results into a single result.
package/result.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import "./async-result.js";
2
- import { R as e } from "./result-BrVFeaNO.js";
2
+ import { R as e } from "./result-BYto972d.js";
3
3
  export {
4
4
  e as Result
5
5
  };
package/validation.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./result-cY1uEC-G.cjs");exports.Validation=i.Validation;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./result-DBJ3htTg.cjs");exports.Validation=i.Validation;
package/validation.d.ts CHANGED
@@ -72,6 +72,20 @@ export declare const Validation: {
72
72
  * @returns A new `Validation` with the mapped value.
73
73
  */
74
74
  toResult: <T, E>(validation: Validation<E>, value: T) => Result<T, E>;
75
+ /**
76
+ * Executes side effects based on the state of the validation.
77
+ * Unlike `match`, all handlers are optional, allowing you to react only to specific states.
78
+ * The `else` handler is called when no specific handler is provided for the current state.
79
+ * @param v - The validation.
80
+ * @param handlers - An object with optional handlers for each state and an optional `else` fallback.
81
+ * @returns The validation that was passed in, allowing for chaining.
82
+ * @public
83
+ */
84
+ effect: <E>(v: Validation<E>, handlers: {
85
+ valid?: () => void;
86
+ invalid?: (error: E) => void;
87
+ else?: () => void;
88
+ }) => Validation<E>;
75
89
  /**
76
90
  * Execute a function when the `Validation` is valid.
77
91
  *
package/validation.js CHANGED
@@ -1,4 +1,4 @@
1
- import { V as i } from "./result-BrVFeaNO.js";
1
+ import { V as i } from "./result-BYto972d.js";
2
2
  export {
3
3
  i as Validation
4
4
  };
@@ -1 +0,0 @@
1
- "use strict";const n=require("./async-result.cjs"),i={valid:{type:"valid"},invalid(e){return{type:"invalid",error:e}},isValid(e){return e.type==="valid"},isInvalid(e){return e.type==="invalid"},match:(e,r,u)=>i.isValid(e)?r():u(e.error),toResult:(e,r)=>i.match(e,()=>s.success(r),u=>s.failure(u)),whenValid:(e,r)=>(i.isValid(e)&&r(),e),whenInvalid:(e,r)=>(i.isInvalid(e)&&r(e.error),e),mapError:(e,r)=>e.type==="invalid"?i.invalid(r(e.error)):e,flatMapError:(e,r)=>e.type==="invalid"?r(e.error):e,combine:(e,r,u)=>i.isValid(e)&&i.isValid(r)?i.valid:i.isInvalid(e)&&i.isInvalid(r)?i.invalid(u(e.error,r.error)):i.isInvalid(e)?e:r,all:e=>{for(const r of e)if(i.isInvalid(r))return r;return i.valid},allErrors:e=>{const r=[];for(const u of e)i.isInvalid(u)&&r.push(u.error);return r.length>0?i.invalid(r):i.valid},equals:(e,r,u=(t,l)=>t===l)=>e.type==="valid"&&r.type==="valid"?!0:e.type==="invalid"&&r.type==="invalid"?u(e.error,r.error):!1,recover:e=>i.valid,getError:e=>{if(i.isInvalid(e))return e.error},getErrorOrElse:(e,r)=>i.isInvalid(e)?e.error:r},s={success(e){return{type:"Success",value:e}},failure(e){return{type:"Failure",error:e}},map:(e,r)=>e.type==="Success"?s.success(r(e.value)):e,flatMap:(e,r)=>e.type==="Success"?r(e.value):e,toAsync(e){return s.match(e,r=>n.AsyncResult.success(r),r=>n.AsyncResult.failure(r))},toValidation(e){return s.match(e,()=>i.valid,r=>i.invalid(r))},isSuccess(e){return e.type==="Success"},isFailure(e){return e.type==="Failure"},getOrElse(e,r){return s.isSuccess(e)?e.value:r},getOrElseLazy(e,r){return s.isSuccess(e)?e.value:r()},getOrNull(e){return s.isSuccess(e)?e.value:null},getOrUndefined(e){return s.isSuccess(e)?e.value:void 0},getUnsafe:e=>{if(s.isSuccess(e))return e.value;throw e.error},match:(e,r,u)=>s.isSuccess(e)?r(e.value):u(e.error),whenSuccess:(e,r)=>(s.isSuccess(e)&&r(e.value),e),whenFailure:(e,r)=>(s.isFailure(e)&&r(e.error),e),combine:(e,r,u,t)=>s.match(e,l=>s.match(r,a=>s.success(u(l,a)),a=>s.failure(a)),l=>s.match(r,a=>s.failure(l),a=>s.failure(t(l,a)))),equals:(e,r,u={valueEquals:(t,l)=>t===l,errorEquals:(t,l)=>t===l})=>e.type==="Success"&&r.type==="Success"?u.valueEquals(e.value,r.value):e.type==="Failure"&&r.type==="Failure"?u.errorEquals(e.error,r.error):!1,all:e=>{const r=[];for(const u of e)if(s.isSuccess(u))r.push(u.value);else return u;return s.success(r)},mapError:(e,r)=>e.type==="Failure"?s.failure(r(e.error)):e,flatMapError:(e,r)=>e.type==="Failure"?r(e.error):e,recover:(e,r)=>e.type==="Failure"?{type:"Success",value:r(e.error)}:e,ap:(e,r)=>s.isSuccess(e)&&s.isSuccess(r)?s.success(e.value(r.value)):s.isFailure(e)?s.failure(e.error):s.failure(r.error),map2:(e,r,u)=>s.isSuccess(e)&&s.isSuccess(r)?s.success(u(e.value,r.value)):s.isFailure(e)?s.failure(e.error):s.failure(r.error),map3:(e,r,u,t)=>s.isSuccess(e)&&s.isSuccess(r)&&s.isSuccess(u)?s.success(t(e.value,r.value,u.value)):s.isFailure(e)?s.failure(e.error):s.isFailure(r)?s.failure(r.error):s.failure(u.error),ofPromise:async e=>{try{const r=await e;return s.success(r)}catch(r){return s.failure(r instanceof Error?r:new Error(String(r)))}},swap:e=>s.isSuccess(e)?s.failure(e.value):s.success(e.error),fromNullable:(e,r)=>e==null?s.failure(r):s.success(e),fromNullableLazy:(e,r)=>e==null?s.failure(r()):s.success(e),tryCatch:e=>{try{return s.success(e())}catch(r){return s.failure(r instanceof Error?r:new Error(String(r)))}}};exports.Result=s;exports.Validation=i;