Skip to content

Releases: dexie/Dexie.js

Dexie v2.0.0

22 Sep 13:56
Compare
Choose a tag to compare

At last, we have version 2.0.0 out and it is way more tested, compliant and bug free than the old 1.x branch.

I would bore you if listing all details since the last stable release (version 1.5.1 in November 2016) so I'll try to summarize it with focus on the most interesting parts:

Support for native and transpiled async / await

  • Use async functions within database transactions without loosing track of current ongoing transaction.
  • Compatible with Typescript 2.x, 1.x and babel.
  • Compatible with even native async / await across all browser inluding Safari, Chrome, Edge and Firefox*. Firefox still suffers from this issue which makes native await calls loose the transaction. This is something that only can be adressed by the Mozilla team. NOTE: You can still do async/await within transactions and target Firefox - just make sure to not use native async/await, but transpile it to ES5 or ES6 using a transpiler such as Babel or Typescript!

IndexedDB 2.0 support

Unit tests of Binary Keys (IndexedDB 2.0 feature) has been fixed along with some issues in Dexie related to binary key support. Binary Keys are a more optimal way of storing binary data in IndexedDB. IndexedDB 2.0 supports any typed array (such as Uint8Array, Float64Array, etc) as well as ArrayBuffer to be indexed or used as primary key. Browsers that support IndexedDB 2.0 are: Firefox(*), Chrome, Opera and Safari.

(*) Firefox < 57 have an issue with using binary keys as primary keys. This issue was fixed recently and will be solved in Firefox 57 (a future release).

Native Safari (including Iphone) Support

Safari 10.1 is now at last fully IndexedDB compliant and part of the CI tests of Dexie. We run the Safari tests on an IPhone 7 device at browserstack.com. IndexedDBShim is no more needed when targeting latest version of Safari (10.1).

Full test matrix is now:

BrowserVersionOSAuto-tested for each PRTested on publish (publish.sh)
Firefox 47 Debian
Internet Explorer 11 Windows 7
Firefox 55 Windows
Safari 10.1 iOS
Firefox 47 OS X
Microsoft Edge 15 Windows 10
Chrome 49 OS X
Chrome 60 Windows

We use travis ci and browserstack for continous integration and automatic pre-relase tests. If you'd like to extend the test matrix, please file a PR where you add your desired browser to karma.browers.matrix.js. You must also define the browser in karma.browserstack.js. Submitting the PR will tell whether it would work or not (just add your new browser to the "ci" array of karma.browsers.matrix.js and define the same browser in karma.browserstack.js).

NOTE: Integration tests of dexie-observable, dexie-syncable and dexie-relationships are still not tested against the full matrix quite yet.

A pick of other news...

  • Dexie.waitFor() makes it possible to call non-indexedDB API:s (promise-returning async API:s!) without loosing the transaction.

  • Simpler queries like:

    await db.friends.where({
        name: "Bobby",
        age: 42
    }).toArray()

    will try using a compatible compound index [name+age] if present (and browser supports it), else just utilizing one of the indexes and JS-filter on the second criteriea.
    See Table.where()

  • Simpler way of getting a single row by index instead of primary key:

    const foo = await db.friends.get({email: '[email protected]'})

    See Table.get()

  • Improved typescript definitions in general

  • Much work has been put on rewriting and fixing issues in dexie-syncable and dexie-observable. Thanks @nponiros !

Backward Compatibility

Keeping backward compatibility is a number one priority for Dexie.js, so there are not a lot of API changes. However, some things need to change some time and a few API methods that have been deprecated for a time have gone obsolete. The full list can be viewed here: http://dexie.org/docs/Deprecations

Version 2.0.0-rc.1

06 Sep 07:50
Compare
Choose a tag to compare
Version 2.0.0-rc.1 Pre-release
Pre-release

This is a stability release with:

  • Improved browser support (latest Safari, Firefox and Chrome)
  • IndexedDB 2.0 support
  • Typings fixes
  • Optimization of addon dexie-syncable.

We will try to get out a 2.0.0 version very soon, as this branch feels way more stable and reliable than the 1.x branch (that is currently still marked as 'latest' on npm).

Native Safari Support

Safari 10.1 is now at last fully IndexedDB compliant and part of the CI tests of Dexie. We run the Safari tests on an IPhone 7 device at browserstack.com. IndexedDBShim is no more needed when targeting latest version of Safari (10.1).

Full test matrix is now:

BrowserVersionOSAuto-tested for each PRAuto-tested in release.sh
Firefox 47 Debian
Internet Explorer 11 Windows 7
Firefox 55 Windows
Safari 10.1 iOS
Firefox 47 OS X
Microsoft Edge 15 Windows 10
Chrome 49 OS X
Chrome 60 Windows

We use travis ci and browserstack for continous integration and automatic pre-relase tests. If you'd like to extend the test matrix, please file a PR where you add your desired browser to karma.browers.matrix.js. You must also define the browser in karma.browserstack.js. Submitting the PR will tell whether it would work or not (if adding you new browser to the "ci" array of karma.browsers.matrix.js and defining the same browser in karma.browserstack.js).

NOTE: Integration tests of dexie-observable, dexie-syncable and dexie-relationships are not tested against the full matrix quite yet. Will see if we can improve that somehow before 2.0.0 final.

IndexedDB 2.0 support

Unit tests of Binary Keys (IndexedDB 2.0 feature) has been fixed along with some issues in Dexie related to binary key support. Binary Keys are a more optimal way of storing binary data in IndexedDB. IndexedDB 2.0 supports any typed array (such as Uint8Array, Float64Array, etc) as well as ArrayBuffer to be indexed or used as primary key. Browsers that support IndexedDB 2.0 are: Firefox(*), Chrome, Opera and Safari.

(*) Firefox < 57 have an issue with using binary keys as primary keys. This issue was fixed recently and will be solved in Firefox 57 (a future release).

List of PRs since 2.0.0-beta.11

  • #540 Fix typing for .on('ready')
  • #534 Make hook callbacks compatible with typescript noImplicitThis option
  • #570 Change apply-changes to use a transaction to manage changes instead of using chanined promises.
  • #579 Workaround for Safari issue with getAll()
  • #580 Fix typescript (type error) on adding addons
  • #581 Fix IndexedDB 2.0 flaws in Dexie and make unit tests of binary keys work.
  • #583 Include Safari and smartphones in test suite and fix Dexie bugs and -workarounds for making Safari work fully with Dexie.

Dexie v2.0.0-beta.11

19 May 09:36
Compare
Choose a tag to compare
Dexie v2.0.0-beta.11 Pre-release
Pre-release

Fixes

  • Fixed bower config to meet best practices (#488) #490

  • Typings (d.ts) correction of Dexie.exists() and Dexie.delete()#497

  • Bubble up QuotaExceededError instead of AbortError: Transaction aborted #514

    Fixes #323

    Rather than throwing Unhandled rejection: AbortError: Transaction aborted when the user is out of disk space, the underlying transaction error (QuotaExceededError) is bubbled up. This allows consumers of the Dexie API to identify QuotaExceededErrors and handle them accordingly.

    NOTE: I used http://www.cylog.org/utilities/filldisk.jsp to fill up my hard disk to try this code locally.

  • Update typescript Promise definition #518
    Dexie.Promise typings needed adjustments to compile correctly with tsc > v2.3.

Breaking Change

  • Don't use IndexedDBShim just because it's included #511
    Resolves #342 and #148

    This change is a breaking change (though to the better), since the shim will no more be used on browsers where it's not needed. We need to collect some user feedback about how this affects apps. What we know is that we now go over letting the shim to its job to detect whether it should be applied or not. To be backward compatible, call shimIndexedDB.__useShim(); before including dexie.

Dexie v2.0.0-beta.10

31 Jan 10:12
Compare
Choose a tag to compare
Dexie v2.0.0-beta.10 Pre-release
Pre-release

Changes since 2.0.0-beta.9

Bugs

Features

New Feature #447 (concerns dexie-syncable addon)

  • dexie-syncable (now at version 1.0.0-beta.3): Possible to change option for a connected node (via db.syncable.connect())
  • db.syncable.getOption() added to get the options of a connected node 146950c 6caf09b

Build process

  • dexie-syncable: Add missing tests to unit tests and CI inclusion 1f6054b

Dexie v2.0.0-beta.9

28 Jan 01:15
Compare
Choose a tag to compare
Dexie v2.0.0-beta.9 Pre-release
Pre-release

Much work has been done in this release with dexie-syncable and dexie-observable thanks to @nponiros. Versions 1.0.0-beta.2 of these addons were released together with this dexie-release.

News since 2.0.0-beta.7

  • Stability fixes for dexie-observable and dexie-syncable
  • The source files of Dexie.Syncable and Dexie.Observable are splitted into smaller modules.
  • Lots of new unit tests for dexie-syncable and dexie-observable. Now travis runs integration- and unit tests for the addons as well.
  • Partial tresholds configurable for dexie-syncable (#423)
  • Fixes for the ajax sync protocol (#424)
  • Refactor Dexie.Syncable tests and added new ones (#426)
  • Eslinting Dexie.Syncable and Dexie.Observable.
  • Added typings tests for dexie-syncable.d.ts and dexie-observable.d.ts
  • Fix for typescript strictNullChecks=true (#448)

Build Scripts

  • Switched from babel to typescript for compilation. Still plain JS, but typescript transpiles it nicer than babel.
  • Threw away all custom build scripts and now using plain CLI command via just-build
  • Integration- and unit tests for addons now part of the travis CI.

Other

Dexie v2.0.0-beta.7

22 Dec 01:15
Compare
Choose a tag to compare
Dexie v2.0.0-beta.7 Pre-release
Pre-release

Stability for dexie-syncable

A lot of work has been put into dexie-observable and dexie-syncable to fix stability issues and generate typescript definition files for them. We are continuing to improve these addons and approach version 1.0 of them.

The addons have been updated at npm as well and we strongly encourage to upgrade the addons if going up on this version of Dexie.

npm install [email protected]
npm install [email protected]

List of fixes.

  • Review and bugfix dexie-observable and dexie-syncable (#393)
  • Make dexie typings extendable by addons (#398)
  • Stop using localStorage for recording database names for Dexie.getDatabaseNames() (#399)
  • Resolves #389. Also update Promise interface. (#394)
  • Resolves #386
  • Resolves #387
  • Upgrade QUnit (#384)
  • fix382 (#383) resolves #382.
  • Typings for dexie-observable and dexie-syncable (Resolves #213)
  • Various fixes 2016 12 21 (#412)

Dexie v2.0.0-beta.6

28 Nov 08:38
Compare
Choose a tag to compare
Dexie v2.0.0-beta.6 Pre-release
Pre-release

Updated dexie.d.ts with Dexie.waitFor() (#382)

Dexie v2.0.0-beta.5

25 Nov 16:39
Compare
Choose a tag to compare
Dexie v2.0.0-beta.5 Pre-release
Pre-release

More rigorously release notes to come...

To take is short:

New methods:

  • Dexie.waitFor() makes it possible to call non-indexedDB API:s (promise-returning async API:s!) without loosing the transaction
  • Table.get({name: "David", age: 43});
  • Table.where({firstName: "David", lastName: "Beckham"});
  • other fixes. Will list soon. If you're impatient, look in the commit history

Note: Dexie.Observable and Dexie.Syncable must be updated to version 0.2.1 to work with this version of Dexie.

Dexie v2.0.0-beta.4

01 Nov 13:35
Compare
Choose a tag to compare
Dexie v2.0.0-beta.4 Pre-release
Pre-release

Bugfixes

  • #360 - stability fix.

Features

  • Improved support for async / await inside transactions. Have tested that async/await can be used within transaction scopes in the following configurations:
    • Babel
    • Typescript 2.1
    • Natively in Edge 14 ( with experimental javascript flags on )
    • Natively in Chrome 55 beta.

Changed Behavior

PrematureCommitError

PrematureCommitError makes it visible when you accedently fall outside the transaction zone and start using the database transactionless without knowing so.

Before, if you'd use a non-Dexie Promise and then continue using database after that, you wouldn't detect that your code runs outside the transaction and the code could succeed silently without you noticing it did stuff transactionless.

Now, if the indexedDB transaction commits before your returned promise is completed, PrematureCommitError will be thrown. That is; if you for example await jQuery.ajax() within your transaction block, the transaction will now fail with PrematureCommitError. In earlier releases, it would sometimes fail with TransactionInactiveError() when this occurred, but only if the zone persisted when trying to do another db call.

Dexie v1.5.1

01 Nov 13:27
Compare
Choose a tag to compare

Stability bugfix of #360.