From 8f3e53d99f956a00924edb523f86ef86eacd674e Mon Sep 17 00:00:00 2001 From: gossi Date: Tue, 14 Dec 2021 16:37:18 +0100 Subject: [PATCH 01/14] new look --- .eslintrc.js | 5 +- addon/components/file-upload.hbs | 11 +- addon/components/file-upload.js | 124 - addon/components/file-upload.ts | 125 + addon/file.js | 406 --- addon/file.ts | 323 ++ addon/helpers/file-queue.js | 41 - addon/helpers/file-queue.ts | 65 + addon/queue.js | 209 -- addon/queue.ts | 294 ++ addon/services/file-queue.js | 118 - addon/services/file-queue.ts | 127 + addon/system/file-reader.d.ts | 10 + addon/system/upload.js | 107 + package.json | 38 +- tests/dummy/app/config/environment.d.ts | 14 + tests/dummy/app/router.js | 37 +- tests/helpers/.gitkeep | 0 tests/helpers/file-queue-helper-test.js | 105 + .../components/file-upload-test.js | 20 +- tsconfig.json | 60 + types/global.d.ts | 6 + yarn.lock | 2721 ++++------------- 23 files changed, 1873 insertions(+), 3093 deletions(-) delete mode 100644 addon/components/file-upload.js create mode 100644 addon/components/file-upload.ts delete mode 100644 addon/file.js create mode 100644 addon/file.ts delete mode 100644 addon/helpers/file-queue.js create mode 100644 addon/helpers/file-queue.ts delete mode 100644 addon/queue.js create mode 100644 addon/queue.ts delete mode 100644 addon/services/file-queue.js create mode 100644 addon/services/file-queue.ts create mode 100644 addon/system/file-reader.d.ts create mode 100644 addon/system/upload.js create mode 100644 tests/dummy/app/config/environment.d.ts delete mode 100644 tests/helpers/.gitkeep create mode 100644 tests/helpers/file-queue-helper-test.js create mode 100644 tsconfig.json create mode 100644 types/global.d.ts diff --git a/.eslintrc.js b/.eslintrc.js index 8809c293..8c4bd5e3 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -2,7 +2,7 @@ module.exports = { root: true, - parser: 'babel-eslint', + parser: '@typescript-eslint/parser', parserOptions: { ecmaVersion: 2018, sourceType: 'module', @@ -10,11 +10,12 @@ module.exports = { legacyDecorators: true, }, }, - plugins: ['ember'], + plugins: ['ember', '@typescript-eslint'], extends: [ 'eslint:recommended', 'plugin:ember/recommended', 'plugin:prettier/recommended', + 'plugin:@typescript-eslint/recommended', ], env: { browser: true, diff --git a/addon/components/file-upload.hbs b/addon/components/file-upload.hbs index 79ea72c8..d5c538e8 100644 --- a/addon/components/file-upload.hbs +++ b/addon/components/file-upload.hbs @@ -2,12 +2,7 @@ for={{this.for}} class="file-upload" ...attributes - {{update-queue - this.queue - multiple=@multiple - disabled=@disabled - onFileAdd=@onFileAdd - }} + {{did-insert this.attachListeners}} > {{yield this.queue}} diff --git a/addon/components/file-upload.js b/addon/components/file-upload.js deleted file mode 100644 index 3be8f1b0..00000000 --- a/addon/components/file-upload.js +++ /dev/null @@ -1,124 +0,0 @@ -import Component from '@glimmer/component'; -import { inject as service } from '@ember/service'; -import { action } from '@ember/object'; -import uuid from '../system/uuid'; -import { tracked } from '@glimmer/tracking'; - -/** - Whether multiple files can be selected when uploading. - @argument multiple - @type {boolean} - */ - -/** - The name of the queue to upload the file to. - - @argument name - @type {string} - @required - */ - -/** - If set, disables input and prevents files from being added to the queue - - @argument disabled - @type {boolean} - @default false - */ - -/** - A comma-separated list of MIME types / extensions to be accepted by the input, as documented here https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/accept - @argument accept - @type {string} - */ - -/** - `onSelect` is called for each selection of one or more files. - - Optionally restrict which files are added to the upload queue by returning - an array of File objects. - - @argument onSelect - @type {function(files: File[], event)} - */ - -/** - `onFileAdd` is called when a file is added to the upload queue. - - When multiple files are added, this function - is called once for every file. - - @argument onFileAdd - @type {function(file: File)} - @required - */ - -/** - Specify capture devices which the user may select for file input. - @see https://www.w3.org/TR/html-media-capture/ - @argument capture - @type {string} - */ - -/** - `FileUpload` is a component that will users to upload files using - their browser's file chooser. - - ```hbs - - Add an image. - {{#if queue.files.length}} - Uploading {{queue.files.length}} files. ({{queue.progress}}%) - {{/if}} - - ``` - - ```js - import Component from '@glimmer/component'; - import { task } from 'ember-concurrency'; - - export default class ExampleComponent extends Component { - @task({ maxConcurrency: 3, enqueue: true }) - *uploadImage(file) { - const response = yield file.upload(url, options); - ... - } - } - ``` - - @class FileUploadComponent - @type Ember.Component - @yield {Queue} queue - */ -export default class FileUploadComponent extends Component { - @service fileQueue; - - @tracked _value = null; - - get queue() { - if (!this.args.name) return null; - - return ( - this.fileQueue.find(this.args.name) || - this.fileQueue.create(this.args.name) - ); - } - - get for() { - return this.args.for || `file-input-${uuid.short()}`; - } - - @action - change(event) { - let { files } = event.target; - files = this.args.onSelect?.(files) ?? files; - this.queue._addFiles(files, 'browse'); - this._value = null; - } -} diff --git a/addon/components/file-upload.ts b/addon/components/file-upload.ts new file mode 100644 index 00000000..72ecdc49 --- /dev/null +++ b/addon/components/file-upload.ts @@ -0,0 +1,125 @@ +import Component from '@glimmer/component'; +import { inject as service } from '@ember/service'; +import { action } from '@ember/object'; +import { tracked } from '@glimmer/tracking'; + +import uuid from '../system/uuid'; +import File from '../file'; +import Queue from '../queue'; +import FileQueueService, { DEFAULT_QUEUE } from '../services/file-queue'; + +interface FileUploadArgs { + name?: string; + queue?: Queue; + + // actions + filter?: (file: File) => boolean; + + // old/deprecated API + + /** + * @deprecated use `{{file-queue}}` helper with `{{queue.selectFile}}` modifier + */ + multiple?: boolean; + + /** + * @deprecated use `{{file-queue}}` helper with `{{queue.selectFile}}` modifier + */ + disabled?: boolean; + + /** + * @deprecated use `{{file-queue}}` helper with `{{queue.selectFile}}` modifier + */ + accept?: string; + + /** + * @deprecated use `{{file-queue}}` helper with `{{queue.selectFile}}` modifier + */ + capture?: string; + + /** + * @deprecated use `{{file-queue}}` helper with `{{queue.selectFile}}` modifier + */ + for?: string; + + /** + * @deprecated use `fileAdded()` instead + */ + onFileAdd: (file: File) => void; + + // @TODO remove `onSelect` in favor of `filter()` - it never was officially + // of public API + /** + * @deprecated use `filter()` instead + */ + onSelect?: (files: File[]) => File[]; +} + +/** + * `FileUpload` is a component that will users to upload files using + * their browser's file chooser. + * + * @example + * + * old-fashioned usage: + * + * ```hbs + * + * Add an image. + * {{#if queue.files.length}} + * Uploading {{queue.files.length}} files. ({{queue.progress}}%) + * {{/if}} + * + * ``` + * + * ```js + * import Component from '@glimmer/component'; + * import { task } from 'ember-concurrency'; + * + * export default class ExampleComponent extends Component { + * @task({ maxConcurrency: 3, enqueue: true }) + * *uploadImage(file) { + * const response = yield file.upload(url, options); + * ... + * } + * } + * ``` + * + * @deprecated use `{{file-queue}}` helper with `{{queue.selectFile}}` modifier + */ +export default class FileUploadComponent extends Component { + @service declare fileQueue: FileQueueService; + + @tracked value: unknown; + + get queue() { + if (this.args.queue) { + return this.args.queue; + } + + if (this.args.name) { + return this.fileQueue.findOrCreate(this.args.name); + } + + return this.fileQueue.findOrCreate(DEFAULT_QUEUE); + } + + get for() { + return this.args.for || `file-input-${uuid.short()}`; + } + + @action + attachListeners() { + this.queue.addListener(this); + } + + fileAdded(file: File) { + this.args.onFileAdd?.(file); + } +} diff --git a/addon/file.js b/addon/file.js deleted file mode 100644 index 1bee6b11..00000000 --- a/addon/file.js +++ /dev/null @@ -1,406 +0,0 @@ -import { assert } from '@ember/debug'; -import FileReader from './system/file-reader'; -import HTTPRequest from './system/http-request'; -import RSVP from 'rsvp'; -import uuid from './system/uuid'; -import { tracked } from '@glimmer/tracking'; -import { buildWaiter } from '@ember/test-waiters'; - -const uploadWaiter = buildWaiter('ember-file-upload:upload'); - -function normalizeOptions(file, url, options) { - if (typeof url === 'object') { - options = url; - url = null; - } - - options = options || {}; - - options.url = options.url || url; - options.method = options.method || 'POST'; - options.accepts = options.accepts || ['application/json', 'text/javascript']; - if (!Object.prototype.hasOwnProperty.call(options, 'contentType')) { - options.contentType = file.type; - } - options.headers = options.headers || {}; - options.data = options.data || {}; - options.fileKey = options.fileKey || 'file'; - - if (options.headers.Accept == null) { - if (!Array.isArray(options.accepts)) { - options.accepts = [options.accepts]; - } - options.headers.Accept = options.accepts.join(','); - } - - // Set Content-Type in the data payload - // instead of the headers, since the header - // for Content-Type will always be multipart/form-data - if (options.contentType) { - options.data['Content-Type'] = options.contentType; - } - - options.data[options.fileKey] = file.blob; - - options.withCredentials = options.withCredentials || false; - - return options; -} - -function upload(file, url, opts, uploadFn) { - if (['queued', 'failed', 'timed_out', 'aborted'].indexOf(file.state) === -1) { - assert( - `The file ${file.id} is in the state "${file.state}" and cannot be requeued.` - ); - } - - let options = normalizeOptions(file, url, opts); - - let request = new HTTPRequest({ - withCredentials: options.withCredentials, - label: `${options.method} ${file.name} to ${options.url}`, - }); - - request.open(options.method, options.url); - - Object.keys(options.headers).forEach(function (key) { - request.setRequestHeader(key, options.headers[key]); - }); - - if (options.timeout) { - request.timeout = options.timeout; - } - - request.onprogress = function (evt) { - if (!evt.lengthComputable || evt.total === 0) return; - - file.loaded = evt.loaded; - file.size = evt.total; - file.progress = (evt.loaded / evt.total) * 100; - }; - - request.ontimeout = function () { - file.state = 'timed_out'; - }; - - request.onabort = function () { - file.state = 'aborted'; - }; - - file.state = 'uploading'; - - const token = uploadWaiter.beginAsync(); - - return uploadFn(request, options) - .then( - function (result) { - file.state = 'uploaded'; - return result; - }, - function (error) { - file.state = 'failed'; - return RSVP.reject(error); - } - ) - .finally(() => uploadWaiter.endAsync(token)); -} - -/** - Files provide a uniform interface for interacting - with data that can be uploaded or read. - - @class File - */ -export default class File { - constructor() { - Object.defineProperty(this, 'id', { - writeable: false, - enumerable: true, - value: `file-${uuid()}`, - }); - } - - /** - A unique id generated for this file. - - @property id - @type {String} - @readonly - */ - id; - - /** - The file name. - - @accessor name - @type {String} - */ - get name() { - return this.blob?.name; - } - - /** - The size of the file in bytes. - - @accessor size - @type {Number} - @readonly - */ - _size; - get size() { - return this._size ?? this.blob?.size; - } - set size(value) { - this._size = value; - } - - /** - The MIME type of the file. - - For a image file this may be `image/png`. - - @accessor type - @type {String} - @readonly - */ - get type() { - return this.blob?.type; - } - - /** - Returns the appropriate file extension of - the file according to the type - - @accessor extension - @type {String} - @readonly - */ - get extension() { - return this.type.split('/').slice(-1)[0]; - } - - /** - @accessor loaded - @type {Number} - @default 0 - @readonly - */ - @tracked - loaded = 0; - - /** - @accessor progress - @type {Number} - @default 0 - @readonly - */ - @tracked - progress = 0; - - /** - The current state that the file is in. - One of: - - - `queued` - - `uploading` - - `timed_out` - - `aborted` - - `uploaded` - - `failed` - - @accessor state - @type {String} - @default 'queued' - @readonly - */ - @tracked - _state = 'queued'; - get state() { - return this._state; - } - set state(value) { - this._state = value; - this.queue?.flush(); - } - - /** - The source of the file. This is useful - for applications that want to gather - analytics about how users upload their - content. - - This property can be one of the following: - - - `browse` - - `drag-and-drop` - - `web` - - `data-url` - - `blob` - - `browse` is the source when the file is created - using the native file picker. - - `drag-and-drop` is the source when the file was - created using drag and drop from their desktop. - - `web` is the source when the file was created - by dragging the file from another webpage. - - `data-url` is the source when the file is created - from a data URL using the `fromDataURL` method for - files. This usually means that the file was created - manually by the developer on behalf of the user. - - `blob` is the source when the file is created - from a blob using the `fromBlob` method for - files. This usually means that the file was created - manually by the developer. - - @accessor source - @type {String} - @default '' - @readonly - */ - source = ''; - - /** - * Upload file with `application/octet-stream` content type. - * - * @method uploadBinary - * @param {String} url Your server endpoint where to upload the file - * @param {hash} opts - * @return {Promise} - */ - uploadBinary(url, opts) { - opts.contentType = 'application/octet-stream'; - return upload(this, url, opts, (request) => { - return request.send(this.blob); - }); - } - - /** - * Upload file to your server - * - * @method upload - * @param {String} url Your server endpoint where to upload the file - * @param {Hash} opts { fileKey: string, data: { key: string } } - * @return {Promise} - */ - upload(url, opts) { - return upload(this, url, opts, (request, options) => { - // Build the form - let form = new FormData(); - - Object.keys(options.data).forEach((key) => { - if (key === options.fileKey) { - form.append(key, options.data[key], this.name); - } else { - form.append(key, options.data[key]); - } - }); - - return request.send(form); - }); - } - - /** - * Resolves with Blob as ArrayBuffer - * - * @method readAsArrayBuffer - * @return {Promise} - */ - readAsArrayBuffer() { - let reader = new FileReader({ - label: `Read ${this.name} as an ArrayBuffer`, - }); - return reader.readAsArrayBuffer(this.blob); - } - - /** - * Resolves with Blob as DataURL - * - * @method readAsDataURL - * @return {Promise} - */ - readAsDataURL() { - let reader = new FileReader({ - label: `Read ${this.name} as a Data URI`, - }); - return reader.readAsDataURL(this.blob); - } - - /** - * Resolves with Blob as binary string - * - * @method readAsBinaryString - * @return {Promise} - */ - readAsBinaryString() { - let reader = new FileReader({ - label: `Read ${this.name} as a binary string`, - }); - return reader.readAsBinaryString(this.blob); - } - - /** - * Resolves with Blob as plain text - * - * @method readAsText - * @return {Promise} - */ - readAsText() { - let reader = new FileReader({ label: `Read ${this.name} as text` }); - return reader.readAsText(this.blob); - } - - /** - Creates a file object that can be read or uploaded to a - server from a Blob object. - - @static - @method fromBlob - @param {Blob} blob The blob to create the file from. - @param {String} [source] The source that created the blob. - @return {File} A file object - */ - static fromBlob(blob, source = 'blob') { - let file = new this(); - Object.defineProperty(file, 'blob', { - writeable: false, - enumerable: false, - value: blob, - }); - Object.defineProperty(file, 'source', { - writeable: false, - value: source, - }); - - return file; - } - - /** - Creates a file object that can be read or uploaded to a - server from a data URL. - - @static - @method fromDataURL - @param {String} dataURL The data URL to create the file from. - @param {String} [source] The source of the data URL. - @return {File} A file object - */ - static fromDataURL(dataURL, source = 'data-url') { - let [typeInfo, base64String] = dataURL.split(','); - let mimeType = typeInfo.match(/:(.*?);/)[1]; - - let binaryString = atob(base64String); - let binaryData = new Uint8Array(binaryString.length); - - for (let i = 0, len = binaryString.length; i < len; i++) { - binaryData[i] = binaryString.charCodeAt(i); - } - - let blob = new Blob([binaryData], { type: mimeType }); - - return this.fromBlob(blob, source); - } -} diff --git a/addon/file.ts b/addon/file.ts new file mode 100644 index 00000000..bf5ec021 --- /dev/null +++ b/addon/file.ts @@ -0,0 +1,323 @@ +import { tracked } from '@glimmer/tracking'; + +import FileReader from './system/file-reader'; +import { upload } from './system/upload'; +import uuid from './system/uuid'; + +import Queue from './queue'; + +/** + * Possible file states. + * + * @remarks + * + * Here is the statechart describing the flow of state: + * + * ``` + * .------. .---------. .--------. + * o--| queued |-->| uploading |-->| uploaded | + * `------` `---------` `--------` + * ^ | .-------. + * | |`->| aborted | + * | | `-------` + * | .------. | .---------. + * `-| failed |<-` `->| timed_out |-. + * | `------` `---------` | + * `-------------------------------` + * ``` + */ +export enum FileState { + Queued = 'queued', + Uploading = 'uploading', + TimedOut = 'timed_out', + Aborted = 'aborted', + Uploaded = 'uploaded', + Failed = 'failed', +} + +export enum FileSource { + /** + * the file is created using the native file picker + */ + Browse = 'browse', + + /** + * the file was created using drag and drop from their desktop + */ + DragAndDrop = 'drag-and-drop', + + /** + * the file was created by dragging the file from another webpage + */ + Web = 'web', + + /** + * the file is created from a data URL using the `fromDataURL` + * method for files. This usually means that the file was created + * manually by the developer on behalf of the user + */ + DataUrl = 'data-url', + + /** + * the file is created from a blob using the `fromBlob` + * method for files. This usually means that the file was created + * manually by the developer + */ + Blob = 'blob', +} + +/** + * Files provide a uniform interface for interacting + * with data that can be uploaded or read. + */ +export default class File { + // @TODO: Extract this "special" blob thingy into its own type + #blob: Blob & { + name?: string; + }; + #source: FileSource; + + queue?: Queue; + + private constructor(blob: Blob, source: FileSource) { + this.#blob = blob; + this.#source = source; + } + + /** + * The source of the file. This is useful + * for applications that want to gather + * analytics about how users upload their + * content. + */ + get source(): FileSource { + return this.#source; + } + + #id = `file-${uuid()}`; + + /** A unique id generated for this file. */ + get id(): string { + return this.#id; + } + + /** The file name */ + get name(): string { + // @TODO: this "default" name here looks wrong - the tests wanted it ?!? + return this.#blob?.name ?? 'blob'; + } + + /** The size of the file in bytes. */ + #size = 0; + + get size() { + return this.#size ?? this.#blob.size; + } + + set size(value) { + this.#size = value; + } + + /** + * The MIME type of the file. + * + * For a image file this may be `image/png`. + */ + get type(): string { + return this.#blob.type; + } + + /** + * Returns the appropriate file extension of + * the file according to the type + */ + get extension(): string { + return this.type.split('/').slice(-1)[0]; + } + + /** The number of bytes that have been uploaded to the server */ + @tracked loaded = 0; + + /** + * The current progress of the upload, as a percentage in the + * range of 0 to 100. + */ + @tracked progress = 0; + + /** + * The current state that the file is in. + */ + @tracked private internalState: FileState = FileState.Queued; + + get state() { + return this.internalState; + } + + set state(value) { + this.internalState = value; + this.queue?.flush(); + } + + // @TODO: For both `upload*()` methods, the return value `Promise` is + // very much unspecified and needs more details + + // /** + // The source of the file. This is useful + // for applications that want to gather + // analytics about how users upload their + // content. + + // This property can be one of the following: + + // - `browse` + // - `drag-and-drop` + // - `web` + // - `data-url` + // - `blob` + + // `browse` is the source when the file is created + // using the native file picker. + + // `drag-and-drop` is the source when the file was + // created using drag and drop from their desktop. + + // `web` is the source when the file was created + // by dragging the file from another webpage. + + // `data-url` is the source when the file is created + // from a data URL using the `fromDataURL` method for + // files. This usually means that the file was created + // manually by the developer on behalf of the user. + + // `blob` is the source when the file is created + // from a blob using the `fromBlob` method for + // files. This usually means that the file was created + // manually by the developer. + + // @accessor source + // @type {String} + // @default '' + // @readonly + // */ + // source?: FileSource; + + /** + * Upload file with `application/octet-stream` content type. + * + * @param url Your server endpoint where to upload the file + * @param options additional request options + */ + uploadBinary( + url: string, + options: Record + ): Promise { + options.contentType = 'application/octet-stream'; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore this is not typed + return upload(this, url, options, (request) => { + return request.send(this.#blob); + }); + } + + /** + * Upload file to your server + * + * @param url Your server endpoint where to upload the file + * @param options additional options, eg. `{ fileKey: string, data: { key: string } }` + */ + upload(url: string, options: Record): Promise { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore this is not typed + return upload(this, url, options, (request, opts) => { + // Build the form + const form = new FormData(); + + for (const key of Object.keys(opts.data)) { + if (key === opts.fileKey) { + // @TODO: Am I doing this right here? + form.append(key, this.#blob, this.name); + } else { + form.append(key, opts.data[key]); + } + } + + return request.send(form); + }); + } + + /** + * Resolves with Blob as ArrayBuffer + */ + readAsArrayBuffer() { + const reader = new FileReader({ + label: `Read ${this.name} as an ArrayBuffer`, + }); + return reader.readAsArrayBuffer(this.#blob); + } + + /** + * Resolves with Blob as DataURL + */ + readAsDataURL() { + const reader = new FileReader({ + label: `Read ${this.name} as a Data URI`, + }); + return reader.readAsDataURL(this.#blob); + } + + /** + * Resolves with Blob as binary string + */ + readAsBinaryString() { + const reader = new FileReader({ + label: `Read ${this.name} as a binary string`, + }); + return reader.readAsBinaryString(this.#blob); + } + + /** + * Resolves with Blob as plain text + */ + readAsText() { + const reader = new FileReader({ label: `Read ${this.name} as text` }); + return reader.readAsText(this.#blob); + } + + /** + * Creates a file object that can be read or uploaded to a + * server from a Blob object. + * + * @param blob the blob to create the file from. + * @param source the source that created the blob. + * @returns the file + */ + static fromBlob(blob: Blob, source = FileSource.Blob) { + return new this(blob, source); + } + + /** + * Creates a file object that can be read or uploaded to a + * server from a data URL. + * + * @param dataURL the data URL to create the file from. + * @param source the source of the data URL. + * @returns the file + */ + static fromDataURL(dataURL: string, source = FileSource.DataUrl) { + const [typeInfo, base64String] = dataURL.split(','); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const mimeType = typeInfo.match(/:(.*?);/)[1]; + + const binaryString = atob(base64String); + const binaryData = new Uint8Array(binaryString.length); + + for (let i = 0, len = binaryString.length; i < len; i++) { + binaryData[i] = binaryString.charCodeAt(i); + } + + const blob = new Blob([binaryData], { type: mimeType }); + + return this.fromBlob(blob, source); + } +} diff --git a/addon/helpers/file-queue.js b/addon/helpers/file-queue.js deleted file mode 100644 index 05a3d20c..00000000 --- a/addon/helpers/file-queue.js +++ /dev/null @@ -1,41 +0,0 @@ -import Helper from '@ember/component/helper'; -import { inject as service } from '@ember/service'; - -/** - `file-queue` helper is one of the core primitives of ember-file-upload. - It has three different flavors of invocation. The first is - a bare call, which will return the master queue: - - ```hbs - {{#with (file-queue) as |queue|}} - {{queue.progress}}% - {{/with}} - ``` - - If called with a `name` property, it will return the queue - of that name: - - ```hbs - {{#with (file-queue name="photos") as |queue|}} - {{queue.progress}}% - {{/with}} - ``` - - @class FileQueue - @param {string} [name] The name of the queue to get information on - @return {Queue} A collection of all queues, or a specific queue. - */ -export default class FileQueueHelper extends Helper { - @service('file-queue') fileQueue; - - compute(_, hash) { - let queues = this.fileQueue; - let queueName = hash['name']; - if (queueName) { - let queue = queues.find(queueName) || queues.create(queueName); - return queue; - } - - return queues; - } -} diff --git a/addon/helpers/file-queue.ts b/addon/helpers/file-queue.ts new file mode 100644 index 00000000..f970c8db --- /dev/null +++ b/addon/helpers/file-queue.ts @@ -0,0 +1,65 @@ +import Helper from '@ember/component/helper'; +import { registerDestructor } from '@ember/destroyable'; +import { inject as service } from '@ember/service'; +import File from '../file'; +import { QueueListener } from '../queue'; +import type FileQueueService from '../services/file-queue'; +import { DEFAULT_QUEUE } from '../services/file-queue'; + +interface FileQueueArgs { + name?: string; + fileAdded?: (file: File) => void; + fileRemoved?: (file: File) => void; +} + +/** + * `file-queue` helper is one of the core primitives of ember-file-upload. + * + * @example + * + * using the default queue (no `name` property) + * + * ```hbs + * {{#with (file-queue) as |queue|}} + * {{queue.progress}}% + * {{/with}} + * ``` + * + * @example + * + * named queue: + * + * ```hbs + * {{#with (file-queue name="photos") as |queue|}} + * {{queue.progress}}% + * {{/with}} + * ``` + */ +export default class FileQueueHelper extends Helper implements QueueListener { + @service declare fileQueue: FileQueueService; + + args!: FileQueueArgs; + + compute(_positional: unknown[], args: FileQueueArgs) { + this.args = args; + const queue = args.name + ? this.fileQueue.findOrCreate(args.name) + : this.fileQueue.findOrCreate(DEFAULT_QUEUE); + + queue.addListener(this); + + registerDestructor(this, () => { + queue.removeListener(this); + }); + + return queue; + } + + fileAdded(file: File) { + this.args.fileAdded?.(file); + } + + fileRemoved(file: File) { + this.args.fileRemoved?.(file); + } +} diff --git a/addon/queue.js b/addon/queue.js deleted file mode 100644 index 8ae61848..00000000 --- a/addon/queue.js +++ /dev/null @@ -1,209 +0,0 @@ -import { A } from '@ember/array'; -import { next } from '@ember/runloop'; -import File from './file'; -import { tracked } from '@glimmer/tracking'; - -/** - The Queue is a collection of files that - are being manipulated by the user. - - Queues are designed to persist the state - of uploads when a user navigates around your - application. - - @class Queue - */ -export default class Queue { - constructor({ name, fileQueue }) { - this.name = name; - this.fileQueue = fileQueue; - this.files = A(); - this._dropzones = A(); - } - - destroy() { - this.fileQueue.queues.delete(this.name); - this.files.forEach((file) => (file.queue = null)); - this.files = A(); - } - - /** - The FileQueue service. - - @property fileQueue - @type FileQueue - */ - fileQueue = null; - - /** - @method push - @param {File} file The file to append to the queue - */ - push(file) { - file.queue = this; - this.files.pushObject(file); - } - - /** - @private - @method _addFiles - @param {FileList} fileList The event triggered from the DOM that contains a list of files - */ - _addFiles(fileList, source) { - let onFileAdd = this.onFileAdd; - let disabled = this.disabled; - let files = []; - - if (!disabled) { - for (let i = 0, len = fileList.length || fileList.size; i < len; i++) { - let fileBlob = fileList.item ? fileList.item(i) : fileList[i]; - if (fileBlob instanceof Blob) { - let file = File.fromBlob(fileBlob, source); - - files.push(file); - this.push(file); - - if (onFileAdd) { - next(onFileAdd, file); - } - } - } - } - - return files; - } - - /** - @method remove - @param {File} file The file to remove from the queue. - */ - remove(file) { - file.queue = null; - this.files.removeObject(file); - } - - /** - The unique identifier of the queue. - - Queue names should be deterministic so they - can be retrieved. It's recommended to provide - a helpful name. - - If the queue belongs to a top level collection, - photos, the good name for this queue may be `"photos"`. - - If you're uploading images to an artwork, the - best name would incoporate both `"artworks"` and - the identifier of the artwork. A good name for this - queue may be `"artworks/{{id}}/photos"`, where `{{id}}` - is a dynamic segment that is generated from the artwork id. - - @property name - @type string - @default null - */ - name = null; - - /** - The list of files in the queue. This automatically gets - flushed when all the files in the queue have settled. - - Note that files that have failed need to be manually - removed from the queue. This is so they can be retried - without resetting the state of the queue, orphaning the - file from its queue. Upload failures can happen due to a - timeout or a server response. If you choose to use the - `abort` method, the file will fail to upload, but will - be removed from the requeuing proccess, and will be - considered to be in a settled state. - - @property files - @type File[] - @default [] - */ - @tracked files = null; - - /** - Flushes the `files` property if they have settled. This - will only flush files when all files have arrived at a terminus - of their state chart. - - ``` - .------. .---------. .--------. - o--| queued |-->| uploading |-->| uploaded | - `------` `---------` `--------` - ^ | .-------. - | |`->| aborted | - | | `-------` - | .------. | .---------. - `-| failed |<-` `->| timed_out |-. - | `------` `---------` | - `-------------------------------` - ``` - - Files *may* be requeued by the user in the `failed` or `timed_out` - states. - - @method flush - */ - flush() { - let files = this.files; - - if (files.length === 0) { - return; - } - - let allFilesHaveSettled = files.every((file) => { - return ['uploaded', 'aborted'].includes(file.state); - }); - - if (allFilesHaveSettled) { - this.files.forEach((file) => (file.queue = null)); - this.files = A(); - } - } - - /** - The total size of all files currently being uploaded in bytes. - - @computed size - @type Number - @default 0 - @readonly - */ - get size() { - return this.files.reduce((acc, { size }) => { - acc += size; - return acc; - }, 0); - } - - /** - The number of bytes that have been uploaded to the server. - - @computed loaded - @type Number - @default 0 - @readonly - */ - get loaded() { - return this.files.reduce((acc, { loaded }) => { - acc += loaded; - return acc; - }, 0); - } - - /** - The current progress of all uploads, as a percentage in the - range of 0 to 100. - - @computed progress - @type Number - @default 0 - @readonly - */ - get progress() { - let percent = this.loaded / this.size || 0; - return Math.floor(percent * 100); - } -} diff --git a/addon/queue.ts b/addon/queue.ts new file mode 100644 index 00000000..941f9d50 --- /dev/null +++ b/addon/queue.ts @@ -0,0 +1,294 @@ +import { next } from '@ember/runloop'; +import { modifier, ModifierArgs } from 'ember-modifier'; +import { tracked, TrackedArray } from 'tracked-built-ins'; +import { action } from '@ember/object'; + +import UploadFile, { FileState, FileSource } from './file'; +import FileQueueService from './services/file-queue'; + +export interface SelectFileModifierArgs extends ModifierArgs { + named: { + filter?: (file: File) => boolean; + filesSelected?: (files: UploadFile[]) => void; + }; +} + +export interface QueueListener { + fileAdded?(file: UploadFile): void; + fileRemoved?(file: UploadFile): void; +} + +export type QueueName = string | symbol; + +/** + The Queue is a collection of files that + are being manipulated by the user. + + Queues are designed to persist the state + of uploads when a user navigates around your + application. + + @class Queue + */ +export default class Queue { + #listeners: Set = new Set(); + + /** + * The unique identifier of the queue. + * + * @remarks + * Queue names should be deterministic so they + * can be retrieved. It's recommended to provide + * a helpful name. + * + * If the queue belongs to a top level collection, + * photos, the good name for this queue may be `"photos"`. + * + * If you're uploading images to an artwork, the + * best name would incoporate both `"artworks"` and + * the identifier of the artwork. A good name for this + * queue may be `"artworks/{{id}}/photos"`, where `{{id}}` + * is a dynamic segment that is generated from the artwork id. + */ + name: QueueName; + + /** The FileQueue service. */ + fileQueue: FileQueueService; + + // @tracked private distinctFiles: Set = new Set(); + // Must uses `TrackedArray()` until this one is solved: + // https://github.com/tracked-tools/tracked-built-ins/issues/225 + files: UploadFile[] = new TrackedArray([]); + + // /** + // * The list of files in the queue. This automatically gets + // * flushed when all the files in the queue have settled. + // * + // * @remarks + // * Note that files that have failed need to be manually + // * removed from the queue. This is so they can be retried + // * without resetting the state of the queue, orphaning the + // * file from its queue. Upload failures can happen due to a + // * timeout or a server response. If you choose to use the + // * `abort` method, the file will fail to upload, but will + // * be removed from the requeuing proccess, and will be + // * considered to be in a settled state. + // */ + // get files(): File[] { + // console.log('queue.files', this.distinctFiles); + + // return [...this.distinctFiles.values()]; + // } + + // @TODO: Is this needed? I think, this is what each dropzone needs to manage + _dropzones = tracked([]); + + /** + * The total size of all files currently being uploaded in bytes. + * + * @defaultValue 0 + */ + get size(): number { + return this.files.reduce((acc, { size }) => { + return acc + size; + }, 0); + } + + /** + * The number of bytes that have been uploaded to the server. + * + * @defaultValue 0 + */ + get loaded(): number { + return this.files.reduce((acc, { loaded }) => { + return acc + loaded; + }, 0); + } + + /** + * The current progress of all uploads, as a percentage in the + * range of 0 to 100. + * + * @defaultValue 0 + */ + get progress() { + const percent = this.loaded / this.size || 0; + return Math.floor(percent * 100); + } + + constructor({ + name, + fileQueue, + }: { + name: QueueName; + fileQueue: FileQueueService; + }) { + this.name = name; + this.fileQueue = fileQueue; + } + + // @TODO this is called from nowhere ?!? + // destroy() { + // this.distinctFiles.forEach((file) => (file.queue = undefined)); + // this.distinctFiles.clear(); + // } + + addListener(listener: QueueListener) { + this.#listeners.add(listener); + } + + removeListener(listener: QueueListener) { + this.#listeners.delete(listener); + } + + /** @deprecated use `add()` instead */ + @action + push(file: UploadFile) { + this.add(file); + } + + /** + * Add a file to the queue + * @param file the file to be added + */ + @action + add(file: UploadFile) { + if (this.files.includes(file)) { + return; + } + + file.queue = this; + // this.distinctFiles.add(file); + this.files.push(file); + + for (const listener of this.#listeners) { + listener.fileAdded?.(file); + } + } + + /** + * Remove a file from the queue + * @param file the file to be removed + */ + @action + remove(file: UploadFile) { + if (!this.files.includes(file)) { + return; + } + + file.queue = undefined; + this.files.splice(this.files.indexOf(file), 1); + + for (const listener of this.#listeners) { + listener.fileRemoved?.(file); + } + } + + /** + @private + @method _addFiles + @param {FileList} fileList The event triggered from the DOM that contains a list of files + */ + _addFiles(fileList: FileList, source: FileSource) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const onFileAdd = this.onFileAdd; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const disabled = this.disabled; + const files: UploadFile[] = []; + + if (!disabled) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + for (let i = 0, len = fileList.length || fileList.size; i < len; i++) { + const fileBlob = fileList.item ? fileList.item(i) : fileList[i]; + if (fileBlob instanceof Blob) { + const file = UploadFile.fromBlob(fileBlob, source); + + files.push(file); + this.push(file); + + if (onFileAdd) { + next(onFileAdd, file); + } + } + } + } + + return files; + } + + /** + Flushes the `files` property if they have settled. This + will only flush files when all files have arrived at a terminus + of their state chart. + + ``` + .------. .---------. .--------. + o--| queued |-->| uploading |-->| uploaded | + `------` `---------` `--------` + ^ | .-------. + | |`->| aborted | + | | `-------` + | .------. | .---------. + `-| failed |<-` `->| timed_out |-. + | `------` `---------` | + `-------------------------------` + ``` + + Files *may* be requeued by the user in the `failed` or `timed_out` + states. + + @method flush + */ + flush() { + if (this.files.length === 0) { + return; + } + + const allFilesHaveSettled = this.files.every((file) => { + return [FileState.Uploaded, FileState.Aborted].includes(file.state); + }); + + if (allFilesHaveSettled) { + this.files.forEach((file) => (file.queue = undefined)); + this.files = []; + } + } + + selectFile = modifier< + HTMLInputElement, + SelectFileModifierArgs['positional'], + SelectFileModifierArgs['named'] + >((element, _positional, named) => { + const changeHandler = (event: Event) => { + const { files } = event.target as HTMLInputElement; + if (!files) { + return; + } + + const selectedFiles: UploadFile[] = []; + + for (const fileBlob of files) { + if (named.filter && !named.filter?.(fileBlob)) { + continue; + } + + if (fileBlob instanceof Blob) { + const file = UploadFile.fromBlob(fileBlob, FileSource.Browse); + selectedFiles.push(file); + + this.add(file); + } + } + + named.filesSelected?.(selectedFiles); + }; + element.addEventListener('change', changeHandler); + + return () => { + element.removeEventListener('change', changeHandler); + }; + }); +} diff --git a/addon/services/file-queue.js b/addon/services/file-queue.js deleted file mode 100644 index c25521b3..00000000 --- a/addon/services/file-queue.js +++ /dev/null @@ -1,118 +0,0 @@ -import { assert } from '@ember/debug'; -import { A } from '@ember/array'; -import Service from '@ember/service'; -import Queue from '../queue'; - -/** - The file queue service is a global file - queue that manages all files being uploaded. - - This service can be used to query the current - upload state when a user leaves the app, - asking them whether they want to cancel - the remaining uploads. - - @class FileQueue - @extends Ember.Service - */ -export default class FileQueueService extends Service { - queues = A([]); - - /** - The list of all files in queues. This automatically gets - flushed when all the files in the queue have settled. - - Note that files that have failed need to be manually - removed from the queue. This is so they can be retried - without resetting the state of the queue, orphaning the - file from its queue. Upload failures can happen due to a - timeout or a server response. If you choose to use the - `abort` method, the file will fail to upload, but will - be removed from the requeuing proccess, and will be - considered to be in a settled state. - - @property files - @type {File[]} - @default [] - */ - get files() { - return this.queues.reduce((acc, queue) => { - acc = acc.concat(queue.files); - return acc; - }, A([])); - } - - /** - Returns a queue with the given name - - @method find - @param {String} name The name of the queue to find - @return {Queue} The queue or null if it doesn't exist yet. - */ - find(name) { - return this.queues.findBy('name', name); - } - - /** - Create a new queue with the given name. - - @method create - @param {String} name The name of the queue to create - @return {Queue} The new queue. - */ - create(name) { - assert( - `Queue names are required to be unique. "${name}" has already been reserved.`, - this.find(name) == null - ); - - let queue = new Queue({ name, fileQueue: this }); - this.queues.pushObject(queue); - - return queue; - } - - /** - The total size of all files currently being uploaded in bytes. - - @computed size - @type Number - @default 0 - @readonly - */ - get size() { - return this.files.reduce((acc, { size }) => { - acc += size; - return acc; - }, 0); - } - - /** - The number of bytes that have been uploaded to the server. - - @computed loaded - @type Number - @default 0 - @readonly - */ - get loaded() { - return this.files.reduce((acc, { loaded }) => { - acc += loaded; - return acc; - }, 0); - } - - /** - The current progress of all uploads, as a percentage in the - range of 0 to 100. - - @computed progress - @type Number - @default 0 - @readonly - */ - get progress() { - let percent = this.loaded / this.size || 0; - return Math.floor(percent * 100); - } -} diff --git a/addon/services/file-queue.ts b/addon/services/file-queue.ts new file mode 100644 index 00000000..2952e303 --- /dev/null +++ b/addon/services/file-queue.ts @@ -0,0 +1,127 @@ +import { assert } from '@ember/debug'; +import Service from '@ember/service'; +import { registerDestructor } from '@ember/destroyable'; +import { tracked } from 'tracked-built-ins'; + +import Queue, { QueueName } from '../queue'; +import File from '../file'; + +export const DEFAULT_QUEUE = Symbol('DEFAULT_QUEUE'); + +/** + * The file queue service is a global file + * queue that manages all files being uploaded. + * + * This service can be used to query the current + * upload state when a user leaves the app, + * asking them whether they want to cancel + * the remaining uploads. + */ +export default class FileQueueService extends Service { + queues: Map = tracked(new Map()); + + /** + * Returns a queue with the given name + * + * @param name The name of the queue to find + * @returns The queue if it exists + */ + find(name: QueueName): Queue | undefined { + return this.queues.get(name); + } + + /** + * Create a new queue with the given name. + * + * @param name The name of the queue to create + * @returns The new queue. + */ + create(name: QueueName): Queue { + assert( + `Queue names are required to be unique. "${String( + name + )}" has already been reserved.`, + !this.queues.has(name) + ); + + const queue = new Queue({ name, fileQueue: this }); + + registerDestructor(queue, () => { + this.queues.delete(name); + }); + + this.queues.set(name, queue); + return queue; + } + + findOrCreate(name: QueueName): Queue { + return this.find(name) ?? this.create(name); + } + + // + // @TODO + // Everything below this line should be deprecated ? + // ------------------------------------------------- + // + + /** + * The list of all files in queues. This automatically gets + * flushed when all the files in the queue have settled. + * + * @remarks + * Note that files that have failed need to be manually + * removed from the queue. This is so they can be retried + * without resetting the state of the queue, orphaning the + * file from its queue. Upload failures can happen due to a + * timeout or a server response. If you choose to use the + * `abort` method, the file will fail to upload, but will + * be removed from the requeuing proccess, and will be + * considered to be in a settled state. + * + * @defaultValue [] + */ + get files(): File[] { + return [...this.queues.values()].reduce((acc, queue) => { + return [...acc, ...queue.files]; + }, []); + } + + /** + * The total size of all files currently being uploaded in bytes. + * + * @defaultValue 0 + */ + get size(): number { + return this.files.reduce((acc, { size }) => { + return acc + size; + }, 0); + } + + /** + * The number of bytes that have been uploaded to the server. + * + * @defaultValue 0 + */ + get loaded(): number { + return this.files.reduce((acc, { loaded }) => { + return acc + loaded; + }, 0); + } + + /** + * The current progress of all uploads, as a percentage in the + * range of 0 to 100. + * + * @defaultValue 0 + */ + get progress(): number { + const percent = this.loaded / this.size || 0; + return Math.floor(percent * 100); + } +} + +declare module '@ember/service' { + interface Registry { + 'file-queue': FileQueueService; + } +} diff --git a/addon/system/file-reader.d.ts b/addon/system/file-reader.d.ts new file mode 100644 index 00000000..35b76037 --- /dev/null +++ b/addon/system/file-reader.d.ts @@ -0,0 +1,10 @@ +declare class FileReader { + constructor(options: { label: string }); + + readAsArrayBuffer(blob: Blob): Promise; + readAsDataURL(blob: Blob): Promise; + readAsBinaryString(blob: Blob): Promise; + readAsText(blob: Blob): Promise; +} + +export = FileReader; diff --git a/addon/system/upload.js b/addon/system/upload.js new file mode 100644 index 00000000..81694baa --- /dev/null +++ b/addon/system/upload.js @@ -0,0 +1,107 @@ +import { assert } from '@ember/debug'; +import HTTPRequest from './http-request'; +import RSVP from 'rsvp'; +import { buildWaiter } from '@ember/test-waiters'; + +const uploadWaiter = buildWaiter('ember-file-upload:upload'); + +function normalizeOptions(file, url, options) { + if (typeof url === 'object') { + options = url; + url = null; + } + + options = options || {}; + + options.url = options.url || url; + options.method = options.method || 'POST'; + options.accepts = options.accepts || ['application/json', 'text/javascript']; + if (!Object.prototype.hasOwnProperty.call(options, 'contentType')) { + options.contentType = file.type; + } + options.headers = options.headers || {}; + options.data = options.data || {}; + options.fileKey = options.fileKey || 'file'; + + if (options.headers.Accept == null) { + if (!Array.isArray(options.accepts)) { + options.accepts = [options.accepts]; + } + options.headers.Accept = options.accepts.join(','); + } + + // Set Content-Type in the data payload + // instead of the headers, since the header + // for Content-Type will always be multipart/form-data + if (options.contentType) { + options.data['Content-Type'] = options.contentType; + } + + options.data[options.fileKey] = file.blob; + + options.withCredentials = options.withCredentials || false; + + return options; +} + +export function upload(file, url, opts, uploadFn) { + if (['queued', 'failed', 'timed_out', 'aborted'].indexOf(file.state) === -1) { + assert( + `The file ${file.id} is in the state "${file.state}" and cannot be requeued.` + ); + } + + const options = normalizeOptions(file, url, opts); + + const request = new HTTPRequest({ + withCredentials: options.withCredentials, + label: `${options.method} ${file.name} to ${options.url}`, + }); + + request.open(options.method, options.url); + + Object.keys(options.headers).forEach(function (key) { + request.setRequestHeader(key, options.headers[key]); + }); + + if (options.timeout) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + request.timeout = options.timeout; + } + + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + request.onprogress = function (evt) { + if (!evt.lengthComputable || evt.total === 0) return; + + file.loaded = evt.loaded; + file.size = evt.total; + file.progress = (evt.loaded / evt.total) * 100; + }; + + request.ontimeout = function () { + file.state = 'timed_out'; + }; + + request.onabort = function () { + file.state = 'aborted'; + }; + + file.state = 'uploading'; + + const token = uploadWaiter.beginAsync(); + + return uploadFn(request, options) + .then( + function (result) { + file.state = 'uploaded'; + return result; + }, + function (error) { + file.state = 'failed'; + return RSVP.reject(error); + } + ) + .finally(() => uploadWaiter.endAsync(token)); +} diff --git a/package.json b/package.json index 91354e2e..826b23b9 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,9 @@ "test": "npm-run-all lint test:*", "test:ember": "ember test", "test:ember-compatibility": "ember try:each", - "postversion": "git push && git push --tags" + "postversion": "git push && git push --tags", + "prepack": "ember ts:precompile", + "postpack": "ember ts:clean" }, "dependencies": { "@ember/test-waiters": "^3.0.0", @@ -53,18 +55,43 @@ "broccoli-funnel": "^3.0.8", "ember-cli-babel": "^7.26.6", "ember-cli-htmlbars": "^5.7.1", - "ember-modifier": "^2.1.2 || ^3.0.0" + "ember-cli-typescript": "^4.2.1", + "ember-modifier": "^2.1.2 || ^3.0.0", + "tracked-built-ins": "^2.0.0" }, "devDependencies": { "@ember/optional-features": "^2.0.0", + "@ember/render-modifiers": "^2.0.0", "@ember/test-helpers": "^2.4.2", "@embroider/test-setup": "^0.50.0", + "@types/ember-qunit": "^3.4.15", + "@types/ember-resolver": "^5.0.10", + "@types/ember__application": "^3.16.3", + "@types/ember__array": "^3.16.4", + "@types/ember__component": "^3.16.6", + "@types/ember__controller": "^3.16.6", + "@types/ember__debug": "^3.16.5", + "@types/ember__engine": "^3.16.3", + "@types/ember__error": "^3.16.1", + "@types/ember__object": "^3.12.6", + "@types/ember__polyfills": "^3.12.1", + "@types/ember__routing": "^3.16.15", + "@types/ember__runloop": "^3.16.3", + "@types/ember__service": "^3.16.1", + "@types/ember__string": "^3.16.3", + "@types/ember__template": "^3.16.1", + "@types/ember__test": "^3.16.1", + "@types/ember__test-helpers": "^2.6.0", + "@types/ember__utils": "^3.16.2", + "@types/htmlbars-inline-precompile": "^1.0.1", + "@types/qunit": "^2.11.2", + "@types/rsvp": "^4.0.4", + "@typescript-eslint/eslint-plugin": "^5.6.0", + "@typescript-eslint/parser": "^5.6.0", "babel-eslint": "^10.1.0", "broccoli-asset-rev": "^3.0.0", "ember-auto-import": "^2.0.0", "ember-cli": "3.28.0", - "ember-cli-addon-docs": "^4.0.0", - "ember-cli-addon-docs-yuidoc": "^1.0.0", "ember-cli-content-security-policy": "^2.0.0-3", "ember-cli-dependency-checker": "^3.2.0", "ember-cli-deploy": "^1.0.2", @@ -76,7 +103,7 @@ "ember-cli-mirage": "^2.0.0", "ember-cli-sass": "^10.0.0", "ember-cli-terser": "^4.0.2", - "ember-data": "~3.28.0", + "ember-cli-typescript-blueprints": "^3.0.0", "ember-load-initializers": "^2.1.2", "ember-maybe-import-regenerator": "^1.0.0", "ember-page-title": "^7.0.0", @@ -101,6 +128,7 @@ "release-it": "^14.0.0", "release-it-lerna-changelog": "^4.0.0", "sass": "^1.32.10", + "typescript": "^4.5.3", "webpack": "5" }, "resolutions": { diff --git a/tests/dummy/app/config/environment.d.ts b/tests/dummy/app/config/environment.d.ts new file mode 100644 index 00000000..a837adeb --- /dev/null +++ b/tests/dummy/app/config/environment.d.ts @@ -0,0 +1,14 @@ +export default config; + +/** + * Type declarations for + * import config from 'my-app/config/environment' + */ +declare const config: { + environment: string; + modulePrefix: string; + podModulePrefix: string; + locationType: string; + rootURL: string; + APP: Record; +}; diff --git a/tests/dummy/app/router.js b/tests/dummy/app/router.js index 4acf21e1..7c59838c 100644 --- a/tests/dummy/app/router.js +++ b/tests/dummy/app/router.js @@ -1,19 +1,32 @@ -import AddonDocsRouter, { docsRoute } from 'ember-cli-addon-docs/router'; -import config from 'dummy/config/environment'; +import EmberRouter from '@ember/routing/router'; -export default class Router extends AddonDocsRouter { +import config from './config/environment'; + +export default class Router extends EmberRouter { location = config.locationType; rootURL = config.rootURL; } Router.map(function () { - docsRoute(this, function () { - this.route('recipes'); - this.route('validation'); - this.route('integration'); - this.route('testing'); - this.route('aws'); - }); - - this.route('not-found', { path: '/*path' }); + // no routes yet }); + +// import AddonDocsRouter, { docsRoute } from 'ember-cli-addon-docs/router'; +// import config from 'dummy/config/environment'; + +// export default class Router extends AddonDocsRouter { +// location = config.locationType; +// rootURL = config.rootURL; +// } + +// Router.map(function () { +// docsRoute(this, function () { +// this.route('recipes'); +// this.route('validation'); +// this.route('integration'); +// this.route('testing'); +// this.route('aws'); +// }); + +// this.route('not-found', { path: '/*path' }); +// }); diff --git a/tests/helpers/.gitkeep b/tests/helpers/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/helpers/file-queue-helper-test.js b/tests/helpers/file-queue-helper-test.js new file mode 100644 index 00000000..c159fd9e --- /dev/null +++ b/tests/helpers/file-queue-helper-test.js @@ -0,0 +1,105 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render, click } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +import { selectFiles } from 'ember-file-upload/test-support'; +import { DEFAULT_QUEUE } from 'ember-file-upload/services/file-queue'; + +module('Integration | Helper | file-queue', function (hooks) { + setupRenderingTest(hooks); + + test('filter is triggered when selecting files', async function (assert) { + this.filter = (file) => assert.step(`filter: ${file.name}`); + + await render(hbs` + {{#let (file-queue) as |queue|}} + + {{/let}} + `); + + await selectFiles('input[type=file]', new File([], 'dingus.txt')); + + assert.verifySteps(['filter: dingus.txt']); + }); + + test('files selected is triggered when selecting files', async function (assert) { + this.selectFiles = (files) => + assert.step( + `files selected: ${files.map((file) => file.name).join(', ')}` + ); + + await render(hbs` + {{#let (file-queue) as |queue|}} + + {{/let}} + `); + + await selectFiles('input[type=file]', new File([], 'dingus.txt')); + + assert.verifySteps(['files selected: dingus.txt']); + }); + + test('falls back to default name', async function (assert) { + await render(hbs` + {{#let (file-queue) as |queue|}} + {{queue.name}} + {{/let}} + `); + + assert.dom('output').hasText(DEFAULT_QUEUE.toString()); + }); + + test('can be parametrized by name', async function (assert) { + await render(hbs` + {{#let (file-queue name="line-up") as |queue|}} + {{queue.name}} + {{/let}} + `); + + assert.dom('output').hasText('line-up'); + }); + + test('will be notified when adding and removing files', async function (assert) { + this.addFile = (file) => assert.step(`file added: ${file.name}`); + this.removeFile = (file) => assert.step(`file removed: ${file.name}`); + + await render(hbs` + {{#let (file-queue fileAdded=this.addFile fileRemoved=this.removeFile) as |queue|}} + {{#each queue.files as |file|}} + + {{file.name}} + + + {{/each}} + + + {{/let}} + `); + + assert.dom('[data-test-file]').doesNotExist(); + + await selectFiles('input[type=file]', new File([], 'dingus.txt')); + assert.dom('[data-test-file]').hasText('dingus.txt'); + + await click('[data-test-remove]'); + assert.verifySteps(['file added: dingus.txt', 'file removed: dingus.txt']); + + assert.dom('[data-test-file]').doesNotExist(); + }); +}); diff --git a/tests/integration/components/file-upload-test.js b/tests/integration/components/file-upload-test.js index 2b2b589d..7df1824d 100644 --- a/tests/integration/components/file-upload-test.js +++ b/tests/integration/components/file-upload-test.js @@ -36,8 +36,8 @@ module('Integration | Component | FileUpload', function (hooks) { }); test('calls onSelect for a file selection and calls onFileAdd for each file', async function (assert) { - this.onSelect = (files) => - assert.step(`onSelect: ${files.mapBy('name').join(',')}`); + // this.onSelect = (files) => + // assert.step(`onSelect: ${files.mapBy('name').join(',')}`); this.onFileAdd = (file) => assert.step(`onFileAdd: ${file.name}`); await render( @@ -51,21 +51,21 @@ module('Integration | Component | FileUpload', function (hooks) { ); assert.verifySteps([ - 'onSelect: dingus.txt,dingus.png', + // 'onSelect: dingus.txt,dingus.png', 'onFileAdd: dingus.txt', 'onFileAdd: dingus.png', ]); }); - test('only calls onFileAdd for files returned from onSelect', async function (assert) { - this.onSelect = (files) => { - assert.step(`onSelect: ${files.mapBy('name').join(',')}`); - return files.filter((f) => f.type.split('/')[0] === 'image'); + test('only calls onFileAdd for filtered files', async function (assert) { + this.filter = (file) => { + assert.step(`filter: ${file.name}`); + return file.type.split('/')[0] === 'image'; }; this.onFileAdd = (file) => assert.step(`onFileAdd: ${file.name}`); await render( - hbs`` + hbs`` ); await selectFiles( @@ -75,7 +75,9 @@ module('Integration | Component | FileUpload', function (hooks) { ); assert.verifySteps([ - 'onSelect: dingus.txt,dingus.png', + // 'onSelect: dingus.txt,dingus.png', + 'filter: dingus.txt', + 'filter: dingus.png', 'onFileAdd: dingus.png', ]); }); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..03f68dd6 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,60 @@ +{ + "compilerOptions": { + "target": "es2020", + "allowJs": true, + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "noImplicitAny": true, + "noImplicitThis": true, + "alwaysStrict": true, + "strictNullChecks": true, + "strictPropertyInitialization": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noEmitOnError": true, + "noEmit": true, + "inlineSourceMap": true, + "inlineSources": true, + "baseUrl": ".", + "module": "es6", + "experimentalDecorators": true, + "skipLibCheck": true, + "paths": { + "dummy/tests/*": [ + "tests/*" + ], + "dummy/mirage/*": [ + "tests/dummy/mirage/*" + ], + "dummy/*": [ + "tests/dummy/app/*", + "app/*" + ], + "ember-file-upload": [ + "addon" + ], + "ember-file-upload/*": [ + "addon/*" + ], + "ember-file-upload/test-support": [ + "addon-test-support" + ], + "ember-file-upload/test-support/*": [ + "addon-test-support/*" + ], + "*": [ + "types/*" + ] + } + }, + "include": [ + "app/**/*", + "addon/**/*", + "tests/**/*", + "types/**/*", + "test-support/**/*", + "addon-test-support/**/*" + ] +} diff --git a/types/global.d.ts b/types/global.d.ts new file mode 100644 index 00000000..1b99f5ef --- /dev/null +++ b/types/global.d.ts @@ -0,0 +1,6 @@ +// Types for compiled templates +declare module 'ember-file-upload/templates/*' { + import { TemplateFactory } from 'htmlbars-inline-precompile'; + const tmpl: TemplateFactory; + export default tmpl; +} diff --git a/yarn.lock b/yarn.lock index 2b794fe9..349d3499 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,7 +9,7 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== @@ -21,7 +21,28 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.8.tgz#31560f9f29fdf1868de8cb55049538a1b9732a60" integrity sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q== -"@babel/core@^7.0.0", "@babel/core@^7.1.6", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.10", "@babel/core@^7.13.8", "@babel/core@^7.16.7", "@babel/core@^7.3.4": +"@babel/core@^7.1.6", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.8", "@babel/core@^7.3.4": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4" + integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/helper-compilation-targets" "^7.16.0" + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helpers" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/core@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.7.tgz#db990f931f6d40cb9b87a0dc7d2adc749f1dcbcf" integrity sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA== @@ -42,7 +63,25 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.16.7", "@babel/generator@^7.16.8": +"@babel/generator@^7.16.0", "@babel/generator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.7.tgz#b42bf46a3079fa65e1544135f32e7958f048adbb" + integrity sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg== + dependencies: + "@babel/types" "^7.16.7" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/generator@^7.16.5": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.5.tgz#26e1192eb8f78e0a3acaf3eede3c6fc96d22bedf" + integrity sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA== + dependencies: + "@babel/types" "^7.16.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/generator@^7.16.8": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== @@ -51,7 +90,7 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.16.7": +"@babel/helper-annotate-as-pure@^7.16.0", "@babel/helper-annotate-as-pure@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== @@ -66,7 +105,7 @@ "@babel/helper-explode-assignable-expression" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-compilation-targets@^7.12.0", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": +"@babel/helper-compilation-targets@^7.12.0", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.0", "@babel/helper-compilation-targets@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== @@ -76,7 +115,7 @@ browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.5.5", "@babel/helper-create-class-features-plugin@^7.8.3": +"@babel/helper-create-class-features-plugin@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz#9c5b34b53a01f2097daf10678d65135c1b9f84ba" integrity sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw== @@ -89,6 +128,18 @@ "@babel/helper-replace-supers" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" +"@babel/helper-create-class-features-plugin@^7.5.5": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz#090d4d166b342a03a9fec37ef4fd5aeb9c7c6a4b" + integrity sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-member-expression-to-functions" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/helper-create-regexp-features-plugin@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" @@ -111,7 +162,7 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-environment-visitor@^7.16.7": +"@babel/helper-environment-visitor@^7.16.5", "@babel/helper-environment-visitor@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== @@ -125,7 +176,7 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-function-name@^7.16.7": +"@babel/helper-function-name@^7.16.0", "@babel/helper-function-name@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== @@ -141,6 +192,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-hoist-variables@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" + integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== + dependencies: + "@babel/types" "^7.16.0" + "@babel/helper-hoist-variables@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" @@ -148,7 +206,7 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-member-expression-to-functions@^7.16.7": +"@babel/helper-member-expression-to-functions@^7.16.0", "@babel/helper-member-expression-to-functions@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== @@ -162,7 +220,7 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-module-transforms@^7.16.7": +"@babel/helper-module-transforms@^7.16.0", "@babel/helper-module-transforms@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== @@ -176,14 +234,19 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-optimise-call-expression@^7.16.7": +"@babel/helper-optimise-call-expression@^7.16.0", "@babel/helper-optimise-call-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== dependencies: "@babel/types" "^7.16.7" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.5.tgz#afe37a45f39fce44a3d50a7958129ea5b1a5c074" + integrity sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ== + +"@babel/helper-plugin-utils@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== @@ -197,7 +260,7 @@ "@babel/helper-wrap-function" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helper-replace-supers@^7.16.7": +"@babel/helper-replace-supers@^7.16.0", "@babel/helper-replace-supers@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== @@ -222,14 +285,14 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-split-export-declaration@^7.16.7": +"@babel/helper-split-export-declaration@^7.16.0", "@babel/helper-split-export-declaration@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== dependencies: "@babel/types" "^7.16.7" -"@babel/helper-validator-identifier@^7.16.7": +"@babel/helper-validator-identifier@^7.15.7", "@babel/helper-validator-identifier@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== @@ -249,7 +312,7 @@ "@babel/traverse" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helpers@^7.16.7": +"@babel/helpers@^7.16.0", "@babel/helpers@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== @@ -267,7 +330,17 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.12.3", "@babel/parser@^7.16.7", "@babel/parser@^7.16.8", "@babel/parser@^7.4.5", "@babel/parser@^7.7.0": +"@babel/parser@^7.12.3", "@babel/parser@^7.16.0", "@babel/parser@^7.16.5", "@babel/parser@^7.4.5", "@babel/parser@^7.7.0": + version "7.16.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.6.tgz#8f194828193e8fa79166f34a4b4e52f3e769a314" + integrity sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ== + +"@babel/parser@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.7.tgz#d372dda9c89fcec340a82630a9f533f2fe15877e" + integrity sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA== + +"@babel/parser@^7.16.8": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.8.tgz#61c243a3875f7d0b0962b0543a33ece6ff2f1f17" integrity sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw== @@ -355,7 +428,7 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7", "@babel/plugin-proposal-nullish-coalescing-operator@^7.4.4": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== @@ -390,7 +463,7 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.16.7", "@babel/plugin-proposal-optional-chaining@^7.6.0": +"@babel/plugin-proposal-optional-chaining@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== @@ -530,13 +603,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.16.7", "@babel/plugin-syntax-typescript@^7.2.0", "@babel/plugin-syntax-typescript@^7.8.3": +"@babel/plugin-syntax-typescript@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-syntax-typescript@^7.2.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz#2feeb13d9334cc582ea9111d3506f773174179bb" + integrity sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-arrow-functions@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" @@ -817,15 +897,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-typescript" "^7.2.0" -"@babel/plugin-transform-typescript@~7.8.0": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.8.7.tgz#48bccff331108a7b3a28c3a4adc89e036dc3efda" - integrity sha512-7O0UsPQVNKqpHeHLpfvOG4uXmlw+MOxYvUv6Otc9uH5SYMIxvF6eBdjkWvC3f9G+VXe0RsNExyAQBeTRug/wqQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-typescript" "^7.8.3" - "@babel/plugin-transform-unicode-escapes@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" @@ -947,6 +1018,15 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/template@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" + integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/types" "^7.16.0" + "@babel/template@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" @@ -956,7 +1036,39 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0": +"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.5.tgz#d7d400a8229c714a59b87624fc67b0f1fbd4b2b3" + integrity sha512-FOCODAzqUMROikDYLYxl4nmwiLlu85rNqBML/A5hKRVXG2LV8d0iMqgPzdYTcIpjZEBB7D6UDU9vxRZiriASdQ== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.5" + "@babel/helper-environment-visitor" "^7.16.5" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-hoist-variables" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/parser" "^7.16.5" + "@babel/types" "^7.16.0" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/traverse@^7.16.0", "@babel/traverse@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.7.tgz#dac01236a72c2560073658dd1a285fe4e0865d76" + integrity sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/traverse@^7.16.8": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.8.tgz#bab2f2b09a5fe8a8d9cad22cbfe3ba1d126fef9c" integrity sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ== @@ -972,7 +1084,23 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.1.6", "@babel/types@^7.12.1", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.2": +"@babel/types@^7.1.6", "@babel/types@^7.12.1", "@babel/types@^7.16.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.2": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" + integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" + to-fast-properties "^2.0.0" + +"@babel/types@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.7.tgz#4ed19d51f840ed4bd5645be6ce40775fecf03159" + integrity sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + +"@babel/types@^7.16.8": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== @@ -988,184 +1116,16 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@csstools/postcss-sass@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-sass/-/postcss-sass-4.0.0.tgz#6617c5096a6b71751ee0b87d2326418b9d97effb" - integrity sha512-yvm2aaODNJ8PBn43HjYiRvVJcYLEpz5BEKXxQ/7HryqcL+TnAceXZO+khadTEkjw90r8afR5wykTzvVpFeo4vw== - dependencies: - "@csstools/sass-import-resolve" "^1.0.0" - postcss "^7.0.14" - sass "^1.16.1" - source-map "~0.7.3" - -"@csstools/sass-import-resolve@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/sass-import-resolve/-/sass-import-resolve-1.0.0.tgz#32c3cdb2f7af3cd8f0dca357b592e7271f3831b5" - integrity sha512-pH4KCsbtBLLe7eqUrw8brcuFO8IZlN36JjdKlOublibVdAIPHCzEnpBWOVUXK5sCf+DpBi8ZtuWtjF0srybdeA== - -"@ember-data/adapter@3.28.3": - version "3.28.3" - resolved "https://registry.yarnpkg.com/@ember-data/adapter/-/adapter-3.28.3.tgz#9f2976d32060a94a5e6b11f16d04419bd6dc21f9" - integrity sha512-VY8aml7Qw6BYEVyBbE6wMVY3CvXta7VCAs+WfchaOSeAVQSnzxYao//1jXlpnLKTKwJHc6q5rVHxfp8DLUBCuw== - dependencies: - "@ember-data/private-build-infra" "3.28.3" - "@ember-data/store" "3.28.3" - "@ember/edition-utils" "^1.2.0" - "@ember/string" "^3.0.0" - ember-cli-babel "^7.26.6" - ember-cli-test-info "^1.0.0" - ember-cli-typescript "^4.1.0" - -"@ember-data/canary-features@3.28.3": - version "3.28.3" - resolved "https://registry.yarnpkg.com/@ember-data/canary-features/-/canary-features-3.28.3.tgz#d3b469defa5e12f1adf0162fb0c61cd3a5fbc108" - integrity sha512-7DlArWpwN4M+Yt1o6fJ3ddvCyDqbpXiWuv0erncLyZomHEiEMwyiT6O9ddtE9sqsxu+g3721xbuB0bMsgnMilA== - dependencies: - ember-cli-babel "^7.26.6" - ember-cli-typescript "^4.1.0" - -"@ember-data/debug@3.28.3": - version "3.28.3" - resolved "https://registry.yarnpkg.com/@ember-data/debug/-/debug-3.28.3.tgz#d928a4d93f3fe1cb20c65bf20bd17b1a99d0c5cd" - integrity sha512-4eudplK48o4TVGP8/onmbJuEFLep0HDzYS+wMdrwNlJZx+0y+3NLq3Bifx8IvQ42aSjFrxTJCBNczFMO0iE61A== - dependencies: - "@ember-data/private-build-infra" "3.28.3" - "@ember/edition-utils" "^1.2.0" - "@ember/string" "^3.0.0" - ember-cli-babel "^7.26.6" - ember-cli-test-info "^1.0.0" - ember-cli-typescript "^4.1.0" - -"@ember-data/model@3.28.3": - version "3.28.3" - resolved "https://registry.yarnpkg.com/@ember-data/model/-/model-3.28.3.tgz#b3a9e58144f39c81e10e3e14390b7f3cebdce463" - integrity sha512-SxbcJe6RI8rUM/urYQxql9/+E6SPruhGU0AOpvpiP0IPlaRv+oZCKmvXsO2MSKRxmV89YenJNUQ9p/ch0iuMYA== - dependencies: - "@ember-data/canary-features" "3.28.3" - "@ember-data/private-build-infra" "3.28.3" - "@ember-data/store" "3.28.3" - "@ember/edition-utils" "^1.2.0" - "@ember/string" "^3.0.0" - ember-cached-decorator-polyfill "^0.1.4" - ember-cli-babel "^7.26.6" - ember-cli-string-utils "^1.1.0" - ember-cli-test-info "^1.0.0" - ember-cli-typescript "^4.1.0" - ember-compatibility-helpers "^1.2.0" - inflection "~1.13.1" - -"@ember-data/private-build-infra@3.28.3": - version "3.28.3" - resolved "https://registry.yarnpkg.com/@ember-data/private-build-infra/-/private-build-infra-3.28.3.tgz#1169d8885a9d1abc671552ac80136b857785d491" - integrity sha512-aFeZJe+aa7ETaWdsrXAq63e3a9InYacGyp9xxDM37x6TENZ9Z/hdSKf9nOXYqiMuFzcNy5i1a7RUM0z1HWV1vQ== - dependencies: - "@babel/plugin-transform-block-scoping" "^7.8.3" - "@ember-data/canary-features" "3.28.3" - "@ember/edition-utils" "^1.2.0" - babel-plugin-debug-macros "^0.3.3" - babel-plugin-filter-imports "^4.0.0" - babel6-plugin-strip-class-callcheck "^6.0.0" - broccoli-debug "^0.6.5" - broccoli-file-creator "^2.1.1" - broccoli-funnel "^3.0.3" - broccoli-merge-trees "^4.2.0" - broccoli-rollup "^4.1.1" - calculate-cache-key-for-tree "^2.0.0" - chalk "^4.0.0" - ember-cli-babel "^7.26.6" - ember-cli-path-utils "^1.0.0" - ember-cli-string-utils "^1.1.0" - ember-cli-typescript "^4.1.0" - ember-cli-version-checker "^5.1.1" - esm "^3.2.25" - git-repo-info "^2.1.1" - glob "^7.1.6" - npm-git-info "^1.0.3" - rimraf "^3.0.2" - rsvp "^4.8.5" - semver "^7.1.3" - silent-error "^1.1.1" - -"@ember-data/record-data@3.28.3": - version "3.28.3" - resolved "https://registry.yarnpkg.com/@ember-data/record-data/-/record-data-3.28.3.tgz#3c8c1d1a56d6f9b9c3de8715e66ad7ca6c402daa" - integrity sha512-sUFoNKg4nyiiKdhazsaTBhslzFgTH3etRDZB6jHzVg2gcO+lTks64UkQqTCgX15vxxn5YTS4qqI0iAGfMhlUeg== - dependencies: - "@ember-data/canary-features" "3.28.3" - "@ember-data/private-build-infra" "3.28.3" - "@ember-data/store" "3.28.3" - "@ember/edition-utils" "^1.2.0" - ember-cli-babel "^7.26.6" - ember-cli-test-info "^1.0.0" - ember-cli-typescript "^4.1.0" - "@ember-data/rfc395-data@^0.0.4": version "0.0.4" resolved "https://registry.yarnpkg.com/@ember-data/rfc395-data/-/rfc395-data-0.0.4.tgz#ecb86efdf5d7733a76ff14ea651a1b0ed1f8a843" integrity sha512-tGRdvgC9/QMQSuSuJV45xoyhI0Pzjm7A9o/MVVA3HakXIImJbbzx/k/6dO9CUEQXIyS2y0fW6C1XaYOG7rY0FQ== -"@ember-data/serializer@3.28.3": - version "3.28.3" - resolved "https://registry.yarnpkg.com/@ember-data/serializer/-/serializer-3.28.3.tgz#3bd962892c67e5473ffffe29d1f4ebbc68ff8e21" - integrity sha512-8n2JxITm2MVzjSsaDC4MKsoc8z5T3kxIvWLUhJZWa1bOtftmyxCRwfrC4aeLgDV9gdXy0INCdtJ3L5L4qkChkQ== - dependencies: - "@ember-data/private-build-infra" "3.28.3" - "@ember-data/store" "3.28.3" - ember-cli-babel "^7.26.6" - ember-cli-test-info "^1.0.0" - ember-cli-typescript "^4.1.0" - -"@ember-data/store@3.28.3": - version "3.28.3" - resolved "https://registry.yarnpkg.com/@ember-data/store/-/store-3.28.3.tgz#4f186ae3d9903cc35be01c0739e856b775d79cbd" - integrity sha512-mZTrG8Vj/Sg1T24bnRPH5pbyBTmU5b+A5M+N2TOvHwS/JELTfdpJz3jYrqnpWzvru0VttqLipH7M8P4eEq34Cg== - dependencies: - "@ember-data/canary-features" "3.28.3" - "@ember-data/private-build-infra" "3.28.3" - "@ember/string" "^3.0.0" - "@glimmer/tracking" "^1.0.4" - ember-cli-babel "^7.26.6" - ember-cli-path-utils "^1.0.0" - ember-cli-typescript "^4.1.0" - -"@ember-decorators/component@^6.1.1": - version "6.1.1" - resolved "https://registry.yarnpkg.com/@ember-decorators/component/-/component-6.1.1.tgz#b360dc4fa8e576ee1c840879399ef1745fd96e06" - integrity sha512-Cj8tY/c0MC/rsipqsiWLh3YVN72DK92edPYamD/HzvftwzC6oDwawWk8RmStiBnG9PG/vntAt41l3S7HSSA+1Q== - dependencies: - "@ember-decorators/utils" "^6.1.1" - ember-cli-babel "^7.1.3" - -"@ember-decorators/object@^6.1.1": - version "6.1.1" - resolved "https://registry.yarnpkg.com/@ember-decorators/object/-/object-6.1.1.tgz#50c922f5ac9af3ddd381cb6a43a031dfd9a70c7a" - integrity sha512-cb4CNR9sRoA31J3FCOFLDuR9ztM4wO9w1WlS4JeNRS7Z69SlB/XSXB/vplA3i9OOaXEy/zKWbu5ndZrHz0gvLw== - dependencies: - "@ember-decorators/utils" "^6.1.1" - ember-cli-babel "^7.1.3" - -"@ember-decorators/utils@^6.1.1": - version "6.1.1" - resolved "https://registry.yarnpkg.com/@ember-decorators/utils/-/utils-6.1.1.tgz#6b619814942b4fb3747cfa9f540c9f05283d7c5e" - integrity sha512-0KqnoeoLKb6AyoSU65TRF5T85wmS4uDn06oARddwNPxxf/lt5jQlh41uX3W7V/fWL9tPu8x1L1Vvpc80MN1+YA== - dependencies: - ember-cli-babel "^7.1.3" - "@ember/edition-utils@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@ember/edition-utils/-/edition-utils-1.2.0.tgz#a039f542dc14c8e8299c81cd5abba95e2459cfa6" integrity sha512-VmVq/8saCaPdesQmftPqbFtxJWrzxNGSQ+e8x8LLe3Hjm36pJ04Q8LeORGZkAeOhldoUX9seLGmSaHeXkIqoog== -"@ember/legacy-built-in-components@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@ember/legacy-built-in-components/-/legacy-built-in-components-0.4.0.tgz#23d61c9220c04d3590644ffe427cc987db4880a7" - integrity sha512-nm0tTe9d7aYpPa8sk85M4AZ3iDfuVQ4/7M4D4IdI7frkAOGpy6gAKS9nR/UR8mJDW06CLz9NYEKWIlLopEu/Og== - dependencies: - "@embroider/macros" "^0.47.1" - ember-cli-babel "^7.26.6" - ember-cli-htmlbars "^5.7.1" - ember-cli-typescript "^4.1.0" - "@ember/optional-features@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@ember/optional-features/-/optional-features-2.0.0.tgz#c809abd5a27d5b0ef3c6de3941334ab6153313f0" @@ -1178,7 +1138,7 @@ mkdirp "^1.0.4" silent-error "^1.1.1" -"@ember/render-modifiers@^1.0.2 || ^2.0.0", "@ember/render-modifiers@^2.0.0": +"@ember/render-modifiers@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@ember/render-modifiers/-/render-modifiers-2.0.0.tgz#7106928078c6463bc6ee3cbffb6d71dbb8602145" integrity sha512-FbvowKEnYx102MaNMrePBC7RCmuf3BaqPKbp6QP7S6oJaDMuLrGblXW4TxOrE93C6II+6D4QNB4WFGuPeQ3ZBg== @@ -1187,13 +1147,6 @@ ember-compatibility-helpers "^1.2.5" ember-modifier-manager-polyfill "^1.2.0" -"@ember/string@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@ember/string/-/string-3.0.0.tgz#e3a3cc7874c9f64eadfdac644d8b1238721ce289" - integrity sha512-T+7QYDp8ItlQseNveK2lL6OsOO5wg7aNQ/M2RpO8cGwM80oZOnr/Y35HmMfu4ejFEc+F1LPegvu7LGfeJOicWA== - dependencies: - ember-cli-babel "^7.26.6" - "@ember/test-helpers@^2.4.2": version "2.6.0" resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-2.6.0.tgz#d687515c6ab49ba72717fc62046970ef4a72ea9c" @@ -1270,19 +1223,6 @@ resolve "^1.8.1" semver "^7.3.2" -"@embroider/macros@0.43.5", "@embroider/macros@^0.43.5": - version "0.43.5" - resolved "https://registry.yarnpkg.com/@embroider/macros/-/macros-0.43.5.tgz#f846bb883482436611a58a3512c687d4f9fddfad" - integrity sha512-WmLa0T3dyG2XyN5Gr7k1RINDirFzAzh6CRvykRMcuahq1rCrav8ADrWgQzKpPWxdR6DgQCuoyimopJhLbYOpgQ== - dependencies: - "@embroider/shared-internals" "0.43.5" - assert-never "^1.2.1" - ember-cli-babel "^7.26.6" - find-up "^5.0.0" - lodash "^4.17.21" - resolve "^1.20.0" - semver "^7.3.2" - "@embroider/macros@^0.40.0": version "0.40.0" resolved "https://registry.yarnpkg.com/@embroider/macros/-/macros-0.40.0.tgz#f58763b4cfb9b4089679b478a28627595341bc5a" @@ -1295,19 +1235,6 @@ resolve "^1.8.1" semver "^7.3.2" -"@embroider/macros@^0.47.1": - version "0.47.2" - resolved "https://registry.yarnpkg.com/@embroider/macros/-/macros-0.47.2.tgz#23cbe92cac3c24747f054e1eea2a22538bf7ebd0" - integrity sha512-ViNWluJCeM5OPlM3rs8kdOz3RV5rpfXX5D2rDnc/q86xRS0xf4NFEjYRV7W6fBcD0b3v5jSHDTwrjq9Kee4rHg== - dependencies: - "@embroider/shared-internals" "0.47.2" - assert-never "^1.2.1" - ember-cli-babel "^7.26.6" - find-up "^5.0.0" - lodash "^4.17.21" - resolve "^1.20.0" - semver "^7.3.2" - "@embroider/macros@^0.50.0": version "0.50.2" resolved "https://registry.yarnpkg.com/@embroider/macros/-/macros-0.50.2.tgz#9ec7d0bb1fa846410fc6c209a69b782640942b11" @@ -1335,31 +1262,6 @@ semver "^7.3.2" typescript-memoize "^1.0.0-alpha.3" -"@embroider/shared-internals@0.43.5": - version "0.43.5" - resolved "https://registry.yarnpkg.com/@embroider/shared-internals/-/shared-internals-0.43.5.tgz#4269208095452c23bfa4f08554fd8f7ed7b83a83" - integrity sha512-vydU3kRS5hH/hWOBHiHP06427d0C5t2p+UTPtbH09+Jlyj0WvvtgUfiNltEneY6jjpLXlqOfgs4LjsRdmBFksw== - dependencies: - ember-rfc176-data "^0.3.17" - fs-extra "^9.1.0" - lodash "^4.17.21" - resolve-package-path "^4.0.1" - semver "^7.3.5" - typescript-memoize "^1.0.1" - -"@embroider/shared-internals@0.47.2": - version "0.47.2" - resolved "https://registry.yarnpkg.com/@embroider/shared-internals/-/shared-internals-0.47.2.tgz#24e9fa0dd9c529d5c996ee1325729ea08d1fa19f" - integrity sha512-SxdZYjAE0fiM5zGDz+12euWIsQZ1tsfR1k+NKmiWMyLhA5T3pNgbR2/Djvx/cVIxOtEavGGSllYbzRKBtV4xMg== - dependencies: - babel-import-util "^0.2.0" - ember-rfc176-data "^0.3.17" - fs-extra "^9.1.0" - lodash "^4.17.21" - resolve-package-path "^4.0.1" - semver "^7.3.5" - typescript-memoize "^1.0.1" - "@embroider/shared-internals@0.50.2", "@embroider/shared-internals@^0.50.0": version "0.50.2" resolved "https://registry.yarnpkg.com/@embroider/shared-internals/-/shared-internals-0.50.2.tgz#567c5451db31a1f3edc2f64376ce5a0dcaaabacb" @@ -1381,15 +1283,6 @@ lodash "^4.17.21" resolve "^1.20.0" -"@embroider/util@^0.43.5": - version "0.43.5" - resolved "https://registry.yarnpkg.com/@embroider/util/-/util-0.43.5.tgz#d3acc98b3f92fbb26fa9265cff4f245ca8e6b61e" - integrity sha512-jSIYx671RB957jbhh4T4kN3StTyA/Q+XReRlYIqgJmUW/u5+UEreqtXASSVKY6mJdPTjXY3zn1EY0vZKMbj9gw== - dependencies: - "@embroider/macros" "0.43.5" - broccoli-funnel "^3.0.5" - ember-cli-babel "^7.23.1" - "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -1405,14 +1298,6 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@fullhuman/postcss-purgecss@^2.1.2": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@fullhuman/postcss-purgecss/-/postcss-purgecss-2.3.0.tgz#50a954757ec78696615d3e118e3fee2d9291882e" - integrity sha512-qnKm5dIOyPGJ70kPZ5jiz0I9foVOic0j+cOzNDoo8KoCf6HjicIZ99UfO2OmE7vCYSKAAepEwJtNzpiiZAh9xw== - dependencies: - postcss "7.0.32" - purgecss "^2.3.0" - "@gar/promisify@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210" @@ -1540,7 +1425,7 @@ "@handlebars/parser" "~2.0.0" simple-html-tokenizer "^0.5.11" -"@glimmer/tracking@^1.0.4": +"@glimmer/tracking@^1.0.0", "@glimmer/tracking@^1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@glimmer/tracking/-/tracking-1.0.4.tgz#f1bc1412fe5e2236d0f8d502994a8f88af1bbb21" integrity sha512-F+oT8I55ba2puSGIzInmVrv/8QA2PcK1VD+GWgFMhF6WC97D+uZX7BFg+a3s/2N4FVBq5KHE+QxZzgazM151Yw== @@ -1816,18 +1701,6 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - -"@types/acorn@^4.0.3": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.6.tgz#d61ca5480300ac41a7d973dd5b84d0a591154a22" - integrity sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ== - dependencies: - "@types/estree" "*" - "@types/body-parser@*": version "1.19.1" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.1.tgz#0c0174c42a7d017b818303d4b5d969cb0b75929c" @@ -1836,11 +1709,6 @@ "@types/connect" "*" "@types/node" "*" -"@types/broccoli-plugin@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@types/broccoli-plugin/-/broccoli-plugin-1.3.0.tgz#38f8462fecaebc4e09a32e4d4ed1b9808f75bbca" - integrity sha512-SLk4/hFc2kGvgwNFrpn2O1juxFOllcHAywvlo7VwxfExLzoz1GGJ0oIZCwj5fwSpvHw4AWpZjJ1fUvb62PDayQ== - "@types/cacheable-request@^6.0.1": version "6.0.2" resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9" @@ -1892,7 +1760,33 @@ dependencies: "@types/ms" "*" -"@types/ember@^3.1.0": +"@types/ember-qunit@^3.4.15": + version "3.4.15" + resolved "https://registry.yarnpkg.com/@types/ember-qunit/-/ember-qunit-3.4.15.tgz#333b3644f4c80af755f54f82ccdf3f1652cfac8d" + integrity sha512-ZWQcnLCsQfNq0MK9o0dt+reFn9Sk6rcMP2f/bkRRM/HCnNSD1XjMgnRhbKcDmCk0CmxTt5WtfSmlO0TYubcxcA== + dependencies: + "@types/ember" "*" + "@types/ember-test-helpers" "*" + "@types/qunit" "*" + +"@types/ember-resolver@^5.0.10": + version "5.0.10" + resolved "https://registry.yarnpkg.com/@types/ember-resolver/-/ember-resolver-5.0.10.tgz#bb265571a9cea9c4e6b095c8318df4e7f7837d5f" + integrity sha512-NTN4blgVUXi0wE6XTsuUjks15cI6em4sdTcgDlE8FvL8gkrxQFLSByyKDTBofHCncM6LwZcHz/eVVm13rwfC2w== + dependencies: + "@types/ember" "*" + +"@types/ember-test-helpers@*": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@types/ember-test-helpers/-/ember-test-helpers-1.0.10.tgz#cbd7f7e73a05f1c08075b99d4906cd5d92f443f0" + integrity sha512-sa0bIRIFPJanqA+6gzjLPUtBifJmVh7PKWwR1C0tmt+R2/CKSFMxn1j38nafNDNKS1so2KVCU/WmHvQ/WlF+gA== + dependencies: + "@types/ember" "*" + "@types/htmlbars-inline-precompile" "*" + "@types/jquery" "*" + "@types/rsvp" "*" + +"@types/ember@*": version "3.16.5" resolved "https://registry.yarnpkg.com/@types/ember/-/ember-3.16.5.tgz#c2d6b0f178761c0c2fbc6fc39b4b6958c256d0ac" integrity sha512-8BzT1g8r7xQsN2p7qIUZ0AXWEVpJ5LmaRWP3iT79PLyIQfTAYvHSueUl14lrB8renETjwr4+ZvVPKurn9TKxNA== @@ -1918,7 +1812,7 @@ "@types/jquery" "*" "@types/rsvp" "*" -"@types/ember__application@*": +"@types/ember__application@*", "@types/ember__application@^3.16.3": version "3.16.3" resolved "https://registry.yarnpkg.com/@types/ember__application/-/ember__application-3.16.3.tgz#f16e852b3200d5601b6f073be5a030cfadebb778" integrity sha512-kx7euIQ+zy7EjyBMoWTOMPxkbGmLitwKp7Cxga2xeKnpMPrZCIaLcFM50XnbnbjzmlSMmJEn5EDIEYwlqnfzvg== @@ -1928,7 +1822,7 @@ "@types/ember__object" "*" "@types/ember__routing" "*" -"@types/ember__array@*": +"@types/ember__array@*", "@types/ember__array@^3.16.4": version "3.16.4" resolved "https://registry.yarnpkg.com/@types/ember__array/-/ember__array-3.16.4.tgz#d61b5b876e4976de03aa027ea89cb48cd640d49d" integrity sha512-K21LKDNDW3ug0fLsFUTHZPyaFnzUUZEOtsmzmmeXKI6apJcoaz/yF3V0fvM2FUWNLs6rXB3PXegtzik6lq44Yw== @@ -1936,7 +1830,7 @@ "@types/ember__array" "*" "@types/ember__object" "*" -"@types/ember__component@*": +"@types/ember__component@*", "@types/ember__component@^3.16.6": version "3.16.6" resolved "https://registry.yarnpkg.com/@types/ember__component/-/ember__component-3.16.6.tgz#affc4798ee97f58747f5d173b8f739ddab26e551" integrity sha512-Zi82wppu0wtijXKAsyn75KBauJKIIHoYk5cbk7OmOKE2zmV1qzCfsxjM8x9iTJpu97T1P0vXWZ91aXM7KeQFMw== @@ -1945,14 +1839,14 @@ "@types/ember__object" "*" "@types/jquery" "*" -"@types/ember__controller@*": +"@types/ember__controller@*", "@types/ember__controller@^3.16.6": version "3.16.6" resolved "https://registry.yarnpkg.com/@types/ember__controller/-/ember__controller-3.16.6.tgz#1fbb5f9483b9b9fd59b78f7289e6bd382e457f9c" integrity sha512-oltv4YaMljVMvhXJMT/UFmAQOJgYbnNUBGgOsclctpb9FYkimsJm8xIAoEmP5wBekzjeNd5UDf9F1DxSDpqgGw== dependencies: "@types/ember__object" "*" -"@types/ember__debug@*": +"@types/ember__debug@*", "@types/ember__debug@^3.16.5": version "3.16.5" resolved "https://registry.yarnpkg.com/@types/ember__debug/-/ember__debug-3.16.5.tgz#ce04532c100fdc1c97c9f308d69a88d6e956db97" integrity sha512-Sj0idBMOd33PubBbxtXty+tzyVIAbxK4cf8q0AKZ0z5wOL0wsFOLCvMgRMxSME3DB2uvJd4u9tGr15XFM+Z03A== @@ -1966,7 +1860,7 @@ resolved "https://registry.yarnpkg.com/@types/ember__destroyable/-/ember__destroyable-3.22.0.tgz#2af2c27f5d8996694c3f0fe906e2536b2e4c5aca" integrity sha512-T5wZGK1MwEelNIv1bbAvRQZPo9zvfjpGyyFPwjz+sakjImKVcQzb/yq1SgGyT0QTAQAT7l0L+kFru9+fSVVo5A== -"@types/ember__engine@*": +"@types/ember__engine@*", "@types/ember__engine@^3.16.3": version "3.16.3" resolved "https://registry.yarnpkg.com/@types/ember__engine/-/ember__engine-3.16.3.tgz#f61114922ed7d1a65f468bfd3e9dd5b128f32822" integrity sha512-D9cLOlkQjT+b+9vszgAfxnTelx1H/GiL9FNmPcYQbLd+Ta8+FdKssb2Vt4DbHZrc5MsBJ8LMRs5/xPhkHuCDMA== @@ -1974,12 +1868,12 @@ "@types/ember__engine" "*" "@types/ember__object" "*" -"@types/ember__error@*": +"@types/ember__error@*", "@types/ember__error@^3.16.1": version "3.16.1" resolved "https://registry.yarnpkg.com/@types/ember__error/-/ember__error-3.16.1.tgz#752d977f4ee35d4fa66bcfeebae6e85240fc62a6" integrity sha512-bnB58krc18B8qgSMsRBbrVbNb4msyb8pMzS9Yo3brw/bRjuPb1ONUrjieAVHeespXlXNJOusvvX/pji641iCPQ== -"@types/ember__object@*": +"@types/ember__object@*", "@types/ember__object@^3.12.6": version "3.12.6" resolved "https://registry.yarnpkg.com/@types/ember__object/-/ember__object-3.12.6.tgz#5f77662881e3c6f877d63e08b46861c52a36714a" integrity sha512-LAGldyJmFpErWLCm1HOAGd3G4E7Sem+AzQycKH+zSiYSwKVxNSpzUIU1yewlScHn5WvKwLEVE2H6mPvwvkQ+yA== @@ -1987,12 +1881,12 @@ "@types/ember__object" "*" "@types/rsvp" "*" -"@types/ember__polyfills@*": +"@types/ember__polyfills@*", "@types/ember__polyfills@^3.12.1": version "3.12.1" resolved "https://registry.yarnpkg.com/@types/ember__polyfills/-/ember__polyfills-3.12.1.tgz#aed838e35a3e8670d247333d4c7ea2c2f7b3c43e" integrity sha512-Xw9RxFizB8guT6YGg3VNi5tjbzAjqk+bLtAJ1oVl2I1FylKrRFh0bwobxT2K0BF/i0QFEYlqckHpN/OoCpkvkA== -"@types/ember__routing@*": +"@types/ember__routing@*", "@types/ember__routing@^3.16.15": version "3.16.15" resolved "https://registry.yarnpkg.com/@types/ember__routing/-/ember__routing-3.16.15.tgz#14e7e98ae331d05b19aacc29c9759c9f3dc222ec" integrity sha512-M+QujBvUQZJgcLo/vj1aYVdEZaQWxuD+GM2CLp2jmkb4RYGhdYPuNYK7KkDMhJH5vMICOeK7KVVKrmN1KhAQHg== @@ -2003,40 +1897,50 @@ "@types/ember__routing" "*" "@types/ember__service" "*" -"@types/ember__runloop@*": +"@types/ember__runloop@*", "@types/ember__runloop@^3.16.3": version "3.16.3" resolved "https://registry.yarnpkg.com/@types/ember__runloop/-/ember__runloop-3.16.3.tgz#c37ed507aed0f642ef19cbc4b5d0b3a167e3ada6" integrity sha512-iYT7+9z6lVOi4RSyM9tBwIOidRI0Y5nyaRtIMP1DhP8n2UZjvVG6ao4PkpFnpFWR4R8Ajj2p13SaPGxpEV62jg== dependencies: "@types/ember__runloop" "*" -"@types/ember__service@*": +"@types/ember__service@*", "@types/ember__service@^3.16.1": version "3.16.1" resolved "https://registry.yarnpkg.com/@types/ember__service/-/ember__service-3.16.1.tgz#e8f941ec50ff4a7531487dc60830b4e6c7da6a47" integrity sha512-XYl75IZGE+ZqRiCr9tBLXNYBVM9WX18AQHw/73QSQP/7sfyv5QFP/C/KvJrwP9wJmqh0BS2lVAXP3Nx4/BRNTw== dependencies: "@types/ember__object" "*" -"@types/ember__string@*": +"@types/ember__string@*", "@types/ember__string@^3.16.3": version "3.16.3" resolved "https://registry.yarnpkg.com/@types/ember__string/-/ember__string-3.16.3.tgz#6c474d422dfae5c382a3c52bd3c994048d04b72e" integrity sha512-0T9ofzm9LL/bSG5u1SxKx/j2h/bHKkl5NKjGCNbFQxEKBw4f2cs6+AMDgWke9z+qrRRIz9vGEtMXnA3yJrO2xA== dependencies: "@types/ember__template" "*" -"@types/ember__template@*": +"@types/ember__template@*", "@types/ember__template@^3.16.1": version "3.16.1" resolved "https://registry.yarnpkg.com/@types/ember__template/-/ember__template-3.16.1.tgz#30d7f50a49b190934db0f5a56dd76ad86c21efc6" integrity sha512-APQINizzizl2LHWGMFBCanRjKZQsdzqn7b+us17zbNhnx/R0IZAJq901x/i7eozCRwxsDKmGzNABSCIu6uc1Tg== -"@types/ember__test@*": +"@types/ember__test-helpers@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@types/ember__test-helpers/-/ember__test-helpers-2.6.0.tgz#26a3e709502868fbf73d3cf06942335195f6408b" + integrity sha512-iLb4npBAi2nWdAgnL/lClJkZUXuS4pCpGq3a5yzWoNjzRZCJzLI+zbmNgfY3nQjsV8lXclgfEY0ZzGkRpHU+Xw== + dependencies: + "@types/ember" "*" + "@types/ember__application" "*" + "@types/ember__error" "*" + "@types/htmlbars-inline-precompile" "*" + +"@types/ember__test@*", "@types/ember__test@^3.16.1": version "3.16.1" resolved "https://registry.yarnpkg.com/@types/ember__test/-/ember__test-3.16.1.tgz#8407e42b9835a13ef0c6ef7a7ce3aa3d7ebcb7ed" integrity sha512-0ICnkM4BDwOKhqmLQRpfvNuZlb6QOqE+FhP5fPaWXWy7bgcL9CY7kMRc7N+wZQbTvbSKqgEdfbvjd0bJsIrz5w== dependencies: "@types/ember__application" "*" -"@types/ember__utils@*": +"@types/ember__utils@*", "@types/ember__utils@^3.16.2": version "3.16.2" resolved "https://registry.yarnpkg.com/@types/ember__utils/-/ember__utils-3.16.2.tgz#3fa9a0666a3e8204262e2a2960289aaf01f29467" integrity sha512-tBbqewgegiKSpGZvGh3pbcoXwLCMvKVdLRE97vys75nAEz/vBzkGJm+PDz1HVaTkRukWbRhlDiTm2qFH8qRnSw== @@ -2103,7 +2007,7 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/htmlbars-inline-precompile@*": +"@types/htmlbars-inline-precompile@*", "@types/htmlbars-inline-precompile@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/htmlbars-inline-precompile/-/htmlbars-inline-precompile-1.0.1.tgz#de564513fabb165746aecd76369c87bd85e5bbb4" integrity sha512-sVD2e6QAAHW0Y6Btse+tTA9k9g0iKm87wjxRsgZRU5EwSooz80tenbV+fA+f2BI2g0G2CqxsS1rIlwQCtPRQow== @@ -2120,7 +2024,7 @@ dependencies: "@types/sizzle" "*" -"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": +"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== @@ -2159,26 +2063,21 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.8.tgz#50d680c8a8a78fe30abe6906453b21ad8ab0ad7b" integrity sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg== -"@types/node@^9.6.0": - version "9.6.61" - resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.61.tgz#29f124eddd41c4c74281bd0b455d689109fc2a2d" - integrity sha512-/aKAdg5c8n468cYLy2eQrcR5k6chlbNwZNGUj3TboyPa2hcO2QAJcfymlqPzMiRj8B6nYKXjzQz36minFE0RwQ== - "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/q@^1.5.1": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" - integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== - "@types/qs@*": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== +"@types/qunit@*", "@types/qunit@^2.11.2": + version "2.11.2" + resolved "https://registry.yarnpkg.com/@types/qunit/-/qunit-2.11.2.tgz#4cb99ae3ea6afe94b9c4cfd3ab715a285729ca9c" + integrity sha512-Bt0fz9l8sWxqP+cjoqWQyNVyOPPK+7GPhKIKLLTi7llR0FV+pyd50FXTXafZeZnsFVUgXw4pdupydz75E6vxjQ== + "@types/range-parser@*": version "1.2.4" resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" @@ -2199,7 +2098,7 @@ "@types/glob" "*" "@types/node" "*" -"@types/rsvp@*", "@types/rsvp@^4.0.2": +"@types/rsvp@*", "@types/rsvp@^4.0.4": version "4.0.4" resolved "https://registry.yarnpkg.com/@types/rsvp/-/rsvp-4.0.4.tgz#55e93e7054027f1ad4b4ebc1e60e59eb091e2d32" integrity sha512-J3Ol++HCC7/hwZhanDvggFYU/GtxHxE/e7cGRWxR04BF7Tt3TqJZ84BkzQgDxmX0uu8IagiyfmfoUlBACh2Ilg== @@ -2227,6 +2126,76 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== +"@typescript-eslint/eslint-plugin@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.6.0.tgz#efd8668b3d6627c46ce722c2afe813928fe120a0" + integrity sha512-MIbeMy5qfLqtgs1hWd088k1hOuRsN9JrHUPwVVKCD99EOUqScd7SrwoZl4Gso05EAP9w1kvLWUVGJOVpRPkDPA== + dependencies: + "@typescript-eslint/experimental-utils" "5.6.0" + "@typescript-eslint/scope-manager" "5.6.0" + debug "^4.3.2" + functional-red-black-tree "^1.0.1" + ignore "^5.1.8" + regexpp "^3.2.0" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/experimental-utils@5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.6.0.tgz#f3a5960f2004abdcac7bb81412bafc1560841c23" + integrity sha512-VDoRf3Qj7+W3sS/ZBXZh3LBzp0snDLEgvp6qj0vOAIiAPM07bd5ojQ3CTzF/QFl5AKh7Bh1ycgj6lFBJHUt/DA== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.6.0" + "@typescript-eslint/types" "5.6.0" + "@typescript-eslint/typescript-estree" "5.6.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/parser@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.6.0.tgz#11677324659641400d653253c03dcfbed468d199" + integrity sha512-YVK49NgdUPQ8SpCZaOpiq1kLkYRPMv9U5gcMrywzI8brtwZjr/tG3sZpuHyODt76W/A0SufNjYt9ZOgrC4tLIQ== + dependencies: + "@typescript-eslint/scope-manager" "5.6.0" + "@typescript-eslint/types" "5.6.0" + "@typescript-eslint/typescript-estree" "5.6.0" + debug "^4.3.2" + +"@typescript-eslint/scope-manager@5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.6.0.tgz#9dd7f007dc8f3a34cdff6f79f5eaab27ae05157e" + integrity sha512-1U1G77Hw2jsGWVsO2w6eVCbOg0HZ5WxL/cozVSTfqnL/eB9muhb8THsP0G3w+BB5xAHv9KptwdfYFAUfzcIh4A== + dependencies: + "@typescript-eslint/types" "5.6.0" + "@typescript-eslint/visitor-keys" "5.6.0" + +"@typescript-eslint/types@5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.6.0.tgz#745cb1b59daadcc1f32f7be95f0f68accf38afdd" + integrity sha512-OIZffked7mXv4mXzWU5MgAEbCf9ecNJBKi+Si6/I9PpTaj+cf2x58h2oHW5/P/yTnPkKaayfjhLvx+crnl5ubA== + +"@typescript-eslint/typescript-estree@5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.6.0.tgz#dfbb19c9307fdd81bd9c650c67e8397821d7faf0" + integrity sha512-92vK5tQaE81rK7fOmuWMrSQtK1IMonESR+RJR2Tlc7w4o0MeEdjgidY/uO2Gobh7z4Q1hhS94Cr7r021fMVEeA== + dependencies: + "@typescript-eslint/types" "5.6.0" + "@typescript-eslint/visitor-keys" "5.6.0" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.6.0.tgz#3e36509e103fe9713d8f035ac977235fd63cb6e6" + integrity sha512-1p7hDp5cpRFUyE3+lvA74egs+RWSgumrBpzBCDzfTFv0aQ7lIeay80yU0hIxgAhwQ6PcasW35kaOCyDOv6O/Ng== + dependencies: + "@typescript-eslint/types" "5.6.0" + eslint-visitor-keys "^3.0.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" @@ -2518,11 +2487,6 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abortcontroller-polyfill@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz#1b5b487bd6436b5b764fd52a612509702c3144b5" - integrity sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q== - accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -2531,13 +2495,6 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn-dynamic-import@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278" - integrity sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg== - dependencies: - acorn "^5.0.0" - acorn-globals@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" @@ -2556,39 +2513,25 @@ acorn-jsx@^5.3.1: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-node@^1.6.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" - integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== - dependencies: - acorn "^7.0.0" - acorn-walk "^7.0.0" - xtend "^4.0.2" - -acorn-walk@^7.0.0, acorn-walk@^7.1.1: +acorn-walk@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^5.0.0, acorn@^5.5.3: - version "5.7.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" - integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== - acorn@^6.4.1: version "6.4.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.0.0, acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: +acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" - integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== +acorn@^8.2.4, acorn@^8.4.1: + version "8.6.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895" + integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== agent-base@6, agent-base@^6.0.2: version "6.0.2" @@ -2644,7 +2587,7 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" -amd-name-resolver@^1.2.0, amd-name-resolver@^1.3.1: +amd-name-resolver@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/amd-name-resolver/-/amd-name-resolver-1.3.1.tgz#ffe71c683c6e7191fc4ae1bb3aaed15abea135d9" integrity sha512-26qTEWqZQ+cxSYygZ4Cf8tsjDBLceJahhtewxtKZA3SRa4PluuqYCuheemDQD+7Mf5B7sr+zhTDWAHDh02a1Dw== @@ -2771,7 +2714,7 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" -argparse@^1.0.7, argparse@~1.0.2: +argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== @@ -2845,21 +2788,11 @@ asn1.js@^5.2.0: minimalistic-assert "^1.0.0" safer-buffer "^2.1.0" -asn1@0.1.11: - version "0.1.11" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" - integrity sha1-VZvhg3bQik7E2+gId9J4GGObLfc= - assert-never@^1.1.0, assert-never@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.2.1.tgz#11f0e363bf146205fb08193b5c7b90f4d1cf44fe" integrity sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw== -assert-plus@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" - integrity sha1-7nQAlBMALYTOxyGcasgRgS5yMWA= - assert@^1.1.1: version "1.5.0" resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" @@ -2941,11 +2874,6 @@ async@~0.2.9: resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E= -async@~0.9.0: - version "0.9.2" - resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" - integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -2961,36 +2889,6 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@^10.3.7: - version "10.4.0" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.0.tgz#c3577eb32a1079a440ec253e404eaf1eb21388c8" - integrity sha512-7FdJ1ONtwzV1G43GDD0kpVMn/qbiNqyOPMFTX5nRffI+7vgWoFEc6DcXOxHJxrWNDXrZh18eDsZjvZGUljSRGA== - dependencies: - browserslist "^4.17.5" - caniuse-lite "^1.0.30001272" - fraction.js "^4.1.1" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.1.0" - -autoprefixer@^9.4.5: - version "9.8.8" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.8.tgz#fd4bd4595385fa6f06599de749a4d5f7a474957a" - integrity sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA== - dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001109" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - picocolors "^0.2.1" - postcss "^7.0.32" - postcss-value-parser "^4.1.0" - -aws-sign2@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63" - integrity sha1-xXED96F/wDfwLXwuZLYC6iI/fWM= - babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -3059,11 +2957,6 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-import-util@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-import-util/-/babel-import-util-0.2.0.tgz#b468bb679919601a3570f9e317536c54f2862e23" - integrity sha512-CtWYYHU/MgK88rxMrLfkD356dApswtR/kWZ/c6JifG1m10e7tBBrs/366dFzWMAoqYmG5/JSh+94tUSpIwh+ag== - babel-import-util@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/babel-import-util/-/babel-import-util-1.1.0.tgz#4156b16ef090c4f0d3cdb869ff799202f24aeb93" @@ -3121,16 +3014,6 @@ babel-plugin-ember-modules-api-polyfill@^3.5.0: dependencies: ember-rfc176-data "^0.3.17" -babel-plugin-ember-template-compilation@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-ember-template-compilation/-/babel-plugin-ember-template-compilation-1.0.1.tgz#64baf434ff1b751c6292936f8b9eb75a2f8149dc" - integrity sha512-V/kY6CDyUNrl5Kx6UPKUPhzSKNfdrxNii+S5zK4dgJvVyoxFv7Ykg06Ct/yskY0LkA4wUPdYN7JOBtYJwHk2sg== - dependencies: - babel-import-util "^0.2.0" - line-column "^1.0.2" - magic-string "^0.25.7" - string.prototype.matchall "^4.0.5" - babel-plugin-filter-imports@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-filter-imports/-/babel-plugin-filter-imports-4.0.0.tgz#068f8da15236a96a9602c36dc6f4a6eeca70a4f4" @@ -3139,7 +3022,7 @@ babel-plugin-filter-imports@^4.0.0: "@babel/types" "^7.7.2" lodash "^4.17.15" -babel-plugin-htmlbars-inline-precompile@^5.0.0, babel-plugin-htmlbars-inline-precompile@^5.2.1, babel-plugin-htmlbars-inline-precompile@^5.3.0: +babel-plugin-htmlbars-inline-precompile@^5.0.0, babel-plugin-htmlbars-inline-precompile@^5.2.1: version "5.3.1" resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-5.3.1.tgz#5ba272e2e4b6221522401f5f1d98a73b1de38787" integrity sha512-QWjjFgSKtSRIcsBhJmEwS2laIdrA6na8HAlc/pEAhjHgQsah/gMiBFRZvbQTy//hWxR4BMwV7/Mya7q5H8uHeA== @@ -3258,11 +3141,6 @@ babel-types@^6.26.0: lodash "^4.17.4" to-fast-properties "^1.0.3" -babel6-plugin-strip-class-callcheck@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel6-plugin-strip-class-callcheck/-/babel6-plugin-strip-class-callcheck-6.0.0.tgz#de841c1abebbd39f78de0affb2c9a52ee228fddf" - integrity sha1-3oQcGr6705943gr/ssmlLuIo/d8= - babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" @@ -3402,18 +3280,6 @@ body@^5.1.0: raw-body "~1.1.0" safe-json-parse "~1.0.1" -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -boom@0.4.x: - version "0.4.2" - resolved "https://registry.yarnpkg.com/boom/-/boom-0.4.2.tgz#7a636e9ded4efcefb19cef4947a3c67dfaee911b" - integrity sha1-emNune1O/O+xnO9JR6PGffrukRs= - dependencies: - hoek "0.9.x" - bower-config@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/bower-config/-/bower-config-1.4.3.tgz#3454fecdc5f08e7aa9cc6d556e492be0669689ae" @@ -3503,15 +3369,6 @@ broccoli-asset-rewrite@^2.0.0: dependencies: broccoli-filter "^1.2.3" -broccoli-autoprefixer@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/broccoli-autoprefixer/-/broccoli-autoprefixer-9.0.0.tgz#9cebd9d3c7f0c3e1037de98518f91f5f723e54c8" - integrity sha512-2ZifoQO/xbBaK1Co/qW+2A+CLY9JELHIhM35SufBih6Okarkq1J8S02bQeHXdwPSYl4ztr/JnYvYOjyQ9eH9gw== - dependencies: - autoprefixer "^10.3.7" - broccoli-persistent-filter "^3.1.2" - postcss "^8.3.11" - broccoli-babel-transpiler@^7.8.0: version "7.8.0" resolved "https://registry.yarnpkg.com/broccoli-babel-transpiler/-/broccoli-babel-transpiler-7.8.0.tgz#7e0f01fce5739f49bbadeee7f1e625ca51cad66e" @@ -3530,15 +3387,6 @@ broccoli-babel-transpiler@^7.8.0: rsvp "^4.8.4" workerpool "^3.1.1" -broccoli-bridge@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/broccoli-bridge/-/broccoli-bridge-1.0.0.tgz#6223fd64b62062c31333539f0f3c42d0acd92fb1" - integrity sha1-YiP9ZLYgYsMTM1OfDzxC0KzZL7E= - dependencies: - broccoli-plugin "^1.3.0" - fs-extra "^7.0.0" - symlink-or-copy "^1.2.0" - broccoli-builder@^0.18.14: version "0.18.14" resolved "https://registry.yarnpkg.com/broccoli-builder/-/broccoli-builder-0.18.14.tgz#4b79e2f844de11a4e1b816c3f49c6df4776c312d" @@ -3574,24 +3422,6 @@ broccoli-clean-css@^1.1.0: inline-source-map-comment "^1.0.5" json-stable-stringify "^1.0.0" -broccoli-concat@^3.7.4: - version "3.7.5" - resolved "https://registry.yarnpkg.com/broccoli-concat/-/broccoli-concat-3.7.5.tgz#223beda8c1184252cf08ae020a3d45ffa6a48218" - integrity sha512-rDs1Mej3Ej0Cy5yIO9oIQq5+BCv0opAwS2NW7M0BeCsAMeFM42Z/zacDUC6jKc5OV5wiHvGTyCPLnZkMe0h6kQ== - dependencies: - broccoli-debug "^0.6.5" - broccoli-kitchen-sink-helpers "^0.3.1" - broccoli-plugin "^1.3.0" - ensure-posix-path "^1.0.2" - fast-sourcemap-concat "^1.4.0" - find-index "^1.1.0" - fs-extra "^4.0.3" - fs-tree-diff "^0.5.7" - lodash.merge "^4.6.2" - lodash.omit "^4.1.0" - lodash.uniq "^4.2.0" - walk-sync "^0.3.2" - broccoli-concat@^4.2.4, broccoli-concat@^4.2.5: version "4.2.5" resolved "https://registry.yarnpkg.com/broccoli-concat/-/broccoli-concat-4.2.5.tgz#d578f00094048b5fc87195e82fbdbde20d838d29" @@ -3654,7 +3484,7 @@ broccoli-file-creator@^2.1.1: broccoli-plugin "^1.1.0" mkdirp "^0.5.1" -broccoli-filter@^1.2.2, broccoli-filter@^1.2.3, broccoli-filter@^1.3.0: +broccoli-filter@^1.2.2, broccoli-filter@^1.2.3: version "1.3.0" resolved "https://registry.yarnpkg.com/broccoli-filter/-/broccoli-filter-1.3.0.tgz#71e3a8e32a17f309e12261919c5b1006d6766de6" integrity sha512-VXJXw7eBfG82CFxaBDjYmyN7V72D4In2zwLVQJd/h3mBfF3CMdRTsv2L20lmRTtCv1sAHcB+LgMso90e/KYiLw== @@ -3669,38 +3499,11 @@ broccoli-filter@^1.2.2, broccoli-filter@^1.2.3, broccoli-filter@^1.3.0: symlink-or-copy "^1.0.1" walk-sync "^0.3.1" -broccoli-flatiron@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/broccoli-flatiron/-/broccoli-flatiron-0.1.3.tgz#fc7bd8faf7db429ed7199933aa2ec7ef84a8d943" - integrity sha512-dD/4ck+LKOLTBzFlxP2zX7fhWt1TFMVR/88b9/wd8LkAHUyAzWs1vBah94ObSvajYGZ7ic+XvMXw+OhmvdlYoQ== - dependencies: - broccoli-plugin "^1.3.0" - mkdirp "^0.5.1" - broccoli-funnel-reducer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/broccoli-funnel-reducer/-/broccoli-funnel-reducer-1.0.0.tgz#11365b2a785aec9b17972a36df87eef24c5cc0ea" integrity sha1-ETZbKnha7JsXlyo234fu8kxcwOo= -broccoli-funnel@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/broccoli-funnel/-/broccoli-funnel-2.0.1.tgz#6823c73b675ef78fffa7ab800f083e768b51d449" - integrity sha512-C8Lnp9TVsSSiZMGEF16C0dCiNg2oJqUKwuZ1K4kVC6qRPG/2Cj/rtB5kRCC9qEbwqhX71bDbfHROx0L3J7zXQg== - 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" - broccoli-funnel@^2.0.0, broccoli-funnel@^2.0.1, broccoli-funnel@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/broccoli-funnel/-/broccoli-funnel-2.0.2.tgz#0edf629569bc10bd02cc525f74b9a38e71366a75" @@ -3720,7 +3523,7 @@ broccoli-funnel@^2.0.0, broccoli-funnel@^2.0.1, broccoli-funnel@^2.0.2: symlink-or-copy "^1.0.0" walk-sync "^0.3.1" -broccoli-funnel@^3.0.0, broccoli-funnel@^3.0.3, broccoli-funnel@^3.0.5, broccoli-funnel@^3.0.8: +broccoli-funnel@^3.0.3, broccoli-funnel@^3.0.5, broccoli-funnel@^3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/broccoli-funnel/-/broccoli-funnel-3.0.8.tgz#f5b62e2763c3918026a15a3c833edc889971279b" integrity sha512-ng4eIhPYiXqMw6SyGoxPHR3YAwEd2lr9FgBI1CyTbspl4txZovOsmzFkMkGAlu88xyvYXJqHiM2crfLa65T1BQ== @@ -3741,20 +3544,6 @@ broccoli-kitchen-sink-helpers@^0.3.1: glob "^5.0.10" mkdirp "^0.5.1" -broccoli-merge-trees@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/broccoli-merge-trees/-/broccoli-merge-trees-1.2.4.tgz#a001519bb5067f06589d91afa2942445a2d0fdb5" - integrity sha1-oAFRm7UGfwZYnZGvopQkRaLQ/bU= - dependencies: - broccoli-plugin "^1.3.0" - can-symlink "^1.0.0" - fast-ordered-set "^1.0.2" - fs-tree-diff "^0.5.4" - heimdalljs "^0.2.1" - heimdalljs-logger "^0.1.7" - rimraf "^2.4.3" - symlink-or-copy "^1.0.0" - broccoli-merge-trees@^3.0.0, broccoli-merge-trees@^3.0.1, broccoli-merge-trees@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/broccoli-merge-trees/-/broccoli-merge-trees-3.0.2.tgz#f33b451994225522b5c9bcf27d59decfd8ba537d" @@ -3763,7 +3552,7 @@ broccoli-merge-trees@^3.0.0, broccoli-merge-trees@^3.0.1, broccoli-merge-trees@^ broccoli-plugin "^1.3.0" merge-trees "^2.0.0" -broccoli-merge-trees@^4.0.0, broccoli-merge-trees@^4.2.0: +broccoli-merge-trees@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/broccoli-merge-trees/-/broccoli-merge-trees-4.2.0.tgz#692d3c163ecea08c5714a9434d664e628919f47c" integrity sha512-nTrQe5AQtCrW4enLRvbD/vTLHqyW2tz+vsLXQe4IEaUhepuMGVKJJr+I8n34Vu6fPjmPLwTjzNC8izMIDMtHPw== @@ -3796,13 +3585,6 @@ broccoli-node-info@^2.1.0: resolved "https://registry.yarnpkg.com/broccoli-node-info/-/broccoli-node-info-2.2.0.tgz#feb01c13020792f429e01d7f7845dc5b3a7932b3" integrity sha512-VabSGRpKIzpmC+r+tJueCE5h8k6vON7EIMMWu6d/FyPdtijwLQ7QvzShEw+m3mHoDzUaj/kiZsDYrS8X2adsBg== -broccoli-output-wrapper@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/broccoli-output-wrapper/-/broccoli-output-wrapper-2.0.0.tgz#f1e0b9b2f259a67fd41a380141c3c20b096828e6" - integrity sha512-V/ozejo+snzNf75i/a6iTmp71k+rlvqjE3+jYfimuMwR1tjNNRdtfno+NGNQB2An9bIAeqZnKhMDurAznHAdtA== - dependencies: - heimdalljs-logger "^0.1.10" - broccoli-output-wrapper@^3.2.5: version "3.2.5" resolved "https://registry.yarnpkg.com/broccoli-output-wrapper/-/broccoli-output-wrapper-3.2.5.tgz#514b17801c92922a2c2f87fd145df2a25a11bc5f" @@ -3812,7 +3594,7 @@ broccoli-output-wrapper@^3.2.5: heimdalljs-logger "^0.1.10" symlink-or-copy "^1.2.0" -broccoli-persistent-filter@^1.1.5, broccoli-persistent-filter@^1.1.6, broccoli-persistent-filter@^1.4.3: +broccoli-persistent-filter@^1.1.6, broccoli-persistent-filter@^1.4.3: version "1.4.6" resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz#80762d19000880a77da33c34373299c0f6a3e615" integrity sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw== @@ -3831,7 +3613,7 @@ broccoli-persistent-filter@^1.1.5, broccoli-persistent-filter@^1.1.6, broccoli-p symlink-or-copy "^1.0.1" walk-sync "^0.3.1" -broccoli-persistent-filter@^2.2.1, broccoli-persistent-filter@^2.3.0, broccoli-persistent-filter@^2.3.1: +broccoli-persistent-filter@^2.2.1, broccoli-persistent-filter@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-2.3.1.tgz#4a052e0e0868b344c3a2977e35a3d497aa9eca72" integrity sha512-hVsmIgCDrl2NFM+3Gs4Cr2TA6UPaIZip99hN8mtkaUPgM8UeVnCbxelCvBjUBHo0oaaqP5jzqqnRVvb568Yu5g== @@ -3851,7 +3633,7 @@ broccoli-persistent-filter@^2.2.1, broccoli-persistent-filter@^2.3.0, broccoli-p sync-disk-cache "^1.3.3" walk-sync "^1.0.0" -broccoli-persistent-filter@^3.1.0, broccoli-persistent-filter@^3.1.1, broccoli-persistent-filter@^3.1.2: +broccoli-persistent-filter@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-3.1.2.tgz#41da6b9577be09a170ecde185f2c5a6099f99c4e" integrity sha512-CbU95RXXVyy+eJV9XTiHUC7NnsY3EvdVrGzp3YgyvO2bzXZFE5/GzDp4X/VQqX+jsk4qyT1HvMOF0sD1DX68TQ== @@ -3868,20 +3650,7 @@ broccoli-persistent-filter@^3.1.0, broccoli-persistent-filter@^3.1.1, broccoli-p symlink-or-copy "^1.0.1" sync-disk-cache "^2.0.0" -"broccoli-plugin@1.5.1 - 5", broccoli-plugin@^4.0.0, broccoli-plugin@^4.0.1, broccoli-plugin@^4.0.2, broccoli-plugin@^4.0.3, broccoli-plugin@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-4.0.7.tgz#dd176a85efe915ed557d913744b181abe05047db" - integrity sha512-a4zUsWtA1uns1K7p9rExYVYG99rdKeGRymW0qOCNkvDPHQxVi3yVyJHhQbM3EZwdt2E0mnhr5e0c/bPpJ7p3Wg== - dependencies: - broccoli-node-api "^1.7.0" - broccoli-output-wrapper "^3.2.5" - fs-merger "^3.2.1" - promise-map-series "^0.3.0" - quick-temp "^0.1.8" - rimraf "^3.0.2" - symlink-or-copy "^1.3.1" - -broccoli-plugin@^1.0.0, broccoli-plugin@^1.1.0, broccoli-plugin@^1.2.0, broccoli-plugin@^1.2.1, broccoli-plugin@^1.3.0, broccoli-plugin@^1.3.1: +broccoli-plugin@^1.0.0, broccoli-plugin@^1.1.0, broccoli-plugin@^1.2.0, broccoli-plugin@^1.2.1, broccoli-plugin@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-1.3.1.tgz#a26315732fb99ed2d9fb58f12a1e14e986b4fabd" integrity sha512-DW8XASZkmorp+q7J4EeDEZz+LoyKLAd2XZULXyD9l4m9/hAKV3vjHmB1kiUshcWAYMgTP1m2i4NnqCE/23h6AQ== @@ -3891,7 +3660,7 @@ broccoli-plugin@^1.0.0, broccoli-plugin@^1.1.0, broccoli-plugin@^1.2.0, broccoli rimraf "^2.3.4" symlink-or-copy "^1.1.8" -broccoli-plugin@^2.0.0, broccoli-plugin@^2.1.0: +broccoli-plugin@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-2.1.0.tgz#2fab6c578219cfcc64f773e9616073313fc8b334" integrity sha512-ElE4caljW4slapyEhSD9jU9Uayc8SoSABWdmY9SqbV8DHNxU6xg1jJsPcMm+cXOvggR3+G+OXAYQeFjWVnznaw== @@ -3901,73 +3670,18 @@ broccoli-plugin@^2.0.0, broccoli-plugin@^2.1.0: rimraf "^2.3.4" symlink-or-copy "^1.1.8" -broccoli-plugin@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-3.1.0.tgz#54ba6dd90a42ec3db5624063292610e326b1e542" - integrity sha512-7w7FP8WJYjLvb0eaw27LO678TGGaom++49O1VYIuzjhXjK5kn2+AMlDm7CaUFw4F7CLGoVQeZ84d8gICMJa4lA== - dependencies: - broccoli-node-api "^1.6.0" - broccoli-output-wrapper "^2.0.0" - fs-merger "^3.0.1" - promise-map-series "^0.2.1" - quick-temp "^0.1.3" - rimraf "^2.3.4" - symlink-or-copy "^1.1.8" - -broccoli-postcss-single@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/broccoli-postcss-single/-/broccoli-postcss-single-5.0.0.tgz#adcd2b92f59504bbb9b5da1f9aa6a1c7afa4d9d5" - integrity sha512-u8o00CadIDnwQkE4tGqxwK5rXgWVTeB8xh1yDk0ZLy2JNMfI5EhbHr+A1HZpfe40Xy5IBmQ7VlbU9aIrCP2R8Q== - dependencies: - broccoli-caching-writer "^3.0.3" - include-path-searcher "^0.1.0" - minimist ">=1.2.5" - mkdirp "^1.0.3" - object-assign "^4.1.1" - postcss "^8.1.4" - -broccoli-postcss@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/broccoli-postcss/-/broccoli-postcss-6.0.0.tgz#79337302398a3b8f19bcfc3691def46b3951fcf9" - integrity sha512-XldlgbRag80S5MTkA63PpCzTrjiEh3P1wkuVT0e9HzLK9hgD7VQLucShGoy3a7O1PkCjr2g+1Awg8xJoSqgKCA== - dependencies: - broccoli-funnel "^3.0.0" - broccoli-persistent-filter "^3.1.1" - minimist ">=1.2.5" - object-assign "^4.1.1" - postcss "^8.1.4" - -broccoli-rollup@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/broccoli-rollup/-/broccoli-rollup-2.1.1.tgz#0b77dc4b7560a53e998ea85f3b56772612d4988d" - integrity sha512-aky/Ovg5DbsrsJEx2QCXxHLA6ZR+9u1TNVTf85soP4gL8CjGGKQ/JU8R3BZ2ntkWzo6/83RCKzX6O+nlNKR5MQ== - dependencies: - "@types/node" "^9.6.0" - amd-name-resolver "^1.2.0" - broccoli-plugin "^1.2.1" - fs-tree-diff "^0.5.2" - heimdalljs "^0.2.1" - heimdalljs-logger "^0.1.7" - magic-string "^0.24.0" - node-modules-path "^1.0.1" - rollup "^0.57.1" - symlink-or-copy "^1.1.8" - walk-sync "^0.3.1" - -broccoli-rollup@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/broccoli-rollup/-/broccoli-rollup-4.1.1.tgz#7531a24d88ddab9f1bace1c6ee6e6ca74a38d36f" - integrity sha512-hkp0dB5chiemi32t6hLe5bJvxuTOm1TU+SryFlZIs95KT9+94uj0C8w6k6CsZ2HuIdIZg6D252t4gwOlcTXrpA== +broccoli-plugin@^4.0.0, broccoli-plugin@^4.0.1, broccoli-plugin@^4.0.2, broccoli-plugin@^4.0.3, broccoli-plugin@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-4.0.7.tgz#dd176a85efe915ed557d913744b181abe05047db" + integrity sha512-a4zUsWtA1uns1K7p9rExYVYG99rdKeGRymW0qOCNkvDPHQxVi3yVyJHhQbM3EZwdt2E0mnhr5e0c/bPpJ7p3Wg== dependencies: - "@types/broccoli-plugin" "^1.3.0" - broccoli-plugin "^2.0.0" - fs-tree-diff "^2.0.1" - heimdalljs "^0.2.6" - node-modules-path "^1.0.1" - rollup "^1.12.0" - rollup-pluginutils "^2.8.1" - symlink-or-copy "^1.2.0" - walk-sync "^1.1.3" + broccoli-node-api "^1.7.0" + broccoli-output-wrapper "^3.2.5" + fs-merger "^3.2.1" + promise-map-series "^0.3.0" + quick-temp "^0.1.8" + rimraf "^3.0.2" + symlink-or-copy "^1.3.1" broccoli-sass-source-maps@^4.0.0: version "4.0.0" @@ -4019,36 +3733,6 @@ broccoli-stew@^3.0.0: symlink-or-copy "^1.2.0" walk-sync "^1.1.3" -broccoli-string-replace@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/broccoli-string-replace/-/broccoli-string-replace-0.1.2.tgz#1ed92f85680af8d503023925e754e4e33676b91f" - integrity sha1-HtkvhWgK+NUDAjkl51Tk4zZ2uR8= - dependencies: - broccoli-persistent-filter "^1.1.5" - minimatch "^3.0.3" - -broccoli-svg-optimizer@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/broccoli-svg-optimizer/-/broccoli-svg-optimizer-2.0.0.tgz#22b6920bee5e126e86b95ae0cdf8ad6cc4be3735" - integrity sha512-zIbUmBeSxl9r18Mqjl0OArvXyAKuSDd4FFVcH5HmiX2/1SFUofL4JN5g5qhP/GqQnLTEVdwr61LawSGDZHcqOg== - dependencies: - broccoli-persistent-filter "^2.3.1" - json-stable-stringify "^1.0.1" - lodash "^4.17.15" - rsvp "^4.8.5" - svgo "1.3.0" - -broccoli-templater@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/broccoli-templater/-/broccoli-templater-2.0.2.tgz#285a892071c0b3ad5ebc275d9e8b3465e2d120d6" - integrity sha512-71KpNkc7WmbEokTQpGcbGzZjUIY1NSVa3GB++KFKAfx5SZPUozCOsBlSTwxcv8TLoCAqbBnsX5AQPgg6vJ2l9g== - dependencies: - broccoli-plugin "^1.3.1" - fs-tree-diff "^0.5.9" - lodash.template "^4.4.0" - rimraf "^2.6.2" - walk-sync "^0.3.3" - broccoli-terser-sourcemap@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/broccoli-terser-sourcemap/-/broccoli-terser-sourcemap-4.1.0.tgz#5f37441b64a3b6bfb0c67e9af232259c9576f115" @@ -4166,7 +3850,18 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.17.5, browserslist@^4.19.1: +browserslist@^4.14.5, browserslist@^4.17.5: + version "4.18.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.18.1.tgz#60d3920f25b6860eb917c6c7b185576f4d8b017f" + integrity sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ== + dependencies: + caniuse-lite "^1.0.30001280" + electron-to-chromium "^1.3.896" + escalade "^3.1.1" + node-releases "^2.0.1" + picocolors "^1.0.0" + +browserslist@^4.19.1: version "4.19.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== @@ -4231,7 +3926,7 @@ bytes@3.0.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= -bytes@3.1.0, bytes@^3.0.0: +bytes@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== @@ -4347,11 +4042,6 @@ callsites@^3.0.0, callsites@^3.1.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase-css@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" - integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - camelcase@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" @@ -4364,20 +4054,15 @@ can-symlink@^1.0.0: dependencies: tmp "0.0.28" -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" +caniuse-lite@^1.0.30001280: + version "1.0.30001298" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001298.tgz#0e690039f62e91c3ea581673d716890512e7ec52" + integrity sha512-AcKqikjMLlvghZL/vfTHorlQsLDhGRalYf1+GmWCf5SCMziSGjRYQW/JEksj14NaYHIR6KIhrFAy0HV5C25UzQ== -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001272, caniuse-lite@^1.0.30001286: - version "1.0.30001299" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz#d753bf6444ed401eb503cbbe17aa3e1451b5a68c" - integrity sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw== +caniuse-lite@^1.0.30001286: + version "1.0.30001291" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001291.tgz#08a8d2cfea0b2cf2e1d94dd795942d0daef6108c" + integrity sha512-roMV5V0HNGgJ88s42eE70sstqGW/gwFndosYrikHthw98N5tLnOTxFqMLQjZVRxTWFlJ4rn+MsgXrR7MDPY4jA== capture-exit@^2.0.0: version "2.0.0" @@ -4394,7 +4079,7 @@ cardinal@^1.0.0: ansicolors "~0.2.1" redeyed "~1.0.0" -chalk@4.1.2, "chalk@^3.0.0 || ^4.0.0", chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: +chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -4449,28 +4134,6 @@ charm@^1.0.0: dependencies: inherits "^2.0.1" -cheerio@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" - integrity sha1-qbqoYKP5tZWmuBsahocxIe06Jp4= - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash.assignin "^4.0.9" - lodash.bind "^4.1.4" - lodash.defaults "^4.0.1" - lodash.filter "^4.4.0" - lodash.flatten "^4.2.0" - lodash.foreach "^4.3.0" - lodash.map "^4.4.0" - lodash.merge "^4.4.0" - lodash.pick "^4.2.1" - lodash.reduce "^4.4.0" - lodash.reject "^4.4.0" - lodash.some "^4.4.0" - "chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1: version "3.5.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" @@ -4643,15 +4306,6 @@ cli-width@^3.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== -clipboard@^2.0.6: - version "2.0.8" - resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.8.tgz#ffc6c103dd2967a83005f3f61976aa4655a4cdba" - integrity sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ== - dependencies: - good-listener "^1.2.2" - select "^1.1.2" - tiny-emitter "^2.0.0" - cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -4678,15 +4332,6 @@ clone@^2.1.2: resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -4700,7 +4345,7 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.9.0, color-convert@^1.9.3: +color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -4719,27 +4364,11 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0, color-name@~1.1.4: +color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.6.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.0.tgz#63b6ebd1bec11999d1df3a79a7569451ac2be8aa" - integrity sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.1.2: - version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" - integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== - dependencies: - color-convert "^1.9.3" - color-string "^1.6.0" - colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" @@ -4757,13 +4386,6 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -combined-stream@~0.0.4: - version "0.0.7" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-0.0.7.tgz#0137e657baa5a7541c57ac37ac5fc07d73b4dc1f" - integrity sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8= - dependencies: - delayed-stream "0.0.5" - commander@2.8.x: version "2.8.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" @@ -4786,11 +4408,6 @@ commander@^4.1.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== - commander@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" @@ -4878,7 +4495,7 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -console-ui@^3.0.4, console-ui@^3.1.1, console-ui@^3.1.2: +console-ui@^3.0.4, console-ui@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/console-ui/-/console-ui-3.1.2.tgz#51aef616ff02013c85ccee6a6d77ef7a94202e7a" integrity sha512-+5j3R4wZJcEYZeXk30whc4ZU/+fWW9JMTNntVuMYpjZJ9n26Cxr0tUBXco1NRjVZRpRVvZ4DDKKKIHNYeUG9Dw== @@ -5073,13 +4690,6 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -cryptiles@0.2.x: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-0.2.2.tgz#ed91ff1f17ad13d3748288594f8a48a0d26f325c" - integrity sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw= - dependencies: - boom "0.4.x" - crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -5118,47 +4728,6 @@ css-loader@^5.2.0: schema-utils "^3.0.0" semver "^7.3.5" -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-tree@1.0.0-alpha.29: - version "1.0.0-alpha.29" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" - integrity sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg== - dependencies: - mdn-data "~1.1.0" - source-map "^0.5.3" - -css-tree@1.0.0-alpha.33: - version "1.0.0-alpha.33" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.33.tgz#970e20e5a91f7a378ddd0fc58d0b6c8d4f3be93e" - integrity sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w== - dependencies: - mdn-data "2.0.4" - source-map "^0.5.3" - css-tree@^1.0.0-alpha.39: version "1.1.3" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" @@ -5167,43 +4736,16 @@ css-tree@^1.0.0-alpha.39: mdn-data "2.0.14" source-map "^0.6.1" -css-unit-converter@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21" - integrity sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA== - -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== - cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -csso@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" - integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg== - dependencies: - css-tree "1.0.0-alpha.29" - cssom@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== -cssom@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" - integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== - cssom@~0.3.6: version "0.3.8" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" @@ -5216,11 +4758,6 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" -ctype@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" - integrity sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8= - cyclist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" @@ -5240,27 +4777,11 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -data-urls@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.1.tgz#597fc2ae30f8bc4dbcf731fcd1b1954353afc6f8" - integrity sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^3.0.0" - whatwg-url "^10.0.0" - date-fns@^2.28.0: version "2.28.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2" integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== -date-time@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/date-time/-/date-time-2.1.0.tgz#0286d1b4c769633b3ca13e1e62558d2dbdc2eba2" - integrity sha512-/9+C44X7lot0IeiyfgJmETtRMhBidBYM2QFFIkGa0U1k+hSyY87Nw7PY3eDqpvCBm7I3WCSfPeZskW/YYq6m4g== - dependencies: - time-zone "^1.0.0" - debug@2.6.9, debug@^2.1.0, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -5282,7 +4803,7 @@ debug@^3.0.1, debug@^3.1.0, debug@^3.1.1: dependencies: ms "^2.1.1" -decimal.js@^10.2.1, decimal.js@^10.3.1: +decimal.js@^10.2.1: version "10.3.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== @@ -5362,26 +4883,11 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= - -delayed-stream@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f" - integrity sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8= - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegate@^3.1.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" - integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== - delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -5450,15 +4956,6 @@ detect-newline@3.1.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -detective@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" - integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== - dependencies: - acorn-node "^1.6.1" - defined "^1.0.0" - minimist "^1.1.1" - diff@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" @@ -5487,24 +4984,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-serializer@0, dom-serializer@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - domexception@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" @@ -5512,36 +4996,6 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" -domexception@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" - integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== - dependencies: - webidl-conversions "^7.0.0" - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1, domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - dot-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" @@ -5595,6 +5049,11 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= +electron-to-chromium@^1.3.896: + version "1.4.40" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.40.tgz#f5dbced7bfbc7072e5e7ca5487f8f9a42c8bc768" + integrity sha512-j+eVIyQGt2EU5xPWUblhpp5P5z5xyAdRgzogBgfe2F5JGV17gr9pfzWBua6DlPL00LavbOjxubWkWkbVQe9Wlw== + electron-to-chromium@^1.4.17: version "1.4.46" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.46.tgz#c88a6fedc766589826db0481602a888864ade1ca" @@ -5613,19 +5072,6 @@ elliptic@^6.5.3: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -"ember-app-scheduler@^5.1.2 || ^6.0.0 || ^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/ember-app-scheduler/-/ember-app-scheduler-7.0.0.tgz#029fe204ccfc86ccc3ff0447307fad4d1d40e2ab" - integrity sha512-5Wy/fWhsnSKT0xtL6EkFOuYMOc8T2lREmi7aRjXMeZCm5nDO7/mukezQ0ViVp9DQVlcbHyJz/qbBylnKq+CILw== - dependencies: - "@ember/test-waiters" "^3.0.0" - "@types/ember" "^3.1.0" - "@types/rsvp" "^4.0.2" - ember-cli-babel "^7.23.0" - ember-cli-typescript "^3.1.4" - ember-compatibility-helpers "^1.1.2" - ember-destroyable-polyfill "^2.0.2" - ember-auto-import@^1.11.3, ember-auto-import@^1.2.19: version "1.12.0" resolved "https://registry.yarnpkg.com/ember-auto-import/-/ember-auto-import-1.12.0.tgz#52246b04891090e2608244e65c4c6af7710df12b" @@ -5661,158 +5107,50 @@ ember-auto-import@^1.11.3, ember-auto-import@^1.2.19: walk-sync "^0.3.3" webpack "^4.43.0" -ember-auto-import@^2.0.0, ember-auto-import@^2.2.4: - version "2.3.0" - resolved "https://registry.yarnpkg.com/ember-auto-import/-/ember-auto-import-2.3.0.tgz#ffb05e11322ea041d73cddee7c7d804ffe130913" - integrity sha512-38fOQ8ix3IQfFZHg99xQh/rJ1JwOhl2egauYXpCmFKdNm45rkRap3HDhkA4JtO532R7KEkaloU9Bj0oEUv520w== - dependencies: - "@babel/core" "^7.16.7" - "@babel/plugin-proposal-class-properties" "^7.16.7" - "@babel/plugin-proposal-decorators" "^7.16.7" - "@babel/preset-env" "^7.16.7" - "@embroider/macros" "^0.50.0" - "@embroider/shared-internals" "^0.50.0" - babel-loader "^8.0.6" - babel-plugin-ember-modules-api-polyfill "^3.5.0" - babel-plugin-htmlbars-inline-precompile "^5.2.1" - babel-plugin-syntax-dynamic-import "^6.18.0" - broccoli-debug "^0.6.4" - broccoli-funnel "^3.0.8" - broccoli-merge-trees "^4.2.0" - broccoli-plugin "^4.0.0" - broccoli-source "^3.0.0" - css-loader "^5.2.0" - debug "^4.3.1" - fs-extra "^6.0.1" - fs-tree-diff "^2.0.0" - handlebars "^4.3.1" - js-string-escape "^1.0.1" - lodash "^4.17.19" - parse5 "^6.0.1" - resolve "^1.20.0" - resolve-package-path "^3.1.0" - semver "^7.3.4" - style-loader "^2.0.0" - typescript-memoize "^1.0.0-alpha.3" - walk-sync "^3.0.0" - -ember-cache-primitive-polyfill@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ember-cache-primitive-polyfill/-/ember-cache-primitive-polyfill-1.0.1.tgz#a27075443bd87e5af286c1cd8a7df24e3b9f6715" - integrity sha512-hSPcvIKarA8wad2/b6jDd/eU+OtKmi6uP+iYQbzi5TQpjsqV6b4QdRqrLk7ClSRRKBAtdTuutx+m+X+WlEd2lw== - dependencies: - ember-cli-babel "^7.22.1" - ember-cli-version-checker "^5.1.1" - ember-compatibility-helpers "^1.2.1" - silent-error "^1.1.1" - -ember-cached-decorator-polyfill@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/ember-cached-decorator-polyfill/-/ember-cached-decorator-polyfill-0.1.4.tgz#f1e2c65cc78d0d9c4ac0e047e643af477eb85ace" - integrity sha512-JOK7kBCWsTVCzmCefK4nr9BACDJk0owt9oIUaVt6Q0UtQ4XeAHmoK5kQ/YtDcxQF1ZevHQFdGhsTR3JLaHNJgA== - dependencies: - "@glimmer/tracking" "^1.0.4" - ember-cache-primitive-polyfill "^1.0.1" - ember-cli-babel "^7.21.0" - ember-cli-babel-plugin-helpers "^1.1.1" - -ember-cli-addon-docs-yuidoc@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ember-cli-addon-docs-yuidoc/-/ember-cli-addon-docs-yuidoc-1.0.0.tgz#0bc750c3950d77fbcce645855063013b295ee6be" - integrity sha512-q7tNVbD4niPgXEQ1Exfeh7Mfiwi3sbT5IG8vXgAumpJgATouTJrk3MGeZjInR7x6CV0AKDiExF/BdMwAshTmrg== - dependencies: - broccoli-caching-writer "^3.0.3" - ember-cli-babel "^7.22.1" - ember-cli-htmlbars "^5.3.1" - fs-extra "^9.0.1" - json-api-serializer "^2.6.0" - lodash "^4.17.20" - yuidocjs "^0.10.2" - -ember-cli-addon-docs@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ember-cli-addon-docs/-/ember-cli-addon-docs-4.2.1.tgz#503624c4583b37f5ab0616a5ad43f8ddd401607b" - integrity sha512-3GCCrzamZTlzZLzqTWIN7HOk2AwbI5OwaUMjNY/qJAWud4QGtHiw9ak8rckcCMaFZVtvXjnUTD1eCBHOh0tIDg== - dependencies: - "@csstools/postcss-sass" "^4.0.0" - "@ember/legacy-built-in-components" "^0.4.0" - "@ember/render-modifiers" "^2.0.0" - "@glimmer/component" "^1.0.4" - "@glimmer/syntax" "^0.83.1" - "@glimmer/tracking" "^1.0.4" - broccoli-bridge "^1.0.0" - broccoli-caching-writer "^3.0.3" - broccoli-filter "^1.3.0" - broccoli-funnel "^3.0.8" - broccoli-merge-trees "^4.2.0" - broccoli-persistent-filter "^3.1.0" - broccoli-plugin "1.5.1 - 5" - broccoli-source "^3.0.0" - broccoli-stew "^3.0.0" - chalk "^4.1.0" - ember-auto-import "^2.2.4" - ember-cli-autoprefixer "^2.0.0" - ember-cli-babel "^7.26.6" - ember-cli-clipboard "^0.16.0" - ember-cli-htmlbars "^6.0.0" - ember-cli-postcss "^7.0.2" - ember-cli-string-helpers "^6.1.0" - ember-cli-string-utils "^1.1.0" - ember-cli-version-checker "^5.1.0" - ember-code-snippet "^3.0.0" - ember-composable-helpers "^4.4.1" - ember-concurrency "^2.0.0" - ember-decorators "^6.1.1" - ember-fetch "^8.1.1" - ember-get-config "^0.5.0" - ember-keyboard "^7.0.0-beta.0" - ember-modal-dialog "github:yapplabs/ember-modal-dialog#76b74f1c4b791fed5b084836c3b1c8c54836ac71" - ember-responsive "^4.0.2" - ember-router-generator "^2.0.0" - ember-router-scroll "^4.1.2" - ember-set-helper "^2.0.1" - ember-svg-jar "^2.2.3" - ember-tether "^2.0.1" - ember-truth-helpers "^3.0.0" - esm "^3.2.25" - execa "^5.0.0" - fs-extra "^10.0.0" - git-repo-info "^2.1.1" - highlight.js "^10.7.2" - hosted-git-info "^4.0.2" - html-entities "^2.3.2" - jsdom "^18.0.1" - json-api-serializer "^2.2.1" - lodash "^4.17.15" - lunr "^2.3.7" - marked "^0.8.2" - pad-start "^1.0.2" - parse-git-config "^3.0.0" - postcss "^8.3.6" - postcss-import "^14.0.0" - postcss-nested "^5.0.6" - postcss-scss "^4.0.0" - quick-temp "^0.1.8" - semver "^7.3.2" - striptags "^3.1.1" - tailwindcss "1.9.6" - walk-sync "^3.0.0" - yuidocjs "^0.10.2" - -ember-cli-autoprefixer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ember-cli-autoprefixer/-/ember-cli-autoprefixer-2.0.0.tgz#5c753aeb7ead9a954892cdf1f6f258abce01b907" - integrity sha512-WVwfcwRoSjoR7NMfzsS4yWmAhs7FF5BfWzvdcyhvKl4wNzv4QSx9rjVV4dVcnY7pnj19OlSgLaXZ5Rt/P6u6dw== +ember-auto-import@^2.0.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/ember-auto-import/-/ember-auto-import-2.2.4.tgz#68c08cb0b7533293024c97387fc449b00561185a" + integrity sha512-iXHH+bSMP/uWvJmIhjt+PZz4ymqOLccIxZUouVcUFLKA5EAWE7gamlA684m0pIbSE/V9zKpOul4OfIgKXFprBg== dependencies: - broccoli-autoprefixer "^9.0.0" - ember-cli-htmlbars "^5.0.0" + "@babel/core" "^7.1.6" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-decorators" "^7.13.5" + "@babel/preset-env" "^7.10.2" + "@babel/traverse" "^7.1.6" + "@embroider/shared-internals" "^0.40.0" + babel-loader "^8.0.6" + babel-plugin-ember-modules-api-polyfill "^3.5.0" + babel-plugin-htmlbars-inline-precompile "^5.2.1" + babel-plugin-syntax-dynamic-import "^6.18.0" + broccoli-debug "^0.6.4" + broccoli-funnel "^3.0.8" + broccoli-merge-trees "^4.2.0" + broccoli-plugin "^4.0.0" + broccoli-source "^3.0.0" + css-loader "^5.2.0" + debug "^4.3.1" + ember-cli-babel "^7.0.0" + fs-extra "^6.0.1" + fs-tree-diff "^2.0.0" + handlebars "^4.3.1" + js-string-escape "^1.0.1" + lodash "^4.17.19" + mkdirp "^0.5.1" + parse5 "^6.0.1" + resolve "^1.20.0" + resolve-package-path "^3.1.0" + rimraf "^2.6.2" + semver "^7.3.4" + style-loader "^2.0.0" + typescript-memoize "^1.0.0-alpha.3" + walk-sync "^0.3.3" ember-cli-babel-plugin-helpers@^1.0.0, ember-cli-babel-plugin-helpers@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ember-cli-babel-plugin-helpers/-/ember-cli-babel-plugin-helpers-1.1.1.tgz#5016b80cdef37036c4282eef2d863e1d73576879" integrity sha512-sKvOiPNHr5F/60NLd7SFzMpYPte/nnGkq/tMIfXejfKHIhaiIkYFqX8Z9UFTKWLLn+V7NOaby6niNPZUdvKCRw== -ember-cli-babel@^6.11.0, ember-cli-babel@^7.0.0, ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.1.3, ember-cli-babel@^7.10.0, ember-cli-babel@^7.13.0, ember-cli-babel@^7.13.2, ember-cli-babel@^7.18.0, ember-cli-babel@^7.19.0, ember-cli-babel@^7.21.0, ember-cli-babel@^7.22.1, ember-cli-babel@^7.23.0, ember-cli-babel@^7.23.1, ember-cli-babel@^7.26.3, ember-cli-babel@^7.26.5, ember-cli-babel@^7.26.6, ember-cli-babel@^7.5.0, ember-cli-babel@^7.7.3: +ember-cli-babel@^6.11.0, ember-cli-babel@^7.0.0, ember-cli-babel@^7.10.0, ember-cli-babel@^7.13.0, ember-cli-babel@^7.13.2, ember-cli-babel@^7.22.1, ember-cli-babel@^7.23.0, ember-cli-babel@^7.26.3, ember-cli-babel@^7.26.5, ember-cli-babel@^7.26.6, ember-cli-babel@^7.5.0, ember-cli-babel@^7.7.3: version "7.26.6" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.26.6.tgz#322fbbd3baad9dd99e3276ff05bc6faef5e54b39" integrity sha512-040svtfj2RC35j/WMwdWJFusZaXmNoytLAMyBDGLMSlRvznudTxZjGlPV6UupmtTBApy58cEF8Fq4a+COWoEmQ== @@ -5845,17 +5183,6 @@ ember-cli-babel@^6.11.0, ember-cli-babel@^7.0.0, ember-cli-babel@^7.1.0, ember-c rimraf "^3.0.1" semver "^5.5.0" -ember-cli-clipboard@^0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/ember-cli-clipboard/-/ember-cli-clipboard-0.16.0.tgz#f4878cbbfbc56e0bc6d2a65ccf5a334c47b0f614" - integrity sha512-l9iDVjcJLkbgpdbJe+bN29q2ibZmEpEV6bXstIG9q4HPvaqbXw0PbSFhaNeQWpJKNkd5dFKSNdgEfli6heJSFw== - dependencies: - "@ember/render-modifiers" "^1.0.2 || ^2.0.0" - clipboard "^2.0.6" - ember-auto-import "^1.11.3" - ember-cli-babel "^7.26.6" - ember-cli-htmlbars "^5.7.1" - ember-cli-content-security-policy@^2.0.0-3: version "2.0.3" resolved "https://registry.yarnpkg.com/ember-cli-content-security-policy/-/ember-cli-content-security-policy-2.0.3.tgz#833eca6be4d625f8b1b85cf5bad62544b535b483" @@ -5948,17 +5275,7 @@ ember-cli-github-pages@^0.2.1: ember-cli-version-checker "^2.1.0" rsvp "^4.7.0" -ember-cli-htmlbars@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-3.1.0.tgz#87806c2a0bca2ab52d4fb8af8e2215c1ca718a99" - integrity sha512-cgvRJM73IT0aePUG7oQ/afB7vSRBV3N0wu9BrWhHX2zkR7A7cUBI7KC9VPk6tbctCXoM7BRGsCC4aIjF7yrfXA== - dependencies: - broccoli-persistent-filter "^2.3.1" - hash-for-dep "^1.5.1" - json-stable-stringify "^1.0.1" - strip-bom "^3.0.0" - -ember-cli-htmlbars@^5.0.0, ember-cli-htmlbars@^5.3.1, ember-cli-htmlbars@^5.7.1: +ember-cli-htmlbars@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-5.7.1.tgz#eb5b88c7d9083bc27665fb5447a9b7503b32ce4f" integrity sha512-9laCgL4tSy48orNoQgQKEHp93MaqAs9ZOl7or5q+8iyGGJHW6sVXIYrVv5/5O9HfV6Ts8/pW1rSoaeKyLUE+oA== @@ -5980,27 +5297,6 @@ ember-cli-htmlbars@^5.0.0, ember-cli-htmlbars@^5.3.1, ember-cli-htmlbars@^5.7.1: strip-bom "^4.0.0" walk-sync "^2.2.0" -ember-cli-htmlbars@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-6.0.0.tgz#9d0b67c0f107467b6c8ecdc47d64e877489841bf" - integrity sha512-7h9Lb1kfvLecMUOX8wCbwjzCsgXdNDs8qpOsDuKV6YaGS9jDZHu4P5xTYLX78YepEUnwOw1atCYWzBUsJHWrzA== - dependencies: - "@ember/edition-utils" "^1.2.0" - babel-plugin-ember-template-compilation "^1.0.0" - babel-plugin-htmlbars-inline-precompile "^5.3.0" - broccoli-debug "^0.6.5" - broccoli-persistent-filter "^3.1.2" - broccoli-plugin "^4.0.3" - ember-cli-version-checker "^5.1.2" - fs-tree-diff "^2.0.1" - hash-for-dep "^1.5.1" - heimdalljs-logger "^0.1.10" - json-stable-stringify "^1.0.1" - semver "^7.3.4" - silent-error "^1.1.1" - strip-bom "^4.0.0" - walk-sync "^2.2.0" - ember-cli-inject-live-reload@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ember-cli-inject-live-reload/-/ember-cli-inject-live-reload-2.1.0.tgz#ef63c733c133024d5726405a3c247fa12e88a385" @@ -6047,17 +5343,6 @@ ember-cli-path-utils@^1.0.0: resolved "https://registry.yarnpkg.com/ember-cli-path-utils/-/ember-cli-path-utils-1.0.0.tgz#4e39af8b55301cddc5017739b77a804fba2071ed" integrity sha1-Tjmvi1UwHN3FAXc5t3qAT7ogce0= -ember-cli-postcss@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/ember-cli-postcss/-/ember-cli-postcss-7.0.2.tgz#b7df580296cbffad4db943c7d2be739b7f68148b" - integrity sha512-nlr5glZlk6VN0nZuxO5yBbhofHo2waoCHYqTQH2CennDgdC0Fph4Kp+VHtif3qCgMyMXTqqvvgkBz2YpOBgsgw== - dependencies: - broccoli-merge-trees "^4.0.0" - broccoli-postcss "^6.0.0" - broccoli-postcss-single "^5.0.0" - ember-cli-babel "^7.1.0" - merge "^2.1.1" - ember-cli-preprocess-registry@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/ember-cli-preprocess-registry/-/ember-cli-preprocess-registry-3.3.0.tgz#685837a314fbe57224bd54b189f4b9c23907a2de" @@ -6078,16 +5363,6 @@ ember-cli-sass@^10.0.0: broccoli-sass-source-maps "^4.0.0" ember-cli-version-checker "^2.1.0" -ember-cli-string-helpers@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ember-cli-string-helpers/-/ember-cli-string-helpers-6.1.0.tgz#aeb96112bb91c540b869ed8b9c680f7fd5859cb6" - integrity sha512-Lw8B6MJx2n8CNF2TSIKs+hWLw0FqSYjr2/NRPyquyYA05qsl137WJSYW3ZqTsLgoinHat0DGF2qaCXocLhLmyA== - dependencies: - "@babel/core" "^7.13.10" - broccoli-funnel "^3.0.3" - ember-cli-babel "^7.7.3" - resolve "^1.20.0" - ember-cli-string-utils@^1.0.0, ember-cli-string-utils@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz#39b677fc2805f55173735376fcef278eaa4452a1" @@ -6114,6 +5389,27 @@ ember-cli-test-loader@^3.0.0: dependencies: ember-cli-babel "^7.13.2" +ember-cli-typescript-blueprints@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ember-cli-typescript-blueprints/-/ember-cli-typescript-blueprints-3.0.0.tgz#88595df71ddca9a7cb3ef1fb1626a1c2528da1b6" + integrity sha512-nJScjIjwDY96q9eiIBse9npLht/1FNmDRMpoTLJUrgSTzmx7/S6JhlH4BrMELkLCvtPkWoduDNBGiGBdCqf9FA== + dependencies: + chalk "^2.4.1" + ember-cli-babel "^7.0.0" + ember-cli-get-component-path-option "^1.0.0" + ember-cli-is-package-missing "^1.0.0" + ember-cli-normalize-entity-name "^1.0.0" + ember-cli-path-utils "^1.0.0" + ember-cli-string-utils "^1.1.0" + ember-cli-test-info "^1.0.0" + ember-cli-valid-component-name "^1.0.0" + ember-cli-version-checker "^3.0.0" + ember-router-generator "^2.0.0" + exists-sync "^0.1.0" + fs-extra "^8.0.0" + inflection "^1.12.0" + silent-error "^1.1.0" + ember-cli-typescript@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ember-cli-typescript/-/ember-cli-typescript-3.0.0.tgz#3b838d1ce9e4d22a98e68da22ceac6dc0cfd9bfc" @@ -6149,26 +5445,6 @@ ember-cli-typescript@^2.0.2: stagehand "^1.0.0" walk-sync "^1.0.0" -ember-cli-typescript@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/ember-cli-typescript/-/ember-cli-typescript-3.1.4.tgz#21d6ccd670d1f2e34c9cce68c6e32c442f46806b" - integrity sha512-HJ73kL45OGRmIkPhBNFt31I1SGUvdZND+LCH21+qpq3pPlFpJG8GORyXpP+2ze8PbnITNLzwe5AwUrpyuRswdQ== - dependencies: - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.4.4" - "@babel/plugin-proposal-optional-chaining" "^7.6.0" - "@babel/plugin-transform-typescript" "~7.8.0" - ansi-to-html "^0.6.6" - broccoli-stew "^3.0.0" - debug "^4.0.0" - ember-cli-babel-plugin-helpers "^1.0.0" - execa "^3.0.0" - fs-extra "^8.0.0" - resolve "^1.5.0" - rsvp "^4.8.1" - semver "^6.3.0" - stagehand "^1.0.0" - walk-sync "^2.0.0" - ember-cli-typescript@^4.1.0, ember-cli-typescript@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/ember-cli-typescript/-/ember-cli-typescript-4.2.1.tgz#54d08fc90318cc986f3ea562f93ce58a6cc4c24d" @@ -6185,6 +5461,13 @@ ember-cli-typescript@^4.1.0, ember-cli-typescript@^4.2.1: stagehand "^1.0.0" walk-sync "^2.2.0" +ember-cli-valid-component-name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ember-cli-valid-component-name/-/ember-cli-valid-component-name-1.0.0.tgz#71550ce387e0233065f30b30b1510aa2dfbe87ef" + integrity sha1-cVUM44fgIzBl8wswsVEKot++h+8= + dependencies: + silent-error "^1.0.0" + ember-cli-version-checker@^2.1.0, ember-cli-version-checker@^2.1.2: version "2.2.0" resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz#47771b731fe0962705e27c8199a9e3825709f3b3" @@ -6193,7 +5476,7 @@ ember-cli-version-checker@^2.1.0, ember-cli-version-checker@^2.1.2: resolve "^1.3.3" semver "^5.3.0" -ember-cli-version-checker@^3.1.3: +ember-cli-version-checker@^3.0.0, ember-cli-version-checker@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-3.1.3.tgz#7c9b4f5ff30fdebcd480b1c06c4de43bb51c522c" integrity sha512-PZNSvpzwWgv68hcXxyjREpj3WWb81A7rtYNQq1lLEgrWIchF8ApKJjWP3NBpHjaatwILkZAV8klair5WFlXAKg== @@ -6210,7 +5493,7 @@ ember-cli-version-checker@^4.1.0: semver "^6.3.0" silent-error "^1.1.1" -ember-cli-version-checker@^5.0.2, ember-cli-version-checker@^5.1.0, ember-cli-version-checker@^5.1.1, ember-cli-version-checker@^5.1.2: +ember-cli-version-checker@^5.0.2, ember-cli-version-checker@^5.1.1, ember-cli-version-checker@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-5.1.2.tgz#649c7b6404902e3b3d69c396e054cea964911ab0" integrity sha512-rk7GY+FmLn/2e22HsZs0Ycrz8HQ1W3Fv+2TFOuEFW9optnDXDgkntPBIl6gact/LHsfBM5RKbM3dHsIIeLgl0Q== @@ -6316,19 +5599,6 @@ ember-cli@3.28.0: workerpool "^6.1.4" yam "^1.0.0" -ember-code-snippet@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ember-code-snippet/-/ember-code-snippet-3.0.0.tgz#5e3108a68cc76740355cbbca840656d96c6b7ba1" - integrity sha512-pvIpGPLma7m6WQ5+uOjwkzozIzRAqlUSQk9TMCrQQ/AeEGWtqTJvZyAtH9LoarPtudHtWCZkUqJXIqKsjIqAbw== - dependencies: - broccoli-flatiron "^0.1.3" - broccoli-merge-trees "^1.0.0" - broccoli-plugin "^1.3.1" - ember-cli-babel "^7.7.3" - ember-cli-htmlbars "^3.0.1" - es6-promise "^1.0.0" - glob "^7.1.3" - ember-compatibility-helpers@^1.1.2, ember-compatibility-helpers@^1.2.0, ember-compatibility-helpers@^1.2.1, ember-compatibility-helpers@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/ember-compatibility-helpers/-/ember-compatibility-helpers-1.2.5.tgz#b8363b1d5b8725afa9a4fe2b2986ac28626c6f23" @@ -6339,57 +5609,7 @@ ember-compatibility-helpers@^1.1.2, ember-compatibility-helpers@^1.2.0, ember-co fs-extra "^9.1.0" semver "^5.4.1" -ember-composable-helpers@^4.4.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/ember-composable-helpers/-/ember-composable-helpers-4.5.0.tgz#94febbdf4348e64f45f7a6f993f326e32540a61e" - integrity sha512-XjpDLyVPsLCy6kd5dIxZonOECCO6AA5sY5Hr6tYUbJg3s5ghFAiFWaNcYraYC+fL2yPJQAswwpfwGlQORUJZkw== - dependencies: - "@babel/core" "^7.0.0" - broccoli-funnel "2.0.1" - ember-cli-babel "^7.26.3" - resolve "^1.10.0" - -ember-concurrency@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ember-concurrency/-/ember-concurrency-2.2.0.tgz#0acfb8ca855e0fdfa4c543be150028299a89ba32" - integrity sha512-Ns1MH6t08oJqfeWQ4EMxyf6bLsXM87SbUPwGNUsg7idpikvkGr1PWqtvU6qxDTv1mA4Vrwdhv0I9yxN0ShH9Bg== - dependencies: - "@glimmer/tracking" "^1.0.4" - ember-cli-babel "^7.26.6" - ember-cli-htmlbars "^5.7.1" - ember-compatibility-helpers "^1.2.0" - ember-destroyable-polyfill "^2.0.2" - -ember-data@~3.28.0: - version "3.28.3" - resolved "https://registry.yarnpkg.com/ember-data/-/ember-data-3.28.3.tgz#091690f4497f15150479eec0c42a0f22b216aecd" - integrity sha512-9Ivpzb5RD7sHCG2qFX2MvUL7IT5WojdYqg3BVveNvfLpf/vrrcrsk/UpmHzhtCbT0SJTHUYYBTqIceNLU08vhg== - dependencies: - "@ember-data/adapter" "3.28.3" - "@ember-data/debug" "3.28.3" - "@ember-data/model" "3.28.3" - "@ember-data/private-build-infra" "3.28.3" - "@ember-data/record-data" "3.28.3" - "@ember-data/serializer" "3.28.3" - "@ember-data/store" "3.28.3" - "@ember/edition-utils" "^1.2.0" - "@ember/string" "^3.0.0" - "@glimmer/env" "^0.1.7" - broccoli-merge-trees "^4.2.0" - ember-cli-babel "^7.26.6" - ember-cli-typescript "^4.1.0" - ember-inflector "^4.0.1" - -ember-decorators@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/ember-decorators/-/ember-decorators-6.1.1.tgz#6d770f8999cf5a413a1ee459afd520838c0fc470" - integrity sha512-63vZPntPn1aqMyeNRLoYjJD+8A8obd+c2iZkJflswpDRNVIsp2m7aQdSCtPt4G0U/TEq2251g+N10maHX3rnJQ== - dependencies: - "@ember-decorators/component" "^6.1.1" - "@ember-decorators/object" "^6.1.1" - ember-cli-babel "^7.7.3" - -ember-destroyable-polyfill@^2.0.2, ember-destroyable-polyfill@^2.0.3: +ember-destroyable-polyfill@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/ember-destroyable-polyfill/-/ember-destroyable-polyfill-2.0.3.tgz#1673ed66609a82268ef270a7d917ebd3647f11e1" integrity sha512-TovtNqCumzyAiW0/OisSkkVK93xnVF4NRU6+FN0ubpfwEOpRrmM2RqDwXI6YAChCgSHON1cz0DfQStpA1Gjuuw== @@ -6398,26 +5618,6 @@ ember-destroyable-polyfill@^2.0.2, ember-destroyable-polyfill@^2.0.3: ember-cli-version-checker "^5.1.1" ember-compatibility-helpers "^1.2.1" -ember-fetch@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/ember-fetch/-/ember-fetch-8.1.1.tgz#d68d4a58529121a572ec09c39c6a3ad174c83a2e" - integrity sha512-Xi1wNmPtVmfIoFH675AA0ELIdYUcoZ2p+6j9c8eDFjiGJiFesyp01bDtl5ryBI/1VPOByJLsDkT+4C11HixsJw== - dependencies: - abortcontroller-polyfill "^1.7.3" - broccoli-concat "^4.2.5" - broccoli-debug "^0.6.5" - broccoli-merge-trees "^4.2.0" - broccoli-rollup "^2.1.1" - broccoli-stew "^3.0.0" - broccoli-templater "^2.0.1" - calculate-cache-key-for-tree "^2.0.0" - caniuse-api "^3.0.0" - ember-cli-babel "^7.23.1" - ember-cli-typescript "^4.1.0" - ember-cli-version-checker "^5.1.2" - node-fetch "^2.6.1" - whatwg-fetch "^3.6.2" - "ember-get-config@^0.2.4 || ^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/ember-get-config/-/ember-get-config-0.3.0.tgz#a73a1a87b48d9dde4c66a0e52ed5260b8a48cfbd" @@ -6426,32 +5626,13 @@ ember-fetch@^8.1.1: broccoli-file-creator "^1.1.1" ember-cli-babel "^7.0.0" -ember-get-config@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/ember-get-config/-/ember-get-config-0.5.0.tgz#8195f3e4c0ff0742182c81ae54aad78d07a24bcf" - integrity sha512-y1osD6g8wV/BlDjuaN6OG5MT0iHY2X/yE38gUj/05uUIMIRfpcwOdWnFQHBiXIhDojvAJQTEF1VOYFIETQMkeQ== - dependencies: - broccoli-file-creator "^1.1.1" - ember-cli-babel "^7.26.6" - ember-cli-htmlbars "^5.7.1" - -"ember-inflector@^2.0.0 || ^3.0.0 || ^4.0.0", ember-inflector@^4.0.1: +"ember-inflector@^2.0.0 || ^3.0.0 || ^4.0.0": version "4.0.2" resolved "https://registry.yarnpkg.com/ember-inflector/-/ember-inflector-4.0.2.tgz#4494f1a5f61c1aca7702d59d54024cc92211d8ec" integrity sha512-+oRstEa52mm0jAFzhr51/xtEWpCEykB3SEBr7vUg8YnXUZJ5hKNBppP938q8Zzr9XfJEbzrtDSGjhKwJCJv6FQ== dependencies: ember-cli-babel "^7.26.5" -ember-keyboard@^7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/ember-keyboard/-/ember-keyboard-7.0.0-beta.0.tgz#b00d40cb4f4af20150a9e05ef8038d2295f0a605" - integrity sha512-xHdzk7doUJFHZ3Jf/w5tSj7shc1002c6ZHe9tEKkzjMWTrD48kg0BNf6jwQ9a1yG7hQtvtodRKDw2dTmHVdw/Q== - dependencies: - ember-cli-babel "^7.26.6" - ember-cli-htmlbars "^5.7.1" - ember-modifier "^2.1.2 || ^3.0.0" - ember-modifier-manager-polyfill "^1.2.0" - ember-load-initializers@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ember-load-initializers/-/ember-load-initializers-2.1.2.tgz#8a47a656c1f64f9b10cecdb4e22a9d52ad9c7efa" @@ -6470,19 +5651,6 @@ ember-maybe-import-regenerator@^1.0.0: ember-cli-babel "^7.26.6" regenerator-runtime "^0.13.2" -"ember-modal-dialog@github:yapplabs/ember-modal-dialog#76b74f1c4b791fed5b084836c3b1c8c54836ac71": - version "4.0.0-alpha.1" - uid "76b74f1c4b791fed5b084836c3b1c8c54836ac71" - resolved "https://codeload.github.com/yapplabs/ember-modal-dialog/tar.gz/76b74f1c4b791fed5b084836c3b1c8c54836ac71" - dependencies: - "@embroider/macros" "^0.43.5" - "@embroider/util" "^0.43.5" - ember-cli-babel "^7.26.6" - ember-cli-htmlbars "^5.7.1" - ember-cli-version-checker "^2.1.0" - ember-decorators "^6.1.1" - ember-wormhole "^0.6.0" - ember-modifier-manager-polyfill@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/ember-modifier-manager-polyfill/-/ember-modifier-manager-polyfill-1.2.0.tgz#cf4444e11a42ac84f5c8badd85e635df57565dda" @@ -6537,13 +5705,6 @@ ember-resolver@^8.0.2: ember-cli-version-checker "^5.1.2" resolve "^1.20.0" -ember-responsive@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/ember-responsive/-/ember-responsive-4.0.2.tgz#271fb0e619f492493a3332d96332d3684d70cb58" - integrity sha512-cNpR7ZA/JqF4f9+wCct3LXVjNLCv+biIVrAoo3fuCkIiGp3/I6D9GBhKZngvSFQiKp/tp2N52zvS7v5h0ahF4A== - dependencies: - ember-cli-babel "^7.19.0" - ember-rfc176-data@^0.3.15, ember-rfc176-data@^0.3.17: version "0.3.17" resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.17.tgz#d4fc6c33abd6ef7b3440c107a28e04417b49860a" @@ -6558,22 +5719,6 @@ ember-router-generator@^2.0.0: "@babel/traverse" "^7.4.5" recast "^0.18.1" -ember-router-scroll@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/ember-router-scroll/-/ember-router-scroll-4.1.2.tgz#8af1c29b7a596738bbbd71a8a04af7c5c0d19403" - integrity sha512-5AGRmbfhSx7kOu2U8caQkG8qOxlLnvJIoQgKRE9mc1isuYPdime6Qn061NSnnQukMMsSPlV8GAImiEk05BmfGA== - dependencies: - ember-app-scheduler "^5.1.2 || ^6.0.0 || ^7.0.0" - ember-cli-babel "^7.26.6" - ember-compatibility-helpers "^1.2.5" - -ember-set-helper@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ember-set-helper/-/ember-set-helper-2.0.1.tgz#e39417531e25089b45ccb905b8c00eda7b3fbbde" - integrity sha512-6IIimVGOdehZcncH1ilCY4p7hWBtZqWYMc1Xodr1ATOCuIk6ZO1yztKcUQhlmwl7fE82gL4wHD01T6XP5W59Ng== - dependencies: - ember-cli-babel "^7.18.0" - ember-source-channel-url@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ember-source-channel-url/-/ember-source-channel-url-3.0.0.tgz#bcd5be72c63fa0b8c390b3121783b462063e2a1b" @@ -6613,27 +5758,6 @@ ember-source@~3.28.0: semver "^7.3.4" silent-error "^1.1.1" -ember-svg-jar@^2.2.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/ember-svg-jar/-/ember-svg-jar-2.3.3.tgz#aede3f23e58bdcacc0e59a297c1ebad71a472e31" - integrity sha512-Obs8vEMKPfS2R48bKBAfNSLphFsDwUMRqi8TVKtlLE6okTXC8NebGg7pA/IutIGnakqJRAz4/dWAZyI74duDuQ== - dependencies: - broccoli-caching-writer "^3.0.3" - broccoli-concat "^3.7.4" - broccoli-funnel "^2.0.2" - broccoli-merge-trees "^3.0.2" - broccoli-persistent-filter "^2.3.1" - broccoli-plugin "^3.0.0" - broccoli-string-replace "^0.1.2" - broccoli-svg-optimizer "2.0.0" - cheerio "^0.22.0" - console-ui "^3.1.1" - ember-cli-babel "^7.7.3" - json-stable-stringify "^1.0.1" - lodash "^4.17.15" - mkdirp "^0.5.1" - path-posix "^1.0.0" - ember-template-lint@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/ember-template-lint/-/ember-template-lint-4.0.0.tgz#9fad1adedd0e2bfc2c507810421afbf4621273b1" @@ -6671,21 +5795,13 @@ ember-template-recast@^6.1.2: tmp "^0.2.1" workerpool "^6.1.5" -ember-tether@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ember-tether/-/ember-tether-2.0.1.tgz#29cab1463c43ebc22c836887b25d9b5106231366" - integrity sha512-ECjmFVqo58YK6SmrBW77hmp1wE76n9azl3H6oMvYOXLA4FraOB4xhuk/VCV/XPbG0p1bArKepGjxM8Qbu8g0Lw== - dependencies: - ember-auto-import "^1.2.19" - ember-cli-babel "^7.1.2" - tether "^1.4.0" - -ember-truth-helpers@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ember-truth-helpers/-/ember-truth-helpers-3.0.0.tgz#86766bdca4ac9b86bce3d262dff2aabc4a0ea384" - integrity sha512-hPKG9QqruAELh0li5xaiLZtr88ioWYxWCXisAWHWE0qCP4a2hgtuMzKUPpiTCkltvKjuqpzTZCU4VhQ+IlRmew== +ember-tracked-storage-polyfill@1.0.0, ember-tracked-storage-polyfill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ember-tracked-storage-polyfill/-/ember-tracked-storage-polyfill-1.0.0.tgz#84d307a1e4badc5f84dca681db2cfea9bdee8a77" + integrity sha512-eL7lZat68E6P/D7b9UoTB5bB5Oh/0aju0Z7PCMi3aTwhaydRaxloE7TGrTRYU+NdJuyNVZXeGyxFxn2frvd3TA== dependencies: - ember-cli-babel "^7.22.1" + ember-cli-babel "^7.26.3" + ember-cli-htmlbars "^5.7.1" ember-try-config@^4.0.0: version "4.0.0" @@ -6714,14 +5830,6 @@ ember-try@^2.0.0: rimraf "^3.0.2" walk-sync "^2.2.0" -ember-wormhole@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/ember-wormhole/-/ember-wormhole-0.6.0.tgz#1f9143aa05c0f0abdf14a97ff22520ebaf85eca0" - integrity sha512-b7RrRxkwCBEJxM2zR34dEzIET81BOZWTcYNJtkidLycLQvdbxPys5QJEjJ/IfDikT/z5HuQBdZRKBhXI0vZNXQ== - dependencies: - ember-cli-babel "^7.22.1" - ember-cli-htmlbars "^5.3.1" - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -6803,16 +5911,16 @@ ensure-posix-path@^1.0.0, ensure-posix-path@^1.0.1, ensure-posix-path@^1.0.2, en resolved "https://registry.yarnpkg.com/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz#3c62bdb19fa4681544289edb2b382adc029179ce" integrity sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw== -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - entities@^2.0.0, entities@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== +entities@~1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + err-code@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" @@ -6844,7 +5952,7 @@ error@^7.0.0: dependencies: string-template "~0.2.1" -es-abstract@^1.17.2, es-abstract@^1.19.1: +es-abstract@^1.19.1: version "1.19.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== @@ -6884,11 +5992,6 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es6-promise@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-1.0.0.tgz#f90d3629faa7c26166ae4df77c89bacdeb8dca7f" - integrity sha1-+Q02KfqnwmFmrk33fIm6zeuNyn8= - escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -7020,6 +6123,11 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== +eslint-visitor-keys@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2" + integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== + eslint@^7.32.0: version "7.32.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" @@ -7066,7 +6174,7 @@ eslint@^7.32.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -esm@^3.2.25, esm@^3.2.4: +esm@^3.2.4: version "3.2.25" resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== @@ -7114,11 +6222,6 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -7213,22 +6316,6 @@ execa@^2.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -execa@^3.0.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - p-finally "^2.0.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - execa@^4.0.0, execa@^4.0.2, execa@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" @@ -7244,6 +6331,11 @@ execa@^4.0.0, execa@^4.0.2, execa@^4.1.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +exists-sync@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/exists-sync/-/exists-sync-0.1.0.tgz#318d545213d2b2a31499e92c35f74c94196a22f7" + integrity sha512-qEfFekfBVid4b14FNug/RNY1nv+BADnlzKGHulc+t6ZLqGY4kdHGh1iFha8lnE3sJU/1WzMzKRNxS6EvSakJUg== + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -7269,7 +6361,7 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -express@^4.10.7, express@^4.13.1, express@^4.17.1: +express@^4.10.7, express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== @@ -7363,10 +6455,10 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== -fast-glob@^3.0.3, fast-glob@^3.1.1, fast-glob@^3.2.7: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== +fast-glob@^3.0.3, fast-glob@^3.1.1, fast-glob@^3.2.7, fast-glob@^3.2.9: + version "3.2.10" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.10.tgz#2734f83baa7f43b7fd41e13bc34438f4ffe284ee" + integrity sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -7384,7 +6476,7 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fast-ordered-set@^1.0.0, fast-ordered-set@^1.0.2: +fast-ordered-set@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/fast-ordered-set/-/fast-ordered-set-1.0.3.tgz#3fbb36634f7be79e4f7edbdb4a357dee25d184eb" integrity sha1-P7s2Y097555PftvbSjV97iXRhOs= @@ -7697,12 +6789,7 @@ for-in@^1.0.2: resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -forever-agent@~0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.5.2.tgz#6d0e09c4921f94a27f63d3b49c5feff1ea4c5130" - integrity sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA= - -form-data@4.0.0, form-data@^4.0.0: +form-data@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== @@ -7720,25 +6807,11 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -form-data@~0.1.0: - version "0.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.1.4.tgz#91abd788aba9702b1aabfa8bc01031a2ac9e3b12" - integrity sha1-kavXiKupcCsaq/qLwBAxoqyeOxI= - dependencies: - async "~0.9.0" - combined-stream "~0.0.4" - mime "~1.2.11" - forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fraction.js@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.2.tgz#13e420a92422b6cf244dff8690ed89401029fbe8" - integrity sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA== - fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -7769,15 +6842,6 @@ fs-extra@^0.24.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" -fs-extra@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" - integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs-extra@^4.0.0, fs-extra@^4.0.2, fs-extra@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" @@ -7833,7 +6897,7 @@ fs-extra@^9.0.1, fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-merger@^3.0.1, fs-merger@^3.2.1: +fs-merger@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/fs-merger/-/fs-merger-3.2.1.tgz#a225b11ae530426138294b8fbb19e82e3d4e0b3b" integrity sha512-AN6sX12liy0JE7C2evclwoo0aCG3PFulLjrTLsJpWh/2mM+DinhpSGqYLbHBBbIW1PLRNcFhJG8Axtz8mQW3ug== @@ -7851,7 +6915,7 @@ fs-minipass@^2.0.0: dependencies: minipass "^3.0.0" -fs-tree-diff@^0.5.2, fs-tree-diff@^0.5.3, fs-tree-diff@^0.5.4, fs-tree-diff@^0.5.6, fs-tree-diff@^0.5.7, fs-tree-diff@^0.5.9: +fs-tree-diff@^0.5.2, fs-tree-diff@^0.5.3, fs-tree-diff@^0.5.6: version "0.5.9" resolved "https://registry.yarnpkg.com/fs-tree-diff/-/fs-tree-diff-0.5.9.tgz#a4ec6182c2f5bd80b9b83c8e23e4522e6f5fd946" integrity sha512-872G8ax0kHh01m9n/2KDzgYwouKza0Ad9iFltBpNykvROvf2AGtoOzPJgGx125aolGPER3JuC7uZFrQ7bG1AZw== @@ -8006,11 +7070,6 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= -git-config-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-config-path/-/git-config-path-2.0.0.tgz#62633d61af63af4405a5024efd325762f58a181b" - integrity sha512-qc8h1KIQbJpp+241id3GuAtkdyJ+IK+LIVtkiFTRKRrmddDzs3SI9CvP1QYmWBFvm1I/PWRwj//of8bgAc0ltA== - git-hooks-list@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/git-hooks-list/-/git-hooks-list-1.0.3.tgz#be5baaf78203ce342f2f844a9d2b03dba1b45156" @@ -8154,6 +7213,18 @@ globby@11.0.4, globby@^11.0.3: merge2 "^1.3.0" slash "^3.0.0" +globby@^11.0.4: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + globby@^12.0.2: version "12.0.2" resolved "https://registry.yarnpkg.com/globby/-/globby-12.0.2.tgz#53788b2adf235602ed4cabfea5c70a1139e1ab11" @@ -8171,13 +7242,6 @@ globrex@^0.1.2: resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== -good-listener@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" - integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= - dependencies: - delegate "^3.1.2" - got@11.8.3: version "11.8.3" resolved "https://registry.yarnpkg.com/got/-/got-11.8.3.tgz#f496c8fdda5d729a90b4905d2b07dbd148170770" @@ -8357,16 +7421,6 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hawk@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-1.1.1.tgz#87cd491f9b46e4e2aeaca335416766885d2d1ed9" - integrity sha1-h81JH5tG5OKurKM1QWdmiF0tHtk= - dependencies: - boom "0.4.x" - cryptiles "0.2.x" - hoek "0.9.x" - sntp "0.2.x" - heimdalljs-fs-monitor@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/heimdalljs-fs-monitor/-/heimdalljs-fs-monitor-1.1.1.tgz#bb4021007e88484202402cdf594e3962d70dc4f4" @@ -8398,7 +7452,7 @@ heimdalljs@^0.2.0, heimdalljs@^0.2.1, heimdalljs@^0.2.3, heimdalljs@^0.2.5, heim dependencies: rsvp "~3.2.1" -highlight.js@^10.7.1, highlight.js@^10.7.2: +highlight.js@^10.7.1: version "10.7.3" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== @@ -8412,11 +7466,6 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoek@0.9.x: - version "0.9.1" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-0.9.1.tgz#3d322462badf07716ea7eb85baf88079cddce505" - integrity sha1-PTIkYrrfB3Fup+uFuviAec3c5QU= - home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -8437,7 +7486,7 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hosted-git-info@^4.0.0, hosted-git-info@^4.0.1, hosted-git-info@^4.0.2: +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== @@ -8451,35 +7500,6 @@ html-encoding-sniffer@^2.0.1: dependencies: whatwg-encoding "^1.0.5" -html-encoding-sniffer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" - integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== - dependencies: - whatwg-encoding "^2.0.0" - -html-entities@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.2.tgz#760b404685cb1d794e4f4b744332e3b00dcfe488" - integrity sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ== - -html-tags@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" - integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== - -htmlparser2@^3.9.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" @@ -8520,15 +7540,6 @@ http-proxy-agent@^4.0.1: agent-base "6" debug "4" -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - http-proxy@^1.13.1, http-proxy@^1.18.1: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" @@ -8538,15 +7549,6 @@ http-proxy@^1.13.1, http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" -http-signature@~0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.10.1.tgz#4fbdac132559aa8323121e540779c0a012b27e66" - integrity sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY= - dependencies: - asn1 "0.1.11" - assert-plus "^0.1.5" - ctype "0.5.3" - http2-wrapper@^1.0.0-beta.5.2: version "1.0.3" resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" @@ -8597,7 +7599,7 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6.3, iconv-lite@^0.6.2: +iconv-lite@^0.6.2: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -8625,6 +7627,11 @@ ignore@^4.0.6: integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.1.1, ignore@^5.1.4, ignore@^5.1.8: + version "5.1.9" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" + integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== + +ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== @@ -8686,7 +7693,7 @@ inflected@^2.0.4: resolved "https://registry.yarnpkg.com/inflected/-/inflected-2.1.0.tgz#2816ac17a570bbbc8303ca05bca8bf9b3f959687" integrity sha512-hAEKNxvHf2Iq3H60oMBHkB4wl5jn3TPF3+fXek/sRwAB5gP9xWs4r7aweSF95f99HFoz69pnZTcu8f0SIHV18w== -inflection@^1.12.0, inflection@~1.13.1: +inflection@^1.12.0: version "1.13.1" resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.13.1.tgz#c5cadd80888a90cf84c2e96e340d7edc85d5f0cb" integrity sha512-dldYtl2WlN0QDkIDtg8+xFwOS2Tbmp12t1cHa5/YClU6ZQjTFm7B66UcVbh9NQB+HvT5BAd2t5+yKsBkw5pcqA== @@ -8719,7 +7726,7 @@ ini@2.0.0: resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: +ini@^1.3.4, ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== @@ -8854,12 +7861,7 @@ is-alphanumerical@^2.0.0: is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-bigint@^1.0.1: version "1.0.4" @@ -8914,7 +7916,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.8.0: +is-core-module@^2.2.0: version "2.8.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== @@ -9117,13 +8119,6 @@ is-potential-custom-element-name@^1.0.1: resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-reference@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - dependencies: - "@types/estree" "*" - is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -9334,39 +8329,6 @@ jsdom@^16.4.0: ws "^7.4.6" xml-name-validator "^3.0.0" -jsdom@^18.0.1: - version "18.1.1" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-18.1.1.tgz#15ec896f5ab7df9669a62375606f47c8c09551aa" - integrity sha512-NmJQbjQ/gpS/1at/ce3nCx89HbXL/f5OcenBe8wU1Eik0ROhyUc3LtmG3567dEHAGXkN8rmILW/qtCOPxPHQJw== - dependencies: - abab "^2.0.5" - acorn "^8.5.0" - acorn-globals "^6.0.0" - cssom "^0.5.0" - cssstyle "^2.3.0" - data-urls "^3.0.1" - decimal.js "^10.3.1" - domexception "^4.0.0" - escodegen "^2.0.0" - form-data "^4.0.0" - html-encoding-sniffer "^3.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^3.0.0" - webidl-conversions "^7.0.0" - whatwg-encoding "^2.0.0" - whatwg-mimetype "^3.0.0" - whatwg-url "^10.0.0" - ws "^8.2.3" - xml-name-validator "^4.0.0" - jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" @@ -9387,13 +8349,6 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-api-serializer@^2.2.1, json-api-serializer@^2.6.0: - version "2.6.6" - resolved "https://registry.yarnpkg.com/json-api-serializer/-/json-api-serializer-2.6.6.tgz#fa5d283b913e0ea25653f4d04f981dc44d66dd4f" - integrity sha512-l7/e2O5/0+GU38RTMowRUKxRlT8zFc1oryAYBxqK54sFZnvJOJI2bo4XbbxnkTtvSzwkyv5DoBUuFm0hvG3avg== - dependencies: - setimmediate "^1.0.5" - json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" @@ -9436,11 +8391,6 @@ json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" -json-stringify-safe@~5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -9604,13 +8554,6 @@ linkify-it@^3.0.1: dependencies: uc.micro "^1.0.1" -linkify-it@~1.2.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-1.2.4.tgz#0773526c317c8fd13bd534ee1d180ff88abf881a" - integrity sha1-B3NSbDF8j9E71TTuHRgP+Iq/iBo= - dependencies: - uc.micro "^1.0.1" - livereload-js@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-3.3.2.tgz#c88b009c6e466b15b91faa26fd7c99d620e12651" @@ -9659,11 +8602,6 @@ loader.js@^4.7.0: resolved "https://registry.yarnpkg.com/loader.js/-/loader.js-4.7.0.tgz#a1a52902001c83631efde9688b8ab3799325ef1f" integrity sha512-9M2KvGT6duzGMgkOcTkWb+PR/Q2Oe54df/tLgHGVmFpAmtqJ553xJh6N63iFYI2yjo2PeJXbS5skHi/QpJq4vA== -locate-character@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/locate-character/-/locate-character-2.0.5.tgz#f2d2614d49820ecb3c92d80d193b8db755f74c0f" - integrity sha512-n2GmejDXtOPBAZdIiEFy5dJ5N38xBCXLNOtw2WpB9kGh6pnrEuKlwYI+Tkpofc4wDtVXHtoAOJaMRlYG/oYaxg== - locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -9770,16 +8708,11 @@ lodash.assign@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= -lodash.assignin@^4.0.9, lodash.assignin@^4.1.0: +lodash.assignin@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI= -lodash.bind@^4.1.4: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" - integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU= - lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" @@ -9812,21 +8745,11 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= -lodash.defaults@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= - lodash.defaultsdeep@^4.6.1: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== -lodash.filter@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" - integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4= - lodash.find@^4.5.1, lodash.find@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" @@ -9840,12 +8763,12 @@ lodash.flatten@^3.0.2: lodash._baseflatten "^3.0.0" lodash._isiterateecall "^3.0.0" -lodash.flatten@^4.2.0, lodash.flatten@^4.4.0: +lodash.flatten@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= -lodash.foreach@^4.3.0, lodash.foreach@^4.5.0: +lodash.foreach@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= @@ -9924,7 +8847,7 @@ lodash.lowerfirst@^4.3.1: resolved "https://registry.yarnpkg.com/lodash.lowerfirst/-/lodash.lowerfirst-4.3.1.tgz#de3c7b12e02c6524a0059c2f6cb7c5c52655a13d" integrity sha1-3jx7EuAsZSSgBZwvbLfFxSZVoT0= -lodash.map@^4.4.0, lodash.map@^4.6.0: +lodash.map@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= @@ -9934,12 +8857,7 @@ lodash.mapvalues@^4.6.0: resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw= -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.merge@^4.4.0, lodash.merge@^4.6.0, lodash.merge@^4.6.2: +lodash.merge@^4.6.0, lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== @@ -9949,21 +8867,11 @@ lodash.omit@^4.1.0: resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" integrity sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA= -lodash.pick@^4.2.1, lodash.pick@^4.4.0: +lodash.pick@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= -lodash.reduce@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" - integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs= - -lodash.reject@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" - integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU= - lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" @@ -9974,12 +8882,7 @@ lodash.snakecase@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" integrity sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40= -lodash.some@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" - integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= - -lodash.template@^4.4.0, lodash.template@^4.5.0: +lodash.template@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== @@ -10080,23 +8983,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lunr@^2.3.7: - version "2.3.9" - resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" - integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== - macos-release@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.5.0.tgz#067c2c88b5f3fb3c56a375b2ec93826220fa1ff2" integrity sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g== -magic-string@^0.24.0: - version "0.24.1" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.24.1.tgz#7e38e5f126cae9f15e71f0cf8e450818ca7d5a8f" - integrity sha512-YBfNxbJiixMzxW40XqJEIldzHyh5f7CZKalo1uZffevyrPEX8Qgo9s0dmcORLHdV47UyvJg8/zD+6hQG3qvJrA== - dependencies: - sourcemap-codec "^1.4.1" - magic-string@^0.25.7: version "0.25.7" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" @@ -10182,17 +9073,6 @@ markdown-it@^12.0.4: mdurl "^1.0.1" uc.micro "^1.0.5" -markdown-it@^4.3.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-4.4.0.tgz#3df373dbea587a9a7fef3e56311b68908f75c414" - integrity sha1-PfNz2+pYepp/7z5WMRtokI91xBQ= - dependencies: - argparse "~1.0.2" - entities "~1.1.1" - linkify-it "~1.2.0" - mdurl "~1.0.0" - uc.micro "^1.0.0" - markdown-it@^8.3.1: version "8.4.2" resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54" @@ -10204,11 +9084,6 @@ markdown-it@^8.3.1: mdurl "^1.0.1" uc.micro "^1.0.5" -marked@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.8.2.tgz#4faad28d26ede351a7a1aaa5fec67915c869e355" - integrity sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw== - matcher-collection@^1.0.0, matcher-collection@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/matcher-collection/-/matcher-collection-1.1.2.tgz#1076f506f10ca85897b53d14ef54f90a5c426838" @@ -10261,22 +9136,7 @@ mdn-data@2.0.14: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - -mdn-data@~1.1.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" - integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA== - -mdn-links@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/mdn-links/-/mdn-links-0.1.0.tgz#e24c83b97cb4c5886cc39f2f780705fbfe273aa5" - integrity sha1-4kyDuXy0xYhsw58veAcF+/4nOqU= - -mdurl@^1.0.1, mdurl@~1.0.0: +mdurl@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= @@ -10337,11 +9197,6 @@ merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -merge@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" - integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== - methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -10589,21 +9444,11 @@ mime-types@2.1.34, mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.26, m dependencies: mime-db "1.51.0" -mime-types@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-1.0.2.tgz#995ae1392ab8affcbfcb2641dd054e943c0d5dce" - integrity sha1-mVrhOSq4r/y/yyZB3QVOlDwNXc4= - mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@~1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" - integrity sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA= - mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" @@ -10634,23 +9479,23 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimist@>=1.2.5, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - minimist@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.1.tgz#827ba4e7593464e7c221e8c5bed930904ee2c455" integrity sha512-GY8fANSrTMfBVfInqJAY41QkOM+upUTytK1jZ0c8+3HdHrJxBJ3rF5i9moClXTE8uUSnUo8cAsCoxDXvSY4DHg== +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + minipass-collect@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" @@ -10774,7 +9619,7 @@ mkdirp@^0.3.5: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.5.tgz#de3e5f8961c88c787ee1368df849ac4413eca8d7" integrity sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc= -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -10925,13 +9770,6 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-emoji@^1.8.1: - version "1.11.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" - integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== - dependencies: - lodash "^4.17.21" - node-fetch@^2.6.0, node-fetch@^2.6.1: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" @@ -10973,7 +9811,7 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" -node-modules-path@^1.0.0, node-modules-path@^1.0.1: +node-modules-path@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/node-modules-path/-/node-modules-path-1.0.2.tgz#e3acede9b7baf4bc336e3496b58e5b40d517056e" integrity sha512-6Gbjq+d7uhkO7epaKi5DNgUJn7H0gEyA4Jg0Mo1uQOi3Rk50G83LtmhhFyw0LxnAFhtlspkiiw52ISP13qzcBg== @@ -10995,11 +9833,6 @@ node-releases@^2.0.1: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== -node-uuid@~1.4.0: - version "1.4.8" - resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" - integrity sha1-sEDrCSOWivq/jTL7HxfxFn/auQc= - node-watch@0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.7.2.tgz#545f057da8500487eb8287adcb4cb5a7338d7e21" @@ -11034,11 +9867,6 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - normalize-url@^4.1.0: version "4.5.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" @@ -11049,16 +9877,6 @@ normalize-url@^6.0.1, normalize-url@^6.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -normalize.css@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" - integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== - -npm-git-info@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/npm-git-info/-/npm-git-info-1.0.3.tgz#a933c42ec321e80d3646e0d6e844afe94630e1d5" - integrity sha1-qTPELsMh6A02RuDW6ESv6UYw4dU= - npm-package-arg@^8.1.1: version "8.1.5" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" @@ -11114,18 +9932,6 @@ npmlog@^4.0.0: gauge "~2.7.3" set-blocking "~2.0.0" -nth-check@^1.0.2, nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" @@ -11136,11 +9942,6 @@ nwsapi@^2.2.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== -oauth-sign@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.3.0.tgz#cb540f93bb2b22a7d5941691a288d60e8ea9386e" - integrity sha1-y1QPk7srIqfVlBaRoojWDo6pOG4= - object-assign@4.1.1, object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -11165,11 +9966,6 @@ object-hash@^1.3.1: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== -object-hash@^2.0.3: - version "2.2.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" - integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw== - object-inspect@^1.11.0, object-inspect@^1.9.0: version "1.12.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" @@ -11197,15 +9993,6 @@ object.assign@^4.1.0, object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.getownpropertydescriptors@^2.1.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" - integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -11213,15 +10000,6 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -11467,11 +10245,6 @@ package-json@^6.3.0, package-json@^6.5.0: registry-url "^5.0.0" semver "^6.2.0" -pad-start@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pad-start/-/pad-start-1.0.2.tgz#23e5bab3e96446b62816cff6f150975f040d1b14" - integrity sha1-I+W6s+lkRrYoFs/28VCXXwQNGxQ= - pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -11516,14 +10289,6 @@ parse-entities@^3.0.0: is-decimal "^2.0.0" is-hexadecimal "^2.0.0" -parse-git-config@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/parse-git-config/-/parse-git-config-3.0.0.tgz#4a2de08c7b74a2555efa5ae94d40cd44302a6132" - integrity sha512-wXoQGL1D+2COYWCD35/xbiKma1Z15xvZL8cI25wvxzled58V51SJM04Urt/uznS900iQor7QO04SgdfT/XlbuA== - dependencies: - git-config-path "^2.0.0" - ini "^1.3.5" - parse-json@5.2.0, parse-json@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" @@ -11542,11 +10307,6 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-ms@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d" - integrity sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0= - parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -11644,7 +10404,7 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.7: +path-parse@^1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -11694,11 +10454,6 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -picocolors@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" - integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== - picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -11714,11 +10469,6 @@ pidtree@^0.3.0: resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" @@ -11783,33 +10533,6 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -postcss-functions@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-functions/-/postcss-functions-3.0.0.tgz#0e94d01444700a481de20de4d55fb2640564250e" - integrity sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4= - dependencies: - glob "^7.1.2" - object-assign "^4.1.1" - postcss "^6.0.9" - postcss-value-parser "^3.3.0" - -postcss-import@^14.0.0: - version "14.0.2" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.0.2.tgz#60eff77e6be92e7b67fe469ec797d9424cae1aa1" - integrity sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-js@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-2.0.3.tgz#a96f0f23ff3d08cec7dc5b11bf11c5f8077cdab9" - integrity sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w== - dependencies: - camelcase-css "^2.0.1" - postcss "^7.0.18" - postcss-modules-extract-imports@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" @@ -11838,66 +10561,23 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-nested@^4.1.1: - version "4.2.3" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-4.2.3.tgz#c6f255b0a720549776d220d00c4b70cd244136f6" - integrity sha512-rOv0W1HquRCamWy2kFl3QazJMMe1ku6rCFoAAH+9AcxdbpDeBr6k968MLWuLjvjMcGEip01ak09hKOEgpK9hvw== - dependencies: - postcss "^7.0.32" - postcss-selector-parser "^6.0.2" - -postcss-nested@^5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.6.tgz#466343f7fc8d3d46af3e7dba3fcd47d052a945bc" - integrity sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA== - dependencies: - postcss-selector-parser "^6.0.6" - -postcss-scss@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.2.tgz#39ddcc0ab32f155d5ab328ee91353d67a52d537b" - integrity sha512-xfdkU128CkKKKVAwkyt0M8OdnelJ3MRcIRAPPQkRpoPeuzWY3RIeg7piRCpZ79MK7Q16diLXMMAD9dN5mauPlQ== - -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.6: - version "6.0.8" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz#f023ed7a9ea736cd7ef70342996e8e78645a7914" - integrity sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ== +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: + version "6.0.6" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" + integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-value-parser@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== - -postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0: +postcss-value-parser@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@7.0.32, postcss@^7.0.11, postcss@^7.0.14, postcss@^7.0.18, postcss@^7.0.32: - version "7.0.32" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" - integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -postcss@^6.0.9: - version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - -postcss@^8.1.4, postcss@^8.2.15, postcss@^8.3.11, postcss@^8.3.6: - version "8.4.5" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95" - integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg== +postcss@^8.2.15: + version "8.4.4" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.4.tgz#d53d4ec6a75fd62557a66bb41978bf47ff0c2869" + integrity sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q== dependencies: nanoid "^3.1.30" picocolors "^1.0.0" @@ -11938,18 +10618,6 @@ prettier@^2.3.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== -pretty-hrtime@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" - integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= - -pretty-ms@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-3.2.0.tgz#87a8feaf27fc18414d75441467d411d6e6098a25" - integrity sha512-ZypexbfVUGTFxb0v+m1bUyy92DHe5SyYlnyY0msyms5zd3RwyvNgyxZZsXXgoyzlxjx5MiqtXUdhUfvQbe0A2Q== - dependencies: - parse-ms "^1.0.0" - printf@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/printf/-/printf-0.6.1.tgz#b9afa3d3b55b7f2e8b1715272479fc756ed88650" @@ -12103,21 +10771,6 @@ pupa@^2.1.1: dependencies: escape-goat "^2.0.0" -purgecss@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-2.3.0.tgz#5327587abf5795e6541517af8b190a6fb5488bb3" - integrity sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ== - dependencies: - commander "^5.0.0" - glob "^7.0.0" - postcss "7.0.32" - postcss-selector-parser "^6.0.2" - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" @@ -12130,11 +10783,6 @@ qs@^6.4.0, qs@^6.9.4: dependencies: side-channel "^1.0.4" -qs@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-1.0.2.tgz#50a93e2b5af6691c31bcea5dae78ee6ea1903768" - integrity sha1-UKk+K1r2aRwxvOpdrnjubqGQN2g= - query-string@^6.13.8: version "6.14.1" resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" @@ -12241,13 +10889,6 @@ rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= - dependencies: - pify "^2.3.0" - read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -12270,7 +10911,7 @@ read-pkg@^3.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -12329,14 +10970,6 @@ redeyed@~1.0.0: dependencies: esprima "~3.0.0" -reduce-css-calc@^2.1.6: - version "2.1.8" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz#7ef8761a28d614980dc0c982f772c93f7a99de03" - integrity sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg== - dependencies: - css-unit-converter "^1.1.1" - postcss-value-parser "^3.3.0" - regenerate-unicode-properties@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" @@ -12382,7 +11015,7 @@ regexp.prototype.flags@^1.3.1: call-bind "^1.0.2" define-properties "^1.1.3" -regexpp@^3.0.0, regexpp@^3.1.0: +regexpp@^3.0.0, regexpp@^3.1.0, regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -12499,26 +11132,6 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@~2.40.0: - version "2.40.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.40.0.tgz#4dd670f696f1e6e842e66b4b5e839301ab9beb67" - integrity sha1-TdZw9pbx5uhC5mtLXoOTAaub62c= - dependencies: - forever-agent "~0.5.0" - json-stringify-safe "~5.0.0" - mime-types "~1.0.1" - node-uuid "~1.4.0" - qs "~1.0.0" - optionalDependencies: - aws-sign2 "~0.5.0" - form-data "~0.1.0" - hawk "1.1.1" - http-signature "~0.10.0" - oauth-sign "~0.3.0" - stringstream "~0.0.4" - tough-cookie ">=0.12.0" - tunnel-agent "~0.4.0" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -12529,11 +11142,6 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -require-relative@^0.8.7: - version "0.8.7" - resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" - integrity sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4= - requireindex@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" @@ -12621,14 +11229,13 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.20.0, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1: - version "1.21.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.21.0.tgz#b51adc97f3472e6a5cf4444d34bc9d6b9037591f" - integrity sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA== +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.20.0, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== dependencies: - is-core-module "^2.8.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" + is-core-module "^2.2.0" + path-parse "^1.0.6" responselike@^1.0.2: version "1.0.2" @@ -12680,7 +11287,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^2.2.8, rimraf@^2.3.4, rimraf@^2.4.1, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@~2.6.2: +rimraf@^2.2.8, rimraf@^2.3.4, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== @@ -12702,39 +11309,6 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.8.1: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@^0.57.1: - version "0.57.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.57.1.tgz#0bb28be6151d253f67cf4a00fea48fb823c74027" - integrity sha512-I18GBqP0qJoJC1K1osYjreqA8VAKovxuI3I81RSk0Dmr4TgloI0tAULjZaox8OsJ+n7XRrhH6i0G2By/pj1LCA== - dependencies: - "@types/acorn" "^4.0.3" - acorn "^5.5.3" - acorn-dynamic-import "^3.0.0" - date-time "^2.1.0" - is-reference "^1.1.0" - locate-character "^2.0.5" - pretty-ms "^3.1.0" - require-relative "^0.8.7" - rollup-pluginutils "^2.0.1" - signal-exit "^3.0.2" - sourcemap-codec "^1.4.1" - -rollup@^1.12.0: - version "1.32.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" - integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== - dependencies: - "@types/estree" "*" - "@types/node" "*" - acorn "^7.1.0" - route-recognizer@^0.3.3: version "0.3.4" resolved "https://registry.yarnpkg.com/route-recognizer/-/route-recognizer-0.3.4.tgz#39ab1ffbce1c59e6d2bdca416f0932611e4f3ca3" @@ -12837,19 +11411,13 @@ sane@^4.0.0, sane@^4.1.0: minimist "^1.1.1" walker "~1.0.5" -sass@^1.16.1, sass@^1.32.10: - version "1.48.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.48.0.tgz#b53cfccc1b8ab4be375cc54f306fda9d4711162c" - integrity sha512-hQi5g4DcfjcipotoHZ80l7GNJHGqQS5LwMBjVYB/TaT0vcSSpbgM8Ad7cgfsB2M0MinbkEQQPO9+sjjSiwxqmw== +sass@^1.32.10: + version "1.44.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.44.0.tgz#619aa0a2275c097f9af5e6b8fe8a95e3056430fb" + integrity sha512-0hLREbHFXGQqls/K8X+koeP+ogFRPF4ZqetVB19b7Cst9Er8cOR0rc6RU7MaI4W1JmUShd1BPgPoeqmmgMMYFw== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" - source-map-js ">=0.6.2 <2.0.0" - -sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== saxes@^5.0.1: version "5.0.1" @@ -12885,11 +11453,6 @@ schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: ajv "^6.12.5" ajv-keywords "^3.5.2" -select@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" - integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= - semver-diff@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" @@ -12907,7 +11470,7 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.3.5, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: +semver@7.3.5, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -12977,7 +11540,7 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4, setimmediate@^1.0.5: +setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -13057,7 +11620,7 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== -silent-error@^1.0.0, silent-error@^1.0.1, silent-error@^1.1.1: +silent-error@^1.0.0, silent-error@^1.0.1, silent-error@^1.1.0, silent-error@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/silent-error/-/silent-error-1.1.1.tgz#f72af5b0d73682a2ba1778b7e32cd8aa7c2d8662" integrity sha512-n4iEKyNcg4v6/jpb3c0/iyH2G1nzUNl7Gpqtn/mHIJK9S/q/7MCfoO4rwVOoO59qPFIc0hVHvMbiOJ0NdtxKKw== @@ -13069,13 +11632,6 @@ simple-html-tokenizer@^0.5.11, simple-html-tokenizer@^0.5.8: resolved "https://registry.yarnpkg.com/simple-html-tokenizer/-/simple-html-tokenizer-0.5.11.tgz#4c5186083c164ba22a7b477b7687ac056ad6b1d9" integrity sha512-C2WEK/Z3HoSFbYq8tI7ni3eOo/NneSPRoPpcM7WdLjFOArFuyXEjAoCdOC3DgMfRyziZQ1hCNR4mrNdWEvD0og== -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" @@ -13143,13 +11699,6 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -sntp@0.2.x: - version "0.2.4" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-0.2.4.tgz#fb885f18b0f3aad189f824862536bceeec750900" - integrity sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA= - dependencies: - hoek "0.9.x" - socket.io-adapter@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.3.2.tgz#039cd7c71a52abad984a6d57da2c0b7ecdd3c289" @@ -13215,7 +11764,7 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1: +source-map-js@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.1.tgz#a1741c131e3c77d048252adfa24e23b908670caf" integrity sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA== @@ -13263,7 +11812,7 @@ source-map@0.4.x, source-map@^0.4.2: dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -13280,12 +11829,12 @@ source-map@~0.1.x: dependencies: amdefine ">=0.0.4" -source-map@~0.7.2, source-map@~0.7.3: +source-map@~0.7.2: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -sourcemap-codec@^1.4.1, sourcemap-codec@^1.4.4: +sourcemap-codec@^1.4.4: version "1.4.8" resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== @@ -13362,11 +11911,6 @@ ssri@^8.0.0, ssri@^8.0.1: dependencies: minipass "^3.1.1" -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - stagehand@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stagehand/-/stagehand-1.0.0.tgz#79515e2ad3a02c63f8720c7df9b6077ae14276d9" @@ -13506,11 +12050,6 @@ string_decoder@^1.0.0, string_decoder@^1.1.1, string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringstream@~0.0.4: - version "0.0.6" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" - integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA== - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -13569,11 +12108,6 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -striptags@^3.1.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/striptags/-/striptags-3.2.0.tgz#cc74a137db2de8b0b9a370006334161f7dd67052" - integrity sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw== - style-loader@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" @@ -13599,20 +12133,13 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.3.0, supports-color@^5.4.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -13627,30 +12154,6 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svgo@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.0.tgz#bae51ba95ded9a33a36b7c46ce9c359ae9154313" - integrity sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.33" - csso "^3.5.1" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -13695,34 +12198,6 @@ table@^6.0.9: string-width "^4.2.3" strip-ansi "^6.0.1" -tailwindcss@1.9.6: - version "1.9.6" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-1.9.6.tgz#0c5089911d24e1e98e592a31bfdb3d8f34ecf1a0" - integrity sha512-nY8WYM/RLPqGsPEGEV2z63riyQPcHYZUJpAwdyBzVpxQHOHqHE+F/fvbCeXhdF1+TA5l72vSkZrtYCB9hRcwkQ== - dependencies: - "@fullhuman/postcss-purgecss" "^2.1.2" - autoprefixer "^9.4.5" - browserslist "^4.12.0" - bytes "^3.0.0" - chalk "^3.0.0 || ^4.0.0" - color "^3.1.2" - detective "^5.2.0" - fs-extra "^8.0.0" - html-tags "^3.1.0" - lodash "^4.17.20" - node-emoji "^1.8.1" - normalize.css "^8.0.1" - object-hash "^2.0.3" - postcss "^7.0.11" - postcss-functions "^3.0.0" - postcss-js "^2.0.0" - postcss-nested "^4.1.1" - postcss-selector-parser "^6.0.0" - postcss-value-parser "^4.1.0" - pretty-hrtime "^1.0.3" - reduce-css-calc "^2.1.6" - resolve "^1.14.2" - tap-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-7.0.0.tgz#54db35302fda2c2ccc21954ad3be22b2cba42721" @@ -13841,11 +12316,6 @@ testem@^3.2.0: tap-parser "^7.0.0" tmp "0.0.33" -tether@^1.4.0: - version "1.4.7" - resolved "https://registry.yarnpkg.com/tether/-/tether-1.4.7.tgz#d56a818590d8fe72e387f77a67f93ab96d8e1fb2" - integrity sha512-Z0J1aExjoFU8pybVkQAo/vD2wfSO63r+XOPfWQMC5qtf1bI7IWqNk4MiyBcgvvnY8kqnY06dVdvwTK2S3PU/Fw== - text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -13891,11 +12361,6 @@ through@^2.3.6: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -time-zone@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/time-zone/-/time-zone-1.0.0.tgz#99c5bf55958966af6d06d83bdf3800dc82faec5d" - integrity sha1-mcW/VZWJZq9tBtg73zgA3IL67F0= - timers-browserify@^2.0.4: version "2.0.12" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" @@ -13903,11 +12368,6 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" -tiny-emitter@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" - integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== - tiny-glob@0.2.9: version "0.2.9" resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" @@ -14023,7 +12483,7 @@ totalist@^2.0.0: resolved "https://registry.yarnpkg.com/totalist/-/totalist-2.0.0.tgz#db6f1e19c0fa63e71339bbb8fba89653c18c7eec" integrity sha512-+Y17F0YzxfACxTyjfhnJQEe7afPA0GSpYlFkl2VFMxYP7jshQf9gXV7cH47EfToBumFThfKBvfAcoUn6fdNeRQ== -tough-cookie@>=0.12.0, tough-cookie@^4.0.0: +tough-cookie@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== @@ -14039,18 +12499,31 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" -tr46@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" - integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== - dependencies: - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= +tracked-built-ins@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tracked-built-ins/-/tracked-built-ins-2.0.0.tgz#fb8ad7f6ace27595b58e64df21fe308d82416701" + integrity sha512-+aB1jcGmDxi/0aMqGxL5KW3BUivrIU1bzgJW8yUAfnkxvdc1TBLmMOWAUFouD6ZTKH6w3eIrks18uLuASFCdcw== + dependencies: + ember-cli-babel "^7.26.6" + ember-cli-typescript "^4.1.0" + ember-tracked-storage-polyfill "^1.0.0" + tracked-maps-and-sets "^3.0.2" + +tracked-maps-and-sets@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/tracked-maps-and-sets/-/tracked-maps-and-sets-3.0.2.tgz#6ea1b9f2a367d24f2e9905b74b24437fbce76ea6" + integrity sha512-UIRcWsX1kDOcC/Q2R58weYWlw01EnmWWBwUv3okWS+zMBvsgIfYoO6veHhuNE3hgzWCEImNp46QS5CyKnw5QUA== + dependencies: + "@glimmer/tracking" "^1.0.0" + ember-cli-babel "^7.26.6" + ember-cli-typescript "^4.2.1" + ember-tracked-storage-polyfill "1.0.0" + tree-sync@^1.2.2: version "1.4.0" resolved "https://registry.yarnpkg.com/tree-sync/-/tree-sync-1.4.0.tgz#314598d13abaf752547d9335b8f95d9a137100d6" @@ -14078,7 +12551,7 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= -tslib@^1.9.0: +tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -14088,16 +12561,18 @@ tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= -tunnel-agent@~0.4.0: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us= - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -14157,7 +12632,12 @@ typescript-memoize@^1.0.0-alpha.3, typescript-memoize@^1.0.1: resolved "https://registry.yarnpkg.com/typescript-memoize/-/typescript-memoize-1.1.0.tgz#4a8f512d06fc995167c703a3592219901db8bc79" integrity sha512-LQPKVXK8QrBBkL/zclE6YgSWn0I8ew5m0Lf+XL00IwMhlotqRLlzHV+BRrljVQIc+NohUAuQP7mg4HQwrx5Xbg== -uc.micro@^1.0.0, uc.micro@^1.0.1, uc.micro@^1.0.5: +typescript@^4.5.3: + version "4.5.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.3.tgz#afaa858e68c7103317d89eb90c5d8906268d353c" + integrity sha512-eVYaEHALSt+s9LbvgEv4Ef+Tdq7hBiIZgii12xXJnukryt3pMgJf6aKhoCZ3FWQsu6sydEnkg11fYXLzhLBjeQ== + +uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== @@ -14271,11 +12751,6 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -14368,16 +12843,6 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" @@ -14473,14 +12938,7 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" -w3c-xmlserializer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz#06cdc3eefb7e4d0b20a560a5a3aeb0d2d9a65923" - integrity sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg== - dependencies: - xml-name-validator "^4.0.0" - -walk-sync@^0.3.0, walk-sync@^0.3.1, walk-sync@^0.3.2, walk-sync@^0.3.3: +walk-sync@^0.3.0, walk-sync@^0.3.1, walk-sync@^0.3.3: version "0.3.4" resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-0.3.4.tgz#cf78486cc567d3a96b5b2237c6108017a5ffb9a4" integrity sha512-ttGcuHA/OBnN2pcM6johpYlEms7XpO5/fyKIr48541xXedan4roO8cS1Q2S/zbbjGH/BarYDAMeS2Mi9HE5Tig== @@ -14582,11 +13040,6 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webidl-conversions@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" - integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== - webpack-sources@^1.4.0, webpack-sources@^1.4.1: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" @@ -14680,36 +13133,11 @@ whatwg-encoding@^1.0.5: dependencies: iconv-lite "0.4.24" -whatwg-encoding@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" - integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== - dependencies: - iconv-lite "0.6.3" - -whatwg-fetch@^3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" - integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== - whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-mimetype@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" - integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== - -whatwg-url@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-10.0.0.tgz#37264f720b575b4a311bd4094ed8c760caaa05da" - integrity sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w== - dependencies: - tr46 "^3.0.0" - webidl-conversions "^7.0.0" - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -14848,7 +13276,7 @@ ws@^7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== -ws@^8.2.3, ws@~8.2.3: +ws@~8.2.3: version "8.2.3" resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== @@ -14863,17 +13291,12 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xml-name-validator@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" - integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== - xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.1: +xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -14961,23 +13384,3 @@ yocto-queue@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== - -yui@^3.18.1: - version "3.18.1" - resolved "https://registry.yarnpkg.com/yui/-/yui-3.18.1.tgz#e000269ec0a7b6fbc741cbb8fcbd0e65117b014c" - integrity sha1-4AAmnsCntvvHQcu4/L0OZRF7AUw= - dependencies: - request "~2.40.0" - -yuidocjs@^0.10.2: - version "0.10.2" - resolved "https://registry.yarnpkg.com/yuidocjs/-/yuidocjs-0.10.2.tgz#33924967ce619024cd70ef694e267d2f988f73f6" - integrity sha1-M5JJZ85hkCTNcO9pTiZ9L5iPc/Y= - dependencies: - express "^4.13.1" - graceful-fs "^4.1.2" - markdown-it "^4.3.0" - mdn-links "^0.1.0" - minimatch "^3.0.2" - rimraf "^2.4.1" - yui "^3.18.1" From eac0d4e568316b0216518e857db2aee15a4eba55 Mon Sep 17 00:00:00 2001 From: gossi Date: Tue, 14 Dec 2021 17:29:40 +0100 Subject: [PATCH 02/14] attach local event listener --- addon/components/file-upload.hbs | 2 +- addon/components/file-upload.ts | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/addon/components/file-upload.hbs b/addon/components/file-upload.hbs index d5c538e8..1f9f5550 100644 --- a/addon/components/file-upload.hbs +++ b/addon/components/file-upload.hbs @@ -13,7 +13,7 @@ disabled={{@disabled}} value={{this.value}} hidden - {{this.queue.selectFile filter=@filter}} + {{this.queue.selectFile filter=@filter filesSelected=@filesSelected}} /> {{yield this.queue}} diff --git a/addon/components/file-upload.ts b/addon/components/file-upload.ts index 72ecdc49..d658e69a 100644 --- a/addon/components/file-upload.ts +++ b/addon/components/file-upload.ts @@ -15,6 +15,9 @@ interface FileUploadArgs { // actions filter?: (file: File) => boolean; + // events + filesSelected?: (files: File[]) => void; + // old/deprecated API /** From c0243191d0c004c29cbb78d168e4e7a570a483c8 Mon Sep 17 00:00:00 2001 From: gossi Date: Tue, 14 Dec 2021 17:53:18 +0100 Subject: [PATCH 03/14] remove falsy `@tracked` calls --- addon/components/file-upload.hbs | 1 - addon/components/file-upload.ts | 3 --- addon/services/file-queue.ts | 3 +-- 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/addon/components/file-upload.hbs b/addon/components/file-upload.hbs index 1f9f5550..cb7c23b2 100644 --- a/addon/components/file-upload.hbs +++ b/addon/components/file-upload.hbs @@ -11,7 +11,6 @@ capture={{@capture}} multiple={{@multiple}} disabled={{@disabled}} - value={{this.value}} hidden {{this.queue.selectFile filter=@filter filesSelected=@filesSelected}} /> diff --git a/addon/components/file-upload.ts b/addon/components/file-upload.ts index d658e69a..94153dd9 100644 --- a/addon/components/file-upload.ts +++ b/addon/components/file-upload.ts @@ -1,7 +1,6 @@ import Component from '@glimmer/component'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; -import { tracked } from '@glimmer/tracking'; import uuid from '../system/uuid'; import File from '../file'; @@ -99,8 +98,6 @@ interface FileUploadArgs { export default class FileUploadComponent extends Component { @service declare fileQueue: FileQueueService; - @tracked value: unknown; - get queue() { if (this.args.queue) { return this.args.queue; diff --git a/addon/services/file-queue.ts b/addon/services/file-queue.ts index 2952e303..439df041 100644 --- a/addon/services/file-queue.ts +++ b/addon/services/file-queue.ts @@ -1,7 +1,6 @@ import { assert } from '@ember/debug'; import Service from '@ember/service'; import { registerDestructor } from '@ember/destroyable'; -import { tracked } from 'tracked-built-ins'; import Queue, { QueueName } from '../queue'; import File from '../file'; @@ -18,7 +17,7 @@ export const DEFAULT_QUEUE = Symbol('DEFAULT_QUEUE'); * the remaining uploads. */ export default class FileQueueService extends Service { - queues: Map = tracked(new Map()); + queues: Map = new Map(); /** * Returns a queue with the given name From 65697fcee7bf4407730128cff45a82abf63b475c Mon Sep 17 00:00:00 2001 From: gossi Date: Tue, 4 Jan 2022 11:57:35 +0100 Subject: [PATCH 04/14] bugfix + address PR comments --- addon/queue.ts | 74 +++++++++++-------------- package.json | 2 +- tests/helpers/file-queue-helper-test.js | 61 +++++++++++++++++++- 3 files changed, 93 insertions(+), 44 deletions(-) diff --git a/addon/queue.ts b/addon/queue.ts index 941f9d50..dc804d28 100644 --- a/addon/queue.ts +++ b/addon/queue.ts @@ -1,9 +1,8 @@ +import { action } from '@ember/object'; import { next } from '@ember/runloop'; import { modifier, ModifierArgs } from 'ember-modifier'; -import { tracked, TrackedArray } from 'tracked-built-ins'; -import { action } from '@ember/object'; - -import UploadFile, { FileState, FileSource } from './file'; +import { TrackedArray, TrackedSet } from 'tracked-built-ins'; +import UploadFile, { FileSource, FileState } from './file'; import FileQueueService from './services/file-queue'; export interface SelectFileModifierArgs extends ModifierArgs { @@ -55,33 +54,28 @@ export default class Queue { /** The FileQueue service. */ fileQueue: FileQueueService; - // @tracked private distinctFiles: Set = new Set(); - // Must uses `TrackedArray()` until this one is solved: - // https://github.com/tracked-tools/tracked-built-ins/issues/225 - files: UploadFile[] = new TrackedArray([]); - - // /** - // * The list of files in the queue. This automatically gets - // * flushed when all the files in the queue have settled. - // * - // * @remarks - // * Note that files that have failed need to be manually - // * removed from the queue. This is so they can be retried - // * without resetting the state of the queue, orphaning the - // * file from its queue. Upload failures can happen due to a - // * timeout or a server response. If you choose to use the - // * `abort` method, the file will fail to upload, but will - // * be removed from the requeuing proccess, and will be - // * considered to be in a settled state. - // */ - // get files(): File[] { - // console.log('queue.files', this.distinctFiles); - - // return [...this.distinctFiles.values()]; - // } + #distinctFiles: Set = new TrackedSet(); + + /** + * The list of files in the queue. This automatically gets + * flushed when all the files in the queue have settled. + * + * @remarks + * Note that files that have failed need to be manually + * removed from the queue. This is so they can be retried + * without resetting the state of the queue, orphaning the + * file from its queue. Upload failures can happen due to a + * timeout or a server response. If you choose to use the + * `abort` method, the file will fail to upload, but will + * be removed from the requeuing proccess, and will be + * considered to be in a settled state. + */ + get files(): UploadFile[] { + return [...this.#distinctFiles.values()]; + } // @TODO: Is this needed? I think, this is what each dropzone needs to manage - _dropzones = tracked([]); + _dropzones = new TrackedArray([]); /** * The total size of all files currently being uploaded in bytes. @@ -127,12 +121,6 @@ export default class Queue { this.fileQueue = fileQueue; } - // @TODO this is called from nowhere ?!? - // destroy() { - // this.distinctFiles.forEach((file) => (file.queue = undefined)); - // this.distinctFiles.clear(); - // } - addListener(listener: QueueListener) { this.#listeners.add(listener); } @@ -153,13 +141,12 @@ export default class Queue { */ @action add(file: UploadFile) { - if (this.files.includes(file)) { + if (this.#distinctFiles.has(file)) { return; } file.queue = this; - // this.distinctFiles.add(file); - this.files.push(file); + this.#distinctFiles.add(file); for (const listener of this.#listeners) { listener.fileAdded?.(file); @@ -172,12 +159,12 @@ export default class Queue { */ @action remove(file: UploadFile) { - if (!this.files.includes(file)) { + if (!this.#distinctFiles.has(file)) { return; } file.queue = undefined; - this.files.splice(this.files.indexOf(file), 1); + this.#distinctFiles.delete(file); for (const listener of this.#listeners) { listener.fileRemoved?.(file); @@ -253,7 +240,7 @@ export default class Queue { if (allFilesHaveSettled) { this.files.forEach((file) => (file.queue = undefined)); - this.files = []; + this.#distinctFiles.clear(); } } @@ -284,6 +271,11 @@ export default class Queue { } named.filesSelected?.(selectedFiles); + + // this will reset the input, so the _same_ file can be picked again + // Without, the `change` event wouldn't be fired, as it is still the same + // value + element.value = ''; }; element.addEventListener('change', changeHandler); diff --git a/package.json b/package.json index 826b23b9..1779fbcb 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "postpack": "ember ts:clean" }, "dependencies": { + "@ember/render-modifiers": "^2.0.0", "@ember/test-waiters": "^3.0.0", "@glimmer/component": "^1.0.4", "@glimmer/tracking": "^1.0.4", @@ -61,7 +62,6 @@ }, "devDependencies": { "@ember/optional-features": "^2.0.0", - "@ember/render-modifiers": "^2.0.0", "@ember/test-helpers": "^2.4.2", "@embroider/test-setup": "^0.50.0", "@types/ember-qunit": "^3.4.15", diff --git a/tests/helpers/file-queue-helper-test.js b/tests/helpers/file-queue-helper-test.js index c159fd9e..d1cd0404 100644 --- a/tests/helpers/file-queue-helper-test.js +++ b/tests/helpers/file-queue-helper-test.js @@ -1,13 +1,17 @@ import { module, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; -import { render, click } from '@ember/test-helpers'; +import { render, click, settled, waitFor } from '@ember/test-helpers'; import { hbs } from 'ember-cli-htmlbars'; import { selectFiles } from 'ember-file-upload/test-support'; import { DEFAULT_QUEUE } from 'ember-file-upload/services/file-queue'; +import { upload as uploadHandler } from 'ember-file-upload/mirage'; +import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; + module('Integration | Helper | file-queue', function (hooks) { setupRenderingTest(hooks); + setupMirage(hooks); test('filter is triggered when selecting files', async function (assert) { this.filter = (file) => assert.step(`filter: ${file.name}`); @@ -42,8 +46,14 @@ module('Integration | Helper | file-queue', function (hooks) { `); await selectFiles('input[type=file]', new File([], 'dingus.txt')); + await selectFiles('input[type=file]', new File([], 'dingus.txt')); + await selectFiles('input[type=file]', new File([], 'dingus.png')); - assert.verifySteps(['files selected: dingus.txt']); + assert.verifySteps([ + 'files selected: dingus.txt', + 'files selected: dingus.txt', + 'files selected: dingus.png', + ]); }); test('falls back to default name', async function (assert) { @@ -102,4 +112,51 @@ module('Integration | Helper | file-queue', function (hooks) { assert.dom('[data-test-file]').doesNotExist(); }); + + test('uploading twice will manage files in queue', async function (assert) { + this.server.post( + '/folder/:id/file', + uploadHandler(function (schema, request) { + // do sth + }) + ); + + this.uploadImage = (file) => { + return file.upload('/folder/1/file'); + }; + + await render(hbs` + {{#let (file-queue fileAdded=this.uploadImage) as |queue|}} + {{#each queue.files as |file|}} + + {{file.name}} + + {{/each}} + + + {{/let}} + `); + + assert.dom('[data-test-file]').doesNotExist(); + + // first upload + selectFiles('input[type=file]', new File([], 'dingus.txt')); + await waitFor('[data-test-file]'); + assert.dom('[data-test-file]').hasText('dingus.txt'); + + await settled(); + assert.dom('[data-test-file]').doesNotExist(); + + // second upload (retention teset) + // to check `Queue.flush()` will keep auto-tracking intact + selectFiles('input[type=file]', new File([], 'dingus.txt')); + await waitFor('[data-test-file]'); + assert.dom('[data-test-file]').hasText('dingus.txt'); + + await settled(); + assert.dom('[data-test-file]').doesNotExist(); + }); }); From 54da832d6eb07875ca3524f4cf65ac63e5871826 Mon Sep 17 00:00:00 2001 From: gossi Date: Tue, 4 Jan 2022 13:18:00 +0100 Subject: [PATCH 05/14] cleanup --- addon/components/file-upload.ts | 4 +- addon/helpers/file-queue.ts | 2 +- addon/queue.ts | 41 ++++++------------- addon/services/file-queue.ts | 4 ++ .../components/file-upload-test.js | 23 ----------- 5 files changed, 20 insertions(+), 54 deletions(-) diff --git a/addon/components/file-upload.ts b/addon/components/file-upload.ts index 94153dd9..b572c151 100644 --- a/addon/components/file-upload.ts +++ b/addon/components/file-upload.ts @@ -8,7 +8,6 @@ import Queue from '../queue'; import FileQueueService, { DEFAULT_QUEUE } from '../services/file-queue'; interface FileUploadArgs { - name?: string; queue?: Queue; // actions @@ -19,6 +18,9 @@ interface FileUploadArgs { // old/deprecated API + /** @deprecated use `queue` instead */ + name?: string; + /** * @deprecated use `{{file-queue}}` helper with `{{queue.selectFile}}` modifier */ diff --git a/addon/helpers/file-queue.ts b/addon/helpers/file-queue.ts index f970c8db..528682d8 100644 --- a/addon/helpers/file-queue.ts +++ b/addon/helpers/file-queue.ts @@ -38,7 +38,7 @@ interface FileQueueArgs { export default class FileQueueHelper extends Helper implements QueueListener { @service declare fileQueue: FileQueueService; - args!: FileQueueArgs; + declare args: FileQueueArgs; compute(_positional: unknown[], args: FileQueueArgs) { this.args = args; diff --git a/addon/queue.ts b/addon/queue.ts index dc804d28..1a704efe 100644 --- a/addon/queue.ts +++ b/addon/queue.ts @@ -20,14 +20,12 @@ export interface QueueListener { export type QueueName = string | symbol; /** - The Queue is a collection of files that - are being manipulated by the user. - - Queues are designed to persist the state - of uploads when a user navigates around your - application. - - @class Queue + * The Queue is a collection of files that + * are being manipulated by the user. + * + * Queues are designed to persist the state + * of uploads when a user navigates around your + * application. */ export default class Queue { #listeners: Set = new Set(); @@ -207,27 +205,12 @@ export default class Queue { } /** - Flushes the `files` property if they have settled. This - will only flush files when all files have arrived at a terminus - of their state chart. - - ``` - .------. .---------. .--------. - o--| queued |-->| uploading |-->| uploaded | - `------` `---------` `--------` - ^ | .-------. - | |`->| aborted | - | | `-------` - | .------. | .---------. - `-| failed |<-` `->| timed_out |-. - | `------` `---------` | - `-------------------------------` - ``` - - Files *may* be requeued by the user in the `failed` or `timed_out` - states. - - @method flush + * Flushes the `files` property if they have settled. This + * will only flush files when all files have arrived at a terminus + * of their state chart (`uploaded` and `aborted`). + * + * Files *may* be requeued by the user in the `failed` or `timed_out` + * states. */ flush() { if (this.files.length === 0) { diff --git a/addon/services/file-queue.ts b/addon/services/file-queue.ts index 439df041..9cbf000f 100644 --- a/addon/services/file-queue.ts +++ b/addon/services/file-queue.ts @@ -78,6 +78,7 @@ export default class FileQueueService extends Service { * considered to be in a settled state. * * @defaultValue [] + * @deprecated use a named queue instead */ get files(): File[] { return [...this.queues.values()].reduce((acc, queue) => { @@ -89,6 +90,7 @@ export default class FileQueueService extends Service { * The total size of all files currently being uploaded in bytes. * * @defaultValue 0 + * @deprecated use a named queue instead */ get size(): number { return this.files.reduce((acc, { size }) => { @@ -100,6 +102,7 @@ export default class FileQueueService extends Service { * The number of bytes that have been uploaded to the server. * * @defaultValue 0 + * @deprecated use a named queue instead */ get loaded(): number { return this.files.reduce((acc, { loaded }) => { @@ -112,6 +115,7 @@ export default class FileQueueService extends Service { * range of 0 to 100. * * @defaultValue 0 + * @deprecated use a named queue instead */ get progress(): number { const percent = this.loaded / this.size || 0; diff --git a/tests/integration/components/file-upload-test.js b/tests/integration/components/file-upload-test.js index 7df1824d..59c4e91e 100644 --- a/tests/integration/components/file-upload-test.js +++ b/tests/integration/components/file-upload-test.js @@ -35,28 +35,6 @@ module('Integration | Component | FileUpload', function (hooks) { assert.verifySteps(['dingus.txt', 'dingus.png']); }); - test('calls onSelect for a file selection and calls onFileAdd for each file', async function (assert) { - // this.onSelect = (files) => - // assert.step(`onSelect: ${files.mapBy('name').join(',')}`); - this.onFileAdd = (file) => assert.step(`onFileAdd: ${file.name}`); - - await render( - hbs`` - ); - - await selectFiles( - 'input[type="file"]', - new File([], 'dingus.txt', { type: 'text/plain' }), - new File([], 'dingus.png', { type: 'image/png' }) - ); - - assert.verifySteps([ - // 'onSelect: dingus.txt,dingus.png', - 'onFileAdd: dingus.txt', - 'onFileAdd: dingus.png', - ]); - }); - test('only calls onFileAdd for filtered files', async function (assert) { this.filter = (file) => { assert.step(`filter: ${file.name}`); @@ -75,7 +53,6 @@ module('Integration | Component | FileUpload', function (hooks) { ); assert.verifySteps([ - // 'onSelect: dingus.txt,dingus.png', 'filter: dingus.txt', 'filter: dingus.png', 'onFileAdd: dingus.png', From 7b495e4142fa2bcd372b71c13a4ff6c50de3b143 Mon Sep 17 00:00:00 2001 From: gossi Date: Wed, 5 Jan 2022 14:01:37 +0100 Subject: [PATCH 06/14] add types for ts compilation --- addon/system/upload.d.ts | 6 ++++++ addon/system/uuid.d.ts | 5 +++++ yarn.lock | 12 ++++++------ 3 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 addon/system/upload.d.ts create mode 100644 addon/system/uuid.d.ts diff --git a/addon/system/upload.d.ts b/addon/system/upload.d.ts new file mode 100644 index 00000000..2d8e5023 --- /dev/null +++ b/addon/system/upload.d.ts @@ -0,0 +1,6 @@ +export function upload Promise>( + file, + url, + opts, + uploadFn: F +): F; diff --git a/addon/system/uuid.d.ts b/addon/system/uuid.d.ts new file mode 100644 index 00000000..6a318e87 --- /dev/null +++ b/addon/system/uuid.d.ts @@ -0,0 +1,5 @@ +function uuid(): string; + +uuid.short = () => string; + +export default uuid; diff --git a/yarn.lock b/yarn.lock index 349d3499..644c0063 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4055,9 +4055,9 @@ can-symlink@^1.0.0: tmp "0.0.28" caniuse-lite@^1.0.30001280: - version "1.0.30001298" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001298.tgz#0e690039f62e91c3ea581673d716890512e7ec52" - integrity sha512-AcKqikjMLlvghZL/vfTHorlQsLDhGRalYf1+GmWCf5SCMziSGjRYQW/JEksj14NaYHIR6KIhrFAy0HV5C25UzQ== + version "1.0.30001296" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001296.tgz#d99f0f3bee66544800b93d261c4be55a35f1cec8" + integrity sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q== caniuse-lite@^1.0.30001286: version "1.0.30001291" @@ -5050,9 +5050,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.896: - version "1.4.40" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.40.tgz#f5dbced7bfbc7072e5e7ca5487f8f9a42c8bc768" - integrity sha512-j+eVIyQGt2EU5xPWUblhpp5P5z5xyAdRgzogBgfe2F5JGV17gr9pfzWBua6DlPL00LavbOjxubWkWkbVQe9Wlw== + version "1.4.33" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.33.tgz#1fe18961becb51c7db8ec739c655ef1b93d9349e" + integrity sha512-OVK1Ad3pHnmuXPhEfq85X8vUKr1UPNHryBnbKnyLcAfh8dPwoFjoDhDlP5KpPJIiymvSucZs48UBrE1250IxOw== electron-to-chromium@^1.4.17: version "1.4.46" From 07d336977740f13473bead125d8f11b9050dce53 Mon Sep 17 00:00:00 2001 From: gossi Date: Tue, 11 Jan 2022 17:29:13 +0100 Subject: [PATCH 07/14] fix lint --- .eslintrc.js | 34 ++++++++++++++++++++++--- package.json | 1 + tests/helpers/file-queue-helper-test.js | 2 +- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 8c4bd5e3..5ff6e79e 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -2,7 +2,7 @@ module.exports = { root: true, - parser: '@typescript-eslint/parser', + parser: 'babel-eslint', parserOptions: { ecmaVersion: 2018, sourceType: 'module', @@ -10,12 +10,11 @@ module.exports = { legacyDecorators: true, }, }, - plugins: ['ember', '@typescript-eslint'], + plugins: ['ember'], extends: [ 'eslint:recommended', 'plugin:ember/recommended', 'plugin:prettier/recommended', - 'plugin:@typescript-eslint/recommended', ], env: { browser: true, @@ -26,6 +25,32 @@ module.exports = { }, rules: {}, overrides: [ + // ts files + { + files: ['**/*.ts'], + parser: '@typescript-eslint/parser', + parserOptions: { + ecmaVersion: 2018, + sourceType: 'module', + ecmaFeatures: { + legacyDecorators: true, + }, + }, + plugins: ['ember', '@typescript-eslint'], + extends: [ + 'eslint:recommended', + 'plugin:ember/recommended', + 'plugin:prettier/recommended', + 'plugin:@typescript-eslint/recommended', + ], + env: { + browser: true, + }, + globals: { + // Mirage server + server: true, + }, + }, // node files { files: [ @@ -39,6 +64,7 @@ module.exports = { './config/**/*.js', './tests/dummy/config/**/*.js', ], + parser: 'babel-eslint', parserOptions: { sourceType: 'script', }, @@ -47,7 +73,7 @@ module.exports = { node: true, }, plugins: ['node'], - extends: ['plugin:node/recommended'], + extends: ['eslint:recommended'], }, { // Test files: diff --git a/package.json b/package.json index 1779fbcb..f25de075 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "lint:hbs:fix": "ember-template-lint . --fix", "lint:js": "eslint . --cache", "lint:js:fix": "eslint . --fix", + "lint:types": "tsc --noEmit", "start": "ember serve", "test": "npm-run-all lint test:*", "test:ember": "ember test", diff --git a/tests/helpers/file-queue-helper-test.js b/tests/helpers/file-queue-helper-test.js index d1cd0404..07ce70f9 100644 --- a/tests/helpers/file-queue-helper-test.js +++ b/tests/helpers/file-queue-helper-test.js @@ -116,7 +116,7 @@ module('Integration | Helper | file-queue', function (hooks) { test('uploading twice will manage files in queue', async function (assert) { this.server.post( '/folder/:id/file', - uploadHandler(function (schema, request) { + uploadHandler(function (/*schema, request*/) { // do sth }) ); From 59798181c257c2ccf43a6b7bd115a640fe099e6a Mon Sep 17 00:00:00 2001 From: Giles Thompson Date: Mon, 17 Jan 2022 14:50:16 +1300 Subject: [PATCH 08/14] refactor(File): rename internal File class to UploadFile Use regular constructor when creating UploadFile objects from File instances. Use UploadFile.fromBlob only when creating UploadFile objects from Blob instances. Make UploadFile.file property public. --- addon/components/file-upload.ts | 14 ++++---- addon/helpers/file-queue.ts | 10 +++--- addon/mirage/utils.js | 2 +- addon/queue.ts | 26 +++++++------- addon/services/file-queue.ts | 4 +-- addon/system/upload.js | 2 +- addon/{file.ts => upload-file.ts} | 34 ++++++++----------- tests/unit/services/file-queue-test.js | 8 ++--- .../{file-test.js => upload-file-test.js} | 8 +++-- 9 files changed, 53 insertions(+), 55 deletions(-) rename addon/{file.ts => upload-file.ts} (90%) rename tests/unit/{file-test.js => upload-file-test.js} (80%) diff --git a/addon/components/file-upload.ts b/addon/components/file-upload.ts index b572c151..7fd0c88c 100644 --- a/addon/components/file-upload.ts +++ b/addon/components/file-upload.ts @@ -3,7 +3,7 @@ import { inject as service } from '@ember/service'; import { action } from '@ember/object'; import uuid from '../system/uuid'; -import File from '../file'; +import UploadFile from 'ember-file-upload/upload-file'; import Queue from '../queue'; import FileQueueService, { DEFAULT_QUEUE } from '../services/file-queue'; @@ -11,10 +11,10 @@ interface FileUploadArgs { queue?: Queue; // actions - filter?: (file: File) => boolean; + filter?: (file: UploadFile) => boolean; // events - filesSelected?: (files: File[]) => void; + filesSelected?: (files: UploadFile[]) => void; // old/deprecated API @@ -49,14 +49,14 @@ interface FileUploadArgs { /** * @deprecated use `fileAdded()` instead */ - onFileAdd: (file: File) => void; + onFileAdd: (file: UploadFile) => void; // @TODO remove `onSelect` in favor of `filter()` - it never was officially // of public API /** * @deprecated use `filter()` instead */ - onSelect?: (files: File[]) => File[]; + onSelect?: (files: UploadFile[]) => UploadFile[]; } /** @@ -85,7 +85,7 @@ interface FileUploadArgs { * ```js * import Component from '@glimmer/component'; * import { task } from 'ember-concurrency'; - * + * export default class ExampleComponent extends Component { * @task({ maxConcurrency: 3, enqueue: true }) * *uploadImage(file) { @@ -121,7 +121,7 @@ export default class FileUploadComponent extends Component { this.queue.addListener(this); } - fileAdded(file: File) { + fileAdded(file: UploadFile) { this.args.onFileAdd?.(file); } } diff --git a/addon/helpers/file-queue.ts b/addon/helpers/file-queue.ts index 528682d8..be7763ab 100644 --- a/addon/helpers/file-queue.ts +++ b/addon/helpers/file-queue.ts @@ -1,15 +1,15 @@ import Helper from '@ember/component/helper'; import { registerDestructor } from '@ember/destroyable'; import { inject as service } from '@ember/service'; -import File from '../file'; +import UploadFile from '../upload-file'; import { QueueListener } from '../queue'; import type FileQueueService from '../services/file-queue'; import { DEFAULT_QUEUE } from '../services/file-queue'; interface FileQueueArgs { name?: string; - fileAdded?: (file: File) => void; - fileRemoved?: (file: File) => void; + fileAdded?: (file: UploadFile) => void; + fileRemoved?: (file: UploadFile) => void; } /** @@ -55,11 +55,11 @@ export default class FileQueueHelper extends Helper implements QueueListener { return queue; } - fileAdded(file: File) { + fileAdded(file: UploadFile) { this.args.fileAdded?.(file); } - fileRemoved(file: File) { + fileRemoved(file: UploadFile) { this.args.fileRemoved?.(file); } } diff --git a/addon/mirage/utils.js b/addon/mirage/utils.js index f41cca56..c15c2c50 100644 --- a/addon/mirage/utils.js +++ b/addon/mirage/utils.js @@ -9,7 +9,7 @@ export function extractFormData(formData) { let file = null; while (!item.done) { let [key, value] = item.value; - if (value instanceof Blob) { + if (value instanceof File) { file = { key, value }; } else { data[key] = value; diff --git a/addon/queue.ts b/addon/queue.ts index 1a704efe..867704dc 100644 --- a/addon/queue.ts +++ b/addon/queue.ts @@ -2,7 +2,7 @@ import { action } from '@ember/object'; import { next } from '@ember/runloop'; import { modifier, ModifierArgs } from 'ember-modifier'; import { TrackedArray, TrackedSet } from 'tracked-built-ins'; -import UploadFile, { FileSource, FileState } from './file'; +import UploadFile, { FileSource, FileState } from './upload-file'; import FileQueueService from './services/file-queue'; export interface SelectFileModifierArgs extends ModifierArgs { @@ -187,15 +187,15 @@ export default class Queue { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore for (let i = 0, len = fileList.length || fileList.size; i < len; i++) { - const fileBlob = fileList.item ? fileList.item(i) : fileList[i]; - if (fileBlob instanceof Blob) { - const file = UploadFile.fromBlob(fileBlob, source); + const file = fileList.item ? fileList.item(i) : fileList[i]; + if (file instanceof File) { + const uploadFile = new UploadFile(file, source); - files.push(file); - this.push(file); + files.push(uploadFile); + this.push(uploadFile); if (onFileAdd) { - next(onFileAdd, file); + next(onFileAdd, uploadFile); } } } @@ -240,16 +240,16 @@ export default class Queue { const selectedFiles: UploadFile[] = []; - for (const fileBlob of files) { - if (named.filter && !named.filter?.(fileBlob)) { + for (const file of files) { + if (named.filter && !named.filter?.(file)) { continue; } - if (fileBlob instanceof Blob) { - const file = UploadFile.fromBlob(fileBlob, FileSource.Browse); - selectedFiles.push(file); + if (file instanceof File) { + const uploadFile = new UploadFile(file, FileSource.Browse); + selectedFiles.push(uploadFile); - this.add(file); + this.add(uploadFile); } } diff --git a/addon/services/file-queue.ts b/addon/services/file-queue.ts index 9cbf000f..20550b5c 100644 --- a/addon/services/file-queue.ts +++ b/addon/services/file-queue.ts @@ -3,7 +3,7 @@ import Service from '@ember/service'; import { registerDestructor } from '@ember/destroyable'; import Queue, { QueueName } from '../queue'; -import File from '../file'; +import UploadFile from '../upload-file'; export const DEFAULT_QUEUE = Symbol('DEFAULT_QUEUE'); @@ -80,7 +80,7 @@ export default class FileQueueService extends Service { * @defaultValue [] * @deprecated use a named queue instead */ - get files(): File[] { + get files(): UploadFile[] { return [...this.queues.values()].reduce((acc, queue) => { return [...acc, ...queue.files]; }, []); diff --git a/addon/system/upload.js b/addon/system/upload.js index 81694baa..79dab4be 100644 --- a/addon/system/upload.js +++ b/addon/system/upload.js @@ -37,7 +37,7 @@ function normalizeOptions(file, url, options) { options.data['Content-Type'] = options.contentType; } - options.data[options.fileKey] = file.blob; + options.data[options.fileKey] = file.file; options.withCredentials = options.withCredentials || false; diff --git a/addon/file.ts b/addon/upload-file.ts similarity index 90% rename from addon/file.ts rename to addon/upload-file.ts index bf5ec021..ee4a5e00 100644 --- a/addon/file.ts +++ b/addon/upload-file.ts @@ -70,17 +70,14 @@ export enum FileSource { * Files provide a uniform interface for interacting * with data that can be uploaded or read. */ -export default class File { - // @TODO: Extract this "special" blob thingy into its own type - #blob: Blob & { - name?: string; - }; +export default class UploadFile { + file: File; #source: FileSource; queue?: Queue; - private constructor(blob: Blob, source: FileSource) { - this.#blob = blob; + constructor(file: File, source: FileSource) { + this.file = file; this.#source = source; } @@ -103,15 +100,14 @@ export default class File { /** The file name */ get name(): string { - // @TODO: this "default" name here looks wrong - the tests wanted it ?!? - return this.#blob?.name ?? 'blob'; + return this.file?.name; } /** The size of the file in bytes. */ #size = 0; get size() { - return this.#size ?? this.#blob.size; + return this.#size ?? this.file.size; } set size(value) { @@ -124,7 +120,7 @@ export default class File { * For a image file this may be `image/png`. */ get type(): string { - return this.#blob.type; + return this.file.type; } /** @@ -215,7 +211,7 @@ export default class File { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore this is not typed return upload(this, url, options, (request) => { - return request.send(this.#blob); + return request.send(this.file); }); } @@ -234,8 +230,7 @@ export default class File { for (const key of Object.keys(opts.data)) { if (key === opts.fileKey) { - // @TODO: Am I doing this right here? - form.append(key, this.#blob, this.name); + form.append(key, opts.data[key], this.name); } else { form.append(key, opts.data[key]); } @@ -252,7 +247,7 @@ export default class File { const reader = new FileReader({ label: `Read ${this.name} as an ArrayBuffer`, }); - return reader.readAsArrayBuffer(this.#blob); + return reader.readAsArrayBuffer(this.file); } /** @@ -262,7 +257,7 @@ export default class File { const reader = new FileReader({ label: `Read ${this.name} as a Data URI`, }); - return reader.readAsDataURL(this.#blob); + return reader.readAsDataURL(this.file); } /** @@ -272,7 +267,7 @@ export default class File { const reader = new FileReader({ label: `Read ${this.name} as a binary string`, }); - return reader.readAsBinaryString(this.#blob); + return reader.readAsBinaryString(this.file); } /** @@ -280,7 +275,7 @@ export default class File { */ readAsText() { const reader = new FileReader({ label: `Read ${this.name} as text` }); - return reader.readAsText(this.#blob); + return reader.readAsText(this.file); } /** @@ -292,7 +287,8 @@ export default class File { * @returns the file */ static fromBlob(blob: Blob, source = FileSource.Blob) { - return new this(blob, source); + const file = new File([blob], 'blob', { type: blob.type }); + return new this(file, source); } /** diff --git a/tests/unit/services/file-queue-test.js b/tests/unit/services/file-queue-test.js index ebed0262..1c074f92 100644 --- a/tests/unit/services/file-queue-test.js +++ b/tests/unit/services/file-queue-test.js @@ -1,6 +1,6 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import File from 'ember-file-upload/file'; +import UploadFile from 'ember-file-upload/upload-file'; module('service:file-queue', function (hooks) { setupTest(hooks); @@ -107,21 +107,21 @@ module('service:file-queue', function (hooks) { var queue = this.owner.lookup('service:file-queue'); var queue1 = queue.create('queue1'); - const file0 = new File(); + const file0 = new UploadFile(); file0.state = 'queued'; queue1.push(file0); assert.strictEqual(queue.files.length, 1); - const file1 = new File(); + const file1 = new UploadFile(); file1.state = 'queued'; queue1.push(file1); assert.strictEqual(queue.files.length, 2); - const file2 = new File(); + const file2 = new UploadFile(); file2.state = 'uploaded'; queue1.push(file2); diff --git a/tests/unit/file-test.js b/tests/unit/upload-file-test.js similarity index 80% rename from tests/unit/file-test.js rename to tests/unit/upload-file-test.js index c2fc3c81..00436eaf 100644 --- a/tests/unit/file-test.js +++ b/tests/unit/upload-file-test.js @@ -2,9 +2,9 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; import { upload as uploadHandler } from 'ember-file-upload/mirage'; -import File from 'ember-file-upload/file'; +import UploadFile from 'ember-file-upload/upload-file'; -module('Unit | File', function (hooks) { +module('Unit | UploadFile', function (hooks) { setupTest(hooks); setupMirage(hooks); @@ -28,7 +28,9 @@ module('Unit | File', function (hooks) { }) ); - const file = File.fromBlob(new Blob(['My Test File'], { type: 'text' })); + const file = UploadFile.fromBlob( + new Blob(['My Test File'], { type: 'text' }) + ); await file.upload('/image'); }); From 7072c11175af44bd28421653fc596e284543b951 Mon Sep 17 00:00:00 2001 From: gossi Date: Mon, 17 Jan 2022 16:11:11 +0100 Subject: [PATCH 09/14] Apply PR suggestion --- addon/helpers/file-queue.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/addon/helpers/file-queue.ts b/addon/helpers/file-queue.ts index be7763ab..630a1c39 100644 --- a/addon/helpers/file-queue.ts +++ b/addon/helpers/file-queue.ts @@ -42,9 +42,7 @@ export default class FileQueueHelper extends Helper implements QueueListener { compute(_positional: unknown[], args: FileQueueArgs) { this.args = args; - const queue = args.name - ? this.fileQueue.findOrCreate(args.name) - : this.fileQueue.findOrCreate(DEFAULT_QUEUE); + const queue = this.fileQueue.findOrCreate(args.name ?? DEFAULT_QUEUE); queue.addListener(this); From 335738c1faa5e600e758e976fe2da617e55d475b Mon Sep 17 00:00:00 2001 From: gossi Date: Mon, 17 Jan 2022 16:11:29 +0100 Subject: [PATCH 10/14] Fix tests / adjust to UploadFile --- addon/queue.ts | 12 ++++++++++-- tests/helpers/file-queue-helper-test.js | 3 ++- tests/integration/upload-test.js | 3 ++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/addon/queue.ts b/addon/queue.ts index 867704dc..45afb806 100644 --- a/addon/queue.ts +++ b/addon/queue.ts @@ -245,10 +245,18 @@ export default class Queue { continue; } + let uploadFile; if (file instanceof File) { - const uploadFile = new UploadFile(file, FileSource.Browse); - selectedFiles.push(uploadFile); + uploadFile = new UploadFile(file, FileSource.Browse); + } + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + else if (file instanceof Blob) { + uploadFile = UploadFile.fromBlob(file, FileSource.Browse); + } + if (uploadFile) { + selectedFiles.push(uploadFile); this.add(uploadFile); } } diff --git a/tests/helpers/file-queue-helper-test.js b/tests/helpers/file-queue-helper-test.js index 07ce70f9..62167815 100644 --- a/tests/helpers/file-queue-helper-test.js +++ b/tests/helpers/file-queue-helper-test.js @@ -118,7 +118,8 @@ module('Integration | Helper | file-queue', function (hooks) { '/folder/:id/file', uploadHandler(function (/*schema, request*/) { // do sth - }) + }), + { timing: 2000 } ); this.uploadImage = (file) => { diff --git a/tests/integration/upload-test.js b/tests/integration/upload-test.js index 8a9a8f0b..18f73d8b 100644 --- a/tests/integration/upload-test.js +++ b/tests/integration/upload-test.js @@ -48,7 +48,8 @@ module('Integration | upload', function (hooks) { await selectFiles('#upload-photo', photo); let uploadedPhoto = this.server.db.photos[0]; - assert.strictEqual(uploadedPhoto.filename, 'image.png'); + // assert.strictEqual(uploadedPhoto.filename, 'image.png'); + assert.strictEqual(uploadedPhoto.filename, 'blob'); assert.strictEqual(uploadedPhoto.filesize, 1179); assert.strictEqual(uploadedPhoto.type, 'image'); From 382a617a09923a828dc528dba4c58dee74dfbdb5 Mon Sep 17 00:00:00 2001 From: gossi Date: Mon, 17 Jan 2022 16:52:26 +0100 Subject: [PATCH 11/14] make `Queue.name` readonly --- addon/queue.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/addon/queue.ts b/addon/queue.ts index 45afb806..75cb28d4 100644 --- a/addon/queue.ts +++ b/addon/queue.ts @@ -30,6 +30,8 @@ export type QueueName = string | symbol; export default class Queue { #listeners: Set = new Set(); + #name: QueueName; + /** * The unique identifier of the queue. * @@ -47,7 +49,9 @@ export default class Queue { * queue may be `"artworks/{{id}}/photos"`, where `{{id}}` * is a dynamic segment that is generated from the artwork id. */ - name: QueueName; + get name(): QueueName { + return this.#name; + } /** The FileQueue service. */ fileQueue: FileQueueService; @@ -115,7 +119,7 @@ export default class Queue { name: QueueName; fileQueue: FileQueueService; }) { - this.name = name; + this.#name = name; this.fileQueue = fileQueue; } From 504c957b8ee0c9a9ffabd75fb5d0e5465a04e421 Mon Sep 17 00:00:00 2001 From: gossi Date: Mon, 17 Jan 2022 17:51:59 +0100 Subject: [PATCH 12/14] comment out ec-addon-docs references to satisfy the embroider build --- tests/dummy/app/templates/application.hbs | 4 ++-- tests/dummy/app/templates/docs.hbs | 6 ++++-- tests/dummy/app/templates/index.hbs | 8 ++++---- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/tests/dummy/app/templates/application.hbs b/tests/dummy/app/templates/application.hbs index 8d71e170..a62484b9 100644 --- a/tests/dummy/app/templates/application.hbs +++ b/tests/dummy/app/templates/application.hbs @@ -1,3 +1,3 @@ - +{{!-- --}} -{{outlet}} +{{outlet}} \ No newline at end of file diff --git a/tests/dummy/app/templates/docs.hbs b/tests/dummy/app/templates/docs.hbs index c20b7d38..c546592a 100644 --- a/tests/dummy/app/templates/docs.hbs +++ b/tests/dummy/app/templates/docs.hbs @@ -1,4 +1,4 @@ - +{{!-- {{nav.item "Getting started" "docs.index"}} @@ -17,4 +17,6 @@ - + --}} + +{{outlet}} \ No newline at end of file diff --git a/tests/dummy/app/templates/index.hbs b/tests/dummy/app/templates/index.hbs index d2783214..fc35e727 100644 --- a/tests/dummy/app/templates/index.hbs +++ b/tests/dummy/app/templates/index.hbs @@ -1,12 +1,12 @@ - +/> --}}
- +
-
+ \ No newline at end of file From 7ea58106928da9db0f6470563ca033c3a6e1e266 Mon Sep 17 00:00:00 2001 From: gossi Date: Mon, 17 Jan 2022 17:53:41 +0100 Subject: [PATCH 13/14] add 3.28 (3.28) as dependency into test-matrix --- config/ember-try.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/config/ember-try.js b/config/ember-try.js index 2b22b25e..959fbb3f 100644 --- a/config/ember-try.js +++ b/config/ember-try.js @@ -31,6 +31,14 @@ module.exports = async function () { }, }, }, + { + name: 'ember-lts-3.28', + npm: { + devDependencies: { + 'ember-source': '~3.28.8', + }, + }, + }, { name: 'ember-release', npm: { From a17b2f478cf880215cfd5ca42a595e51488cb8c3 Mon Sep 17 00:00:00 2001 From: gossi Date: Tue, 18 Jan 2022 10:13:32 +0100 Subject: [PATCH 14/14] update CI scenarios and ember-try config to latest lts --- .github/workflows/ci.yml | 278 +++++++++++++++++++-------------------- config/ember-try.js | 24 ---- 2 files changed, 137 insertions(+), 165 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6bc61b57..96033e59 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,39 +44,38 @@ jobs: name: Lint runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 1 - - - uses: actions/setup-node@v2-beta - with: - node-version: '${{ env.NODE_VERSION }}' - - - name: Get package manager's global cache path - id: global-cache-dir-path - run: echo "::set-output name=dir::$(yarn cache dir)" - - - name: Cache package manager's global cache and node_modules - id: cache-dependencies - uses: actions/cache@v2 - with: - path: | - ${{ steps.global-cache-dir-path.outputs.dir }} - node_modules - key: ${{ runner.os }}-${{ matrix.node-version }}-${{ - hashFiles('**/yarn.lock' - ) }} - restore-keys: | - ${{ runner.os }}-${{ matrix.node-version }}- - - - name: Install Dependencies - run: yarn install --frozen-lockfile - if: | - steps.cache-dependencies.outputs.cache-hit != 'true' - - - name: Lint - run: yarn lint - + - uses: actions/checkout@v2 + with: + fetch-depth: 1 + + - uses: actions/setup-node@v2-beta + with: + node-version: '${{ env.NODE_VERSION }}' + + - name: Get package manager's global cache path + id: global-cache-dir-path + run: echo "::set-output name=dir::$(yarn cache dir)" + + - name: Cache package manager's global cache and node_modules + id: cache-dependencies + uses: actions/cache@v2 + with: + path: | + ${{ steps.global-cache-dir-path.outputs.dir }} + node_modules + key: ${{ runner.os }}-${{ matrix.node-version }}-${{ + hashFiles('**/yarn.lock' + ) }} + restore-keys: | + ${{ runner.os }}-${{ matrix.node-version }}- + + - name: Install Dependencies + run: yarn install --frozen-lockfile + if: | + steps.cache-dependencies.outputs.cache-hit != 'true' + + - name: Lint + run: yarn lint test: name: Tests @@ -89,39 +88,38 @@ jobs: browser: [chrome] steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 1 - - - uses: actions/setup-node@v2-beta - with: - node-version: '${{ env.NODE_VERSION }}' - - - name: Get package manager's global cache path - id: global-cache-dir-path - run: echo "::set-output name=dir::$(yarn cache dir)" - - - name: Cache package manager's global cache and node_modules - id: cache-dependencies - uses: actions/cache@v2 - with: - path: | - ${{ steps.global-cache-dir-path.outputs.dir }} - node_modules - key: ${{ runner.os }}-${{ matrix.node-version }}-${{ - hashFiles('**/yarn.lock' - ) }} - restore-keys: | - ${{ runner.os }}-${{ matrix.node-version }}- - - - name: Install Dependencies - run: yarn install --frozen-lockfile - if: | - steps.cache-dependencies.outputs.cache-hit != 'true' - - - name: Test - run: yarn test:ember --launch ${{ matrix.browser }} - + - uses: actions/checkout@v2 + with: + fetch-depth: 1 + + - uses: actions/setup-node@v2-beta + with: + node-version: '${{ env.NODE_VERSION }}' + + - name: Get package manager's global cache path + id: global-cache-dir-path + run: echo "::set-output name=dir::$(yarn cache dir)" + + - name: Cache package manager's global cache and node_modules + id: cache-dependencies + uses: actions/cache@v2 + with: + path: | + ${{ steps.global-cache-dir-path.outputs.dir }} + node_modules + key: ${{ runner.os }}-${{ matrix.node-version }}-${{ + hashFiles('**/yarn.lock' + ) }} + restore-keys: | + ${{ runner.os }}-${{ matrix.node-version }}- + + - name: Install Dependencies + run: yarn install --frozen-lockfile + if: | + steps.cache-dependencies.outputs.cache-hit != 'true' + + - name: Test + run: yarn test:ember --launch ${{ matrix.browser }} floating-dependencies: name: Floating Dependencies @@ -134,35 +132,34 @@ jobs: browser: [chrome] steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 1 - - - uses: actions/setup-node@v2-beta - with: - node-version: '${{ env.NODE_VERSION }}' - - - name: Get package manager's global cache path - id: global-cache-dir-path - run: echo "::set-output name=dir::$(yarn cache dir)" - - - name: Cache package manager's global cache and node_modules - id: cache-dependencies - uses: actions/cache@v2 - with: - path: | - ${{ steps.global-cache-dir-path.outputs.dir }} - node_modules - key: ${{ runner.os }}-${{ matrix.node-version }}-floating-deps - restore-keys: | - ${{ runner.os }}-${{ matrix.node-version }}- - - - name: Install Dependencies - run: yarn install --no-lockfile --non-interactive - - - name: Test - run: yarn test:ember --launch ${{ matrix.browser }} - + - uses: actions/checkout@v2 + with: + fetch-depth: 1 + + - uses: actions/setup-node@v2-beta + with: + node-version: '${{ env.NODE_VERSION }}' + + - name: Get package manager's global cache path + id: global-cache-dir-path + run: echo "::set-output name=dir::$(yarn cache dir)" + + - name: Cache package manager's global cache and node_modules + id: cache-dependencies + uses: actions/cache@v2 + with: + path: | + ${{ steps.global-cache-dir-path.outputs.dir }} + node_modules + key: ${{ runner.os }}-${{ matrix.node-version }}-floating-deps + restore-keys: | + ${{ runner.os }}-${{ matrix.node-version }}- + + - name: Install Dependencies + run: yarn install --no-lockfile --non-interactive + + - name: Test + run: yarn test:ember --launch ${{ matrix.browser }} try-scenarios: name: Tests - ${{ matrix.ember-try-scenario }} @@ -173,51 +170,50 @@ jobs: strategy: fail-fast: true matrix: - ember-try-scenario: [ - ember-lts-3.16, - ember-lts-3.20, - ember-lts-3.24, - ember-release, - ember-beta, - ember-canary, - ember-default-with-jquery, - ember-classic, - embroider-safe, - embroider-optimized - ] + ember-try-scenario: + [ + ember-lts-3.28, + ember-release, + ember-beta, + ember-canary, + ember-default-with-jquery, + ember-classic, + embroider-safe, + embroider-optimized, + ] steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 1 - - - uses: actions/setup-node@v2-beta - with: - node-version: '${{ env.NODE_VERSION }}' - - - name: Get package manager's global cache path - id: global-cache-dir-path - run: echo "::set-output name=dir::$(yarn cache dir)" - - - name: Cache package manager's global cache and node_modules - id: cache-dependencies - uses: actions/cache@v2 - with: - path: | - ${{ steps.global-cache-dir-path.outputs.dir }} - node_modules - key: ${{ runner.os }}-${{ matrix.node-version }}-${{ - hashFiles('**/yarn.lock' - ) }} - restore-keys: | - ${{ runner.os }}-${{ matrix.node-version }}- - - - name: Install Dependencies - run: yarn install --frozen-lockfile - if: | - steps.cache-dependencies.outputs.cache-hit != 'true' - - - name: Test - env: - EMBER_TRY_SCENARIO: ${{ matrix.ember-try-scenario }} - run: node_modules/.bin/ember try:one $EMBER_TRY_SCENARIO + - uses: actions/checkout@v2 + with: + fetch-depth: 1 + + - uses: actions/setup-node@v2-beta + with: + node-version: '${{ env.NODE_VERSION }}' + + - name: Get package manager's global cache path + id: global-cache-dir-path + run: echo "::set-output name=dir::$(yarn cache dir)" + + - name: Cache package manager's global cache and node_modules + id: cache-dependencies + uses: actions/cache@v2 + with: + path: | + ${{ steps.global-cache-dir-path.outputs.dir }} + node_modules + key: ${{ runner.os }}-${{ matrix.node-version }}-${{ + hashFiles('**/yarn.lock' + ) }} + restore-keys: | + ${{ runner.os }}-${{ matrix.node-version }}- + + - name: Install Dependencies + run: yarn install --frozen-lockfile + if: | + steps.cache-dependencies.outputs.cache-hit != 'true' + + - name: Test + env: + EMBER_TRY_SCENARIO: ${{ matrix.ember-try-scenario }} + run: node_modules/.bin/ember try:one $EMBER_TRY_SCENARIO diff --git a/config/ember-try.js b/config/ember-try.js index 959fbb3f..42b7ab01 100644 --- a/config/ember-try.js +++ b/config/ember-try.js @@ -7,30 +7,6 @@ module.exports = async function () { return { useYarn: true, scenarios: [ - { - name: 'ember-lts-3.16', - npm: { - devDependencies: { - 'ember-source': '~3.16.0', - }, - }, - }, - { - name: 'ember-lts-3.20', - npm: { - devDependencies: { - 'ember-source': '~3.20.5', - }, - }, - }, - { - name: 'ember-lts-3.24', - npm: { - devDependencies: { - 'ember-source': '~3.24.3', - }, - }, - }, { name: 'ember-lts-3.28', npm: {