There are a bunch of minor fixes or refactoring, testing, and doc improvements in this PR, but the main change in this PR is versioning of schemas. It is backwards-compatible, with the exception that now it will delete unused indexes by default (which I think should be fairly safe and fits in with the behavior that we auto-delete unused stores) and it will also destroy and rebuild stores if they are respecified with different options (e.g., a different keyPath). The README ought to be helpful in visualizing the new schemas (and schemaBuilder) formats.
Fix: Ensure return after rejection (in get and count);
Fix: Better type-checking for bad schema objects;
Fix: Polyfill newVersion for PhantomJS
API change (breaking)/Feature: Add clearUnusedIndexes option (defaults to true);
API change (breaking)/Feature: Destroy and rebuild stores or indexes if present with different options;
API addition: Support a schemas object keyed to version with values
as schema objects. (Utilizes own IdbImport class, relying on own fork of idb-schema at least for now.);
idb-schema callbacks will be passed db.js Server as second argument
API addition: Support a schemaBuilder callback which accepts an
idb-schema object for incremental,
versioned schema building and whose addCallback method will be
passed an enhanced upgradeneeded event object with a Server object
as a second argument for making db.js-style queries
(e.g., to modify store content), albeit with certain limitations.
Along with schemas, addresses issues #84/#109
API addition: Support a clearUnusedStores property to conditionally avoid deleting old stores.
API addition: Add db.del alias of db.delete
API addition: Add del() alias on Server for parity with idb-batch (likely to use or adapt for multiple change transactions);
Feature: Change schema (and allow for schemas) to differentiate between "mixed", "whole", "idb-schema", and "merge" types with schemaType option (defaulting to mixed for schema and whole for schemas, maintaining prior behavior in backward-compatible manner);
Docs: Update version and schema to take schemaBuilder into account
(and document schemaBuilder).
Docs: Expand on key behavior examples;
Docs: Indicate that key is optional too
Docs: Add mention of missing limit on modify
Refactoring: Use const where possible;
Refactoring: Change variable placement including reordering static variables according to type (built-in alias, IDB, immutables, cache)
Refactoring: Avoid try-catch for brevity if will throw in sync body of Promise (but denote which lines may throw)
Refactoring: simplify transaction building
Refactoring: Add lang attribute for Atom linter-jade package;
Code comment: preventDefault not only for Firefox.
Code comment: Clarify how old connections may be closed
Testing: Schema building tests
Testing: Add tests for caching
Testing: Add test:local and phantom on package.json scripts
Testing: Fix server-handler test (expect specific error)
Testing: Fix test-worker to deal with multiple babel-polyfill instances
There are a bunch of minor fixes or refactoring, testing, and doc improvements in this PR, but the main change in this PR is versioning of schemas. It is backwards-compatible, with the exception that now it will delete unused indexes by default (which I think should be fairly safe and fits in with the behavior that we auto-delete unused stores) and it will also destroy and rebuild stores if they are respecified with different options (e.g., a different
keyPath
). The README ought to be helpful in visualizing the newschemas
(andschemaBuilder
) formats.get
andcount
);newVersion
for PhantomJSclearUnusedIndexes
option (defaults totrue
);schemas
object keyed to version with values asschema
objects. (Utilizes ownIdbImport
class, relying on own fork ofidb-schema
at least for now.); idb-schema callbacks will be passed db.jsServer
as second argumentschemaBuilder
callback which accepts an idb-schema object for incremental, versioned schema building and whoseaddCallback
method will be passed an enhancedupgradeneeded
event object with aServer
object as a second argument for making db.js-style queries (e.g., to modify store content), albeit with certain limitations. Along withschemas
, addresses issues #84/#109clearUnusedStores
property to conditionally avoid deleting old stores.db.del
alias ofdb.delete
del()
alias onServer
for parity withidb-batch
(likely to use or adapt for multiple change transactions);schemas
) to differentiate between "mixed", "whole", "idb-schema", and "merge" types withschemaType
option (defaulting tomixed
forschema
andwhole
forschemas
, maintaining prior behavior in backward-compatible manner);version
andschema
to takeschemaBuilder
into account (and documentschemaBuilder
).key
is optional toolimit
onmodify
const
where possible;lang
attribute for Atom linter-jade package;preventDefault
not only for Firefox.