Skip to content

Releases: origamitower/folktale

2.3.2

21 Jan 23:21
Compare
Choose a tag to compare

Install it through npm:

$ npm install folktale@2.3.2

A special thanks to @cdoublev :>

Fixes

  • Fixes automatic conversions from Nodebacks/Promises to Tasks, taking into account cancellations (Issue #215, PR #216 by @cdoublev)

v2.3.1

03 Oct 01:12
Compare
Choose a tag to compare

Install it through npm.

$ npm install folktale@2.3.1

Fixes

  • Fixes Result.filter discarding the error value (Issue #209)

  • Previous version was missing the README file in the package (Issue #208)

2.3.0

24 Jun 21:10
Compare
Choose a tag to compare

Install it through npm or download the attached tarball.

$ npm install folktale@2.3.0

A special thank you to @Josh-Miller, @JesterXL, @andys8, and @Pernas.

New features

  • A chain function for Validation allows sequencing successes in a simpler way (PR #194)
  • The Alt algebraic structure is now implemented for Maybe (PR #171 by @Josh-Miller)
  • Unions have a new any special value, and better error reporting (PR #142 by @JesterXL)

Fixes

  • Derived debug representation now handles numbers correctly (including -0) (PR #193)
  • Cancellation now should propagate a little less incorrectly in Tasks (PR #177)

Documentation

v2.1.0

01 Jan 15:58
Compare
Choose a tag to compare

Install it through npm or download the attached zip.

$ npm install folktale@2.1.0

A special thank you to @diasbruno, @gvillalta99, @MichaelQQ, @stabbylambda, @floriansimon1, and @scotttrinh.

New features

Bug fixes

  • Derived .toString methods can now handle objects without a .toString method (though not yet circular objects). (PR #169)

Documentation

DEPRECATED FEATURES

  • Renamed Future.recover to Future.orElse. Future.recover was deprecated. (PR #146)

Miscellaneous

  • We've moved from Make to Furipota, so the build system is cross-platform now (PR #148)

v2.0.0

15 Jul 22:11
Compare
Choose a tag to compare

Install it through npm or download the attached zip:

$ npm install --save folktale@2.0.0

Thanks to the contributions of @rpearce, @boris-marinov, @justin-calleja, @sotojuan, @degroote22, @RossJHagan, @syaiful6, @diasbruno, @baranovxyz, @floriansimon1, @jreut, and @framp in this and previous releases of the 2.0 branch.

New features

v2.0.0-rc1

25 Jun 16:42
Compare
Choose a tag to compare
v2.0.0-rc1 Pre-release
Pre-release

New features

  • Maybe now implements Semigroup and Monoid (PR #125 by @diasbruno).
  • Result now implements Semigroup.

BREAKING CHANGES

  • folktale/data/future is now folktale/concurrency/future.

  • folktale/data/task is now folktale/concurrency/task.

  • folktale/data/conversions is now folktale/conversions.

  • folktale/core/fantasy-land is now folktale/fantasy-land.

  • folktale/data/maybe is now folktale/maybe.

  • folktale/data/result is now folktale/result.

  • folktale/data/validation is now folktale/validation.

  • The folktale/core/adt module is now folktale/adt/union module, which specifies that it creates union types. The data function was also renamed to union, and the ADT namespace was renamed to Union — although this one was used mostly internally.

    Previously:

    const { data, derivations } = require('folktale/core/adt');
    
    const List = data('List', {
      Empty(){ },
      Cons(value, rest) {
        return { value, rest };
      }
    }).derive(derivations.Equality);

    Now:

    const { union, derivations } = require('folktale/adt/union');
    
    const List = union('List', {
      Empty(){ },
      Cons(value, rest) {
        return { value, rest };
      }
    }).derive(derivations.Equality);

v2.0.0-beta1

25 Jun 16:48
Compare
Choose a tag to compare
v2.0.0-beta1 Pre-release
Pre-release

Install it through npm or download the attached zip:

$ npm install --save folktale@2.0.0-beta1

Thanks to the contributions of @rpearce, @boris-marinov, @justin-calleja, @sotojuan, @degroote22, @RossJHagan, and @syaiful6 in this and previous releases of the 2.0 branch. A final release will happen as soon as some browser problems are fixed :)

Documentation

  • Documentation for Data.Future was added.
  • Fixed some of the Data.Task documentation.

New features

  • nodebackToTask (and Task.fromNodeback) allows converting callback-based functions in Node-style to Tasks automatically
    (PR #116 by @rpearce)
  • futureToPromise and promiseToFuture allow converting between promises and futures. The conversion isn't strictly loss-less due to the difference in semantics
    (PR #119, details in #98)
  • promisedToTask (and Task.fromPromised) allows converting functions that return promises to functions that return tasks
    (PR #120, details in #97)

BREAKING CHANGES

  • (f43441b)
    Future#mapRejection has been renamed to Future#mapRejected for consistency. To fix just replace any
    calls of mapRejection on Futures to mapRejected:

    // Before
    Future.rejected(1).mapRejection(x => x + 1);
    
    // Now
    Future.rejected(1).mapRejected(x => x + 1);

v2.0.0-alpha4

25 Jun 16:49
Compare
Choose a tag to compare
v2.0.0-alpha4 Pre-release
Pre-release

Install it through npm or download the attached zip:

$ npm install --save folktale@2.0.0-alpha4

Documentation

  • Guides for installing and contributing to Folktale were added.
  • An annex describing the type annotation used in Folktale was added.
  • Documentation for Data.Task was added.
  • Other documentation improvements were made.
  • Top-level async/await is now supported in Documentation examples.
  • Experimental features now have a section noting such in their pages.

New features

  • .mapRejected() was added as a counterpart of .map() for failed Tasks
    (35fbd0d)
  • .orElse() was added as a convenient way of recovering from failed Tasks
    (35fbd0d)
  • waitAny and waitAll have been added as convenience over .or and .and methods in Task
    (ea4d1c0)
  • Equality derivation now uses a limited deep-equality (for arrays/objects) by default
    (373b518)

Bug fixes

  • Fixes fromJSON in the presence of getters, where it'd fail when trying to set values in the reified structure
    (f4026e0)
  • Serialises undefined as null so all keys are kept in the serialised structure
    (ffee127)

BREAKING CHANGES

  • (da6c2e3)
    nullable → validation now takes a fallback value, so Failures are kept as semigroups. By default, if you don't pass anything, the fallback value will be undefined, so this only breaks things if you were relying on nullableToValidation(null) giving you Failure(null). To fix it, simply pass an additional parameter:

    // Before
    nullableToValidation(null);
    Validation.fromNullable(null);
    
    // Now
    nullableToValidation(null, null);
    Validation.fromNullable(null, null);

    That said, you should keep your Failures as proper semigroups, so things like .apply and .concat will work correctly.

v2.0.0-alpha3

25 Jun 16:49
Compare
Choose a tag to compare
v2.0.0-alpha3 Pre-release
Pre-release

New features

  • Adds a nullable → maybe conversion
    (9706ab7);
  • Adds a .fold() method to the Maybe structure. This works similarly to Result and Validation's .fold() method, except the function for the Nothing case takes no arguments
    (6f59f61);
  • Adds the collect function (data/validation/collect), which makes aggregating errors from failures directly a bit simpler
    (#71, a677e96);

Bug fixes

  • Fixes the exported symbol for validation → either conversion
    (450cb70);
  • Fixes the Setoid implementation to work with the core/fantasy-land module
    (d761107);
  • Fixes a bunch of currying and argument order issues with the core/fantasy-land module
    (d5b0c74);

Miscellaneous

  • Annotated files are now only generated for testing and documentation, which makes browser bundles much smaller
    (e0186fa);

DEPRECATED FEATURES

  • The old .get() methods are deprecated in favour of the new .unsafeGet() methods. There was no behavioural change, just a naming one. See #42.
    (278d5a7, 19910b4);

BREAKING CHANGES

  • (8e1b27e)
    Modules that were previously named core.js now reflect the name of the functionality they implement. This affects you if you've been importing the core.js modules directly, rather than their folder. The following modules are affected by this change:

    • core/adt/core.jscore/adt/data.js (exports the data function);
    • data/either/core.jsdata/either/either.js (exports the either ADT);
    • data/maybe/core.jsdata/maybe/maybe.js (exports the maybe ADT);
    • data/validation/core.jsdata/validation/validation.js (exports the validation ADT).
  • (7a1ef33)
    Removes the data/either/fromNullable.js module, which was moved to the data/conversions module. This affects you if you have been importing that module directly. In that case you can import data/conversions/nullable-to-either.js instead:

    // Before
    const eitherFromNullable = require('data/either/fromNullable');
    
    // Now
    const eitherFromNullable = require('data/conversions/nullable-to-either');

    Note that no changes are necessary if you were importing the whole data/either module and taking the fromNullable method from there.

  • (5676d39)
    Either.try now takes a thunk, rather than being a curried-ish form of application:

    // Before
    Either.try((a) => a.foo())(null);   // ==> Left("cannot read property 'foo' of null")
    
    // Now
    Either.try(() => null.foo());       // ==> Left("cannot read property 'foo' of null")
  • (PR #62)
    Renames EitherResult. No behaviour changes, but a bunch of terminology changes that break existing code.

    Where one used to write:

    const { Left, Right } = require('folktale/data/either');

    One would now write:

    const { Error, Ok } = require('folktale/data/result');

    The data structure's name has been changed to Result. The Left case has been changed to Error, and the Right case has been changed to Ok. This affects all uses of .matchWith as well as constructing values.

  • (d5e780f)
    Remove the .cata() method from core/adt, but adds it to Maybe and Validation. This breaks any core/adt structure that was using .cata() instead of .matchWith(), but makes it easier for people to migrate their code with Maybe and Validation to Folktale 2 by just replacing require('data.maybe') with require('folktale/data/maybe').

  • (f0dd120)
    Several renamings to make the API consistent regarding its usage of English (see #21), so now all names in the API use US English spelling, although the documentation still uses British English spelling:

    • The Show derivation (core/adt/show.js) is now called DebugRepresentation (core/adt/derivations/debug-representation.js);
    • The Setoid derivation (core/adt/setoid.js) is now called Equality (core/adt/derivations/equality.js). The method for providing a custom comparison function, previously .withEquality(cmp) is now called .wthCustomComparison(cmp);
    • The Serialize derivation (core/adt/serialize.js) is now called Serialization (core/adt/derivations/serialization.js);
    • The derivations are now provided in the core/adt/derivations.js file, and consequently in a derivations property of the core/adt module, rather than directly there;
    • The partialise function (core/lambda/partialise.js) is now called partialize (core/lambda/partialize.js).