diff --git a/app/routes/application.js b/app/routes/application.js index 4d078f1b..1895f0e7 100644 --- a/app/routes/application.js +++ b/app/routes/application.js @@ -4,11 +4,14 @@ import { action } from '@ember/object'; export default class ApplicationRoute extends Route { + @service localData; @service logger; @service coms; - beforeModel () { + async beforeModel () { super.beforeModel(...arguments); + await this.localData.setDefaultValues(); + // See a list of allowed types in logger.js // Add or remove all your log types here: // this.logger.add('message'); diff --git a/app/routes/index.js b/app/routes/index.js index 491e0b9e..59266f37 100644 --- a/app/routes/index.js +++ b/app/routes/index.js @@ -1,14 +1,16 @@ import Route from '@ember/routing/route'; -import { storageFor as localStorageFor } from 'ember-local-storage'; -import config from 'hyperchannel/config/environment'; +import { inject as service } from '@ember/service'; +import { alias } from '@ember/object/computed'; export default class IndexRoute extends Route { - userSettings = localStorageFor('user-settings'); + @service localData; + @alias('localData.stores.userSettings') userSettings; - redirect () { - let currentSpace = this.userSettings.currentSpace || config.defaultSpaceId; - let currentChannel = this.userSettings.currentChannel || 'kosmos'; + async redirect () { + const currentSpace = await this.userSettings.getItem('currentSpace'); + const currentChannel = await this.userSettings.getItem('currentChannel'); + // TODO if current space from setting is not available, use first available space and channel if (currentSpace && currentChannel) { this.transitionTo('space.channel', currentSpace, currentChannel); diff --git a/app/routes/space/base_channel.js b/app/routes/space/base_channel.js index c307c2aa..a7ae2503 100644 --- a/app/routes/space/base_channel.js +++ b/app/routes/space/base_channel.js @@ -1,8 +1,8 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; +import { alias } from '@ember/object/computed'; import { scheduleOnce } from '@ember/runloop'; -import { storageFor as localStorageFor } from 'ember-local-storage'; function focusMessageInput() { if (window.innerWidth > 900) { @@ -15,7 +15,8 @@ function focusMessageInput() { export default class BaseChannelRoute extends Route { @service coms; - userSettings = localStorageFor('user-settings'); + @service localData; + @alias('localData.stores.userSettings') userSettings; model (params) { let space = this.modelFor('space'); @@ -35,12 +36,12 @@ export default class BaseChannelRoute extends Route { } @action - didTransition () { + async didTransition () { let space = this.modelFor('space'); let channel = this.controller.model; - this.userSettings.currentSpace = space.id; - this.userSettings.currentChannel = channel.slug; + await this.userSettings.setItem('currentSpace', space.id); + await this.userSettings.setItem('currentChannel', channel.slug); // Mark all other channels as inactive/invisible this.coms.spaces.forEach((space) => { diff --git a/app/services/coms.js b/app/services/coms.js index 019a67a2..bcdb7289 100644 --- a/app/services/coms.js +++ b/app/services/coms.js @@ -8,7 +8,6 @@ import UserChannel from 'hyperchannel/models/user_channel'; import Message from 'hyperchannel/models/message'; import config from 'hyperchannel/config/environment'; import moment from 'moment'; -import { storageFor as localStorageFor } from 'ember-local-storage'; import { tracked } from '@glimmer/tracking'; /** @@ -21,7 +20,6 @@ export default class ComsService extends Service { // Utils @service logger; // Data storage - @localStorageFor('user-settings') userSettings; @service('remotestorage') storage; // Message transport @service('sockethub-irc') irc; diff --git a/app/services/local-data.js b/app/services/local-data.js new file mode 100644 index 00000000..93f83548 --- /dev/null +++ b/app/services/local-data.js @@ -0,0 +1,38 @@ +import Service from '@ember/service'; +import { isEmpty } from '@ember/utils'; +import config from 'hyperchannel/config/environment'; +import * as localforage from 'localforage'; + +const defaultValues = { + userSettings: { + nickname: null, + currentSpace: config.defaultSpaceId, + currentChannel: 'kosmos' + } +}; + +export default class LocalDataService extends Service { + + constructor () { + super(...arguments); + this.stores = { + userSettings: localforage.createInstance({ + name: 'hyperchannel', storeName: 'userSettings' + }) + } + } + + async setDefaultValues () { + for (const storeName of Object.keys(defaultValues)) { + const store = this.stores[storeName]; + + for (const key of Object.keys(defaultValues[storeName])) { + const value = await store.getItem(key); + if (isEmpty(value)) { + await store.setItem(key, defaultValues[storeName][key]); + } + } + } + } + +} diff --git a/app/storages/user-settings.js b/app/storages/user-settings.js deleted file mode 100644 index d12b566f..00000000 --- a/app/storages/user-settings.js +++ /dev/null @@ -1,16 +0,0 @@ -import StorageObject from 'ember-local-storage/local/object'; -import config from 'hyperchannel/config/environment'; - -const Storage = StorageObject.extend(); - -Storage.reopenClass({ - initialState() { - return { - nickname: null, - currentSpace: config.defaultSpaceId, - currentChannel: 'kosmos' - }; - } -}); - -export default Storage; diff --git a/package-lock.json b/package-lock.json index b858684f..670ddb6d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,7 +41,6 @@ "ember-hammertime": "1.6.0", "ember-keyboard-shortcuts": "github:67P/ember-keyboard-shortcuts#feature/octane_classes", "ember-load-initializers": "^2.1.2", - "ember-local-storage": "^1.7.2", "ember-maybe-import-regenerator": "^0.1.6", "ember-moment": "^8.0.1", "ember-qunit": "^5.1.4", @@ -60,6 +59,7 @@ "linkifyjs": "^2.1.9", "liquid-fire": "^0.31.0", "loader.js": "^4.7.0", + "localforage": "^1.9.0", "npm-run-all": "^4.1.5", "postcss-scss": "^3.0.5", "qunit": "^2.15.0", @@ -4279,10 +4279,6 @@ }, "engines": { "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" } }, "node_modules/@csstools/postcss-sass/node_modules/postcss/node_modules/source-map": { @@ -4366,10 +4362,8 @@ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { + "graceful-fs": "^4.1.6", "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" } }, "node_modules/@ember-template-lint/todo-utils/node_modules/slash": { @@ -4429,9 +4423,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@ember/optional-features/node_modules/chalk": { @@ -4445,9 +4436,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@ember/optional-features/node_modules/color-convert": { @@ -4649,11 +4637,6 @@ }, "engines": { "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } } }, "node_modules/@ember/test-helpers/node_modules/glob": { @@ -4671,9 +4654,6 @@ }, "engines": { "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@ember/test-helpers/node_modules/matcher-collection": { @@ -4714,9 +4694,6 @@ }, "bin": { "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@ember/test-helpers/node_modules/walk-sync": { @@ -4947,11 +4924,6 @@ }, "engines": { "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } } }, "node_modules/@ember/test-waiters/node_modules/debug/node_modules/ms": { @@ -5013,9 +4985,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, "node_modules/@ember/test-waiters/node_modules/fs-extra": { @@ -5039,10 +5008,8 @@ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { + "graceful-fs": "^4.1.6", "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" } }, "node_modules/@ember/test-waiters/node_modules/fs-extra/node_modules/universalify": { @@ -6926,10 +6893,6 @@ "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/ajv-errors": { @@ -7350,34 +7313,6 @@ "node": ">= 4.5.0" } }, - "node_modules/autoprefixer": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.5.tgz", - "integrity": "sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA==", - "dev": true, - "peer": true, - "dependencies": { - "browserslist": "^4.16.3", - "caniuse-lite": "^1.0.30001196", - "colorette": "^1.2.2", - "fraction.js": "^4.0.13", - "normalize-range": "^0.1.2", - "postcss-value-parser": "^4.1.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -8496,9 +8431,6 @@ "dev": true, "engines": { "node": ">=0.8" - }, - "funding": { - "url": "https://bevry.me/fund" } }, "node_modules/bl": { @@ -8569,12 +8501,6 @@ "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", "dev": true }, - "node_modules/blob-polyfill": { - "version": "2.0.20171115", - "resolved": "https://registry.npmjs.org/blob-polyfill/-/blob-polyfill-2.0.20171115.tgz", - "integrity": "sha512-qHpuIpWlDLdOzSI9n1+423JL8c60Tbyyu/w4+zQIPCazvKBjf0sqQWiUS2QtyHph3S1C8m17T/jKyhv/DnnQFA==", - "dev": true - }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -9509,11 +9435,6 @@ }, "engines": { "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } } }, "node_modules/broccoli-postcss/node_modules/editions": { @@ -9527,9 +9448,6 @@ }, "engines": { "node": ">=0.8" - }, - "funding": { - "url": "https://bevry.me/fund" } }, "node_modules/broccoli-postcss/node_modules/fs-tree-diff": { @@ -9563,9 +9481,6 @@ }, "engines": { "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/broccoli-postcss/node_modules/istextorbinary": { @@ -9580,9 +9495,6 @@ }, "engines": { "node": ">=0.12" - }, - "funding": { - "url": "https://bevry.me/fund" } }, "node_modules/broccoli-postcss/node_modules/matcher-collection": { @@ -9620,9 +9532,6 @@ }, "bin": { "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/broccoli-postcss/node_modules/rsvp": { @@ -10320,10 +10229,6 @@ }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" } }, "node_modules/bser": { @@ -11754,10 +11659,6 @@ "dev": true, "engines": { "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" } }, "node_modules/date-time": { @@ -13587,7 +13488,6 @@ "integrity": "sha512-dN5ImjrjZevEqB7xhwFXaPWwxdKGSFiR1kqy9gDVB+A5EGnhCL1uveKugcyJE/MICVhXUAHBUu6G2LFWEPF2YA==", "dev": true, "dependencies": { - "ember-get-config": "", "broccoli-funnel": "^2.0.0", "broccoli-merge-trees": "^2.0.0", "broccoli-source": "^1.1.0", @@ -13595,6 +13495,7 @@ "chalk": "^1.1.3", "ember-cli-babel": "^7.1.2", "ember-cli-import-polyfill": "^0.2.0", + "ember-get-config": "^0.3.0", "lodash.defaults": "^4.2.0", "moment": "^2.19.3", "moment-timezone": "^0.5.13" @@ -13662,6 +13563,19 @@ "node": ">=0.10.0" } }, + "node_modules/ember-cli-moment-shim/node_modules/ember-get-config": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ember-get-config/-/ember-get-config-0.3.0.tgz", + "integrity": "sha512-0e2pKzwW5lBZ4oJnvu9qHOht4sP1MWz/m3hyz8kpSoMdrlZVf62LDKZ6qfKgy8drcv5YhCMYE6QV7MhnqlrzEQ==", + "dev": true, + "dependencies": { + "broccoli-file-creator": "^1.1.1", + "ember-cli-babel": "^7.0.0" + }, + "engines": { + "node": "^4.5 || 6.* || >= 7.*" + } + }, "node_modules/ember-cli-moment-shim/node_modules/lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", @@ -13768,9 +13682,6 @@ }, "engines": { "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/ember-cli-postcss/node_modules/merge-trees": { @@ -13802,9 +13713,6 @@ }, "bin": { "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/ember-cli-preprocess-registry": { @@ -15126,10 +15034,8 @@ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { + "graceful-fs": "^4.1.6", "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" } }, "node_modules/ember-compatibility-helpers/node_modules/resolve-package-path": { @@ -17231,73 +17137,6 @@ "matcher-collection": "^1.1.1" } }, - "node_modules/ember-local-storage": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/ember-local-storage/-/ember-local-storage-1.7.2.tgz", - "integrity": "sha512-1QS38RKbwy2w8n6nqZkjOvnROSbObExLkkfmhXxmhB2A/wLUp9kJnGYFGw8K9NLUkUXrm0OgasKIjf0dBIRO/A==", - "dev": true, - "dependencies": { - "blob-polyfill": "^2.0.20171115", - "broccoli-funnel": "^2.0.1", - "broccoli-merge-trees": "^2.0.0", - "broccoli-stew": "^1.5.0", - "chalk": "^2.3.0", - "ember-cli-babel": "^7.11.1", - "ember-cli-string-utils": "^1.1.0", - "ember-cli-version-checker": "^2.1.0", - "ember-copy": "^1.0.0" - }, - "engines": { - "node": "8.* || >= 10.*" - } - }, - "node_modules/ember-local-storage/node_modules/broccoli-funnel": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/broccoli-funnel/-/broccoli-funnel-2.0.2.tgz", - "integrity": "sha512-/vDTqtv7ipjEZQOVqO4vGDVAOZyuYzQ/EgGoyewfOgh1M7IQAToBKZI0oAQPgMBeFPPlIbfMuAngk+ohPBuaHQ==", - "dev": true, - "dependencies": { - "array-equal": "^1.0.0", - "blank-object": "^1.0.1", - "broccoli-plugin": "^1.3.0", - "debug": "^2.2.0", - "fast-ordered-set": "^1.0.0", - "fs-tree-diff": "^0.5.3", - "heimdalljs": "^0.2.0", - "minimatch": "^3.0.0", - "mkdirp": "^0.5.0", - "path-posix": "^1.0.0", - "rimraf": "^2.4.3", - "symlink-or-copy": "^1.0.0", - "walk-sync": "^0.3.1" - }, - "engines": { - "node": "^4.5 || 6.* || >= 7.*" - } - }, - "node_modules/ember-local-storage/node_modules/broccoli-merge-trees": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", - "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", - "dev": true, - "dependencies": { - "broccoli-plugin": "^1.3.0", - "merge-trees": "^1.0.1" - } - }, - "node_modules/ember-local-storage/node_modules/ember-cli-version-checker": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", - "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", - "dev": true, - "dependencies": { - "resolve": "^1.3.3", - "semver": "^5.3.0" - }, - "engines": { - "node": ">= 4" - } - }, "node_modules/ember-macro-helpers": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/ember-macro-helpers/-/ember-macro-helpers-4.2.2.tgz", @@ -17532,10 +17371,6 @@ }, "engines": { "node": "10.* || 12.* || >= 14.*" - }, - "peerDependencies": { - "@ember/test-helpers": "^2.1.0", - "qunit": "^2.13.0" } }, "node_modules/ember-qunit/node_modules/broccoli-funnel": { @@ -17600,11 +17435,6 @@ }, "engines": { "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } } }, "node_modules/ember-qunit/node_modules/fs-tree-diff": { @@ -17638,9 +17468,6 @@ }, "engines": { "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/ember-qunit/node_modules/matcher-collection": { @@ -17704,9 +17531,6 @@ }, "bin": { "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/ember-qunit/node_modules/walk-sync": { @@ -18345,11 +18169,6 @@ }, "engines": { "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } } }, "node_modules/ember-sinon-qunit/node_modules/fs-tree-diff": { @@ -18383,9 +18202,6 @@ }, "engines": { "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/ember-sinon-qunit/node_modules/matcher-collection": { @@ -18426,9 +18242,6 @@ }, "bin": { "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/ember-sinon-qunit/node_modules/walk-sync": { @@ -19534,7 +19347,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dev": true, "dependencies": { "ms": "^2.1.1" @@ -19796,9 +19608,6 @@ }, "engines": { "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-plugin-ember": { @@ -19816,9 +19625,6 @@ }, "engines": { "node": "10.* || 12.* || >= 14" - }, - "peerDependencies": { - "eslint": ">= 6" } }, "node_modules/eslint-plugin-ember/node_modules/ember-rfc176-data": { @@ -21405,16 +21211,6 @@ "node": ">= 0.6" } }, - "node_modules/fraction.js": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.13.tgz", - "integrity": "sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, "node_modules/fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -21607,7 +21403,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -22464,6 +22259,12 @@ "node": ">= 4" } }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -22640,9 +22441,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/inquirer/node_modules/ansi-regex": { @@ -22664,9 +22462,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/inquirer/node_modules/chalk": { @@ -22680,9 +22475,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/inquirer/node_modules/cli-cursor": { @@ -22728,9 +22520,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/inquirer/node_modules/has-flag": { @@ -22792,9 +22581,6 @@ "dev": true, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/internal-slot": { @@ -22852,11 +22638,9 @@ } }, "node_modules/irc-socket": { - "version": "3.0.8", "resolved": "https://github.com/silverbucket/irc-socket/archive/v4-alpha.tar.gz", "integrity": "sha512-PIJ8+w+pkuEqkpSDQtMVMMznlVNfAZFbtaheAFgg+w1nMA8iE+cWLsC+Gh/gvQb9I+N+s+WdwyvrVSL1klre+Q==", "dev": true, - "license": "ISC", "dependencies": { "bluebird": "^3.7.2", "r-result": "^1.4.0" @@ -22882,11 +22666,6 @@ }, "engines": { "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } } }, "node_modules/irc2as/node_modules/ms": { @@ -23650,6 +23429,15 @@ "node": ">= 0.8.0" } }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "dev": true, + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/line-column": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", @@ -23691,12 +23479,7 @@ "version": "2.1.9", "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-2.1.9.tgz", "integrity": "sha512-74ivurkK6WHvHFozVaGtQWV38FzBwSTGNmJolEgFp7QgR2bl6ArUWlvT4GcHKbPe1z3nWYi+VUdDZk16zDOVug==", - "dev": true, - "peerDependencies": { - "jquery": ">= 1.11.0", - "react": ">= 0.14.0", - "react-dom": ">= 0.14.0" - } + "dev": true }, "node_modules/liquid-fire": { "version": "0.31.0", @@ -24025,6 +23808,15 @@ "integrity": "sha512-9M2KvGT6duzGMgkOcTkWb+PR/Q2Oe54df/tLgHGVmFpAmtqJ553xJh6N63iFYI2yjo2PeJXbS5skHi/QpJq4vA==", "dev": true }, + "node_modules/localforage": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.9.0.tgz", + "integrity": "sha512-rR1oyNrKulpe+VM9cYmcFn6tsHuokyVHFaCM3+osEmxaHTbEk8oQu6eGDfS6DQLWi/N67XRmB8ECG37OES368g==", + "dev": true, + "dependencies": { + "lie": "3.1.1" + } + }, "node_modules/locate-character": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-2.0.5.tgz", @@ -24861,9 +24653,6 @@ "dev": true, "engines": { "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/moment": { @@ -25465,7 +25254,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/node-xmpp-client/-/node-xmpp-client-3.2.0.tgz", "integrity": "sha1-r0Un3wzFq9JpDLohOcwezcgeoYk=", - "deprecated": "this package is deprecated please use https://www.npmjs.com/package/@xmpp/client", "dev": true, "dependencies": { "browser-request": "^0.3.3", @@ -25497,7 +25285,6 @@ "version": "5.0.9", "resolved": "https://registry.npmjs.org/node-xmpp-core/-/node-xmpp-core-5.0.9.tgz", "integrity": "sha1-XCjCjtsfs/i+uixnYHd2E/SPNCo=", - "deprecated": "this package is deprecated please use https://github.com/xmppjs/xmpp.js", "dev": true, "dependencies": { "@xmpp/jid": "^0.0.2", @@ -25520,7 +25307,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/node-xmpp-tls-connect/-/node-xmpp-tls-connect-1.0.1.tgz", "integrity": "sha1-kazkOsJrE4hhsr5HjfnfGdYdxcM=", - "deprecated": "this package is deprecated please use https://github.com/xmppjs/xmpp.js", "dev": true }, "node_modules/nopt": { @@ -25556,16 +25342,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/normalize-url": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", @@ -26585,10 +26361,6 @@ }, "engines": { "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" } }, "node_modules/postcss-functions": { @@ -26618,9 +26390,6 @@ }, "engines": { "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/postcss-functions/node_modules/postcss": { @@ -26663,10 +26432,6 @@ }, "engines": { "node": ">=10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" } }, "node_modules/postcss-nested": { @@ -26679,13 +26444,6 @@ }, "engines": { "node": ">=10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.1.13" } }, "node_modules/postcss-scss": { @@ -26698,10 +26456,6 @@ }, "engines": { "node": ">=10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" } }, "node_modules/postcss-selector-parser": { @@ -26857,31 +26611,6 @@ "node": "10.* || >= 12.*" } }, - "node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dev": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "node_modules/prop-types/node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "peer": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/proxy-addr": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", @@ -27199,9 +26928,6 @@ }, "engines": { "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/qbox": { @@ -27264,9 +26990,6 @@ "dev": true, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/quick-temp": { @@ -27615,42 +27338,6 @@ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, - "node_modules/react": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", - "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", - "dev": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", - "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", - "dev": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" - } - }, - "node_modules/react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", - "dev": true, - "peer": true - }, "node_modules/read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", @@ -27793,11 +27480,9 @@ } }, "node_modules/reconnect-core": { - "version": "0.0.1", "resolved": "https://github.com/dodo/reconnect-core/tarball/merged", "integrity": "sha512-wZK/v5ZaNaSUs2Wnwh2YSX/Jqv6bQHKNEwojdzV11tByKziR9ikOssf5tvUhx+8/oCBz6AakOFAjZuqPoiRHJQ==", "dev": true, - "license": "MIT", "dependencies": { "backoff": "~2.3.0" } @@ -28095,7 +27780,6 @@ "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "dev": true, "dependencies": { "aws-sign2": "~0.7.0", @@ -28166,21 +27850,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "dev": true }, "node_modules/request/node_modules/tough-cookie": { "version": "2.5.0", @@ -28245,9 +27915,6 @@ "dependencies": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-dir": { @@ -28676,17 +28343,6 @@ "node": ">=10" } }, - "node_modules/scheduler": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", - "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", - "dev": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, "node_modules/schema-utils": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", @@ -28973,10 +28629,6 @@ "diff": "^4.0.2", "nise": "^4.0.4", "supports-color": "^7.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" } }, "node_modules/sinon/node_modules/has-flag": { @@ -29400,11 +29052,6 @@ }, "engines": { "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } } }, "node_modules/sockethub-platform-irc/node_modules/ms": { @@ -29442,11 +29089,6 @@ }, "engines": { "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } } }, "node_modules/sockethub-schemas/node_modules/ms": { @@ -29483,11 +29125,6 @@ }, "engines": { "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } } }, "node_modules/sockethub/node_modules/fill-range": { @@ -29682,13 +29319,6 @@ }, "engines": { "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" } }, "node_modules/source-map-loader/node_modules/emojis-list": { @@ -29759,10 +29389,6 @@ }, "engines": { "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" } }, "node_modules/source-map-loader/node_modules/source-map": { @@ -30577,10 +30203,6 @@ }, "engines": { "node": ">=12.13.0" - }, - "peerDependencies": { - "autoprefixer": "^10.0.2", - "postcss": "^8.0.9" } }, "node_modules/tailwindcss/node_modules/ansi-styles": { @@ -30593,9 +30215,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/tailwindcss/node_modules/chalk": { @@ -30609,9 +30228,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/tailwindcss/node_modules/color-convert": { @@ -30656,10 +30272,8 @@ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { + "graceful-fs": "^4.1.6", "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" } }, "node_modules/tailwindcss/node_modules/object-hash": { @@ -31057,9 +30671,6 @@ "dev": true, "engines": { "node": ">=0.8" - }, - "funding": { - "url": "https://bevry.me/fund" } }, "node_modules/through": { @@ -32009,11 +31620,11 @@ "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", "dev": true, "dependencies": { + "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" }, "optionalDependencies": { - "chokidar": "^3.4.1", "watchpack-chokidar2": "^2.0.1" } }, @@ -32087,6 +31698,7 @@ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "dev": true, + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -39522,21 +39134,6 @@ "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", "dev": true }, - "autoprefixer": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.5.tgz", - "integrity": "sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA==", - "dev": true, - "peer": true, - "requires": { - "browserslist": "^4.16.3", - "caniuse-lite": "^1.0.30001196", - "colorette": "^1.2.2", - "fraction.js": "^4.0.13", - "normalize-range": "^0.1.2", - "postcss-value-parser": "^4.1.0" - } - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -40648,12 +40245,6 @@ "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", "dev": true }, - "blob-polyfill": { - "version": "2.0.20171115", - "resolved": "https://registry.npmjs.org/blob-polyfill/-/blob-polyfill-2.0.20171115.tgz", - "integrity": "sha512-qHpuIpWlDLdOzSI9n1+423JL8c60Tbyyu/w4+zQIPCazvKBjf0sqQWiUS2QtyHph3S1C8m17T/jKyhv/DnnQFA==", - "dev": true - }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -45752,7 +45343,6 @@ "integrity": "sha512-dN5ImjrjZevEqB7xhwFXaPWwxdKGSFiR1kqy9gDVB+A5EGnhCL1uveKugcyJE/MICVhXUAHBUu6G2LFWEPF2YA==", "dev": true, "requires": { - "ember-get-config": "", "broccoli-funnel": "^2.0.0", "broccoli-merge-trees": "^2.0.0", "broccoli-source": "^1.1.0", @@ -45760,6 +45350,7 @@ "chalk": "^1.1.3", "ember-cli-babel": "^7.1.2", "ember-cli-import-polyfill": "^0.2.0", + "ember-get-config": "^0.3.0", "lodash.defaults": "^4.2.0", "moment": "^2.19.3", "moment-timezone": "^0.5.13" @@ -45815,6 +45406,16 @@ "supports-color": "^2.0.0" } }, + "ember-get-config": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ember-get-config/-/ember-get-config-0.3.0.tgz", + "integrity": "sha512-0e2pKzwW5lBZ4oJnvu9qHOht4sP1MWz/m3hyz8kpSoMdrlZVf62LDKZ6qfKgy8drcv5YhCMYE6QV7MhnqlrzEQ==", + "dev": true, + "requires": { + "broccoli-file-creator": "^1.1.1", + "ember-cli-babel": "^7.0.0" + } + }, "lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", @@ -48161,66 +47762,6 @@ } } }, - "ember-local-storage": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/ember-local-storage/-/ember-local-storage-1.7.2.tgz", - "integrity": "sha512-1QS38RKbwy2w8n6nqZkjOvnROSbObExLkkfmhXxmhB2A/wLUp9kJnGYFGw8K9NLUkUXrm0OgasKIjf0dBIRO/A==", - "dev": true, - "requires": { - "blob-polyfill": "^2.0.20171115", - "broccoli-funnel": "^2.0.1", - "broccoli-merge-trees": "^2.0.0", - "broccoli-stew": "^1.5.0", - "chalk": "^2.3.0", - "ember-cli-babel": "^7.11.1", - "ember-cli-string-utils": "^1.1.0", - "ember-cli-version-checker": "^2.1.0", - "ember-copy": "^1.0.0" - }, - "dependencies": { - "broccoli-funnel": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/broccoli-funnel/-/broccoli-funnel-2.0.2.tgz", - "integrity": "sha512-/vDTqtv7ipjEZQOVqO4vGDVAOZyuYzQ/EgGoyewfOgh1M7IQAToBKZI0oAQPgMBeFPPlIbfMuAngk+ohPBuaHQ==", - "dev": true, - "requires": { - "array-equal": "^1.0.0", - "blank-object": "^1.0.1", - "broccoli-plugin": "^1.3.0", - "debug": "^2.2.0", - "fast-ordered-set": "^1.0.0", - "fs-tree-diff": "^0.5.3", - "heimdalljs": "^0.2.0", - "minimatch": "^3.0.0", - "mkdirp": "^0.5.0", - "path-posix": "^1.0.0", - "rimraf": "^2.4.3", - "symlink-or-copy": "^1.0.0", - "walk-sync": "^0.3.1" - } - }, - "broccoli-merge-trees": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", - "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", - "dev": true, - "requires": { - "broccoli-plugin": "^1.3.0", - "merge-trees": "^1.0.1" - } - }, - "ember-cli-version-checker": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", - "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", - "dev": true, - "requires": { - "resolve": "^1.3.3", - "semver": "^5.3.0" - } - } - } - }, "ember-macro-helpers": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/ember-macro-helpers/-/ember-macro-helpers-4.2.2.tgz", @@ -51579,13 +51120,6 @@ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", "dev": true }, - "fraction.js": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.13.tgz", - "integrity": "sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==", - "dev": true, - "peer": true - }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -52463,6 +51997,12 @@ "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -53407,6 +52947,15 @@ "type-check": "~0.3.2" } }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "dev": true, + "requires": { + "immediate": "~3.0.5" + } + }, "line-column": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", @@ -53447,8 +52996,7 @@ "version": "2.1.9", "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-2.1.9.tgz", "integrity": "sha512-74ivurkK6WHvHFozVaGtQWV38FzBwSTGNmJolEgFp7QgR2bl6ArUWlvT4GcHKbPe1z3nWYi+VUdDZk16zDOVug==", - "dev": true, - "requires": {} + "dev": true }, "liquid-fire": { "version": "0.31.0", @@ -53739,6 +53287,15 @@ "integrity": "sha512-9M2KvGT6duzGMgkOcTkWb+PR/Q2Oe54df/tLgHGVmFpAmtqJ553xJh6N63iFYI2yjo2PeJXbS5skHi/QpJq4vA==", "dev": true }, + "localforage": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.9.0.tgz", + "integrity": "sha512-rR1oyNrKulpe+VM9cYmcFn6tsHuokyVHFaCM3+osEmxaHTbEk8oQu6eGDfS6DQLWi/N67XRmB8ECG37OES368g==", + "dev": true, + "requires": { + "lie": "3.1.1" + } + }, "locate-character": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-2.0.5.tgz", @@ -55109,13 +54666,6 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true, - "peer": true - }, "normalize-url": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", @@ -56120,30 +55670,6 @@ "integrity": "sha512-0qhWYyCV9TYDMSooYw1fShIb7R6hsWYja7JLqbeb1MvHqDTvP/uy/R1RsyVqDi6GCiHOI4G5p2Hpr3IA+/l/+Q==", "dev": true }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dev": true, - "peer": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - }, - "dependencies": { - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "peer": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - } - } - }, "proxy-addr": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", @@ -56771,39 +56297,6 @@ } } }, - "react": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", - "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", - "dev": true, - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" - } - }, - "react-dom": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", - "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", - "dev": true, - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" - } - }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", - "dev": true, - "peer": true - }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", @@ -57661,17 +57154,6 @@ "xmlchars": "^2.2.0" } }, - "scheduler": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", - "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", - "dev": true, - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, "schema-utils": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", diff --git a/package.json b/package.json index f483e11c..6b2c5b67 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,6 @@ "ember-hammertime": "1.6.0", "ember-keyboard-shortcuts": "github:67P/ember-keyboard-shortcuts#feature/octane_classes", "ember-load-initializers": "^2.1.2", - "ember-local-storage": "^1.7.2", "ember-maybe-import-regenerator": "^0.1.6", "ember-moment": "^8.0.1", "ember-qunit": "^5.1.4", @@ -89,6 +88,7 @@ "linkifyjs": "^2.1.9", "liquid-fire": "^0.31.0", "loader.js": "^4.7.0", + "localforage": "^1.9.0", "npm-run-all": "^4.1.5", "postcss-scss": "^3.0.5", "qunit": "^2.15.0", diff --git a/tests/unit/services/local-data-test.js b/tests/unit/services/local-data-test.js new file mode 100644 index 00000000..4ad14ae6 --- /dev/null +++ b/tests/unit/services/local-data-test.js @@ -0,0 +1,51 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Service | local data', function(hooks) { + hooks.beforeEach(async function() { + return new Promise((resolve/*, reject*/) => { + function nope (e) { + console.warn('IndexedDB deletion complaint:', e); + resolve(e); + } + const req = window.indexedDB.deleteDatabase('hyperchannel'); + req.onsuccess = resolve; + req.onerror = e => nope(e); + req.onblocked = e => nope(e); + }); + // FIXME this throws an uncaught IndexedDB error + // await localforage.dropInstance({ name: 'hyperchannel' }); + }); + + setupTest(hooks); + + test('store initialization', function(assert) { + const service = this.owner.lookup('service:local-data'); + const userSettingsStore = service.stores.userSettings; + + assert.ok(userSettingsStore instanceof Object); + assert.ok(userSettingsStore.getItem instanceof Function); + }); + + test('default values', async function(assert) { + const service = this.owner.lookup('service:local-data'); + + await service.setDefaultValues(); + + const userSettingsStore = service.stores.userSettings; + const currentChannel = await userSettingsStore.getItem('currentChannel'); + + assert.equal(currentChannel, 'kosmos'); + }); + + test('storing and retrieving values', async function(assert) { + const service = this.owner.lookup('service:local-data'); + await service.setDefaultValues(); + const userSettingsStore = service.stores.userSettings; + + await userSettingsStore.setItem('currentChannel', 'kosmos-random'); + const currentChannel = await userSettingsStore.getItem('currentChannel'); + + assert.equal(currentChannel, 'kosmos-random'); + }); +});