UNPKG

62.6 kBMarkdownView Raw
1# CHANGES for indexeddbshim
2
3# 7.0.0
4
5- Breaking change: Require Node >= 10
6- Enhancement: By way of `typeson-registry`, support `CryptoKey`
7- Docs: Update dev. license badge per latest
8- Linting: As per latest ash-nazg
9- npm: Update deps. (`regenerator-runtime`, `typeson-registry`) devDeps.
10
11## 6.6.0 (releasing again as `indexeddbshim` and deprecating `@indexeddbshim/indexeddbshim`)
12
13- Incorporate previous relevant updates made to `@indexeddbshim/indexeddbshim`
14- Linting: As per latest ash-nazg
15- npm: Add `lint` to `test`
16- npm: Update devDeps. (and bundled mocha copy)
17
18## 6.5.0 (was published to `@indexeddbshim/indexeddbshim` only)
19
20- Linting: As per latest ash-nazg
21- Build: Update mocha copy
22- Testing: Switch to stable version of `cypress-multi-reporters`
23- npm: Add `prepublishOnly` script
24- npm: Update `typeson-registry`
25- npm: Update devDeps.
26
27## 6.4.0 (was published to `@indexeddbshim/indexeddbshim` only)
28
29- Build: Update per latest devDeps.
30- Build: Report compared to last build size
31- Linting: As per latest ash-nazg
32- Testing: Update tests to continue working per latest Node/jsdom
33- Testing: Switch to `cmrOutput`-supporting `cypres-multi-reporters` fork
34 (no need for Promise-based mocha-multi-reporters fork with proper
35 implementation)
36- Docs: Switch to mocha-badge-generator fork for proper async behavior
37- Docs: Update license badges
38- npm: Switch from deprecated rollup-plugin-babel to rollup/plugin-babel
39- npm: Update typeson-registry dep.
40- npm: Update devDeps (related to Babel, Rollup, ESLint, core-js,
41 jsdom, badges, mocha/nyc, sinon, source-map-support, ws)
42
43## 6.3.0 (was published to `@indexeddbshim/indexeddbshim` only)
44
45- Build: Fix per current fork
46- Docs: Update coverage badge per latest coveradge
47- Linting (ESLint): As per latest ash-nazg
48- npm: Point to now merged `mocha-badge-generator`
49- npm: Update devDeps
50
51## 6.2.1 (was published to `@indexeddbshim/indexeddbshim` only)
52
53- Docs: Fix badges
54
55## 6.2.0 (was published to `@indexeddbshim/indexeddbshim` only)
56
57- Fork from <https://github.com/axemclion/IndexedDBShim>.
58- Project: Add Github Sponors button to be able to accept funding
59- Project: Restore demo via Github Pages
60- Fix (React Native/Webpack): Add CFG item `fs` (which the Node
61 files automatically set) to allow removal of database files
62 without disturbing non-Node environments that do their own
63 special handling of `require` statements
64- Fix (Android): Overcome apparent Android SQLite mishandling of
65 boolean (convert to `Number`)
66- Build: Drop Grunt in favor of equivalent npm scripts
67- Testing (W3C): Update per latest wpt
68- npm: Update devDeps/package-lock.json
69
70## 6.1.0
71
72- Build (change/optimization): Remove `browersify`/`babelify`/
73 `mapstraction` process in favor of `grunt-rollup` with plugins;
74 reduces minified build size and expands non-minfiied size (so that
75 the source incorporated from `typeson`/`typeson-registry` is not
76 minified)
77 - `indexeddbshim-noninvasive.min.js` (182 KB -> 154 KB)
78 - `indexeddbshim.min.js` (165 KB -> 137 KB)
79 - `indexeddbshim-Key.min.js` (27.7 KB -> 16 KB)
80- Enhancement: Check that `navigator.userAgent` even exists (avoid erring
81 in React Native)
82- Fix: `__forceClose` method with nullish value as name was not closing
83 all connections
84- Linting (ESLint): Add file extensions; lint `.eslintrc` file itself;
85 enable other disabled rules
86- Docs: Add license badges (with `license-badger` routine)
87- Testing: Remove `grunt-qunit-puppeteer` devDep. (slow to install)
88- Testing (Mocha): Allow Firefox tests to pass
89- Testing (W3C): Bump memory so tests can complete
90- npm: Update dep. `typeson-registry` (for `module` importing)
91- npm: Add `package-lock.json` (needed by `npm audit`)
92- npm: Update devDeps
93- yarn: Remove `yarn.lock` (having some difficulties installing everything)
94
95## 6.0.1
96
97- Note that the typeson updates include some important fixes for accurately
98 storing certain types or combinations of types
99- Fix: For `CFG.fullIDLSupport`, revert setting of prototypes of
100 `IDBCursor`, `IDBKeyRange`, `IDBIndex`, `IDBObjectStore`,
101 `IDBFactory` to objects that serialize to
102 `[object ObjectPrototype]`
103- Linting (ESLint): Latest as per ash-nazg
104- Travis: Change to 10 and 12
105- Testing (W3C): Update web-platform-tests
106- Testing (W3C): Shim objects that are only checked for exposure
107- Testing (W3C): Avoid reporting known failures as unexpected
108- Testing (W3C): Update test counts
109- npm: Add script for updating submodules
110- npm: Update deps (typeson and typeson-registry)
111- npm: Update devDeps
112
113## 6.0.0
114
115- npm (BREAKING CHANGE): Move core-js-bundle out of deps; user to install
116 if needed for supported environments
117- Fix: For `CFG.fullIDLSupport`, ensure prototypes of `IDBCursor`,
118 `IDBKeyRange`, `IDBIndex`, `IDBObjectStore`, `IDBFactory` are
119 objects that serialize to `[object ObjectPrototype]`
120- Linting (ESLint): Apply latest updates
121- Testing (W3C): Avoid hack in test to deal with missing prototype;
122 do not inject `Object` on full IDL tests
123- Testing (W3C): Add `structured-clone.any.js` to known `badFiles` list
124- Testing (W3C): Add `MessageChannel`
125- Testing (W3C): Add canvas for `ImageData`
126- Docs: Link to TrialTool
127- npm: Remove `package-lock.json` in favor of `yarn.lock`
128- npm: Bump `typeson-registry` (Cause `Event` and `MessageChannel` to
129 throw upon attempted cloning); update `typeson`; bump devDeps and
130 local copies
131
132## 5.0.0
133
134- Breaking change: Move from deprecated `@babel/polyfill` to
135 recommended replacements `core-js-bundle` /
136 `regenerator-runtime`
137- Fix: For unescaping unmatched surrogates preceded by carets, we need to
138 restore the carets
139- Fix: Avoid erring in some instances with not-yet-added name key
140 for `cacheDatabaseInstances` or `memoryDatabase`
141- Fix (Missing API): Add new `IDBCursor.request`
142- Fix (example): Paths in `IDBKeyUtils.html` examples file
143- Optimization (build): Avoid `build` step as bundling `dist` files anyways;
144 avoid linting step as it has problem in grunt
145- Refactoring: Change private `__closed` flag to match spec
146 terminology, `__closePending`.
147- Refactoring: Add `__done` flag to match spec, with `readyState`
148 getter using this flag
149- Linting (ESLint): Update for `eslint-config-ash-nazg` (prefer
150 `for...of` and `includes`, etc.)
151- Linting (ESLint): Lint HTML and Markdown
152- Docs (JSDoc): Add returns and some additional docs
153- Docs (Code): Better toward `max-len`
154- Docs (README): Use paths more consistent with installing
155 indexeddbshim as dep.
156- Docs (README): Indicate ESM usage; fix broken link
157- Docs (TESTING): Info on individual tests
158- Testing (W3C): Update wpt; test results; fix regression
159- Testing (W3C): Exclude tests causing undue timeouts in other files; update
160 test counts
161- Testing (W3C): Avoid excluding non-breaking test
162- Testing (W3C): Support new "any" files (and support future ones) and
163 fix for `location`; report reason for new test file failing; update
164 `web-platform-tests`; avoid excluded files in list of failed;
165 add scripts to list files in test folder which are not in goodBad
166 listing
167- Grunt: Avoid eslint task for main build as having problems with lint config
168- npm: Update `typeson`/`typeson-registry`, `eventtargeter`
169- npm: Update devDeps; package-lock
170
171## 4.1.0
172
173- Optimization: Update `typeson-registry` to return to more space-optimal
174 array format when arrays do not have non-index keys (while still
175 supporting arrays with non-index keys) and `undefined` and
176 sparse arrays formats (though all are backward-compatible with
177 old data).
178- Docs (README): Update note on typeson-registry-sca-reverter
179- npm: Add `request` peer dep
180- npm: Bump devDeps and adjust linting accordingly
181
182## 4.0.1
183
184- Build fix: Apply `browserslist` to `@babel/env`; update typeson-registry
185 to get its `browserslist` fix
186
187## 4.0.0
188
189- Breaking change: **WARNING**: If you need 4.0.0 to work with data stored
190 under 3.\*, you need to add a callback as the value of the new
191 `CFG.registerSCA` config with a value set to the function exported from
192 [typeson-registry-sca-reverter](https://github.com/brettz9/typeson-registry-sca-reverter),
193 and do so before you make your `indexedDB` calls. This code was part of
194 IndexedDBShim, but is no longer bundled with it, as IndexedDBShim, as of
195 version 4.0.0 is now using the new typeson-registry Structured Cloning
196 Algorithm format by default for representing cloneable data as JSON.
197- Breaking fix: Representation of Arrays to allow storage of non-index
198 properties (courtesy of updated typeson-registry)
199- Breaking fix: Representation of Blobs as binary to avoid UTF16 representation
200 dropping unpaired surrogates (courtesy of updated typeson-registry); also assumes
201 XHR has `overrideMimeType`
202- Breaking change: `webkitGetDatabaseNames` removed in favor of now-standard
203 `databases` (see <https://github.com/w3c/IndexedDB/pull/240/files>)
204- Breaking change; Remove Bower completely (service was deprecated);
205 use npm or yarn
206- Breaking change: Switch from `babel-polyfill` to `@babel/polyfill`
207 (script tag paths for polyfill will need to be updated)
208- Breaking change: Remove support for previously deprecated numeric
209 constants as second arguments to `IDBDatabase.prototype.transaction`
210 (to use `readonly`/`readwrite` instead).
211- Breaking change: Remove our non-standard `IDBFactory.modules`
212 (non-IDB shims or polyfills available through `CFG.addNonIDBGlobals`
213 or `CFG.replaceNonIDBGlobals`, respectively, with shims prefixing
214 class names with "Shim")
215- Breaking change: Remove our non-standard `IDBFactory.utils` and move its
216 test utility `createDOMException` to named export of `setGlobalVars.js`
217- Fix: If stored data had an even number of caret characters (`^`) followed
218 by a `0`, the final caret would mistakenly be interpreted with the
219 `0` as a NUL character as part of unescaping (which could in turn cause
220 errors)
221- Fix: Compile to target 100% coverage (including e.g., iOS)
222- Enhancement: Support `BigInt()` and `Object(BigInt())`
223- Optimization: Import all of single typeson-registry to reduce file size
224 from two versions
225- Refactoring: Add empty favicon to avoid extra console messages; load after
226 title
227- Linting (ESLint): Switch Node-11-deprecated url methods
228- Linting (ESLint): Add and apply eslint-plugin-qunit-recommended rules; add
229 checks for browser support using eslint-plugin-compat; apply
230 `eslint-config-ash-nazg` rules; use `.js` for linting file
231- Testing (W3C): Instructions and results for using `wpt run`; wrap
232 dynamic files
233- Testing (W3C): Update worker BSON per new BSON API; use new
234 `XMLHttpRequest` partial polyfill; update wpt
235- Testing (Puppeteer QUnit): Avoid build step
236- Testing (QUnit): Ensure deleting database before testing version
237- Demo: Update copy of sinon
238- Docs: Max-length
239- Docs: Add "versions" section for migration info; note in code on
240 deprecating old typeson names
241- npm: Add `yarn` to `prepublishOnly` script
242- npm: Add "wpt" as alias script for "web-platform-tests"; add "lint"
243 script to test non-Grunt eslint
244- npm: Update eventtargeter and typeson/typeson-registry deps and devDeps
245- npm: Update devDeps (and their local copies); avoid `js-polyfills`
246 in favor of Node `URL`/`URLSearchParams`
247
248[typeson-registry-sca-reverter](https://github.com/brettz9/typeson-registry-sca-reverter)
249
250## 3.10.0
251
252- Fix: Ensure multiEntry sorts address possibility of nested array
253 keys (Courtesy lgtm)
254- Fix: For interface tests, ensure properties are getter based
255- Refactoring: Factor out common interface code (making
256 `IDBRequest` and `IDBOpenRequest` listeners `enumerable` too)
257- Testing (W3C): Update web-platform-tests (including repo location)
258- Testing (W3C): Use new `idlharness.any.html` over `interfaces.any.html`
259- Travis: Update Node version (having issues with Yarn)
260- Docs: Remove Bower badge
261
262## 3.9.0
263
264- Fix: Upon converting value to key range, avoid creating new
265 `IDBKeyRange` instance when already existing (flagged by LGTM.com)
266- Refactoring: Avoid useless assignment (flagged by LGTM.com); object
267 destructuring
268- npm: Update devDeps
269- Linting (ESLint): Override new "standard" ESLint to prevent spacing
270 around object curly quotes; deprecated assert APIs
271
272## 3.8.0
273
274- npm: Update devDeps
275- npm: With updates to node-pre-gyp, rebuild `package-lock.json`; fixes #321
276- yarn: Update `yarn.lock`
277- Testing: Update `web-platform-tests`
278- Demo site: Update sinon version to work on rawgit.com
279
280## 3.7.0
281
282- npm: Update websql fork dep. (which updates sqlite3 to 4.0.0)
283- npm: Switch unicode-10.0.0 to devDep (with copy routine);
284 Fixes #323
285- npm: Update devDeps and `package-lock.json` (surface dependency
286 security fixes) (Temporary fix for #321 until Grunt
287 and node-pre-gyp->sqlite3(->websql) update)
288- Refactoring: Remove unnecessary `type=text/css`
289- Testing (Grunt): Fix clean-polyfill task (fixes #322)
290- Testing (Grunt): Replace phantom-qunit with puppeteer-qunit
291- Testing (QUnit): Fix issue with QUnit 2 (move sample data into test
292 starting file); see https://stackoverflow.com/a/38791824/271577
293 (fixes #324)
294- Testing: Update `web-platform-tests`
295
296## 3.6.2
297
298- Fix (Node): Respect the `databaseBasePath` setting for database
299 deletions (#319); test courtesy @mikelehen
300- Fix (Node): Error (and warning) in cleaning up memory database
301 resources (#320); test and fix courtesy @mikelehen
302- Fix/optimization (Node): Don't remove cache after success, but if using
303 cache, ensure getting last version and ensure async before
304 dispatching any version error
305- Refactoring: Avoid redundant `function` on object literals
306- npm: Fix web-platform-tests script
307
308## 3.6.1
309
310- Critical fix (Please upgrade from any previous 3.0.0 version):
311 Ensure unescaping done in SQL responses (and database names) always adds
312 back any literal `^` sequences. This loss could more easily happen for
313 database names (whenever the name had a sequence of 1 or more literal `^`
314 followed by a single `A` to `Z` (or `[\u0000-\u001F\u007F"*/:<>?\\|]`
315 or characters expanding on NFD normalization), but it could also happen
316 in general SQL responses (or database names) where there was a sequence
317 of 1 or more literal `^` followed by an unmatched surrogate (though this
318 should admittedly be unlikely for most users); this unescaping was meant
319 to build back unmatched surrogates (which are allowed in IndexedDB)
320 and the like which were unsafe for the SQLite engine used internally or
321 for the file system used for Node, but we were failing to add back the
322 `^` escape in such cases (which was used as an escape character).
323
324## 3.6.0
325
326- Refactoring/Fix: For default `escapeNFDForDatabaseNames` check, temporarily
327 circumvent current limitations in Babel until
328 <https://github.com/babel/babel/issues/5978> addressed; (see also
329 <https://github.com/axemclion/IndexedDBShim/issues/311#issuecomment-316090147>);
330 fixes #311
331- Linting: Expand ESLint file coverage and apply minor linting fix to test file
332- Testing: Update web-platform-tests and our tests accordingly
333- npm: Update `eventtargeter` to avoid automatic `Object.setPrototypeOf`
334 calls (make conditional on `CFG.fullIDLSupport`); fixes #313
335
336## 3.5.1
337
338- npm: Update `package-lock.json`
339- npm: Resume allowing Node versions 8.93 - 9.0.0
340- Docs: Put message in README about failure of one test as a known
341 issue for the above Node versions
342
343## 3.5.0
344
345- Breaking fix (through npm): Update typeson and typeson-registry
346 (ArrayBuffer, DataView, and typed arrays were not properly
347 preserving entire underlying buffer when only a portion used;
348 were also not restoring when buffers were reused cyclically
349 across an object)
350- npm: Update dev deps
351- Install: Update `yarn.lock`/`package-lock.json`
352- Testing (W3C): Update web-platform-tests
353
354## 3.4.0
355
356- Fix (minor): Return proper `indexedDB` object descriptor
357- npm: Update devDeps
358- npm: Update dep to unicode-10.0.0 (no practical difference)
359- Testing (W3C): Remove need for cheerio in build (use jsdom instead)
360- Testing (W3C): Update `web-platform-tests`
361
362## Version 3.3.1
363
364- Build: Switch from `devDependencies` to `dependencies` the following which
365 Node or custom rollups may require: eventtargeter, sync-promise,
366 typeson, typeson-registry, unicode-9.0.0
367
368## Version 3.3.0
369
370- Build: More complete `.npmignore` to exclude more files at root that we
371 don't need in distributions
372- Build: Amend `.npmignore` to allow for `src` inclusion (for those who
373 wish to rollup own (complete or partial) versions)
374- Build: Update file copies out of `node_modules` needed for Rawgit demo
375
376## Version 3.2.0
377
378- Fix: Deal with issue with Chrome/Node and `Number.MIN_VALUE` converting
379 to string
380- npm: Add `module` to `package.json` for potential use by Webpack/Rollup
381- npm: Limit engines to exclude Node 8.9.3 as having problems with Mocha
382 IDBIndex/openCursor-spec.js test
383 "should query multi-entry indexes with hundreds of records"; may be
384 other problematic versions but 7.7.4 and 9.2.1 are ok
385- npm (Build): Update devDeps including versioned `eventtargeter`, `typeson`,
386 and `typeson-registry`
387- npm (Build/Testing): Add missing `babel-core` devDep
388- npm (Build): Preserve LICENSE info in `npmignore` (and avoid redundant items)
389- npm (Testing): Add `web-platform-tests` and `sqlite-rebuild` scripts
390- npm (Testing): Update W3C test script to clean before beginning as well
391- Build: For Babel, use env over deprecated es2015; rebuild
392- Build: Add `yarn.lock`
393- Docs: Remove outdated polyfill info in README (babel-polyfill should cover)
394- Demo: Add example of IDBKeyUtils usage (not documented yet)
395- License: Rename files to include file extensions for Windows
396
397## Version 3.1.0
398
399- Fix: `update` and `delete` were invalidating the cache and thus
400 mistakenly incrementing cursor index; no longer invalidating the
401 (read-only) cache
402- Enhancement: As part of #283 on export improvements, provide build
403 process for `Key.js` file to function as standalone file (currently
404 targeted for Chrome)
405- Refactoring: In order to minimize build size for standalone `Key.js`,
406 move `cmp` out of `IDBFactory` and reference it.
407- npm: Update dev deps (including using harmony branch of
408 grunt-contrib-uglify for correct ES6 support)
409
410## Version 3.0.4
411
412- Fix (Edge case): For `IDBDatabase.transaction()` (`storeNames` arg),
413 `IDBDatabase.createObjectStore` (`keyPath` parameter), and
414 `IDBObjectStore.createIndex` (`keyPath` argument), ensure
415 conversion to DOMString (`ToString`) is being called per WebIDL
416 (e.g., passing `true` would produce a valid `"true"`) while still
417 throwing upon missing argument
418- Optimize: We didn't actually need structured cloning for keypaths as
419 keypaths are valid JSON (but we did need the edge cases handled
420 per the accompanying fix and the Typeson encoded as of 3.0.0 should
421 remain compatible with this reversion to JSON)
422- Refactoring (minor): Use ES6 object property name shorthand
423- npm: Update dev deps
424- Demo: Update copies of test files
425
426## Version 3.0.3
427
428- Fix: Avoid allowing (open-ended) escaped Unicode escape sequences
429 for key paths (JavaScript handles the escape sequences!).
430- Fix: Avoid double-escaping zero-width joiners/non-joiner in key
431 path check.
432- npm: Update dev deps
433
434## Version 3.0.2
435
436- Fix: Incorporate `typeson` library fix for periods within
437 property names; could create cloning issues
438- Linting: Update per linting software updates (indents)
439 though avoid `no-mulit-spaces` reporting (frequent in tests)
440- Linting: Update and apply ESLint compat plugin linting
441- npm: Update dev deps
442- npm: Avoid shrinkwrap for now, pending
443 <https://github.com/benmosher/eslint-plugin-import/pull/871>
444- Testing (W3C): Update `web-platform-tests`
445- Testing (W3C): Exclude new `large-nesting-cloning.js` file as preventing
446 some other tests from running; also remove `parallel-cursors.uprade.js`
447 from good tests as in timeouts (since it sometimes times out)
448- Docs (Testing): Update note on running W3C Node tests
449- Docs (README): Fixed first hyperlink not working (courtesy @Erwin)
450
451## Version 3.0.1
452
453- Update in case lagging `npm shrinkwrap` version causing any issues
454- Docs (README): Update version number and remove completed to-do
455- Testing: Update copies of Mocha/Chai/Sinon (for rawgit.com)
456- Testing (Grunt): Comment out cumbersome minified version updater
457- Testing (W3C): Revert from apparently problematic `cheerio` RC
458
459## Version 3.0.0
460
461Though we have tried to keep this accurate, some changes listed below might
462have been mistakenly ascribed to changes since the previous release whereas
463they were actually changes since a more recent version on `master`.
464
465- License: Add back missing MIT license
466- Security fix: Avoid SQL injection potential--ensure database, store and
467 index names are prefixed as SQLite columns to avoid conflict with built-in
468 columns; add test
469- Security fix: Ensure `LIKE` clauses escape special characters
470- Security fix: Escape SQLite-disallowed-for-column-names NUL characters from
471 database, store, and index names
472- Security fix: Escape/unescape NUL for safety with
473 node-websql->node-sqlite3 (part of fix for #274)
474- Security fix: Ensure quoting (for column names) escapes double quotes
475- Security fix: As per new requirements, ensure `IDBFactory` methods `open`,
476 `deleteDatabase` (and we do it for the non-standard
477 `webkitGetDatabaseNames` as well as it could relate to privacy) throw a
478 `SecurityError` `DOMException` if run from a `"null"` origin (unless the
479 new config `checkOrigin` is set to `false`); for Node, requires
480 `location` to be defined globally (could have some applications in Node,
481 too, e.g., if jsdom sets the origin for iframes)
482- Breaking refactoring with consequences for old data: prefix store/index
483 names with "S_" instead of "s_" and "I_" instead of "_" (consistent
484 with casing of "D_" though SQLite insensitive with ASCII while file
485 systems may be sensitive; more future-compatible)
486- Breaking change: Avoid encoding `keyPath` internally as JSON--needs
487 Sca encoding; ~breaks all tables but important to fix!~
488 _Shouldn't have broken tables as supplied keypaths should only have
489 produced Typeson that is JSON; other breaking db changes were needed
490 in this version, however_
491- Breaking change/Fix: Remove `IDBTransaction` mode constants and tests since
492 now being removed from IndexedDB
493- Breaking change: Remove old `polyfill.js` code for incrementally
494 plugging browsers with incomplete support (has not been tested for a long
495 time and had perhaps not been properly kept up to date anyways); one
496 can still use IndexedDBShim to replace the whole implementation, however.
497- Breaking change: Throw if database name is too long, defaulting to 254 (part
498 of fix for #274) (enforcing compatibility with Node, given our mapping it to
499 file naming on common file systems)
500- Breaking change: If you were overriding/monkey-patching globals, these are
501 no longer available with a shift to ES6 modules (see below). The `CFG.js`
502 module can be imported in its place to change the default values, however.
503- Breaking fix for existing data: Give comparisons/storage of arrays
504 higher priority over binary (arrays already existing in storage
505 will not benefit from this until re-encoded, however)
506- Breaking fix for existing data: Change encoding of key types so any future
507 key types can be fitted into the proper place for sorting precedence
508- Breaking change (minor): Change "modules" property of `IDBFactory` to only
509 expose `DOMException`, `Event`, and `IDBFactory` (replacing the former
510 use of `idbModules` with ES6 modules and a CFG module for the globals:
511 see below)
512- Breaking change (minor): Change "eval" to "evaluate" in exception message
513 for bad key from `keyPath`
514- Breaking change (minor): Remove unneeded `DOMError` methods
515- Breaking change (minor): As moved away from SQL offsets for `IDBCursor`
516 retrieval, remove `__lastKeyContinued` property (we can use `__key`);
517 also remove unused `__multiEntryOffset`
518- Deprecate: Numeric constants as second arguments to
519 `IDBDatabase.prototype.transaction` (use `readonly`/`readwrite` instead).
520- Enhancement: Add config to allow user to override `escapeDatabaseName`
521 function (and for convenience, `unescapeDatabaseName`) or to keep
522 it but configure its new config subcomponents,
523 `databaseCharacterBlacklist` and/or `databaseNameLengthLimit`
524 (part of fix for #274)
525- Enhancement: Throw upon receiving bad config property in config methods
526- Enhancement: Allow initial config object to `setGlobalVars`
527 (e.g., for setting an early `CFG.win` value)
528- Enhancement: Allow non-invasive browser build (inspired
529 by @bolasblack's fork)
530- Enhancement: Add non-standard `webkitGetDatabaseNames` and test file (issue #223)
531- Enhancement: Allow `DEFAULT_DB_SIZE` to be set via `CFG.js`;
532- Enhancement: `IDBIndex` methods, `get`, `getKey`, `count` to allow obtaining
533 first record of an `IDBKeyRange` (or `IDBKeyRange`-like range) and change
534 error messages to indicate "key or range"
535- Enhancement: Support Node cleanly via `websql` SQLite3 library including
536 customization of SQLite `busyTimeout`, `trace` and `profile`
537- Enhancement: Add `IDBObjectStore.openKeyCursor`
538- Enhancement: Add `IDBKeyRange.includes()` with test
539- Enhancement: Allow ranges to be passed to `IDBObjectStore.get` and
540 `IDBObjectStore.delete()`
541- Enhancement: Allow key argument with `IDBCursor.continue`.
542- Enhancement: Key value retrieval: Allow "length" type key
543- Enhancement: Add ".sqlite" extension to database name for sake of (Windows)
544 file type identification
545- Enhancement: Expose `__setConfig(prop, val)` method for setting pseudo-global
546 property used internally for config and `shimIndexedDB.__getConfig()`
547 to read
548- Enhancement: Expose `__setUnicodeIdentifiers()` for setting Unicode
549 regular expression strings for full key path validation compliance (could
550 slow loading/performance as depends on large regular expressions)
551- Enhancement: Implement `IDBTransaction.objectStoreNames`
552- Enhancement: Add `IDBObjectStore.name` and `IDBIndex.name` setters
553- Enhancement: Add various missing lesser event properties (`NONE`,
554 `CAPTURING_PHASE`, `AT_TARGET`, `BUBBLING_PHASE`) and initialize readonly
555 `target`, `currentTarget`, `defaultPrevented`, `isTrusted`.
556- Enhancement: Utilize `EventTarget` to invoke `dispatchEvent` to allow
557 invocation of multiple listeners as by `addEventListener` (not
558 yet treating bubbling or `preventDefault`); change `ShimEvent` to utilize
559 polyfill from `eventtarget`
560- Enhancement: Expose `ShimDOMStringList` on `indexedDB.modules` for
561 sake of tests (the former also renamed internally for interfaces
562 testing); we may deprecate `indexedDB.modules` however, as
563 `CFG.addNonIDBGlobals` is now allowing export
564- Enhancement: Add new `CFG` property, `addNonIDBGlobals`, to allow
565 polyfilling non-IndexedDB interfaces used internally (and needed
566 potentially for testing); `ShimDOMStringList`, `ShimDOMException`,
567 `ShimEvent`, `ShimCustomEvent`, and `ShimEventTarget`
568- Enhancement: Add non-standard `sqlError` property to `DOMException`
569 for facilitating debugging
570- Enhancement: Export `ShimCustomEvent` and `ShimEventTarget` shims we
571 are using on `IDBFactory.modules` for sake of testing checks
572- Enhancement: Add `addSQLiteExtension` config to add ".sqlite" to user
573 databases, taking it into account when throwing against any file
574 length limits
575- Enhancement: Add `deleteDatabaseFiles` config to allow file itself to
576 be deleted in Node; will throw `UnknownError` if there are any errors
577 removing file (besides a missing file)
578- Enhancement: Make addition of `.sqlite` extension to `__sysdb__` conditional
579 on `CFG.addSQLiteExtension` setting
580- Enhancement: Support `autoName` config to interpret empty string name as a
581 cue for creating a database name automatically (introspect on
582 `IDBDatabase.name` to get the actual name used) (untested)
583- Enhancement: Support `memoryDatabase` config to cause all opening, deleting,
584 and listing to be of SQLite in-memory databases (for Node); name supplied
585 by user is still used (including to automatically build a cache since
586 SQLite does not allow naming of in-memory databases); the name is also
587 accessible to `IDBFactory.webkitGetDatabaseNames()`; causes database
588 name/version tracking to also be within an in-memory database; part of
589 #278 (untested); builds on work by @ThomasGreiner)
590- Enhancement: Support `cacheDatabaseInstances` config to ensure that any
591 repeat `IDBFactory.open` call to the same name and version (assuming
592 no deletes or aborts causing rollbacks) will reuse the same SQLite
593 `openDatabase` instance
594- Enhancement: Add `useSQLiteIndexes` option to add (and drop) SQLite
595 indexes where utilized (#210)
596- Enhancement: Provide `avoidAutoShim` option (#270)
597- Enhancement: Provide `shimIndexedDB.__setConnectionQueueOrigin()` utility
598- Add missing API: Add `IDBCursor.continuePrimaryKey`
599- Add missing API: Implement `IDBObjectStore.getKey`
600- Add missing APIs: Implement `IDBIndex.getAll/getAllKeys`
601- Add missing APIs: Implement `IDBObjectStore.getAll`,
602 `IDBObjectStore.getAllKeys`
603- Add missing API: Binary keys
604- Add missing API: `versionchange` and `blocked` events (currently assumes
605 single process)
606- Fix: Ensure `IDBKeyRange`'s `lower` and `upper` get round-tripped
607 key-encoded (e.g., to ensure a `DataView` gets converted into
608 an `ArrayBuffer`)
609- Fix: Avoid `continue` errors upon multiEntry checks with open-ended ranges
610- Fix: Ensure `deleteDatabase` SQLite execution errors (not only
611 its transaction errors) are properly surfaced (probably shouldn't
612 occur once we implement blocking transactions anyways, but
613 should resolve in case such errors may occur)
614- Fix: Add error codes on `DOMException`'s for sake of
615 web-platform-tests' testharness.js even though new spec does not
616 list the codes and `code` is listed on MDN as no longer being set
617 on new exceptions
618- Fix: Ensure `AbortError` sent to `IDBOpenDBRequest.onerror` upon a
619 transaction aborting or a connection being closed within an upgrade
620 transaction
621- Fix: Set `IDBOpenDBRequest.transaction` to `null` upon `AbortError` due to
622 closed connection
623- Fix: Set `error` property of `IDBTransaction` for certain tx aborts
624- Fix: 'error' and 'abort' bubbling events
625 ((`IDBRequest`->) `IDBTransaction`->`IDBDatabase`),
626 including reuse of same event object upon propagation and potential
627 for cancellation as appropriate; used within `IDBTransaction` and
628 potentially within `IDBFactory`
629- Fix: Set `readyState` to "done", `result` to `undefined`, and `error`
630 to a new `AbortError` on each request when aborting a transaction
631- Fix: Set transaction active flag on while dispatching success/error
632 events
633- Fix: Abort transaction upon request "success" handler throwing or
634 "error" handler throwing or "error" event not being prevented
635- Fix: Trigger queue of "error"-type events on all unfinished
636 requests during transaction abort (then "abort" type event on
637 transaction)
638- Fix: Avoid adding `DOMException` class when error not found (should
639 not occur?)
640- Fix (minor): Avoid defaulting to `DOMException` class for error
641 instances in `IDBFactory`
642- Fix: Unknown problems creating/deleting object stores or indexes
643 should have `UnknownError` `DOMException` name (and fail through events)
644- Fix: Report `ConstraintError` if attempting to add a unique index when
645 existing values are not unique
646- Fix: Ensure IndexedDB `DOMException` is returned for `IDBFactory`
647 method errors instead of WebSQL errors
648- Fix: Use `AbortError` as `IDBTransaction.error` property when
649 "error" handler throws
650- Fix: If transaction already aborted, avoid potential for
651 request errors firing
652- Fix: If transaction already aborted, avoid running further
653 request callbacks or success/error events
654- Fix: Throw for `IDBRequest` or `IDBOpenDBRequest` with `result`
655 and `error` getters if request not yet done
656- Fix: Ensure `IDBOpenDBRequest` `result` is set to `undefined` upon
657 erring
658- Fix: Ensure `IDBOpenDBRequest` `transaction` is set to `null` upon
659 completing or aborting
660- Fix: Add duck-typing `instanceof` mechanism for `ShimEvent`
661- Fix: Change type to "abort" for transaction abort events
662- Fix: Set `readyState` for successful `IDBFactory.deleteDatabase`
663 and `IDBFactory.webkitGetDatabaseNames`
664- Fix: If calling `deleteDatabase` on non-existing database,
665 ensure `oldVersion` is 0 (not `null`)
666- Fix: Set `readyState` to 'pending' for `IDBCursor` `continue`/`advance`
667- Fix: Avoid adding requests with success events for
668 `createObjectStore`/`deleteObjectStore`/`createIndex`/`deleteIndex`
669 and store/index renaming
670- Fix: Avoid firing multiple `success` events with `IDBFactory.open`
671- Fix: Return appropriate IndexedDB error object instead of WebSQL error
672 object; fixes #27
673- Fix: For `IDBCursor`, move from SQL offsets to utilization of last key as
674 per spec (and as needed for discovering any db modifications)
675- Fix: In conjunction with `IDBCursor` `continue` and `advance` caching,
676 trigger cache resets/changes (for `IDBCursor`: `delete`, `update`
677 and for `IDBObjectStore`: `add`, `put`, `delete`, `clear`);
678- Fix: Cause `IDBCursor.advance` to properly handle unique values (and also
679 take advantage of caching)
680- Fix: `IDBCursor` key-based `continue` to be direction-sensitive
681- Fix: `IDBCursor` request source should be store or index, not cursor
682- Fix: stores cursor
683- Fix: Avoid `cursor.update` always getting next key
684- (Fix: Avoid storing cursor (for `IDBObjectStore.count`) if will be no cache)
685- Fix: In Safari, default DEFAULT_DB_SIZE to a higher value
686 (25 * 1024 * 1024); fixes #115
687- Fix: Properly implement and utilize `IDBCursorWithValue`
688- Fix: Use latest draft spec's (and implementations') use of `DOMException`
689 instead of `DOMError`
690- Fix: Replace `instanceof` checks with `Array.isArray()` for arrays and
691 with duck-typing otherwise (for reliability with cross-window/module data)
692- Fix: For `advance`/`continue`, throw if the cursor source or effective
693 object store has been deleted
694- Fix: Ensure will throw when "got value flag" is unset during call to
695 `continue` or `advance`
696- Fix: Ensure "prev" cursor will iterate in descending order on primary key
697 (sort by keyPath-indicated value then primary key)
698- Fix: Allow empty string keyPath for index to return value as is (for
699 handling non-object values as keys)
700- Fix: For `IDBCursor.advance`, better range enforcement
701- Fix: Ensure the error thrown for a count `<=0` to `advance()` is a genuine
702 `TypeError`
703- Fix: Ensure other bad counts passed to `advance()` (non-numbers or non-finite
704 numbers) throw `TypeError` as per W3C tests (even though the spec is
705 silent on bad counts except for count=0)
706- Fix: Add transaction to `IDBCursor` request
707- Fix: Update keyRange behavior and tests to reflect draft spec
708- Fix: Allow `__versionTransaction` not to exist (if user calling it wrong)
709 for `create/deleteObjectStore` and test it so it will return an
710 `InvalidStateError`
711- Fix: Avoid `LIKE` check on auto-increment sequence check (could be store
712 name inside another store name);
713- Fix: Ensure numeric keys passed to `add()` or `put()` on an auto-increment
714 store which are greater or equal to the "current number" will update
715 the auto-increment counter
716- Fix: Ensure a keyPath added numeric auto-increment key will update the
717 auto-increment counter
718- Fix: Avoid potential problem with data insertion if an index were named "key"
719- Fix: Throw `TypeError` on `IDBKeyRange` methods with inadequate
720 arguments and `DataError`-type `DOMException` with explicit
721 `undefined`
722- Fix: If `lower` is greater than the `upper` argument to `IDBKeyRange.bound`,
723 throw a `DataError`
724- Fix: Throw `DataError` upon continuing the cursor in an unexpected direction
725- Fix: Key validation: Avoid circular arrays
726- Fix: Key validation: Disallow Dates with NaN as \[\[DateValue]]
727- Fix: Ensure validation occurs for indexes before storage
728- Fix: Implement `IDBVersionChangeEvent` properly and utilize to allow
729 `instanceof` checks
730- Fix: Sort properly for next/prev(unique) (potentially by key,
731 primary key, (position,) obj. store position)
732- Fix: Be safe in quoting "key" column (reserved SQLite word)
733- Fix: For all public methods, seek to ensure error checking occurs in
734 spec order and add missing checks
735- Fix: Throw for `IDBCursor.update/delete` if transaction not active,
736 if source or effective object store deleted, if got value not set,
737 or if a key method has been invoked
738- Fix: Throw `DataCloneError` if `IDBCursor.update` value is not
739 clonable by the Structured Cloning Algorithm
740- Fix: Improve structured cloning checking by using cyclonejs (not
741 currently used for cloning though could be used elsewhere where
742 not needed to be encoded); also avoid use of JSON.stringify
743 which only works on a subset of SCA
744- Fix: Throw `TypeError` if call to `update()` has no arguments
745- Fix: Allow empty string key path to be utilized when validating
746 `add`/`put` input
747- Fix: Avoid iterating duplicate key values for unique iterations
748- Fix: Ensure `IDBRequest.error` returns `null` rather than `undefined` upon
749 success event
750- Fix: Readonly
751 - Make `indexedDB` readonly
752 - Make `IDBCursor` properties, `key`, `primaryKey`, `direction`,
753 `source`, `value` readonly
754 - Make `IDBRequest` properties (`result`, `error`, `source`,
755 `transaction`, `readyState`) readonly
756 - Make `IDBDatabase` properties, `name`, `version`, and
757 `objectStoreNames` readonly
758 - Make `IDBKeyRange` properties, `lower`, `upper`, `lowerOpen`, and
759 `upperOpen` readonly, renaming cached range attributes
760 - Make `IDBTransaction` properties, `objectStoreNames`, `mode`, `db`,
761 and `error` readonly
762 - Make `IDBIndex` properties, `objectStore`, `keyPath`, `multiEntry`,
763 `unique` readonly
764 - Make `IDBObjectStore` properties, `keyPath`, `indexNames`,
765 `transaction`, `autoIncrement` readonly
766 - Ensure `keyPath` does not return same instance as passed in (if
767 an array)
768 - Make `ShimEvent` properties, `type`, `bubbles`, `cancelable`,
769 `eventPhase`, `timeStamp` readonly (and for native events, stop
770 making `target` writable)
771- Fix: Ensure `IDBIndex` properties, `multiEntry`, `unique` are always boolean
772- Fix: Ensure an `IDBTransaction.objectStore` call always returns the
773 same instance if for the same transaction
774- Fix: For `IDBTransaction.abort()`, throw `InvalidStateError` if
775 transaction not active
776- Fix: Ensure `IDBIndex` retrieval methods throw upon index or store being
777 deleted, upon transaction inactive
778- Fix: Allow `IDBIndex.count` to pass `null` as key
779- Fix: Throw if not in versionchange transaction when calling
780 `IDBDatabase.transaction`
781- Fix: Ensure `DOMException` variant of `SyntaxError` is thrown for
782 bad key paths
783- Fix: Handle (mistaken) arguments > 2 to `IDBFactory.open()`
784- Fix: In `IDBObjectStore` methods, throw upon transaction inactive;
785 fix checking error
786- Fix: In `IDBObjectStore.count`, allow `null` (as with `undefined`) to
787 indicate unbounded range
788- Fix: Correct `IDBRequest.source` to reflect `IDBCursor`, `IDBIndex`,
789 or `IDBObjectStore` as appropriate
790- Fix: Prevent race condition error if attempting to find indexes during
791 insertion when index creation has begun but not yet completed
792- Fix: Validate keyPath supplied to `createObjectStore`
793- Fix: Allow for empty string keyPath to `createObjectStore`
794- Fix: Clone options object passed to `createObjectStore`
795- Fix: Overcome lone surrogate limitation in
796 node-sqlite3/Python (see <http://bugs.python.org/issue12569> and
797 <http://stackoverflow.com/a/6701665/271577>)
798- Fix: For `createObjectStore`, throw if transaction is not active, or
799 if auto-increment with empty string or array key path
800- Fix: Ensure `__versionTransaction` set to `null` and set before `oncomplete`
801 so that `versionchange` checks inside `e.target.transaction.oncomplete`
802 within `onupgradeneeded` or inside `onsuccess` will fail (and thus will
803 attempts to create or delete object stores)
804- Fix: Throw InvalidStateError if store deleted (for `IDBObjectStore`
805 methods: `add`, `put`, `get`, `delete`, `clear`, `count`, `openCursor`,
806 `openKeyCursor`, `index`, `createIndex`, `deleteeIndex`)
807- Fix: For `IDBObjectStore.deleteIndex`, throw if not in upgrade
808 transaction or if transaction is inactive
809- Fix: For `IDBObjectStore.createIndex`, throw `SyntaxError` if not a
810 valid keyPath given
811- Fix: For `IDBObjectStore.createIndex`, throw if transaction not active
812- Fix: Apply `toString()` (and convert from sparse to dense) for
813 validation and utilization within key path arrays
814- Fix: Validate `IDBKeyRange`-like objects (e.g., passed to cursor methods)
815- Fix: Properly ensure with multiEntry conversions that array members which
816 fail validation as keys are ignored (and avoid adding duplicate members
817- Fix: Ensure `success` event does not fire if database has already been
818 closed (in `upgradeneeded`)
819- Fix: Make `length` on `DOMStringList` non-enumerable (impacts W3C tests
820 and also how implemented in Chrome)
821- Fix: Error checking for `DOMStringList` methods
822- Fix: Prevent non-numeric and `<= 1` keys from auto-incrementing current number
823- Fix: For generators, as per new requirements, ensure numbers
824 higher than the max (including non-finite) have the effect of
825 setting the current number to the max
826- Fix: For generators, handle numbers just beyond the max allowed by
827 ES since confusable if only incrementing by one
828- Fix: Default to `global` for IDB exports where no `window` or `self` is defined
829- Fix: Prevent incrementing if nevertheless valid key is lower than current
830 number
831- Fix: Ensure sorting of `StringList` (for `IDBDatabase.objectStoreNames`,
832 `IDBObjectStore.indexNames`)
833- Fix: Escape upper-case letters as table/column names case-insensitive in
834 SQLite, but db/store/index names not case-insensitive in IndexedDB
835- Fix: Add default option `escapeNFDForDatabaseNames` to
836 escape characters that expand on NFD normalization so as to avoid
837 accidental loss of precise Unicode code points and thus potential name
838 clashes on the Mac which does NFD normalization on the file system (user
839 should normalize themselves if they want normalization); part of #278
840- Fix: Stringify calls to `IDBDatabase.createObjectStore` and
841 `IDBObjectstore.createIndex` as per W3C tests
842- Fix: Avoid setting `source` for `open` request, as, per new spec, it is
843 to always be `null`
844- Fix: Ensure cloning value before as well as after key evaluated (otherwise,
845 original object will be modified)
846- Fix: Check for array on range within multiEntry cursor iteration; fixes
847 issue #222
848- Fix: Copy SQLite row `item` object properties (for Safari); fixes issue #261
849- Fix: Genuinely rollback version in Node
850 - Wrap all possible `openDatabase` operations, including version changes
851 into an effectively single transaction;
852 - Revert `IDBDatabase` `version` and `objectStoreNames`; `IDBObjectStore`
853 `name` and `indexNames`; `IDBTransaction` `objectStoreNames`, and
854 `IDBIndex` `name` properties after aborted transactions;
855 - Allow `dbVersions` table insert to be undone in one transaction
856 (also avoids second query);
857 - If connection closed or errs, rollback; otherwise, commit only after
858 transaction finished;
859 - Reimplement `deleteDatabase` to delete from `dbVersions` first and
860 rollback everything if there is a failure
861- Fix: In browser, only version can be consistently rolled back since we
862 can't extend WebSQL transaction expiration (and thus force an error to
863 get auto-rollback given that ROLLBACK is not supported)
864- Fix: Destroy index entries from index set upon store deletion and
865 still allow recreation of store handles (but not removing whole
866 clone record, allowing its properties to still be examined)
867- Fix: Ensure `createObjectStore`/`createIndex` return same handles as
868 `objectStore`/`index` methods
869- Fix: Avoid resetting store name if the store already existed before an
870 upgrade transaction (per W3C test `idbobjectstore-rename-abort.html`)
871- Fix: Ensure `IDBTransaction.objectStoreNames` is always a `DOMStringList`
872 even when user supplies arrays
873- Fix: As per spec, `DELETE` then `INSERT` rather than `UPDATE` for
874 `IDBCursor.update`
875- Fix: Add support for new "closed" event via a custom
876 `IDBFactory.__forceClose()` method (untested)
877- Fix: Do not set got value flag if end of iteration (and also avoid
878 setting irrelevant got value flag on count cursors)
879- Fix: Closing the database in an upgrade transaction should not
880 prevent execution of the `oncomplete` handler (though an `AbortError`
881 will subsequently occur)
882- Fix: Allow `IDBFactory.open()` to accept explicit `undefined` version
883- Fix: Round down version in `IDBFactory.open()`
884- Fix: Ensure store names passed into `IDBDatabase.transaction` are stored
885 as unique names and are sorted
886- Fix: Add `Symbol.toStringTag` (or `toString`) to `IDB*` classes for proper
887 `Object.prototype.toString.call`-type invocations checked in
888 W3C interface tests)
889- Fix: Throw precise and better ordered exceptions upon
890 non-strings or non-iterable objects or non-string sequences being
891 supplied as `storeNames` argument to `IDBDatabase.transaction` (as
892 should occur per WebIDL when converting to a
893 "DOMString or sequence\<DOMString\>");
894 see <https://heycam.github.io/webidl/#es-sequence>
895- Fix: Add iterator to `DOMStringList` as it should be convertable
896 to sequence\<DOMStringList\> per
897 <https://html.spec.whatwg.org/multipage/infrastructure.html#domstringlist>
898 and <https://infra.spec.whatwg.org/#list-iterate>
899- Fix: Make `DOMStringList` non-enumerable but configurable
900- Fix: Interface changes for `DOMStringList`: illegal constructor, length
901 enumerable, `instanceof` override
902- Fix: WebIDL-based changes, including:
903 1) new `CFG` option `fullIDLSupport` to avoid expensive
904 `setPrototypeOf` by default;
905 2) Illegal constructor and `prototype` invocation (while allowing
906 normal access)
907 3) Make `prototype` non-writable as appropriate
908 4) Ensure `constructor` set on `prototype` as appropriate
909 5) Proper `Symbol.toStringTag` and `toString` exposure on
910 classes and prototypes
911 6) Use `arguments` object in place of some function parameters
912 to get proper function lengths
913 7) Set properties to appropriate `enumerable`/`configurable`
914 8) Set proper inheritance hierarchy, including to `EventTarget` or
915 `Event`
916- Fix: Properly report global shimming errors when setting a readonly
917 failed and `Object.defineProperty` is not present
918- Fix: As per spec, check whether transaction is finished for
919 `IDBDatabase` (`createObjectStore`, `deleteObjectStore`),
920 `IDBObjectStore.index`, `IDBTransaction` (`objectStore`, `abort`),
921 and not merely whether it is active
922- Fix: Improve evaluate key path splitting of identifier algorithm
923- Fix: Ensure extraction of key value from value using key path algorithm
924 is applied during ignoring of bad indexes of storage and during
925 checks for storing operations
926- Fix: Better `IDBIndex` (`openCursor`, `openKeyCursor`, `count`,
927 `get*`) range validation
928- Fix: Disallow invocation of `webkitGetDatabaseNames` on
929 `IDBFactory.prototype`
930- Fix: Throw synchronously if won't be able to inject into a value (thereby
931 avoiding the need to check during the injection); assumes
932 PR https://github.com/w3c/IndexedDB/pull/146
933- Fix: Make `DataError` message more accurate for cursor key path
934 resolution failures
935- Fix: Ensure non-numeric/non-finite or `< 1` keys can be stored as
936 per spec even though not changing the current number
937- Fix: Allow iterables where `sequence<DOMString>` is accepted
938 (`IDBDatabase.createObjectStore`, `IDBObjectStore.createIndex`,
939 `IDBDatabase.transaction`)
940- Fix: Avoid modifying the supplied `createObjectStore` `createOptions`
941 object when `keyPath` is `undefined`
942- Fix: For `IDBDatabase.transaction`, allow `ToString` to occur on
943 iterables
944- Fix: Tighten up `DOMException` shim to support legacy constants per
945 W3C tests and better follow W3C interface expectations
946- Fix: Improve precision of `util.isFile` and have
947 `util.isBlob` fail with files but support non-file Blobs
948- Fix: Clone before checking against key path (`IDBObjectStore`
949 (`put`, `add`) and `IDBCursor.update`)
950- Fix: Avoid `eval()` in cloning (issue #211, #236)
951- Fix: Support cyclic values via typeson/typeson-registry (#267)
952- Fix: Distinguish deleted and pending deleted stores and indexes;
953 for insertion operations, do index checks independent of
954 `indexNames` in case subsequently deleted by `deleteIndex` (#276)
955- Fix: Ensure same index instance object returned for same store object and
956 index name
957- Fix: Better error reporting for `IDBRequest.error` or `IDBRequest.result`
958 errors.
959- Fix: Throw `InvalidStateError` `DOMException` upon deleted object store or index for:
960 1. cursor-related operations
961 1. index and store name setters
962 1. index and store get or manipulation operations
963 1. index creation, deletion, or retrieval operations
964- Fix: Ensure will throw `InvalidStateError` `DOMException` as with deleted
965 object stores or indexes for access after an aborted transaction when
966 there were pending object stores or indexes to be created
967- Fix: Cause not finished assertions to fire even if at beginning of abort except for
968 `IDBDatabase` `createObjectStore`/`deleteObjectStore` which per corrected
969 spec throw different error upon (incompletely) finished check
970- Fix `IDBDatabase.createObjectStore` exception order fix (object store
971 `ConstraintError` check follows key path `SyntaxError` check)
972- Fix `IDBDatabase.transaction` exception order fixes (`InvalidAccessError`
973 follows `InvalidStateError` version change check, `InvalidStateError`
974 closed check, and `NotFoundError` object store check); `TypeError` mode
975 check per newly corrected spec behavior, to follow all other exception
976 checks
977- Fix: Close connection on abort (setting closed flag)
978- Fix: Have `deleteDatabase` empty relevant `connections` (relevant
979 for `__forceClose` as well as `open`)
980- Fix: Change `VARCHAR(255)` to `BLOB` for database and store name
981 fields as may be longer (for db names, if
982 `databaseNameLengthLimit` is higher than default)
983- Fix: Upon upgrade transaction abort, attempt to clean up other resources
984 (remove memory database or remove/empty database file if no prior versions)
985- Fix: Ensure escaping of unmatched surrogates occurs in all SQLite statements
986 as needed by Chrome (but not Node) (noted in failed dropping of tables)
987- Fix: Revert current number if operation fails (even if not aborting)
988- Fix: Avoid reporting abort errors on duplicates of same request in
989 transaction queue (ensures subsequent unsetting of cursor request done
990 flag does not return additional error results in an abort error)
991- Repo files: Rename test folders for ease in distinguishing
992- Optimize: Only retrieve required SQLite columns
993- Optimize: Have `IDBObjectStore` and `IDBIndex`'s `get` and
994 `getKey` only retrieve one record from SQLite
995- Optimize: use WebSQL `readTransaction` as possible/when in `readonly` mode
996- Optimize: Run SELECT only on columns we need
997- Optimize: Avoid caching and other processing in `IDBCursor` multiEntry
998 finds (used by `IDBObjectStore` or `IDBIndex` `count` with key range)
999- Optimize: Switch to `SyncPromise` for faster execution
1000- Optimize: Avoid redundant key->value checks and redundant cloning
1001- Optimize: Avoid cloning key when already a primitive
1002- Refactoring: Replace Node-deprecated `GLOBAL` with `global`
1003- Refactoring: Rename internal escaping/unescaping functions to semantic
1004 names and add further documentation
1005- Refactoring (Avoid globals): Change from using window global to a CFG module
1006 for better maintainability
1007- Refactoring (Avoid deprecated): Avoid deprecated `unescape`
1008- Refactoring (ES6): Add Babel with ES6 module support for imports and add
1009 to ESLint
1010- Refactoring (ES6): Move to ES6 modules with babel/browserify (for
1011 immediately clear semantics and cruft removal), removing 'use strict'
1012 (redundant for modules) and remove build.js
1013- Refactoring (ES6): Use `const` where possible, and `let` otherwise and
1014 add as ESLint rules, other minor changes
1015- Refactoring (ESLint): Move from JSHint to ESLint and to "standard" config,
1016 with a few exceptions
1017- Refactoring (spec parity): Use same naming/return of methods in spec
1018- Refactoring (spec parity): Implement `convertKeyToValue` (not in use internally)
1019- Refactoring (spec parity): Extract steps for storing a record (affecting
1020 `IDBCursor.update` and `IDBObjectStore`'s `put`/`add`)
1021- Refactoring (spec parity): Perform auto-increment in spec order (should be of
1022 no consequence to the user, however)
1023- Refactoring (spec parity): Rename `Key.getValue` to `Key.evaluateKeyPathOnValue`
1024- Refactoring (spec parity): Rename and repurpose `Key.validate` to
1025 `Key.convertValueToKey` (also paralleling terminology in the spec),
1026 also supporting multiEntry argument
1027- Refactoring (spec parity): Make current number retrieval routines more closely
1028 parallel spec
1029- Refactoring (spec parity): Mirror recent minor spec changes re:
1030 bubbling/cancelable `IDBFactory` error events
1031- Refactoring (SQL): Quoting columns consistently for SQLite
1032- Refactoring (SQL): Make SQL-relationship clearer for method names (escaping)
1033- Refactoring (SQL): upper-case SQL keywords for greater visual distinction
1034- Refactoring: Where safe, switch from `typeof ... === 'undefined'` to
1035 check against undefined (safe for strict mode implicit in modules)
1036- Refactoring: Use spread operator in place of `arguments` where named
1037 args not needed (also may be more future-proof)
1038- Refactoring: Have `setSQLForRange` handle key encoding
1039- Refactoring: `isObj` utility, further use of `Array.isArray()`
1040- Refactoring: Key value retrieval: Avoid `eval()` (#211, #236)
1041- Refactoring: Use ES6 classes for cleaner inheritance
1042- Refactoring: Avoid JSON methods upon each `objectStore`/`createObjectStore`
1043 call in favor of one-time in `IDBDatabase`
1044- Refactoring: Replace SQLite auto-increment with our own table since
1045 SQLite's own apparently cannot be decremented successfully;
1046 also rename to spec "current number"
1047- Refactoring: Avoid using native events, as we need to let `EventTarget`
1048 alter its readonly `target`, `currentTarget`, etc. properties
1049- Refactoring: Throw count 0 error differently from negative count in
1050 `IDBCursor.advance`
1051- Refactoring: Put `DOMStringList` and `IDBVersionChangeEvent` into own
1052 files
1053- Updating: Bump various `devDependency` min versions
1054- Docs: List known issues on README
1055- Docs: Notice on deprecation for transaction mode constants
1056- Docs: Update summarization of npm testing info
1057- Docs: Distinguish `dependencies`/`devDependencies` display on README
1058- npm: Update packages
1059- Testing: Update tests per current spec and behavior
1060- Testing: Ensure db closes after each test to allow non-blocking `open()`
1061 (was affecting testing)
1062- Testing: Work on Node tests and for Firefox (including increasing timeouts
1063 as needed)
1064- Testing: Rely on `node_modules` paths for testing framework files
1065- Testing (browser index): Update links to test cases
1066- Testing (ESLint): Add compat plugin for browser feature testing
1067- Testing (fakeIndexedDB.js): Comment out non-standard property checks
1068- Testing (mock): Update IndexedDBMock tests
1069- Testing (mock): Expect `InvalidStateError` instead of `ConstraintError`
1070 when not in an upgrade transaction calling `createObjectStore`
1071- Testing (mock): Fix for `blocked` event's expected `newVersion` (submitted
1072 fix as <https://github.com/kristofdegrave/indexedDBmock/pull/2>)
1073- Testing (W3C Old): Fix global
1074- Testing (W3C Old): Bump timeout for browser key validity tests
1075- Testing (W3C Old): `IDBFactory.open` tests to do more flexible
1076 `instanceof` checks;
1077- Testing (W3C Old): Fix test to reflect latest draft spec -- see <https://github.com/brettz9/web-platform-tests/pull/1>
1078- Testing (W3C Old): Cause recursive value test not to be skipped
1079- Testing (W3C Old): Change example to expect `ConstraintError` (since object
1080 store already existing per test)--though perhaps should ensure it is
1081 not yet existing
1082- Testing (W3C Old): Ensure `DOMException` variant of `SyntaxError` is checked
1083- Testing (W3C Old): Increase timeout for Node testing `createObjectStore`'s
1084 `IDBObjectStoreParameters` test and IDBCursorBehavior's
1085 `IDBCursor.direction`
1086- Testing (W3C Old): Utilize Unicode in `KeyPath.js` test
1087- Testing (W3C Old): Update w3c-old to work with browser
1088- Testing (W3C Old): Fix a few globals, increase test timeouts for
1089 browser, allow array-like properties as per original tests
1090- Testing (W3C Old): Update tests per latest behavior as far as throwing
1091 `InvalidStateError` for deleted object stores or indexes
1092- Test scaffolding (W3C Old): Fix args to `initionalSituation()`
1093- Test scaffolding (W3C Old): Fix test ok condition, typo
1094- Test scaffolding (W3C Old): Fix assertions
1095- Testing (W3C): Add new preliminary testing framework (mostly complete)
1096- Testing (W3C): Add separate tests for events and workers; also
1097 incorporate tests for `DOMStringList` and `DOMException`
1098- Testing (W3C Old): Fix `DOMStringList` API usage (failing on Safari)
1099- Testing (W3C Old): Partly update `TransactionBehavior.js` tests to
1100 ensure `objectStoreNames` are compared as arrays
1101- (Testing)
1102 (Unless stated otherwise, "Browser" below refers to Safari 10.1 and
1103 Chrome 57.0.2987.133 (64-bit); note that both browsers (especially
1104 Safari may require re-running tests or running the tests as individual
1105 groups)
1106
1107 From tests-qunit (Node and browser), all tests are now passing.
1108
1109 From tests-mocha (Node), all tests are now passing.
1110 From tests-mocha (Browser), all tests are now passing except:
1111 1. in Chrome: `IDBFactory.cmp` `simple keys->should compare two numbers` due to an apparent `Number.MIN_VALUE` problem as [described here](http://stackoverflow.com/questions/43305403/number-min-value-and-tostring).
1112 (Note: This is no longer occurring at least as of Chrome 69.)
1113
1114 From fakeIndexedDB (Node), all tests now passing.
1115 From fakeIndexedDB (Browser), only the first test is
1116 passing (as expected due to rollback limitations);
1117
1118 From indexedDBmock (Node and browser), all tests are now passing.
1119 (see <https://github.com/kristofdegrave/indexedDBmock/compare/f6cdf451769827e13c746984b820096b0de3ac6d...master>
1120 for any new changes to add to tests).
1121
1122 From old W3C (Node and browser), all tests are now passing.
1123
1124 From new W3C (Node):
1125 See [`/test-support/node-good-bad-files.js`](test-support/node-good-bad-files.js)
1126 for the current test status on these tests.
1127
1128 From new W3C (Browser):
1129 Individual tests can be run as per [TESTING](docs/TESTING.md).
1130 See [node-good-bad-files.js](test-support/node-good-bad-files.js)
1131 for the current test status on these tests.
1132
1133- Testing (Grunt): Force ESLint (since "standard" currently causing a warning)
1134- Testing (Grunt): More granular uglification, add build-browser,
1135 dev-browser, Unicode watching
1136- Testing (Grunt): Add Node-specific, Unicode-specific build/dev commands
1137- Testing (Grunt): Clarify Grunt tasks, expand tasks for cleaning, make tests
1138 more granular
1139- Testing (Grunt): Remove now redundant `sourceMappingURL`, use
1140 `sourceMapName` per current specs
1141- Testing (Grunt): Add `uglify` to grunt watch task
1142- Testing (Grunt): Allow use of own sauce access key
1143- Testing (Grunt): Add task to avoid Saucelabs when running PhantomJS
1144- Testing (Grunt): Add assorted testing tasks
1145- Testing (Grunt): Update grunt-node-qunit to support latest QUnit
1146- Testing (Grunt): Get Saucelabs working (for Chrome and most of Firefox)
1147- Testing (Grunt): Log Saucelabs results
1148- Testing (Grunt): Work toward fixing source maps
1149- Testing (Grunt): Avoid missing grunt-cli message
1150- Testing (PhantomJS): Deal with PhantomJS error
1151- Testing (npm): Streamline test names; add convenience scripts
1152- Testing (QUnit): Upgrade QUnit refs
1153- Testing (QUnit): Minimize chances for QUnit random integer failure
1154- Testing (QUnit): Allow QUnit tests to pass when "Check for globals" enabled
1155 (put certain test code blocks in closures)
1156- Testing (QUnit): Separate out QUnit for sake of choosing between browser
1157 or Node testing, supporting node-qunit for Node testing
1158- Testing (QUnit): Upgrade to QUnit 2.0 API, lint test files
1159- Testing (QUnit): Add local copies of QUnit files
1160- Testing (QUnit): Allow `noanalytics=true` string in QUnit URL
1161 (slows down testing in China where Google is blocked)
1162- Testing (Mocha): Conditionally check for `indexedDB.modules` in case we
1163 are running tests without shim
1164- Testing improvement: Shim `Event` in Unicode test for parity (even
1165 if not needed in current tests)
1166- Testing (Mocha): Add missing `IDBKeyRange/includes-spec.js` to browser
1167 tests
1168- Testing (Mocha): Add Mocha tests to Grunt (along with clean-up) and add
1169 node-qunit for Node mocha testing
1170- Testing (Mocha): Allow passing in specific test files to mocha tests
1171- Testing (Mocha): Add test to ensure unique index checks are safely ignored
1172 with bad index keys
1173- Testing (Mocha): Rename test sets for distinguishing
1174- Testing (Mocha): Change fakeIndexedDB and indexedDBmock to Mocha tests
1175- Testing (Mocha): Increase default Mocha timeout to 5000ms (Chrome failing
1176 some at 2000ms as was Node occasionally); tweak as needed
1177- Testing (Mocha): Safari currently problematic with (old) Sinon code; avoid on
1178 error checks for Safari too
1179- Testing (Mocha): Fall back to genuine `Event`/`DOMException` when shims not
1180 present (if testing native)
1181- Testing (Cordova): Update Cordova testing (untested)